From 18d57a38021a7fee9d8f2131f776946d81c83fbe Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 19 Jun 2020 19:58:56 -0400 Subject: [PATCH 01/85] Document some overworld and field effects --- data/field_effect_scripts.s | 420 ++++----- data/io_reg.s | 37 - data/maps/BirthIsland_Exterior/scripts.inc | 4 +- gflib/io_reg.c | 36 + gflib/io_reg.h | 7 + .../pics/{unknown_29.png => sand_pile.png} | Bin .../{unknown_35.png => small_sparkle.png} | Bin ...ry_tree_growth_sparkle.png => sparkle.png} | Bin graphics/field_effects/pics/unknown_18.png | Bin 344 -> 0 bytes graphics/field_effects/pics/unused_grass.png | Bin 389 -> 344 bytes .../field_effects/pics/unused_grass_2.png | Bin 0 -> 389 bytes include/constants/field_effects.h | 44 +- include/event_scripts.h | 22 + include/field_camera.h | 2 +- include/field_control_avatar.h | 2 +- include/field_effect.h | 6 +- include/field_player_avatar.h | 4 +- include/field_screen_effect.h | 2 + include/fieldmap.h | 12 +- include/fldeff.h | 8 +- include/global.fieldmap.h | 16 +- include/menu.h | 6 +- include/overworld.h | 9 +- ld_script.txt | 2 +- spritesheet_rules.mk | 10 +- src/battle_pyramid_bag.c | 4 +- src/berry_crush.c | 2 +- src/berry_tag_screen.c | 4 +- src/bike.c | 8 +- src/braille_puzzles.c | 4 +- .../field_effect_object_template_pointers.h | 92 +- src/data/field_effects/field_effect_objects.h | 118 +-- .../object_events/object_event_graphics.h | 18 +- src/dodrio_berry_picking.c | 2 +- src/event_object_movement.c | 4 +- src/faraway_island.c | 3 +- src/field_camera.c | 40 +- src/field_control_avatar.c | 4 +- src/field_effect.c | 869 +++++++++--------- src/field_effect_helpers.c | 78 +- src/field_player_avatar.c | 42 +- src/field_region_map.c | 4 +- src/field_screen_effect.c | 29 +- src/fieldmap.c | 38 +- src/fldeff_cut.c | 4 +- src/fldeff_dig.c | 2 +- src/fldeff_escalator.c | 217 +++-- src/fldeff_flash.c | 2 +- src/fldeff_misc.c | 12 +- src/fldeff_rocksmash.c | 49 +- src/fldeff_strength.c | 2 +- src/fldeff_sweetscent.c | 2 +- src/fldeff_teleport.c | 4 +- src/hall_of_fame.c | 2 +- src/item_menu.c | 4 +- src/menu.c | 50 +- src/move_relearner.c | 6 +- src/naming_screen.c | 2 +- src/overworld.c | 265 +++--- src/party_menu.c | 4 +- src/pokeblock.c | 4 +- src/pokeblock_feed.c | 4 +- src/pokemon_storage_system.c | 4 +- src/pokemon_summary_screen.c | 4 +- src/rayquaza_scene.c | 4 +- src/region_map.c | 4 +- src/reset_rtc_screen.c | 4 +- src/roulette.c | 2 +- src/shop.c | 4 +- src/starter_choose.c | 4 +- src/wallclock.c | 4 +- 71 files changed, 1379 insertions(+), 1302 deletions(-) delete mode 100644 data/io_reg.s create mode 100644 gflib/io_reg.c create mode 100644 gflib/io_reg.h rename graphics/field_effects/pics/{unknown_29.png => sand_pile.png} (100%) rename graphics/field_effects/pics/{unknown_35.png => small_sparkle.png} (100%) rename graphics/field_effects/pics/{berry_tree_growth_sparkle.png => sparkle.png} (100%) delete mode 100644 graphics/field_effects/pics/unknown_18.png create mode 100644 graphics/field_effects/pics/unused_grass_2.png diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 4aef859d8e..2eddf3126c 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -1,345 +1,345 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" + .include "asm/macros.inc" + .include "constants/constants.inc" - .section script_data, "aw", %progbits + .section script_data, "aw", %progbits - .align 2 + .align 2 gFieldEffectScriptPointers:: @ 82DB9D4 - .4byte gFieldEffectScript_ExclamationMarkIcon1 - .4byte gFieldEffectScript_UseCutOnTallGrass - .4byte gFieldEffectScript_UseCutOnTree - .4byte gFieldEffectScript_Shadow - .4byte gFieldEffectScript_TallGrass - .4byte gFieldEffectScript_Ripple - .4byte gFieldEffectScript_FieldMoveShowMon - .4byte gFieldEffectScript_Ash - .4byte gFieldEffectScript_SurfBlob - .4byte gFieldEffectScript_UseSurf - .4byte gFieldEffectScript_GroundImpactDust - .4byte gFieldEffectScript_UseSecretPowerCave - .4byte gFieldEffectScript_BikeHopTallGrass - .4byte gFieldEffectScript_SandFootprints - .4byte gFieldEffectScript_BikeHopBigSplash - .4byte gFieldEffectScript_Splash - .4byte gFieldEffectScript_BikeHopSmallSplash - .4byte gFieldEffectScript_LongGrass - .4byte gFieldEffectScript_JumpLongGrass - .4byte gFieldEffectScript_Unknown19 - .4byte gFieldEffectScript_Unknown20 - .4byte gFieldEffectScript_Unknown21 - .4byte gFieldEffectScript_Unknown22 - .4byte gFieldEffectScript_BerryTreeGrowthSparkle - .4byte gFieldEffectScript_DeepSandFootprints - .4byte gFieldEffectScript_PokeCenterHeal - .4byte gFieldEffectScript_UseSecretPowerTree - .4byte gFieldEffectScript_UseSecretPowerShrub - .4byte gFieldEffectScript_TreeDisguise - .4byte gFieldEffectScript_MountainDisguise - .4byte gFieldEffectScript_NPCUseFly - .4byte gFieldEffectScript_UseFly - .4byte gFieldEffectScript_FlyIn - .4byte gFieldEffectScript_QuestionMarkIcon - .4byte gFieldEffectScript_FeetInFlowingWater - .4byte gFieldEffectScript_BikeTireTracks - .4byte gFieldEffectScript_SandDisguisePlaceholder - .4byte gFieldEffectScript_UseRockSmash - .4byte gFieldEffectScript_UseDig - .4byte gFieldEffectScript_SandPile - .4byte gFieldEffectScript_UseStrength - .4byte gFieldEffectScript_ShortGrass - .4byte gFieldEffectScript_HotSpringsWater - .4byte gFieldEffectScript_UseWaterfall - .4byte gFieldEffectScript_UseDive - .4byte gFieldEffectScript_Pokeball - .4byte gFieldEffectScript_HeartIcon - .4byte gFieldEffectScript_Unknown47 - .4byte gFieldEffectScript_Unknown48 - .4byte gFieldEffectScript_JumpOutOfAsh - .4byte gFieldEffectScript_LavaridgeGymWarp - .4byte gFieldEffectScript_SweetScent - .4byte gFieldEffectScript_SandPillar - .4byte gFieldEffectScript_Bubbles - .4byte gFieldEffectScript_Sparkle - .4byte gFieldEffectScript_ShowSecretPowerCave - .4byte gFieldEffectScript_ShowSecretPowerTree - .4byte gFieldEffectScript_ShowSecretPowerShrub - .4byte gFieldEffectScript_ShowCutGrass - .4byte gFieldEffectScript_FieldMoveShowMonInit - .4byte gFieldEffectScript_UsePuzzleEffect - .4byte gFieldEffectScript_SecretBaseBootPC - .4byte gFieldEffectScript_HallOfFameRecord - .4byte gFieldEffectScript_UseTeleport - .4byte gFieldEffectScript_Rayquaza - .4byte gFieldEffectScript_Unknown65 - .4byte gFieldEffectScript_MoveDeoxysRock + .4byte gFieldEffectScript_ExclamationMarkIcon1 @ FLDEFF_EXCLAMATION_MARK_ICON + .4byte gFieldEffectScript_UseCutOnTallGrass @ FLDEFF_USE_CUT_ON_GRASS + .4byte gFieldEffectScript_UseCutOnTree @ FLDEFF_USE_CUT_ON_TREE + .4byte gFieldEffectScript_Shadow @ FLDEFF_SHADOW + .4byte gFieldEffectScript_TallGrass @ FLDEFF_TALL_GRASS + .4byte gFieldEffectScript_Ripple @ FLDEFF_RIPPLE + .4byte gFieldEffectScript_FieldMoveShowMon @ FLDEFF_FIELD_MOVE_SHOW_MON + .4byte gFieldEffectScript_Ash @ FLDEFF_ASH + .4byte gFieldEffectScript_SurfBlob @ FLDEFF_SURF_BLOB + .4byte gFieldEffectScript_UseSurf @ FLDEFF_USE_SURF + .4byte gFieldEffectScript_GroundImpactDust @ FLDEFF_DUST + .4byte gFieldEffectScript_UseSecretPowerCave @ FLDEFF_USE_SECRET_POWER_CAVE + .4byte gFieldEffectScript_BikeHopTallGrass @ FLDEFF_JUMP_TALL_GRASS + .4byte gFieldEffectScript_SandFootprints @ FLDEFF_SAND_FOOTPRINTS + .4byte gFieldEffectScript_BikeHopBigSplash @ FLDEFF_JUMP_BIG_SPLASH + .4byte gFieldEffectScript_Splash @ FLDEFF_SPLASH + .4byte gFieldEffectScript_BikeHopSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH + .4byte gFieldEffectScript_LongGrass @ FLDEFF_LONG_GRASS + .4byte gFieldEffectScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS + .4byte gFieldEffectScript_Unknown19 @ FLDEFF_UNKNOWN_19 + .4byte gFieldEffectScript_UnusedGrass @ FLDEFF_UNUSED_GRASS + .4byte gFieldEffectScript_Unknown21 @ FLDEFF_UNKNOWN_21 + .4byte gFieldEffectScript_Unknown22 @ FLDEFF_UNKNOWN_22 + .4byte gFieldEffectScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE + .4byte gFieldEffectScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS + .4byte gFieldEffectScript_PokeCenterHeal @ FLDEFF_POKECENTER_HEAL + .4byte gFieldEffectScript_UseSecretPowerTree @ FLDEFF_USE_SECRET_POWER_TREE + .4byte gFieldEffectScript_UseSecretPowerShrub @ FLDEFF_USE_SECRET_POWER_SHRUB + .4byte gFieldEffectScript_TreeDisguise @ FLDEFF_TREE_DISGUISE + .4byte gFieldEffectScript_MountainDisguise @ FLDEFF_MOUNTAIN_DISGUISE + .4byte gFieldEffectScript_NPCUseFly @ FLDEFF_NPCFLY_OUT + .4byte gFieldEffectScript_UseFly @ FLDEFF_USE_FLY + .4byte gFieldEffectScript_FlyIn @ FLDEFF_FLY_IN + .4byte gFieldEffectScript_QuestionMarkIcon @ FLDEFF_QUESTION_MARK_ICON + .4byte gFieldEffectScript_FeetInFlowingWater @ FLDEFF_FEET_IN_FLOWING_WATER + .4byte gFieldEffectScript_BikeTireTracks @ FLDEFF_BIKE_TIRE_TRACKS + .4byte gFieldEffectScript_SandDisguisePlaceholder @ FLDEFF_SAND_DISGUISE + .4byte gFieldEffectScript_UseRockSmash @ FLDEFF_USE_ROCK_SMASH + .4byte gFieldEffectScript_UseDig @ FLDEFF_USE_DIG + .4byte gFieldEffectScript_SandPile @ FLDEFF_SAND_PILE + .4byte gFieldEffectScript_UseStrength @ FLDEFF_USE_STRENGTH + .4byte gFieldEffectScript_ShortGrass @ FLDEFF_SHORT_GRASS + .4byte gFieldEffectScript_HotSpringsWater @ FLDEFF_HOT_SPRINGS_WATER + .4byte gFieldEffectScript_UseWaterfall @ FLDEFF_USE_WATERFALL + .4byte gFieldEffectScript_UseDive @ FLDEFF_USE_DIVE + .4byte gFieldEffectScript_Pokeball @ FLDEFF_POKEBALL + .4byte gFieldEffectScript_HeartIcon @ FLDEFF_HEART_ICON + .4byte gFieldEffectScript_Unknown47 @ FLDEFF_NOP_47 + .4byte gFieldEffectScript_Unknown48 @ FLDEFF_NOP_48 + .4byte gFieldEffectScript_JumpOutOfAsh @ FLDEFF_POP_OUT_OF_ASH + .4byte gFieldEffectScript_LavaridgeGymWarp @ FLDEFF_LAVARIDGE_GYM_WARP + .4byte gFieldEffectScript_SweetScent @ FLDEFF_SWEET_SCENT + .4byte gFieldEffectScript_SandPillar @ FLDEFF_SAND_PILLAR + .4byte gFieldEffectScript_Bubbles @ FLDEFF_BUBBLES + .4byte gFieldEffectScript_Sparkle @ FLDEFF_SPARKLE + .4byte gFieldEffectScript_ShowSecretPowerCave @ FLDEFF_SECRET_POWER_CAVE + .4byte gFieldEffectScript_ShowSecretPowerTree @ FLDEFF_SECRET_POWER_TREE + .4byte gFieldEffectScript_ShowSecretPowerShrub @ FLDEFF_SECRET_POWER_SHRUB + .4byte gFieldEffectScript_ShowCutGrass @ FLDEFF_CUT_GRASS + .4byte gFieldEffectScript_FieldMoveShowMonInit @ FLDEFF_FIELD_MOVE_SHOW_MON_INIT + .4byte gFieldEffectScript_UsePuzzleEffect @ FLDEFF_USE_TOMB_PUZZLE_EFFECT + .4byte gFieldEffectScript_SecretBaseBootPC @ FLDEFF_PCTURN_ON + .4byte gFieldEffectScript_HallOfFameRecord @ FLDEFF_HALL_OF_FAME_RECORD + .4byte gFieldEffectScript_UseTeleport @ FLDEFF_USE_TELEPORT + .4byte gFieldEffectScript_Rayquaza @ FLDEFF_RAYQUAZA + .4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK + .4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK gFieldEffectScript_ExclamationMarkIcon1:: @ 82DBAE0 - field_eff_callnative FldEff_ExclamationMarkIcon - field_eff_end + field_eff_callnative FldEff_ExclamationMarkIcon + field_eff_end gFieldEffectScript_UseCutOnTallGrass:: @ 82DBAE6 - field_eff_callnative FldEff_UseCutOnGrass - field_eff_end + field_eff_callnative FldEff_UseCutOnGrass + field_eff_end gFieldEffectScript_UseCutOnTree:: @ 82DBAEC - field_eff_callnative FldEff_UseCutOnTree - field_eff_end + field_eff_callnative FldEff_UseCutOnTree + field_eff_end gFieldEffectScript_Shadow:: @ 82DBAF2 - field_eff_callnative FldEff_Shadow - field_eff_end + field_eff_callnative FldEff_Shadow + field_eff_end gFieldEffectScript_TallGrass:: @ 82DBAF8 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_TallGrass - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_TallGrass + field_eff_end gFieldEffectScript_Ripple:: @ 82DBB02 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Ripple - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Ripple + field_eff_end gFieldEffectScript_FieldMoveShowMon:: @ 82DBB0C - field_eff_callnative FldEff_FieldMoveShowMon - field_eff_end + field_eff_callnative FldEff_FieldMoveShowMon + field_eff_end gFieldEffectScript_Ash:: @ 82DBB12 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Ash - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Ash + field_eff_end gFieldEffectScript_SurfBlob:: @ 82DBB1C - field_eff_callnative FldEff_SurfBlob - field_eff_end + field_eff_callnative FldEff_SurfBlob + field_eff_end gFieldEffectScript_UseSurf:: @ 82DBB22 - field_eff_callnative FldEff_UseSurf - field_eff_end + field_eff_callnative FldEff_UseSurf + field_eff_end gFieldEffectScript_GroundImpactDust:: @ 82DBB28 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Dust - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Dust + field_eff_end gFieldEffectScript_UseSecretPowerCave:: @ 82DBB32 - field_eff_callnative FldEff_UseSecretPowerCave - field_eff_end + field_eff_callnative FldEff_UseSecretPowerCave + field_eff_end gFieldEffectScript_BikeHopTallGrass:: @ 82DBB38 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpTallGrass - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpTallGrass + field_eff_end gFieldEffectScript_SandFootprints:: @ 82DBB42 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_SandFootprints - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_SandFootprints + field_eff_end gFieldEffectScript_BikeHopBigSplash:: @ 82DBB4C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpBigSplash - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpBigSplash + field_eff_end gFieldEffectScript_Splash:: @ 82DBB56 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Splash - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Splash + field_eff_end gFieldEffectScript_BikeHopSmallSplash:: @ 82DBB60 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpSmallSplash - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpSmallSplash + field_eff_end gFieldEffectScript_LongGrass:: @ 82DBB6A - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_LongGrass - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_LongGrass + field_eff_end gFieldEffectScript_JumpLongGrass:: @ 82DBB74 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpLongGrass - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpLongGrass + field_eff_end gFieldEffectScript_Unknown19:: @ 82DBB7E - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Unknown19 - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Unknown19 + field_eff_end -gFieldEffectScript_Unknown20:: @ 82DBB88 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Unknown20 - field_eff_end +gFieldEffectScript_UnusedGrass:: @ 82DBB88 + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_UnusedGrass + field_eff_end gFieldEffectScript_Unknown21:: @ 82DBB92 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown21 - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown21 + field_eff_end gFieldEffectScript_Unknown22:: @ 82DBB9C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown22 - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown22 + field_eff_end gFieldEffectScript_BerryTreeGrowthSparkle:: @ 82DBBA6 - field_eff_callnative FldEff_BerryTreeGrowthSparkle - field_eff_end + field_eff_callnative FldEff_BerryTreeGrowthSparkle + field_eff_end gFieldEffectScript_DeepSandFootprints:: @ 82DBBAC - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_DeepSandFootprints - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_DeepSandFootprints + field_eff_end gFieldEffectScript_PokeCenterHeal:: @ 82DBBB6 - field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_PokecenterHeal - field_eff_end + field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4 + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_PokecenterHeal + field_eff_end gFieldEffectScript_UseSecretPowerTree:: @ 82DBBC5 - field_eff_callnative FldEff_UseSecretPowerTree - field_eff_end + field_eff_callnative FldEff_UseSecretPowerTree + field_eff_end gFieldEffectScript_UseSecretPowerShrub:: @ 82DBBCB - field_eff_callnative FldEff_UseSecretPowerShrub - field_eff_end + field_eff_callnative FldEff_UseSecretPowerShrub + field_eff_end gFieldEffectScript_TreeDisguise:: @ 82DBBD1 - field_eff_callnative ShowTreeDisguiseFieldEffect - field_eff_end + field_eff_callnative ShowTreeDisguiseFieldEffect + field_eff_end gFieldEffectScript_MountainDisguise:: @ 82DBBD7 - field_eff_callnative ShowMountainDisguiseFieldEffect - field_eff_end + field_eff_callnative ShowMountainDisguiseFieldEffect + field_eff_end gFieldEffectScript_NPCUseFly:: @ 82DBBDD - field_eff_callnative FldEff_NPCFlyOut - field_eff_end + field_eff_callnative FldEff_NPCFlyOut + field_eff_end gFieldEffectScript_UseFly:: @ 82DBBE3 - field_eff_callnative FldEff_UseFly - field_eff_end + field_eff_callnative FldEff_UseFly + field_eff_end gFieldEffectScript_FlyIn:: @ 82DBBE9 - field_eff_callnative FldEff_FlyIn - field_eff_end + field_eff_callnative FldEff_FlyIn + field_eff_end gFieldEffectScript_QuestionMarkIcon:: @ 82DBBEF - field_eff_callnative FldEff_QuestionMarkIcon - field_eff_end + field_eff_callnative FldEff_QuestionMarkIcon + field_eff_end gFieldEffectScript_FeetInFlowingWater:: @ 82DBBF5 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_FeetInFlowingWater - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_FeetInFlowingWater + field_eff_end gFieldEffectScript_BikeTireTracks:: @ 82DBBFF - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_BikeTireTracks - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_BikeTireTracks + field_eff_end gFieldEffectScript_SandDisguisePlaceholder:: @ 82DBC09 - field_eff_callnative ShowSandDisguiseFieldEffect - field_eff_end + field_eff_callnative ShowSandDisguiseFieldEffect + field_eff_end gFieldEffectScript_UseRockSmash:: @ 82DBC0F - field_eff_callnative FldEff_UseRockSmash - field_eff_end + field_eff_callnative FldEff_UseRockSmash + field_eff_end gFieldEffectScript_UseStrength:: @ 82DBC15 - field_eff_callnative sub_8145E2C - field_eff_end + field_eff_callnative sub_8145E2C + field_eff_end gFieldEffectScript_UseDig:: @ 82DBC1B - field_eff_callnative FldEff_UseDig - field_eff_end + field_eff_callnative FldEff_UseDig + field_eff_end gFieldEffectScript_SandPile:: @ 82DBC21 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_SandPile - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_SandPile + field_eff_end gFieldEffectScript_ShortGrass:: @ 82DBC2B - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_ShortGrass - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_ShortGrass + field_eff_end gFieldEffectScript_HotSpringsWater:: @ 82DBC35 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_HotSpringsWater - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_HotSpringsWater + field_eff_end gFieldEffectScript_UseWaterfall:: @ 82DBC3F - field_eff_callnative FldEff_UseWaterfall - field_eff_end + field_eff_callnative FldEff_UseWaterfall + field_eff_end gFieldEffectScript_UseDive:: @ 82DBC45 - field_eff_callnative FldEff_UseDive - field_eff_end + field_eff_callnative FldEff_UseDive + field_eff_end gFieldEffectScript_Pokeball:: @ 82DBC4B - field_eff_loadpal gFieldEffectObjectPaletteInfo10 - field_eff_callnative FldEff_Pokeball - field_eff_end + field_eff_loadpal gFieldEffectObjectPaletteInfo10 + field_eff_callnative FldEff_Pokeball + field_eff_end gFieldEffectScript_HeartIcon:: @ 82DBC56 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_HeartIcon - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_HeartIcon + field_eff_end gFieldEffectScript_Unknown47:: @ 82DBC60 - field_eff_callnative FldEff_NopA6FC - field_eff_end + field_eff_callnative FldEff_NopA6FC + field_eff_end gFieldEffectScript_Unknown48:: @ 82DBC66 - field_eff_callnative FldEff_NopA700 - field_eff_end + field_eff_callnative FldEff_NopA700 + field_eff_end gFieldEffectScript_JumpOutOfAsh:: @ 82DBC6C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_PopOutOfAsh - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_PopOutOfAsh + field_eff_end gFieldEffectScript_LavaridgeGymWarp:: @ 82DBC76 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_LavaridgeGymWarp - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_LavaridgeGymWarp + field_eff_end gFieldEffectScript_SweetScent:: @ 82DBC80 - field_eff_callnative FldEff_SweetScent - field_eff_end + field_eff_callnative FldEff_SweetScent + field_eff_end gFieldEffectScript_SandPillar:: @ 82DBC86 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo9, FldEff_SandPillar - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo9, FldEff_SandPillar + field_eff_end gFieldEffectScript_Bubbles:: @ 82DBC90 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Bubbles - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Bubbles + field_eff_end gFieldEffectScript_Sparkle:: @ 82DBC9A - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo3, FldEff_Sparkle - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo3, FldEff_Sparkle + field_eff_end gFieldEffectScript_ShowSecretPowerCave:: @ 82DBCA4 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo7, FldEff_SecretPowerCave - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo7, FldEff_SecretPowerCave + field_eff_end gFieldEffectScript_ShowSecretPowerTree:: @ 82DBCAE - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo8, FldEff_SecretPowerTree - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo8, FldEff_SecretPowerTree + field_eff_end gFieldEffectScript_ShowSecretPowerShrub:: @ 82DBCB8 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo8, FldEff_SecretPowerShrub - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo8, FldEff_SecretPowerShrub + field_eff_end gFieldEffectScript_ShowCutGrass:: @ 82DBCC2 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo6, FldEff_CutGrass - field_eff_end + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo6, FldEff_CutGrass + field_eff_end gFieldEffectScript_FieldMoveShowMonInit:: @ 82DBCCC - field_eff_callnative FldEff_FieldMoveShowMonInit - field_eff_end + field_eff_callnative FldEff_FieldMoveShowMonInit + field_eff_end gFieldEffectScript_UsePuzzleEffect:: @ 82DBCD2 - field_eff_callnative FldEff_UsePuzzleEffect - field_eff_end + field_eff_callnative FldEff_UsePuzzleEffect + field_eff_end gFieldEffectScript_SecretBaseBootPC:: @ 82DBCD8 - field_eff_callnative FldEff_SecretBasePCTurnOn - field_eff_end + field_eff_callnative FldEff_SecretBasePCTurnOn + field_eff_end gFieldEffectScript_HallOfFameRecord:: @ 82DBCDE - field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo5, FldEff_HallOfFameRecord - field_eff_end + field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4 + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo5, FldEff_HallOfFameRecord + field_eff_end gFieldEffectScript_UseTeleport:: @ 82DBCED - field_eff_callnative FldEff_UseTeleport - field_eff_end + field_eff_callnative FldEff_UseTeleport + field_eff_end gFieldEffectScript_Rayquaza:: @ 82DBCF3 - field_eff_callnative sub_80B8F98 - field_eff_end + field_eff_callnative sub_80B8F98 + field_eff_end -gFieldEffectScript_Unknown65:: @ 82DBCF9 - field_eff_callnative sub_80B9ADC - field_eff_end +gFieldEffectScript_DestroyDeoxysRock:: @ 82DBCF9 + field_eff_callnative FldEff_DestroyDeoxysRock + field_eff_end gFieldEffectScript_MoveDeoxysRock:: @ 82DBCFF - field_eff_callnative Fldeff_MoveDeoxysRock - field_eff_end + field_eff_callnative FldEff_MoveDeoxysRock + field_eff_end diff --git a/data/io_reg.s b/data/io_reg.s deleted file mode 100644 index 0941b4345b..0000000000 --- a/data/io_reg.s +++ /dev/null @@ -1,37 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - - -.align 2 -gUnref_82EC784:: @ 82EC784 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x04000008 - .4byte 0x0400000A - .4byte 0x0400000C - .4byte 0x0400000E - .4byte 0x04000010 - .4byte 0x04000014 - .4byte 0x04000018 - .4byte 0x0400001C - .4byte 0x04000012 - .4byte 0x04000016 - .4byte 0x0400001A - .4byte 0x0400001E - .4byte 0x02000100 - .4byte 0x08000400 - -gOverworldBackgroundLayerFlags:: @ 82EC7C4 - .2byte BLDCNT_TGT2_BG0 - .2byte BLDCNT_TGT2_BG1 - .2byte BLDCNT_TGT2_BG2 - .2byte BLDCNT_TGT2_BG3 - -gOrbEffectBackgroundLayerFlags:: @ 82EC7CC - .2byte BLDCNT_TGT1_BG0 - .2byte BLDCNT_TGT1_BG1 - .2byte BLDCNT_TGT1_BG2 - .2byte BLDCNT_TGT1_BG3 diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 8cf47bfdb4..d3963958b1 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -68,9 +68,9 @@ BirthIsland_Exterior_EventScript_Deoxys:: @ 8267FC1 setfieldeffectargument 0, 1 setfieldeffectargument 1, 58 setfieldeffectargument 2, 26 - dofieldeffect FLDEFF_65 + dofieldeffect FLDEFF_DESTROY_DEOXYS_ROCK playbgm MUS_RG_DEOEYE, 0 - waitfieldeffect FLDEFF_65 + waitfieldeffect FLDEFF_DESTROY_DEOXYS_ROCK addobject 2 applymovement 2, BirthIsland_Exterior_Movement_DeoxysApproach waitmovement 0 diff --git a/gflib/io_reg.c b/gflib/io_reg.c new file mode 100644 index 0000000000..44364349d9 --- /dev/null +++ b/gflib/io_reg.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "io_reg.h" +#include "gba/io_reg.h" + +static const u32 sUnused[] = { + 0, + 0, + (1 << 26) | (1 << 3), + (1 << 26) | (1 << 3) | (1 << 1), + (1 << 26) | (1 << 3) | (1 << 2), + (1 << 26) | (1 << 3) | (1 << 2) | (1 << 1), + (1 << 26) | (1 << 4), + (1 << 26) | (1 << 4) | (1 << 2), + (1 << 26) | (1 << 4) | (1 << 3), + (1 << 26) | (1 << 4) | (1 << 3) | (1 << 2), + (1 << 26) | (1 << 4) | (1 << 1), + (1 << 26) | (1 << 4) | (1 << 2) | (1 << 1), + (1 << 26) | (1 << 4) | (1 << 3) | (1 << 1), + (1 << 26) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1), + (1 << 25) | (1 << 8), + (1 << 27) | (1 << 10), +}; + +const u16 gOverworldBackgroundLayerFlags[] = { + BLDCNT_TGT2_BG0, + BLDCNT_TGT2_BG1, + BLDCNT_TGT2_BG2, + BLDCNT_TGT2_BG3, +}; + +const u16 gOrbEffectBackgroundLayerFlags[] = { + BLDCNT_TGT1_BG0, + BLDCNT_TGT1_BG1, + BLDCNT_TGT1_BG2, + BLDCNT_TGT1_BG3, +}; diff --git a/gflib/io_reg.h b/gflib/io_reg.h new file mode 100644 index 0000000000..82d2fc5ed9 --- /dev/null +++ b/gflib/io_reg.h @@ -0,0 +1,7 @@ +#ifndef GUARD_IO_REG_H +#define GUARD_IO_REG_H + +extern const u16 gOverworldBackgroundLayerFlags[]; +extern const u16 gOrbEffectBackgroundLayerFlags[]; + +#endif // GUARD_IO_REG_H diff --git a/graphics/field_effects/pics/unknown_29.png b/graphics/field_effects/pics/sand_pile.png similarity index 100% rename from graphics/field_effects/pics/unknown_29.png rename to graphics/field_effects/pics/sand_pile.png diff --git a/graphics/field_effects/pics/unknown_35.png b/graphics/field_effects/pics/small_sparkle.png similarity index 100% rename from graphics/field_effects/pics/unknown_35.png rename to graphics/field_effects/pics/small_sparkle.png diff --git a/graphics/field_effects/pics/berry_tree_growth_sparkle.png b/graphics/field_effects/pics/sparkle.png similarity index 100% rename from graphics/field_effects/pics/berry_tree_growth_sparkle.png rename to graphics/field_effects/pics/sparkle.png diff --git a/graphics/field_effects/pics/unknown_18.png b/graphics/field_effects/pics/unknown_18.png deleted file mode 100644 index 65f4d97e29f9d738995b8e5e67053d3d0d99cd74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)%W`?qaOPi_P|w=Kqv~VzjK3q}9c9#iT*BgBYZ0)|W4J0002v zNklyiR;lE?ZvEWtaeaEh7>Yp#i3@awkjx2U|P7&dxZ qwRy^&G(+uS(C)MozC?BEcm4v??T4!bpiRC20000yiR;lE?ZvEWtaeaEh7>Yp#iUaJE)9r_=1fWg600000NkvXX Hu0mjfA|iaY delta 303 zcmV+~0nq-~0)+#RUw;7*NklqBOO3N`=9&Yf;Kro zMG`W_3_JU@#voIN(*F@7Zcz~X1N{!|6t+SHP!ezIr1Z(=mC>W+~=Oq;>EPAZgj1ejA@|^((Qi6$6&40)OEW0#zPTg1qEXlYu zFT}uNFm{f?DY^jWi}+(g4|5NmoF1NMh7Mg^qd|-XlT*vJSQS}(3lr0~zu248Ps_>n zJPR`YZ`;?Q-l$x0oNlua4)>eume;|lC;ysU;REh z!Sqx8Cz%W`?qaOPi_P|w=Kqv~VzjK3q}9c9#iT*BgBYZ0)|W4J0003H zNklqBOO3N`=9&Yf;KroMG`W_3_JU@#voIN(*F@7 zZcz~X1N{!|6t+SHP!ezIr1Z(=mC>W+~ z=Oq;>EPAZgj1ejA@|^((Qi6$6&By{QyEJxA-B<-I$+$Ex#K2-Oc8j_+vs3 za}S=J9-e204qaTML5u~HQ_Hnj66Vtc9*qhT&%gOdU3o`w0+t;Dqs9bTJZnF>$ z_nYgM*TJbL|Dc^^2K#XmTtz0QZ~~9heuBr#PfmAV{XROu^i%yOnfC>^`>Po`{Z!xK jB4$eu> 16; gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback; @@ -411,7 +411,7 @@ bool32 BrailleWait_CheckButtonPress(void) // this used to be FldEff_UseFlyAncientTomb . why did GF merge the 2 functions? bool8 FldEff_UsePuzzleEffect(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); if (sBraillePuzzleCallbackFlag == REGISTEEL_PUZZLE) { diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h index de39e6db34..12ed63df3f 100755 --- a/src/data/field_effects/field_effect_object_template_pointers.h +++ b/src/data/field_effects/field_effect_object_template_pointers.h @@ -8,70 +8,70 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Ash; const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob; const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow; const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopTallGrass; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass; const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopBigSplash; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash; const struct SpriteTemplate gFieldEffectObjectTemplate_Splash; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopSmallSplash; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash; const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown16; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass; const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass; const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19; const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown21; -const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle; +const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion; +const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle; const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints; const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise; const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise; const struct SpriteTemplate gFieldEffectObjectTemplate_Bird; const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks; const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown29; +const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile; const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass; const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh; const struct SpriteTemplate gFieldEffectObjectTemplate_LavaridgeGymWarp; const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown35; +const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle; const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza; const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { - &gFieldEffectObjectTemplate_ShadowSmall, - &gFieldEffectObjectTemplate_ShadowMedium, - &gFieldEffectObjectTemplate_ShadowLarge, - &gFieldEffectObjectTemplate_ShadowExtraLarge, - &gFieldEffectObjectTemplate_TallGrass, - &gFieldEffectObjectTemplate_Ripple, - &gFieldEffectObjectTemplate_Ash, - &gFieldEffectObjectTemplate_SurfBlob, - &gFieldEffectObjectTemplate_Arrow, - &gFieldEffectObjectTemplate_GroundImpactDust, - &gFieldEffectObjectTemplate_BikeHopTallGrass, - &gFieldEffectObjectTemplate_SandFootprints, - &gFieldEffectObjectTemplate_BikeHopBigSplash, - &gFieldEffectObjectTemplate_Splash, - &gFieldEffectObjectTemplate_BikeHopSmallSplash, - &gFieldEffectObjectTemplate_LongGrass, - &gFieldEffectObjectTemplate_Unknown16, - &gFieldEffectObjectTemplate_Unknown17, - &gFieldEffectObjectTemplate_Unknown18, - &gFieldEffectObjectTemplate_Unknown19, - &gFieldEffectObjectTemplate_Unknown20, - &gFieldEffectObjectTemplate_Unknown21, - &gFieldEffectObjectTemplate_BerryTreeGrowthSparkle, - &gFieldEffectObjectTemplate_DeepSandFootprints, - &gFieldEffectObjectTemplate_TreeDisguise, - &gFieldEffectObjectTemplate_MountainDisguise, - &gFieldEffectObjectTemplate_Bird, - &gFieldEffectObjectTemplate_BikeTireTracks, - &gFieldEffectObjectTemplate_SandDisguisePlaceholder, - &gFieldEffectObjectTemplate_Unknown29, - &gFieldEffectObjectTemplate_ShortGrass, - &gFieldEffectObjectTemplate_HotSpringsWater, - &gFieldEffectObjectTemplate_JumpOutOfAsh, - &gFieldEffectObjectTemplate_LavaridgeGymWarp, - &gFieldEffectObjectTemplate_Bubbles, - &gFieldEffectObjectTemplate_Unknown35, - &gFieldEffectObjectTemplate_Rayquaza, + [FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall, + [FLDEFFOBJ_SHADOW_M] = &gFieldEffectObjectTemplate_ShadowMedium, + [FLDEFFOBJ_SHADOW_L] = &gFieldEffectObjectTemplate_ShadowLarge, + [FLDEFFOBJ_SHADOW_XL] = &gFieldEffectObjectTemplate_ShadowExtraLarge, + [FLDEFFOBJ_TALL_GRASS] = &gFieldEffectObjectTemplate_TallGrass, + [FLDEFFOBJ_RIPPLE] = &gFieldEffectObjectTemplate_Ripple, + [FLDEFFOBJ_ASH] = &gFieldEffectObjectTemplate_Ash, + [FLDEFFOBJ_SURF_BLOB] = &gFieldEffectObjectTemplate_SurfBlob, + [FLDEFFOBJ_ARROW] = &gFieldEffectObjectTemplate_Arrow, + [FLDEFFOBJ_GROUND_IMPACT_DUST] = &gFieldEffectObjectTemplate_GroundImpactDust, + [FLDEFFOBJ_JUMP_TALL_GRASS] = &gFieldEffectObjectTemplate_JumpTallGrass, + [FLDEFFOBJ_SAND_FOOTPRINTS] = &gFieldEffectObjectTemplate_SandFootprints, + [FLDEFFOBJ_JUMP_BIG_SPLASH] = &gFieldEffectObjectTemplate_JumpBigSplash, + [FLDEFFOBJ_SPLASH] = &gFieldEffectObjectTemplate_Splash, + [FLDEFFOBJ_JUMP_SMALL_SPLASH] = &gFieldEffectObjectTemplate_JumpSmallSplash, + [FLDEFFOBJ_LONG_GRASS] = &gFieldEffectObjectTemplate_LongGrass, + [FLDEFFOBJ_JUMP_LONG_GRASS] = &gFieldEffectObjectTemplate_JumpLongGrass, + [FLDEFFOBJ_17] = &gFieldEffectObjectTemplate_Unknown17, + [FLDEFFOBJ_UNUSED_GRASS] = &gFieldEffectObjectTemplate_UnusedGrass, + [FLDEFFOBJ_19] = &gFieldEffectObjectTemplate_Unknown19, + [FLDEFFOBJ_20] = &gFieldEffectObjectTemplate_Unknown20, + [FLDEFFOBJ_REFLECTION_DISTORTION] = &gFieldEffectObjectTemplate_ReflectionDistortion, + [FLDEFFOBJ_SPARKLE] = &gFieldEffectObjectTemplate_Sparkle, + [FLDEFFOBJ_DEEP_SAND_FOOTPRINTS] = &gFieldEffectObjectTemplate_DeepSandFootprints, + [FLDEFFOBJ_TREE_DISGUISE] = &gFieldEffectObjectTemplate_TreeDisguise, + [FLDEFFOBJ_MOUNTAIN_DISGUISE] = &gFieldEffectObjectTemplate_MountainDisguise, + [FLDEFFOBJ_BIRD] = &gFieldEffectObjectTemplate_Bird, + [FLDEFFOBJ_BIKE_TIRE_TRACKS] = &gFieldEffectObjectTemplate_BikeTireTracks, + [FLDEFFOBJ_SAND_DISGUISE] = &gFieldEffectObjectTemplate_SandDisguisePlaceholder, + [FLDEFFOBJ_SAND_PILE] = &gFieldEffectObjectTemplate_SandPile, + [FLDEFFOBJ_SHORT_GRASS] = &gFieldEffectObjectTemplate_ShortGrass, + [FLDEFFOBJ_HOT_SPRINGS_WATER] = &gFieldEffectObjectTemplate_HotSpringsWater, + [FLDEFFOBJ_JUMP_OUT_OF_ASH] = &gFieldEffectObjectTemplate_JumpOutOfAsh, + [FLDEFFOBJ_LAVARIDGE_GYM_WARP] = &gFieldEffectObjectTemplate_LavaridgeGymWarp, + [FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles, + [FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle, + [FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza, }; diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 65f35107d7..4654a133ac 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -225,11 +225,11 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_GroundImpactDust[] = const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_GroundImpactDust, gFieldEffectObjectPicTable_GroundImpactDust, gDummySpriteAffineAnimTable, sub_8156194}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeHopTallGrass[] = { - overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 0), - overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 1), - overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 2), - overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 3), +const struct SpriteFrameImage gFieldEffectObjectPicTable_JumpTallGrass[] = { + overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 0), + overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 1), + overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 2), + overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 3), }; const union AnimCmd gFieldEffectObjectImageAnim_850CCD8[] = @@ -241,12 +241,12 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CCD8[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopTallGrass[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_JumpTallGrass[] = { gFieldEffectObjectImageAnim_850CCD8, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopTallGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_BikeHopTallGrass, gFieldEffectObjectPicTable_BikeHopTallGrass, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_JumpTallGrass, gFieldEffectObjectPicTable_JumpTallGrass, gDummySpriteAffineAnimTable, sub_8156194}; const struct SpriteFrameImage gFieldEffectObjectPicTable_SandFootprints[] = { overworld_frame(gFieldEffectObjectPic_SandFootprints, 2, 2, 0), @@ -398,11 +398,11 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeTireTracks[] = const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BikeTireTracks, gFieldEffectObjectPicTable_BikeTireTracks, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeHopBigSplash[] = { - overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 3), +const struct SpriteFrameImage gFieldEffectObjectPicTable_JumpBigSplash[] = { + overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 3), }; const union AnimCmd gFieldEffectObjectImageAnim_850CE7C[] = @@ -414,12 +414,12 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CE7C[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopBigSplash[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_JumpBigSplash[] = { gFieldEffectObjectImageAnim_850CE7C, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopBigSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BikeHopBigSplash, gFieldEffectObjectPicTable_BikeHopBigSplash, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_JumpBigSplash, gFieldEffectObjectPicTable_JumpBigSplash, gDummySpriteAffineAnimTable, sub_8156194}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Splash[] = { overworld_frame(gFieldEffectObjectPic_Splash, 2, 1, 0), @@ -454,10 +454,10 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Splash[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Splash, gFieldEffectObjectPicTable_Splash, gDummySpriteAffineAnimTable, UpdateSplashFieldEffect}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeHopSmallSplash[] = { - overworld_frame(gFieldEffectObjectPic_BikeHopSmallSplash, 2, 1, 0), - overworld_frame(gFieldEffectObjectPic_BikeHopSmallSplash, 2, 1, 1), - overworld_frame(gFieldEffectObjectPic_BikeHopSmallSplash, 2, 1, 2), +const struct SpriteFrameImage gFieldEffectObjectPicTable_JumpSmallSplash[] = { + overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 0), + overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 1), + overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 2), }; const union AnimCmd gFieldEffectObjectImageAnim_850CF24[] = @@ -468,12 +468,12 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CF24[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopSmallSplash[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_JumpSmallSplash[] = { gFieldEffectObjectImageAnim_850CF24, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopSmallSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_BikeHopSmallSplash, gFieldEffectObjectPicTable_BikeHopSmallSplash, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_JumpSmallSplash, gFieldEffectObjectPicTable_JumpSmallSplash, gDummySpriteAffineAnimTable, sub_8156194}; const struct SpriteFrameImage gFieldEffectObjectPicTable_LongGrass[] = { overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 0), @@ -501,13 +501,13 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_LongGrass[] = const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_LongGrass, gFieldEffectObjectPicTable_LongGrass, gDummySpriteAffineAnimTable, UpdateLongGrassFieldEffect}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown16[] = { - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 3), - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 4), - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 6), +const struct SpriteFrameImage gFieldEffectObjectPicTable_JumpLongGrass[] = { + overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 4), + overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 6), }; const union AnimCmd gFieldEffectObjectImageAnim_850CFDC[] = @@ -521,15 +521,15 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CFDC[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown16[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_JumpLongGrass[] = { gFieldEffectObjectImageAnim_850CFDC, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown16 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown16, gFieldEffectObjectPicTable_Unknown16, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_JumpLongGrass, gFieldEffectObjectPicTable_JumpLongGrass, gDummySpriteAffineAnimTable, sub_8156194}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown17[] = { - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 6), + overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 6), overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 2), @@ -561,11 +561,11 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown17[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown17, gFieldEffectObjectPicTable_Unknown17, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown18[] = { - overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 3), +const struct SpriteFrameImage gFieldEffectObjectPicTable_UnusedGrass[] = { + overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 3), }; const union AnimCmd gFieldEffectObjectImageAnim_850D0C0[] = @@ -579,12 +579,12 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D0C0[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown18[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_UnusedGrass[] = { gFieldEffectObjectImageAnim_850D0C0, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown18, gFieldEffectObjectPicTable_Unknown18, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_UnusedGrass, gFieldEffectObjectPicTable_UnusedGrass, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown19[] = { overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 0), @@ -609,10 +609,10 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown19[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown19, gFieldEffectObjectPicTable_Unknown19, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown29[] = { - overworld_frame(gFieldEffectObjectPic_Unknown29, 2, 1, 0), - overworld_frame(gFieldEffectObjectPic_Unknown29, 2, 1, 1), - overworld_frame(gFieldEffectObjectPic_Unknown29, 2, 1, 2), +const struct SpriteFrameImage gFieldEffectObjectPicTable_SandPile[] = { + overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 0), + overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 1), + overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 2), }; const union AnimCmd gFieldEffectObjectImageAnim_850D160[] = @@ -623,12 +623,12 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D160[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown29[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_SandPile[] = { gFieldEffectObjectImageAnim_850D160, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown29 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Unknown29, gFieldEffectObjectPicTable_Unknown29, gDummySpriteAffineAnimTable, UpdateSandPileFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_SandPile, gFieldEffectObjectPicTable_SandPile, gDummySpriteAffineAnimTable, UpdateSandPileFieldEffect}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown20[] = { overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 0), @@ -683,21 +683,21 @@ const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D234[] = AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gFieldEffectObjectRotScalAnimTable_Unknown21[] = +const union AffineAnimCmd *const gFieldEffectObjectRotScalAnimTable_ReflectionDistortion[] = { gFieldEffectObjectRotScalAnim_850D1E4, gFieldEffectObjectRotScalAnim_850D234, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown21 = {0x0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gFieldEffectObjectRotScalAnimTable_Unknown21, SpriteCallbackDummy}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion = {0x0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gFieldEffectObjectRotScalAnimTable_ReflectionDistortion, SpriteCallbackDummy}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_BerryTreeGrowthSparkle[] = { - overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 3), - overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 4), - overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 5), +const struct SpriteFrameImage gFieldEffectObjectPicTable_Sparkle[] = { + overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 4), + overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 5), }; const union AnimCmd gFieldEffectObjectImageAnim_850D2D4[] = @@ -725,12 +725,12 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D2D4[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_Sparkle[] = { gFieldEffectObjectImageAnim_850D2D4, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle, gFieldEffectObjectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Sparkle, gFieldEffectObjectPicTable_Sparkle, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectObjectPicTable_TreeDisguise[] = { overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 0), @@ -970,9 +970,9 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Bubbles[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_Bubbles, gFieldEffectObjectPicTable_Bubbles, gDummySpriteAffineAnimTable, UpdateBubblesFieldEffect}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown35[] = { - overworld_frame(gFieldEffectObjectPic_Unknown35, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_Unknown35, 2, 2, 1), +const struct SpriteFrameImage gFieldEffectObjectPicTable_SmallSparkle[] = { + overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 1), }; const union AnimCmd gFieldEffectObjectImageAnim_850D674[] = @@ -983,12 +983,12 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D674[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown35[] = +const union AnimCmd *const gFieldEffectObjectImageAnimTable_SmallSparkle[] = { gFieldEffectObjectImageAnim_850D674, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown35 = {0xFFFF, 0x100F, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown35, gFieldEffectObjectPicTable_Unknown35, gDummySpriteAffineAnimTable, UpdateSparkleFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle = {0xFFFF, 0x100F, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_SmallSparkle, gFieldEffectObjectPicTable_SmallSparkle, gDummySpriteAffineAnimTable, UpdateSparkleFieldEffect}; const struct SpritePalette gFieldEffectObjectPaletteInfo3 = {gFieldEffectObjectPalette3, 0x100F}; diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 769a6bb0a1..371ff38159 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -252,7 +252,7 @@ const u32 gObjectEventPic_CableCar[] = INCBIN_U32("graphics/object_events/pics/m const u16 gObjectEventPalette20[] = INCBIN_U16("graphics/object_events/palettes/20.gbapal"); const u32 gObjectEventPic_SSTidal[] = INCBIN_U32("graphics/object_events/pics/misc/ss_tidal.4bpp"); const u16 gObjectEventPalette21[] = INCBIN_U16("graphics/object_events/palettes/21.gbapal"); -const u32 gFieldEffectObjectPic_BerryTreeGrowthSparkle[] = INCBIN_U32("graphics/field_effects/pics/berry_tree_growth_sparkle.4bpp"); +const u32 gFieldEffectObjectPic_Sparkle[] = INCBIN_U32("graphics/field_effects/pics/sparkle.4bpp"); const u32 gObjectEventPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/object_events/pics/berry_trees/dirt_pile.4bpp"); const u32 gObjectEventPic_BerryTreeSprout[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sprout.4bpp"); const u32 gObjectEventPic_PechaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pecha.4bpp"); @@ -303,11 +303,11 @@ const u32 gFieldEffectObjectPic_Arrow[] = INCBIN_U32("graphics/field_effects/pic const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/00.gbapal"); const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/01.gbapal"); const u32 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U32("graphics/field_effects/pics/ground_impact_dust.4bpp"); -const u32 gFieldEffectObjectPic_BikeHopTallGrass[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_tall_grass.4bpp"); -const u32 gUnusedGrass[] = INCBIN_U32("graphics/field_effects/pics/unused_grass.4bpp"); -const u32 gFieldEffectObjectPic_Unknown16[] = INCBIN_U32("graphics/field_effects/pics/unknown_16.4bpp"); +const u32 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_tall_grass.4bpp"); +const u32 gUnusedGrass[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_2.4bpp"); +const u32 gFieldEffectObjectPic_JumpLongGrass[] = INCBIN_U32("graphics/field_effects/pics/unknown_16.4bpp"); const u32 gFieldEffectObjectPic_Unknown17[] = INCBIN_U32("graphics/field_effects/pics/unknown_17.4bpp"); -const u32 gFieldEffectObjectPic_Unknown18[] = INCBIN_U32("graphics/field_effects/pics/unknown_18.4bpp"); +const u32 gFieldEffectObjectPic_UnusedGrass[] = INCBIN_U32("graphics/field_effects/pics/unused_grass.4bpp"); const u32 gFieldEffectObjectPic_LongGrass[] = INCBIN_U32("graphics/field_effects/pics/long_grass.4bpp"); const u32 gFieldEffectObjectPic_TallGrass[] = INCBIN_U32("graphics/field_effects/pics/tall_grass.4bpp"); const u32 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U32("graphics/field_effects/pics/short_grass.4bpp"); @@ -315,10 +315,10 @@ const u32 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U32("graphics/field_ef const u32 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U32("graphics/field_effects/pics/deep_sand_footprints.4bpp"); const u32 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U32("graphics/field_effects/pics/bike_tire_tracks.4bpp"); const u32 gFieldEffectObjectPic_Unknown19[] = INCBIN_U32("graphics/field_effects/pics/unknown_19.4bpp"); -const u32 gFieldEffectObjectPic_Unknown29[] = INCBIN_U32("graphics/field_effects/pics/unknown_29.4bpp"); -const u32 gFieldEffectObjectPic_BikeHopBigSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_big_splash.4bpp"); +const u32 gFieldEffectObjectPic_SandPile[] = INCBIN_U32("graphics/field_effects/pics/sand_pile.4bpp"); +const u32 gFieldEffectObjectPic_JumpBigSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_big_splash.4bpp"); const u32 gFieldEffectObjectPic_Splash[] = INCBIN_U32("graphics/field_effects/pics/splash.4bpp"); -const u32 gFieldEffectObjectPic_BikeHopSmallSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_small_splash.4bpp"); +const u32 gFieldEffectObjectPic_JumpSmallSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_small_splash.4bpp"); const u32 gFieldEffectObjectPic_Unknown20[] = INCBIN_U32("graphics/field_effects/pics/unknown_20.4bpp"); const u32 gFieldEffectObjectPic_TreeDisguise[] = INCBIN_U32("graphics/field_effects/pics/tree_disguise.4bpp"); const u32 gFieldEffectObjectPic_MountainDisguise[] = INCBIN_U32("graphics/field_effects/pics/mountain_disguise.4bpp"); @@ -328,7 +328,7 @@ const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/field_effects/pale const u32 gFieldEffectObjectPic_JumpOutOfAsh[] = INCBIN_U32("graphics/field_effects/pics/jump_out_of_ash.4bpp"); const u32 gFieldEffectObjectPic_LavaridgeGymWarp[] = INCBIN_U32("graphics/field_effects/pics/lavaridge_gym_warp.4bpp"); const u32 gFieldEffectObjectPic_Bubbles[] = INCBIN_U32("graphics/field_effects/pics/bubbles.4bpp"); -const u32 gFieldEffectObjectPic_Unknown35[] = INCBIN_U32("graphics/field_effects/pics/unknown_35.4bpp"); +const u32 gFieldEffectObjectPic_SmallSparkle[] = INCBIN_U32("graphics/field_effects/pics/small_sparkle.4bpp"); const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/field_effects/palettes/03.gbapal"); const u32 gFieldEffectObjectPic_Bird[] = INCBIN_U32("graphics/field_effects/pics/bird.4bpp"); const u32 gObjectEventPic_Juan[] = INCBIN_U32("graphics/object_events/pics/people/gym_leaders/juan.4bpp"); diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 262b7d1112..7101c0d816 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -4629,7 +4629,7 @@ static void sub_802A7A8(void) ChangeBgX(3, 0, 0); ChangeBgY(3, 0, 0); InitStandardTextBoxWindows(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); SetBgTilemapBuffer(3, gUnknown_02022CF8->tilemapBuffers[0]); SetBgTilemapBuffer(1, gUnknown_02022CF8->tilemapBuffers[1]); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index d6a2fe2ec0..724d95a297 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1121,13 +1121,13 @@ void ResetObjectEvents(void) static void CreateReflectionEffectSprites(void) { - u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31); + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_REFLECTION_DISTORTION], 0, 0, 31); gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; InitSpriteAffineAnim(&gSprites[spriteId]); StartSpriteAffineAnim(&gSprites[spriteId], 0); gSprites[spriteId].invisible = TRUE; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_REFLECTION_DISTORTION], 0, 0, 31); gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; InitSpriteAffineAnim(&gSprites[spriteId]); StartSpriteAffineAnim(&gSprites[spriteId], 1); diff --git a/src/faraway_island.c b/src/faraway_island.c index f8e3eac145..4233c43d80 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -6,6 +6,7 @@ #include "metatile_behavior.h" #include "sprite.h" #include "constants/event_objects.h" +#include "constants/field_effects.h" #include "constants/flags.h" #include "constants/maps.h" #include "constants/metatile_behaviors.h" @@ -379,7 +380,7 @@ void sub_81D4A90(void) x = mew->currentCoords.x; y = mew->currentCoords.y; sub_80930E0(&x, &y, 8, 8); - sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1); + sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, gSprites[mew->spriteId].subpriority - 1); if (sUnknown_0203CF50 != MAX_SPRITES) { struct Sprite *sprite = &gSprites[sUnknown_0203CF50]; diff --git a/src/field_camera.c b/src/field_camera.c index 038b6932e8..57be522211 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -39,7 +39,7 @@ static void CameraPanningCB_PanAhead(void); static struct FieldCameraOffset sFieldCameraOffset; static s16 sHorizontalCameraPan; static s16 sVerticalCameraPan; -static u8 gUnknown_03000E2C; +static bool8 gUnknown_03000E2C; static void (*sFieldCameraPanningCallback)(void); struct CameraObject gFieldCamera; @@ -47,7 +47,7 @@ u16 gTotalCameraPixelOffsetY; u16 gTotalCameraPixelOffsetX; // text -static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *cameraOffset) +static void ResetCameraOffset(struct FieldCameraOffset *cameraOffset) { cameraOffset->xTileOffset = 0; cameraOffset->yTileOffset = 0; @@ -56,23 +56,23 @@ static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset * cameraOffset->copyBGToVRAM = TRUE; } -static void tilemap_move_something(struct FieldCameraOffset *cameraOffset, u32 b, u32 c) +static void AddCameraTileOffset(struct FieldCameraOffset *cameraOffset, u32 xOffset, u32 yOffset) { - cameraOffset->xTileOffset += b; + cameraOffset->xTileOffset += xOffset; cameraOffset->xTileOffset %= 32; - cameraOffset->yTileOffset += c; + cameraOffset->yTileOffset += yOffset; cameraOffset->yTileOffset %= 32; } -static void coords8_add(struct FieldCameraOffset *cameraOffset, u32 b, u32 c) +static void AddCameraPixelOffset(struct FieldCameraOffset *cameraOffset, u32 xOffset, u32 yOffset) { - cameraOffset->xPixelOffset += b; - cameraOffset->yPixelOffset += c; + cameraOffset->xPixelOffset += xOffset; + cameraOffset->yPixelOffset += yOffset; } -void move_tilemap_camera_to_upper_left_corner(void) +void ResetFieldCamera(void) { - move_tilemap_camera_to_upper_left_corner_(&sFieldCameraOffset); + ResetCameraOffset(&sFieldCameraOffset); } void FieldUpdateBgTilemapScroll(void) @@ -89,10 +89,10 @@ void FieldUpdateBgTilemapScroll(void) SetGpuReg(REG_OFFSET_BG3VOFS, r4); } -void sub_8089C08(s16 *a, s16 *b) +void sub_8089C08(s16 *x, s16 *y) { - *a = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan; - *b = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8; + *x = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan; + *y = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8; } void DrawWholeMapView(void) @@ -418,11 +418,11 @@ void CameraUpdate(void) UpdateObjectEventsForCameraUpdate(deltaX, deltaY); RotatingGatePuzzleCameraUpdate(deltaX, deltaY); ResetBerryTreeSparkleFlags(); - tilemap_move_something(&sFieldCameraOffset, deltaX * 2, deltaY * 2); + AddCameraTileOffset(&sFieldCameraOffset, deltaX * 2, deltaY * 2); RedrawMapSlicesForCameraUpdate(&sFieldCameraOffset, deltaX * 2, deltaY * 2); } - coords8_add(&sFieldCameraOffset, movementSpeedX, movementSpeedY); + AddCameraPixelOffset(&sFieldCameraOffset, movementSpeedX, movementSpeedY); gTotalCameraPixelOffsetX -= movementSpeedX; gTotalCameraPixelOffsetY -= movementSpeedY; } @@ -436,9 +436,9 @@ void MoveCameraAndRedrawMap(int deltaX, int deltaY) //unused gTotalCameraPixelOffsetY -= deltaY * 16; } -void SetCameraPanningCallback(void (*a)(void)) +void SetCameraPanningCallback(void (*callback)(void)) { - sFieldCameraPanningCallback = a; + sFieldCameraPanningCallback = callback; } void SetCameraPanning(s16 a, s16 b) @@ -450,7 +450,7 @@ void SetCameraPanning(s16 a, s16 b) void InstallCameraPanAheadCallback(void) { sFieldCameraPanningCallback = CameraPanningCB_PanAhead; - gUnknown_03000E2C = 0; + gUnknown_03000E2C = FALSE; sHorizontalCameraPan = 0; sVerticalCameraPan = 32; } @@ -478,12 +478,12 @@ static void CameraPanningCB_PanAhead(void) if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION) { gUnknown_03000E2C ^= 1; - if (gUnknown_03000E2C == 0) + if (gUnknown_03000E2C == FALSE) return; } else { - gUnknown_03000E2C = 0; + gUnknown_03000E2C = FALSE; } var = GetPlayerMovementDirection(); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index e41b5a69a5..5a47f13542 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -545,7 +545,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) UpdateHappinessStepCounter(); UpdateFarawayIslandStepCounter(); - if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { if (UpdatePoisonStepCounter() == TRUE) { @@ -938,7 +938,7 @@ static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, return NULL; } -bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior) +bool8 TryDoDiveWarp(struct MapPosition *position, u16 metatileBehavior) { if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior)) { diff --git a/src/field_effect.c b/src/field_effect.c index c4e9fc40a8..284d9b0e79 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -64,122 +64,120 @@ static void PokeballGlowEffect_7(struct Sprite *); static u8 PokecenterHealEffectHelper(s16, s16); static void HallOfFameRecordEffectHelper(s16, s16, s16, u8); -static void FieldCallback_Fly(void); -static void task00_8084310(u8); -static void mapldr_08084390(void); -static void c3_080843F8(u8); +static void FieldCallback_UseFly(void); +static void Task_UseFly(u8); +static void FieldCallback_FlyIntoMap(void); +static void Task_FlyIntoMap(u8); static void Task_FallWarpFieldEffect(u8); +static bool8 FallWarpEffect_0(struct Task *); static bool8 FallWarpEffect_1(struct Task *); static bool8 FallWarpEffect_2(struct Task *); static bool8 FallWarpEffect_3(struct Task *); static bool8 FallWarpEffect_4(struct Task *); static bool8 FallWarpEffect_5(struct Task *); static bool8 FallWarpEffect_6(struct Task *); -static bool8 FallWarpEffect_7(struct Task *); -static void Task_EscalatorWarpFieldEffect(u8); -static bool8 EscalatorWarpEffect_1(struct Task *); -static bool8 EscalatorWarpEffect_2(struct Task *); -static bool8 EscalatorWarpEffect_3(struct Task *); -static bool8 EscalatorWarpEffect_4(struct Task *); -static bool8 EscalatorWarpEffect_5(struct Task *); -static bool8 EscalatorWarpEffect_6(struct Task *); +static void Task_EscalatorWarpOut(u8); +static bool8 EscalatorWarpOutEffect_0(struct Task *); +static bool8 EscalatorWarpOutEffect_1(struct Task *); +static bool8 EscalatorWarpOutEffect_2(struct Task *); +static bool8 EscalatorWarpOutEffect_3(struct Task *); +static bool8 EscalatorWarpOutEffect_4(struct Task *); +static bool8 EscalatorWarpOutEffect_5(struct Task *); static void sub_80B6FB8(struct Task *); static void sub_80B7004(struct Task *); static void sub_80B7050(void); static void sub_80B7060(void); -static void sub_80B70B4(void); -static void sub_80B70DC(u8); -static bool8 sub_80B7114(struct Task *); -static bool8 sub_80B7190(struct Task *); -static bool8 sub_80B71D0(struct Task *); -static bool8 sub_80B7230(struct Task *); -static bool8 sub_80B7270(struct Task *); -static bool8 sub_80B72D0(struct Task *); -static bool8 sub_80B72F4(struct Task *); +static void FieldCallback_EscalatorWarpIn(void); +static void Task_EscalatorWarpIn(u8); +static bool8 EscalatorWarpInEffect_0(struct Task *); +static bool8 EscalatorWarpInEffect_1(struct Task *); +static bool8 EscalatorWarpInEffect_2(struct Task *); +static bool8 EscalatorWarpInEffect_3(struct Task *); +static bool8 EscalatorWarpInEffect_4(struct Task *); +static bool8 EscalatorWarpInEffect_5(struct Task *); +static bool8 EscalatorWarpInEffect_6(struct Task *); -static void sub_80B7384(u8); -static bool8 sub_80B73D0(struct Task *, struct ObjectEvent *); -static bool8 waterfall_1_do_anim_probably(struct Task *, struct ObjectEvent *); -static bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct ObjectEvent *); -static bool8 sub_80B7450(struct Task *, struct ObjectEvent *); -static bool8 sub_80B7478(struct Task *, struct ObjectEvent *); +static void Task_UseWaterfall(u8); +static bool8 WaterfallFieldEffect_0(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_1(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_2(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_3(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_4(struct Task *, struct ObjectEvent *); -static void Task_Dive(u8); -static bool8 dive_1_lock(struct Task *); -static bool8 dive_2_unknown(struct Task *); -static bool8 dive_3_unknown(struct Task *); +static void Task_UseDive(u8); +static bool8 DiveFieldEffect_0(struct Task *); +static bool8 DiveFieldEffect_1(struct Task *); +static bool8 DiveFieldEffect_2(struct Task *); static void Task_LavaridgeGymB1FWarp(u8); +static bool8 LavaridgeGymB1FWarpEffect_0(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpEffect_6(struct Task *, struct ObjectEvent *, struct Sprite *); static void FieldCB_LavaridgeGymB1FWarpExit(void); static void Task_LavaridgeGymB1FWarpExit(u8); +static bool8 LavaridgeGymB1FWarpExitEffect_0(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *); static void Task_LavaridgeGym1FWarp(u8); +static bool8 LavaridgeGym1FWarpEffect_0(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGym1FWarpEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGym1FWarpEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGym1FWarpEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *); static bool8 LavaridgeGym1FWarpEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGym1FWarpEffect_5(struct Task *, struct ObjectEvent *, struct Sprite *); -static void DoEscapeRopeFieldEffect(u8); -static void EscapeRopeFieldEffect_Step0(struct Task *); -static void EscapeRopeFieldEffect_Step1(struct Task *); +static void Task_EscapeRopeWarpOut(u8); +static void EscapeRopeWarpOutFieldEffect_0(struct Task *); +static void EscapeRopeWarpOutFieldEffect_1(struct Task *); -static void mapldr_080859D4(void); -static void sub_80B7E94(u8); +static void FieldCallback_EscapeRopeWarpIn(void); +static void Task_EscapeRopeWarpIn(u8); +static void EscapeRopeWarpInFieldEffect_0(struct Task *); +static void EscapeRopeWarpInFieldEffect_1(struct Task *); -static void sub_80B7EC4(struct Task *); -static void sub_80B7EE8(struct Task *); +static void Task_TeleportWarpOut(u8); +static void TeleportWarpOutFieldEffect_0(struct Task*); +static void TeleportWarpOutFieldEffect_1(struct Task*); +static void TeleportWarpOutFieldEffect_2(struct Task*); +static void TeleportWarpOutFieldEffect_3(struct Task*); -static void ExecuteTeleportFieldEffectTask(u8); -static void TeleportFieldEffectTask1(struct Task*); -static void TeleportFieldEffectTask2(struct Task*); -static void TeleportFieldEffectTask3(struct Task*); -static void TeleportFieldEffectTask4(struct Task*); +static void FieldCallback_TeleportWarpIn(void); +static void Task_TeleportWarpIn(u8); +static void TeleportWarpInFieldEffect_0(struct Task *); +static void TeleportWarpInFieldEffect_1(struct Task *); +static void TeleportWarpInFieldEffect_2(struct Task *); -static void mapldr_08085D88(void); -static void sub_80B8250(u8); +static void Task_FieldMoveShowMonOutdoors(u8); +static void FieldMoveShowMonOutdoorsEffect_0(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_1(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_2(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_3(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_4(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_5(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_6(struct Task *); -static void sub_80B8280(struct Task *); -static void sub_80B830C(struct Task *); -static void sub_80B8410(struct Task *); - -static void sub_80B8554(u8); -static void sub_80B8584(struct Task *); -static void sub_80B85F8(struct Task *); -static void sub_80B8660(struct Task *); -static void sub_80B86EC(struct Task *); -static void sub_80B871C(struct Task *); -static void sub_80B8770(struct Task *); -static void overworld_bg_setup_2(struct Task *); - -static void sub_80B880C(void); +static void VBlankCB_FieldMoveShowMonOutdoors(void); static void sub_80B8874(u16); -static void sub_80B88B4(u8); -static void sub_80B88E4(struct Task *); -static void sub_80B8920(struct Task *); -static void sub_80B898C(struct Task *); -static void sub_80B89DC(struct Task *); -static void sub_80B8A0C(struct Task *); -static void sub_80B8A44(struct Task *); -static void sub_80B8A64(struct Task *); +static void Task_FieldMoveShowMonIndoors(u8); +static void FieldMoveShowMonIndoorsEffect_0(struct Task *); +static void FieldMoveShowMonIndoorsEffect_1(struct Task *); +static void FieldMoveShowMonIndoorsEffect_2(struct Task *); +static void FieldMoveShowMonIndoorsEffect_3(struct Task *); +static void FieldMoveShowMonIndoorsEffect_4(struct Task *); +static void FieldMoveShowMonIndoorsEffect_5(struct Task *); +static void FieldMoveShowMonIndoorsEffect_6(struct Task *); -static void sub_80B8AE0(void); +static void VBlankCB_FieldMoveShowMonIndoors(void); static void sub_80B8B28(struct Task *); static bool8 sub_80B8B38(struct Task *); static bool8 sub_80B8BF0(struct Task *); @@ -189,25 +187,25 @@ static void sub_80B8CC0(struct Sprite *); static void sub_80B8D04(struct Sprite *); static void sub_80B8D20(struct Sprite *); -static void sub_80B8D84(u8); -static void sub_80B8DB4(struct Task *); -static void sub_80B8E14(struct Task *); -static void sub_80B8E60(struct Task *); -static void sub_80B8EA8(struct Task *); -static void sub_80B8F24(struct Task *); +static void Task_SurfFieldEffect(u8); +static void SurfFieldEffect_1(struct Task *); +static void SurfFieldEffect_2(struct Task *); +static void SurfFieldEffect_3(struct Task *); +static void SurfFieldEffect_4(struct Task *); +static void SurfFieldEffect_5(struct Task *); -static void sub_80B9128(struct Sprite *); +static void SpriteCB_NPCFlyOut(struct Sprite *); -static void sub_80B91D4(u8); -static void sub_80B9204(struct Task *); -static void sub_80B925C(struct Task *); -static void sub_80B92A0(struct Task *); -static void sub_80B92F8(struct Task *); -static void sub_80B933C(struct Task *); -static void sub_80B9390(struct Task *); -static void sub_80B9418(struct Task *); -static void sub_80B9474(struct Task *); -static void sub_80B9494(struct Task *); +static void Task_FlyOut(u8); +static void FlyOutFieldEffect_0(struct Task *); +static void FlyOutFieldEffect_1(struct Task *); +static void FlyOutFieldEffect_2(struct Task *); +static void FlyOutFieldEffect_3(struct Task *); +static void FlyOutFieldEffect_4(struct Task *); +static void FlyOutFieldEffect_5(struct Task *); +static void FlyOutFieldEffect_6(struct Task *); +static void FlyOutFieldEffect_7(struct Task *); +static void FlyOutFieldEffect_8(struct Task *); static u8 sub_80B94C4(void); static u8 sub_80B9508(u8); @@ -216,18 +214,24 @@ static void sub_80B9560(u8, u8); static void sub_80B957C(struct Sprite *); static void sub_80B963C(struct Sprite *); -static void sub_80B97D4(u8); -static void sub_80B9804(struct Task *); -static void sub_80B98B8(struct Task *); -static void sub_80B9924(struct Task *); -static void sub_80B9978(struct Task *); -static void sub_80B99F0(struct Task *); -static void sub_80B9A28(struct Task *); -static void sub_80B9A60(struct Task *); +static void Task_FlyIn(u8); +static void FlyInFieldEffect_0(struct Task *); +static void FlyInFieldEffect_1(struct Task *); +static void FlyInFieldEffect_2(struct Task *); +static void FlyInFieldEffect_3(struct Task *); +static void FlyInFieldEffect_4(struct Task *); +static void FlyInFieldEffect_5(struct Task *); +static void FlyInFieldEffect_6(struct Task *); + +static void Task_DestroyDeoxysRock(u8 taskId); +static void DestroyDeoxysRockFieldEffect_0(s16*, u8); +static void DestroyDeoxysRockFieldEffect_1(s16*, u8); +static void DestroyDeoxysRockFieldEffect_2(s16*, u8); -static void sub_80B9BE8(u8 taskId); static void sub_80B9DB8(struct Sprite* sprite); -static void Fldeff_MoveDeoxysRock_Step(u8 taskId); +static void Task_MoveDeoxysRock(u8 taskId); + +static void sub_80B9D24(struct Sprite*); // Static RAM declarations @@ -553,7 +557,7 @@ const struct SpriteTemplate gSpriteTemplate_855C34C = .callback = SpriteCB_HallOfFameMonitor }; -void (*const gUnknown_0855C364[])(struct Task *) = +void (*const sPokecenterHealEffectFuncs[])(struct Task *) = { PokecenterHealEffect_0, PokecenterHealEffect_1, @@ -561,7 +565,7 @@ void (*const gUnknown_0855C364[])(struct Task *) = PokecenterHealEffect_3 }; -void (*const gUnknown_0855C374[])(struct Task *) = +void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = { HallOfFameRecordEffect_0, HallOfFameRecordEffect_1, @@ -569,7 +573,7 @@ void (*const gUnknown_0855C374[])(struct Task *) = HallOfFameRecordEffect_3 }; -void (*const gUnknown_0855C384[])(struct Sprite *) = +void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) = { PokeballGlowEffect_0, PokeballGlowEffect_1, @@ -597,83 +601,83 @@ const u8 gUnknown_0855C3C4[] = { 0, 0, 0, 0}; bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = { + FallWarpEffect_0, FallWarpEffect_1, FallWarpEffect_2, FallWarpEffect_3, FallWarpEffect_4, FallWarpEffect_5, FallWarpEffect_6, - FallWarpEffect_7, }; -bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task *) = +bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = { - EscalatorWarpEffect_1, - EscalatorWarpEffect_2, - EscalatorWarpEffect_3, - EscalatorWarpEffect_4, - EscalatorWarpEffect_5, - EscalatorWarpEffect_6, + EscalatorWarpOutEffect_0, + EscalatorWarpOutEffect_1, + EscalatorWarpOutEffect_2, + EscalatorWarpOutEffect_3, + EscalatorWarpOutEffect_4, + EscalatorWarpOutEffect_5, }; -bool8 (*const gUnknown_0855C3FC[])(struct Task *) = +bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = { - sub_80B7114, - sub_80B7190, - sub_80B71D0, - sub_80B7230, - sub_80B7270, - sub_80B72D0, - sub_80B72F4, + EscalatorWarpInEffect_0, + EscalatorWarpInEffect_1, + EscalatorWarpInEffect_2, + EscalatorWarpInEffect_3, + EscalatorWarpInEffect_4, + EscalatorWarpInEffect_5, + EscalatorWarpInEffect_6, }; -bool8 (*const gUnknown_0855C418[])(struct Task *, struct ObjectEvent *) = +bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) = { - sub_80B73D0, - waterfall_1_do_anim_probably, - waterfall_2_wait_anim_finish_probably, - sub_80B7450, - sub_80B7478, + WaterfallFieldEffect_0, + WaterfallFieldEffect_1, + WaterfallFieldEffect_2, + WaterfallFieldEffect_3, + WaterfallFieldEffect_4, }; -bool8 (*const gUnknown_0855C42C[])(struct Task *) = +bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) = { - dive_1_lock, - dive_2_unknown, - dive_3_unknown, + DiveFieldEffect_0, + DiveFieldEffect_1, + DiveFieldEffect_2, }; bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { + LavaridgeGymB1FWarpEffect_0, LavaridgeGymB1FWarpEffect_1, LavaridgeGymB1FWarpEffect_2, LavaridgeGymB1FWarpEffect_3, LavaridgeGymB1FWarpEffect_4, LavaridgeGymB1FWarpEffect_5, - LavaridgeGymB1FWarpEffect_6, }; bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { + LavaridgeGymB1FWarpExitEffect_0, LavaridgeGymB1FWarpExitEffect_1, LavaridgeGymB1FWarpExitEffect_2, LavaridgeGymB1FWarpExitEffect_3, - LavaridgeGymB1FWarpExitEffect_4, }; bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { + LavaridgeGym1FWarpEffect_0, LavaridgeGym1FWarpEffect_1, LavaridgeGym1FWarpEffect_2, LavaridgeGym1FWarpEffect_3, LavaridgeGym1FWarpEffect_4, - LavaridgeGym1FWarpEffect_5, }; -void (*const gEscapeRopeFieldEffectFuncs[])(struct Task *) = +void (*const sEscapeRopeWarpOutFieldEffectFuncs[])(struct Task *) = { - EscapeRopeFieldEffect_Step0, - EscapeRopeFieldEffect_Step1, + EscapeRopeWarpOutFieldEffect_0, + EscapeRopeWarpOutFieldEffect_1, }; // .text @@ -993,7 +997,7 @@ static void Task_PokecenterHeal(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - gUnknown_0855C364[task->data[0]](task); + sPokecenterHealEffectFuncs[task->data[0]](task); } static void PokecenterHealEffect_0(struct Task *task) @@ -1047,7 +1051,7 @@ static void Task_HallOfFameRecord(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - gUnknown_0855C374[task->data[0]](task); + sHallOfFameRecordEffectFuncs[task->data[0]](task); } static void HallOfFameRecordEffect_0(struct Task *task) @@ -1107,7 +1111,7 @@ static u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) static void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) { - gUnknown_0855C384[sprite->data[0]](sprite); + sPokeballGlowEffectFuncs[sprite->data[0]](sprite); } static void PokeballGlowEffect_0(struct Sprite *sprite) @@ -1292,19 +1296,19 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) void ReturnToFieldFromFlyMapSelect(void) { SetMainCallback2(CB2_ReturnToField); - gFieldCallback = FieldCallback_Fly; + gFieldCallback = FieldCallback_UseFly; } -static void FieldCallback_Fly(void) +static void FieldCallback_UseFly(void) { FadeInFromBlack(); - CreateTask(task00_8084310, 0); + CreateTask(Task_UseFly, 0); ScriptContext2_Enable(); FreezeObjectEvents(); gFieldCallback = NULL; } -static void task00_8084310(u8 taskId) +static void Task_UseFly(u8 taskId) { struct Task *task; task = &gTasks[taskId]; @@ -1315,7 +1319,7 @@ static void task00_8084310(u8 taskId) return; } gFieldEffectArguments[0] = GetCursorSelectionMonId(); - if ((int)gFieldEffectArguments[0] > 5) + if ((int)gFieldEffectArguments[0] > PARTY_SIZE - 1) { gFieldEffectArguments[0] = 0; } @@ -1327,18 +1331,18 @@ static void task00_8084310(u8 taskId) Overworld_ResetStateAfterFly(); WarpIntoMap(); SetMainCallback2(CB2_LoadMap); - gFieldCallback = mapldr_08084390; + gFieldCallback = FieldCallback_FlyIntoMap; DestroyTask(taskId); } } -static void mapldr_08084390(void) +static void FieldCallback_FlyIntoMap(void) { Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); - CreateTask(c3_080843F8, 0); + CreateTask(Task_FlyIntoMap, 0); gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; - if (gPlayerAvatar.flags & 0x08) + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) { ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST); } @@ -1347,7 +1351,7 @@ static void mapldr_08084390(void) gFieldCallback = NULL; } -static void c3_080843F8(u8 taskId) +static void Task_FlyIntoMap(u8 taskId) { struct Task *task; task = &gTasks[taskId]; @@ -1385,7 +1389,7 @@ static void Task_FallWarpFieldEffect(u8 taskId) while (sFallWarpFieldEffectFuncs[task->data[0]](task)); // return code signifies whether to continue blocking here } -static bool8 FallWarpEffect_1(struct Task *task) +static bool8 FallWarpEffect_0(struct Task *task) { struct ObjectEvent *playerObject; struct Sprite *playerSprite; @@ -1403,7 +1407,7 @@ static bool8 FallWarpEffect_1(struct Task *task) return TRUE; } -static bool8 FallWarpEffect_2(struct Task *task) +static bool8 FallWarpEffect_1(struct Task *task) { if (IsWeatherNotFadingIn()) { @@ -1412,7 +1416,7 @@ static bool8 FallWarpEffect_2(struct Task *task) return FALSE; } -static bool8 FallWarpEffect_3(struct Task *task) +static bool8 FallWarpEffect_2(struct Task *task) { struct Sprite *sprite; s16 centerToCornerVecY; @@ -1427,7 +1431,7 @@ static bool8 FallWarpEffect_3(struct Task *task) return FALSE; } -static bool8 FallWarpEffect_4(struct Task *task) +static bool8 FallWarpEffect_3(struct Task *task) { struct ObjectEvent *objectEvent; struct Sprite *sprite; @@ -1461,7 +1465,7 @@ static bool8 FallWarpEffect_4(struct Task *task) return FALSE; } -static bool8 FallWarpEffect_5(struct Task *task) +static bool8 FallWarpEffect_4(struct Task *task) { task->data[0]++; task->data[1] = 4; @@ -1470,7 +1474,7 @@ static bool8 FallWarpEffect_5(struct Task *task) return TRUE; } -static bool8 FallWarpEffect_6(struct Task *task) +static bool8 FallWarpEffect_5(struct Task *task) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1486,7 +1490,7 @@ static bool8 FallWarpEffect_6(struct Task *task) return FALSE; } -static bool8 FallWarpEffect_7(struct Task *task) +static bool8 FallWarpEffect_6(struct Task *task) { gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); @@ -1500,31 +1504,31 @@ static bool8 FallWarpEffect_7(struct Task *task) void StartEscalatorWarp(u8 metatileBehavior, u8 priority) { u8 taskId; - taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority); - gTasks[taskId].data[1] = 0; + taskId = CreateTask(Task_EscalatorWarpOut, priority); + gTasks[taskId].data[1] = FALSE; if (metatileBehavior == MB_UP_ESCALATOR) { - gTasks[taskId].data[1] = 1; + gTasks[taskId].data[1] = TRUE; } } -static void Task_EscalatorWarpFieldEffect(u8 taskId) +static void Task_EscalatorWarpOut(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - while (sEscalatorWarpFieldEffectFuncs[task->data[0]](task)); + while (sEscalatorWarpOutFieldEffectFuncs[task->data[0]](task)); } -static bool8 EscalatorWarpEffect_1(struct Task *task) +static bool8 EscalatorWarpOutEffect_0(struct Task *task) { FreezeObjectEvents(); CameraObjectReset2(); - sub_80E1558(task->data[1]); + StartEscalator(task->data[1]); task->data[0]++; return FALSE; } -static bool8 EscalatorWarpEffect_2(struct Task *task) +static bool8 EscalatorWarpOutEffect_1(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1543,7 +1547,7 @@ static bool8 EscalatorWarpEffect_2(struct Task *task) return FALSE; } -static bool8 EscalatorWarpEffect_3(struct Task *task) +static bool8 EscalatorWarpOutEffect_2(struct Task *task) { sub_80B6FB8(task); if (task->data[2] > 3) @@ -1554,14 +1558,14 @@ static bool8 EscalatorWarpEffect_3(struct Task *task) return FALSE; } -static bool8 EscalatorWarpEffect_4(struct Task *task) +static bool8 EscalatorWarpOutEffect_3(struct Task *task) { sub_80B6FB8(task); sub_80B7060(); return FALSE; } -static bool8 EscalatorWarpEffect_5(struct Task *task) +static bool8 EscalatorWarpOutEffect_4(struct Task *task) { sub_80B7004(task); if (task->data[2] > 3) @@ -1572,7 +1576,7 @@ static bool8 EscalatorWarpEffect_5(struct Task *task) return FALSE; } -static bool8 EscalatorWarpEffect_6(struct Task *task) +static bool8 EscalatorWarpOutEffect_5(struct Task *task) { sub_80B7004(task); sub_80B7060(); @@ -1615,31 +1619,31 @@ static void sub_80B7060(void) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { - sub_80E1570(); + StopEscalator(); WarpIntoMap(); - gFieldCallback = sub_80B70B4; + gFieldCallback = FieldCallback_EscalatorWarpIn; SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpFieldEffect)); + DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpOut)); } } -static void sub_80B70B4(void) +static void FieldCallback_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); ScriptContext2_Enable(); - CreateTask(sub_80B70DC, 0); + CreateTask(Task_EscalatorWarpIn, 0); gFieldCallback = NULL; } -static void sub_80B70DC(u8 taskId) +static void Task_EscalatorWarpIn(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - while (gUnknown_0855C3FC[task->data[0]](task)); + while (sEscalatorWarpInFieldEffectFuncs[task->data[0]](task)); } -static bool8 sub_80B7114(struct Task *task) +static bool8 EscalatorWarpInEffect_0(struct Task *task) { struct ObjectEvent *objectEvent; s16 x; @@ -1652,19 +1656,19 @@ static bool8 sub_80B7114(struct Task *task) behavior = MapGridGetMetatileBehaviorAt(x, y); task->data[0]++; task->data[1] = 16; - if (behavior == 0x6b) + if (behavior == MB_DOWN_ESCALATOR) { - behavior = 1; + behavior = TRUE; task->data[0] = 3; - } else + } else // MB_UP_ESCALATOR { - behavior = 0; + behavior = FALSE; } - sub_80E1558(behavior); + StartEscalator(behavior); return TRUE; } -static bool8 sub_80B7190(struct Task *task) +static bool8 EscalatorWarpInEffect_1(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1674,7 +1678,7 @@ static bool8 sub_80B7190(struct Task *task) return FALSE; } -static bool8 sub_80B71D0(struct Task *task) +static bool8 EscalatorWarpInEffect_2(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1694,7 +1698,7 @@ static bool8 sub_80B71D0(struct Task *task) return FALSE; } -static bool8 sub_80B7230(struct Task *task) +static bool8 EscalatorWarpInEffect_3(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1704,7 +1708,7 @@ static bool8 sub_80B7230(struct Task *task) return FALSE; } -static bool8 sub_80B7270(struct Task *task) +static bool8 EscalatorWarpInEffect_4(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1724,18 +1728,18 @@ static bool8 sub_80B7270(struct Task *task) return FALSE; } -static bool8 sub_80B72D0(struct Task *task) +static bool8 EscalatorWarpInEffect_5(struct Task *task) { - if (sub_80E1584()) + if (IsEscalatorMoving()) { return FALSE; } - sub_80E1570(); + StopEscalator(); task->data[0]++; return TRUE; } -static bool8 sub_80B72F4(struct Task *task) +static bool8 EscalatorWarpInEffect_6(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1744,7 +1748,7 @@ static bool8 sub_80B72F4(struct Task *task) CameraObjectReset1(); ScriptContext2_Disable(); ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST)); - DestroyTask(FindTaskIdByFunc(sub_80B70DC)); + DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpIn)); } return FALSE; } @@ -1752,18 +1756,18 @@ static bool8 sub_80B72F4(struct Task *task) bool8 FldEff_UseWaterfall(void) { u8 taskId; - taskId = CreateTask(sub_80B7384, 0xff); + taskId = CreateTask(Task_UseWaterfall, 0xff); gTasks[taskId].data[1] = gFieldEffectArguments[0]; - sub_80B7384(taskId); + Task_UseWaterfall(taskId); return FALSE; } -static void sub_80B7384(u8 taskId) +static void Task_UseWaterfall(u8 taskId) { - while (gUnknown_0855C418[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])); + while (sWaterfallFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])); } -static bool8 sub_80B73D0(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_0(struct Task *task, struct ObjectEvent *objectEvent) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; @@ -1771,7 +1775,7 @@ static bool8 sub_80B73D0(struct Task *task, struct ObjectEvent *objectEvent) return FALSE; } -static bool8 waterfall_1_do_anim_probably(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_1(struct Task *task, struct ObjectEvent *objectEvent) { ScriptContext2_Enable(); if (!ObjectEventIsMovementOverridden(objectEvent)) @@ -1784,7 +1788,7 @@ static bool8 waterfall_1_do_anim_probably(struct Task *task, struct ObjectEvent return FALSE; } -static bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_2(struct Task *task, struct ObjectEvent *objectEvent) { if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { @@ -1794,14 +1798,14 @@ static bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct Obj return TRUE; } -static bool8 sub_80B7450(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_3(struct Task *task, struct ObjectEvent *objectEvent) { ObjectEventSetHeldMovement(objectEvent, GetWalkSlowMovementAction(DIR_NORTH)); task->data[0]++; return FALSE; } -static bool8 sub_80B7478(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_4(struct Task *task, struct ObjectEvent *objectEvent) { if (!ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -1809,12 +1813,13 @@ static bool8 sub_80B7478(struct Task *task, struct ObjectEvent *objectEvent) } if (MetatileBehavior_IsWaterfall(objectEvent->currentMetatileBehavior)) { + // Still ascending waterfall task->data[0] = 3; return TRUE; } ScriptContext2_Disable(); gPlayerAvatar.preventStep = FALSE; - DestroyTask(FindTaskIdByFunc(sub_80B7384)); + DestroyTask(FindTaskIdByFunc(Task_UseWaterfall)); FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); return FALSE; } @@ -1822,26 +1827,26 @@ static bool8 sub_80B7478(struct Task *task, struct ObjectEvent *objectEvent) bool8 FldEff_UseDive(void) { u8 taskId; - taskId = CreateTask(Task_Dive, 0xff); + taskId = CreateTask(Task_UseDive, 0xff); gTasks[taskId].data[15] = gFieldEffectArguments[0]; gTasks[taskId].data[14] = gFieldEffectArguments[1]; - Task_Dive(taskId); + Task_UseDive(taskId); return FALSE; } -void Task_Dive(u8 taskId) +void Task_UseDive(u8 taskId) { - while (gUnknown_0855C42C[gTasks[taskId].data[0]](&gTasks[taskId])); + while (sDiveFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId])); } -static bool8 dive_1_lock(struct Task *task) +static bool8 DiveFieldEffect_0(struct Task *task) { gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } -static bool8 dive_2_unknown(struct Task *task) +static bool8 DiveFieldEffect_1(struct Task *task) { ScriptContext2_Enable(); gFieldEffectArguments[0] = task->data[15]; @@ -1850,14 +1855,14 @@ static bool8 dive_2_unknown(struct Task *task) return FALSE; } -static bool8 dive_3_unknown(struct Task *task) +static bool8 DiveFieldEffect_2(struct Task *task) { struct MapPosition mapPosition; PlayerGetDestCoords(&mapPosition.x, &mapPosition.y); if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { - dive_warp(&mapPosition, gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior); - DestroyTask(FindTaskIdByFunc(Task_Dive)); + TryDoDiveWarp(&mapPosition, gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior); + DestroyTask(FindTaskIdByFunc(Task_UseDive)); FieldEffectActiveListRemove(FLDEFF_USE_DIVE); } return FALSE; @@ -1873,7 +1878,7 @@ static void Task_LavaridgeGymB1FWarp(u8 taskId) while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_0(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -1885,7 +1890,7 @@ static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct ObjectEvent * return TRUE; } -static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1898,7 +1903,7 @@ static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct ObjectEvent * return FALSE; } -static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { sprite->pos2.y = 0; task->data[3] = 1; @@ -1912,7 +1917,7 @@ static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct ObjectEvent * return TRUE; } -static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { s16 centerToCornerVecY; SetCameraPanning(0, task->data[1]); @@ -1955,7 +1960,7 @@ static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct ObjectEvent * return FALSE; } -static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -1963,7 +1968,7 @@ static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *task, struct ObjectEvent * return FALSE; } -static bool8 LavaridgeGymB1FWarpEffect_6(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1989,7 +1994,7 @@ static void Task_LavaridgeGymB1FWarpExit(u8 taskId) while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_0(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { CameraObjectReset2(); FreezeObjectEvents(); @@ -1999,7 +2004,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct ObjectEve return FALSE; } -static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (IsWeatherNotFadingIn()) { @@ -2013,7 +2018,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct ObjectEve return FALSE; } -static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { sprite = &gSprites[task->data[1]]; if (sprite->animCmdIndex > 1) @@ -2027,7 +2032,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct ObjectEve return FALSE; } -static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -2044,9 +2049,9 @@ u8 FldEff_LavaridgeGymWarp(void) { u8 spriteId; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LAVARIDGE_GYM_WARP], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; - gSprites[spriteId].coordOffsetEnabled = 1; + gSprites[spriteId].coordOffsetEnabled = TRUE; return spriteId; } @@ -2068,7 +2073,7 @@ static void Task_LavaridgeGym1FWarp(u8 taskId) while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_0(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -2078,7 +2083,7 @@ static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -2100,7 +2105,7 @@ static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (gSprites[task->data[1]].animCmdIndex == 2) { @@ -2110,7 +2115,7 @@ static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) { @@ -2121,7 +2126,7 @@ static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -2137,9 +2142,9 @@ u8 FldEff_PopOutOfAsh(void) { u8 spriteId; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_OUT_OF_ASH], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; - gSprites[spriteId].coordOffsetEnabled = 1; + gSprites[spriteId].coordOffsetEnabled = TRUE; return spriteId; } @@ -2155,22 +2160,22 @@ void StartEscapeRopeFieldEffect(void) { ScriptContext2_Enable(); FreezeObjectEvents(); - CreateTask(DoEscapeRopeFieldEffect, 0x50); + CreateTask(Task_EscapeRopeWarpOut, 0x50); } -static void DoEscapeRopeFieldEffect(u8 taskId) +static void Task_EscapeRopeWarpOut(u8 taskId) { - gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sEscapeRopeWarpOutFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void EscapeRopeFieldEffect_Step0(struct Task *task) +static void EscapeRopeWarpOutFieldEffect_0(struct Task *task) { task->data[0]++; task->data[14] = 64; task->data[15] = GetPlayerFacingDirection(); } -static void EscapeRopeFieldEffect_Step1(struct Task *task) +static void EscapeRopeWarpOutFieldEffect_1(struct Task *task) { struct ObjectEvent *objectEvent; u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; @@ -2187,9 +2192,9 @@ static void EscapeRopeFieldEffect_Step1(struct Task *task) SetObjectEventDirection(objectEvent, task->data[15]); SetWarpDestinationToEscapeWarp(); WarpIntoMap(); - gFieldCallback = mapldr_080859D4; + gFieldCallback = FieldCallback_EscapeRopeWarpIn; SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(DoEscapeRopeFieldEffect)); + DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpOut)); } else if (task->data[1] == 0 || (--task->data[1]) == 0) { ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection])); @@ -2202,12 +2207,12 @@ static void EscapeRopeFieldEffect_Step1(struct Task *task) } } -void (*const gUnknown_0855C484[])(struct Task *) = { - sub_80B7EC4, - sub_80B7EE8 +void (*const sEscapeRopeWarpInFieldEffectFuncs[])(struct Task *) = { + EscapeRopeWarpInFieldEffect_0, + EscapeRopeWarpInFieldEffect_1 }; -static void mapldr_080859D4(void) +static void FieldCallback_EscapeRopeWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); @@ -2215,15 +2220,15 @@ static void mapldr_080859D4(void) FreezeObjectEvents(); gFieldCallback = NULL; gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; - CreateTask(sub_80B7E94, 0); + CreateTask(Task_EscapeRopeWarpIn, 0); } -static void sub_80B7E94(u8 taskId) +static void Task_EscapeRopeWarpIn(u8 taskId) { - gUnknown_0855C484[gTasks[taskId].data[0]](&gTasks[taskId]); + sEscapeRopeWarpInFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void sub_80B7EC4(struct Task *task) +static void EscapeRopeWarpInFieldEffect_0(struct Task *task) { if (IsWeatherNotFadingIn()) { @@ -2232,9 +2237,9 @@ static void sub_80B7EC4(struct Task *task) } } -static void sub_80B7EE8(struct Task *task) +static void EscapeRopeWarpInFieldEffect_1(struct Task *task) { - u8 spinDirections[5] = {1, 3, 4, 2, 1}; + u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (task->data[1] == 0 || (--task->data[1]) == 0) { @@ -2247,7 +2252,7 @@ static void sub_80B7EE8(struct Task *task) objectEvent->invisible = FALSE; ScriptContext2_Disable(); UnfreezeObjectEvents(); - DestroyTask(FindTaskIdByFunc(sub_80B7E94)); + DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpIn)); return; } ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection])); @@ -2260,24 +2265,24 @@ static void sub_80B7EE8(struct Task *task) objectEvent->invisible ^= 1; } -void CreateTeleportFieldEffectTask(void) +void FldEff_TeleportWarpOut(void) { - CreateTask(ExecuteTeleportFieldEffectTask, 0); + CreateTask(Task_TeleportWarpOut, 0); } -static void (*const sTeleportFieldEffectTasks[])(struct Task *) = { - TeleportFieldEffectTask1, - TeleportFieldEffectTask2, - TeleportFieldEffectTask3, - TeleportFieldEffectTask4 +static void (*const sTeleportWarpOutFieldEffectFuncs[])(struct Task *) = { + TeleportWarpOutFieldEffect_0, + TeleportWarpOutFieldEffect_1, + TeleportWarpOutFieldEffect_2, + TeleportWarpOutFieldEffect_3 }; -static void ExecuteTeleportFieldEffectTask(u8 taskId) +static void Task_TeleportWarpOut(u8 taskId) { - sTeleportFieldEffectTasks[gTasks[taskId].data[0]](&gTasks[taskId]); + sTeleportWarpOutFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void TeleportFieldEffectTask1(struct Task *task) +static void TeleportWarpOutFieldEffect_0(struct Task *task) { ScriptContext2_Enable(); FreezeObjectEvents(); @@ -2286,7 +2291,7 @@ static void TeleportFieldEffectTask1(struct Task *task) task->data[0]++; } -static void TeleportFieldEffectTask2(struct Task *task) +static void TeleportWarpOutFieldEffect_1(struct Task *task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2306,7 +2311,7 @@ static void TeleportFieldEffectTask2(struct Task *task) } } -static void TeleportFieldEffectTask3(struct Task *task) +static void TeleportWarpOutFieldEffect_2(struct Task *task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2334,7 +2339,7 @@ static void TeleportFieldEffectTask3(struct Task *task) } } -static void TeleportFieldEffectTask4(struct Task *task) +static void TeleportWarpOutFieldEffect_3(struct Task *task) { if (!gPaletteFade.active) { @@ -2349,13 +2354,13 @@ static void TeleportFieldEffectTask4(struct Task *task) SetWarpDestinationToLastHealLocation(); WarpIntoMap(); SetMainCallback2(CB2_LoadMap); - gFieldCallback = mapldr_08085D88; - DestroyTask(FindTaskIdByFunc(ExecuteTeleportFieldEffectTask)); + gFieldCallback = FieldCallback_TeleportWarpIn; + DestroyTask(FindTaskIdByFunc(Task_TeleportWarpOut)); } } } -static void mapldr_08085D88(void) +static void FieldCallback_TeleportWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); @@ -2364,21 +2369,21 @@ static void mapldr_08085D88(void) gFieldCallback = NULL; gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; CameraObjectReset2(); - CreateTask(sub_80B8250, 0); + CreateTask(Task_TeleportWarpIn, 0); } -void (*const gUnknown_0855C49C[])(struct Task *) = { - sub_80B8280, - sub_80B830C, - sub_80B8410 +void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = { + TeleportWarpInFieldEffect_0, + TeleportWarpInFieldEffect_1, + TeleportWarpInFieldEffect_2 }; -static void sub_80B8250(u8 taskId) +static void Task_TeleportWarpIn(u8 taskId) { - gUnknown_0855C49C[gTasks[taskId].data[0]](&gTasks[taskId]); + sTeleportWarpInFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void sub_80B8280(struct Task *task) +static void TeleportWarpInFieldEffect_0(struct Task *task) { struct Sprite *sprite; s16 centerToCornerVecY; @@ -2397,9 +2402,9 @@ static void sub_80B8280(struct Task *task) } } -static void sub_80B830C(struct Task *task) +static void TeleportWarpInFieldEffect_1(struct Task *task) { - u8 spinDirections[5] = {1, 3, 4, 2, 1}; + u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; if ((sprite->pos2.y += task->data[1]) >= -8) @@ -2436,9 +2441,9 @@ static void sub_80B830C(struct Task *task) } } -static void sub_80B8410(struct Task *task) +static void TeleportWarpInFieldEffect_2(struct Task *task) { - u8 spinDirections[5] = {1, 3, 4, 2, 1}; + u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if ((--task->data[1]) == 0) { @@ -2449,7 +2454,7 @@ static void sub_80B8410(struct Task *task) ScriptContext2_Disable(); CameraObjectReset1(); UnfreezeObjectEvents(); - DestroyTask(FindTaskIdByFunc(sub_80B8250)); + DestroyTask(FindTaskIdByFunc(Task_TeleportWarpIn)); } } } @@ -2459,10 +2464,10 @@ bool8 FldEff_FieldMoveShowMon(void) u8 taskId; if (IsMapTypeOutdoors(GetCurrentMapType()) == TRUE) { - taskId = CreateTask(sub_80B8554, 0xff); + taskId = CreateTask(Task_FieldMoveShowMonOutdoors, 0xff); } else { - taskId = CreateTask(sub_80B88B4, 0xff); + taskId = CreateTask(Task_FieldMoveShowMonIndoors, 0xff); } gTasks[taskId].data[15] = sub_80B8C60(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); return FALSE; @@ -2482,22 +2487,22 @@ bool8 FldEff_FieldMoveShowMonInit(void) return FALSE; } -void (*const gUnknown_0855C4A8[])(struct Task *) = { - sub_80B8584, - sub_80B85F8, - sub_80B8660, - sub_80B86EC, - sub_80B871C, - sub_80B8770, - overworld_bg_setup_2, +void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = { + FieldMoveShowMonOutdoorsEffect_0, + FieldMoveShowMonOutdoorsEffect_1, + FieldMoveShowMonOutdoorsEffect_2, + FieldMoveShowMonOutdoorsEffect_3, + FieldMoveShowMonOutdoorsEffect_4, + FieldMoveShowMonOutdoorsEffect_5, + FieldMoveShowMonOutdoorsEffect_6, }; -static void sub_80B8554(u8 taskId) +static void Task_FieldMoveShowMonOutdoors(u8 taskId) { - gUnknown_0855C4A8[gTasks[taskId].data[0]](&gTasks[taskId]); + sFieldMoveShowMonOutdoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void sub_80B8584(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_0(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; @@ -2510,11 +2515,11 @@ static void sub_80B8584(struct Task *task) SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); SetGpuReg(REG_OFFSET_WININ, task->data[3]); SetGpuReg(REG_OFFSET_WINOUT, task->data[4]); - SetVBlankCallback(sub_80B880C); + SetVBlankCallback(VBlankCB_FieldMoveShowMonOutdoors); task->data[0]++; } -static void sub_80B85F8(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_1(struct Task *task) { u16 offset = ((REG_BG0CNT >> 2) << 14); u16 delta = ((REG_BG0CNT >> 8) << 11); @@ -2525,7 +2530,7 @@ static void sub_80B85F8(struct Task *task) task->data[0]++; } -static void sub_80B8660(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_2(struct Task *task) { s16 v0; s16 v2; @@ -2558,7 +2563,7 @@ static void sub_80B8660(struct Task *task) } } -static void sub_80B86EC(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_3(struct Task *task) { task->data[5] -= 16; if (gSprites[task->data[15]].data[7]) @@ -2567,7 +2572,7 @@ static void sub_80B86EC(struct Task *task) } } -static void sub_80B871C(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_4(struct Task *task) { s16 v2; s16 v3; @@ -2591,7 +2596,7 @@ static void sub_80B871C(struct Task *task) } } -static void sub_80B8770(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_5(struct Task *task) { u16 bg0cnt = (REG_BG0CNT >> 8) << 11; CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); @@ -2602,21 +2607,21 @@ static void sub_80B8770(struct Task *task) task->data[0]++; } -static void overworld_bg_setup_2(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_6(struct Task *task) { IntrCallback callback; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); SetVBlankCallback(callback); - sub_8197200(); + InitTextBoxGfxAndPrinters(); FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); - DestroyTask(FindTaskIdByFunc(sub_80B8554)); + DestroyTask(FindTaskIdByFunc(Task_FieldMoveShowMonOutdoors)); } -static void sub_80B880C(void) +static void VBlankCB_FieldMoveShowMonOutdoors(void) { IntrCallback callback; - struct Task *task = &gTasks[FindTaskIdByFunc(sub_80B8554)]; + struct Task *task = &gTasks[FindTaskIdByFunc(Task_FieldMoveShowMonOutdoors)]; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); callback(); SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); @@ -2638,31 +2643,31 @@ static void sub_80B8874(u16 offs) } } -void (*const gUnknown_0855C4C4[])(struct Task *) = { - sub_80B88E4, - sub_80B8920, - sub_80B898C, - sub_80B89DC, - sub_80B8A0C, - sub_80B8A44, - sub_80B8A64, +void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = { + FieldMoveShowMonIndoorsEffect_0, + FieldMoveShowMonIndoorsEffect_1, + FieldMoveShowMonIndoorsEffect_2, + FieldMoveShowMonIndoorsEffect_3, + FieldMoveShowMonIndoorsEffect_4, + FieldMoveShowMonIndoorsEffect_5, + FieldMoveShowMonIndoorsEffect_6, }; -static void sub_80B88B4(u8 taskId) +static void Task_FieldMoveShowMonIndoors(u8 taskId) { - gUnknown_0855C4C4[gTasks[taskId].data[0]](&gTasks[taskId]); + sFieldMoveShowMonIndoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void sub_80B88E4(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_0(struct Task *task) { SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); - SetVBlankCallback(sub_80B8AE0); + SetVBlankCallback(VBlankCB_FieldMoveShowMonIndoors); task->data[0]++; } -static void sub_80B8920(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_1(struct Task *task) { u16 offset; u16 delta; @@ -2675,7 +2680,7 @@ static void sub_80B8920(struct Task *task) task->data[0]++; } -static void sub_80B898C(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_2(struct Task *task) { if (sub_80B8B38(task)) { @@ -2687,7 +2692,7 @@ static void sub_80B898C(struct Task *task) sub_80B8B28(task); } -static void sub_80B89DC(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_3(struct Task *task) { sub_80B8B28(task); if (gSprites[task->data[15]].data[7]) @@ -2696,7 +2701,7 @@ static void sub_80B89DC(struct Task *task) } } -static void sub_80B8A0C(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_4(struct Task *task) { sub_80B8B28(task); task->data[3] = task->data[1] & 7; @@ -2706,7 +2711,7 @@ static void sub_80B8A0C(struct Task *task) task->data[0]++; } -static void sub_80B8A44(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_5(struct Task *task) { sub_80B8B28(task); if (sub_80B8BF0(task)) @@ -2715,7 +2720,7 @@ static void sub_80B8A44(struct Task *task) } } -static void sub_80B8A64(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_6(struct Task *task) { IntrCallback intrCallback; u16 bg0cnt; @@ -2723,17 +2728,17 @@ static void sub_80B8A64(struct Task *task) CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); SetVBlankCallback(intrCallback); - sub_8197200(); + InitTextBoxGfxAndPrinters(); FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); - DestroyTask(FindTaskIdByFunc(sub_80B88B4)); + DestroyTask(FindTaskIdByFunc(Task_FieldMoveShowMonIndoors)); } -static void sub_80B8AE0(void) +static void VBlankCB_FieldMoveShowMonIndoors(void) { IntrCallback intrCallback; struct Task *task; - task = &gTasks[FindTaskIdByFunc(sub_80B88B4)]; + task = &gTasks[FindTaskIdByFunc(Task_FieldMoveShowMonIndoors)]; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); intrCallback(); SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); @@ -2855,50 +2860,50 @@ static void sub_80B8D20(struct Sprite *sprite) u8 FldEff_UseSurf(void) { - u8 taskId = CreateTask(sub_80B8D84, 0xff); + u8 taskId = CreateTask(Task_SurfFieldEffect, 0xff); gTasks[taskId].data[15] = gFieldEffectArguments[0]; Overworld_ClearSavedMusic(); Overworld_ChangeMusicTo(MUS_NAMINORI); return FALSE; } -void (*const gUnknown_0855C4E0[])(struct Task *) = { - sub_80B8DB4, - sub_80B8E14, - sub_80B8E60, - sub_80B8EA8, - sub_80B8F24, +void (*const sSurfFieldEffectFuncs[])(struct Task *) = { + SurfFieldEffect_1, + SurfFieldEffect_2, + SurfFieldEffect_3, + SurfFieldEffect_4, + SurfFieldEffect_5, }; -static void sub_80B8D84(u8 taskId) +static void Task_SurfFieldEffect(u8 taskId) { - gUnknown_0855C4E0[gTasks[taskId].data[0]](&gTasks[taskId]); + sSurfFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void sub_80B8DB4(struct Task *task) +static void SurfFieldEffect_1(struct Task *task) { ScriptContext2_Enable(); FreezeObjectEvents(); gPlayerAvatar.preventStep = TRUE; - SetPlayerAvatarStateMask(8); + SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING); PlayerGetDestCoords(&task->data[1], &task->data[2]); MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->data[1], &task->data[2]); task->data[0]++; } -static void sub_80B8E14(struct Task *task) +static void SurfFieldEffect_2(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) { - sub_808C114(); + SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->data[0]++; } } -static void sub_80B8E60(struct Task *task) +static void SurfFieldEffect_3(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2910,13 +2915,13 @@ static void sub_80B8E60(struct Task *task) } } -static void sub_80B8EA8(struct Task *task) +static void SurfFieldEffect_4(struct Task *task) { struct ObjectEvent *objectEvent; if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(3)); + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); ObjectEventClearHeldMovementIfFinished(objectEvent); ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(objectEvent->movementDirection)); gFieldEffectArguments[0] = task->data[1]; @@ -2927,27 +2932,27 @@ static void sub_80B8EA8(struct Task *task) } } -static void sub_80B8F24(struct Task *task) +static void SurfFieldEffect_5(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { gPlayerAvatar.preventStep = FALSE; - gPlayerAvatar.flags &= 0xdf; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection)); sub_81555AC(objectEvent->fieldEffectSpriteId, 1); UnfreezeObjectEvents(); ScriptContext2_Disable(); FieldEffectActiveListRemove(FLDEFF_USE_SURF); - DestroyTask(FindTaskIdByFunc(sub_80B8D84)); + DestroyTask(FindTaskIdByFunc(Task_SurfFieldEffect)); } } u8 sub_80B8F98(void) { u8 i, j, k; - u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[36], 0x78, -0x18, 1); + u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RAYQUAZA], 0x78, -0x18, 1); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; @@ -2983,18 +2988,18 @@ u8 sub_80B8F98(void) u8 FldEff_NPCFlyOut(void) { - u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1); + u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0x78, 0, 1); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.paletteNum = 0; sprite->oam.priority = 1; - sprite->callback = sub_80B9128; + sprite->callback = SpriteCB_NPCFlyOut; sprite->data[1] = gFieldEffectArguments[0]; PlaySE(SE_W019); return spriteId; } -static void sub_80B9128(struct Sprite *sprite) +static void SpriteCB_NPCFlyOut(struct Sprite *sprite) { struct Sprite *npcSprite; @@ -3004,7 +3009,7 @@ static void sub_80B9128(struct Sprite *sprite) if (sprite->data[0]) { npcSprite = &gSprites[sprite->data[1]]; - npcSprite->coordOffsetEnabled = 0; + npcSprite->coordOffsetEnabled = FALSE; npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; npcSprite->pos2.x = 0; @@ -3016,45 +3021,47 @@ static void sub_80B9128(struct Sprite *sprite) } } +#define tAvatarFlags data[15] + u8 FldEff_UseFly(void) { - u8 taskId = CreateTask(sub_80B91D4, 0xfe); + u8 taskId = CreateTask(Task_FlyOut, 254); gTasks[taskId].data[1] = gFieldEffectArguments[0]; return 0; } -void (*const gUnknown_0855C4F4[])(struct Task *) = { - sub_80B9204, - sub_80B925C, - sub_80B92A0, - sub_80B92F8, - sub_80B933C, - sub_80B9390, - sub_80B9418, - sub_80B9474, - sub_80B9494, +void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = { + FlyOutFieldEffect_0, + FlyOutFieldEffect_1, + FlyOutFieldEffect_2, + FlyOutFieldEffect_3, + FlyOutFieldEffect_4, + FlyOutFieldEffect_5, + FlyOutFieldEffect_6, + FlyOutFieldEffect_7, + FlyOutFieldEffect_8, }; -static void sub_80B91D4(u8 taskId) +static void Task_FlyOut(u8 taskId) { - gUnknown_0855C4F4[gTasks[taskId].data[0]](&gTasks[taskId]); + sFlyOutFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void sub_80B9204(struct Task *task) +static void FlyOutFieldEffect_0(struct Task *task) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) { - task->data[15] = gPlayerAvatar.flags; + task->tAvatarFlags = gPlayerAvatar.flags; gPlayerAvatar.preventStep = TRUE; - SetPlayerAvatarStateMask(1); - sub_808C114(); + SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT); + SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->data[0]++; } } -static void sub_80B925C(struct Task *task) +static void FlyOutFieldEffect_1(struct Task *task) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(objectEvent)) @@ -3065,12 +3072,12 @@ static void sub_80B925C(struct Task *task) } } -static void sub_80B92A0(struct Task *task) +static void FlyOutFieldEffect_2(struct Task *task) { if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - if (task->data[15] & 0x08) + if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) { sub_81555AC(objectEvent->fieldEffectSpriteId, 2); sub_81555D8(objectEvent->fieldEffectSpriteId, 0); @@ -3080,7 +3087,7 @@ static void sub_80B92A0(struct Task *task) } } -static void sub_80B92F8(struct Task *task) +static void FlyOutFieldEffect_3(struct Task *task) { if (sub_80B9508(task->data[1])) { @@ -3091,7 +3098,7 @@ static void sub_80B92F8(struct Task *task) } } -static void sub_80B933C(struct Task *task) +static void FlyOutFieldEffect_4(struct Task *task) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent)) @@ -3102,16 +3109,16 @@ static void sub_80B933C(struct Task *task) } } -static void sub_80B9390(struct Task *task) +static void FlyOutFieldEffect_5(struct Task *task) { if ((++task->data[2]) >= 8) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0x03)); + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); - objectEvent->inanimate = 1; + objectEvent->inanimate = TRUE; ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT); - if (task->data[15] & 0x08) + if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) { DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]); } @@ -3120,21 +3127,21 @@ static void sub_80B9390(struct Task *task) } } -static void sub_80B9418(struct Task *task) +static void FlyOutFieldEffect_6(struct Task *task) { if ((++task->data[2]) >= 10) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventClearHeldMovementIfActive(objectEvent); - objectEvent->inanimate = 0; - objectEvent->hasShadow = 0; + objectEvent->inanimate = FALSE; + objectEvent->hasShadow = FALSE; sub_80B9560(task->data[1], objectEvent->spriteId); CameraObjectReset2(); task->data[0]++; } } -static void sub_80B9474(struct Task *task) +static void FlyOutFieldEffect_7(struct Task *task) { if (sub_80B9508(task->data[1])) { @@ -3143,12 +3150,12 @@ static void sub_80B9474(struct Task *task) } } -static void sub_80B9494(struct Task *task) +static void FlyOutFieldEffect_8(struct Task *task) { if (!gPaletteFade.active) { FieldEffectActiveListRemove(FLDEFF_USE_FLY); - DestroyTask(FindTaskIdByFunc(sub_80B91D4)); + DestroyTask(FindTaskIdByFunc(Task_FlyOut)); } } @@ -3156,7 +3163,7 @@ static u8 sub_80B94C4(void) { u8 spriteId; struct Sprite *sprite; - spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1); + spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0xff, 0xb4, 0x1); sprite = &gSprites[spriteId]; sprite->oam.paletteNum = 0; sprite->oam.priority = 1; @@ -3245,7 +3252,7 @@ static void sub_80B963C(struct Sprite *sprite) if (sprite->data[6] != MAX_SPRITES) { struct Sprite *sprite1 = &gSprites[sprite->data[6]]; - sprite1->coordOffsetEnabled = 0; + sprite1->coordOffsetEnabled = FALSE; sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; sprite1->pos2.x = 0; @@ -3309,26 +3316,26 @@ void sub_80B9794(u8 spriteId) u8 FldEff_FlyIn(void) { - CreateTask(sub_80B97D4, 0xfe); + CreateTask(Task_FlyIn, 0xfe); return 0; } -void (*const gUnknown_0855C550[])(struct Task *) = { - sub_80B9804, - sub_80B98B8, - sub_80B9924, - sub_80B9978, - sub_80B99F0, - sub_80B9A28, - sub_80B9A60, +void (*const sFlyInFieldEffectFuncs[])(struct Task *) = { + FlyInFieldEffect_0, + FlyInFieldEffect_1, + FlyInFieldEffect_2, + FlyInFieldEffect_3, + FlyInFieldEffect_4, + FlyInFieldEffect_5, + FlyInFieldEffect_6, }; -static void sub_80B97D4(u8 taskId) +static void Task_FlyIn(u8 taskId) { - gUnknown_0855C550[gTasks[taskId].data[0]](&gTasks[taskId]); + sFlyInFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void sub_80B9804(struct Task *task) +static void FlyInFieldEffect_0(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -3336,14 +3343,14 @@ static void sub_80B9804(struct Task *task) { task->data[0]++; task->data[2] = 17; - task->data[15] = gPlayerAvatar.flags; + task->tAvatarFlags = gPlayerAvatar.flags; gPlayerAvatar.preventStep = TRUE; - SetPlayerAvatarStateMask(0x01); - if (task->data[15] & 0x08) + SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT); + if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) { sub_81555AC(objectEvent->fieldEffectSpriteId, 0); } - ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0x3)); + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); CameraObjectReset2(); ObjectEventTurn(objectEvent, DIR_WEST); StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); @@ -3354,7 +3361,7 @@ static void sub_80B9804(struct Task *task) } } -static void sub_80B98B8(struct Task *task) +static void FlyInFieldEffect_1(struct Task *task) { struct ObjectEvent *objectEvent; struct Sprite *sprite; @@ -3372,9 +3379,9 @@ static void sub_80B98B8(struct Task *task) } } -static void sub_80B9924(struct Task *task) +static void FlyInFieldEffect_2(struct Task *task) { - s16 unknown_0855C56C[18] = { + s16 sYPositions[18] = { -2, -4, -5, @@ -3395,14 +3402,14 @@ static void sub_80B9924(struct Task *task) 8 }; struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.y = unknown_0855C56C[task->data[2]]; - if ((++task->data[2]) >= 18) + sprite->pos2.y = sYPositions[task->data[2]]; + if ((++task->data[2]) >= (int)ARRAY_COUNT(sYPositions)) { task->data[0]++; } } -static void sub_80B9978(struct Task *task) +static void FlyInFieldEffect_3(struct Task *task) { struct ObjectEvent *objectEvent; struct Sprite *sprite; @@ -3410,18 +3417,18 @@ static void sub_80B9978(struct Task *task) { objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; sprite = &gSprites[objectEvent->spriteId]; - objectEvent->inanimate = 0; + objectEvent->inanimate = FALSE; MoveObjectEventToMapCoords(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->coordOffsetEnabled = 1; - sub_808C114(); + sprite->coordOffsetEnabled = TRUE; + SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->data[0]++; } } -static void sub_80B99F0(struct Task *task) +static void FlyInFieldEffect_4(struct Task *task) { if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId])) { @@ -3430,7 +3437,7 @@ static void sub_80B99F0(struct Task *task) } } -static void sub_80B9A28(struct Task *task) +static void FlyInFieldEffect_5(struct Task *task) { if (sub_80B9508(task->data[1])) { @@ -3440,35 +3447,35 @@ static void sub_80B9A28(struct Task *task) } } -static void sub_80B9A60(struct Task *task) +static void FlyInFieldEffect_6(struct Task *task) { u8 state; struct ObjectEvent *objectEvent; if ((--task->data[1]) == 0) { objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - state = 0; - if (task->data[15] & 0x08) + state = PLAYER_AVATAR_STATE_NORMAL; + if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) { - state = 3; + state = PLAYER_AVATAR_STATE_SURFING; sub_81555AC(objectEvent->fieldEffectSpriteId, 1); } ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state)); ObjectEventTurn(objectEvent, DIR_SOUTH); - gPlayerAvatar.flags = task->data[15]; + gPlayerAvatar.flags = task->tAvatarFlags; gPlayerAvatar.preventStep = FALSE; FieldEffectActiveListRemove(FLDEFF_FLY_IN); - DestroyTask(FindTaskIdByFunc(sub_80B97D4)); + DestroyTask(FindTaskIdByFunc(Task_FlyIn)); } } -bool8 sub_80B9ADC(void) +bool8 FldEff_DestroyDeoxysRock(void) { u8 taskId; u8 objectEventIdBuffer; if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) { - taskId = CreateTask(sub_80B9BE8, 0x50); + taskId = CreateTask(Task_DestroyDeoxysRock, 0x50); gTasks[taskId].data[2] = objectEventIdBuffer; gTasks[taskId].data[6] = gFieldEffectArguments[0]; gTasks[taskId].data[7] = gFieldEffectArguments[1]; @@ -3476,12 +3483,12 @@ bool8 sub_80B9ADC(void) } else { - FieldEffectActiveListRemove(0x41); + FieldEffectActiveListRemove(FLDEFF_DESTROY_DEOXYS_ROCK); } return FALSE; } -void sub_80B9B3C(u8 taskId) +static void Task_PanCameraForDestroyingDeoxysRock(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[7] != 0) @@ -3520,31 +3527,29 @@ void sub_80B9BD0(u8 taskId) gTasks[taskId].data[7] = 1; } -void (*const gUnknown_0855C590[])(s16*, u8) = { - sub_80B9C28, - sub_80B9C54, - sub_80B9CDC, +void (*const sDestroyDeoxysRockFieldEffectFuncs[])(s16*, u8) = { + DestroyDeoxysRockFieldEffect_0, + DestroyDeoxysRockFieldEffect_1, + DestroyDeoxysRockFieldEffect_2, }; -static void sub_80B9BE8(u8 taskId) +static void Task_DestroyDeoxysRock(u8 taskId) { s16 *data = gTasks[taskId].data; InstallCameraPanAheadCallback(); SetCameraPanningCallback(0); - gUnknown_0855C590[data[1]](data, taskId); + sDestroyDeoxysRockFieldEffectFuncs[data[1]](data, taskId); } -void sub_80B9C28(s16* data, u8 taskId) +static void DestroyDeoxysRockFieldEffect_0(s16* data, u8 taskId) { - u8 newTaskId = CreateTask(sub_80B9B3C, 0x5A); + u8 newTaskId = CreateTask(Task_PanCameraForDestroyingDeoxysRock, 0x5A); PlaySE(SE_T_KAMI2); data[5] = newTaskId; data[1]++; } -void sub_80B9D24(struct Sprite*); - -void sub_80B9C54(s16* data, u8 taskId) +static void DestroyDeoxysRockFieldEffect_1(s16* data, u8 taskId) { if (++data[3] > 0x78) { @@ -3560,13 +3565,13 @@ void sub_80B9C54(s16* data, u8 taskId) } } -void sub_80B9CDC(s16* a0, u8 taskId) +static void DestroyDeoxysRockFieldEffect_2(s16* a0, u8 taskId) { - if (!gPaletteFade.active && !FuncIsActiveTask(sub_80B9B3C)) + if (!gPaletteFade.active && !FuncIsActiveTask(Task_PanCameraForDestroyingDeoxysRock)) { InstallCameraPanAheadCallback(); RemoveObjectEventByLocalIdAndMap(a0[6], a0[7], a0[8]); - FieldEffectActiveListRemove(0x41); + FieldEffectActiveListRemove(FLDEFF_DESTROY_DEOXYS_ROCK); DestroyTask(taskId); } } @@ -3615,7 +3620,7 @@ const struct SpriteTemplate gUnknown_0855C5EC = { .callback = sub_80B9DB8 }; -void sub_80B9D24(struct Sprite* sprite) +static void sub_80B9D24(struct Sprite* sprite) { int i; int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x; @@ -3658,7 +3663,7 @@ static void sub_80B9DB8(struct Sprite* sprite) DestroySprite(sprite); } -bool8 Fldeff_MoveDeoxysRock(struct Sprite* sprite) +bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite) { u8 objectEventIdBuffer; if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) @@ -3672,7 +3677,7 @@ bool8 Fldeff_MoveDeoxysRock(struct Sprite* sprite) xPos = (gFieldEffectArguments[3] - xPos) * 16; yPos = (gFieldEffectArguments[4] - yPos) * 16; ShiftObjectEventCoords(object, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7); - taskId = CreateTask(Fldeff_MoveDeoxysRock_Step, 0x50); + taskId = CreateTask(Task_MoveDeoxysRock, 0x50); gTasks[taskId].data[1] = object->spriteId; gTasks[taskId].data[2] = gSprites[object->spriteId].pos1.x + xPos; gTasks[taskId].data[3] = gSprites[object->spriteId].pos1.y + yPos; @@ -3682,7 +3687,7 @@ bool8 Fldeff_MoveDeoxysRock(struct Sprite* sprite) return FALSE; } -static void Fldeff_MoveDeoxysRock_Step(u8 taskId) +static void Task_MoveDeoxysRock(u8 taskId) { // BUG: Possible divide by zero s16 *data = gTasks[taskId].data; @@ -3711,7 +3716,7 @@ static void Fldeff_MoveDeoxysRock_Step(u8 taskId) sprite->pos1.y = data[3]; ShiftStillObjectEventCoords(object); object->triggerGroundEffectsOnStop = TRUE; - FieldEffectActiveListRemove(0x42); + FieldEffectActiveListRemove(FLDEFF_MOVE_DEOXYS_ROCK); DestroyTask(taskId); } break; diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 52c30ab0ff..d6bffd2068 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -166,7 +166,7 @@ u8 CreateWarpArrowSprite(void) u8 spriteId; struct Sprite *sprite; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 0x52); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -202,11 +202,11 @@ void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y) } } -const u8 gShadowEffectTemplateIds[] = { - 0, - 1, - 2, - 3 +static const u8 sShadowEffectTemplateIds[] = { + FLDEFFOBJ_SHADOW_S, + FLDEFFOBJ_SHADOW_M, + FLDEFFOBJ_SHADOW_L, + FLDEFFOBJ_SHADOW_XL }; const u16 gShadowVerticalOffsets[] = { @@ -224,7 +224,7 @@ u32 FldEff_Shadow(void) objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94); if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; @@ -275,7 +275,7 @@ u32 FldEff_TallGrass(void) x = gFieldEffectArguments[0]; y = gFieldEffectArguments[1]; sub_80930E0(&x, &y, 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -341,7 +341,7 @@ u32 FldEff_JumpTallGrass(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_TALL_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -381,7 +381,7 @@ u32 FldEff_LongGrass(void) x = gFieldEffectArguments[0]; y = gFieldEffectArguments[1]; sub_80930E0(&x, &y, 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -444,7 +444,7 @@ u32 FldEff_JumpLongGrass(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_LONG_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -465,7 +465,7 @@ u32 FldEff_ShortGrass(void) objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SHORT_GRASS], 0, 0, 0); if (spriteId != MAX_SPRITES) { sprite = &(gSprites[spriteId]); @@ -522,7 +522,7 @@ u32 FldEff_SandFootprints(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -540,7 +540,7 @@ u32 FldEff_DeepSandFootprints(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_DEEP_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -558,7 +558,7 @@ u32 FldEff_BikeTireTracks(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIKE_TIRE_TRACKS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -611,7 +611,7 @@ u32 FldEff_Splash(void) objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); if (spriteId != MAX_SPRITES) { graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); @@ -650,7 +650,7 @@ u32 FldEff_JumpSmallSplash(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_SMALL_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -668,7 +668,7 @@ u32 FldEff_JumpBigSplash(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_BIG_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -690,7 +690,7 @@ u32 FldEff_FeetInFlowingWater(void) objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); if (spriteId != MAX_SPRITES) { graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); @@ -744,7 +744,7 @@ u32 FldEff_Ripple(void) u8 spriteId; struct Sprite *sprite; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[5], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RIPPLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -764,7 +764,7 @@ u32 FldEff_HotSpringsWater(void) objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_HOT_SPRINGS_WATER], 0, 0, 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -806,7 +806,7 @@ u32 FldEff_Unknown19(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -817,19 +817,19 @@ u32 FldEff_Unknown19(void) return 0; } -u32 FldEff_Unknown20(void) +u32 FldEff_UnusedGrass(void) { u8 spriteId; struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNKNOWN_20; + sprite->data[0] = FLDEFF_UNUSED_GRASS; } return 0; } @@ -840,7 +840,7 @@ u32 FldEff_Unknown21(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -857,7 +857,7 @@ u32 FldEff_Unknown22(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -889,7 +889,7 @@ u32 FldEff_Ash(void) x = gFieldEffectArguments[0]; y = gFieldEffectArguments[1]; sub_80930E0(&x, &y, 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH], x, y, gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -945,7 +945,7 @@ u32 FldEff_SurfBlob(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96); if (spriteId !=MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -1107,7 +1107,7 @@ u32 FldEff_Dust(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_GROUND_IMPACT_DUST], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -1129,7 +1129,7 @@ u32 FldEff_SandPile(void) objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_PILE], 0, 0, 0); if (spriteId != MAX_SPRITES) { graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); @@ -1183,7 +1183,7 @@ u32 FldEff_Bubbles(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -1211,7 +1211,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void) struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -1225,20 +1225,20 @@ u32 FldEff_BerryTreeGrowthSparkle(void) u32 ShowTreeDisguiseFieldEffect(void) { - return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 24, 4); + return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, FLDEFFOBJ_TREE_DISGUISE, 4); } u32 ShowMountainDisguiseFieldEffect(void) { - return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 25, 3); + return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, FLDEFFOBJ_MOUNTAIN_DISGUISE, 3); } u32 ShowSandDisguiseFieldEffect(void) { - return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 28, 2); + return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, FLDEFFOBJ_SAND_DISGUISE, 2); } -static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) +static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum) { u8 spriteId; struct Sprite *sprite; @@ -1248,7 +1248,7 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) FieldEffectActiveListRemove(fldEff); return MAX_SPRITES; } - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[fldEffObj], 0, 0, 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -1331,7 +1331,7 @@ u32 FldEff_Sparkle(void) gFieldEffectArguments[0] += 7; gFieldEffectArguments[1] += 7; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = gFieldEffectArguments[2]; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index b0918a78de..c482f39d6a 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -379,9 +379,9 @@ static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEve static void npc_clear_strange_bits(struct ObjectEvent *objEvent) { - objEvent->inanimate = 0; - objEvent->disableAnim = 0; - objEvent->facingDirectionLocked = 0; + objEvent->inanimate = FALSE; + objEvent->disableAnim = FALSE; + objEvent->facingDirectionLocked = FALSE; gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH; } @@ -424,14 +424,14 @@ static u8 GetForcedMovementByMetatileBehavior(void) static bool8 ForcedMovement_None(void) { - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - playerObjEvent->facingDirectionLocked = 0; - playerObjEvent->enableAnim = 1; + playerObjEvent->facingDirectionLocked = FALSE; + playerObjEvent->enableAnim = TRUE; SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection); - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED_MOVE; } return FALSE; } @@ -441,7 +441,7 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8)) struct PlayerAvatar *playerAvatar = &gPlayerAvatar; u8 collision = CheckForPlayerAvatarCollision(direction); - playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; + playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE; if (collision) { ForcedMovement_None(); @@ -453,7 +453,7 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8)) { if (collision == COLLISION_LEDGE_JUMP) PlayerJumpLedge(direction); - playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; + playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE; playerAvatar->runningState = MOVING; return 1; } @@ -470,7 +470,7 @@ static u8 DoForcedMovementInCurrentDirection(void (*a)(u8)) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - playerObjEvent->disableAnim = 1; + playerObjEvent->disableAnim = TRUE; return DoForcedMovement(playerObjEvent->movementDirection, a); } @@ -519,12 +519,12 @@ static bool8 ForcedMovement_PushedEastByCurrent(void) return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent); } -u8 ForcedMovement_Slide(u8 direction, void (*b)(u8)) +static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8)) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - playerObjEvent->disableAnim = 1; - playerObjEvent->facingDirectionLocked = 1; + playerObjEvent->disableAnim = TRUE; + playerObjEvent->facingDirectionLocked = TRUE; return DoForcedMovement(direction, b); } @@ -567,8 +567,8 @@ static bool8 ForcedMovement_MuddySlope(void) if (playerObjEvent->movementDirection != DIR_NORTH || GetPlayerSpeed() <= 3) { Bike_UpdateBikeCounterSpeed(0); - playerObjEvent->facingDirectionLocked = 1; - return DoForcedMovement(1, PlayerGoSpeed2); + playerObjEvent->facingDirectionLocked = TRUE; + return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed2); } else { @@ -1328,7 +1328,7 @@ void ClearPlayerAvatarInfo(void) void SetPlayerAvatarStateMask(u8 flags) { - gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_6 | PLAYER_AVATAR_FLAG_5); + gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_FORCED_MOVE | PLAYER_AVATAR_FLAG_5); gPlayerAvatar.flags |= flags; } @@ -1404,13 +1404,13 @@ void SetPlayerInvisibility(bool8 invisible) gSprites[gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId].invisible = invisible; } -void sub_808C114(void) +void SetPlayerAvatarFieldMove(void) { ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE)); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); } -void sub_808C15C(u8 direction) +static void SetPlayerAvatarFishing(u8 direction) { ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FISHING)); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingDirectionAnimNum(direction)); @@ -1423,7 +1423,7 @@ void PlayerUseAcroBikeOnBumpySlope(u8 direction) SeekSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 1); } -void sub_808C228(u8 direction) +void SetPlayerAvatarWatering(u8 direction) { ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_WATERING)); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFaceDirectionAnimNum(direction)); @@ -1739,8 +1739,8 @@ static bool8 Fishing2(struct Task *task) task->tPlayerGfxId = gObjectEvents[gPlayerAvatar.objectEventId].graphicsId; playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventClearHeldMovementIfActive(playerObjEvent); - playerObjEvent->enableAnim = 1; - sub_808C15C(playerObjEvent->facingDirection); + playerObjEvent->enableAnim = TRUE; + SetPlayerAvatarFishing(playerObjEvent->facingDirection); task->tStep++; return FALSE; } diff --git a/src/field_region_map.c b/src/field_region_map.c index b442675f38..fc6f0fa767 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -116,7 +116,7 @@ static void MCB2_InitRegionMapRegisters(void) InitWindows(sFieldRegionMapWindowTemplates); DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 0x27, 0xd0); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); SetMainCallback2(MCB2_FieldUpdateRegionMap); SetVBlankCallback(VBCB_FieldUpdateRegionMap); } @@ -134,7 +134,7 @@ static void MCB2_FieldUpdateRegionMap(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); } static void FieldUpdateRegionMap(void) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 51f719fc95..971e58cf40 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -12,6 +12,7 @@ #include "field_special_scene.h" #include "field_weather.h" #include "gpu_regs.h" +#include "io_reg.h" #include "link.h" #include "link_rfu.h" #include "load_save.h" @@ -34,13 +35,11 @@ #include "trainer_hill.h" #include "fldeff.h" -extern const u16 gOrbEffectBackgroundLayerFlags[]; - // This file's functions. static void sub_8080B9C(u8); static void Task_ExitNonAnimDoor(u8); static void Task_ExitNonDoor(u8); -static void task0A_fade_n_map_maybe(u8); +static void Task_DoContestHallWarp(u8); static void sub_808115C(u8); static void FillPalBufferWhite(void); static void Task_ExitDoor(u8); @@ -314,7 +313,7 @@ static void FieldCB_MossdeepGymWarpExit(void) PlaySE(SE_TK_WARPOUT); CreateTask(Task_ExitNonDoor, 10); ScriptContext2_Enable(); - sub_8085540(0xE); + SetObjectEventLoadFlag((~SKIP_OBJECT_EVENT_LOAD) & 0xF); } static void Task_ExitDoor(u8 taskId) @@ -558,7 +557,7 @@ void DoTeleportWarp(void) void DoMossdeepGymWarp(void) { - sub_8085540(1); + SetObjectEventLoadFlag(SKIP_OBJECT_EVENT_LOAD); ScriptContext2_Enable(); SaveObjectEvents(); TryFadeOutOldMapMusic(); @@ -576,19 +575,21 @@ void DoPortholeWarp(void) gFieldCallback = FieldCB_ShowPortholeView; } -static void sub_80AF8E0(u8 taskId) +#define tState data[0] + +static void Task_DoCableClubWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: ScriptContext2_Enable(); - task->data[0]++; + task->tState++; break; case 1: if (!PaletteFadeActive() && BGMusicStopped()) - task->data[0]++; + task->tState++; break; case 2: WarpIntoMap(); @@ -598,13 +599,15 @@ static void sub_80AF8E0(u8 taskId) } } +#undef tState + void DoCableClubWarp(void) { ScriptContext2_Enable(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlaySE(SE_KAIDAN); - CreateTask(sub_80AF8E0, 10); + CreateTask(Task_DoCableClubWarp, 10); } static void Task_ReturnToWorldFromLinkRoom(u8 taskId) @@ -727,7 +730,7 @@ static void Task_DoDoorWarp(u8 taskId) } } -static void task0A_fade_n_map_maybe(u8 taskId) +static void Task_DoContestHallWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -746,7 +749,7 @@ static void task0A_fade_n_map_maybe(u8 taskId) break; case 2: WarpIntoMap(); - SetMainCallback2(sub_8086024); + SetMainCallback2(CB2_ReturnToFieldContestHall); DestroyTask(taskId); break; } @@ -760,7 +763,7 @@ void DoContestHallWarp(void) PlayRainStoppingSoundEffect(); PlaySE(SE_KAIDAN); gFieldCallback = FieldCB_WarpExitFadeFromBlack; - CreateTask(task0A_fade_n_map_maybe, 10); + CreateTask(Task_DoContestHallWarp, 10); } static void SetFlashScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right) diff --git a/src/fieldmap.c b/src/fieldmap.c index e953e0f935..a046bf4fae 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -943,7 +943,7 @@ static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, return FALSE; } -void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, u16 offset) +static void CopyTilesetToVram(struct Tileset const *tileset, u16 numTiles, u16 offset) { if (tileset) { @@ -954,7 +954,7 @@ void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, } } -void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, u16 offset) +static void CopyTilesetToVramUsingHeap(struct Tileset const *tileset, u16 numTiles, u16 offset) { if (tileset) { @@ -975,7 +975,7 @@ void nullsub_90(void) } -void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size) +void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) { u16 black = RGB_BLACK; @@ -1000,45 +1000,45 @@ void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u1 } } -void copy_map_tileset1_to_vram(struct MapLayout const *mapLayout) +void CopyPrimaryTilesetToVram(struct MapLayout const *mapLayout) { - copy_tileset_patterns_to_vram(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0); + CopyTilesetToVram(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0); } -void copy_map_tileset2_to_vram(struct MapLayout const *mapLayout) +void CopySecondaryTilesetToVram(struct MapLayout const *mapLayout) { - copy_tileset_patterns_to_vram(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); + CopyTilesetToVram(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); } -void copy_map_tileset2_to_vram_2(struct MapLayout const *mapLayout) +void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout) { - copy_tileset_patterns_to_vram2(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); + CopyTilesetToVramUsingHeap(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); } -void apply_map_tileset1_palette(struct MapLayout const *mapLayout) +static void LoadPrimaryTilesetPalette(struct MapLayout const *mapLayout) { - apply_map_tileset_palette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2); + LoadTilesetPalette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2); } -void apply_map_tileset2_palette(struct MapLayout const *mapLayout) +void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout) { - apply_map_tileset_palette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2); + LoadTilesetPalette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2); } -void copy_map_tileset1_tileset2_to_vram(struct MapLayout const *mapLayout) +void CopyMapTilesetsToVram(struct MapLayout const *mapLayout) { if (mapLayout) { - copy_tileset_patterns_to_vram2(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0); - copy_tileset_patterns_to_vram2(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); + CopyTilesetToVramUsingHeap(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0); + CopyTilesetToVramUsingHeap(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); } } -void apply_map_tileset1_tileset2_palette(struct MapLayout const *mapLayout) +void LoadMapTilesetPalettes(struct MapLayout const *mapLayout) { if (mapLayout) { - apply_map_tileset1_palette(mapLayout); - apply_map_tileset2_palette(mapLayout); + LoadPrimaryTilesetPalette(mapLayout); + LoadSecondaryTilesetPalette(mapLayout); } } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 88927959ec..f5e06e8f6a 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -281,7 +281,7 @@ static void FieldCallback_CutGrass(void) bool8 FldEff_UseCutOnGrass(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)StartCutGrassFieldEffect >> 16; gTasks[taskId].data[9] = (u32)StartCutGrassFieldEffect; @@ -297,7 +297,7 @@ static void FieldCallback_CutTree(void) bool8 FldEff_UseCutOnTree(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)StartCutTreeFieldEffect >> 16; gTasks[taskId].data[9] = (u32)StartCutTreeFieldEffect; diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c index ee5caa0df4..322758a421 100644 --- a/src/fldeff_dig.c +++ b/src/fldeff_dig.c @@ -37,7 +37,7 @@ static void hm2_dig(void) bool8 FldEff_UseDig(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)sub_8135780 >> 16; gTasks[taskId].data[9] = (u32)sub_8135780; diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index 10fb78ee23..d1f262b5c7 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -8,161 +8,188 @@ static EWRAM_DATA u8 sEscalatorAnim_TaskId = 0; -static void sub_80E12E8(u8 taskId, const s16 *list, u16 isImpassableFlag) -{ - s16 r5 = gTasks[taskId].data[4] - 1; - s16 r3 = gTasks[taskId].data[5] - 1; - s16 r4 = gTasks[taskId].data[1]; - s16 y; - s16 x; +static void SetEscalatorMetatile(u8 taskId, const s16 *metatileIds, u16 metatileMasks); +static void Task_DrawEscalator(u8 taskId); +static void Task_DrawTeleporterHousing(u8 taskId); +static void Task_DrawTeleporterCable(u8 taskId); - if (gTasks[taskId].data[2] == 0) - { - for (y = 0; y < 3; y++) - { - for (x = 0; x < 3; x++) - { - s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y); +#define ESCALATOR_STAGES 3 +#define LAST_ESCALATOR_STAGE (ESCALATOR_STAGES - 1) - if (list[r4] == metatileId) - { - if (r4 != 2) - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[r4 + 1]); - else - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[0]); - } - } - } - } - else - { - for (y = 0; y < 3; y++) - { - for (x = 0; x < 3; x++) - { - s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y); - - if (list[2 - r4] == metatileId) - { - if (r4 != 2) - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[1 - r4]); - else - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[2]); - } - } - } - } -} - -static const u16 sElevatorMetatiles_1F_0[] = { +static const u16 sElevatorMetatiles_1F_0[ESCALATOR_STAGES] = { METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame2), METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame1), METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame0) }; -static const u16 sElevatorMetatiles_1F_1[] = { +static const u16 sElevatorMetatiles_1F_1[ESCALATOR_STAGES] = { METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame2), METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame1), METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame0) }; -static const u16 sElevatorMetatiles_1F_2[] = { +static const u16 sElevatorMetatiles_1F_2[ESCALATOR_STAGES] = { METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame2), METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame1), METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame0) }; -static const u16 sElevatorMetatiles_1F_3[] = { +static const u16 sElevatorMetatiles_1F_3[ESCALATOR_STAGES] = { METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame2), METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame1), METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame0) }; -static const u16 sElevatorMetatiles_2F_0[] = { +static const u16 sElevatorMetatiles_2F_0[ESCALATOR_STAGES] = { METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame0), METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame1), METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame2) }; -static const u16 sElevatorMetatiles_2F_1[] = { +static const u16 sElevatorMetatiles_2F_1[ESCALATOR_STAGES] = { METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame0), METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame1), METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame2) }; -static const u16 sElevatorMetatiles_2F_2[] = { +static const u16 sElevatorMetatiles_2F_2[ESCALATOR_STAGES] = { METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame0), METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame1), METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame2) }; -static void sub_80E1444(u8 taskId) +#define tState data[0] +#define tTransitionStage data[1] +#define tGoingUp data[2] +#define tDrawingEscalator data[3] +#define tPlayerX data[4] +#define tPlayerY data[5] + +static void SetEscalatorMetatile(u8 taskId, const s16 *metatileIds, u16 metatileMasks) { - s16 *data = gTasks[taskId].data; + s16 x = gTasks[taskId].tPlayerX - 1; + s16 y = gTasks[taskId].tPlayerY - 1; + s16 transitionStage = gTasks[taskId].tTransitionStage; + s16 i; + s16 j; - data[3] = 1; - - switch (data[0]) + // Check all the escalator sections and only progress the selected one to the next stage + if (!gTasks[taskId].tGoingUp) { - case 0: - sub_80E12E8(taskId, sElevatorMetatiles_1F_0, 0); - break; - case 1: - sub_80E12E8(taskId, sElevatorMetatiles_1F_1, 0); - break; - case 2: - sub_80E12E8(taskId, sElevatorMetatiles_1F_2, METATILE_COLLISION_MASK); - break; - case 3: - sub_80E12E8(taskId, sElevatorMetatiles_1F_3, 0); - break; - case 4: - sub_80E12E8(taskId, sElevatorMetatiles_2F_0, METATILE_COLLISION_MASK); - break; - case 5: - sub_80E12E8(taskId, sElevatorMetatiles_2F_1, 0); - break; - case 6: - sub_80E12E8(taskId, sElevatorMetatiles_2F_2, 0); - break; + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i); + + if (metatileIds[transitionStage] == metatileId) + { + if (transitionStage != LAST_ESCALATOR_STAGE) + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[transitionStage + 1]); + else + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[0]); + } + } + } } - - data[0] = (data[0] + 1) & 7; - if (!data[0]) + else { - DrawWholeMapView(); - data[1] = (data[1] + 1) % 3; - data[3] = 0; + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i); + + if (metatileIds[LAST_ESCALATOR_STAGE - transitionStage] == metatileId) + { + if (transitionStage != LAST_ESCALATOR_STAGE) + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[1 - transitionStage]); + else + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[LAST_ESCALATOR_STAGE]); + } + } + } } } -static u8 sub_80E150C(u16 var) +static void Task_DrawEscalator(u8 taskId) { - u8 taskId = CreateTask(sub_80E1444, 0); s16 *data = gTasks[taskId].data; - PlayerGetDestCoords(&data[4], &data[5]); - data[0] = 0; - data[1] = 0; - data[2] = var; - sub_80E1444(taskId); + tDrawingEscalator = TRUE; + + // Set tile for each section of the escalator in sequence for current transition stage + switch (tState) + { + case 0: + SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_0, 0); + break; + case 1: + SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_1, 0); + break; + case 2: + SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_2, METATILE_COLLISION_MASK); + break; + case 3: + SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_3, 0); + break; + case 4: + SetEscalatorMetatile(taskId, sElevatorMetatiles_2F_0, METATILE_COLLISION_MASK); + break; + case 5: + SetEscalatorMetatile(taskId, sElevatorMetatiles_2F_1, 0); + break; + case 6: + SetEscalatorMetatile(taskId, sElevatorMetatiles_2F_2, 0); + break; + } + + tState = (tState + 1) & 7; + + // If all metatiles of the escalator have been set, draw map and progress to next stage + if (tState == 0) + { + DrawWholeMapView(); + tTransitionStage = (tTransitionStage + 1) % ESCALATOR_STAGES; + tDrawingEscalator = FALSE; + } +} + +static u8 CreateEscalatorTask(bool16 goingUp) +{ + u8 taskId = CreateTask(Task_DrawEscalator, 0); + s16 *data = gTasks[taskId].data; + + PlayerGetDestCoords(&tPlayerX, &tPlayerY); + tState = 0; + tTransitionStage = 0; + tGoingUp = goingUp; + Task_DrawEscalator(taskId); return taskId; } -void sub_80E1558(u8 var) +void StartEscalator(bool8 goingUp) { - sEscalatorAnim_TaskId = sub_80E150C(var); + sEscalatorAnim_TaskId = CreateEscalatorTask(goingUp); } -void sub_80E1570(void) +void StopEscalator(void) { DestroyTask(sEscalatorAnim_TaskId); } -bool8 sub_80E1584(void) +bool8 IsEscalatorMoving(void) { - if (gTasks[sEscalatorAnim_TaskId].data[3] == 0 && gTasks[sEscalatorAnim_TaskId].data[1] == 2) + if (gTasks[sEscalatorAnim_TaskId].tDrawingEscalator == FALSE + && gTasks[sEscalatorAnim_TaskId].tTransitionStage == LAST_ESCALATOR_STAGE) return FALSE; else return TRUE; } + +#undef tState +#undef tTransitionStage +#undef tGoingUp +#undef tDrawingEscalator +#undef tPlayerX +#undef tPlayerY diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 3cb91d4b10..d10635a561 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -96,7 +96,7 @@ bool8 SetUpFieldMove_Flash(void) static void FieldCallback_Flash(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gFieldEffectArguments[0] = GetCursorSelectionMonId(); gTasks[taskId].data[8] = (uintptr_t)FldEff_UseFlash >> 16; gTasks[taskId].data[9] = (uintptr_t)FldEff_UseFlash; diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index 9574ac5634..f197b7b33c 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -497,7 +497,7 @@ static void SetCurrentSecretBase(void) static void AdjustSecretPowerSpritePixelOffsets(void) { - if (gPlayerAvatar.flags & 0x6) + if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { switch (gFieldEffectArguments[1]) { @@ -590,7 +590,7 @@ static void FieldCallback_SecretBaseCave(void) bool8 FldEff_UseSecretPowerCave(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)StartSecretBaseCaveFieldEffect >> 16; gTasks[taskId].data[9] = (u32)StartSecretBaseCaveFieldEffect; @@ -650,7 +650,7 @@ static void FieldCallback_SecretBaseTree(void) bool8 FldEff_UseSecretPowerTree(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)StartSecretBaseTreeFieldEffect >> 16; gTasks[taskId].data[9] = (u32)StartSecretBaseTreeFieldEffect; @@ -724,7 +724,7 @@ static void FieldCallback_SecretBaseShrub(void) bool8 FldEff_UseSecretPowerShrub(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)StartSecretBaseShrubFieldEffect >> 16; gTasks[taskId].data[9] = (u32)StartSecretBaseShrubFieldEffect; @@ -1010,7 +1010,7 @@ void DoSecretBaseGlitterMatSparkle(void) sub_80930E0(&x, &y, 8, 4); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], x, y, 0); if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; @@ -1236,7 +1236,7 @@ static void Task_WateringBerryTreeAnim_1(u8 taskId) if (!ObjectEventIsMovementOverridden(playerObjEvent) || ObjectEventClearHeldMovementIfFinished(playerObjEvent)) { - sub_808C228(GetPlayerFacingDirection()); + SetPlayerAvatarWatering(GetPlayerFacingDirection()); ObjectEventSetHeldMovement(playerObjEvent, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); gTasks[taskId].func = Task_WateringBerryTreeAnim_2; } diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 614fa6135a..4d7dcb66e7 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -20,11 +20,12 @@ #include "constants/songs.h" // static functions -static void task08_080C9820(u8 taskId); -static void sub_8135578(u8 taskId); -static void sub_813552C(u8 taskId); -static void sub_813561C(u8 taskId); -static void sub_81356C4(void); +static void Task_DoFieldMove_0(u8 taskId); +static void Task_DoFieldMove_1(u8 taskId); +static void Task_DoFieldMove_2(u8 taskId); +static void Task_DoFieldMove_3(u8 taskId); + +static void FieldCallback_RockSmash(void); static void sub_8135714(void); // text @@ -46,13 +47,13 @@ bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) } } -u8 oei_task_add(void) +u8 CreateFieldMoveTask(void) { GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); - return CreateTask(task08_080C9820, 8); + return CreateTask(Task_DoFieldMove_0, 8); } -static void task08_080C9820(u8 taskId) +static void Task_DoFieldMove_0(u8 taskId) { u8 objEventId; @@ -65,47 +66,47 @@ static void task08_080C9820(u8 taskId) if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) { FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = sub_8135578; + gTasks[taskId].func = Task_DoFieldMove_2; } else { - sub_808C114(); + SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); - gTasks[taskId].func = sub_813552C; + gTasks[taskId].func = Task_DoFieldMove_1; } } } -static void sub_813552C(u8 taskId) +static void Task_DoFieldMove_1(u8 taskId) { if (ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]) == TRUE) { FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = sub_8135578; + gTasks[taskId].func = Task_DoFieldMove_2; } } -static void sub_8135578(u8 taskId) +static void Task_DoFieldMove_2(u8 taskId) { if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { gFieldEffectArguments[1] = GetPlayerFacingDirection(); - if (gFieldEffectArguments[1] == 1) + if (gFieldEffectArguments[1] == DIR_SOUTH) gFieldEffectArguments[2] = 0; - if (gFieldEffectArguments[1] == 2) + if (gFieldEffectArguments[1] == DIR_NORTH) gFieldEffectArguments[2] = 1; - if (gFieldEffectArguments[1] == 3) + if (gFieldEffectArguments[1] == DIR_WEST) gFieldEffectArguments[2] = 2; - if (gFieldEffectArguments[1] == 4) + if (gFieldEffectArguments[1] == DIR_EAST) gFieldEffectArguments[2] = 3; ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByCurrentState()); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]); - FieldEffectActiveListRemove(6); - gTasks[taskId].func = sub_813561C; + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + gTasks[taskId].func = Task_DoFieldMove_3; } } -static void sub_813561C(u8 taskId) +static void Task_DoFieldMove_3(u8 taskId) { void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); @@ -128,7 +129,7 @@ bool8 SetUpFieldMove_RockSmash(void) else if (CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_BREAKABLE_ROCK) == TRUE) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = sub_81356C4; + gPostMenuFieldCallback = FieldCallback_RockSmash; return TRUE; } else @@ -137,7 +138,7 @@ bool8 SetUpFieldMove_RockSmash(void) } } -static void sub_81356C4(void) +static void FieldCallback_RockSmash(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); ScriptContext1_SetupScript(EventScript_FldEffRockSmash); @@ -145,7 +146,7 @@ static void sub_81356C4(void) bool8 FldEff_UseRockSmash(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)sub_8135714 >> 16; gTasks[taskId].data[9] = (u32)sub_8135714; diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index f479ef68d7..800e458212 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -35,7 +35,7 @@ static void FldEff_UseStrength(void) bool8 sub_8145E2C(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)sub_8145E74 >> 16; gTasks[taskId].data[9] = (u32)sub_8145E74; GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1); diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 788310b5dd..1ee82674e3 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -41,7 +41,7 @@ bool8 FldEff_SweetScent(void) u8 taskId; SetWeatherScreenFadeOut(); - taskId = oei_task_add(); + taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)StartSweetScentFieldEffect >> 16; gTasks[taskId].data[9] = (u32)StartSweetScentFieldEffect; return FALSE; diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index cbf8ee6cc3..3f087e5dab 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -30,7 +30,7 @@ static void FieldCallback_Teleport(void) bool8 FldEff_UseTeleport(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)StartTeleportFieldEffect >> 16; gTasks[taskId].data[9] = (u32)StartTeleportFieldEffect; SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); @@ -40,5 +40,5 @@ bool8 FldEff_UseTeleport(void) static void StartTeleportFieldEffect(void) { FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT); - CreateTeleportFieldEffectTask(); + FldEff_TeleportWarpOut(); } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 1606c2de57..5405b7c42f 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -1299,7 +1299,7 @@ static bool8 sub_8175024(void) break; case 3: InitStandardTextBoxWindows(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); break; case 4: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); diff --git a/src/item_menu.c b/src/item_menu.c index 43e6573281..7b069303ab 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -600,7 +600,7 @@ void CB2_BagMenuRun(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -627,7 +627,7 @@ bool8 SetupBagMenu(void) { case 0: SetVBlankHBlankCallbacksToNull(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: diff --git a/src/menu.c b/src/menu.c index 738c904cea..9cd7ca6b1e 100644 --- a/src/menu.c +++ b/src/menu.c @@ -57,9 +57,9 @@ static EWRAM_DATA u8 sPaletteNum = 0; static EWRAM_DATA u8 sYesNoWindowId = 0; static EWRAM_DATA u8 sWindowId = 0; static EWRAM_DATA u16 sFiller = 0; // needed to align -static EWRAM_DATA bool8 gUnknown_0203CDA4[4] = {FALSE}; -static EWRAM_DATA u16 gUnknown_0203CDA8 = 0; -static EWRAM_DATA void *gUnknown_0203CDAC[0x20] = {NULL}; +static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE}; +static EWRAM_DATA u16 sTempTileDataBufferIdx = 0; +static EWRAM_DATA void *sTempTileDataBuffer[0x20] = {NULL}; const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal"); @@ -154,7 +154,7 @@ void FreeAllOverworldWindowBuffers(void) FreeAllWindowBuffers(); } -void sub_8197200(void) +void InitTextBoxGfxAndPrinters(void) { ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -1737,48 +1737,48 @@ u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCurso return sMenu.cursorPos; } -void clear_scheduled_bg_copies_to_vram(void) +void ClearScheduledBgCopiesToVram(void) { - memset(gUnknown_0203CDA4, 0, sizeof(gUnknown_0203CDA4)); + memset(sScheduledBgCopiesToVram, 0, sizeof(sScheduledBgCopiesToVram)); } void ScheduleBgCopyTilemapToVram(u8 bgId) { - gUnknown_0203CDA4[bgId] = TRUE; + sScheduledBgCopiesToVram[bgId] = TRUE; } -void do_scheduled_bg_tilemap_copies_to_vram(void) +void DoScheduledBgTilemapCopiesToVram(void) { - if (gUnknown_0203CDA4[0] == TRUE) + if (sScheduledBgCopiesToVram[0] == TRUE) { CopyBgTilemapBufferToVram(0); - gUnknown_0203CDA4[0] = FALSE; + sScheduledBgCopiesToVram[0] = FALSE; } - if (gUnknown_0203CDA4[1] == TRUE) + if (sScheduledBgCopiesToVram[1] == TRUE) { CopyBgTilemapBufferToVram(1); - gUnknown_0203CDA4[1] = FALSE; + sScheduledBgCopiesToVram[1] = FALSE; } - if (gUnknown_0203CDA4[2] == TRUE) + if (sScheduledBgCopiesToVram[2] == TRUE) { CopyBgTilemapBufferToVram(2); - gUnknown_0203CDA4[2] = FALSE; + sScheduledBgCopiesToVram[2] = FALSE; } - if (gUnknown_0203CDA4[3] == TRUE) + if (sScheduledBgCopiesToVram[3] == TRUE) { CopyBgTilemapBufferToVram(3); - gUnknown_0203CDA4[3] = FALSE; + sScheduledBgCopiesToVram[3] = FALSE; } } void ResetTempTileDataBuffers(void) { int i; - for (i = 0; i < (s32)ARRAY_COUNT(gUnknown_0203CDAC); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTempTileDataBuffer); i++) { - gUnknown_0203CDAC[i] = NULL; + sTempTileDataBuffer[i] = NULL; } - gUnknown_0203CDA8 = 0; + sTempTileDataBufferIdx = 0; } bool8 FreeTempTileDataBuffersIfPossible(void) @@ -1787,13 +1787,13 @@ bool8 FreeTempTileDataBuffersIfPossible(void) if (!IsDma3ManagerBusyWithBgCopy()) { - if (gUnknown_0203CDA8) + if (sTempTileDataBufferIdx) { - for (i = 0; i < gUnknown_0203CDA8; i++) + for (i = 0; i < sTempTileDataBufferIdx; i++) { - FREE_AND_SET_NULL(gUnknown_0203CDAC[i]); + FREE_AND_SET_NULL(sTempTileDataBuffer[i]); } - gUnknown_0203CDA8 = 0; + sTempTileDataBufferIdx = 0; } return FALSE; } @@ -1806,7 +1806,7 @@ bool8 FreeTempTileDataBuffersIfPossible(void) void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode) { u32 sizeOut; - if (gUnknown_0203CDA8 < ARRAY_COUNT(gUnknown_0203CDAC)) + if (sTempTileDataBufferIdx < ARRAY_COUNT(sTempTileDataBuffer)) { void *ptr = malloc_and_decompress(src, &sizeOut); if (!size) @@ -1814,7 +1814,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of if (ptr) { copy_decompressed_tile_data_to_vram(bgId, ptr, size, offset, mode); - gUnknown_0203CDAC[gUnknown_0203CDA8++] = ptr; + sTempTileDataBuffer[sTempTileDataBufferIdx++] = ptr; } return ptr; } diff --git a/src/move_relearner.c b/src/move_relearner.c index 8c4cf7b2e7..1c863804be 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -384,7 +384,7 @@ static void CB2_InitLearnMove(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); sMoveRelearnerStruct = AllocZeroed(sizeof(*sMoveRelearnerStruct)); sMoveRelearnerStruct->partyMon = gSpecialVar_0x8004; SetVBlankCallback(VBlankCB_MoveRelearner); @@ -412,7 +412,7 @@ static void CB2_InitLearnMoveReturnFromSelectMove(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); sMoveRelearnerStruct = AllocZeroed(sizeof(*sMoveRelearnerStruct)); sMoveRelearnerStruct->state = MENU_STATE_FADE_FROM_SUMMARY_SCREEN; sMoveRelearnerStruct->partyMon = gSpecialVar_0x8004; @@ -452,7 +452,7 @@ static void CB2_MoveRelearnerMain(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } diff --git a/src/naming_screen.c b/src/naming_screen.c index 161d4a7e05..83285d89d9 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -347,7 +347,7 @@ static void NamingScreen_InitBGs(void) ChangeBgY(3, 0, 0); InitStandardTextBoxWindows(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); for (i = 0; i < 5; i++) gNamingScreenData->windows[i] = AddWindow(&gUnknown_0858BE10[i]); diff --git a/src/overworld.c b/src/overworld.c index 8937af8f11..530699f831 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -7,10 +7,11 @@ #include "cable_club.h" #include "clock.h" #include "event_data.h" +#include "event_object_movement.h" +#include "event_scripts.h" #include "field_camera.h" #include "field_control_avatar.h" #include "field_effect.h" -#include "event_object_movement.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -22,6 +23,7 @@ #include "fldeff.h" #include "gpu_regs.h" #include "heal_location.h" +#include "io_reg.h" #include "link.h" #include "link_rfu.h" #include "load_save.h" @@ -82,44 +84,22 @@ #define FACING_FORCED_LEFT 9 #define FACING_FORCED_RIGHT 10 -// event scripts -extern const u8 EventScript_WhiteOut[]; -extern const u8 EventScript_ResetMrBriney[]; -extern const u8 EventScript_DoLinkRoomExit[]; -extern const u8 CableClub_EventScript_TooBusyToNotice[]; -extern const u8 CableClub_EventScript_ReadTrainerCard[]; -extern const u8 CableClub_EventScript_ReadTrainerCardColored[]; -extern const u8 EventScript_BattleColosseum_4P_PlayerSpot0[]; -extern const u8 EventScript_BattleColosseum_4P_PlayerSpot1[]; -extern const u8 EventScript_BattleColosseum_4P_PlayerSpot2[]; -extern const u8 EventScript_BattleColosseum_4P_PlayerSpot3[]; -extern const u8 EventScript_RecordCenter_Spot0[]; -extern const u8 EventScript_RecordCenter_Spot1[]; -extern const u8 EventScript_RecordCenter_Spot2[]; -extern const u8 EventScript_RecordCenter_Spot3[]; -extern const u8 EventScript_BattleColosseum_2P_PlayerSpot0[]; -extern const u8 EventScript_BattleColosseum_2P_PlayerSpot1[]; -extern const u8 EventScript_TradeCenter_Chair1[]; -extern const u8 EventScript_TradeCenter_Chair0[]; -extern const u8 EventScript_ConfirmLeaveTradeRoom[]; -extern const u8 EventScript_TerminateLink[]; - extern const struct MapLayout *const gMapLayouts[]; extern const struct MapHeader *const *const gMapGroups[]; -extern const int gMaxFlashLevel; -extern const u16 gOverworldBackgroundLayerFlags[]; static void Overworld_ResetStateAfterWhiteOut(void); -static void c2_80567AC(void); +static void CB2_ReturnToFieldLocal(void); +static void CB2_ReturnToFieldLink(void); +static void CB2_LoadMapOnReturnToFieldCableClub(void); static void CB2_LoadMap2(void); static void VBlankCB_Field(void); static void SpriteCB_LinkPlayer(struct Sprite *sprite); static void ChooseAmbientCrySpecies(void); -static void do_load_map_stuff_loop(u8 *state); -static bool32 map_loading_iteration_3(u8 *state); -static bool32 sub_8086638(u8 *state); -static bool32 load_map_stuff(u8 *state, u32); -static bool32 map_loading_iteration_2_link(u8 *state); +static void DoMapLoadLoop(u8 *state); +static bool32 LoadMapInStepsLink(u8 *state); +static bool32 ReturnToFieldLocal(u8 *state); +static bool32 LoadMapInStepsLocal(u8 *state, bool32); +static bool32 ReturnToFieldLink(u8 *state); static void mli4_mapscripts_and_other(void); static void InitOverworldGraphicsRegisters(void); static u8 GetSpriteForLinkedPlayer(u8); @@ -131,7 +111,7 @@ static void sub_80869DC(void); static void sub_8086B14(void); static void SetCameraToTrackGuestPlayer(void); static void sub_8086988(bool32 arg0); -static void sub_8086A80(void); +static void SetCameraToTrackPlayer(void); static void sub_8086A68(void); static void sub_8086860(void); static void SetCameraToTrackGuestPlayer_2(void); @@ -155,7 +135,7 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1 static void sub_80877DC(u8 linkPlayerId, u8 a2); static void sub_808780C(u8 linkPlayerId); static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId); -static void sub_8087584(void); +static void RunTerminateLinkScript(void); static u32 GetLinkSendQueueLength(void); static void ZeroLinkPlayerObjectEvent(struct LinkPlayerObjectEvent *linkPlayerObjEvent); static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *a1); @@ -181,14 +161,14 @@ static void CB1_UpdateLinkState(void); static void SetKeyInterceptCallback(u16 (*func)(u32)); static void SetFieldVBlankCallback(void); static void FieldClearVBlankHBlankCallbacks(void); -static void sub_8085810(void); +static void TransitionMapMusic(void); static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 a2, u8 a3); static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 a2, u16 a3, u8 a4); static u16 GetCenterScreenMetatileBehavior(void); // IWRAM bss vars static void *sUnusedOverworldCallback; -static u8 sPlayerTradingStates[4]; +static u8 sPlayerTradingStates[MAX_LINK_PLAYERS]; // This callback is called with a player's key code. It then returns an // adjusted key code, effectively intercepting the input before anything // can process it. @@ -208,13 +188,13 @@ u8 gLocalLinkPlayerId; // This is our player id in a multiplayer mode. u8 gFieldLinkPlayerCount; // EWRAM vars -EWRAM_DATA static u8 sUnknown_020322D8 = 0; +EWRAM_DATA static u8 sObjectEventLoadFlag = 0; EWRAM_DATA struct WarpData gLastUsedWarp = {0}; EWRAM_DATA static struct WarpData sWarpDestination = {0}; // new warp position -EWRAM_DATA static struct WarpData gFixedDiveWarp = {0}; -EWRAM_DATA static struct WarpData gFixedHoleWarp = {0}; +EWRAM_DATA static struct WarpData sFixedDiveWarp = {0}; +EWRAM_DATA static struct WarpData sFixedHoleWarp = {0}; EWRAM_DATA static u16 sLastMapSectionId = 0; -EWRAM_DATA static struct InitialPlayerAvatarState gInitialPlayerAvatarState = {0}; +EWRAM_DATA static struct InitialPlayerAvatarState sInitialPlayerAvatarState = {0}; EWRAM_DATA static u16 sAmbientCrySpecies = 0; EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0}; @@ -229,16 +209,9 @@ static const struct WarpData sDummyWarpData = .y = -1, }; -static const u8 sUnusedData[] = +static const u32 sUnusedData[] = { - 0xB0, 0x04, 0x00, 0x00, - 0x10, 0x0E, 0x00, 0x00, - 0xB0, 0x04, 0x00, 0x00, - 0x60, 0x09, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, - 0xD4, 0xFF, 0xFF, 0xFF, - 0x2C, 0x00, 0x00, 0x00, + 1200, 3600, 1200, 2400, 50, 80, -44, 44 }; const struct UCoords32 gDirectionToVectors[] = @@ -549,9 +522,9 @@ void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType) static void mapdata_load_assets_to_gpu_and_full_redraw(void) { - move_tilemap_camera_to_upper_left_corner(); - copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout); - apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); + ResetFieldCamera(); + CopyMapTilesetsToVram(gMapHeader.mapLayout); + LoadMapTilesetPalettes(gMapHeader.mapLayout); DrawWholeMapView(); InitTilesetAnimations(); } @@ -568,14 +541,14 @@ void ApplyCurrentWarp(void) { gLastUsedWarp = gSaveBlock1Ptr->location; gSaveBlock1Ptr->location = sWarpDestination; - gFixedDiveWarp = sDummyWarpData; - gFixedHoleWarp = sDummyWarpData; + sFixedDiveWarp = sDummyWarpData; + sFixedHoleWarp = sDummyWarpData; } static void ClearDiveAndHoleWarps(void) { - gFixedDiveWarp = sDummyWarpData; - gFixedHoleWarp = sDummyWarpData; + sFixedDiveWarp = sDummyWarpData; + sFixedHoleWarp = sDummyWarpData; } static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) @@ -717,25 +690,25 @@ void SetWarpDestinationToEscapeWarp(void) void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { - SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y); + SetWarpData(&sFixedDiveWarp, mapGroup, mapNum, warpId, x, y); } static void SetWarpDestinationToDiveWarp(void) { - sWarpDestination = gFixedDiveWarp; + sWarpDestination = sFixedDiveWarp; } void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { - SetWarpData(&gFixedHoleWarp, mapGroup, mapNum, warpId, x, y); + SetWarpData(&sFixedHoleWarp, mapGroup, mapNum, warpId, x, y); } void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y) { - if (IsDummyWarp(&gFixedHoleWarp) == TRUE) + if (IsDummyWarp(&sFixedHoleWarp) == TRUE) sWarpDestination = gLastUsedWarp; else - SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y); + SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, -1, x, y); } static void SetWarpDestinationToContinueGameWarp(void) @@ -787,7 +760,7 @@ static bool8 SetDiveWarp(u8 dir, u16 x, u16 y) else { RunOnDiveWarpMapScript(); - if (IsDummyWarp(&gFixedDiveWarp)) + if (IsDummyWarp(&sFixedDiveWarp)) return FALSE; SetWarpDestinationToDiveWarp(); } @@ -809,8 +782,10 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum) s32 paletteIndex; SetWarpDestination(mapGroup, mapNum, -1, -1, -1); - if (gMapHeader.regionMapSectionId != 0x3A) - sub_8085810(); + + // Dont transition map music between BF Outside West/East + if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER) + TransitionMapMusic(); ApplyCurrentWarp(); LoadCurrentMapData(); @@ -827,8 +802,8 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum) Overworld_ClearSavedMusic(); RunOnTransitionMapScript(); InitMap(); - copy_map_tileset2_to_vram_2(gMapHeader.mapLayout); - apply_map_tileset2_palette(gMapHeader.mapLayout); + CopySecondaryTilesetToVramUsingHeap(gMapHeader.mapLayout); + LoadSecondaryTilesetPalette(gMapHeader.mapLayout); for (paletteIndex = 6; paletteIndex < 13; paletteIndex++) ApplyWeatherGammaShiftToPal(paletteIndex); @@ -840,17 +815,18 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum) ResetFieldTasksArgs(); RunOnResumeMapScript(); - if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER || gMapHeader.regionMapSectionId != sLastMapSectionId) + if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER + || gMapHeader.regionMapSectionId != sLastMapSectionId) ShowMapNamePopup(); } -static void mli0_load_map(u32 a1) +static void LoadMapFromWarp(bool32 a1) { bool8 isOutdoors; bool8 isIndoors; LoadCurrentMapData(); - if (!(sUnknown_020322D8 & 1)) + if (!(sObjectEventLoadFlag & SKIP_OBJECT_EVENT_LOAD)) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR) LoadBattlePyramidObjectEventTemplates(); @@ -869,7 +845,7 @@ static void mli0_load_map(u32 a1) ResetCyclingRoadChallengeData(); RestartWildEncounterImmunitySteps(); TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); - if (a1 != 1) + if (a1 != TRUE) DoTimeBasedEvents(); SetSav1WeatherFromCurrMapHeader(); ChooseAmbientCrySpecies(); @@ -887,7 +863,7 @@ static void mli0_load_map(u32 a1) else InitMap(); - if (a1 != 1 && isIndoors) + if (a1 != TRUE && isIndoors) { UpdateTVScreensOnMap(gBackupMapLayout.width, gBackupMapLayout.height); InitSecretBaseAppearance(TRUE); @@ -896,24 +872,24 @@ static void mli0_load_map(u32 a1) void ResetInitialPlayerAvatarState(void) { - gInitialPlayerAvatarState.direction = DIR_SOUTH; - gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT; + sInitialPlayerAvatarState.direction = DIR_SOUTH; + sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT; } void StoreInitialPlayerAvatarState(void) { - gInitialPlayerAvatarState.direction = GetPlayerFacingDirection(); + sInitialPlayerAvatarState.direction = GetPlayerFacingDirection(); if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE)) - gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE; + sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE)) - gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE; + sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING; + sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER)) - gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER; + sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER; else - gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT; + sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT; } static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void) @@ -921,11 +897,11 @@ static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void) struct InitialPlayerAvatarState playerStruct; u8 mapType = GetCurrentMapType(); u16 metatileBehavior = GetCenterScreenMetatileBehavior(); - u8 transitionFlags = GetAdjustedInitialTransitionFlags(&gInitialPlayerAvatarState, metatileBehavior, mapType); + u8 transitionFlags = GetAdjustedInitialTransitionFlags(&sInitialPlayerAvatarState, metatileBehavior, mapType); playerStruct.transitionFlags = transitionFlags; - playerStruct.direction = GetAdjustedInitialDirection(&gInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType); - gInitialPlayerAvatarState = playerStruct; - return &gInitialPlayerAvatarState; + playerStruct.direction = GetAdjustedInitialDirection(&sInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType); + sInitialPlayerAvatarState = playerStruct; + return &sInitialPlayerAvatarState; } static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType) @@ -1012,14 +988,15 @@ void SetCurrentMapLayout(u16 mapLayoutId) gMapHeader.mapLayout = GetMapLayout(); } -void sub_8085540(u8 var) +void SetObjectEventLoadFlag(u8 flag) { - sUnknown_020322D8 = var; + sObjectEventLoadFlag = flag; } -u8 sub_808554C(void) +// Unused, sObjectEventLoadFlag is read directly +static u8 GetObjectEventLoadFlag(void) { - return sUnknown_020322D8; + return sObjectEventLoadFlag; } static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) @@ -1179,10 +1156,10 @@ void Overworld_SetSavedMusic(u16 songNum) void Overworld_ClearSavedMusic(void) { - gSaveBlock1Ptr->savedMusic = 0; + gSaveBlock1Ptr->savedMusic = MUS_DUMMY; } -static void sub_8085810(void) +static void TransitionMapMusic(void) { if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE) { @@ -1477,7 +1454,7 @@ static void OverworldBasic(void) BuildOamBuffer(); UpdatePaletteFade(); UpdateTilesetAnimations(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); } // This CB2 is used when starting @@ -1507,7 +1484,7 @@ void SetUnusedCallback(void *func) sUnusedOverworldCallback = func; } -static bool8 map_post_load_hook_exec(void) +static bool8 RunFieldCallback(void) { if (gFieldCallback2) { @@ -1546,7 +1523,7 @@ void CB2_NewGame(void) ScriptContext2_Disable(); gFieldCallback = ExecuteTruckSequence; gFieldCallback2 = NULL; - do_load_map_stuff_loop(&gMain.state); + DoMapLoadLoop(&gMain.state); SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); SetMainCallback2(CB2_Overworld); @@ -1554,7 +1531,7 @@ void CB2_NewGame(void) void CB2_WhiteOut(void) { - u8 val; + u8 state; if (++gMain.state >= 120) { @@ -1566,8 +1543,8 @@ void CB2_WhiteOut(void) ScriptContext1_Init(); ScriptContext2_Disable(); gFieldCallback = FieldCB_WarpExitFadeFromBlack; - val = 0; - do_load_map_stuff_loop(&val); + state = 0; + DoMapLoadLoop(&state); SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); SetMainCallback2(CB2_Overworld); @@ -1586,13 +1563,13 @@ void CB2_LoadMap(void) static void CB2_LoadMap2(void) { - do_load_map_stuff_loop(&gMain.state); + DoMapLoadLoop(&gMain.state); SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); SetMainCallback2(CB2_Overworld); } -void sub_8086024(void) +void CB2_ReturnToFieldContestHall(void) { if (!gMain.state) { @@ -1601,7 +1578,7 @@ void sub_8086024(void) ScriptContext2_Disable(); SetMainCallback1(NULL); } - if (load_map_stuff(&gMain.state, 1)) + if (LoadMapInStepsLocal(&gMain.state, TRUE)) { SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); @@ -1613,12 +1590,12 @@ void CB2_ReturnToFieldCableClub(void) { FieldClearVBlankHBlankCallbacks(); gFieldCallback = FieldCB_ReturnToFieldWirelessLink; - SetMainCallback2(c2_80567AC); + SetMainCallback2(CB2_LoadMapOnReturnToFieldCableClub); } -static void c2_80567AC(void) +static void CB2_LoadMapOnReturnToFieldCableClub(void) { - if (map_loading_iteration_3(&gMain.state)) + if (LoadMapInStepsLink(&gMain.state)) { SetFieldVBlankCallback(); SetMainCallback1(CB1_UpdateLinkState); @@ -1640,18 +1617,18 @@ void CB2_ReturnToField(void) } } -void CB2_ReturnToFieldLocal(void) +static void CB2_ReturnToFieldLocal(void) { - if (sub_8086638(&gMain.state)) + if (ReturnToFieldLocal(&gMain.state)) { SetFieldVBlankCallback(); SetMainCallback2(CB2_Overworld); } } -void CB2_ReturnToFieldLink(void) +static void CB2_ReturnToFieldLink(void) { - if (!sub_8087598() && map_loading_iteration_2_link(&gMain.state)) + if (!sub_8087598() && ReturnToFieldLink(&gMain.state)) SetMainCallback2(CB2_Overworld); } @@ -1812,7 +1789,7 @@ static void InitCurrentFlashLevelScanlineEffect(void) } } -static bool32 map_loading_iteration_3(u8 *state) +static bool32 LoadMapInStepsLink(u8 *state) { switch (*state) { @@ -1825,7 +1802,7 @@ static bool32 map_loading_iteration_3(u8 *state) (*state)++; break; case 1: - mli0_load_map(1); + LoadMapFromWarp(TRUE); (*state)++; break; case 2: @@ -1842,25 +1819,25 @@ static bool32 map_loading_iteration_3(u8 *state) case 4: InitCurrentFlashLevelScanlineEffect(); InitOverworldGraphicsRegisters(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); (*state)++; break; case 5: - move_tilemap_camera_to_upper_left_corner(); + ResetFieldCamera(); (*state)++; break; case 6: - copy_map_tileset1_to_vram(gMapHeader.mapLayout); + CopyPrimaryTilesetToVram(gMapHeader.mapLayout); (*state)++; break; case 7: - copy_map_tileset2_to_vram(gMapHeader.mapLayout); + CopySecondaryTilesetToVram(gMapHeader.mapLayout); (*state)++; break; case 8: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); + LoadMapTilesetPalettes(gMapHeader.mapLayout); (*state)++; } break; @@ -1881,7 +1858,7 @@ static bool32 map_loading_iteration_3(u8 *state) (*state)++; break; case 12: - if (map_post_load_hook_exec()) + if (RunFieldCallback()) (*state)++; break; case 13: @@ -1891,13 +1868,13 @@ static bool32 map_loading_iteration_3(u8 *state) return FALSE; } -static bool32 load_map_stuff(u8 *state, u32 a2) +static bool32 LoadMapInStepsLocal(u8 *state, bool32 a2) { switch (*state) { case 0: FieldClearVBlankHBlankCallbacks(); - mli0_load_map(a2); + LoadMapFromWarp(a2); (*state)++; break; case 1: @@ -1911,31 +1888,31 @@ static bool32 load_map_stuff(u8 *state, u32 a2) break; case 3: mli4_mapscripts_and_other(); - sub_8086A80(); + SetCameraToTrackPlayer(); (*state)++; break; case 4: InitCurrentFlashLevelScanlineEffect(); InitOverworldGraphicsRegisters(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); (*state)++; break; case 5: - move_tilemap_camera_to_upper_left_corner(); + ResetFieldCamera(); (*state)++; break; case 6: - copy_map_tileset1_to_vram(gMapHeader.mapLayout); + CopyPrimaryTilesetToVram(gMapHeader.mapLayout); (*state)++; break; case 7: - copy_map_tileset2_to_vram(gMapHeader.mapLayout); + CopySecondaryTilesetToVram(gMapHeader.mapLayout); (*state)++; break; case 8: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); + LoadMapTilesetPalettes(gMapHeader.mapLayout); (*state)++; } break; @@ -1953,7 +1930,7 @@ static bool32 load_map_stuff(u8 *state, u32 a2) (*state)++; break; case 12: - if (map_post_load_hook_exec()) + if (RunFieldCallback()) (*state)++; break; case 13: @@ -1963,16 +1940,16 @@ static bool32 load_map_stuff(u8 *state, u32 a2) return FALSE; } -static bool32 sub_8086638(u8 *state) +static bool32 ReturnToFieldLocal(u8 *state) { switch (*state) { case 0: sub_80867C8(); sub_80867D8(); - sub_8086988(0); + sub_8086988(FALSE); sub_8086A68(); - sub_8086A80(); + SetCameraToTrackPlayer(); (*state)++; break; case 1: @@ -1981,7 +1958,7 @@ static bool32 sub_8086638(u8 *state) (*state)++; break; case 2: - if (map_post_load_hook_exec()) + if (RunFieldCallback()) (*state)++; break; case 3: @@ -1991,7 +1968,7 @@ static bool32 sub_8086638(u8 *state) return FALSE; } -static bool32 map_loading_iteration_2_link(u8 *state) +static bool32 ReturnToFieldLink(u8 *state) { switch (*state) { @@ -2002,7 +1979,7 @@ static bool32 map_loading_iteration_2_link(u8 *state) (*state)++; break; case 1: - sub_8086988(1); + sub_8086988(TRUE); (*state)++; break; case 2: @@ -2014,25 +1991,25 @@ static bool32 map_loading_iteration_2_link(u8 *state) case 3: InitCurrentFlashLevelScanlineEffect(); InitOverworldGraphicsRegisters(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); (*state)++; break; case 4: - move_tilemap_camera_to_upper_left_corner(); + ResetFieldCamera(); (*state)++; break; case 5: - copy_map_tileset1_to_vram(gMapHeader.mapLayout); + CopyPrimaryTilesetToVram(gMapHeader.mapLayout); (*state)++; break; case 6: - copy_map_tileset2_to_vram(gMapHeader.mapLayout); + CopySecondaryTilesetToVram(gMapHeader.mapLayout); (*state)++; break; case 7: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); + LoadMapTilesetPalettes(gMapHeader.mapLayout); (*state)++; } break; @@ -2053,7 +2030,7 @@ static bool32 map_loading_iteration_2_link(u8 *state) (*state)++; break; case 12: - if (map_post_load_hook_exec()) + if (RunFieldCallback()) (*state)++; break; case 10: @@ -2068,9 +2045,9 @@ static bool32 map_loading_iteration_2_link(u8 *state) return FALSE; } -static void do_load_map_stuff_loop(u8 *state) +static void DoMapLoadLoop(u8 *state) { - while (!load_map_stuff(state, 0)); + while (!LoadMapInStepsLocal(state, FALSE)); } static void sub_80867C8(void) @@ -2094,13 +2071,13 @@ static void sub_8086860(void) { InitCurrentFlashLevelScanlineEffect(); InitOverworldGraphicsRegisters(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); mapdata_load_assets_to_gpu_and_full_redraw(); } static void InitOverworldGraphicsRegisters(void) { - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); ResetTempTileDataBuffers(); SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ); @@ -2133,7 +2110,7 @@ static void InitOverworldGraphicsRegisters(void) InitFieldMessageBox(); } -static void sub_8086988(u32 a1) +static void sub_8086988(bool32 a1) { ResetTasks(); ResetSpriteData(); @@ -2189,9 +2166,9 @@ static void sub_8086A68(void) RunOnReturnToFieldMapScript(); } -static void sub_8086A80(void) +static void SetCameraToTrackPlayer(void) { - gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = 1; + gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = TRUE; InitCameraUpdateCallback(gPlayerAvatar.spriteId); } @@ -2294,7 +2271,7 @@ static void CheckRfuKeepAliveTimer(void) static void ResetAllTradingStates(void) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) sPlayerTradingStates[i] = PLAYER_TRADING_STATE_IDLE; } @@ -2345,7 +2322,7 @@ static void HandleLinkPlayerKeyInput(u32 playerId, u16 key, struct TradeRoomPlay if (trainer->isLocalPlayer) { SetKeyInterceptCallback(KeyInterCB_DeferToEventScript); - sub_8087584(); + RunTerminateLinkScript(); } return; } @@ -2763,7 +2740,7 @@ static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *player) otherPlayerPos.height = 0; linkPlayerId = GetLinkPlayerIdAt(otherPlayerPos.x, otherPlayerPos.y); - if (linkPlayerId != 4) + if (linkPlayerId != MAX_LINK_PLAYERS) { if (!player->isLocalPlayer) return CableClub_EventScript_TooBusyToNotice; @@ -2843,7 +2820,7 @@ static void InitMenuBasedScript(const u8 *script) ScriptContext2_Enable(); } -static void sub_8087584(void) +static void RunTerminateLinkScript(void) { ScriptContext1_SetupScript(EventScript_TerminateLink); ScriptContext2_Enable(); diff --git a/src/party_menu.c b/src/party_menu.c index c4497e824d..5769d3158d 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -464,7 +464,7 @@ static void CB2_UpdatePartyMenu(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -491,7 +491,7 @@ static bool8 ShowPartyMenu(void) case 0: SetVBlankHBlankCallbacksToNull(); ResetVramOamAndBgCntRegs(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: diff --git a/src/pokeblock.c b/src/pokeblock.c index 523c4ad91a..9be3ad24dd 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -475,7 +475,7 @@ static void CB2_PokeblockMenu(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -507,7 +507,7 @@ static bool8 InitPokeblockMenu(void) { case 0: SetVBlankHBlankCallbacksToNull(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index f6e6a19b24..72e54ae4ce 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -518,7 +518,7 @@ static void CB2_PokeblockFeed(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -536,7 +536,7 @@ static bool8 TransitionToPokeblockFeedScene(void) case 0: sPokeblockFeed = AllocZeroed(sizeof(*sPokeblockFeed)); SetVBlankHBlankCallbacksToNull(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 30a29b6ea6..104f92c730 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -2146,7 +2146,7 @@ static void VblankCb_PSS(void) static void Cb2_PSS(void) { RunTasks(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); ScrollBackground(); sub_80CAA14(); AnimateSprites(); @@ -2214,7 +2214,7 @@ static void sub_80C7E98(void) gReservedSpriteTileCount = 0x280; sub_80D2A90(&sPSSData->unk_0020, sPSSData->unk_0028, 8); gKeyRepeatStartDelay = 20; - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); sub_80D259C(3); sub_80D2644(0, 1, gUnknown_0857239C, 8, 4); sub_80D2770(0, 1, 0); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e8b30f7732..a3efe09d72 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1120,7 +1120,7 @@ static void MainCB2(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -1143,7 +1143,7 @@ static bool8 LoadGraphics(void) case 0: SetVBlankHBlankCallbacksToNull(); ResetVramOamAndBgCntRegs(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index d902b7319f..986a2d3a20 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -1244,7 +1244,7 @@ void DoRayquazaScene(u8 animId, bool8 onlyOneAnim, void (*callback)(void)) static void CB2_InitRayquazaScene(void) { SetVBlankHBlankCallbacksToNull(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); ScanlineEffect_Stop(); FreeAllSpritePalettes(); ResetPaletteFade(); @@ -1260,7 +1260,7 @@ static void CB2_RayquazaScene(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } diff --git a/src/region_map.c b/src/region_map.c index 287e97fe9d..5880ad2165 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1684,7 +1684,7 @@ void CB2_OpenFlyMap(void) break; case 3: LoadUserWindowBorderGfx(0, 0x65, 0xd0); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 4: @@ -1747,7 +1747,7 @@ static void CB2_FlyMap(void) sFlyMap->callback(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); } static void SetFlyMapCallback(void callback(void)) diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index 2756aa8619..c948cde4cd 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -467,7 +467,7 @@ void CB2_InitResetRtcScreen(void) static void sub_809F048(void) { - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBackgroundTemplates, ARRAY_COUNT(sBackgroundTemplates)); ScheduleBgCopyTilemapToVram(0); @@ -483,7 +483,7 @@ static void CB2_ResetRtcScreen(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } diff --git a/src/roulette.c b/src/roulette.c index 58e120cb50..79a1adedce 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -859,7 +859,7 @@ static void sub_8140388(void) SetBgTilemapBuffer(1, gUnknown_0203AB88->tilemapBuffers[2]); SetBgTilemapBuffer(2, gUnknown_0203AB88->tilemapBuffers[6]); InitWindows(gUnknown_085B614C); - sub_8197200(); + InitTextBoxGfxAndPrinters(); gUnknown_0203AB8C = 0; gUnknown_0203AB88->unk_397C = malloc_and_decompress(gUnknown_085B5DFC, &size); } diff --git a/src/shop.c b/src/shop.c index 837ba1bcaa..4fc44beee0 100755 --- a/src/shop.c +++ b/src/shop.c @@ -416,7 +416,7 @@ static void CB2_BuyMenu(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -446,7 +446,7 @@ static void CB2_InitBuyMenu(void) ResetPaletteFade(); ResetSpriteData(); ResetTasks(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gShopDataPtr = AllocZeroed(sizeof(struct ShopData)); gShopDataPtr->scrollIndicatorsTaskId = 0xFF; gShopDataPtr->itemSpriteIds[0] = 0xFF; diff --git a/src/starter_choose.c b/src/starter_choose.c index dbdb1a8b34..b919a8a17a 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -417,7 +417,7 @@ void CB2_ChooseStarter(void) DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 0x2A8, 0xD0); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); ScanlineEffect_Stop(); ResetTasks(); ResetSpriteData(); @@ -477,7 +477,7 @@ static void MainCallback2_StarterChoose(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } diff --git a/src/wallclock.c b/src/wallclock.c index 00ab65817d..aa2bd80193 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -660,7 +660,7 @@ static void LoadWallClockGraphics(void) InitWindows(gUnknown_085B21DC); DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 0x250, 0xd0); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); ScanlineEffect_Stop(); ResetTasks(); ResetSpriteData(); @@ -780,7 +780,7 @@ static void WallClockMainCallback(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } From 4ea6992172a53eb263d5f4342c5e08dfc3f8096a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 24 Jun 2020 16:27:00 -0400 Subject: [PATCH 02/85] Continue documenting overworld/field effects --- asm/macros/trainer_hill.inc | 6 +- data/field_effect_scripts.s | 42 +- data/maps/TrainerHill_Entrance/scripts.inc | 4 +- data/scripts/trainer_hill.inc | 4 +- ...{lavaridge_gym_warp.png => ash_launch.png} | Bin .../{jump_out_of_ash.png => ash_puff.png} | Bin ...hop_big_splash.png => jump_big_splash.png} | Bin ...small_splash.png => jump_small_splash.png} | Bin ...hop_tall_grass.png => jump_tall_grass.png} | Bin graphics/field_effects/pics/unused_grass.png | Bin 344 -> 0 bytes .../field_effects/pics/unused_grass_2.png | Bin 389 -> 344 bytes .../field_effects/pics/unused_grass_3.png | Bin 0 -> 389 bytes .../{unknown_20.png => water_surfacing.png} | Bin .../deoxys_rock_fragment_bottom_left.png} | Bin .../deoxys_rock_fragment_bottom_right.png} | Bin .../deoxys_rock_fragment_top_left.png} | Bin .../deoxys_rock_fragment_top_right.png} | Bin ...ig_hof_monitor.png => hof_monitor_big.png} | Bin ..._hof_monitor.png => hof_monitor_small.png} | Bin .../trainer_hill_ereader.pal} | 0 include/constants/field_effects.h | 33 +- include/constants/trainer_hill.h | 2 +- include/event_object_movement.h | 18 +- include/field_effect.h | 4 +- include/field_effect_helpers.h | 10 +- include/field_player_avatar.h | 4 +- include/fieldmap.h | 8 +- include/trainer_hill.h | 4 +- include/tv.h | 2 +- spritesheet_rules.mk | 16 +- src/battle_transition.c | 10 +- .../field_effect_object_template_pointers.h | 16 +- src/data/field_effects/field_effect_objects.h | 790 ++++-- .../object_events/object_event_graphics.h | 16 +- src/event_object_movement.c | 112 +- src/field_effect.c | 2155 +++++++++-------- src/field_effect_helpers.c | 193 +- src/field_player_avatar.c | 14 +- src/field_screen_effect.c | 2 +- src/fieldmap.c | 15 +- src/fldeff_cut.c | 4 +- src/fldeff_misc.c | 18 +- src/item_use.c | 2 +- src/overworld.c | 76 +- src/trainer_hill.c | 25 +- src/trainer_see.c | 6 +- src/tv.c | 2 +- 47 files changed, 2045 insertions(+), 1568 deletions(-) rename graphics/field_effects/pics/{lavaridge_gym_warp.png => ash_launch.png} (100%) rename graphics/field_effects/pics/{jump_out_of_ash.png => ash_puff.png} (100%) rename graphics/field_effects/pics/{bike_hop_big_splash.png => jump_big_splash.png} (100%) rename graphics/field_effects/pics/{bike_hop_small_splash.png => jump_small_splash.png} (100%) rename graphics/field_effects/pics/{bike_hop_tall_grass.png => jump_tall_grass.png} (100%) delete mode 100644 graphics/field_effects/pics/unused_grass.png create mode 100644 graphics/field_effects/pics/unused_grass_3.png rename graphics/field_effects/pics/{unknown_20.png => water_surfacing.png} (100%) rename graphics/{unknown/unknown_55C1B0.png => misc/deoxys_rock_fragment_bottom_left.png} (100%) rename graphics/{unknown/unknown_55C1D0.png => misc/deoxys_rock_fragment_bottom_right.png} (100%) rename graphics/{unknown/unknown_55C170.png => misc/deoxys_rock_fragment_top_left.png} (100%) rename graphics/{unknown/unknown_55C190.png => misc/deoxys_rock_fragment_top_right.png} (100%) rename graphics/misc/{big_hof_monitor.png => hof_monitor_big.png} (100%) rename graphics/misc/{small_hof_monitor.png => hof_monitor_small.png} (100%) rename graphics/{pokenav/862A5D4.pal => misc/trainer_hill_ereader.pal} (100%) diff --git a/asm/macros/trainer_hill.inc b/asm/macros/trainer_hill.inc index d5c84fd021..65c8c6befc 100644 --- a/asm/macros/trainer_hill.inc +++ b/asm/macros/trainer_hill.inc @@ -52,9 +52,9 @@ special CallTrainerHillFunction .endm - @ Unknown, dummied. Only side effect is setting VAR_RESULT to 0. - .macro trainerhill_clearresult - setvar VAR_0x8004, TRAINER_HILL_FUNC_CLEAR_RESULT + @ Unknown, dummied. E-Reader association is assumed. Only side effect is setting VAR_RESULT to 0. + .macro trainerhill_getusingereader + setvar VAR_0x8004, TRAINER_HILL_FUNC_GET_IN_EREADER_MODE special CallTrainerHillFunction .endm diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 2eddf3126c..6850154d30 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -17,17 +17,17 @@ gFieldEffectScriptPointers:: @ 82DB9D4 .4byte gFieldEffectScript_UseSurf @ FLDEFF_USE_SURF .4byte gFieldEffectScript_GroundImpactDust @ FLDEFF_DUST .4byte gFieldEffectScript_UseSecretPowerCave @ FLDEFF_USE_SECRET_POWER_CAVE - .4byte gFieldEffectScript_BikeHopTallGrass @ FLDEFF_JUMP_TALL_GRASS + .4byte gFieldEffectScript_JumpTallGrass @ FLDEFF_JUMP_TALL_GRASS .4byte gFieldEffectScript_SandFootprints @ FLDEFF_SAND_FOOTPRINTS - .4byte gFieldEffectScript_BikeHopBigSplash @ FLDEFF_JUMP_BIG_SPLASH + .4byte gFieldEffectScript_JumpBigSplash @ FLDEFF_JUMP_BIG_SPLASH .4byte gFieldEffectScript_Splash @ FLDEFF_SPLASH - .4byte gFieldEffectScript_BikeHopSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH + .4byte gFieldEffectScript_JumpSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH .4byte gFieldEffectScript_LongGrass @ FLDEFF_LONG_GRASS .4byte gFieldEffectScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS .4byte gFieldEffectScript_Unknown19 @ FLDEFF_UNKNOWN_19 - .4byte gFieldEffectScript_UnusedGrass @ FLDEFF_UNUSED_GRASS + .4byte gFieldEffectScript_UnusedGrass2 @ FLDEFF_UNUSED_GRASS_2 .4byte gFieldEffectScript_Unknown21 @ FLDEFF_UNKNOWN_21 - .4byte gFieldEffectScript_Unknown22 @ FLDEFF_UNKNOWN_22 + .4byte gFieldEffectScript_WaterSurfacing @ FLDEFF_WATER_SURFACING .4byte gFieldEffectScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE .4byte gFieldEffectScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS .4byte gFieldEffectScript_PokeCenterHeal @ FLDEFF_POKECENTER_HEAL @@ -54,8 +54,8 @@ gFieldEffectScriptPointers:: @ 82DB9D4 .4byte gFieldEffectScript_HeartIcon @ FLDEFF_HEART_ICON .4byte gFieldEffectScript_Unknown47 @ FLDEFF_NOP_47 .4byte gFieldEffectScript_Unknown48 @ FLDEFF_NOP_48 - .4byte gFieldEffectScript_JumpOutOfAsh @ FLDEFF_POP_OUT_OF_ASH - .4byte gFieldEffectScript_LavaridgeGymWarp @ FLDEFF_LAVARIDGE_GYM_WARP + .4byte gFieldEffectScript_AshPuff @ FLDEFF_ASH_PUFF + .4byte gFieldEffectScript_AshLaunch @ FLDEFF_ASH_LAUNCH .4byte gFieldEffectScript_SweetScent @ FLDEFF_SWEET_SCENT .4byte gFieldEffectScript_SandPillar @ FLDEFF_SAND_PILLAR .4byte gFieldEffectScript_Bubbles @ FLDEFF_BUBBLES @@ -69,7 +69,7 @@ gFieldEffectScriptPointers:: @ 82DB9D4 .4byte gFieldEffectScript_SecretBaseBootPC @ FLDEFF_PCTURN_ON .4byte gFieldEffectScript_HallOfFameRecord @ FLDEFF_HALL_OF_FAME_RECORD .4byte gFieldEffectScript_UseTeleport @ FLDEFF_USE_TELEPORT - .4byte gFieldEffectScript_Rayquaza @ FLDEFF_RAYQUAZA + .4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT .4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK .4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK @@ -121,7 +121,7 @@ gFieldEffectScript_UseSecretPowerCave:: @ 82DBB32 field_eff_callnative FldEff_UseSecretPowerCave field_eff_end -gFieldEffectScript_BikeHopTallGrass:: @ 82DBB38 +gFieldEffectScript_JumpTallGrass:: @ 82DBB38 field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpTallGrass field_eff_end @@ -129,7 +129,7 @@ gFieldEffectScript_SandFootprints:: @ 82DBB42 field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_SandFootprints field_eff_end -gFieldEffectScript_BikeHopBigSplash:: @ 82DBB4C +gFieldEffectScript_JumpBigSplash:: @ 82DBB4C field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpBigSplash field_eff_end @@ -137,7 +137,7 @@ gFieldEffectScript_Splash:: @ 82DBB56 field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Splash field_eff_end -gFieldEffectScript_BikeHopSmallSplash:: @ 82DBB60 +gFieldEffectScript_JumpSmallSplash:: @ 82DBB60 field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpSmallSplash field_eff_end @@ -153,16 +153,16 @@ gFieldEffectScript_Unknown19:: @ 82DBB7E field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Unknown19 field_eff_end -gFieldEffectScript_UnusedGrass:: @ 82DBB88 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_UnusedGrass +gFieldEffectScript_UnusedGrass2:: @ 82DBB88 + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_UnusedGrass2 field_eff_end gFieldEffectScript_Unknown21:: @ 82DBB92 field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown21 field_eff_end -gFieldEffectScript_Unknown22:: @ 82DBB9C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown22 +gFieldEffectScript_WaterSurfacing:: @ 82DBB9C + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_WaterSurfacing field_eff_end gFieldEffectScript_BerryTreeGrowthSparkle:: @ 82DBBA6 @@ -271,12 +271,12 @@ gFieldEffectScript_Unknown48:: @ 82DBC66 field_eff_callnative FldEff_NopA700 field_eff_end -gFieldEffectScript_JumpOutOfAsh:: @ 82DBC6C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_PopOutOfAsh +gFieldEffectScript_AshPuff:: @ 82DBC6C + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_AshPuff field_eff_end -gFieldEffectScript_LavaridgeGymWarp:: @ 82DBC76 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_LavaridgeGymWarp +gFieldEffectScript_AshLaunch:: @ 82DBC76 + field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_AshLaunch field_eff_end gFieldEffectScript_SweetScent:: @ 82DBC80 @@ -332,8 +332,8 @@ gFieldEffectScript_UseTeleport:: @ 82DBCED field_eff_callnative FldEff_UseTeleport field_eff_end -gFieldEffectScript_Rayquaza:: @ 82DBCF3 - field_eff_callnative sub_80B8F98 +gFieldEffectScript_RayquazaSpotlight:: @ 82DBCF3 + field_eff_callnative FldEff_RayquazaSpotlight field_eff_end gFieldEffectScript_DestroyDeoxysRock:: @ 82DBCF9 diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index e1311b6d15..b3bec46b0b 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -18,8 +18,8 @@ TrainerHill_Entrance_OnWarp: @ 82680CF TrainerHill_Entrance_OnResume: @ 82680D0 trainerhill_resumetimer setvar VAR_TEMP_0, 0 - trainerhill_clearresult - compare VAR_RESULT, 0 @ VAR_RESULT always 0 here + trainerhill_getusingereader + compare VAR_RESULT, FALSE @ VAR_RESULT always FALSE here goto_if_eq TrainerHill_Entrance_EventScript_TryFaceAttendant setobjectxy OBJ_EVENT_ID_PLAYER, 9, 6 applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant diff --git a/data/scripts/trainer_hill.inc b/data/scripts/trainer_hill.inc index ca692e1efd..34d0462bbe 100644 --- a/data/scripts/trainer_hill.inc +++ b/data/scripts/trainer_hill.inc @@ -32,8 +32,8 @@ EventScript_TrainerHillTimer:: @ 82C8393 TrainerHill_1F_EventScript_DummyWarpToEntranceCounter:: @ 82C83A6 setvar VAR_TEMP_2, 1 - trainerhill_clearresult - compare VAR_RESULT, 1 @ VAR_RESULT always 0 here + trainerhill_getusingereader + compare VAR_RESULT, TRUE @ VAR_RESULT always FALSE here goto_if_eq TrainerHill_1F_EventScript_WarpSilentToEntranceCounter end diff --git a/graphics/field_effects/pics/lavaridge_gym_warp.png b/graphics/field_effects/pics/ash_launch.png similarity index 100% rename from graphics/field_effects/pics/lavaridge_gym_warp.png rename to graphics/field_effects/pics/ash_launch.png diff --git a/graphics/field_effects/pics/jump_out_of_ash.png b/graphics/field_effects/pics/ash_puff.png similarity index 100% rename from graphics/field_effects/pics/jump_out_of_ash.png rename to graphics/field_effects/pics/ash_puff.png diff --git a/graphics/field_effects/pics/bike_hop_big_splash.png b/graphics/field_effects/pics/jump_big_splash.png similarity index 100% rename from graphics/field_effects/pics/bike_hop_big_splash.png rename to graphics/field_effects/pics/jump_big_splash.png diff --git a/graphics/field_effects/pics/bike_hop_small_splash.png b/graphics/field_effects/pics/jump_small_splash.png similarity index 100% rename from graphics/field_effects/pics/bike_hop_small_splash.png rename to graphics/field_effects/pics/jump_small_splash.png diff --git a/graphics/field_effects/pics/bike_hop_tall_grass.png b/graphics/field_effects/pics/jump_tall_grass.png similarity index 100% rename from graphics/field_effects/pics/bike_hop_tall_grass.png rename to graphics/field_effects/pics/jump_tall_grass.png diff --git a/graphics/field_effects/pics/unused_grass.png b/graphics/field_effects/pics/unused_grass.png deleted file mode 100644 index 65f4d97e29f9d738995b8e5e67053d3d0d99cd74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)%W`?qaOPi_P|w=Kqv~VzjK3q}9c9#iT*BgBYZ0)|W4J0002v zNklyiR;lE?ZvEWtaeaEh7>Yp#i3@awkjx2U|P7&dxZ qwRy^&G(+uS(C)MozC?BEcm4v??T4!bpiRC20000yiR;lE?ZvEWtaeaEh7>Yp#iUaJE)9r_=1fWg600000NkvXX Hu0mjfA|iaY delta 303 zcmV+~0nq-~0)+#RUw;7*NklqBOO3N`=9&Yf;Kro zMG`W_3_JU@#voIN(*F@7Zcz~X1N{!|6t+SHP!ezIr1Z(=mC>W+~=Oq;>EPAZgj1ejA@|^((Qi6$6&40)OEW0#zPTg1qEXlYu zFT}uNFm{f?DY^jWi}+(g4|5NmoF1NMh7Mg^qd|-XlT*vJSQS}(3lr0~zu248Ps_>n zJPR`YZ`;?Q-l$x0oNlua4)>eume;|lC;ysU;REh z!Sqx8Cz%W`?qaOPi_P|w=Kqv~VzjK3q}9c9#iT*BgBYZ0)|W4J0003H zNklqBOO3N`=9&Yf;KroMG`W_3_JU@#voIN(*F@7 zZcz~X1N{!|6t+SHP!ezIr1Z(=mC>W+~ z=Oq;>EPAZgj1ejA@|^((Qi6$6&By{QyEJxA-B<-I$+$Ex#K2-Oc8j_+vs3 za}S=J9-e204qaTML5u~HQ_Hnj66Vtc9*qhT&%gOdU3o`w0+t;Dqs9bTJZnF>$ z_nYgM*TJbL|Dc^^2K#XmTtz0QZ~~9heuBr#PfmAV{XROu^i%yOnfC>^`>Po`{Z!xK jB4$euanimPaused = FALSE; } -bool8 sub_8095B0C(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 DoFigure8Anim(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (sub_8097758(sprite)) + if (AnimateSpriteInFigure8(sprite)) { ShiftStillObjectEventCoords(objectEvent); objectEvent->triggerGroundEffectsOnStop = TRUE; @@ -6884,14 +6886,14 @@ bool8 sub_8095B0C(struct ObjectEvent *objectEvent, struct Sprite *sprite) bool8 MovementAction_Figure8_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095AF0(objectEvent, sprite); + InitFigure8Anim(objectEvent, sprite); sprite->data[2] = 1; return MovementAction_Figure8_Step1(objectEvent, sprite); } bool8 MovementAction_Figure8_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (sub_8095B0C(objectEvent, sprite)) + if (DoFigure8Anim(objectEvent, sprite)) { sprite->data[2] = 2; return TRUE; @@ -8094,26 +8096,26 @@ void GroundEffect_Seaweed(struct ObjectEvent *objEvent, struct Sprite *sprite) } static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite) = { - GroundEffect_SpawnOnTallGrass, - GroundEffect_StepOnTallGrass, - GroundEffect_SpawnOnLongGrass, - GroundEffect_StepOnLongGrass, - GroundEffect_WaterReflection, - GroundEffect_IceReflection, - GroundEffect_FlowingWater, - GroundEffect_SandTracks, - GroundEffect_DeepSandTracks, - GroundEffect_Ripple, - GroundEffect_StepOnPuddle, - GroundEffect_SandHeap, - GroundEffect_JumpOnTallGrass, - GroundEffect_JumpOnLongGrass, - GroundEffect_JumpOnShallowWater, - GroundEffect_JumpOnWater, - GroundEffect_JumpLandingDust, - GroundEffect_ShortGrass, - GroundEffect_HotSprings, - GroundEffect_Seaweed + GroundEffect_SpawnOnTallGrass, // GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN + GroundEffect_StepOnTallGrass, // GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE + GroundEffect_SpawnOnLongGrass, // GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN + GroundEffect_StepOnLongGrass, // GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE + GroundEffect_WaterReflection, // GROUND_EFFECT_FLAG_ICE_REFLECTION + GroundEffect_IceReflection, // GROUND_EFFECT_FLAG_REFLECTION + GroundEffect_FlowingWater, // GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER + GroundEffect_SandTracks, // GROUND_EFFECT_FLAG_SAND + GroundEffect_DeepSandTracks, // GROUND_EFFECT_FLAG_DEEP_SAND + GroundEffect_Ripple, // GROUND_EFFECT_FLAG_RIPPLES + GroundEffect_StepOnPuddle, // GROUND_EFFECT_FLAG_PUDDLE + GroundEffect_SandHeap, // GROUND_EFFECT_FLAG_SAND_PILE + GroundEffect_JumpOnTallGrass, // GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS + GroundEffect_JumpOnLongGrass, // GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS + GroundEffect_JumpOnShallowWater, // GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER + GroundEffect_JumpOnWater, // GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER + GroundEffect_JumpLandingDust, // GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND + GroundEffect_ShortGrass, // GROUND_EFFECT_FLAG_SHORT_GRASS + GroundEffect_HotSprings, // GROUND_EFFECT_FLAG_HOT_SPRINGS + GroundEffect_Seaweed // GROUND_EFFECT_FLAG_SEAWEED }; static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags) @@ -8391,7 +8393,7 @@ bool8 sub_80976EC(struct Sprite *sprite) return FALSE; } -static const s8 gUnknown_0850E772[] = { +static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = { 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, @@ -8403,7 +8405,7 @@ static const s8 gUnknown_0850E772[] = { 0, 1, 0, 0, 0, 0, 0, 0, }; -static const s8 gUnknown_0850E7BA[] = { +static const s8 sFigure8YOffsets[FIGURE_8_LENGTH] = { 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, @@ -8415,57 +8417,57 @@ static const s8 gUnknown_0850E7BA[] = { -1, -1, -1, -1, -1, -1, -1, -2, }; -s16 sub_8097728(s16 a1) +s16 GetFigure8YOffset(s16 idx) { - return gUnknown_0850E7BA[a1]; + return sFigure8YOffsets[idx]; } -s16 sub_809773C(s16 a1) +s16 GetFigure8XOffset(s16 idx) { - return gUnknown_0850E772[a1]; + return sFigure8XOffsets[idx]; } -void sub_8097750(struct Sprite *sprite) +static void InitSpriteForFigure8Anim(struct Sprite *sprite) { sprite->data[6] = 0; sprite->data[7] = 0; } -bool8 sub_8097758(struct Sprite *sprite) +static bool8 AnimateSpriteInFigure8(struct Sprite *sprite) { - bool8 result = FALSE; + bool8 finished = FALSE; switch(sprite->data[7]) { - case 0: - sprite->pos2.x += sub_809773C(sprite->data[6]); - sprite->pos2.y += sub_8097728(sprite->data[6]); - break; - case 1: - sprite->pos2.x -= sub_809773C(0x47 - sprite->data[6]); - sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]); - break; - case 2: - sprite->pos2.x -= sub_809773C(sprite->data[6]); - sprite->pos2.y += sub_8097728(sprite->data[6]); - break; - case 3: - sprite->pos2.x += sub_809773C(0x47 - sprite->data[6]); - sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]); - break; + case 0: + sprite->pos2.x += GetFigure8XOffset(sprite->data[6]); + sprite->pos2.y += GetFigure8YOffset(sprite->data[6]); + break; + case 1: + sprite->pos2.x -= GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]); + sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]); + break; + case 2: + sprite->pos2.x -= GetFigure8XOffset(sprite->data[6]); + sprite->pos2.y += GetFigure8YOffset(sprite->data[6]); + break; + case 3: + sprite->pos2.x += GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]); + sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]); + break; } - if(++sprite->data[6] == 0x48) + if (++sprite->data[6] == FIGURE_8_LENGTH) { sprite->data[6] = 0; sprite->data[7]++; } - if(sprite->data[7] == 0x4) + if (sprite->data[7] == 4) { sprite->pos2.y = 0; sprite->pos2.x = 0; - result = TRUE; + finished = TRUE; } - return result; + return finished; } static const s8 gUnknown_0850E802[] = { diff --git a/src/field_effect.c b/src/field_effect.c index 284d9b0e79..fbf6bd10c6 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -39,30 +39,32 @@ EWRAM_DATA s32 gFieldEffectArguments[8] = {0}; // Static type declarations static void Task_PokecenterHeal(u8 taskId); -static void PokecenterHealEffect_0(struct Task *); -static void PokecenterHealEffect_1(struct Task *); -static void PokecenterHealEffect_2(struct Task *); -static void PokecenterHealEffect_3(struct Task *); +static void PokecenterHealEffect_Init(struct Task *); +static void PokecenterHealEffect_WaitForBallPlacement(struct Task *); +static void PokecenterHealEffect_WaitForBallFlashing(struct Task *); +static void PokecenterHealEffect_WaitForSoundAndEnd(struct Task *); +static u8 CreatePokecenterMonitorSprite(s16, s16); +static void SpriteCB_PokecenterMonitor(struct Sprite *); static void Task_HallOfFameRecord(u8 taskId); -static void HallOfFameRecordEffect_0(struct Task *); -static void HallOfFameRecordEffect_1(struct Task *); -static void HallOfFameRecordEffect_2(struct Task *); -static void HallOfFameRecordEffect_3(struct Task *); +static void HallOfFameRecordEffect_Init(struct Task *); +static void HallOfFameRecordEffect_WaitForBallPlacement(struct Task *); +static void HallOfFameRecordEffect_WaitForBallFlashing(struct Task *); +static void HallOfFameRecordEffect_WaitForSoundAndEnd(struct Task *); +static void CreateHofMonitorSprite(s16, s16, s16, bool8); +static void SpriteCB_HallOfFameMonitor(struct Sprite *); -static u8 CreatePokeballGlowSprite(s16, s16, s16, u16); +static u8 CreateGlowingPokeballsEffect(s16, s16, s16, bool16); static void SpriteCB_PokeballGlowEffect(struct Sprite *); -static void PokeballGlowEffect_0(struct Sprite *); -static void PokeballGlowEffect_1(struct Sprite *); -static void PokeballGlowEffect_2(struct Sprite *); -static void PokeballGlowEffect_3(struct Sprite *); -static void PokeballGlowEffect_4(struct Sprite *); -static void PokeballGlowEffect_5(struct Sprite *); -static void PokeballGlowEffect_6(struct Sprite *); -static void PokeballGlowEffect_7(struct Sprite *); - -static u8 PokecenterHealEffectHelper(s16, s16); -static void HallOfFameRecordEffectHelper(s16, s16, s16, u8); +static void PokeballGlowEffect_PlaceBalls(struct Sprite *); +static void PokeballGlowEffect_TryPlaySe(struct Sprite *); +static void PokeballGlowEffect_Flash1(struct Sprite *); +static void PokeballGlowEffect_Flash2(struct Sprite *); +static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *); +static void PokeballGlowEffect_Dummy(struct Sprite *); +static void PokeballGlowEffect_WaitForSound(struct Sprite *); +static void PokeballGlowEffect_Idle(struct Sprite *); +static void SpriteCB_PokeballGlow(struct Sprite *); static void FieldCallback_UseFly(void); static void Task_UseFly(u8); @@ -70,169 +72,165 @@ static void FieldCallback_FlyIntoMap(void); static void Task_FlyIntoMap(u8); static void Task_FallWarpFieldEffect(u8); -static bool8 FallWarpEffect_0(struct Task *); -static bool8 FallWarpEffect_1(struct Task *); -static bool8 FallWarpEffect_2(struct Task *); -static bool8 FallWarpEffect_3(struct Task *); -static bool8 FallWarpEffect_4(struct Task *); -static bool8 FallWarpEffect_5(struct Task *); -static bool8 FallWarpEffect_6(struct Task *); +static bool8 FallWarpEffect_Init(struct Task *); +static bool8 FallWarpEffect_WaitWeather(struct Task *); +static bool8 FallWarpEffect_StartFall(struct Task *); +static bool8 FallWarpEffect_Fall(struct Task *); +static bool8 FallWarpEffect_Land(struct Task *); +static bool8 FallWarpEffect_CameraShake(struct Task *); +static bool8 FallWarpEffect_End(struct Task *); static void Task_EscalatorWarpOut(u8); -static bool8 EscalatorWarpOutEffect_0(struct Task *); -static bool8 EscalatorWarpOutEffect_1(struct Task *); -static bool8 EscalatorWarpOutEffect_2(struct Task *); -static bool8 EscalatorWarpOutEffect_3(struct Task *); -static bool8 EscalatorWarpOutEffect_4(struct Task *); -static bool8 EscalatorWarpOutEffect_5(struct Task *); - -static void sub_80B6FB8(struct Task *); -static void sub_80B7004(struct Task *); -static void sub_80B7050(void); -static void sub_80B7060(void); +static bool8 EscalatorWarpOut_Init(struct Task *); +static bool8 EscalatorWarpOut_WaitForPlayer(struct Task *); +static bool8 EscalatorWarpOut_Up_Ride(struct Task *); +static bool8 EscalatorWarpOut_Up_End(struct Task *); +static bool8 EscalatorWarpOut_Down_Ride(struct Task *); +static bool8 EscalatorWarpOut_Down_End(struct Task *); +static void RideUpEscalatorOut(struct Task *); +static void RideDownEscalatorOut(struct Task *); +static void FadeOutAtEndOfEscalator(void); +static void WarpAtEndOfEscalator(void); static void FieldCallback_EscalatorWarpIn(void); static void Task_EscalatorWarpIn(u8); -static bool8 EscalatorWarpInEffect_0(struct Task *); -static bool8 EscalatorWarpInEffect_1(struct Task *); -static bool8 EscalatorWarpInEffect_2(struct Task *); -static bool8 EscalatorWarpInEffect_3(struct Task *); -static bool8 EscalatorWarpInEffect_4(struct Task *); -static bool8 EscalatorWarpInEffect_5(struct Task *); -static bool8 EscalatorWarpInEffect_6(struct Task *); +static bool8 EscalatorWarpIn_Init(struct Task *); +static bool8 EscalatorWarpIn_Down_Init(struct Task *); +static bool8 EscalatorWarpIn_Down_Ride(struct Task *); +static bool8 EscalatorWarpIn_Up_Init(struct Task *); +static bool8 EscalatorWarpIn_Up_Ride(struct Task *); +static bool8 EscalatorWarpIn_WaitForMovement(struct Task *); +static bool8 EscalatorWarpIn_End(struct Task *); static void Task_UseWaterfall(u8); -static bool8 WaterfallFieldEffect_0(struct Task *, struct ObjectEvent *); -static bool8 WaterfallFieldEffect_1(struct Task *, struct ObjectEvent *); -static bool8 WaterfallFieldEffect_2(struct Task *, struct ObjectEvent *); -static bool8 WaterfallFieldEffect_3(struct Task *, struct ObjectEvent *); -static bool8 WaterfallFieldEffect_4(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_Init(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_ShowMon(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_WaitForShowMon(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_RideUp(struct Task *, struct ObjectEvent *); +static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *, struct ObjectEvent *); static void Task_UseDive(u8); -static bool8 DiveFieldEffect_0(struct Task *); -static bool8 DiveFieldEffect_1(struct Task *); -static bool8 DiveFieldEffect_2(struct Task *); +static bool8 DiveFieldEffect_Init(struct Task *); +static bool8 DiveFieldEffect_ShowMon(struct Task *); +static bool8 DiveFieldEffect_TryWarp(struct Task *); static void Task_LavaridgeGymB1FWarp(u8); -static bool8 LavaridgeGymB1FWarpEffect_0(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpEffect_CameraShake(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpEffect_Launch(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpEffect_FadeOut(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpEffect_Warp(struct Task *, struct ObjectEvent *, struct Sprite *); static void FieldCB_LavaridgeGymB1FWarpExit(void); static void Task_LavaridgeGymB1FWarpExit(u8); -static bool8 LavaridgeGymB1FWarpExitEffect_0(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpExitEffect_Init(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpExitEffect_StartPopOut(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpExitEffect_PopOut(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGymB1FWarpExitEffect_End(struct Task *, struct ObjectEvent *, struct Sprite *); static void Task_LavaridgeGym1FWarp(u8); -static bool8 LavaridgeGym1FWarpEffect_0(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGym1FWarpEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGym1FWarpEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGym1FWarpEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *); -static bool8 LavaridgeGym1FWarpEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGym1FWarpEffect_AshPuff(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGym1FWarpEffect_Disappear(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGym1FWarpEffect_FadeOut(struct Task *, struct ObjectEvent *, struct Sprite *); +static bool8 LavaridgeGym1FWarpEffect_Warp(struct Task *, struct ObjectEvent *, struct Sprite *); static void Task_EscapeRopeWarpOut(u8); -static void EscapeRopeWarpOutFieldEffect_0(struct Task *); -static void EscapeRopeWarpOutFieldEffect_1(struct Task *); +static void EscapeRopeWarpOutEffect_Init(struct Task *); +static void EscapeRopeWarpOutEffect_Spin(struct Task *); static void FieldCallback_EscapeRopeWarpIn(void); static void Task_EscapeRopeWarpIn(u8); -static void EscapeRopeWarpInFieldEffect_0(struct Task *); -static void EscapeRopeWarpInFieldEffect_1(struct Task *); +static void EscapeRopeWarpInEffect_Init(struct Task *); +static void EscapeRopeWarpInEffect_Spin(struct Task *); static void Task_TeleportWarpOut(u8); -static void TeleportWarpOutFieldEffect_0(struct Task*); -static void TeleportWarpOutFieldEffect_1(struct Task*); -static void TeleportWarpOutFieldEffect_2(struct Task*); -static void TeleportWarpOutFieldEffect_3(struct Task*); +static void TeleportWarpOutFieldEffect_Init(struct Task*); +static void TeleportWarpOutFieldEffect_SpinGround(struct Task*); +static void TeleportWarpOutFieldEffect_SpinExit(struct Task*); +static void TeleportWarpOutFieldEffect_End(struct Task*); static void FieldCallback_TeleportWarpIn(void); static void Task_TeleportWarpIn(u8); -static void TeleportWarpInFieldEffect_0(struct Task *); -static void TeleportWarpInFieldEffect_1(struct Task *); -static void TeleportWarpInFieldEffect_2(struct Task *); +static void TeleportWarpInFieldEffect_Init(struct Task *); +static void TeleportWarpInFieldEffect_SpinEnter(struct Task *); +static void TeleportWarpInFieldEffect_SpinGround(struct Task *); static void Task_FieldMoveShowMonOutdoors(u8); -static void FieldMoveShowMonOutdoorsEffect_0(struct Task *); -static void FieldMoveShowMonOutdoorsEffect_1(struct Task *); -static void FieldMoveShowMonOutdoorsEffect_2(struct Task *); -static void FieldMoveShowMonOutdoorsEffect_3(struct Task *); -static void FieldMoveShowMonOutdoorsEffect_4(struct Task *); -static void FieldMoveShowMonOutdoorsEffect_5(struct Task *); -static void FieldMoveShowMonOutdoorsEffect_6(struct Task *); - +static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_LoadGfx(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_CreateBanner(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_WaitForMon(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_ShrinkBanner(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_RestoreBg(struct Task *); +static void FieldMoveShowMonOutdoorsEffect_End(struct Task *); static void VBlankCB_FieldMoveShowMonOutdoors(void); -static void sub_80B8874(u16); +static void LoadFieldMoveOutdoorStreaksTilemap(u16); static void Task_FieldMoveShowMonIndoors(u8); -static void FieldMoveShowMonIndoorsEffect_0(struct Task *); -static void FieldMoveShowMonIndoorsEffect_1(struct Task *); -static void FieldMoveShowMonIndoorsEffect_2(struct Task *); -static void FieldMoveShowMonIndoorsEffect_3(struct Task *); -static void FieldMoveShowMonIndoorsEffect_4(struct Task *); -static void FieldMoveShowMonIndoorsEffect_5(struct Task *); -static void FieldMoveShowMonIndoorsEffect_6(struct Task *); - +static void FieldMoveShowMonIndoorsEffect_Init(struct Task *); +static void FieldMoveShowMonIndoorsEffect_LoadGfx(struct Task *); +static void FieldMoveShowMonIndoorsEffect_SlideBannerOn(struct Task *); +static void FieldMoveShowMonIndoorsEffect_WaitForMon(struct Task *); +static void FieldMoveShowMonIndoorsEffect_RestoreBg(struct Task *); +static void FieldMoveShowMonIndoorsEffect_SlideBannerOff(struct Task *); +static void FieldMoveShowMonIndoorsEffect_End(struct Task *); static void VBlankCB_FieldMoveShowMonIndoors(void); -static void sub_80B8B28(struct Task *); -static bool8 sub_80B8B38(struct Task *); -static bool8 sub_80B8BF0(struct Task *); +static void AnimateIndoorShowMonBg(struct Task *); +static bool8 SlideIndoorBannerOnscreen(struct Task *); +static bool8 SlideIndoorBannerOffscreen(struct Task *); -static u8 sub_80B8C60(u32, u32, u32); -static void sub_80B8CC0(struct Sprite *); -static void sub_80B8D04(struct Sprite *); -static void sub_80B8D20(struct Sprite *); +static u8 InitFieldMoveMonSprite(u32, u32, u32); +static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *); +static void SpriteCB_FieldMoveMonWaitAfterCry(struct Sprite *); +static void SpriteCB_FieldMoveMonSlideOffscreen(struct Sprite *); static void Task_SurfFieldEffect(u8); -static void SurfFieldEffect_1(struct Task *); -static void SurfFieldEffect_2(struct Task *); -static void SurfFieldEffect_3(struct Task *); -static void SurfFieldEffect_4(struct Task *); -static void SurfFieldEffect_5(struct Task *); +static void SurfFieldEffect_Init(struct Task *); +static void SurfFieldEffect_FieldMovePose(struct Task *); +static void SurfFieldEffect_ShowMon(struct Task *); +static void SurfFieldEffect_JumpOnSurfBlob(struct Task *); +static void SurfFieldEffect_End(struct Task *); static void SpriteCB_NPCFlyOut(struct Sprite *); static void Task_FlyOut(u8); -static void FlyOutFieldEffect_0(struct Task *); -static void FlyOutFieldEffect_1(struct Task *); -static void FlyOutFieldEffect_2(struct Task *); -static void FlyOutFieldEffect_3(struct Task *); -static void FlyOutFieldEffect_4(struct Task *); -static void FlyOutFieldEffect_5(struct Task *); -static void FlyOutFieldEffect_6(struct Task *); -static void FlyOutFieldEffect_7(struct Task *); -static void FlyOutFieldEffect_8(struct Task *); +static void FlyOutFieldEffect_FieldMovePose(struct Task *); +static void FlyOutFieldEffect_ShowMon(struct Task *); +static void FlyOutFieldEffect_BirdLeaveBall(struct Task *); +static void FlyOutFieldEffect_WaitBirdLeave(struct Task *); +static void FlyOutFieldEffect_BirdSwoopDown(struct Task *); +static void FlyOutFieldEffect_JumpOnBird(struct Task *); +static void FlyOutFieldEffect_FlyOffWithBird(struct Task *); +static void FlyOutFieldEffect_WaitFlyOff(struct Task *); +static void FlyOutFieldEffect_End(struct Task *); -static u8 sub_80B94C4(void); -static u8 sub_80B9508(u8); -static void sub_80B9524(u8); -static void sub_80B9560(u8, u8); -static void sub_80B957C(struct Sprite *); -static void sub_80B963C(struct Sprite *); +static u8 CreateFlyBirdSprite(void); +static u8 GetFlyBirdAnimCompleted(u8); +static void StartFlyBirdSwoopDown(u8); +static void SetFlyBirdPlayerSpriteId(u8, u8); +static void SpriteCB_FlyBirdLeaveBall(struct Sprite *); +static void SpriteCB_FlyBirdSwoopDown(struct Sprite *); static void Task_FlyIn(u8); -static void FlyInFieldEffect_0(struct Task *); -static void FlyInFieldEffect_1(struct Task *); -static void FlyInFieldEffect_2(struct Task *); -static void FlyInFieldEffect_3(struct Task *); -static void FlyInFieldEffect_4(struct Task *); -static void FlyInFieldEffect_5(struct Task *); -static void FlyInFieldEffect_6(struct Task *); +static void FlyInFieldEffect_BirdSwoopDown(struct Task *); +static void FlyInFieldEffect_FlyInWithBird(struct Task *); +static void FlyInFieldEffect_JumpOffBird(struct Task *); +static void FlyInFieldEffect_FieldMovePose(struct Task *); +static void FlyInFieldEffect_BirdReturnToBall(struct Task *); +static void FlyInFieldEffect_WaitBirdReturn(struct Task *); +static void FlyInFieldEffect_End(struct Task *); static void Task_DestroyDeoxysRock(u8 taskId); -static void DestroyDeoxysRockFieldEffect_0(s16*, u8); -static void DestroyDeoxysRockFieldEffect_1(s16*, u8); -static void DestroyDeoxysRockFieldEffect_2(s16*, u8); +static void DestroyDeoxysRockEffect_CameraShake(s16*, u8); +static void DestroyDeoxysRockEffect_RockFragments(s16*, u8); +static void DestroyDeoxysRockEffect_WaitAndEnd(s16*, u8); +static void CreateDeoxysRockFragments(struct Sprite*); +static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite); -static void sub_80B9DB8(struct Sprite* sprite); static void Task_MoveDeoxysRock(u8 taskId); -static void sub_80B9D24(struct Sprite*); - // Static RAM declarations static u8 sActiveList[32]; @@ -244,34 +242,33 @@ extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern u8 *gFieldEffectScriptPointers[]; extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; -// .rodata -const u32 gNewGameBirchPic[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); -const u32 gUnusedBirchBeauty[] = INCBIN_U32("graphics/unused/intro_birch_beauty.4bpp"); -const u16 gNewGameBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); -const u32 gSpriteImage_855A970[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp"); -const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effects/palettes/04.gbapal"); -const u32 gSpriteImage_855A9B0[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); -const u32 gSpriteImage_855AA70[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); -const u32 gSpriteImage_855AB30[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp"); -const u8 gSpriteImage_855AD30[] = INCBIN_U8("graphics/misc/small_hof_monitor.4bpp"); -const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effects/palettes/05.gbapal"); +static const u32 sNewGameBirch_Gfx[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); +static const u32 sUnusedBirchBeauty[] = INCBIN_U32("graphics/unused/intro_birch_beauty.4bpp"); +static const u16 sNewGameBirch_Pal[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); +static const u32 sPokeballGlow_Gfx[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp"); +static const u16 sFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effects/palettes/04.gbapal"); +static const u32 sPokecenterMonitor0_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); +static const u32 sPokecenterMonitor1_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); +static const u32 sHofMonitorBig_Gfx[] = INCBIN_U32("graphics/misc/hof_monitor_big.4bpp"); +static const u8 sHofMonitorSmall_Gfx[] = INCBIN_U8("graphics/misc/hof_monitor_small.4bpp"); +static const u16 sFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effects/palettes/05.gbapal"); // Graphics for the lights streaking past your Pokemon when it uses a field move. -const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp"); -const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal"); -const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin"); +static const u32 sFieldMoveStreaksOutdoors_Gfx[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp"); +static const u16 sFieldMoveStreaksOutdoors_Pal[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal"); +static const u16 sFieldMoveStreaksOutdoors_Tilemap[320] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin"); -// The following light streaks effect is used when the map is dark (e.g. a cave). -const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp"); -const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal"); -const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin"); +// The following light streaks effect is used when the map is indoors +static const u32 sFieldMoveStreaksIndoors_Gfx[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp"); +static const u16 sFieldMoveStreaksIndoors_Pal[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal"); +static const u16 sFieldMoveStreaksIndoors_Tilemap[320] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin"); -const u16 gUnknown_0855B610[16] = INCBIN_U16("graphics/misc/spotlight.gbapal"); -const u8 gUnknown_0855B630[] = INCBIN_U8("graphics/misc/spotlight.4bpp"); -const u8 gUnknown_0855C170[] = INCBIN_U8("graphics/unknown/unknown_55C170.4bpp"); -const u8 gUnknown_0855C190[] = INCBIN_U8("graphics/unknown/unknown_55C190.4bpp"); -const u8 gUnknown_0855C1B0[] = INCBIN_U8("graphics/unknown/unknown_55C1B0.4bpp"); -const u8 gUnknown_0855C1D0[] = INCBIN_U8("graphics/unknown/unknown_55C1D0.4bpp"); +static const u16 sSpotlight_Pal[16] = INCBIN_U16("graphics/misc/spotlight.gbapal"); +static const u8 sSpotlight_Gfx[] = INCBIN_U8("graphics/misc/spotlight.4bpp"); +static const u8 sRockFragment_TopLeft[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_top_left.4bpp"); +static const u8 sRockFragment_TopRight[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_top_right.4bpp"); +static const u8 sRockFragment_BottomLeft[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_bottom_left.4bpp"); +static const u8 sRockFragment_BottomRight[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_bottom_right.4bpp"); bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = { @@ -285,7 +282,7 @@ bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = FieldEffectCmd_loadfadedpal_callnative, }; -const struct OamData gNewGameBirchOamAttributes = +static const struct OamData sOam_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -299,7 +296,7 @@ const struct OamData gNewGameBirchOamAttributes = .paletteNum = 0, }; -const struct OamData gOamData_855C218 = +static const struct OamData sOam_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -313,7 +310,7 @@ const struct OamData gOamData_855C218 = .paletteNum = 0, }; -const struct OamData gOamData_855C220 = +static const struct OamData sOam_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -327,52 +324,52 @@ const struct OamData gOamData_855C220 = .paletteNum = 0, }; -const struct SpriteFrameImage gNewGameBirchPicTable[] = +static const struct SpriteFrameImage sPicTable_NewGameBirch[] = { - obj_frame_tiles(gNewGameBirchPic) + obj_frame_tiles(sNewGameBirch_Gfx) }; -const struct SpritePalette gNewGameBirchObjectPaletteInfo = +static const struct SpritePalette sSpritePalette_NewGameBirch = { - .data = gNewGameBirchPalette, - .tag = 0x1006 + .data = sNewGameBirch_Pal, + .tag = FLDEFF_PAL_TAG_6 }; -const union AnimCmd gNewGameBirchImageAnim[] = +static const union AnimCmd sAnim_NewGameBirch[] = { ANIMCMD_FRAME(.imageValue = 0, .duration = 1), ANIMCMD_END }; -const union AnimCmd *const gNewGameBirchImageAnimTable[] = +static const union AnimCmd *const sAnimTable_NewGameBirch[] = { - gNewGameBirchImageAnim + sAnim_NewGameBirch }; -const struct SpriteTemplate gNewGameBirchObjectTemplate = +static const struct SpriteTemplate sSpriteTemplate_NewGameBirch = { .tileTag = 0xFFFF, - .paletteTag = 4102, - .oam = &gNewGameBirchOamAttributes, - .anims = gNewGameBirchImageAnimTable, - .images = gNewGameBirchPicTable, + .paletteTag = FLDEFF_PAL_TAG_6, + .oam = &sOam_64x64, + .anims = sAnimTable_NewGameBirch, + .images = sPicTable_NewGameBirch, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; const struct SpritePalette gFieldEffectObjectPaletteInfo4 = { - .data = gFieldEffectObjectPalette4, - .tag = 0x1007 + .data = sFieldEffectObjectPalette4, + .tag = FLDEFF_PAL_TAG_7 }; const struct SpritePalette gFieldEffectObjectPaletteInfo5 = { - .data = gFieldEffectObjectPalette5, - .tag = 0x1010 + .data = sFieldEffectObjectPalette5, + .tag = FLDEFF_PAL_TAG_16 }; -const struct OamData gOamData_855C26C = +static const struct OamData sOam_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -386,28 +383,28 @@ const struct OamData gOamData_855C26C = .paletteNum = 0, }; -const struct SpriteFrameImage gSpriteImageTable_855C274[] = +static const struct SpriteFrameImage sPicTable_PokeballGlow[] = { - obj_frame_tiles(gSpriteImage_855A970) + obj_frame_tiles(sPokeballGlow_Gfx) }; -const struct SpriteFrameImage gSpriteImageTable_855C27C[] = +static const struct SpriteFrameImage sPicTable_PokecenterMonitor[] = { - obj_frame_tiles(gSpriteImage_855A9B0), - obj_frame_tiles(gSpriteImage_855AA70) + obj_frame_tiles(sPokecenterMonitor0_Gfx), + obj_frame_tiles(sPokecenterMonitor1_Gfx) }; -const struct SpriteFrameImage gSpriteImageTable_855C28C[] = +static const struct SpriteFrameImage sPicTable_HofMonitorBig[] = { - obj_frame_tiles(gSpriteImage_855AB30) + obj_frame_tiles(sHofMonitorBig_Gfx) }; -const struct SpriteFrameImage gSpriteImageTable_855C294[] = +static const struct SpriteFrameImage sPicTable_HofMonitorSmall[] = { - {.data = gSpriteImage_855AD30, .size = 0x200} // the macro breaks down here + {.data = sHofMonitorSmall_Gfx, .size = 0x200} // the macro breaks down here }; -const struct Subsprite gSubspriteTable_855C29C[] = +static const struct Subsprite sSubsprites_PokecenterMonitor[] = { { .x = -12, @@ -443,9 +440,9 @@ const struct Subsprite gSubspriteTable_855C29C[] = } }; -const struct SubspriteTable gUnknown_0855C2AC = subsprite_table(gSubspriteTable_855C29C); +static const struct SubspriteTable sSubspriteTable_PokecenterMonitor = subsprite_table(sSubsprites_PokecenterMonitor); -const struct Subsprite gSubspriteTable_855C2B4[] = +static const struct Subsprite sSubsprites_HofMonitorBig[] = { { .x = -32, @@ -481,7 +478,7 @@ const struct Subsprite gSubspriteTable_855C2B4[] = } }; -const struct SubspriteTable gUnknown_0855C2C4 = subsprite_table(gSubspriteTable_855C2B4); +static const struct SubspriteTable sSubspriteTable_HofMonitorBig = subsprite_table(sSubsprites_HofMonitorBig); const union AnimCmd gSpriteAnim_855C2CC[] = { @@ -508,84 +505,84 @@ const union AnimCmd *const gSpriteAnimTable_855C2F8[] = gSpriteAnim_855C2D4 }; -const union AnimCmd *const gSpriteAnimTable_855C300[] = +static const union AnimCmd *const sAnimTable_HofMonitor[] = { gSpriteAnim_855C2CC }; -const struct SpriteTemplate gSpriteTemplate_855C304 = +static const struct SpriteTemplate sSpriteTemplate_PokeballGlow = { .tileTag = 0xFFFF, - .paletteTag = 4103, - .oam = &gOamData_855C218, + .paletteTag = FLDEFF_PAL_TAG_7, + .oam = &sOam_8x8, .anims = gSpriteAnimTable_855C2F8, - .images = gSpriteImageTable_855C274, + .images = sPicTable_PokeballGlow, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_PokeballGlow }; -const struct SpriteTemplate gSpriteTemplate_855C31C = +static const struct SpriteTemplate sSpriteTemplate_PokecenterMonitor = { .tileTag = 0xFFFF, - .paletteTag = 4100, - .oam = &gOamData_855C220, + .paletteTag = FLDEFF_PAL_TAG_4, + .oam = &sOam_16x16, .anims = gSpriteAnimTable_855C2F8, - .images = gSpriteImageTable_855C27C, + .images = sPicTable_PokecenterMonitor, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_PokecenterMonitor }; -const struct SpriteTemplate gSpriteTemplate_855C334 = +static const struct SpriteTemplate sSpriteTemplate_HofMonitorBig = { .tileTag = 0xFFFF, - .paletteTag = 4112, - .oam = &gOamData_855C220, - .anims = gSpriteAnimTable_855C300, - .images = gSpriteImageTable_855C28C, + .paletteTag = FLDEFF_PAL_TAG_16, + .oam = &sOam_16x16, + .anims = sAnimTable_HofMonitor, + .images = sPicTable_HofMonitorBig, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HallOfFameMonitor }; -const struct SpriteTemplate gSpriteTemplate_855C34C = +static const struct SpriteTemplate sSpriteTemplate_HofMonitorSmall = { .tileTag = 0xFFFF, - .paletteTag = 4112, - .oam = &gOamData_855C26C, - .anims = gSpriteAnimTable_855C300, - .images = gSpriteImageTable_855C294, + .paletteTag = FLDEFF_PAL_TAG_16, + .oam = &sOam_32x16, + .anims = sAnimTable_HofMonitor, + .images = sPicTable_HofMonitorSmall, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HallOfFameMonitor }; void (*const sPokecenterHealEffectFuncs[])(struct Task *) = { - PokecenterHealEffect_0, - PokecenterHealEffect_1, - PokecenterHealEffect_2, - PokecenterHealEffect_3 + PokecenterHealEffect_Init, + PokecenterHealEffect_WaitForBallPlacement, + PokecenterHealEffect_WaitForBallFlashing, + PokecenterHealEffect_WaitForSoundAndEnd }; void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = { - HallOfFameRecordEffect_0, - HallOfFameRecordEffect_1, - HallOfFameRecordEffect_2, - HallOfFameRecordEffect_3 + HallOfFameRecordEffect_Init, + HallOfFameRecordEffect_WaitForBallPlacement, + HallOfFameRecordEffect_WaitForBallFlashing, + HallOfFameRecordEffect_WaitForSoundAndEnd }; void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) = { - PokeballGlowEffect_0, - PokeballGlowEffect_1, - PokeballGlowEffect_2, - PokeballGlowEffect_3, - PokeballGlowEffect_4, - PokeballGlowEffect_5, - PokeballGlowEffect_6, - PokeballGlowEffect_7 + PokeballGlowEffect_PlaceBalls, + PokeballGlowEffect_TryPlaySe, + PokeballGlowEffect_Flash1, + PokeballGlowEffect_Flash2, + PokeballGlowEffect_WaitAfterFlash, + PokeballGlowEffect_Dummy, + PokeballGlowEffect_WaitForSound, + PokeballGlowEffect_Idle }; -const struct Coords16 gUnknown_0855C3A4[] = +static const struct Coords16 sPokeballCoordOffsets[PARTY_SIZE] = { {.x = 0, .y = 0}, {.x = 6, .y = 0}, @@ -595,93 +592,91 @@ const struct Coords16 gUnknown_0855C3A4[] = {.x = 6, .y = 8} }; -const u8 gUnknown_0855C3BC[] = {16, 12, 8, 0}; -const u8 gUnknown_0855C3C0[] = {16, 12, 8, 0}; -const u8 gUnknown_0855C3C4[] = { 0, 0, 0, 0}; +static const u8 sPokeballGlowReds[] = {16, 12, 8, 0}; +static const u8 sPokeballGlowGreens[] = {16, 12, 8, 0}; +static const u8 sPokeballGlowBlues[] = { 0, 0, 0, 0}; bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = { - FallWarpEffect_0, - FallWarpEffect_1, - FallWarpEffect_2, - FallWarpEffect_3, - FallWarpEffect_4, - FallWarpEffect_5, - FallWarpEffect_6, + FallWarpEffect_Init, + FallWarpEffect_WaitWeather, + FallWarpEffect_StartFall, + FallWarpEffect_Fall, + FallWarpEffect_Land, + FallWarpEffect_CameraShake, + FallWarpEffect_End, }; bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = { - EscalatorWarpOutEffect_0, - EscalatorWarpOutEffect_1, - EscalatorWarpOutEffect_2, - EscalatorWarpOutEffect_3, - EscalatorWarpOutEffect_4, - EscalatorWarpOutEffect_5, + EscalatorWarpOut_Init, + EscalatorWarpOut_WaitForPlayer, + EscalatorWarpOut_Up_Ride, + EscalatorWarpOut_Up_End, + EscalatorWarpOut_Down_Ride, + EscalatorWarpOut_Down_End, }; bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = { - EscalatorWarpInEffect_0, - EscalatorWarpInEffect_1, - EscalatorWarpInEffect_2, - EscalatorWarpInEffect_3, - EscalatorWarpInEffect_4, - EscalatorWarpInEffect_5, - EscalatorWarpInEffect_6, + EscalatorWarpIn_Init, + EscalatorWarpIn_Down_Init, + EscalatorWarpIn_Down_Ride, + EscalatorWarpIn_Up_Init, + EscalatorWarpIn_Up_Ride, + EscalatorWarpIn_WaitForMovement, + EscalatorWarpIn_End, }; bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) = { - WaterfallFieldEffect_0, - WaterfallFieldEffect_1, - WaterfallFieldEffect_2, - WaterfallFieldEffect_3, - WaterfallFieldEffect_4, + WaterfallFieldEffect_Init, + WaterfallFieldEffect_ShowMon, + WaterfallFieldEffect_WaitForShowMon, + WaterfallFieldEffect_RideUp, + WaterfallFieldEffect_ContinueRideOrEnd, }; bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) = { - DiveFieldEffect_0, - DiveFieldEffect_1, - DiveFieldEffect_2, + DiveFieldEffect_Init, + DiveFieldEffect_ShowMon, + DiveFieldEffect_TryWarp, }; bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { - LavaridgeGymB1FWarpEffect_0, - LavaridgeGymB1FWarpEffect_1, - LavaridgeGymB1FWarpEffect_2, - LavaridgeGymB1FWarpEffect_3, - LavaridgeGymB1FWarpEffect_4, - LavaridgeGymB1FWarpEffect_5, + LavaridgeGymB1FWarpEffect_Init, + LavaridgeGymB1FWarpEffect_CameraShake, + LavaridgeGymB1FWarpEffect_Launch, + LavaridgeGymB1FWarpEffect_Rise, + LavaridgeGymB1FWarpEffect_FadeOut, + LavaridgeGymB1FWarpEffect_Warp, }; bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { - LavaridgeGymB1FWarpExitEffect_0, - LavaridgeGymB1FWarpExitEffect_1, - LavaridgeGymB1FWarpExitEffect_2, - LavaridgeGymB1FWarpExitEffect_3, + LavaridgeGymB1FWarpExitEffect_Init, + LavaridgeGymB1FWarpExitEffect_StartPopOut, + LavaridgeGymB1FWarpExitEffect_PopOut, + LavaridgeGymB1FWarpExitEffect_End, }; bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { - LavaridgeGym1FWarpEffect_0, - LavaridgeGym1FWarpEffect_1, - LavaridgeGym1FWarpEffect_2, - LavaridgeGym1FWarpEffect_3, - LavaridgeGym1FWarpEffect_4, + LavaridgeGym1FWarpEffect_Init, + LavaridgeGym1FWarpEffect_AshPuff, + LavaridgeGym1FWarpEffect_Disappear, + LavaridgeGym1FWarpEffect_FadeOut, + LavaridgeGym1FWarpEffect_Warp, }; -void (*const sEscapeRopeWarpOutFieldEffectFuncs[])(struct Task *) = +void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) = { - EscapeRopeWarpOutFieldEffect_0, - EscapeRopeWarpOutFieldEffect_1, + EscapeRopeWarpOutEffect_Init, + EscapeRopeWarpOutEffect_Spin, }; -// .text - u32 FieldEffectStart(u8 id) { u8 *script; @@ -885,7 +880,7 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf LoadCompressedSpriteSheetOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer); spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag; spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag; - spriteTemplate.oam = &gNewGameBirchOamAttributes; + spriteTemplate.oam = &sOam_64x64; spriteTemplate.anims = gDummySpriteAnimTable; spriteTemplate.images = NULL; spriteTemplate.affineAnims = gDummySpriteAffineAnimTable; @@ -901,8 +896,8 @@ void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) { - LoadSpritePalette(&gNewGameBirchObjectPaletteInfo); - return CreateSprite(&gNewGameBirchObjectTemplate, x, y, subpriority); + LoadSpritePalette(&sSpritePalette_NewGameBirch); + return CreateSprite(&sSpriteTemplate_NewGameBirch, x, y, subpriority); } u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) @@ -915,10 +910,10 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) return spriteId; } -u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) +u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority) { - const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); - u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag); + const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); + u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, 1, x, y, 0, spritePalette->tag); PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); if (spriteId == 0xFFFF) return MAX_SPRITES; @@ -978,6 +973,28 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) gPlttBufferFaded[i] = outPal; } +// Task data for Task_PokecenterHeal and Task_HallOfFameRecord +#define tState data[0] +#define tNumMons data[1] +#define tFirstBallX data[2] +#define tFirstBallY data[3] +#define tMonitorX data[4] +#define tMonitorY data[5] +#define tBallSpriteId data[6] +#define tMonitorSpriteId data[7] +#define tStartHofFlash data[15] + +// Sprite data for SpriteCB_PokeballGlowEffect +#define sState data[0] +#define sTimer data[1] +#define sCounter data[2] +#define sPlayHealSe data[5] +#define sNumMons data[6] +#define sSpriteId data[7] + +// Sprite data for SpriteCB_PokeballGlow +#define sEffectSpriteId data[0] + bool8 FldEff_PokecenterHeal(void) { u8 nPokemon; @@ -985,11 +1002,11 @@ bool8 FldEff_PokecenterHeal(void) nPokemon = CalculatePlayerPartyCount(); task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; - task->data[1] = nPokemon; - task->data[2] = 0x5d; - task->data[3] = 0x24; - task->data[4] = 0x7c; - task->data[5] = 0x18; + task->tNumMons = nPokemon; + task->tFirstBallX = 93; + task->tFirstBallY = 36; + task->tMonitorX = 124; + task->tMonitorY = 24; return FALSE; } @@ -997,38 +1014,38 @@ static void Task_PokecenterHeal(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - sPokecenterHealEffectFuncs[task->data[0]](task); + sPokecenterHealEffectFuncs[task->tState](task); } -static void PokecenterHealEffect_0(struct Task *task) +static void PokecenterHealEffect_Init(struct Task *task) { - task->data[0]++; - task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1); - task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); + task->tState++; + task->tBallSpriteId = CreateGlowingPokeballsEffect(task->tNumMons, task->tFirstBallX, task->tFirstBallY, TRUE); + task->tMonitorSpriteId = CreatePokecenterMonitorSprite(task->tMonitorX, task->tMonitorY); } -static void PokecenterHealEffect_1(struct Task *task) +static void PokecenterHealEffect_WaitForBallPlacement(struct Task *task) { - if (gSprites[task->data[6]].data[0] > 1) + if (gSprites[task->tBallSpriteId].sState > 1) { - gSprites[task->data[7]].data[0]++; - task->data[0]++; + gSprites[task->tMonitorSpriteId].sState++; + task->tState++; } } -static void PokecenterHealEffect_2(struct Task *task) +static void PokecenterHealEffect_WaitForBallFlashing(struct Task *task) { - if (gSprites[task->data[6]].data[0] > 4) + if (gSprites[task->tBallSpriteId].sState > 4) { - task->data[0]++; + task->tState++; } } -static void PokecenterHealEffect_3(struct Task *task) +static void PokecenterHealEffect_WaitForSoundAndEnd(struct Task *task) { - if (gSprites[task->data[6]].data[0] > 6) + if (gSprites[task->tBallSpriteId].sState > 6) { - DestroySprite(&gSprites[task->data[6]]); + DestroySprite(&gSprites[task->tBallSpriteId]); FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL); DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal)); } @@ -1041,9 +1058,9 @@ bool8 FldEff_HallOfFameRecord(void) nPokemon = CalculatePlayerPartyCount(); task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)]; - task->data[1] = nPokemon; - task->data[2] = 0x75; - task->data[3] = 0x34; + task->tNumMons = nPokemon; + task->tFirstBallX = 117; + task->tFirstBallY = 52; return FALSE; } @@ -1051,51 +1068,50 @@ static void Task_HallOfFameRecord(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - sHallOfFameRecordEffectFuncs[task->data[0]](task); + sHallOfFameRecordEffectFuncs[task->tState](task); } -static void HallOfFameRecordEffect_0(struct Task *task) +static void HallOfFameRecordEffect_Init(struct Task *task) { u8 taskId; - task->data[0]++; - task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 0); + task->tState++; + task->tBallSpriteId = CreateGlowingPokeballsEffect(task->tNumMons, task->tFirstBallX, task->tFirstBallY, FALSE); taskId = FindTaskIdByFunc(Task_HallOfFameRecord); - HallOfFameRecordEffectHelper(taskId, 0x78, 0x18, 0); - HallOfFameRecordEffectHelper(taskId, 0x28, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0x48, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0xa8, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1); + CreateHofMonitorSprite(taskId, 120, 24, FALSE); + CreateHofMonitorSprite(taskId, 40, 8, TRUE); + CreateHofMonitorSprite(taskId, 72, 8, TRUE); + CreateHofMonitorSprite(taskId, 168, 8, TRUE); + CreateHofMonitorSprite(taskId, 200, 8, TRUE); } -static void HallOfFameRecordEffect_1(struct Task *task) +static void HallOfFameRecordEffect_WaitForBallPlacement(struct Task *task) { - if (gSprites[task->data[6]].data[0] > 1) + if (gSprites[task->tBallSpriteId].sState > 1) { - task->data[15]++; // was this ever initialized? is this ever used? - task->data[0]++; + task->tStartHofFlash++; + task->tState++; } } -static void HallOfFameRecordEffect_2(struct Task *task) +static void HallOfFameRecordEffect_WaitForBallFlashing(struct Task *task) { - if (gSprites[task->data[6]].data[0] > 4) + if (gSprites[task->tBallSpriteId].sState > 4) { - task->data[0]++; + task->tState++; } } -static void HallOfFameRecordEffect_3(struct Task *task) +static void HallOfFameRecordEffect_WaitForSoundAndEnd(struct Task *task) { - if (gSprites[task->data[6]].data[0] > 6) + if (gSprites[task->tBallSpriteId].sState > 6) { - DestroySprite(&gSprites[task->data[6]]); + DestroySprite(&gSprites[task->tBallSpriteId]); FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD); DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord)); } } - -static u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) +static u8 CreateGlowingPokeballsEffect(s16 numMons, s16 x, s16 y, bool16 playHealSe) { u8 spriteId; struct Sprite *sprite; @@ -1103,150 +1119,150 @@ static u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) sprite = &gSprites[spriteId]; sprite->pos2.x = x; sprite->pos2.y = y; - sprite->data[5] = data5; - sprite->data[6] = data6; - sprite->data[7] = spriteId; + sprite->sPlayHealSe = playHealSe; + sprite->sNumMons = numMons; + sprite->sSpriteId = spriteId; return spriteId; } static void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) { - sPokeballGlowEffectFuncs[sprite->data[0]](sprite); + sPokeballGlowEffectFuncs[sprite->sState](sprite); } -static void PokeballGlowEffect_0(struct Sprite *sprite) +static void PokeballGlowEffect_PlaceBalls(struct Sprite *sprite) { - u8 endSpriteId; - if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) + u8 spriteId; + if (sprite->sTimer == 0 || (--sprite->sTimer) == 0) { - sprite->data[1] = 25; - endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_855C304, gUnknown_0855C3A4[sprite->data[2]].x + sprite->pos2.x, gUnknown_0855C3A4[sprite->data[2]].y + sprite->pos2.y, 0); - gSprites[endSpriteId].oam.priority = 2; - gSprites[endSpriteId].data[0] = sprite->data[7]; - sprite->data[2]++; - sprite->data[6]--; + sprite->sTimer = 25; + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_PokeballGlow, sPokeballCoordOffsets[sprite->sCounter].x + sprite->pos2.x, sPokeballCoordOffsets[sprite->sCounter].y + sprite->pos2.y, 0); + gSprites[spriteId].oam.priority = 2; + gSprites[spriteId].sEffectSpriteId = sprite->sSpriteId; + sprite->sCounter++; + sprite->sNumMons--; PlaySE(SE_BOWA); } - if (sprite->data[6] == 0) + if (sprite->sNumMons == 0) { - sprite->data[1] = 32; - sprite->data[0]++; + sprite->sTimer = 32; + sprite->sState++; } } -static void PokeballGlowEffect_1(struct Sprite *sprite) +static void PokeballGlowEffect_TryPlaySe(struct Sprite *sprite) { - if ((--sprite->data[1]) == 0) + if ((--sprite->sTimer) == 0) { - sprite->data[0]++; - sprite->data[1] = 8; - sprite->data[2] = 0; + sprite->sState++; + sprite->sTimer = 8; + sprite->sCounter = 0; sprite->data[3] = 0; - if (sprite->data[5]) + if (sprite->sPlayHealSe) { PlayFanfare(MUS_ME_ASA); } } } -static void PokeballGlowEffect_2(struct Sprite *sprite) +static void PokeballGlowEffect_Flash1(struct Sprite *sprite) { u8 phase; - if ((--sprite->data[1]) == 0) + if ((--sprite->sTimer) == 0) { - sprite->data[1] = 8; - sprite->data[2]++; - sprite->data[2] &= 3; - if (sprite->data[2] == 0) - { + sprite->sTimer = 8; + sprite->sCounter++; + sprite->sCounter &= 3; + + if (sprite->sCounter == 0) sprite->data[3]++; - } } - phase = (sprite->data[2] + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - phase = (sprite->data[2] + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - phase = (sprite->data[2] + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - phase = sprite->data[2]; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); + phase = (sprite->sCounter + 3) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + phase = (sprite->sCounter + 2) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + phase = (sprite->sCounter + 1) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + phase = sprite->sCounter; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); if (sprite->data[3] > 2) { - sprite->data[0]++; - sprite->data[1] = 8; - sprite->data[2] = 0; + sprite->sState++; + sprite->sTimer = 8; + sprite->sCounter = 0; } } -static void PokeballGlowEffect_3(struct Sprite *sprite) +static void PokeballGlowEffect_Flash2(struct Sprite *sprite) { u8 phase; - if ((--sprite->data[1]) == 0) + if ((--sprite->sTimer) == 0) { - sprite->data[1] = 8; - sprite->data[2]++; - sprite->data[2] &= 3; - if (sprite->data[2] == 3) + sprite->sTimer = 8; + sprite->sCounter++; + sprite->sCounter &= 3; + if (sprite->sCounter == 3) { - sprite->data[0]++; - sprite->data[1] = 30; + sprite->sState++; + sprite->sTimer = 30; } } - phase = sprite->data[2]; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); + phase = sprite->sCounter; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); } -static void PokeballGlowEffect_4(struct Sprite *sprite) +static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *sprite) { - if ((--sprite->data[1]) == 0) + if ((--sprite->sTimer) == 0) { - sprite->data[0]++; + sprite->sState++; } } -static void PokeballGlowEffect_5(struct Sprite *sprite) +static void PokeballGlowEffect_Dummy(struct Sprite *sprite) { - sprite->data[0]++; + sprite->sState++; } -static void PokeballGlowEffect_6(struct Sprite *sprite) +static void PokeballGlowEffect_WaitForSound(struct Sprite *sprite) { - if (sprite->data[5] == 0 || IsFanfareTaskInactive()) + if (sprite->sPlayHealSe == FALSE || IsFanfareTaskInactive()) { - sprite->data[0]++; + sprite->sState++; } } -static void PokeballGlowEffect_7(struct Sprite *sprite) +static void PokeballGlowEffect_Idle(struct Sprite *sprite) { + // Idle until destroyed } -void SpriteCB_PokeballGlow(struct Sprite *sprite) +static void SpriteCB_PokeballGlow(struct Sprite *sprite) { - if (gSprites[sprite->data[0]].data[0] > 4) + if (gSprites[sprite->sEffectSpriteId].sState > 4) { FieldEffectFreeGraphicsResources(sprite); } } -static u8 PokecenterHealEffectHelper(s16 x, s16 y) +static u8 CreatePokecenterMonitorSprite(s16 x, s16 y) { - u8 spriteIdAtEnd; + u8 spriteId; struct Sprite *sprite; - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C31C, x, y, 0); - sprite = &gSprites[spriteIdAtEnd]; + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_PokecenterMonitor, x, y, 0); + sprite = &gSprites[spriteId]; sprite->oam.priority = 2; sprite->invisible = TRUE; - SetSubspriteTables(sprite, &gUnknown_0855C2AC); - return spriteIdAtEnd; + SetSubspriteTables(sprite, &sSubspriteTable_PokecenterMonitor); + return spriteId; } -void SpriteCB_PokecenterMonitor(struct Sprite *sprite) +static void SpriteCB_PokecenterMonitor(struct Sprite *sprite) { if (sprite->data[0] != 0) { @@ -1260,24 +1276,24 @@ void SpriteCB_PokecenterMonitor(struct Sprite *sprite) } } -static void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3) +static void CreateHofMonitorSprite(s16 taskId, s16 x, s16 y, bool8 isSmallMonitor) { - u8 spriteIdAtEnd; - if (!a3) + u8 spriteId; + if (!isSmallMonitor) { - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C334, a1, a2, 0); - SetSubspriteTables(&gSprites[spriteIdAtEnd], &gUnknown_0855C2C4); + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorBig, x, y, 0); + SetSubspriteTables(&gSprites[spriteId], &sSubspriteTable_HofMonitorBig); } else { - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C34C, a1, a2, 0); + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorSmall, x, y, 0); } - gSprites[spriteIdAtEnd].invisible = TRUE; - gSprites[spriteIdAtEnd].data[0] = a0; + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data[0] = taskId; } -void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) +static void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) { - if (gTasks[sprite->data[0]].data[15]) + if (gTasks[sprite->data[0]].tStartHofFlash) { if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) { @@ -1292,6 +1308,22 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) } } +#undef tState +#undef tNumMons +#undef tFirstBallX +#undef tFirstBallY +#undef tMonitorX +#undef tMonitorY +#undef tBallSpriteId +#undef tMonitorSpriteId +#undef tStartHofFlash +#undef sState +#undef sTimer +#undef sCounter +#undef sPlayHealSe +#undef sNumMons +#undef sSpriteId +#undef sEffectSpriteId void ReturnToFieldFromFlyMapSelect(void) { @@ -1315,14 +1347,12 @@ static void Task_UseFly(u8 taskId) if (!task->data[0]) { if (!IsWeatherNotFadingIn()) - { return; - } + gFieldEffectArguments[0] = GetCursorSelectionMonId(); if ((int)gFieldEffectArguments[0] > PARTY_SIZE - 1) - { gFieldEffectArguments[0] = 0; - } + FieldEffectStart(FLDEFF_USE_FLY); task->data[0]++; } @@ -1372,6 +1402,15 @@ static void Task_FlyIntoMap(u8 taskId) } } +#define tState data[0] +#define tFallOffset data[1] +#define tTotalFall data[2] +#define tSetTrigger data[3] +#define tSubsprMode data[4] + +#define tVertShake data[1] // re-used +#define tNumShakes data[2] + void FieldCB_FallWarpExit(void) { Overworld_PlaySpecialMapMusic(); @@ -1386,10 +1425,10 @@ static void Task_FallWarpFieldEffect(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - while (sFallWarpFieldEffectFuncs[task->data[0]](task)); // return code signifies whether to continue blocking here + while (sFallWarpFieldEffectFuncs[task->tState](task)); } -static bool8 FallWarpEffect_0(struct Task *task) +static bool8 FallWarpEffect_Init(struct Task *task) { struct ObjectEvent *playerObject; struct Sprite *playerSprite; @@ -1399,59 +1438,57 @@ static bool8 FallWarpEffect_0(struct Task *task) gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; gPlayerAvatar.preventStep = TRUE; ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection())); - task->data[4] = playerSprite->subspriteMode; + task->tSubsprMode = playerSprite->subspriteMode; playerObject->fixedPriority = 1; playerSprite->oam.priority = 1; playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; - task->data[0]++; + task->tState++; return TRUE; } -static bool8 FallWarpEffect_1(struct Task *task) +static bool8 FallWarpEffect_WaitWeather(struct Task *task) { if (IsWeatherNotFadingIn()) - { - task->data[0]++; - } + task->tState++; + return FALSE; } -static bool8 FallWarpEffect_2(struct Task *task) +static bool8 FallWarpEffect_StartFall(struct Task *task) { struct Sprite *sprite; s16 centerToCornerVecY; sprite = &gSprites[gPlayerAvatar.spriteId]; centerToCornerVecY = -(sprite->centerToCornerVecY << 1); sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); - task->data[1] = 1; - task->data[2] = 0; + task->tFallOffset = 1; + task->tTotalFall = 0; gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE; PlaySE(SE_RU_HYUU); - task->data[0]++; + task->tState++; return FALSE; } -static bool8 FallWarpEffect_3(struct Task *task) +static bool8 FallWarpEffect_Fall(struct Task *task) { struct ObjectEvent *objectEvent; struct Sprite *sprite; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.y += task->data[1]; - if (task->data[1] < 8) + sprite->pos2.y += task->tFallOffset; + if (task->tFallOffset < 8) { - task->data[2] += task->data[1]; - if (task->data[2] & 0xf) - { - task->data[1] <<= 1; - } + task->tTotalFall += task->tFallOffset; + + if (task->tTotalFall & 0xf) + task->tFallOffset <<= 1; } - if (task->data[3] == 0 && sprite->pos2.y >= -16) + if (task->tSetTrigger == FALSE && sprite->pos2.y >= -16) { - task->data[3]++; + task->tSetTrigger++; objectEvent->fixedPriority = 0; - sprite->subspriteMode = task->data[4]; + sprite->subspriteMode = task->tSubsprMode; objectEvent->triggerGroundEffectsOnMove = 1; } if (sprite->pos2.y >= 0) @@ -1460,37 +1497,36 @@ static bool8 FallWarpEffect_3(struct Task *task) objectEvent->triggerGroundEffectsOnStop = 1; objectEvent->landingJump = 1; sprite->pos2.y = 0; - task->data[0]++; + task->tState++; } return FALSE; } -static bool8 FallWarpEffect_4(struct Task *task) +static bool8 FallWarpEffect_Land(struct Task *task) { - task->data[0]++; - task->data[1] = 4; - task->data[2] = 0; + task->tState++; + task->tVertShake = 4; + task->tNumShakes = 0; SetCameraPanningCallback(NULL); return TRUE; } -static bool8 FallWarpEffect_5(struct Task *task) +static bool8 FallWarpEffect_CameraShake(struct Task *task) { - SetCameraPanning(0, task->data[1]); - task->data[1] = -task->data[1]; - task->data[2]++; - if ((task->data[2] & 3) == 0) - { - task->data[1] >>= 1; - } - if (task->data[1] == 0) - { - task->data[0]++; - } + SetCameraPanning(0, task->tVertShake); + task->tVertShake = -task->tVertShake; + task->tNumShakes++; + + if ((task->tNumShakes & 3) == 0) + task->tVertShake >>= 1; + + if (task->tVertShake == 0) + task->tState++; + return FALSE; } -static bool8 FallWarpEffect_6(struct Task *task) +static bool8 FallWarpEffect_End(struct Task *task) { gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); @@ -1501,14 +1537,25 @@ static bool8 FallWarpEffect_6(struct Task *task) return FALSE; } +#undef tState +#undef tFallOffset +#undef tTotalFall +#undef tSetTrigger +#undef tSubsprMode +#undef tVertShake +#undef tNumShakes + +#define tState data[0] +#define tGoingUp data[1] + void StartEscalatorWarp(u8 metatileBehavior, u8 priority) { u8 taskId; taskId = CreateTask(Task_EscalatorWarpOut, priority); - gTasks[taskId].data[1] = FALSE; + gTasks[taskId].tGoingUp = FALSE; if (metatileBehavior == MB_UP_ESCALATOR) { - gTasks[taskId].data[1] = TRUE; + gTasks[taskId].tGoingUp = TRUE; } } @@ -1516,74 +1563,74 @@ static void Task_EscalatorWarpOut(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - while (sEscalatorWarpOutFieldEffectFuncs[task->data[0]](task)); + while (sEscalatorWarpOutFieldEffectFuncs[task->tState](task)); } -static bool8 EscalatorWarpOutEffect_0(struct Task *task) +static bool8 EscalatorWarpOut_Init(struct Task *task) { FreezeObjectEvents(); CameraObjectReset2(); - StartEscalator(task->data[1]); - task->data[0]++; + StartEscalator(task->tGoingUp); + task->tState++; return FALSE; } -static bool8 EscalatorWarpOutEffect_1(struct Task *task) +static bool8 EscalatorWarpOut_WaitForPlayer(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) { ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetPlayerFacingDirection())); - task->data[0]++; + task->tState++; task->data[2] = 0; task->data[3] = 0; - if ((u8)task->data[1] == 0) + if ((u8)task->tGoingUp == FALSE) { - task->data[0] = 4; + task->tState = 4; // jump to EscalatorWarpOut_Down_Ride } PlaySE(SE_ESUKA); } return FALSE; } -static bool8 EscalatorWarpOutEffect_2(struct Task *task) +static bool8 EscalatorWarpOut_Up_Ride(struct Task *task) { - sub_80B6FB8(task); + RideUpEscalatorOut(task); if (task->data[2] > 3) { - sub_80B7050(); - task->data[0]++; + FadeOutAtEndOfEscalator(); + task->tState++; } return FALSE; } -static bool8 EscalatorWarpOutEffect_3(struct Task *task) +static bool8 EscalatorWarpOut_Up_End(struct Task *task) { - sub_80B6FB8(task); - sub_80B7060(); + RideUpEscalatorOut(task); + WarpAtEndOfEscalator(); return FALSE; } -static bool8 EscalatorWarpOutEffect_4(struct Task *task) +static bool8 EscalatorWarpOut_Down_Ride(struct Task *task) { - sub_80B7004(task); + RideDownEscalatorOut(task); if (task->data[2] > 3) { - sub_80B7050(); - task->data[0]++; + FadeOutAtEndOfEscalator(); + task->tState++; } return FALSE; } -static bool8 EscalatorWarpOutEffect_5(struct Task *task) +static bool8 EscalatorWarpOut_Down_End(struct Task *task) { - sub_80B7004(task); - sub_80B7060(); + RideDownEscalatorOut(task); + WarpAtEndOfEscalator(); return FALSE; } -static void sub_80B6FB8(struct Task *task) +static void RideUpEscalatorOut(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1596,7 +1643,7 @@ static void sub_80B6FB8(struct Task *task) } } -static void sub_80B7004(struct Task *task) +static void RideDownEscalatorOut(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1609,13 +1656,13 @@ static void sub_80B7004(struct Task *task) } } -static void sub_80B7050(void) +static void FadeOutAtEndOfEscalator(void) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); } -static void sub_80B7060(void) +static void WarpAtEndOfEscalator(void) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1627,6 +1674,9 @@ static void sub_80B7060(void) } } +#undef tState +#undef tGoingUp + static void FieldCallback_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); @@ -1636,14 +1686,16 @@ static void FieldCallback_EscalatorWarpIn(void) gFieldCallback = NULL; } +#define tState data[0] + static void Task_EscalatorWarpIn(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - while (sEscalatorWarpInFieldEffectFuncs[task->data[0]](task)); + while (sEscalatorWarpInFieldEffectFuncs[task->tState](task)); } -static bool8 EscalatorWarpInEffect_0(struct Task *task) +static bool8 EscalatorWarpIn_Init(struct Task *task) { struct ObjectEvent *objectEvent; s16 x; @@ -1654,31 +1706,35 @@ static bool8 EscalatorWarpInEffect_0(struct Task *task) ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(DIR_EAST)); PlayerGetDestCoords(&x, &y); behavior = MapGridGetMetatileBehaviorAt(x, y); - task->data[0]++; + task->tState++; task->data[1] = 16; + if (behavior == MB_DOWN_ESCALATOR) { + // If dest is down escalator tile, player is riding up behavior = TRUE; - task->data[0] = 3; - } else // MB_UP_ESCALATOR + task->tState = 3; // jump to EscalatorWarpIn_Up_Init + } + else // MB_UP_ESCALATOR { + // If dest is up escalator tile, player is riding down behavior = FALSE; } StartEscalator(behavior); return TRUE; } -static bool8 EscalatorWarpInEffect_1(struct Task *task) +static bool8 EscalatorWarpIn_Down_Init(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x84, task->data[1]); sprite->pos2.y = Sin(0x94, task->data[1]); - task->data[0]++; + task->tState++; return FALSE; } -static bool8 EscalatorWarpInEffect_2(struct Task *task) +static bool8 EscalatorWarpIn_Down_Ride(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1693,22 +1749,22 @@ static bool8 EscalatorWarpInEffect_2(struct Task *task) { sprite->pos2.x = 0; sprite->pos2.y = 0; - task->data[0] = 5; + task->tState = 5; } return FALSE; } -static bool8 EscalatorWarpInEffect_3(struct Task *task) +static bool8 EscalatorWarpIn_Up_Init(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x7c, task->data[1]); sprite->pos2.y = Sin(0x76, task->data[1]); - task->data[0]++; + task->tState++; return FALSE; } -static bool8 EscalatorWarpInEffect_4(struct Task *task) +static bool8 EscalatorWarpIn_Up_Ride(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1723,23 +1779,23 @@ static bool8 EscalatorWarpInEffect_4(struct Task *task) { sprite->pos2.x = 0; sprite->pos2.y = 0; - task->data[0]++; + task->tState++; } return FALSE; } -static bool8 EscalatorWarpInEffect_5(struct Task *task) +static bool8 EscalatorWarpIn_WaitForMovement(struct Task *task) { if (IsEscalatorMoving()) { return FALSE; } StopEscalator(); - task->data[0]++; + task->tState++; return TRUE; } -static bool8 EscalatorWarpInEffect_6(struct Task *task) +static bool8 EscalatorWarpIn_End(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1753,70 +1809,75 @@ static bool8 EscalatorWarpInEffect_6(struct Task *task) return FALSE; } +#undef tState + +#define tState data[0] +#define tMonId data[1] + bool8 FldEff_UseWaterfall(void) { u8 taskId; taskId = CreateTask(Task_UseWaterfall, 0xff); - gTasks[taskId].data[1] = gFieldEffectArguments[0]; + gTasks[taskId].tMonId = gFieldEffectArguments[0]; Task_UseWaterfall(taskId); return FALSE; } static void Task_UseWaterfall(u8 taskId) { - while (sWaterfallFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])); + while (sWaterfallFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])); } -static bool8 WaterfallFieldEffect_0(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_Init(struct Task *task, struct ObjectEvent *objectEvent) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; - task->data[0]++; + task->tState++; return FALSE; } -static bool8 WaterfallFieldEffect_1(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_ShowMon(struct Task *task, struct ObjectEvent *objectEvent) { ScriptContext2_Enable(); if (!ObjectEventIsMovementOverridden(objectEvent)) { ObjectEventClearHeldMovementIfFinished(objectEvent); - gFieldEffectArguments[0] = task->data[1]; + gFieldEffectArguments[0] = task->tMonId; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; + task->tState++; } return FALSE; } -static bool8 WaterfallFieldEffect_2(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_WaitForShowMon(struct Task *task, struct ObjectEvent *objectEvent) { if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { return FALSE; } - task->data[0]++; + task->tState++; return TRUE; } -static bool8 WaterfallFieldEffect_3(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_RideUp(struct Task *task, struct ObjectEvent *objectEvent) { ObjectEventSetHeldMovement(objectEvent, GetWalkSlowMovementAction(DIR_NORTH)); - task->data[0]++; + task->tState++; return FALSE; } -static bool8 WaterfallFieldEffect_4(struct Task *task, struct ObjectEvent *objectEvent) +static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct ObjectEvent *objectEvent) { if (!ObjectEventClearHeldMovementIfFinished(objectEvent)) - { return FALSE; - } + if (MetatileBehavior_IsWaterfall(objectEvent->currentMetatileBehavior)) { - // Still ascending waterfall - task->data[0] = 3; + // Still ascending waterfall, back to WaterfallFieldEffect_RideUp + task->tState = 3; return TRUE; } + ScriptContext2_Disable(); gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(Task_UseWaterfall)); @@ -1824,6 +1885,9 @@ static bool8 WaterfallFieldEffect_4(struct Task *task, struct ObjectEvent *objec return FALSE; } +#undef tState +#undef tMonId + bool8 FldEff_UseDive(void) { u8 taskId; @@ -1839,14 +1903,14 @@ void Task_UseDive(u8 taskId) while (sDiveFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId])); } -static bool8 DiveFieldEffect_0(struct Task *task) +static bool8 DiveFieldEffect_Init(struct Task *task) { gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } -static bool8 DiveFieldEffect_1(struct Task *task) +static bool8 DiveFieldEffect_ShowMon(struct Task *task) { ScriptContext2_Enable(); gFieldEffectArguments[0] = task->data[15]; @@ -1855,10 +1919,12 @@ static bool8 DiveFieldEffect_1(struct Task *task) return FALSE; } -static bool8 DiveFieldEffect_2(struct Task *task) +static bool8 DiveFieldEffect_TryWarp(struct Task *task) { struct MapPosition mapPosition; PlayerGetDestCoords(&mapPosition.x, &mapPosition.y); + + // Wait for show mon first if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { TryDoDiveWarp(&mapPosition, gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior); @@ -1878,7 +1944,7 @@ static void Task_LavaridgeGymB1FWarp(u8 taskId) while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -static bool8 LavaridgeGymB1FWarpEffect_0(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -1890,7 +1956,7 @@ static bool8 LavaridgeGymB1FWarpEffect_0(struct Task *task, struct ObjectEvent * return TRUE; } -static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_CameraShake(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1903,7 +1969,7 @@ static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct ObjectEvent * return FALSE; } -static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_Launch(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { sprite->pos2.y = 0; task->data[3] = 1; @@ -1911,13 +1977,13 @@ static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct ObjectEvent * gFieldEffectArguments[1] = objectEvent->currentCoords.y; gFieldEffectArguments[2] = sprite->subpriority - 1; gFieldEffectArguments[3] = sprite->oam.priority; - FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); + FieldEffectStart(FLDEFF_ASH_LAUNCH); PlaySE(SE_W153); task->data[0]++; return TRUE; } -static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { s16 centerToCornerVecY; SetCameraPanning(0, task->data[1]); @@ -1960,7 +2026,7 @@ static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct ObjectEvent * return FALSE; } -static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_FadeOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -1968,7 +2034,7 @@ static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct ObjectEvent * return FALSE; } -static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_Warp(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1994,7 +2060,7 @@ static void Task_LavaridgeGymB1FWarpExit(u8 taskId) while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -static bool8 LavaridgeGymB1FWarpExitEffect_0(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { CameraObjectReset2(); FreezeObjectEvents(); @@ -2004,7 +2070,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_0(struct Task *task, struct ObjectEve return FALSE; } -static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_StartPopOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (IsWeatherNotFadingIn()) { @@ -2012,13 +2078,13 @@ static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct ObjectEve gFieldEffectArguments[1] = objectEvent->currentCoords.y; gFieldEffectArguments[2] = sprite->subpriority - 1; gFieldEffectArguments[3] = sprite->oam.priority; - task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->data[1] = FieldEffectStart(FLDEFF_ASH_PUFF); task->data[0]++; } return FALSE; } -static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_PopOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { sprite = &gSprites[task->data[1]]; if (sprite->animCmdIndex > 1) @@ -2032,7 +2098,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct ObjectEve return FALSE; } -static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_End(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -2044,23 +2110,21 @@ static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct ObjectEve return FALSE; } -// For the ash puff effect when warping off the B1F ash tiles -u8 FldEff_LavaridgeGymWarp(void) +// For the ash effect when jumping off the Lavaridge Gym B1F warp tiles +u8 FldEff_AshLaunch(void) { u8 spriteId; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LAVARIDGE_GYM_WARP], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH_LAUNCH], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].coordOffsetEnabled = TRUE; return spriteId; } -void SpriteCB_LavaridgeGymWarp(struct Sprite *sprite) +void SpriteCB_AshLaunch(struct Sprite *sprite) { if (sprite->animEnded) - { - FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP); - } + FieldEffectStop(sprite, FLDEFF_ASH_LAUNCH); } void StartLavaridgeGym1FWarp(u8 priority) @@ -2073,7 +2137,7 @@ static void Task_LavaridgeGym1FWarp(u8 taskId) while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -static bool8 LavaridgeGym1FWarpEffect_0(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -2083,7 +2147,7 @@ static bool8 LavaridgeGym1FWarpEffect_0(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_AshPuff(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -2093,7 +2157,7 @@ static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *o gFieldEffectArguments[1] = objectEvent->currentCoords.y; gFieldEffectArguments[2] = sprite->subpriority - 1; gFieldEffectArguments[3] = sprite->oam.priority; - task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->data[1] = FieldEffectStart(FLDEFF_ASH_PUFF); task->data[0]++; } else { @@ -2105,7 +2169,7 @@ static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_Disappear(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (gSprites[task->data[1]].animCmdIndex == 2) { @@ -2115,9 +2179,9 @@ static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_FadeOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) + if (!FieldEffectActiveListContains(FLDEFF_ASH_PUFF)) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -2126,7 +2190,7 @@ static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *o return FALSE; } -static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_Warp(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -2138,24 +2202,29 @@ static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *o return FALSE; } -u8 FldEff_PopOutOfAsh(void) +// For the ash effect when a trainer pops out of ash, or when the player enters/exits a warp in Lavaridge Gym 1F +u8 FldEff_AshPuff(void) { u8 spriteId; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_OUT_OF_ASH], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH_PUFF], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].coordOffsetEnabled = TRUE; return spriteId; } -void SpriteCB_PopOutOfAsh(struct Sprite *sprite) +void SpriteCB_AshPuff(struct Sprite *sprite) { if (sprite->animEnded) - { - FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH); - } + FieldEffectStop(sprite, FLDEFF_ASH_PUFF); } +#define tState data[0] +#define tSpinDelay data[1] +#define tNumTurns data[2] +#define tTimer data[14] +#define tStartDir data[15] + void StartEscapeRopeFieldEffect(void) { ScriptContext2_Enable(); @@ -2165,21 +2234,21 @@ void StartEscapeRopeFieldEffect(void) static void Task_EscapeRopeWarpOut(u8 taskId) { - sEscapeRopeWarpOutFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sEscapeRopeWarpOutEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void EscapeRopeWarpOutFieldEffect_0(struct Task *task) +static void EscapeRopeWarpOutEffect_Init(struct Task *task) { - task->data[0]++; - task->data[14] = 64; - task->data[15] = GetPlayerFacingDirection(); + task->tState++; + task->tTimer = 64; + task->tStartDir = GetPlayerFacingDirection(); } -static void EscapeRopeWarpOutFieldEffect_1(struct Task *task) +static void EscapeRopeWarpOutEffect_Spin(struct Task *task) { struct ObjectEvent *objectEvent; u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; - if (task->data[14] != 0 && (--task->data[14]) == 0) + if (task->tTimer != 0 && (--task->tTimer) == 0) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -2187,29 +2256,28 @@ static void EscapeRopeWarpOutFieldEffect_1(struct Task *task) objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) { - if (task->data[14] == 0 && !gPaletteFade.active && BGMusicStopped() == TRUE) + if (task->tTimer == 0 && !gPaletteFade.active && BGMusicStopped() == TRUE) { - SetObjectEventDirection(objectEvent, task->data[15]); + SetObjectEventDirection(objectEvent, task->tStartDir); SetWarpDestinationToEscapeWarp(); WarpIntoMap(); gFieldCallback = FieldCallback_EscapeRopeWarpIn; SetMainCallback2(CB2_LoadMap); DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpOut)); - } else if (task->data[1] == 0 || (--task->data[1]) == 0) + } + else if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0) { ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection])); - if (task->data[2] < 12) - { - task->data[2]++; - } - task->data[1] = 8 >> (task->data[2] >> 2); + if (task->tNumTurns < 12) + task->tNumTurns++; + task->tSpinDelay = 8 >> (task->tNumTurns >> 2); } } } -void (*const sEscapeRopeWarpInFieldEffectFuncs[])(struct Task *) = { - EscapeRopeWarpInFieldEffect_0, - EscapeRopeWarpInFieldEffect_1 +void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = { + EscapeRopeWarpInEffect_Init, + EscapeRopeWarpInEffect_Spin }; static void FieldCallback_EscapeRopeWarpIn(void) @@ -2225,29 +2293,29 @@ static void FieldCallback_EscapeRopeWarpIn(void) static void Task_EscapeRopeWarpIn(u8 taskId) { - sEscapeRopeWarpInFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sEscapeRopeWarpInEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void EscapeRopeWarpInFieldEffect_0(struct Task *task) +static void EscapeRopeWarpInEffect_Init(struct Task *task) { if (IsWeatherNotFadingIn()) { - task->data[0]++; - task->data[15] = GetPlayerFacingDirection(); + task->tState++; + task->tStartDir = GetPlayerFacingDirection(); } } -static void EscapeRopeWarpInFieldEffect_1(struct Task *task) +static void EscapeRopeWarpInEffect_Spin(struct Task *task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - if (task->data[1] == 0 || (--task->data[1]) == 0) + if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0) { if (ObjectEventIsMovementOverridden(objectEvent) && !ObjectEventClearHeldMovementIfFinished(objectEvent)) { return; } - if (task->data[2] >= 32 && task->data[15] == GetPlayerFacingDirection()) + if (task->tNumTurns >= 32 && task->tStartDir == GetPlayerFacingDirection()) { objectEvent->invisible = FALSE; ScriptContext2_Disable(); @@ -2256,42 +2324,48 @@ static void EscapeRopeWarpInFieldEffect_1(struct Task *task) return; } ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection])); - if (task->data[2] < 32) - { - task->data[2]++; - } - task->data[1] = task->data[2] >> 2; + if (task->tNumTurns < 32) + task->tNumTurns++; + task->tSpinDelay = task->tNumTurns >> 2; } objectEvent->invisible ^= 1; } +#undef tState +#undef tSpinDelay +#undef tNumTurns +#undef tTimer +#undef tStartDir + +#define tState data[0] + void FldEff_TeleportWarpOut(void) { CreateTask(Task_TeleportWarpOut, 0); } static void (*const sTeleportWarpOutFieldEffectFuncs[])(struct Task *) = { - TeleportWarpOutFieldEffect_0, - TeleportWarpOutFieldEffect_1, - TeleportWarpOutFieldEffect_2, - TeleportWarpOutFieldEffect_3 + TeleportWarpOutFieldEffect_Init, + TeleportWarpOutFieldEffect_SpinGround, + TeleportWarpOutFieldEffect_SpinExit, + TeleportWarpOutFieldEffect_End }; static void Task_TeleportWarpOut(u8 taskId) { - sTeleportWarpOutFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sTeleportWarpOutFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void TeleportWarpOutFieldEffect_0(struct Task *task) +static void TeleportWarpOutFieldEffect_Init(struct Task *task) { ScriptContext2_Enable(); FreezeObjectEvents(); CameraObjectReset2(); task->data[15] = GetPlayerFacingDirection(); - task->data[0]++; + task->tState++; } -static void TeleportWarpOutFieldEffect_1(struct Task *task) +static void TeleportWarpOutFieldEffect_SpinGround(struct Task *task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2303,7 +2377,7 @@ static void TeleportWarpOutFieldEffect_1(struct Task *task) } if (task->data[2] > 7 && task->data[15] == objectEvent->facingDirection) { - task->data[0]++; + task->tState++; task->data[1] = 4; task->data[2] = 8; task->data[3] = 1; @@ -2311,7 +2385,7 @@ static void TeleportWarpOutFieldEffect_1(struct Task *task) } } -static void TeleportWarpOutFieldEffect_2(struct Task *task) +static void TeleportWarpOutFieldEffect_SpinExit(struct Task *task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2333,13 +2407,13 @@ static void TeleportWarpOutFieldEffect_2(struct Task *task) } if (task->data[4] >= 0xa8) { - task->data[0]++; + task->tState++; TryFadeOutOldMapMusic(); WarpFadeOutScreen(); } } -static void TeleportWarpOutFieldEffect_3(struct Task *task) +static void TeleportWarpOutFieldEffect_End(struct Task *task) { if (!gPaletteFade.active) { @@ -2373,9 +2447,9 @@ static void FieldCallback_TeleportWarpIn(void) } void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = { - TeleportWarpInFieldEffect_0, - TeleportWarpInFieldEffect_1, - TeleportWarpInFieldEffect_2 + TeleportWarpInFieldEffect_Init, + TeleportWarpInFieldEffect_SpinEnter, + TeleportWarpInFieldEffect_SpinGround }; static void Task_TeleportWarpIn(u8 taskId) @@ -2383,7 +2457,7 @@ static void Task_TeleportWarpIn(u8 taskId) sTeleportWarpInFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void TeleportWarpInFieldEffect_0(struct Task *task) +static void TeleportWarpInFieldEffect_Init(struct Task *task) { struct Sprite *sprite; s16 centerToCornerVecY; @@ -2402,7 +2476,7 @@ static void TeleportWarpInFieldEffect_0(struct Task *task) } } -static void TeleportWarpInFieldEffect_1(struct Task *task) +static void TeleportWarpInFieldEffect_SpinEnter(struct Task *task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2441,7 +2515,7 @@ static void TeleportWarpInFieldEffect_1(struct Task *task) } } -static void TeleportWarpInFieldEffect_2(struct Task *task) +static void TeleportWarpInFieldEffect_SpinGround(struct Task *task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2459,17 +2533,34 @@ static void TeleportWarpInFieldEffect_2(struct Task *task) } } +// Task data for Task_FieldMoveShowMonOutDoors +#define tState data[0] +#define tWinHoriz data[1] +#define tWinVert data[2] +#define tWinIn data[3] +#define tWinOut data[4] +#define tBgHoriz data[5] +#define tBgVert data[6] +#define tMonSpriteId data[15] + +// Sprite data for field move mon sprite +#define sSpecies data[0] +#define sOnscreenTimer data[1] +#define sSlidOffscreen data[7] + +// There are two variants (outdoor/indoor) of the "show mon for a field move" effect +// Outdoor has a black background with thick white streaks and appears from the right by stretching vertically and horizontally +// Indoor has blue background with thin white streaks and appears from the left by stretching horizontally +// For both the background streaks move to the right, and the mon sprite enters from the right and exits left bool8 FldEff_FieldMoveShowMon(void) { u8 taskId; if (IsMapTypeOutdoors(GetCurrentMapType()) == TRUE) - { taskId = CreateTask(Task_FieldMoveShowMonOutdoors, 0xff); - } else - { + else taskId = CreateTask(Task_FieldMoveShowMonIndoors, 0xff); - } - gTasks[taskId].data[15] = sub_80B8C60(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + + gTasks[taskId].tMonSpriteId = InitFieldMoveMonSprite(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); return FALSE; } @@ -2488,132 +2579,127 @@ bool8 FldEff_FieldMoveShowMonInit(void) } void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = { - FieldMoveShowMonOutdoorsEffect_0, - FieldMoveShowMonOutdoorsEffect_1, - FieldMoveShowMonOutdoorsEffect_2, - FieldMoveShowMonOutdoorsEffect_3, - FieldMoveShowMonOutdoorsEffect_4, - FieldMoveShowMonOutdoorsEffect_5, - FieldMoveShowMonOutdoorsEffect_6, + FieldMoveShowMonOutdoorsEffect_Init, + FieldMoveShowMonOutdoorsEffect_LoadGfx, + FieldMoveShowMonOutdoorsEffect_CreateBanner, + FieldMoveShowMonOutdoorsEffect_WaitForMon, + FieldMoveShowMonOutdoorsEffect_ShrinkBanner, + FieldMoveShowMonOutdoorsEffect_RestoreBg, + FieldMoveShowMonOutdoorsEffect_End, }; static void Task_FieldMoveShowMonOutdoors(u8 taskId) { - sFieldMoveShowMonOutdoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sFieldMoveShowMonOutdoorsEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void FieldMoveShowMonOutdoorsEffect_0(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); - task->data[1] = 0xf0f1; - task->data[2] = 0x5051; - task->data[3] = 0x3f; - task->data[4] = 0x3e; - SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); - SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); - SetGpuReg(REG_OFFSET_WININ, task->data[3]); - SetGpuReg(REG_OFFSET_WINOUT, task->data[4]); + task->tWinHoriz = WIN_RANGE(240, 241); + task->tWinVert = WIN_RANGE(80, 81); + task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; + task->tWinOut = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; + SetGpuReg(REG_OFFSET_WIN0H, task->tWinHoriz); + SetGpuReg(REG_OFFSET_WIN0V, task->tWinVert); + SetGpuReg(REG_OFFSET_WININ, task->tWinIn); + SetGpuReg(REG_OFFSET_WINOUT, task->tWinOut); SetVBlankCallback(VBlankCB_FieldMoveShowMonOutdoors); - task->data[0]++; + task->tState++; } -static void FieldMoveShowMonOutdoorsEffect_1(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_LoadGfx(struct Task *task) { u16 offset = ((REG_BG0CNT >> 2) << 14); u16 delta = ((REG_BG0CNT >> 8) << 11); - CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x200); + CpuCopy16(sFieldMoveStreaksOutdoors_Gfx, (void *)(VRAM + offset), 0x200); CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20); - sub_80B8874(delta); - task->data[0]++; + LoadPalette(sFieldMoveStreaksOutdoors_Pal, 0xf0, 0x20); + LoadFieldMoveOutdoorStreaksTilemap(delta); + task->tState++; } -static void FieldMoveShowMonOutdoorsEffect_2(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_CreateBanner(struct Task *task) { - s16 v0; - s16 v2; - s16 v3; - task->data[5] -= 16; - v0 = ((u16)task->data[1] >> 8); - v2 = ((u16)task->data[2] >> 8); - v3 = ((u16)task->data[2] & 0xff); - v0 -= 16; - v2 -= 2; - v3 += 2; - if (v0 < 0) + s16 horiz; + s16 vertHi; + s16 vertLo; + task->tBgHoriz -= 16; + horiz = ((u16)task->tWinHoriz >> 8); + vertHi = ((u16)task->tWinVert >> 8); + vertLo = ((u16)task->tWinVert & 0xff); + horiz -= 16; + vertHi -= 2; + vertLo += 2; + + if (horiz < 0) + horiz = 0; + + if (vertHi < 40) + vertHi = 40; + + if (vertLo > 120) + vertLo = 120; + + task->tWinHoriz = (horiz << 8) | (task->tWinHoriz & 0xff); + task->tWinVert = (vertHi << 8) | vertLo; + if (horiz == 0 && vertHi == 40 && vertLo == 120) { - v0 = 0; - } - if (v2 < 0x28) - { - v2 = 0x28; - } - if (v3 > 0x78) - { - v3 = 0x78; - } - task->data[1] = (v0 << 8) | (task->data[1] & 0xff); - task->data[2] = (v2 << 8) | v3; - if (v0 == 0 && v2 == 0x28 && v3 == 0x78) - { - gSprites[task->data[15]].callback = sub_80B8CC0; - task->data[0]++; + gSprites[task->tMonSpriteId].callback = SpriteCB_FieldMoveMonSlideOnscreen; + task->tState++; } } -static void FieldMoveShowMonOutdoorsEffect_3(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_WaitForMon(struct Task *task) { - task->data[5] -= 16; - if (gSprites[task->data[15]].data[7]) - { - task->data[0]++; - } + task->tBgHoriz -= 16; + + if (gSprites[task->tMonSpriteId].sSlidOffscreen) + task->tState++; } -static void FieldMoveShowMonOutdoorsEffect_4(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_ShrinkBanner(struct Task *task) { - s16 v2; - s16 v3; - task->data[5] -= 16; - v2 = (task->data[2] >> 8); - v3 = (task->data[2] & 0xff); - v2 += 6; - v3 -= 6; - if (v2 > 0x50) - { - v2 = 0x50; - } - if (v3 < 0x51) - { - v3 = 0x51; - } - task->data[2] = (v2 << 8) | v3; - if (v2 == 0x50 && v3 == 0x51) - { - task->data[0]++; - } + s16 vertHi; + s16 vertLo; + task->tBgHoriz -= 16; + vertHi = (task->tWinVert >> 8); + vertLo = (task->tWinVert & 0xFF); + vertHi += 6; + vertLo -= 6; + + if (vertHi > 80) + vertHi = 80; + + if (vertLo < 81) + vertLo = 81; + + task->tWinVert = (vertHi << 8) | vertLo; + + if (vertHi == 80 && vertLo == 81) + task->tState++; } -static void FieldMoveShowMonOutdoorsEffect_5(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_RestoreBg(struct Task *task) { u16 bg0cnt = (REG_BG0CNT >> 8) << 11; CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); - task->data[1] = 0xf1; - task->data[2] = 0xa1; - task->data[3] = task->data[11]; - task->data[4] = task->data[12]; - task->data[0]++; + task->tWinHoriz = 241; + task->tWinVert = 161; + task->tWinIn = task->data[11]; + task->tWinOut = task->data[12]; + task->tState++; } -static void FieldMoveShowMonOutdoorsEffect_6(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_End(struct Task *task) { IntrCallback callback; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); SetVBlankCallback(callback); InitTextBoxGfxAndPrinters(); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); + FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); DestroyTask(FindTaskIdByFunc(Task_FieldMoveShowMonOutdoors)); } @@ -2624,103 +2710,116 @@ static void VBlankCB_FieldMoveShowMonOutdoors(void) struct Task *task = &gTasks[FindTaskIdByFunc(Task_FieldMoveShowMonOutdoors)]; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); callback(); - SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); - SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); - SetGpuReg(REG_OFFSET_WININ, task->data[3]); - SetGpuReg(REG_OFFSET_WINOUT, task->data[4]); - SetGpuReg(REG_OFFSET_BG0HOFS, task->data[5]); - SetGpuReg(REG_OFFSET_BG0VOFS, task->data[6]); + SetGpuReg(REG_OFFSET_WIN0H, task->tWinHoriz); + SetGpuReg(REG_OFFSET_WIN0V, task->tWinVert); + SetGpuReg(REG_OFFSET_WININ, task->tWinIn); + SetGpuReg(REG_OFFSET_WINOUT, task->tWinOut); + SetGpuReg(REG_OFFSET_BG0HOFS, task->tBgHoriz); + SetGpuReg(REG_OFFSET_BG0VOFS, task->tBgVert); } -static void sub_80B8874(u16 offs) +static void LoadFieldMoveOutdoorStreaksTilemap(u16 offs) { u16 i; u16 *dest; - dest = (u16 *)(VRAM + 0x140 + offs); - for (i = 0; i < 0x140; i++, dest++) + dest = (u16 *)(VRAM + ARRAY_COUNT(sFieldMoveStreaksOutdoors_Tilemap) + offs); + for (i = 0; i < ARRAY_COUNT(sFieldMoveStreaksOutdoors_Tilemap); i++, dest++) { - *dest = gFieldMoveStreaksTilemap[i] | METATILE_ELEVATION_MASK; + *dest = sFieldMoveStreaksOutdoors_Tilemap[i] | 0xF000; } } +#undef tState +#undef tWinHoriz +#undef tWinVert +#undef tWinIn +#undef tWinOut +#undef tBgHoriz +#undef tBgVert +#undef tMonSpriteId + +// Task data for Task_FieldMoveShowMonIndoors +#define tState data[0] +#define tBgHoriz data[1] +#define tBgVert data[2] +#define tBgOffsetIdx data[3] +#define tBgOffset data[4] +#define tMonSpriteId data[15] + void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = { - FieldMoveShowMonIndoorsEffect_0, - FieldMoveShowMonIndoorsEffect_1, - FieldMoveShowMonIndoorsEffect_2, - FieldMoveShowMonIndoorsEffect_3, - FieldMoveShowMonIndoorsEffect_4, - FieldMoveShowMonIndoorsEffect_5, - FieldMoveShowMonIndoorsEffect_6, + FieldMoveShowMonIndoorsEffect_Init, + FieldMoveShowMonIndoorsEffect_LoadGfx, + FieldMoveShowMonIndoorsEffect_SlideBannerOn, + FieldMoveShowMonIndoorsEffect_WaitForMon, + FieldMoveShowMonIndoorsEffect_RestoreBg, + FieldMoveShowMonIndoorsEffect_SlideBannerOff, + FieldMoveShowMonIndoorsEffect_End, }; static void Task_FieldMoveShowMonIndoors(u8 taskId) { - sFieldMoveShowMonIndoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sFieldMoveShowMonIndoorsEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void FieldMoveShowMonIndoorsEffect_0(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_Init(struct Task *task) { - SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); - SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); + SetGpuReg(REG_OFFSET_BG0HOFS, task->tBgHoriz); + SetGpuReg(REG_OFFSET_BG0VOFS, task->tBgVert); StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); SetVBlankCallback(VBlankCB_FieldMoveShowMonIndoors); - task->data[0]++; + task->tState++; } -static void FieldMoveShowMonIndoorsEffect_1(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_LoadGfx(struct Task *task) { u16 offset; u16 delta; offset = ((REG_BG0CNT >> 2) << 14); delta = ((REG_BG0CNT >> 8) << 11); task->data[12] = delta; - CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80); + CpuCopy16(sFieldMoveStreaksIndoors_Gfx, (void *)(VRAM + offset), 0x80); CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20); - task->data[0]++; + LoadPalette(sFieldMoveStreaksIndoors_Pal, 0xf0, 0x20); + task->tState++; } -static void FieldMoveShowMonIndoorsEffect_2(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_SlideBannerOn(struct Task *task) { - if (sub_80B8B38(task)) + if (SlideIndoorBannerOnscreen(task)) { SetGpuReg(REG_OFFSET_WIN1H, 0x00f0); SetGpuReg(REG_OFFSET_WIN1V, 0x2878); - gSprites[task->data[15]].callback = sub_80B8CC0; - task->data[0]++; + gSprites[task->tMonSpriteId].callback = SpriteCB_FieldMoveMonSlideOnscreen; + task->tState++; } - sub_80B8B28(task); + AnimateIndoorShowMonBg(task); } -static void FieldMoveShowMonIndoorsEffect_3(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_WaitForMon(struct Task *task) { - sub_80B8B28(task); - if (gSprites[task->data[15]].data[7]) - { - task->data[0]++; - } + AnimateIndoorShowMonBg(task); + if (gSprites[task->tMonSpriteId].sSlidOffscreen) + task->tState++; } -static void FieldMoveShowMonIndoorsEffect_4(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_RestoreBg(struct Task *task) { - sub_80B8B28(task); - task->data[3] = task->data[1] & 7; - task->data[4] = 0; + AnimateIndoorShowMonBg(task); + task->tBgOffsetIdx = task->tBgHoriz & 7; + task->tBgOffset = 0; SetGpuReg(REG_OFFSET_WIN1H, 0xffff); SetGpuReg(REG_OFFSET_WIN1V, 0xffff); - task->data[0]++; + task->tState++; } -static void FieldMoveShowMonIndoorsEffect_5(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_SlideBannerOff(struct Task *task) { - sub_80B8B28(task); - if (sub_80B8BF0(task)) - { - task->data[0]++; - } + AnimateIndoorShowMonBg(task); + if (SlideIndoorBannerOffscreen(task)) + task->tState++; } -static void FieldMoveShowMonIndoorsEffect_6(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_End(struct Task *task) { IntrCallback intrCallback; u16 bg0cnt; @@ -2729,7 +2828,7 @@ static void FieldMoveShowMonIndoorsEffect_6(struct Task *task) LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); SetVBlankCallback(intrCallback); InitTextBoxGfxAndPrinters(); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); + FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); DestroyTask(FindTaskIdByFunc(Task_FieldMoveShowMonIndoors)); } @@ -2741,116 +2840,123 @@ static void VBlankCB_FieldMoveShowMonIndoors(void) task = &gTasks[FindTaskIdByFunc(Task_FieldMoveShowMonIndoors)]; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); intrCallback(); - SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); - SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); + SetGpuReg(REG_OFFSET_BG0HOFS, task->tBgHoriz); + SetGpuReg(REG_OFFSET_BG0VOFS, task->tBgVert); } -static void sub_80B8B28(struct Task *task) +static void AnimateIndoorShowMonBg(struct Task *task) { - task->data[1] -= 16; - task->data[3] += 16; + task->tBgHoriz -= 16; + task->tBgOffsetIdx += 16; } -static bool8 sub_80B8B38(struct Task *task) +static bool8 SlideIndoorBannerOnscreen(struct Task *task) { u16 i; u16 srcOffs; u16 dstOffs; u16 *dest; - if (task->data[4] >= 32) - { + + if (task->tBgOffset >= 32) return TRUE; - } - dstOffs = (task->data[3] >> 3) & 0x1f; - if (dstOffs >= task->data[4]) + + dstOffs = (task->tBgOffsetIdx >> 3) & 0x1f; + if (dstOffs >= task->tBgOffset) { dstOffs = (32 - dstOffs) & 0x1f; - srcOffs = (32 - task->data[4]) & 0x1f; + srcOffs = (32 - task->tBgOffset) & 0x1f; dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); for (i = 0; i < 10; i++) { - dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32]; + dest[dstOffs + i * 32] = sFieldMoveStreaksIndoors_Tilemap[srcOffs + i * 32]; dest[dstOffs + i * 32] |= 0xf000; - dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; + dest[((dstOffs + 1) & 0x1f) + i * 32] = sFieldMoveStreaksIndoors_Tilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; dest[((dstOffs + 1) & 0x1f) + i * 32] |= 0xf000; } - task->data[4] += 2; + task->tBgOffset += 2; } return FALSE; } -static bool8 sub_80B8BF0(struct Task *task) +static bool8 SlideIndoorBannerOffscreen(struct Task *task) { u16 i; u16 dstOffs; u16 *dest; - if (task->data[4] >= 32) - { + + if (task->tBgOffset >= 32) return TRUE; - } - dstOffs = task->data[3] >> 3; - if (dstOffs >= task->data[4]) + + dstOffs = task->tBgOffsetIdx >> 3; + if (dstOffs >= task->tBgOffset) { - dstOffs = (task->data[1] >> 3) & 0x1f; + dstOffs = (task->tBgHoriz >> 3) & 0x1f; dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); for (i = 0; i < 10; i++) { dest[dstOffs + i * 32] = 0xf000; dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000; } - task->data[4] += 2; + task->tBgOffset += 2; } return FALSE; } -static u8 sub_80B8C60(u32 a0, u32 a1, u32 a2) +#undef tState +#undef tBgHoriz +#undef tBgVert +#undef tBgOffsetIdx +#undef tBgOffset +#undef tMonSpriteId + +static u8 InitFieldMoveMonSprite(u32 species, u32 otId, u32 personality) { u16 v0; u8 monSprite; struct Sprite *sprite; - v0 = (a0 & 0x80000000) >> 16; - a0 &= 0x7fffffff; - monSprite = CreateMonSprite_FieldMove(a0, a1, a2, 0x140, 0x50, 0); + v0 = (species & 0x80000000) >> 16; + species &= 0x7fffffff; + monSprite = CreateMonSprite_FieldMove(species, otId, personality, 0x140, 0x50, 0); sprite = &gSprites[monSprite]; sprite->callback = SpriteCallbackDummy; sprite->oam.priority = 0; - sprite->data[0] = a0; + sprite->sSpecies = species; sprite->data[6] = v0; return monSprite; } -static void sub_80B8CC0(struct Sprite *sprite) +static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *sprite) { - if ((sprite->pos1.x -= 20) <= 0x78) + if ((sprite->pos1.x -= 20) <= 120) { - sprite->pos1.x = 0x78; - sprite->data[1] = 30; - sprite->callback = sub_80B8D04; + sprite->pos1.x = 120; + sprite->sOnscreenTimer = 30; + sprite->callback = SpriteCB_FieldMoveMonWaitAfterCry; if (sprite->data[6]) { - PlayCry2(sprite->data[0], 0, 0x7d, 0xa); + PlayCry2(sprite->sSpecies, 0, 0x7d, 0xa); } else { - PlayCry1(sprite->data[0], 0); + PlayCry1(sprite->sSpecies, 0); } } } -static void sub_80B8D04(struct Sprite *sprite) +static void SpriteCB_FieldMoveMonWaitAfterCry(struct Sprite *sprite) { - if ((--sprite->data[1]) == 0) + if ((--sprite->sOnscreenTimer) == 0) { - sprite->callback = sub_80B8D20; + sprite->callback = SpriteCB_FieldMoveMonSlideOffscreen; } } -static void sub_80B8D20(struct Sprite *sprite) +static void SpriteCB_FieldMoveMonSlideOffscreen(struct Sprite *sprite) { - if (sprite->pos1.x < -0x40) + if (sprite->pos1.x < -64) { - sprite->data[7] = 1; + sprite->sSlidOffscreen = TRUE; } else { @@ -2858,40 +2964,51 @@ static void sub_80B8D20(struct Sprite *sprite) } } +#undef tState +#undef tMonSpriteId +#undef sSpecies +#undef sSlidOffscreen +#undef sOnscreenTimer + +#define tState data[0] +#define tDestX data[1] +#define tDestY data[2] +#define tMonId data[15] + u8 FldEff_UseSurf(void) { u8 taskId = CreateTask(Task_SurfFieldEffect, 0xff); - gTasks[taskId].data[15] = gFieldEffectArguments[0]; + gTasks[taskId].tMonId = gFieldEffectArguments[0]; Overworld_ClearSavedMusic(); Overworld_ChangeMusicTo(MUS_NAMINORI); return FALSE; } void (*const sSurfFieldEffectFuncs[])(struct Task *) = { - SurfFieldEffect_1, - SurfFieldEffect_2, - SurfFieldEffect_3, - SurfFieldEffect_4, - SurfFieldEffect_5, + SurfFieldEffect_Init, + SurfFieldEffect_FieldMovePose, + SurfFieldEffect_ShowMon, + SurfFieldEffect_JumpOnSurfBlob, + SurfFieldEffect_End, }; static void Task_SurfFieldEffect(u8 taskId) { - sSurfFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sSurfFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void SurfFieldEffect_1(struct Task *task) +static void SurfFieldEffect_Init(struct Task *task) { ScriptContext2_Enable(); FreezeObjectEvents(); gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING); - PlayerGetDestCoords(&task->data[1], &task->data[2]); - MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->data[1], &task->data[2]); - task->data[0]++; + PlayerGetDestCoords(&task->tDestX, &task->tDestY); + MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->tDestX, &task->tDestY); + task->tState++; } -static void SurfFieldEffect_2(struct Task *task) +static void SurfFieldEffect_FieldMovePose(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2899,23 +3016,23 @@ static void SurfFieldEffect_2(struct Task *task) { SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); - task->data[0]++; + task->tState++; } } -static void SurfFieldEffect_3(struct Task *task) +static void SurfFieldEffect_ShowMon(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventCheckHeldMovementStatus(objectEvent)) { - gFieldEffectArguments[0] = task->data[15] | 0x80000000; + gFieldEffectArguments[0] = task->tMonId | 0x80000000; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; + task->tState++; } } -static void SurfFieldEffect_4(struct Task *task) +static void SurfFieldEffect_JumpOnSurfBlob(struct Task *task) { struct ObjectEvent *objectEvent; if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) @@ -2924,15 +3041,15 @@ static void SurfFieldEffect_4(struct Task *task) ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); ObjectEventClearHeldMovementIfFinished(objectEvent); ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(objectEvent->movementDirection)); - gFieldEffectArguments[0] = task->data[1]; - gFieldEffectArguments[1] = task->data[2]; + gFieldEffectArguments[0] = task->tDestX; + gFieldEffectArguments[1] = task->tDestY; gFieldEffectArguments[2] = gPlayerAvatar.objectEventId; objectEvent->fieldEffectSpriteId = FieldEffectStart(FLDEFF_SURF_BLOB); - task->data[0]++; + task->tState++; } } -static void SurfFieldEffect_5(struct Task *task) +static void SurfFieldEffect_End(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2941,7 +3058,7 @@ static void SurfFieldEffect_5(struct Task *task) gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection)); - sub_81555AC(objectEvent->fieldEffectSpriteId, 1); + SetSurfBobState(objectEvent->fieldEffectSpriteId, 1); UnfreezeObjectEvents(); ScriptContext2_Disable(); FieldEffectActiveListRemove(FLDEFF_USE_SURF); @@ -2949,10 +3066,15 @@ static void SurfFieldEffect_5(struct Task *task) } } -u8 sub_80B8F98(void) +#undef tState +#undef tDestX +#undef tDestY +#undef tMonId + +u8 FldEff_RayquazaSpotlight(void) { u8 i, j, k; - u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RAYQUAZA], 0x78, -0x18, 1); + u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RAYQUAZA], 120, -24, 1); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; @@ -2966,7 +3088,7 @@ u8 sub_80B8F98(void) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(14, 14)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); - LoadPalette(gUnknown_0855B610, 0xC0, sizeof(gUnknown_0855B610)); + LoadPalette(sSpotlight_Pal, 0xC0, sizeof(sSpotlight_Pal)); SetGpuReg(REG_OFFSET_BG0VOFS, 120); for (i = 3; i < 15; i++) { @@ -2979,8 +3101,8 @@ u8 sub_80B8F98(void) { for (i = 0; i < 8; i++) { - *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (gUnknown_0855B630[k * 32 + i * 4 + 1] << 8) + gUnknown_0855B630[k * 32 + i * 4]; - *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (gUnknown_0855B630[k * 32 + i * 4 + 3] << 8) + gUnknown_0855B630[k * 32 + i * 4 + 2]; + *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (sSpotlight_Gfx[k * 32 + i * 4 + 1] << 8) + sSpotlight_Gfx[k * 32 + i * 4]; + *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (sSpotlight_Gfx[k * 32 + i * 4 + 3] << 8) + sSpotlight_Gfx[k * 32 + i * 4 + 2]; } } return spriteId; @@ -3015,39 +3137,47 @@ static void SpriteCB_NPCFlyOut(struct Sprite *sprite) npcSprite->pos2.x = 0; npcSprite->pos2.y = 0; } + if (sprite->data[2] >= 0x80) - { FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); - } } -#define tAvatarFlags data[15] +// Task data for Task_FlyOut/FlyIn +#define tState data[0] +#define tMonId data[1] +#define tBirdSpriteId data[1] //re-used +#define tTimer data[2] +#define tAvatarFlags data[15] + +// Sprite data for the fly bird +#define sPlayerSpriteId data[6] +#define sAnimCompleted data[7] u8 FldEff_UseFly(void) { u8 taskId = CreateTask(Task_FlyOut, 254); - gTasks[taskId].data[1] = gFieldEffectArguments[0]; + gTasks[taskId].tMonId = gFieldEffectArguments[0]; return 0; } void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = { - FlyOutFieldEffect_0, - FlyOutFieldEffect_1, - FlyOutFieldEffect_2, - FlyOutFieldEffect_3, - FlyOutFieldEffect_4, - FlyOutFieldEffect_5, - FlyOutFieldEffect_6, - FlyOutFieldEffect_7, - FlyOutFieldEffect_8, + FlyOutFieldEffect_FieldMovePose, + FlyOutFieldEffect_ShowMon, + FlyOutFieldEffect_BirdLeaveBall, + FlyOutFieldEffect_WaitBirdLeave, + FlyOutFieldEffect_BirdSwoopDown, + FlyOutFieldEffect_JumpOnBird, + FlyOutFieldEffect_FlyOffWithBird, + FlyOutFieldEffect_WaitFlyOff, + FlyOutFieldEffect_End, }; static void Task_FlyOut(u8 taskId) { - sFlyOutFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sFlyOutFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void FlyOutFieldEffect_0(struct Task *task) +static void FlyOutFieldEffect_FieldMovePose(struct Task *task) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) @@ -3057,61 +3187,61 @@ static void FlyOutFieldEffect_0(struct Task *task) SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT); SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); - task->data[0]++; + task->tState++; } } -static void FlyOutFieldEffect_1(struct Task *task) +static void FlyOutFieldEffect_ShowMon(struct Task *task) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { - task->data[0]++; - gFieldEffectArguments[0] = task->data[1]; + task->tState++; + gFieldEffectArguments[0] = task->tMonId; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); } } -static void FlyOutFieldEffect_2(struct Task *task) +static void FlyOutFieldEffect_BirdLeaveBall(struct Task *task) { if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) { - sub_81555AC(objectEvent->fieldEffectSpriteId, 2); - sub_81555D8(objectEvent->fieldEffectSpriteId, 0); + SetSurfBobState(objectEvent->fieldEffectSpriteId, 2); + SetSurfBobWhileFlyingOutState(objectEvent->fieldEffectSpriteId, 0); } - task->data[1] = sub_80B94C4(); - task->data[0]++; + task->tBirdSpriteId = CreateFlyBirdSprite(); // Does "leave ball" animation by default + task->tState++; } } -static void FlyOutFieldEffect_3(struct Task *task) +static void FlyOutFieldEffect_WaitBirdLeave(struct Task *task) { - if (sub_80B9508(task->data[1])) + if (GetFlyBirdAnimCompleted(task->tBirdSpriteId)) { - task->data[0]++; - task->data[2] = 16; + task->tState++; + task->tTimer = 16; SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_FACE_LEFT); } } -static void FlyOutFieldEffect_4(struct Task *task) +static void FlyOutFieldEffect_BirdSwoopDown(struct Task *task) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent)) + if ((task->tTimer == 0 || (--task->tTimer) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent)) { - task->data[0]++; + task->tState++; PlaySE(SE_W019); - sub_80B9524(task->data[1]); + StartFlyBirdSwoopDown(task->tBirdSpriteId); } } -static void FlyOutFieldEffect_5(struct Task *task) +static void FlyOutFieldEffect_JumpOnBird(struct Task *task) { - if ((++task->data[2]) >= 8) + if ((++task->tTimer) >= 8) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); @@ -3122,35 +3252,35 @@ static void FlyOutFieldEffect_5(struct Task *task) { DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]); } - task->data[0]++; - task->data[2] = 0; + task->tState++; + task->tTimer = 0; } } -static void FlyOutFieldEffect_6(struct Task *task) +static void FlyOutFieldEffect_FlyOffWithBird(struct Task *task) { - if ((++task->data[2]) >= 10) + if ((++task->tTimer) >= 10) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventClearHeldMovementIfActive(objectEvent); objectEvent->inanimate = FALSE; objectEvent->hasShadow = FALSE; - sub_80B9560(task->data[1], objectEvent->spriteId); + SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId); CameraObjectReset2(); - task->data[0]++; + task->tState++; } } -static void FlyOutFieldEffect_7(struct Task *task) +static void FlyOutFieldEffect_WaitFlyOff(struct Task *task) { - if (sub_80B9508(task->data[1])) + if (GetFlyBirdAnimCompleted(task->tBirdSpriteId)) { WarpFadeOutScreen(); - task->data[0]++; + task->tState++; } } -static void FlyOutFieldEffect_8(struct Task *task) +static void FlyOutFieldEffect_End(struct Task *task) { if (!gPaletteFade.active) { @@ -3159,7 +3289,7 @@ static void FlyOutFieldEffect_8(struct Task *task) } } -static u8 sub_80B94C4(void) +static u8 CreateFlyBirdSprite(void) { u8 spriteId; struct Sprite *sprite; @@ -3167,58 +3297,58 @@ static u8 sub_80B94C4(void) sprite = &gSprites[spriteId]; sprite->oam.paletteNum = 0; sprite->oam.priority = 1; - sprite->callback = sub_80B957C; + sprite->callback = SpriteCB_FlyBirdLeaveBall; return spriteId; } -static u8 sub_80B9508(u8 spriteId) +static u8 GetFlyBirdAnimCompleted(u8 spriteId) { - return gSprites[spriteId].data[7]; + return gSprites[spriteId].sAnimCompleted; } -static void sub_80B9524(u8 spriteId) +static void StartFlyBirdSwoopDown(u8 spriteId) { struct Sprite *sprite; sprite = &gSprites[spriteId]; - sprite->callback = sub_80B963C; - sprite->pos1.x = 0x78; - sprite->pos1.y = 0x00; + sprite->callback = SpriteCB_FlyBirdSwoopDown; + sprite->pos1.x = 120; + sprite->pos1.y = 0; sprite->pos2.x = 0; sprite->pos2.y = 0; memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */); - sprite->data[6] = 0x40; + sprite->sPlayerSpriteId = MAX_SPRITES; } -static void sub_80B9560(u8 a0, u8 a1) +static void SetFlyBirdPlayerSpriteId(u8 birdSpriteId, u8 playerSpriteId) { - gSprites[a0].data[6] = a1; + gSprites[birdSpriteId].sPlayerSpriteId = playerSpriteId; } -const union AffineAnimCmd SpriteAffineAnim_855C518[] = { +static const union AffineAnimCmd sAffineAnim_FlyBirdLeaveBall[] = { AFFINEANIMCMD_FRAME(8, 8, -30, 0), AFFINEANIMCMD_FRAME(28, 28, 0, 30), AFFINEANIMCMD_END }; -const union AffineAnimCmd SpriteAffineAnim_855C530[] = { +static const union AffineAnimCmd sAffineAnim_FlyBirdReturnToBall[] = { AFFINEANIMCMD_FRAME(256, 256, 64, 0), AFFINEANIMCMD_FRAME(-10, -10, 0, 22), AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_0855C548[] = { - SpriteAffineAnim_855C518, - SpriteAffineAnim_855C530 +static const union AffineAnimCmd *const sAffineAnims_FlyBird[] = { + sAffineAnim_FlyBirdLeaveBall, + sAffineAnim_FlyBirdReturnToBall }; -static void sub_80B957C(struct Sprite *sprite) +static void SpriteCB_FlyBirdLeaveBall(struct Sprite *sprite) { - if (sprite->data[7] == 0) + if (sprite->sAnimCompleted == FALSE) { if (sprite->data[0] == 0) { sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; - sprite->affineAnims = gSpriteAffineAnimTable_0855C548; + sprite->affineAnims = sAffineAnims_FlyBird; InitSpriteAffineAnim(sprite); StartSpriteAffineAnim(sprite, 0); sprite->pos1.x = 0x76; @@ -3236,7 +3366,7 @@ static void sub_80B957C(struct Sprite *sprite) } if (sprite->data[1] > 0x81) { - sprite->data[7]++; + sprite->sAnimCompleted++; sprite->oam.affineMode = ST_OAM_AFFINE_OFF; FreeOamMatrix(sprite->oam.matrixNum); CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF); @@ -3244,14 +3374,14 @@ static void sub_80B957C(struct Sprite *sprite) } } -static void sub_80B963C(struct Sprite *sprite) +static void SpriteCB_FlyBirdSwoopDown(struct Sprite *sprite) { sprite->pos2.x = Cos(sprite->data[2], 0x8c); sprite->pos2.y = Sin(sprite->data[2], 0x48); sprite->data[2] = (sprite->data[2] + 4) & 0xff; - if (sprite->data[6] != MAX_SPRITES) + if (sprite->sPlayerSpriteId != MAX_SPRITES) { - struct Sprite *sprite1 = &gSprites[sprite->data[6]]; + struct Sprite *sprite1 = &gSprites[sprite->sPlayerSpriteId]; sprite1->coordOffsetEnabled = FALSE; sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; @@ -3260,18 +3390,18 @@ static void sub_80B963C(struct Sprite *sprite) } if (sprite->data[2] >= 0x80) { - sprite->data[7] = 1; + sprite->sAnimCompleted = TRUE; } } -void sub_80B96B0(struct Sprite *sprite) +static void SpriteCB_FlyBirdReturnToBall(struct Sprite *sprite) { - if (sprite->data[7] == 0) + if (sprite->sAnimCompleted == FALSE) { if (sprite->data[0] == 0) { sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; - sprite->affineAnims = gSpriteAffineAnimTable_0855C548; + sprite->affineAnims = sAffineAnims_FlyBird; InitSpriteAffineAnim(sprite); StartSpriteAffineAnim(sprite, 1); sprite->pos1.x = 0x5e; @@ -3300,7 +3430,7 @@ void sub_80B96B0(struct Sprite *sprite) } if (sprite->data[3] >= 60) { - sprite->data[7]++; + sprite->sAnimCompleted++; sprite->oam.affineMode = ST_OAM_AFFINE_OFF; FreeOamMatrix(sprite->oam.matrixNum); sprite->invisible = TRUE; @@ -3308,78 +3438,78 @@ void sub_80B96B0(struct Sprite *sprite) } } -void sub_80B9794(u8 spriteId) +static void StartFlyBirdReturnToBall(u8 spriteId) { - sub_80B9524(spriteId); - gSprites[spriteId].callback = sub_80B96B0; + StartFlyBirdSwoopDown(spriteId); // Set up is the same, but overrwrites the callback below + gSprites[spriteId].callback = SpriteCB_FlyBirdReturnToBall; } u8 FldEff_FlyIn(void) { - CreateTask(Task_FlyIn, 0xfe); + CreateTask(Task_FlyIn, 254); return 0; } void (*const sFlyInFieldEffectFuncs[])(struct Task *) = { - FlyInFieldEffect_0, - FlyInFieldEffect_1, - FlyInFieldEffect_2, - FlyInFieldEffect_3, - FlyInFieldEffect_4, - FlyInFieldEffect_5, - FlyInFieldEffect_6, + FlyInFieldEffect_BirdSwoopDown, + FlyInFieldEffect_FlyInWithBird, + FlyInFieldEffect_JumpOffBird, + FlyInFieldEffect_FieldMovePose, + FlyInFieldEffect_BirdReturnToBall, + FlyInFieldEffect_WaitBirdReturn, + FlyInFieldEffect_End, }; static void Task_FlyIn(u8 taskId) { - sFlyInFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sFlyInFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void FlyInFieldEffect_0(struct Task *task) +static void FlyInFieldEffect_BirdSwoopDown(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) { - task->data[0]++; - task->data[2] = 17; + task->tState++; + task->tTimer = 17; task->tAvatarFlags = gPlayerAvatar.flags; gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT); if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) { - sub_81555AC(objectEvent->fieldEffectSpriteId, 0); + SetSurfBobState(objectEvent->fieldEffectSpriteId, 0); } ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); CameraObjectReset2(); ObjectEventTurn(objectEvent, DIR_WEST); StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); objectEvent->invisible = FALSE; - task->data[1] = sub_80B94C4(); - sub_80B9524(task->data[1]); - sub_80B9560(task->data[1], objectEvent->spriteId); + task->tBirdSpriteId = CreateFlyBirdSprite(); + StartFlyBirdSwoopDown(task->tBirdSpriteId); + SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId); } } -static void FlyInFieldEffect_1(struct Task *task) +static void FlyInFieldEffect_FlyInWithBird(struct Task *task) { struct ObjectEvent *objectEvent; struct Sprite *sprite; - if (task->data[2] == 0 || (--task->data[2]) == 0) + if (task->tTimer == 0 || (--task->tTimer) == 0) { objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; sprite = &gSprites[objectEvent->spriteId]; - sub_80B9560(task->data[1], 0x40); + SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, MAX_SPRITES); sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - task->data[0]++; - task->data[2] = 0; + task->tState++; + task->tTimer = 0; } } -static void FlyInFieldEffect_2(struct Task *task) +static void FlyInFieldEffect_JumpOffBird(struct Task *task) { s16 sYPositions[18] = { -2, @@ -3402,18 +3532,17 @@ static void FlyInFieldEffect_2(struct Task *task) 8 }; struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.y = sYPositions[task->data[2]]; - if ((++task->data[2]) >= (int)ARRAY_COUNT(sYPositions)) - { - task->data[0]++; - } + sprite->pos2.y = sYPositions[task->tTimer]; + + if ((++task->tTimer) >= (int)ARRAY_COUNT(sYPositions)) + task->tState++; } -static void FlyInFieldEffect_3(struct Task *task) +static void FlyInFieldEffect_FieldMovePose(struct Task *task) { struct ObjectEvent *objectEvent; struct Sprite *sprite; - if (sub_80B9508(task->data[1])) + if (GetFlyBirdAnimCompleted(task->tBirdSpriteId)) { objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; sprite = &gSprites[objectEvent->spriteId]; @@ -3424,30 +3553,30 @@ static void FlyInFieldEffect_3(struct Task *task) sprite->coordOffsetEnabled = TRUE; SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); - task->data[0]++; + task->tState++; } } -static void FlyInFieldEffect_4(struct Task *task) +static void FlyInFieldEffect_BirdReturnToBall(struct Task *task) { if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId])) { - task->data[0]++; - sub_80B9794(task->data[1]); + task->tState++; + StartFlyBirdReturnToBall(task->tBirdSpriteId); } } -static void FlyInFieldEffect_5(struct Task *task) +static void FlyInFieldEffect_WaitBirdReturn(struct Task *task) { - if (sub_80B9508(task->data[1])) + if (GetFlyBirdAnimCompleted(task->tBirdSpriteId)) { - DestroySprite(&gSprites[task->data[1]]); - task->data[0]++; - task->data[1] = 0x10; + DestroySprite(&gSprites[task->tBirdSpriteId]); + task->tState++; + task->data[1] = 16; } } -static void FlyInFieldEffect_6(struct Task *task) +static void FlyInFieldEffect_End(struct Task *task) { u8 state; struct ObjectEvent *objectEvent; @@ -3458,7 +3587,7 @@ static void FlyInFieldEffect_6(struct Task *task) if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) { state = PLAYER_AVATAR_STATE_SURFING; - sub_81555AC(objectEvent->fieldEffectSpriteId, 1); + SetSurfBobState(objectEvent->fieldEffectSpriteId, 1); } ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state)); ObjectEventTurn(objectEvent, DIR_SOUTH); @@ -3469,17 +3598,33 @@ static void FlyInFieldEffect_6(struct Task *task) } } +#undef tState +#undef tMonId +#undef tBirdSpriteId +#undef tTimer +#undef tAvatarFlags +#undef sPlayerSpriteId +#undef sAnimCompleted + +#define tState data[1] +#define tObjectEventId data[2] +#define tTimer data[3] +#define tCameraTaskId data[5] +#define tLocalId data[6] +#define tMapNum data[7] +#define tMapGroup data[8] + bool8 FldEff_DestroyDeoxysRock(void) { u8 taskId; - u8 objectEventIdBuffer; - if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) + u8 objectEventId; + if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventId)) { - taskId = CreateTask(Task_DestroyDeoxysRock, 0x50); - gTasks[taskId].data[2] = objectEventIdBuffer; - gTasks[taskId].data[6] = gFieldEffectArguments[0]; - gTasks[taskId].data[7] = gFieldEffectArguments[1]; - gTasks[taskId].data[8] = gFieldEffectArguments[2]; + taskId = CreateTask(Task_DestroyDeoxysRock, 80); + gTasks[taskId].tObjectEventId = objectEventId; + gTasks[taskId].tLocalId = gFieldEffectArguments[0]; + gTasks[taskId].tMapNum = gFieldEffectArguments[1]; + gTasks[taskId].tMapGroup = gFieldEffectArguments[2]; } else { @@ -3488,49 +3633,58 @@ bool8 FldEff_DestroyDeoxysRock(void) return FALSE; } -static void Task_PanCameraForDestroyingDeoxysRock(u8 taskId) +#define tShakeDelay data[0] +#define tShakeUp data[1] +#define tShake data[5] +#define tEndDelay data[6] +#define tEnding data[7] + +static void Task_DeoxysRockCameraShake(u8 taskId) { s16 *data = gTasks[taskId].data; - if (data[7] != 0) + if (tEnding) { - if (++data[6] > 20) + if (++tEndDelay > 20) { - data[6] = 0; - if (data[5] != 0) - data[5]--; + tEndDelay = 0; + if (tShake != 0) + tShake--; } } else { - data[5] = 4; + tShake = 4; } - if (++data[0] > 1) + if (++tShakeDelay > 1) { - data[0] = 0; - if (++data[1] & 1) - { - SetCameraPanning(0, -data[5]); - } + tShakeDelay = 0; + + if (++tShakeUp & 1) + SetCameraPanning(0, -tShake); else - { - SetCameraPanning(0, data[5]); - } + SetCameraPanning(0, tShake); } UpdateCameraPanning(); - if (data[5] == 0) + if (tShake == 0) DestroyTask(taskId); } -void sub_80B9BD0(u8 taskId) +static void StartEndingDeoxysRockCameraShake(u8 taskId) { - gTasks[taskId].data[7] = 1; + gTasks[taskId].tEnding = TRUE; } -void (*const sDestroyDeoxysRockFieldEffectFuncs[])(s16*, u8) = { - DestroyDeoxysRockFieldEffect_0, - DestroyDeoxysRockFieldEffect_1, - DestroyDeoxysRockFieldEffect_2, +#undef tShakeDelay +#undef tShakeUp +#undef tShake +#undef tEndDelay +#undef tEnding + +void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = { + DestroyDeoxysRockEffect_CameraShake, + DestroyDeoxysRockEffect_RockFragments, + DestroyDeoxysRockEffect_WaitAndEnd, }; static void Task_DestroyDeoxysRock(u8 taskId) @@ -3538,89 +3692,97 @@ static void Task_DestroyDeoxysRock(u8 taskId) s16 *data = gTasks[taskId].data; InstallCameraPanAheadCallback(); SetCameraPanningCallback(0); - sDestroyDeoxysRockFieldEffectFuncs[data[1]](data, taskId); + sDestroyDeoxysRockEffectFuncs[tState](data, taskId); } -static void DestroyDeoxysRockFieldEffect_0(s16* data, u8 taskId) +static void DestroyDeoxysRockEffect_CameraShake(s16* data, u8 taskId) { - u8 newTaskId = CreateTask(Task_PanCameraForDestroyingDeoxysRock, 0x5A); + u8 newTaskId = CreateTask(Task_DeoxysRockCameraShake, 90); PlaySE(SE_T_KAMI2); - data[5] = newTaskId; - data[1]++; + tCameraTaskId = newTaskId; + tState++; } -static void DestroyDeoxysRockFieldEffect_1(s16* data, u8 taskId) +static void DestroyDeoxysRockEffect_RockFragments(s16* data, u8 taskId) { - if (++data[3] > 0x78) + if (++tTimer > 120) { - struct Sprite *sprite = &gSprites[gObjectEvents[data[2]].spriteId]; - gObjectEvents[data[2]].invisible = TRUE; + struct Sprite *sprite = &gSprites[gObjectEvents[tObjectEventId].spriteId]; + gObjectEvents[tObjectEventId].invisible = TRUE; BlendPalettes(0x0000FFFF, 0x10, RGB_WHITE); BeginNormalPaletteFade(0x0000FFFF, 0, 0x10, 0, RGB_WHITE); - sub_80B9D24(sprite); + CreateDeoxysRockFragments(sprite); PlaySE(SE_T_KAMI); - sub_80B9BD0(data[5]); - data[3] = 0; - data[1]++; + StartEndingDeoxysRockCameraShake(tCameraTaskId); + tTimer = 0; + tState++; } } -static void DestroyDeoxysRockFieldEffect_2(s16* a0, u8 taskId) +static void DestroyDeoxysRockEffect_WaitAndEnd(s16* data, u8 taskId) { - if (!gPaletteFade.active && !FuncIsActiveTask(Task_PanCameraForDestroyingDeoxysRock)) + if (!gPaletteFade.active && !FuncIsActiveTask(Task_DeoxysRockCameraShake)) { InstallCameraPanAheadCallback(); - RemoveObjectEventByLocalIdAndMap(a0[6], a0[7], a0[8]); + RemoveObjectEventByLocalIdAndMap(tLocalId, tMapNum, tMapGroup); FieldEffectActiveListRemove(FLDEFF_DESTROY_DEOXYS_ROCK); DestroyTask(taskId); } } -const struct SpriteFrameImage gSpriteImageTable_855C59C[] = { - obj_frame_tiles(gUnknown_0855C170), - obj_frame_tiles(gUnknown_0855C190), - obj_frame_tiles(gUnknown_0855C1B0), - obj_frame_tiles(gUnknown_0855C1D0), +#undef tState +#undef tObjectEventId +#undef tTimer +#undef tCameraTaskId +#undef tLocalId +#undef tMapNum +#undef tMapGroup + +static const struct SpriteFrameImage sImages_DeoxysRockFragment[] = { + obj_frame_tiles(sRockFragment_TopLeft), + obj_frame_tiles(sRockFragment_TopRight), + obj_frame_tiles(sRockFragment_BottomLeft), + obj_frame_tiles(sRockFragment_BottomRight), }; -const union AnimCmd gSpriteAnim_855C5BC[] = { +static const union AnimCmd sAnim_RockFragment_TopLeft[] = { ANIMCMD_FRAME(.imageValue = 0), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_855C5C4[] = { +static const union AnimCmd sAnim_RockFragment_TopRight[] = { ANIMCMD_FRAME(.imageValue = 1), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_855C5CC[] = { +static const union AnimCmd sAnim_RockFragment_BottomLeft[] = { ANIMCMD_FRAME(.imageValue = 2), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_855C5D4[] = { +static const union AnimCmd sAnim_RockFragment_BottomRight[] = { ANIMCMD_FRAME(.imageValue = 3), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_855C5DC[] = { - gSpriteAnim_855C5BC, - gSpriteAnim_855C5C4, - gSpriteAnim_855C5CC, - gSpriteAnim_855C5D4, +static const union AnimCmd *const sAnims_DeoxysRockFragment[] = { + sAnim_RockFragment_TopLeft, + sAnim_RockFragment_TopRight, + sAnim_RockFragment_BottomLeft, + sAnim_RockFragment_BottomRight, }; -const struct SpriteTemplate gUnknown_0855C5EC = { +static const struct SpriteTemplate sSpriteTemplate_DeoxysRockFragment = { .tileTag = 0xFFFF, .paletteTag = 4378, - .oam = &gOamData_855C218, - .anims = gSpriteAnimTable_855C5DC, - .images = gSpriteImageTable_855C59C, + .oam = &sOam_8x8, + .anims = sAnims_DeoxysRockFragment, + .images = sImages_DeoxysRockFragment, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80B9DB8 + .callback = SpriteCB_DeoxysRockFragment }; -static void sub_80B9D24(struct Sprite* sprite) +static void CreateDeoxysRockFragments(struct Sprite* sprite) { int i; int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x; @@ -3628,7 +3790,7 @@ static void sub_80B9D24(struct Sprite* sprite) for (i = 0; i < 4; i++) { - u8 spriteId = CreateSprite(&gUnknown_0855C5EC, xPos, yPos, 0); + u8 spriteId = CreateSprite(&sSpriteTemplate_DeoxysRockFragment, xPos, yPos, 0); if (spriteId != MAX_SPRITES) { StartSpriteAnim(&gSprites[spriteId], i); @@ -3638,8 +3800,9 @@ static void sub_80B9D24(struct Sprite* sprite) } } -static void sub_80B9DB8(struct Sprite* sprite) +static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite) { + // 1 case for each fragment, fly off in 4 different directions switch (sprite->data[0]) { case 0: @@ -3659,7 +3822,7 @@ static void sub_80B9DB8(struct Sprite* sprite) sprite->pos1.y += 12; break; } - if ((u16)(sprite->pos1.x + 4) > 0xF8 || sprite->pos1.y < -4 || sprite->pos1.y > 0xA4) + if ((u16)(sprite->pos1.x + 4) > 248 || sprite->pos1.y < -4 || sprite->pos1.y > 164) DestroySprite(sprite); } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index d6bffd2068..e3ca54f16d 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -817,19 +817,19 @@ u32 FldEff_Unknown19(void) return 0; } -u32 FldEff_UnusedGrass(void) +u32 FldEff_UnusedGrass2(void) { u8 spriteId; struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS_2], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNUSED_GRASS; + sprite->data[0] = FLDEFF_UNUSED_GRASS_2; } return 0; } @@ -851,19 +851,19 @@ u32 FldEff_Unknown21(void) return 0; } -u32 FldEff_Unknown22(void) +u32 FldEff_WaterSurfacing(void) { u8 spriteId; struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_WATER_SURFACING], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNKNOWN_22; + sprite->data[0] = FLDEFF_WATER_SURFACING; } return 0; } @@ -960,33 +960,34 @@ u32 FldEff_SurfBlob(void) return spriteId; } -void sub_81555AC(u8 spriteId, u8 value) +// States for bobbing up and down while surfing +void SetSurfBobState(u8 spriteId, u8 value) { gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (value & 0xF); } -void sub_81555D8(u8 spriteId, u8 value) +void SetSurfBobWhileFlyingOutState(u8 spriteId, u8 value) { gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((value & 0xF) << 4); } -void sub_8155604(u8 spriteId, u8 value, s16 data1) +void SetSurfBobWhileFishingState(u8 spriteId, u8 value, s16 data1) { gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((value & 0xF) << 8); gSprites[spriteId].data[1] = data1; } -static u8 sub_8155638(struct Sprite *sprite) +static u8 GetSurfBobState(struct Sprite *sprite) { return sprite->data[0] & 0xF; } -static u8 sub_8155640(struct Sprite *sprite) +static u8 GetSurfBobWhileFlyingOutState(struct Sprite *sprite) { return (sprite->data[0] & 0xF0) >> 4; } -static u8 sub_815564C(struct Sprite *sprite) +static u8 GetSurfBobWhileFishingState(struct Sprite *sprite) { return (sprite->data[0] & 0xF00) >> 8; } @@ -1018,7 +1019,7 @@ static void SynchroniseSurfAnim(struct ObjectEvent *objectEvent, struct Sprite * [DIR_NORTHEAST] = 1, }; - if (sub_8155640(sprite) == 0) + if (GetSurfBobWhileFlyingOutState(sprite) == 0) StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[objectEvent->movementDirection]); } @@ -1049,8 +1050,8 @@ void sub_81556E8(struct ObjectEvent *objectEvent, struct Sprite *sprite) static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite *linkedSprite, struct Sprite *sprite) { u16 unk_085CDC6A[] = {3, 7}; - u8 v0 = sub_8155638(sprite); - if (v0 != 0) + u8 bobState = GetSurfBobState(sprite); + if (bobState != 0) { if (((u16)(++ sprite->data[4]) & unk_085CDC6A[sprite->data[5]]) == 0) { @@ -1060,9 +1061,9 @@ static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite * { sprite->data[3] = -sprite->data[3]; } - if (v0 != 2) + if (bobState != 2) { - if (sub_815564C(sprite) == 0) + if (GetSurfBobWhileFishingState(sprite) == 0) linkedSprite->pos2.y = sprite->pos2.y; else linkedSprite->pos2.y = sprite->data[1] + sprite->pos2.y; @@ -1358,61 +1359,72 @@ void UpdateSparkleFieldEffect(struct Sprite *sprite) FieldEffectStop(sprite, FLDEFF_SPARKLE); } -void sub_8155EA0(struct Sprite *sprite) +#define sTimer data[0] +#define sState data[2] +#define sStartY data[4] +#define sCounter data[5] +#define sAnimCounter data[6] +#define sAnimState data[7] + +// Same as InitSpriteForFigure8Anim +static void InitRayquazaForFigure8Anim(struct Sprite *sprite) { - sprite->data[6] = 0; - sprite->data[7] = 0; + sprite->sAnimCounter = 0; + sprite->sAnimState = 0; } -bool8 sub_8155EA8(struct Sprite *sprite) +// Only different from AnimateSpriteInFigure8 by the addition of SetGpuReg to move the spotlight +static bool8 AnimateRayquazaInFigure8(struct Sprite *sprite) { - bool8 returnBool = FALSE; + bool8 finished = FALSE; - switch (sprite->data[7]) + switch (sprite->sAnimState) { - case 0: - sprite->pos2.x += sub_809773C(sprite->data[6]); - sprite->pos2.y += sub_8097728(sprite->data[6]); - break; - case 1: - sprite->pos2.x -= sub_809773C(0x47 - sprite->data[6]); - sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]); - break; - case 2: - sprite->pos2.x -= sub_809773C(sprite->data[6]); - sprite->pos2.y += sub_8097728(sprite->data[6]); - break; - case 3: - sprite->pos2.x += sub_809773C(0x47 - sprite->data[6]); - sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]); - break; + case 0: + sprite->pos2.x += GetFigure8XOffset(sprite->sAnimCounter); + sprite->pos2.y += GetFigure8YOffset(sprite->sAnimCounter); + break; + case 1: + sprite->pos2.x -= GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter); + sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter); + break; + case 2: + sprite->pos2.x -= GetFigure8XOffset(sprite->sAnimCounter); + sprite->pos2.y += GetFigure8YOffset(sprite->sAnimCounter); + break; + case 3: + sprite->pos2.x += GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter); + sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter); + break; } + // Update spotlight to sweep left and right with Rayquaza SetGpuReg(REG_OFFSET_BG0HOFS, -sprite->pos2.x); - if (++sprite->data[6] == 72) + + if (++sprite->sAnimCounter == FIGURE_8_LENGTH) { - sprite->data[6] = 0; - sprite->data[7]++; + sprite->sAnimCounter = 0; + sprite->sAnimState++; } - if (sprite->data[7] == 4) + if (sprite->sAnimState == 4) { sprite->pos2.y = 0; sprite->pos2.x = 0; - returnBool = TRUE; + finished = TRUE; } - return returnBool; + return finished; } -void sub_8155F80(struct Sprite *sprite) +void UpdateRayquazaSpotlightEffect(struct Sprite *sprite) { u8 i, j; - switch (sprite->data[2]) + switch (sprite->sState) { case 0: - SetGpuReg(REG_OFFSET_BG0VOFS, 0x78 - (sprite->data[0] / 3)); - if (sprite->data[0] == 0x60) + SetGpuReg(REG_OFFSET_BG0VOFS, 120 - (sprite->sTimer / 3)); + if (sprite->sTimer == 96) { for (i = 0; i < 3; i++) { @@ -1422,42 +1434,42 @@ void sub_8155F80(struct Sprite *sprite) } } } - if (sprite->data[0] > 0x137) + if (sprite->sTimer > 311) { - sprite->data[2] = 1; - sprite->data[0] = 0; + sprite->sState = 1; + sprite->sTimer = 0; } break; case 1: - sprite->pos1.y = (gSineTable[sprite->data[0] / 3] >> 2) + sprite->data[4]; - if (sprite->data[0] == 0xBD) + sprite->pos1.y = (gSineTable[sprite->sTimer / 3] >> 2) + sprite->sStartY; + if (sprite->sTimer == 189) { - sprite->data[2] = 2; - sprite->data[5] = 0; - sprite->data[0] = 0; + sprite->sState = 2; + sprite->sCounter = 0; + sprite->sTimer = 0; } break; case 2: - if (sprite->data[0] == 0x3C) + if (sprite->sTimer == 60) { - sprite->data[5]++; - sprite->data[0] = 0; + sprite->sCounter++; + sprite->sTimer = 0; } - if (sprite->data[5] == 7) + if (sprite->sCounter == 7) { - sprite->data[5] = 0; - sprite->data[2] = 3; + sprite->sCounter = 0; + sprite->sState = 3; } break; case 3: if (sprite->pos2.y == 0) { - sprite->data[0] = 0; - sprite->data[2]++; + sprite->sTimer = 0; + sprite->sState++; } - if (sprite->data[0] == 5) + if (sprite->sTimer == 5) { - sprite->data[0] = 0; + sprite->sTimer = 0; if (sprite->pos2.y > 0) sprite->pos2.y--; else @@ -1465,38 +1477,38 @@ void sub_8155F80(struct Sprite *sprite) } break; case 4: - if (sprite->data[0] == 0x3C) + if (sprite->sTimer == 60) { - sprite->data[2] = 5; - sprite->data[0] = 0; - sprite->data[5] = 0; + sprite->sState = 5; + sprite->sTimer = 0; + sprite->sCounter = 0; } break; case 5: - sub_8155EA0(sprite); - sprite->data[2] = 6; - sprite->data[0] = 0; + InitRayquazaForFigure8Anim(sprite); + sprite->sState = 6; + sprite->sTimer = 0; break; case 6: - if (sub_8155EA8(sprite)) + if (AnimateRayquazaInFigure8(sprite)) { - sprite->data[0] = 0; - if (++sprite->data[5] <= 2) + sprite->sTimer = 0; + if (++sprite->sCounter <= 2) { - sub_8155EA0(sprite); + InitRayquazaForFigure8Anim(sprite); } else { - sprite->data[5] = 0; - sprite->data[2] = 7; + sprite->sCounter = 0; + sprite->sState = 7; } } break; case 7: - if (sprite->data[0] == 0x1E) + if (sprite->sTimer == 30) { - sprite->data[2] = 8; - sprite->data[0] = 0; + sprite->sState = 8; + sprite->sTimer = 0; } break; case 8: @@ -1508,11 +1520,11 @@ void sub_8155F80(struct Sprite *sprite) } } SetGpuReg(REG_OFFSET_BG0VOFS, 0); - FieldEffectStop(sprite, FLDEFF_RAYQUAZA); + FieldEffectStop(sprite, FLDEFF_RAYQUAZA_SPOTLIGHT); break; } - if (sprite->data[2] == 1) + if (sprite->sState == 1) { if ((sprite->data[1] & 7) == 0) sprite->pos2.y += sprite->data[3]; @@ -1521,10 +1533,17 @@ void sub_8155F80(struct Sprite *sprite) sprite->data[1]++; } - sprite->data[0]++; + sprite->sTimer++; } -void sub_8156194(struct Sprite *sprite) +#undef sTimer +#undef sState +#undef sStartY +#undef sCounter +#undef sAnimCounter +#undef sAnimState + +void UpdateJumpImpactEffect(struct Sprite *sprite) { if (sprite->animEnded) { diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index c482f39d6a..41ddfc17dd 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -320,7 +320,7 @@ static u8 ObjectEventCB2_NoMovement2(void) return 0; } -void player_step(u8 direction, u16 newKeys, u16 heldKeys) +void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -869,7 +869,7 @@ static void PlayerAvatarTransition_Surfing(struct ObjectEvent *objEvent) gFieldEffectArguments[2] = gPlayerAvatar.objectEventId; spriteId = FieldEffectStart(FLDEFF_SURF_BLOB); objEvent->fieldEffectSpriteId = spriteId; - sub_81555AC(spriteId, 1); + SetSurfBobState(spriteId, 1); } static void PlayerAvatarTransition_Underwater(struct ObjectEvent *objEvent) @@ -885,7 +885,7 @@ static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *objEvent) gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_5; } -void sub_808B578(void) +void UpdatePlayerAvatarTransitionState(void) { gPlayerAvatar.tileTransitionState = T_NOT_MOVING; if (PlayerIsAnimActive()) @@ -1650,7 +1650,7 @@ static void Task_StopSurfingInit(u8 taskId) if (!ObjectEventClearHeldMovementIfFinished(playerObjEvent)) return; } - sub_81555AC(playerObjEvent->fieldEffectSpriteId, 2); + SetSurfBobState(playerObjEvent->fieldEffectSpriteId, 2); ObjectEventSetHeldMovement(playerObjEvent, GetJumpSpecialMovementAction((u8)gTasks[taskId].data[0])); gTasks[taskId].func = Task_WaitStopSurfing; } @@ -1934,7 +1934,7 @@ static bool8 Fishing11(struct Task *task) ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId); ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection); if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0); + SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0); gSprites[gPlayerAvatar.spriteId].pos2.x = 0; gSprites[gPlayerAvatar.spriteId].pos2.y = 0; ClearDialogWindowAndFrame(0, TRUE); @@ -1994,7 +1994,7 @@ static bool8 Fishing15(struct Task *task) ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId); ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection); if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0); + SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0); gSprites[gPlayerAvatar.spriteId].pos2.x = 0; gSprites[gPlayerAvatar.spriteId].pos2.y = 0; task->tStep++; @@ -2053,7 +2053,7 @@ static void AlignFishingAnimationFrames(void) if (animType == 10 || animType == 11) playerSprite->pos2.y = 8; if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y); + SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y); } void sub_808D074(u8 a0) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 971e58cf40..57dc27ed9b 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -290,7 +290,7 @@ void FieldCB_WarpExitFadeFromWhite(void) void FieldCB_WarpExitFadeFromBlack(void) { - if (!sub_81D6534()) // sub_81D6534 always returns false + if (!OnTrainerHillEReaderChallengeFloor()) // always false Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); SetUpWarpExitTask(); diff --git a/src/fieldmap.c b/src/fieldmap.c index a046bf4fae..5eb00ad270 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -44,7 +44,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader); static void LoadSavedMapView(void); static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, u8 yMode); -struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection) +struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection) { return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum); } @@ -124,7 +124,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) gMapConnectionFlags = sDummyConnectionFlags; for (i = 0; i < count; i++, connection++) { - struct MapHeader const *cMap = mapconnection_get_mapheader(connection); + struct MapHeader const *cMap = GetMapHeaderFromConnection(connection); u32 offset = connection->offset; switch (connection->direction) { @@ -734,7 +734,7 @@ int CanCameraMoveInDirection(int direction) void sub_80887F8(struct MapConnection *connection, int direction, int x, int y) { struct MapHeader const *mapHeader; - mapHeader = mapconnection_get_mapheader(connection); + mapHeader = GetMapHeaderFromConnection(connection); switch (direction) { case CONNECTION_EAST: @@ -805,7 +805,7 @@ struct MapConnection *sub_8088950(u8 direction, int x, int y) bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection) { struct MapHeader const *mapHeader; - mapHeader = mapconnection_get_mapheader(connection); + mapHeader = GetMapHeaderFromConnection(connection); switch (direction) { case CONNECTION_SOUTH: @@ -846,7 +846,7 @@ int sub_8088A38(int x, int width) int sub_8088A4C(struct MapConnection *connection, int x, int y) { struct MapHeader const *mapHeader; - mapHeader = mapconnection_get_mapheader(connection); + mapHeader = GetMapHeaderFromConnection(connection); switch (connection->direction) { case CONNECTION_SOUTH: @@ -893,7 +893,7 @@ struct MapConnection *GetConnectionAtCoords(s16 x, s16 y) return NULL; } -void sub_8088B3C(u16 x, u16 y) +void SetCameraFocusCoords(u16 x, u16 y) { gSaveBlock1Ptr->pos.x = x - 7; gSaveBlock1Ptr->pos.y = y - 7; @@ -905,7 +905,8 @@ void GetCameraFocusCoords(u16 *x, u16 *y) *y = gSaveBlock1Ptr->pos.y + 7; } -void SetPlayerCoords(u16 x, u16 y) +// Unused +static void SetCameraCoords(u16 x, u16 y) { gSaveBlock1Ptr->pos.x = x; gSaveBlock1Ptr->pos.y = y; diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index f5e06e8f6a..2c9151598e 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -122,12 +122,12 @@ static const struct SpriteFrameImage sSpriteImageTable_CutGrass[] = {gFieldEffectPic_CutGrass, 0x20}, }; -const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000}; +const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, FLDEFF_PAL_TAG_0}; static const struct SpriteTemplate sSpriteTemplate_CutGrass = { .tileTag = 0xFFFF, - .paletteTag = 0x1000, + .paletteTag = FLDEFF_PAL_TAG_0, .oam = &sOamData_CutGrass, .anims = sSpriteAnimTable_CutGrass, .images = sSpriteImageTable_CutGrass, diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index f197b7b33c..bb5bd65d76 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -209,7 +209,7 @@ static const struct SpriteFrameImage gUnknown_858E5D8[] = static const struct SpriteTemplate gUnknown_0858E600 = { .tileTag = 0xFFFF, - .paletteTag = 0x1003, + .paletteTag = FLDEFF_PAL_TAG_3, .oam = &gOamData_858E4D8, .anims = gSpriteAnimTable_858E570, .images = gUnknown_858E588, @@ -220,7 +220,7 @@ static const struct SpriteTemplate gUnknown_0858E600 = static const struct SpriteTemplate gUnknown_0858E618 = { .tileTag = 0xFFFF, - .paletteTag = 0x1008, + .paletteTag = FLDEFF_PAL_TAG_8, .oam = &gOamData_858E4D8, .anims = gSpriteAnimTable_858E574, .images = gUnknown_858E5B0, @@ -231,7 +231,7 @@ static const struct SpriteTemplate gUnknown_0858E618 = static const struct SpriteTemplate gUnknown_0858E630 = { .tileTag = 0xFFFF, - .paletteTag = 0x1008, + .paletteTag = FLDEFF_PAL_TAG_8, .oam = &gOamData_858E4D8, .anims = gSpriteAnimTable_858E584, .images = gUnknown_858E5D8, @@ -239,8 +239,8 @@ static const struct SpriteTemplate gUnknown_0858E630 = .callback = ShrubEntranceSpriteCallback1, }; -const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, 0x1003}; -const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, 0x1008}; +const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, FLDEFF_PAL_TAG_3}; +const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, FLDEFF_PAL_TAG_8}; static const struct OamData gOamData_858E658 = { @@ -277,7 +277,7 @@ static const struct SpriteFrameImage gUnknown_0858E674[] = static const struct SpriteTemplate gUnknown_0858E68C = { .tileTag = 0xFFFF, - .paletteTag = 0x100E, + .paletteTag = FLDEFF_PAL_TAG_14, .oam = &gOamData_858E658, .anims = gSpriteAnimTable_858E670, .images = gUnknown_0858E674, @@ -286,7 +286,7 @@ static const struct SpriteTemplate gUnknown_0858E68C = }; // This uses one of the secret base palettes, so there is no "graphics/field_effects/palettes/09.pal" file. -const struct SpritePalette gFieldEffectObjectPaletteInfo9 = {gTilesetPalettes_SecretBase[5], 0x100E}; +const struct SpritePalette gFieldEffectObjectPaletteInfo9 = {gTilesetPalettes_SecretBase[5], FLDEFF_PAL_TAG_14}; static const u8 gSpriteImage_858E6AC[] = INCBIN_U8("graphics/unknown/858E84C/0.4bpp"); static const u8 gSpriteImage_858E72C[] = INCBIN_U8("graphics/unknown/858E84C/1.4bpp"); @@ -300,7 +300,7 @@ static const struct SpriteFrameImage gUnknown_0858E84C[] = {gSpriteImage_858E7AC, sizeof(gSpriteImage_858E7AC)}, }; -static const struct SpritePalette gUnknown_0858E864 = {gUnknown_0858E82C, 0x1000}; +static const struct SpritePalette gUnknown_0858E864 = {gUnknown_0858E82C, FLDEFF_PAL_TAG_0}; static const union AnimCmd gSpriteAnim_858E86C[] = { @@ -318,7 +318,7 @@ static const union AnimCmd *const gSpriteAnimTable_858E87C[] = static const struct SpriteTemplate gUnknown_0858E880 = { .tileTag = 0xFFFF, - .paletteTag = 0x1000, + .paletteTag = FLDEFF_PAL_TAG_0, .oam = &gObjectEventBaseOam_32x8, .anims = gSpriteAnimTable_858E87C, .images = gUnknown_0858E84C, diff --git a/src/item_use.c b/src/item_use.c index ff689a19ae..a90321a3bc 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -399,7 +399,7 @@ static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, i u32 localOffset; s32 localLength; - struct MapHeader const *const mapHeader = mapconnection_get_mapheader(connection); + struct MapHeader const *const mapHeader = GetMapHeaderFromConnection(connection); switch (connection->direction) { diff --git a/src/overworld.c b/src/overworld.c index 530699f831..bfe6929887 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -96,24 +96,24 @@ static void VBlankCB_Field(void); static void SpriteCB_LinkPlayer(struct Sprite *sprite); static void ChooseAmbientCrySpecies(void); static void DoMapLoadLoop(u8 *state); +static bool32 LoadMapInStepsLocal(u8 *state, bool32); static bool32 LoadMapInStepsLink(u8 *state); static bool32 ReturnToFieldLocal(u8 *state); -static bool32 LoadMapInStepsLocal(u8 *state, bool32); static bool32 ReturnToFieldLink(u8 *state); -static void mli4_mapscripts_and_other(void); +static void InitObjectEventsLink(void); +static void InitObjectEventsLocal(void); static void InitOverworldGraphicsRegisters(void); static u8 GetSpriteForLinkedPlayer(u8); static u16 KeyInterCB_SendNothing(u32 a1); -static void sub_80867C8(void); +static void ResetMirageTowerAndSaveBlockPtrs(void); static void sub_80867D8(void); -static void sub_8086AE4(void); -static void sub_80869DC(void); -static void sub_8086B14(void); +static void OffsetCameraFocusByLinkPlayerId(void); +static void SpawnLinkPlayers(void); static void SetCameraToTrackGuestPlayer(void); -static void sub_8086988(bool32 arg0); +static void ResumeMap(bool32 arg0); static void SetCameraToTrackPlayer(void); static void sub_8086A68(void); -static void sub_8086860(void); +static void InitViewGraphics(void); static void SetCameraToTrackGuestPlayer_2(void); static void CreateLinkPlayerSprites(void); static void ClearAllPlayerKeys(void); @@ -520,7 +520,7 @@ void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType) } } -static void mapdata_load_assets_to_gpu_and_full_redraw(void) +static void InitMapView(void) { ResetFieldCamera(); CopyMapTilesetsToVram(gMapHeader.mapLayout); @@ -939,7 +939,7 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE) return DIR_WEST; else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING) - || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER )) + || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER)) return playerStruct->direction; else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE) return playerStruct->direction; @@ -1421,7 +1421,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) { struct FieldInput inputStruct; - sub_808B578(); + UpdatePlayerAvatarTransitionState(); FieldClearPlayerInput(&inputStruct); FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); if (!ScriptContext2_IsEnabled()) @@ -1433,7 +1433,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) } else { - player_step(inputStruct.dpadDirection, newKeys, heldKeys); + PlayerStep(inputStruct.dpadDirection, newKeys, heldKeys); } } } @@ -1723,12 +1723,12 @@ void CB2_ContinueSavedGame(void) ClearContinueGameWarpStatus(); SetWarpDestinationToContinueGameWarp(); WarpIntoMap(); - sub_80EDB44(); + TryPutTodaysRivalTrainerOnAir(); SetMainCallback2(CB2_LoadMap); } else { - sub_80EDB44(); + TryPutTodaysRivalTrainerOnAir(); gFieldCallback = sub_8086204; SetMainCallback1(CB1_Overworld); CB2_ReturnToField(); @@ -1797,7 +1797,7 @@ static bool32 LoadMapInStepsLink(u8 *state) InitOverworldBgs(); ScriptContext1_Init(); ScriptContext2_Disable(); - sub_80867C8(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); (*state)++; break; @@ -1806,13 +1806,13 @@ static bool32 LoadMapInStepsLink(u8 *state) (*state)++; break; case 2: - sub_8086988(TRUE); + ResumeMap(TRUE); (*state)++; break; case 3: - sub_8086AE4(); - sub_80869DC(); - sub_8086B14(); + OffsetCameraFocusByLinkPlayerId(); + InitObjectEventsLink(); + SpawnLinkPlayers(); SetCameraToTrackGuestPlayer(); (*state)++; break; @@ -1878,16 +1878,16 @@ static bool32 LoadMapInStepsLocal(u8 *state, bool32 a2) (*state)++; break; case 1: - sub_80867C8(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); (*state)++; break; case 2: - sub_8086988(a2); + ResumeMap(a2); (*state)++; break; case 3: - mli4_mapscripts_and_other(); + InitObjectEventsLocal(); SetCameraToTrackPlayer(); (*state)++; break; @@ -1945,16 +1945,16 @@ static bool32 ReturnToFieldLocal(u8 *state) switch (*state) { case 0: - sub_80867C8(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); - sub_8086988(FALSE); + ResumeMap(FALSE); sub_8086A68(); SetCameraToTrackPlayer(); (*state)++; break; case 1: - sub_8086860(); - sub_81D64C0(); + InitViewGraphics(); + TryLoadTrainerHillEReaderPalette(); (*state)++; break; case 2: @@ -1974,12 +1974,12 @@ static bool32 ReturnToFieldLink(u8 *state) { case 0: FieldClearVBlankHBlankCallbacks(); - sub_80867C8(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); (*state)++; break; case 1: - sub_8086988(TRUE); + ResumeMap(TRUE); (*state)++; break; case 2: @@ -2050,7 +2050,7 @@ static void DoMapLoadLoop(u8 *state) while (!LoadMapInStepsLocal(state, FALSE)); } -static void sub_80867C8(void) +static void ResetMirageTowerAndSaveBlockPtrs(void) { ClearMirageTowerPulseBlend(); MoveSaveBlocks_ResetHeap(); @@ -2067,12 +2067,12 @@ static void sub_80867D8(void) LoadOam(); } -static void sub_8086860(void) +static void InitViewGraphics(void) { InitCurrentFlashLevelScanlineEffect(); InitOverworldGraphicsRegisters(); InitTextBoxGfxAndPrinters(); - mapdata_load_assets_to_gpu_and_full_redraw(); + InitMapView(); } static void InitOverworldGraphicsRegisters(void) @@ -2110,7 +2110,7 @@ static void InitOverworldGraphicsRegisters(void) InitFieldMessageBox(); } -static void sub_8086988(bool32 a1) +static void ResumeMap(bool32 a1) { ResetTasks(); ResetSpriteData(); @@ -2133,7 +2133,7 @@ static void sub_8086988(bool32 a1) TryStartMirageTowerPulseBlendEffect(); } -static void sub_80869DC(void) +static void InitObjectEventsLink(void) { gTotalCameraPixelOffsetX = 0; gTotalCameraPixelOffsetY = 0; @@ -2142,7 +2142,7 @@ static void sub_80869DC(void) TryRunOnWarpIntoMapScript(); } -static void mli4_mapscripts_and_other(void) +static void InitObjectEventsLocal(void) { s16 x, y; struct InitialPlayerAvatarState *player; @@ -2183,17 +2183,17 @@ static void SetCameraToTrackGuestPlayer_2(void) InitCameraUpdateCallback(GetSpriteForLinkedPlayer(gLocalLinkPlayerId)); } -static void sub_8086AE4(void) +static void OffsetCameraFocusByLinkPlayerId(void) { u16 x, y; GetCameraFocusCoords(&x, &y); - // This is a hack of some kind; it's undone in sub_8086B14, which is called + // This is a hack of some kind; it's undone in SpawnLinkPlayers, which is called // soon after this function. - sub_8088B3C(x + gLocalLinkPlayerId, y); + SetCameraFocusCoords(x + gLocalLinkPlayerId, y); } -static void sub_8086B14(void) +static void SpawnLinkPlayers(void) { u16 i; u16 x, y; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index d6cb498375..c5aea14d94 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -64,7 +64,7 @@ static void TrainerHillSetPlayerLost(void); static void TrainerHillGetChallengeStatus(void); static void BufferChallengeTime(void); static void GetAllFloorsUsed(void); -static void ClearVarResult(void); +static void GetInEReaderMode(void); static void IsTrainerHillChallengeActive(void); static void ShowTrainerHillPostBattleText(void); static void SetAllTrainerFlags(void); @@ -202,7 +202,7 @@ static const u16 *const *const sPrizeListSets[] = sPrizeLists2 }; -static const u16 sUnknown_0862A5D4[] = INCBIN_U16("graphics/pokenav/862A5D4.gbapal"); +static const u16 sEReader_Pal[] = INCBIN_U16("graphics/misc/trainer_hill_ereader.gbapal"); static const u8 sRecordWinColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}; static const struct TrHillTag *const sDataPerTag[] = @@ -233,7 +233,7 @@ static void (* const sHillFunctions[])(void) = [TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS] = TrainerHillGetChallengeStatus, [TRAINER_HILL_FUNC_GET_CHALLENGE_TIME] = BufferChallengeTime, [TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED] = GetAllFloorsUsed, - [TRAINER_HILL_FUNC_CLEAR_RESULT] = ClearVarResult, + [TRAINER_HILL_FUNC_GET_IN_EREADER_MODE] = GetInEReaderMode, [TRAINER_HILL_FUNC_IN_CHALLENGE] = IsTrainerHillChallengeActive, [TRAINER_HILL_FUNC_POST_BATTLE_TEXT] = ShowTrainerHillPostBattleText, [TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS] = SetAllTrainerFlags, @@ -546,10 +546,11 @@ static void GetAllFloorsUsed(void) } // May have been dummied. Every time this is called a conditional for var result occurs afterwards -static void ClearVarResult(void) +// Relation to E-Reader is an assumption, most dummied Trainer Hill code seems to be JP E-Reader mode related +static void GetInEReaderMode(void) { SetUpDataStruct(); - gSpecialVar_Result = 0; + gSpecialVar_Result = FALSE; FreeDataStruct(); } @@ -997,11 +998,11 @@ static void SetAllTrainerFlags(void) gSaveBlock2Ptr->frontier.trainerFlags = 0xFF; } -// Palette never loaded, sub_81D6534 always FALSE -void sub_81D64C0(void) +// Palette never loaded, OnTrainerHillEReaderChallengeFloor always FALSE +void TryLoadTrainerHillEReaderPalette(void) { - if (sub_81D6534() == TRUE) - LoadPalette(sUnknown_0862A5D4, 0x70, 0x20); + if (OnTrainerHillEReaderChallengeFloor() == TRUE) + LoadPalette(sEReader_Pal, 0x70, 0x20); } static void GetGameSaved(void) @@ -1020,13 +1021,13 @@ static void ClearGameSaved(void) } // Always FALSE -bool32 sub_81D6534(void) +bool32 OnTrainerHillEReaderChallengeFloor(void) { if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == TRAINER_HILL_ENTRANCE) return FALSE; - ClearVarResult(); - if (gSpecialVar_Result == 0) + GetInEReaderMode(); + if (gSpecialVar_Result == FALSE) return FALSE; else return TRUE; diff --git a/src/trainer_see.c b/src/trainer_see.c index 68a16e208b..4f4aaea08a 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -559,7 +559,7 @@ static bool8 PopOutOfAshHiddenTrainer(u8 taskId, struct Task *task, struct Objec gFieldEffectArguments[1] = trainerObj->currentCoords.y; gFieldEffectArguments[2] = gSprites[trainerObj->spriteId].subpriority - 1; gFieldEffectArguments[3] = 2; - task->tOutOfAshSpriteId = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->tOutOfAshSpriteId = FieldEffectStart(FLDEFF_ASH_PUFF); task->tFuncId++; } return FALSE; @@ -586,7 +586,7 @@ static bool8 JumpInPlaceHiddenTrainer(u8 taskId, struct Task *task, struct Objec static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) { - if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) + if (!FieldEffectActiveListContains(FLDEFF_ASH_PUFF)) task->tFuncId = 3; return FALSE; @@ -610,7 +610,7 @@ static void sub_80B44C8(u8 taskId) task->data[7]++; } sTrainerSeeFuncList2[task->data[0]](taskId, task, objEvent); - if (task->data[0] == 3 && !FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) + if (task->data[0] == 3 && !FieldEffectActiveListContains(FLDEFF_ASH_PUFF)) { SetTrainerMovementType(objEvent, GetTrainerFacingDirectionMovementType(objEvent->facingDirection)); TryOverrideTemplateCoordsForObjectEvent(objEvent, GetTrainerFacingDirectionMovementType(objEvent->facingDirection)); diff --git a/src/tv.c b/src/tv.c index eaf30f82b8..17a02be6b9 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1930,7 +1930,7 @@ void sub_80EDA80(void) } } -void sub_80EDB44(void) +void TryPutTodaysRivalTrainerOnAir(void) { TVShow *show; u32 i; From eb80012757b664a474f3c745115aa4f109b69443 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 29 Jun 2020 11:41:09 -0400 Subject: [PATCH 03/85] Document more misc field effects --- data/field_effect_scripts.s | 20 +- data/scripts/field_move_scripts.inc | 6 +- .../palettes/record_mix_lights.pal} | 0 .../field_effects/pics/record_mix_lights.png | Bin 0 -> 199 bytes graphics/field_effects/pics/sand_pillar.png | Bin 0 -> 673 bytes .../pics/sand_pillar}/0.png | Bin .../pics/sand_pillar}/1.png | Bin .../pics/sand_pillar}/2.png | Bin .../field_effects/pics/secret_power_cave.png | Bin 0 -> 356 bytes .../field_effects/pics/secret_power_shrub.png | Bin 0 -> 270 bytes .../field_effects/pics/secret_power_tree.png | Bin 0 -> 304 bytes graphics/unknown/858E588/0.png | Bin 145 -> 0 bytes graphics/unknown/858E588/1.png | Bin 149 -> 0 bytes graphics/unknown/858E588/2.png | Bin 138 -> 0 bytes graphics/unknown/858E588/3.png | Bin 133 -> 0 bytes graphics/unknown/858E588/4.png | Bin 114 -> 0 bytes graphics/unknown/858E5B0/0.png | Bin 89 -> 0 bytes graphics/unknown/858E5B0/1.png | Bin 109 -> 0 bytes graphics/unknown/858E5B0/2.png | Bin 119 -> 0 bytes graphics/unknown/858E5B0/3.png | Bin 123 -> 0 bytes graphics/unknown/858E5B0/4.png | Bin 129 -> 0 bytes graphics/unknown/858E5B0/5.png | Bin 126 -> 0 bytes graphics/unknown/858E5D8/0.png | Bin 87 -> 0 bytes graphics/unknown/858E5D8/1.png | Bin 116 -> 0 bytes graphics/unknown/858E5D8/2.png | Bin 131 -> 0 bytes graphics/unknown/858E5D8/3.png | Bin 115 -> 0 bytes graphics/unknown/858E5D8/4.png | Bin 92 -> 0 bytes graphics/unknown/858E84C/0.png | Bin 103 -> 0 bytes graphics/unknown/858E84C/1.png | Bin 107 -> 0 bytes graphics/unknown/858E84C/2.png | Bin 107 -> 0 bytes include/event_scripts.h | 2 +- include/fldeff_misc.h | 22 +- spritesheet_rules.mk | 15 + src/field_effect.c | 52 +- src/fieldmap.c | 2 +- src/fldeff_cut.c | 158 +++--- src/fldeff_misc.c | 515 +++++++++--------- src/fldeff_rocksmash.c | 46 +- src/hall_of_fame.c | 8 +- src/pokemon_storage_system.c | 12 +- src/record_mixing.c | 4 +- 41 files changed, 446 insertions(+), 416 deletions(-) rename graphics/{unknown/unknown_58E82C.pal => field_effects/palettes/record_mix_lights.pal} (100%) create mode 100644 graphics/field_effects/pics/record_mix_lights.png create mode 100644 graphics/field_effects/pics/sand_pillar.png rename graphics/{unknown/858E674 => field_effects/pics/sand_pillar}/0.png (100%) rename graphics/{unknown/858E674 => field_effects/pics/sand_pillar}/1.png (100%) rename graphics/{unknown/858E674 => field_effects/pics/sand_pillar}/2.png (100%) create mode 100644 graphics/field_effects/pics/secret_power_cave.png create mode 100644 graphics/field_effects/pics/secret_power_shrub.png create mode 100644 graphics/field_effects/pics/secret_power_tree.png delete mode 100644 graphics/unknown/858E588/0.png delete mode 100644 graphics/unknown/858E588/1.png delete mode 100644 graphics/unknown/858E588/2.png delete mode 100644 graphics/unknown/858E588/3.png delete mode 100644 graphics/unknown/858E588/4.png delete mode 100644 graphics/unknown/858E5B0/0.png delete mode 100644 graphics/unknown/858E5B0/1.png delete mode 100644 graphics/unknown/858E5B0/2.png delete mode 100644 graphics/unknown/858E5B0/3.png delete mode 100644 graphics/unknown/858E5B0/4.png delete mode 100644 graphics/unknown/858E5B0/5.png delete mode 100644 graphics/unknown/858E5D8/0.png delete mode 100644 graphics/unknown/858E5D8/1.png delete mode 100644 graphics/unknown/858E5D8/2.png delete mode 100644 graphics/unknown/858E5D8/3.png delete mode 100644 graphics/unknown/858E5D8/4.png delete mode 100644 graphics/unknown/858E84C/0.png delete mode 100644 graphics/unknown/858E84C/1.png delete mode 100644 graphics/unknown/858E84C/2.png diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 6850154d30..23b1841224 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -52,8 +52,8 @@ gFieldEffectScriptPointers:: @ 82DB9D4 .4byte gFieldEffectScript_UseDive @ FLDEFF_USE_DIVE .4byte gFieldEffectScript_Pokeball @ FLDEFF_POKEBALL .4byte gFieldEffectScript_HeartIcon @ FLDEFF_HEART_ICON - .4byte gFieldEffectScript_Unknown47 @ FLDEFF_NOP_47 - .4byte gFieldEffectScript_Unknown48 @ FLDEFF_NOP_48 + .4byte gFieldEffectScript_Nop47 @ FLDEFF_NOP_47 + .4byte gFieldEffectScript_Nop48 @ FLDEFF_NOP_48 .4byte gFieldEffectScript_AshPuff @ FLDEFF_ASH_PUFF .4byte gFieldEffectScript_AshLaunch @ FLDEFF_ASH_LAUNCH .4byte gFieldEffectScript_SweetScent @ FLDEFF_SWEET_SCENT @@ -263,12 +263,12 @@ gFieldEffectScript_HeartIcon:: @ 82DBC56 field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_HeartIcon field_eff_end -gFieldEffectScript_Unknown47:: @ 82DBC60 - field_eff_callnative FldEff_NopA6FC +gFieldEffectScript_Nop47:: @ 82DBC60 + field_eff_callnative FldEff_Nop47 field_eff_end -gFieldEffectScript_Unknown48:: @ 82DBC66 - field_eff_callnative FldEff_NopA700 +gFieldEffectScript_Nop48:: @ 82DBC66 + field_eff_callnative FldEff_Nop48 field_eff_end gFieldEffectScript_AshPuff:: @ 82DBC6C @@ -284,7 +284,7 @@ gFieldEffectScript_SweetScent:: @ 82DBC80 field_eff_end gFieldEffectScript_SandPillar:: @ 82DBC86 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo9, FldEff_SandPillar + field_eff_loadfadedpal_callnative gSpritePalette_SandPillar, FldEff_SandPillar field_eff_end gFieldEffectScript_Bubbles:: @ 82DBC90 @@ -296,15 +296,15 @@ gFieldEffectScript_Sparkle:: @ 82DBC9A field_eff_end gFieldEffectScript_ShowSecretPowerCave:: @ 82DBCA4 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo7, FldEff_SecretPowerCave + field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Cave, FldEff_SecretPowerCave field_eff_end gFieldEffectScript_ShowSecretPowerTree:: @ 82DBCAE - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo8, FldEff_SecretPowerTree + field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Plant, FldEff_SecretPowerTree field_eff_end gFieldEffectScript_ShowSecretPowerShrub:: @ 82DBCB8 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo8, FldEff_SecretPowerShrub + field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Plant, FldEff_SecretPowerShrub field_eff_end gFieldEffectScript_ShowCutGrass:: @ 82DBCC2 diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 56e3297b6e..c5647daa42 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -77,7 +77,7 @@ EventScript_RockSmash:: @ 82907A6 goto EventScript_SmashRock end -EventScript_FldEffRockSmash:: @ 82907F0 +EventScript_RockSmashFromPartyMenu:: @ 82907F0 lockall dofieldeffect FLDEFF_USE_ROCK_SMASH waitstate @@ -89,10 +89,10 @@ EventScript_SmashRock:: @ 82907FB waitmovement 0 removeobject VAR_LAST_TALKED specialvar VAR_RESULT, TryUpdateRusturfTunnelState - compare VAR_RESULT, 1 + compare VAR_RESULT, TRUE goto_if_eq EventScript_EndSmash special RockSmashWildEncounter - compare VAR_RESULT, 0 + compare VAR_RESULT, FALSE goto_if_eq EventScript_EndSmash waitstate releaseall diff --git a/graphics/unknown/unknown_58E82C.pal b/graphics/field_effects/palettes/record_mix_lights.pal similarity index 100% rename from graphics/unknown/unknown_58E82C.pal rename to graphics/field_effects/palettes/record_mix_lights.pal diff --git a/graphics/field_effects/pics/record_mix_lights.png b/graphics/field_effects/pics/record_mix_lights.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d3d65376b42abc4ca368667ec6377615c8c2c2 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^2|&!j!VDz82tKy~QU(D&A+A9BKMel|u?T=uvo2)= zl>~XZIEF|}-P+&HdBA|fB|eCKg3kkvZ6yo~f4{#{+&WE0<~e&M$M2_%%jP_pF;`Dq zxk~-^BZUni#kJ0Jm|pCNn`~{CVK?= zGB8xBF)%c=FfjZA3N^f7U?>G@e3ih!U^Rn*LA+qju0R{0glK?Ih-=W6pe;+1ii?Y{ z9_^me>=+aj^#A|=(qczXpaRAuZ+92A#Izl?Kn{C}r>`sf6E<04YeviG-hn_Nf#gKL zG7t^K3P217sRx*^0=4FPx;TbtoL@W9vFNq|kE>(%O>U;m+t-xDi&!y4Hvc|zW8eSK zUyhcKPx?$d+9o7t_kmOB@BN5#_RI9u{~CMznrDAf>Dzbp1z9!>XYU_STl6+yN#nj2 z`Lvj6T`9|UUh@8>cxDgNl5{)UleZ?sXLIzus`+B2dq#WQZd+rwX!-Bb{l`5gdsh5u)zV*^e{^>B>&i{Xepz4qwZnSd4fDEN=WYc|=A4?N z6JSuLTsv>Wu16vauWL1*-Q8j$U#2TG+vr+PSnJM~x4uVH_*-W<{uJBA7;)v;2klw) zjkXMTRvzOqyjFKu|8SW`4!^6g^Y6Oksh8L;B>#B$>MxuAj_cJs9z}R=ITU_=#WDS~ z9q!B4pJo0!%h=|sPr=0p&pzw6^xA*ilJN0gzu@}GMaMQ@w*MjL`?fsAbptR4R7+eV zN>UO_QmvAUQh^kMk%5tcu7R1Zk!6UXrIoRnm5H&ofq|8Q!Q#VG?kE~^^HVa@DsgML TG;h&wP#k-@`njxgN@xNAt-cCp literal 0 HcmV?d00001 diff --git a/graphics/unknown/858E674/0.png b/graphics/field_effects/pics/sand_pillar/0.png similarity index 100% rename from graphics/unknown/858E674/0.png rename to graphics/field_effects/pics/sand_pillar/0.png diff --git a/graphics/unknown/858E674/1.png b/graphics/field_effects/pics/sand_pillar/1.png similarity index 100% rename from graphics/unknown/858E674/1.png rename to graphics/field_effects/pics/sand_pillar/1.png diff --git a/graphics/unknown/858E674/2.png b/graphics/field_effects/pics/sand_pillar/2.png similarity index 100% rename from graphics/unknown/858E674/2.png rename to graphics/field_effects/pics/sand_pillar/2.png diff --git a/graphics/field_effects/pics/secret_power_cave.png b/graphics/field_effects/pics/secret_power_cave.png new file mode 100644 index 0000000000000000000000000000000000000000..445b275f300cd86e19bc0a5281d80d5f2c7bec4e GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0YEIk!VDyf)1Q6Bpyk-LdwgKLN{OVhyd!HEnBaWeJvTZ`HYXpEcrJ+H&)hmH&H_V$J&sAMaKD{kr?p zq*p)A?b;s1&rxwRs#vrszS+*_pu(PwPTLM`ILBLb_53yC^w%q+7HOTIVkrE?NO05D z8Hc-VLmXI+IP|yVn10QE+q*I(YQ+_)J%VD|X0@01%}(}}6%<}Ob*8|iP;VaBG*Qm}UzSiEz=;*rcKg=IiRIl}sZp;CNjHj!g%Q~loCIFCyn<4-J literal 0 HcmV?d00001 diff --git a/graphics/field_effects/pics/secret_power_shrub.png b/graphics/field_effects/pics/secret_power_shrub.png new file mode 100644 index 0000000000000000000000000000000000000000..322643372a4ec02c4b0804a1fa6561ada6cf6b76 GIT binary patch literal 270 zcmV+p0rCEcP)YrKHLi?DJl76xx?X$uPC?oY5lejmRA{7Y&n>#YG- zr{!Q_+Ig31*68umulaPy?x=ilTE328F!PBlM%M~bBN)jJ)JEu5N&@Gc{Vo@;lmrNz zGf~vy{3|6HEyurS9=x<{h0*f}WHy@Wm|9BYqcQ)hreuWbA){N~#zPTa^?nO`FZpK> UAvOx@od5s;07*qoM6N<$g6!9EEdT%j literal 0 HcmV?d00001 diff --git a/graphics/field_effects/pics/secret_power_tree.png b/graphics/field_effects/pics/secret_power_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..8797417842783731f93bccd3156fdc2b4aa28c68 GIT binary patch literal 304 zcmV-00nh%4P)7s{egOP-q1F5Rs#ZHlGLzzi16Vy30PryLP{Ic3SS;;UGl0z?Jxi>W zrKEY{1rlpk;&8s9bpoC!&4b#y9#&PR`E7zSz{LP$>PtTXCn>bmmH9FKa*B4hjZh5o zN};=X96@oLOG`C73&m>y5tdvb?*1!WG2Q*&*d;$mlOO255tn8F0000}T8YKf!gSbLpe63Mb23PM_HN(C(#q>dwqKzmrZTYdLaRxQq*g_L?0D s+^Tt1F+<=oZ!6E6-8WT#eQ(-d!N9pE=5V`D#6^%@p00i_>zopr0DJg08vpW6usqBG_N?~Pd@tEzHP xA}O(*tNf$Ej>5%86DPZv;6;cBD>&=$T=H6+yPn2;OXk;vd$@?2>`ffIQ;+s diff --git a/graphics/unknown/858E588/2.png b/graphics/unknown/858E588/2.png deleted file mode 100644 index c006bb660962272d5b22f42aaf35aa9157e5ed8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExfu1goAsjPnPZ{zx81OJ3_`@>M zZh=tZ`3rA;{x_fWW|@Pzip|^{;jkC-eV4AL)K8qh*=_~n6<*_3%N02u^Vm*xW*DjG lxo=SM{1A7iRcO!7<#9Z-lQyN~%l-yg;_2$=vd$@?2>^v&F$e$v diff --git a/graphics/unknown/858E588/3.png b/graphics/unknown/858E588/3.png deleted file mode 100644 index 67a3cf76900d5b9e3969ee2e94e7bc197a356a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExKAtX)AsjQ4fAF*NEHQdxxYX`{ zd0VH%-}DcA`KRux{{CL{|NifdJ=WFlE$;8Fp8xR7JLBcK@8<12{NeYRyLXqLe`k62 i!_8kk-`?Fl^^GBPX5oRhO&8XK%=dKlb6Mw<&;$UcMLY@s diff --git a/graphics/unknown/858E588/4.png b/graphics/unknown/858E588/4.png deleted file mode 100644 index e2a5aec4fbc57c3fa1c826d5ba60d8d4b1af9856..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExmYyz-AsjQ;c3k9SP~v4-nZ!(IX@j%n97R5#--8VE MboFyt=akR{01b^LMF0Q* diff --git a/graphics/unknown/858E5B0/0.png b/graphics/unknown/858E5B0/0.png deleted file mode 100644 index afd104d7ca67c876327122032566e81dfd84e429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx3Z5>GAsjQ4fAF*H{{H{}d4?tR l?|1X2zG*dj5R~A+&c^VqtajP_^v4b$J)W+9F6*2Ung9T}8?68U diff --git a/graphics/unknown/858E5B0/1.png b/graphics/unknown/858E5B0/1.png deleted file mode 100644 index 026b9b7afe1b01bd05528f1e44a04cf054c50148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExCY~;iAsjQ4fBgUd|NVW3CdQ8P z_iYAs^KbGezOno(f9l46dEY1Btyj#tU;h2@7U!i34K{2H758hnO5PV}gUs=C^>bP0 Hl+XkKa49HV diff --git a/graphics/unknown/858E5B0/2.png b/graphics/unknown/858E5B0/2.png deleted file mode 100644 index 360e2ab63e655b5c4e37d564eca2f5b58dc37dd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExcAhSdAsjQ4fBgUd|NVW3CdQ8P z_w5FC^Z)gqvtXY3Yd`xjhSQA_|G&R;PyVxyJM~R9Z|LUlW R`TQD?iJq>0F6*2UngCA@E}8%U diff --git a/graphics/unknown/858E5B0/3.png b/graphics/unknown/858E5B0/3.png deleted file mode 100644 index 88672c182463cab3c4f460b6a28e713ee5e5f9ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExPM$7~AsjPpPoLyvP~>5D_?54@ zCWs+`@s?PI0)O$%CyBi|s*D{G6U}@w{6x%t9@JkXbgfWe?t$k`oX+v~jK1IH)ZC_3 UNq&;ZNdTGZ>FVdQ&MBb@0E0{Kb)%E-UJ*m;Ea6{vytzVwS0)s<68T@ Yj1vFKtVI7${sS`D)78&qol`;+0QOKSs{jB1 diff --git a/graphics/unknown/858E5D8/0.png b/graphics/unknown/858E5D8/0.png deleted file mode 100644 index 110b1dd0a50dd8335d7b088e22c7641a824a2945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExa-J@ZAsjQ4fAF*Nv`Fk<(3Af& j!0lF*hH|&WTNfh+?H#qLmmRGHK{`BL{an^LB{Ts5Q!*D0 diff --git a/graphics/unknown/858E5D8/1.png b/graphics/unknown/858E5D8/1.png deleted file mode 100644 index f50079de7f4ea6efe4bf84cac1e8ce51e9cfd692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx)}AhoAsjQ4fAF*N{E(=>?<`sW z?%reLu37T+ z|NXZ7X*H+qnWtI()_VK@|8|FC^Q%w)`@fs{>euHs9gLTl!+0(+r!{<;Q_FAq^SteZ eS=KMI6c`vf{i<#qH}^^bneOT8=d#Wzp$Py2XE5^s diff --git a/graphics/unknown/858E5D8/3.png b/graphics/unknown/858E5D8/3.png deleted file mode 100644 index 0ea6e43c96ecf571dcd7d06edad1637404b02236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExR-P`7AsjQ4fAF*N+>reL&RH`5 zyt8Ebf}q!lS^FA88kb&bSS8`GC-rB#Ls0(t|EJhjTQY~W9_A8ZV>tPw+U@^;``;kb NJYD@<);T3K0RU#NCp-WE diff --git a/graphics/unknown/858E5D8/4.png b/graphics/unknown/858E5D8/4.png deleted file mode 100644 index 4b4e300bb70c593b700504e5e6c1aa568f6c7092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx%APKcAsjQ4fAF*Nm?Zw$&78W& owqL3Ao9&d3&*dTnUAR_oFdUYs^VeEhXAjcm>FVdQ&MBb@0MtAf@Bjb+ diff --git a/graphics/unknown/858E84C/0.png b/graphics/unknown/858E84C/0.png deleted file mode 100644 index 4673403e0349211ac4ae5d8064b66a773f39caa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-k0wfqJZYgTMd(|31I}fA?J;CnkpO=(@nk8a){x6Fgo0T-G@yGywoa CVI}JT diff --git a/graphics/unknown/858E84C/1.png b/graphics/unknown/858E84C/1.png deleted file mode 100644 index c55f2146d54f5e0f5b8a1c6aa12b914a0fd92f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-k0wfqJ4V+hC0B8&@i*FfbHJ)V^C@CtwaT#naW#Wt~$( F699bhE2;nh diff --git a/graphics/unknown/858E84C/2.png b/graphics/unknown/858E84C/2.png deleted file mode 100644 index 4f03b50ae96a69b3c5fe1401e33c4f7edd93aad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-k0wfqJ4V+hC0data[11] = REG_WININ; task->data[12] = REG_WINOUT; StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); - task->tWinHoriz = WIN_RANGE(240, 241); - task->tWinVert = WIN_RANGE(80, 81); + task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); + task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; task->tWinOut = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; SetGpuReg(REG_OFFSET_WIN0H, task->tWinHoriz); @@ -2637,15 +2637,15 @@ static void FieldMoveShowMonOutdoorsEffect_CreateBanner(struct Task *task) if (horiz < 0) horiz = 0; - if (vertHi < 40) - vertHi = 40; + if (vertHi < DISPLAY_HEIGHT / 4) + vertHi = DISPLAY_HEIGHT / 4; - if (vertLo > 120) - vertLo = 120; + if (vertLo > DISPLAY_WIDTH / 2) + vertLo = DISPLAY_WIDTH / 2; task->tWinHoriz = (horiz << 8) | (task->tWinHoriz & 0xff); task->tWinVert = (vertHi << 8) | vertLo; - if (horiz == 0 && vertHi == 40 && vertLo == 120) + if (horiz == 0 && vertHi == DISPLAY_HEIGHT / 4 && vertLo == DISPLAY_WIDTH / 2) { gSprites[task->tMonSpriteId].callback = SpriteCB_FieldMoveMonSlideOnscreen; task->tState++; @@ -2670,15 +2670,15 @@ static void FieldMoveShowMonOutdoorsEffect_ShrinkBanner(struct Task *task) vertHi += 6; vertLo -= 6; - if (vertHi > 80) - vertHi = 80; + if (vertHi > DISPLAY_HEIGHT / 2) + vertHi = DISPLAY_HEIGHT / 2; - if (vertLo < 81) - vertLo = 81; + if (vertLo < DISPLAY_HEIGHT / 2 + 1) + vertLo = DISPLAY_HEIGHT / 2 + 1; task->tWinVert = (vertHi << 8) | vertLo; - if (vertHi == 80 && vertLo == 81) + if (vertHi == DISPLAY_HEIGHT / 2 && vertLo == DISPLAY_HEIGHT / 2 + 1) task->tState++; } @@ -2686,8 +2686,8 @@ static void FieldMoveShowMonOutdoorsEffect_RestoreBg(struct Task *task) { u16 bg0cnt = (REG_BG0CNT >> 8) << 11; CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); - task->tWinHoriz = 241; - task->tWinVert = 161; + task->tWinHoriz = DISPLAY_WIDTH + 1; + task->tWinVert = DISPLAY_HEIGHT + 1; task->tWinIn = task->data[11]; task->tWinOut = task->data[12]; task->tState++; @@ -2787,8 +2787,8 @@ static void FieldMoveShowMonIndoorsEffect_SlideBannerOn(struct Task *task) { if (SlideIndoorBannerOnscreen(task)) { - SetGpuReg(REG_OFFSET_WIN1H, 0x00f0); - SetGpuReg(REG_OFFSET_WIN1V, 0x2878); + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0, DISPLAY_WIDTH)); + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(DISPLAY_HEIGHT / 4, DISPLAY_HEIGHT - DISPLAY_HEIGHT / 4)); gSprites[task->tMonSpriteId].callback = SpriteCB_FieldMoveMonSlideOnscreen; task->tState++; } @@ -2807,8 +2807,8 @@ static void FieldMoveShowMonIndoorsEffect_RestoreBg(struct Task *task) AnimateIndoorShowMonBg(task); task->tBgOffsetIdx = task->tBgHoriz & 7; task->tBgOffset = 0; - SetGpuReg(REG_OFFSET_WIN1H, 0xffff); - SetGpuReg(REG_OFFSET_WIN1V, 0xffff); + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0xFF, 0xFF)); + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0xFF, 0xFF)); task->tState++; } @@ -2917,7 +2917,7 @@ static u8 InitFieldMoveMonSprite(u32 species, u32 otId, u32 personality) struct Sprite *sprite; v0 = (species & 0x80000000) >> 16; species &= 0x7fffffff; - monSprite = CreateMonSprite_FieldMove(species, otId, personality, 0x140, 0x50, 0); + monSprite = CreateMonSprite_FieldMove(species, otId, personality, 320, 80, 0); sprite = &gSprites[monSprite]; sprite->callback = SpriteCallbackDummy; sprite->oam.priority = 0; @@ -2928,9 +2928,9 @@ static u8 InitFieldMoveMonSprite(u32 species, u32 otId, u32 personality) static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *sprite) { - if ((sprite->pos1.x -= 20) <= 120) + if ((sprite->pos1.x -= 20) <= DISPLAY_WIDTH / 2) { - sprite->pos1.x = 120; + sprite->pos1.x = DISPLAY_WIDTH / 2; sprite->sOnscreenTimer = 30; sprite->callback = SpriteCB_FieldMoveMonWaitAfterCry; if (sprite->data[6]) @@ -2947,21 +2947,15 @@ static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *sprite) static void SpriteCB_FieldMoveMonWaitAfterCry(struct Sprite *sprite) { if ((--sprite->sOnscreenTimer) == 0) - { sprite->callback = SpriteCB_FieldMoveMonSlideOffscreen; - } } static void SpriteCB_FieldMoveMonSlideOffscreen(struct Sprite *sprite) { if (sprite->pos1.x < -64) - { sprite->sSlidOffscreen = TRUE; - } else - { sprite->pos1.x -= 20; - } } #undef tState @@ -3311,7 +3305,7 @@ static void StartFlyBirdSwoopDown(u8 spriteId) struct Sprite *sprite; sprite = &gSprites[spriteId]; sprite->callback = SpriteCB_FlyBirdSwoopDown; - sprite->pos1.x = 120; + sprite->pos1.x = DISPLAY_WIDTH / 2; sprite->pos1.y = 0; sprite->pos2.x = 0; sprite->pos2.y = 0; diff --git a/src/fieldmap.c b/src/fieldmap.c index 5eb00ad270..8e45add3f6 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -939,7 +939,7 @@ static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, else mapMetatilePtr += mapWidth; - if (sub_80FADE4(*mapMetatilePtr & METATILE_ID_MASK, yMode) == 1) + if (IsLargeBreakableDecoration(*mapMetatilePtr & METATILE_ID_MASK, yMode) == TRUE) return TRUE; return FALSE; } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 2c9151598e..efd533d083 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -355,36 +355,36 @@ static void SetCutGrassMetatile(s16 x, s16 y) switch (metatileId) { - case METATILE_ID(Fortree, LongGrass_Root): - case METATILE_ID(General, LongGrass): - case METATILE_ID(General, TallGrass): - MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass)); + case METATILE_Fortree_LongGrass_Root: + case METATILE_General_LongGrass: + case METATILE_General_TallGrass: + MapGridSetMetatileIdAt(x, y, METATILE_General_Grass); break; - case METATILE_ID(General, TallGrass_TreeLeft): - MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeLeft)); + case METATILE_General_TallGrass_TreeLeft: + MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeLeft); break; - case METATILE_ID(General, TallGrass_TreeRight): - MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeRight)); + case METATILE_General_TallGrass_TreeRight: + MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeRight); break; - case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); + case METATILE_Fortree_SecretBase_LongGrass_BottomLeft: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopLeft); break; - case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); + case METATILE_Fortree_SecretBase_LongGrass_BottomMid: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopMid); break; - case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); + case METATILE_Fortree_SecretBase_LongGrass_BottomRight: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopRight); break; - case METATILE_ID(Lavaridge, NormalGrass): - case METATILE_ID(Lavaridge, AshGrass): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Lavaridge, LavaField)); + case METATILE_Lavaridge_NormalGrass: + case METATILE_Lavaridge_AshGrass: + MapGridSetMetatileIdAt(x, y, METATILE_Lavaridge_LavaField); break; - case METATILE_ID(Fallarbor, NormalGrass): - case METATILE_ID(Fallarbor, AshGrass): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fallarbor, AshField)); + case METATILE_Fallarbor_NormalGrass: + case METATILE_Fallarbor_AshGrass: + MapGridSetMetatileIdAt(x, y, METATILE_Fallarbor_AshField); break; - case METATILE_ID(General, TallGrass_TreeUp): - MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeUp)); + case METATILE_General_TallGrass_TreeUp: + MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeUp); break; } } @@ -402,13 +402,13 @@ static u8 GetLongGrassCaseAt(s16 x, s16 y) { u16 metatileId = MapGridGetMetatileIdAt(x, y); - if (metatileId == METATILE_ID(General, Grass)) + if (metatileId == METATILE_General_Grass) return LONG_GRASS_FIELD; - else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)) + else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopLeft) return LONG_GRASS_BASE_LEFT; - else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)) + else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopMid) return LONG_GRASS_BASE_CENTER; - else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)) + else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopRight) return LONG_GRASS_BASE_RIGHT; else return LONG_GRASS_NONE; @@ -422,34 +422,34 @@ static void SetCutGrassMetatiles(s16 x, s16 y) for (i = 0; i < sCutSquareSide; i++) { s16 currentX = x + i; - if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID(General, LongGrass)) + if (MapGridGetMetatileIdAt(currentX, y) == METATILE_General_LongGrass) { switch (GetLongGrassCaseAt(currentX, y + 1)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, LongGrass_Root)); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_LongGrass_Root); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomLeft); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomMid); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomRight); break; } } - if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID(General, Grass)) + if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_General_Grass) { - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, LongGrass_Root)) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(General, Grass)); - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_LongGrass_Root) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_General_Grass); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopLeft); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomMid) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopMid); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomRight) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopRight); } } @@ -486,62 +486,62 @@ static void HandleLongGrassOnHyper(u8 caseId, s16 x, s16 y) if (arr[0] == TRUE) { - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, LongGrass_Root)) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(General, Grass)); - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_LongGrass_Root) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_General_Grass); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopLeft); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomMid) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopMid); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomRight) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopRight); } if (arr[1] == TRUE) { - if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID(General, LongGrass)) + if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_General_LongGrass) { switch (GetLongGrassCaseAt(newX, y + 3)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, LongGrass_Root)); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_LongGrass_Root); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomLeft); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomMid); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomRight); break; } } - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, LongGrass_Root)) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(General, Grass)); - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_LongGrass_Root) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_General_Grass); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopLeft); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomMid) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopMid); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomRight) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopRight); } if (arr[2] == TRUE) { - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(General, LongGrass)) + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_General_LongGrass) { switch (GetLongGrassCaseAt(newX, y + 4)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, LongGrass_Root)); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_LongGrass_Root); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomLeft); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomMid); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomRight); break; } } @@ -595,16 +595,16 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y) switch (GetLongGrassCaseAt(x, y + 1)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, LongGrass_Root)); + MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_LongGrass_Root); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); + MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomLeft); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); + MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomMid); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); + MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomRight); break; } } @@ -612,7 +612,7 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y) void FixLongGrassMetatilesWindowBottom(s16 x, s16 y) { - if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(General, Grass)) + if (MapGridGetMetatileIdAt(x, y) == METATILE_General_Grass) { u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y + 1); if (MetatileBehavior_IsLongGrassSouthEdge(metatileBehavior)) @@ -620,17 +620,17 @@ void FixLongGrassMetatilesWindowBottom(s16 x, s16 y) s32 metatileId = MapGridGetMetatileIdAt(x, y + 1); switch (metatileId) { - case METATILE_ID(Fortree, LongGrass_Root): - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(General, Grass)); + case METATILE_Fortree_LongGrass_Root: + MapGridSetMetatileIdAt(x, y + 1, METATILE_General_Grass); break; - case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft): - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); + case METATILE_Fortree_SecretBase_LongGrass_BottomLeft: + MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopLeft); break; - case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid): - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); + case METATILE_Fortree_SecretBase_LongGrass_BottomMid: + MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopMid); break; - case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight): - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); + case METATILE_Fortree_SecretBase_LongGrass_BottomRight: + MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopRight); break; } } diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index bb5bd65d76..50feaf3686 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -28,68 +28,54 @@ EWRAM_DATA struct MapPosition gPlayerFacingPosition = {0}; -static void sub_80F9C90(u8); -static void sub_80F9DFC(u8); +static void Task_ComputerScreenOpenEffect(u8); +static void Task_ComputerScreenCloseEffect(u8); +static void CreateComputerScreenEffectTask(TaskFunc, u16, u16, u8); static void Task_SecretBasePCTurnOn(u8); static void Task_PopSecretBaseBalloon(u8); static void DoBalloonSoundEffect(s16); -static void Task_WateringBerryTreeAnim_1(u8); -static void Task_WateringBerryTreeAnim_2(u8); -static void Task_WateringBerryTreeAnim_3(u8); - -static void sub_80F9C44(TaskFunc, u16, u16, u8); +static void Task_WateringBerryTreeAnim_Start(u8); +static void Task_WateringBerryTreeAnim_Continue(u8); +static void Task_WateringBerryTreeAnim_End(u8); static void FieldCallback_SecretBaseCave(void); -static void CaveEntranceSpriteCallback1(struct Sprite *); -static void CaveEntranceSpriteCallback2(struct Sprite *); -static void CaveEntranceSpriteCallbackEnd(struct Sprite *); +static void SpriteCB_CaveEntranceInit(struct Sprite *); +static void SpriteCB_CaveEntranceOpen(struct Sprite *); +static void SpriteCB_CaveEntranceEnd(struct Sprite *); static void StartSecretBaseCaveFieldEffect(void); static void FieldCallback_SecretBaseTree(void); -static void TreeEntranceSpriteCallback1(struct Sprite *); -static void TreeEntranceSpriteCallback2(struct Sprite *); -static void TreeEntranceSpriteCallbackEnd(struct Sprite *); +static void SpriteCB_TreeEntranceInit(struct Sprite *); +static void SpriteCB_TreeEntranceOpen(struct Sprite *); +static void SpriteCB_TreeEntranceEnd(struct Sprite *); static void StartSecretBaseTreeFieldEffect(void); static void FieldCallback_SecretBaseShrub(void); -static void ShrubEntranceSpriteCallback1(struct Sprite *); -static void ShrubEntranceSpriteCallback2(struct Sprite *); -static void ShrubEntranceSpriteCallbackEnd(struct Sprite *); +static void SpriteCB_ShrubEntranceInit(struct Sprite *); +static void SpriteCB_ShrubEntranceOpen(struct Sprite *); +static void SpriteCB_ShrubEntranceEnd(struct Sprite *); static void StartSecretBaseShrubFieldEffect(void); -static void SpriteCB_SandPillar_0(struct Sprite *); -static void SpriteCB_SandPillar_1(struct Sprite *); -static void SpriteCB_SandPillar_2(struct Sprite *); +static void SpriteCB_SandPillar_BreakTop(struct Sprite *); +static void SpriteCB_SandPillar_BreakBase(struct Sprite *); +static void SpriteCB_SandPillar_End(struct Sprite *); -static const u8 gSpriteImage_858D978[] = INCBIN_U8("graphics/unknown/858E588/0.4bpp"); -static const u8 gSpriteImage_858D9F8[] = INCBIN_U8("graphics/unknown/858E588/1.4bpp"); -static const u8 gSpriteImage_858DA78[] = INCBIN_U8("graphics/unknown/858E588/2.4bpp"); -static const u8 gSpriteImage_858DAF8[] = INCBIN_U8("graphics/unknown/858E588/3.4bpp"); -static const u8 gSpriteImage_858DB78[] = INCBIN_U8("graphics/unknown/858E588/4.4bpp"); +static const u8 sSecretPowerCave_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_cave.4bpp"); +static const u8 sFiller[32] = {0}; +static const u16 sSecretPowerCave_Pal[] = INCBIN_U16("graphics/field_effects/palettes/07.gbapal"); +static const u8 sSecretPowerShrub_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_shrub.4bpp"); +static const u8 sSecretPowerTree_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_tree.4bpp"); +static const u16 sSecretPowerPlant_Pal[] = INCBIN_U16("graphics/field_effects/palettes/08.gbapal"); -static const u8 gUnusedEmptySpace_858DBF8[32] = {0}; +// TODO: These should also be combined into a single image +static const u8 sSandPillar0_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/0.4bpp"); +static const u8 sSandPillar1_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/1.4bpp"); +static const u8 sSandPillar2_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/2.4bpp"); -static const u16 gFieldEffectObjectPalette7[] = INCBIN_U16("graphics/field_effects/palettes/07.gbapal"); -static const u8 gSpriteImage_858DC38[] = INCBIN_U8("graphics/unknown/858E5D8/0.4bpp"); -static const u8 gSpriteImage_858DCB8[] = INCBIN_U8("graphics/unknown/858E5D8/1.4bpp"); -static const u8 gSpriteImage_858DD38[] = INCBIN_U8("graphics/unknown/858E5D8/2.4bpp"); -static const u8 gSpriteImage_858DDB8[] = INCBIN_U8("graphics/unknown/858E5D8/3.4bpp"); -static const u8 gSpriteImage_858DE38[] = INCBIN_U8("graphics/unknown/858E5D8/4.4bpp"); -static const u8 gSpriteImage_858DEB8[] = INCBIN_U8("graphics/unknown/858E5B0/0.4bpp"); -static const u8 gSpriteImage_858DF38[] = INCBIN_U8("graphics/unknown/858E5B0/1.4bpp"); -static const u8 gSpriteImage_858DFB8[] = INCBIN_U8("graphics/unknown/858E5B0/2.4bpp"); -static const u8 gSpriteImage_858E038[] = INCBIN_U8("graphics/unknown/858E5B0/3.4bpp"); -static const u8 gSpriteImage_858E0B8[] = INCBIN_U8("graphics/unknown/858E5B0/4.4bpp"); -static const u8 gSpriteImage_858E138[] = INCBIN_U8("graphics/unknown/858E5B0/5.4bpp"); -static const u16 gFieldEffectObjectPalette8[] = INCBIN_U16("graphics/field_effects/palettes/08.gbapal"); -static const u8 gSpriteImage_858E1D8[] = INCBIN_U8("graphics/unknown/858E674/0.4bpp"); -static const u8 gSpriteImage_858E2D8[] = INCBIN_U8("graphics/unknown/858E674/1.4bpp"); -static const u8 gSpriteImage_858E3D8[] = INCBIN_U8("graphics/unknown/858E674/2.4bpp"); - -static const struct OamData gOamData_858E4D8 = +static const struct OamData sOam_SecretPower = { .y = 0, .x = 0, @@ -101,7 +87,7 @@ static const struct OamData gOamData_858E4D8 = .priority = 2, }; -static const union AnimCmd gSpriteAnim_858E4E0[] = +static const union AnimCmd sAnim_SecretPowerCave[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -111,7 +97,7 @@ static const union AnimCmd gSpriteAnim_858E4E0[] = ANIMCMD_END, }; -static const union AnimCmd gSpriteAnim_858E4F8[] = +static const union AnimCmd sAnim_VineDropLeft[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -121,7 +107,7 @@ static const union AnimCmd gSpriteAnim_858E4F8[] = ANIMCMD_END, }; -static const union AnimCmd gSpriteAnim_858E510[] = +static const union AnimCmd sAnim_VineRiseLeft[] = { ANIMCMD_FRAME(4, 8), ANIMCMD_FRAME(3, 8), @@ -131,7 +117,7 @@ static const union AnimCmd gSpriteAnim_858E510[] = ANIMCMD_END, }; -static const union AnimCmd gSpriteAnim_858E528[] = +static const union AnimCmd sAnim_VineDropRight[] = { ANIMCMD_FRAME(0, 8, .hFlip = TRUE), ANIMCMD_FRAME(1, 8, .hFlip = TRUE), @@ -141,7 +127,7 @@ static const union AnimCmd gSpriteAnim_858E528[] = ANIMCMD_END, }; -static const union AnimCmd gSpriteAnim_858E540[] = +static const union AnimCmd sAnim_VineRiseRight[] = { ANIMCMD_FRAME(4, 8, .hFlip = TRUE), ANIMCMD_FRAME(3, 8, .hFlip = TRUE), @@ -151,7 +137,7 @@ static const union AnimCmd gSpriteAnim_858E540[] = ANIMCMD_END, }; -static const union AnimCmd gSpriteAnim_858E558[] = +static const union AnimCmd sAnim_SecretPowerShrub[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -161,88 +147,89 @@ static const union AnimCmd gSpriteAnim_858E558[] = ANIMCMD_END, }; -static const union AnimCmd *const gSpriteAnimTable_858E570[] = +static const union AnimCmd *const sAnimTable_SecretPowerCave[] = { - gSpriteAnim_858E4E0, + sAnim_SecretPowerCave, }; -static const union AnimCmd *const gSpriteAnimTable_858E574[] = +static const union AnimCmd *const sAnimTable_SecretPowerTree[] = { - gSpriteAnim_858E4F8, - gSpriteAnim_858E510, - gSpriteAnim_858E528, - gSpriteAnim_858E540, + sAnim_VineDropLeft, + sAnim_VineRiseLeft, + sAnim_VineDropRight, + sAnim_VineRiseRight, }; -static const union AnimCmd *const gSpriteAnimTable_858E584[] = +static const union AnimCmd *const sAnimTable_SecretPowerShrub[] = { - gSpriteAnim_858E558, + sAnim_SecretPowerShrub, }; -static const struct SpriteFrameImage gUnknown_858E588[] = +static const struct SpriteFrameImage sPicTable_SecretPowerCave[] = { - {gSpriteImage_858D978, 0x80}, - {gSpriteImage_858D9F8, 0x80}, - {gSpriteImage_858DA78, 0x80}, - {gSpriteImage_858DAF8, 0x80}, - {gSpriteImage_858DB78, 0x80}, + overworld_frame(sSecretPowerCave_Gfx, 2, 2, 0), + overworld_frame(sSecretPowerCave_Gfx, 2, 2, 1), + overworld_frame(sSecretPowerCave_Gfx, 2, 2, 2), + overworld_frame(sSecretPowerCave_Gfx, 2, 2, 3), + overworld_frame(sSecretPowerCave_Gfx, 2, 2, 4), }; -static const struct SpriteFrameImage gUnknown_858E5B0[] = +static const struct SpriteFrameImage sPicTable_SecretPowerTree[] = { - {gSpriteImage_858DEB8, 0x80}, - {gSpriteImage_858DF38, 0x80}, - {gSpriteImage_858DFB8, 0x80}, - {gSpriteImage_858E038, 0x80}, - {gSpriteImage_858E0B8, 0x80}, + overworld_frame(sSecretPowerTree_Gfx, 2, 2, 0), + overworld_frame(sSecretPowerTree_Gfx, 2, 2, 1), + overworld_frame(sSecretPowerTree_Gfx, 2, 2, 2), + overworld_frame(sSecretPowerTree_Gfx, 2, 2, 3), + overworld_frame(sSecretPowerTree_Gfx, 2, 2, 4), + // 6th frame exists but isnt accessed, the tree vine metatile is used instead }; -static const struct SpriteFrameImage gUnknown_858E5D8[] = +static const struct SpriteFrameImage sPicTable_SecretPowerShrub[] = { - {gSpriteImage_858DC38, 0x80}, - {gSpriteImage_858DCB8, 0x80}, - {gSpriteImage_858DD38, 0x80}, - {gSpriteImage_858DDB8, 0x80}, - {gSpriteImage_858DE38, 0x80}, + overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 0), + overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 1), + overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 2), + overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 3), + overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 4), }; -static const struct SpriteTemplate gUnknown_0858E600 = +static const struct SpriteTemplate sSpriteTemplate_SecretPowerCave = { .tileTag = 0xFFFF, .paletteTag = FLDEFF_PAL_TAG_3, - .oam = &gOamData_858E4D8, - .anims = gSpriteAnimTable_858E570, - .images = gUnknown_858E588, + .oam = &sOam_SecretPower, + .anims = sAnimTable_SecretPowerCave, + .images = sPicTable_SecretPowerCave, .affineAnims = gDummySpriteAffineAnimTable, - .callback = CaveEntranceSpriteCallback1, + .callback = SpriteCB_CaveEntranceInit, }; -static const struct SpriteTemplate gUnknown_0858E618 = +static const struct SpriteTemplate sSpriteTemplate_SecretPowerTree = { .tileTag = 0xFFFF, .paletteTag = FLDEFF_PAL_TAG_8, - .oam = &gOamData_858E4D8, - .anims = gSpriteAnimTable_858E574, - .images = gUnknown_858E5B0, + .oam = &sOam_SecretPower, + .anims = sAnimTable_SecretPowerTree, + .images = sPicTable_SecretPowerTree, .affineAnims = gDummySpriteAffineAnimTable, - .callback = TreeEntranceSpriteCallback1, + .callback = SpriteCB_TreeEntranceInit, }; -static const struct SpriteTemplate gUnknown_0858E630 = +static const struct SpriteTemplate sSpriteTemplate_SecretPowerShrub = { .tileTag = 0xFFFF, .paletteTag = FLDEFF_PAL_TAG_8, - .oam = &gOamData_858E4D8, - .anims = gSpriteAnimTable_858E584, - .images = gUnknown_858E5D8, + .oam = &sOam_SecretPower, + .anims = sAnimTable_SecretPowerShrub, + .images = sPicTable_SecretPowerShrub, .affineAnims = gDummySpriteAffineAnimTable, - .callback = ShrubEntranceSpriteCallback1, + .callback = SpriteCB_ShrubEntranceInit, }; -const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, FLDEFF_PAL_TAG_3}; -const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, FLDEFF_PAL_TAG_8}; +const struct SpritePalette gSpritePalette_SecretPower_Cave = {sSecretPowerCave_Pal, FLDEFF_PAL_TAG_3}; +const struct SpritePalette gSpritePalette_SecretPower_Plant = {sSecretPowerPlant_Pal, FLDEFF_PAL_TAG_8}; -static const struct OamData gOamData_858E658 = +static const struct OamData sOam_SandPillar = { .x = 0, .y = 0, @@ -254,7 +241,7 @@ static const struct OamData gOamData_858E658 = .priority = 2, }; -static const union AnimCmd gSpriteAnim_858E660[] = +static const union AnimCmd sAnim_SandPillar[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), @@ -262,47 +249,45 @@ static const union AnimCmd gSpriteAnim_858E660[] = ANIMCMD_END, }; -static const union AnimCmd *const gSpriteAnimTable_858E670[] = +static const union AnimCmd *const sAnimTable_SandPillar[] = { - gSpriteAnim_858E660, + sAnim_SandPillar, }; -static const struct SpriteFrameImage gUnknown_0858E674[] = +static const struct SpriteFrameImage sPicTable_SandPillar[] = { - {gSpriteImage_858E1D8, 0x100}, - {gSpriteImage_858E2D8, 0x100}, - {gSpriteImage_858E3D8, 0x100}, + {sSandPillar0_Gfx, 0x100}, + {sSandPillar1_Gfx, 0x100}, + {sSandPillar2_Gfx, 0x100}, }; -static const struct SpriteTemplate gUnknown_0858E68C = +static const struct SpriteTemplate sSpriteTemplate_SandPillar = { .tileTag = 0xFFFF, .paletteTag = FLDEFF_PAL_TAG_14, - .oam = &gOamData_858E658, - .anims = gSpriteAnimTable_858E670, - .images = gUnknown_0858E674, + .oam = &sOam_SandPillar, + .anims = sAnimTable_SandPillar, + .images = sPicTable_SandPillar, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_SandPillar_0, + .callback = SpriteCB_SandPillar_BreakTop, }; // This uses one of the secret base palettes, so there is no "graphics/field_effects/palettes/09.pal" file. -const struct SpritePalette gFieldEffectObjectPaletteInfo9 = {gTilesetPalettes_SecretBase[5], FLDEFF_PAL_TAG_14}; +const struct SpritePalette gSpritePalette_SandPillar = {gTilesetPalettes_SecretBase[5], FLDEFF_PAL_TAG_14}; -static const u8 gSpriteImage_858E6AC[] = INCBIN_U8("graphics/unknown/858E84C/0.4bpp"); -static const u8 gSpriteImage_858E72C[] = INCBIN_U8("graphics/unknown/858E84C/1.4bpp"); -static const u8 gSpriteImage_858E7AC[] = INCBIN_U8("graphics/unknown/858E84C/2.4bpp"); -static const u16 gUnknown_0858E82C[] = INCBIN_U16("graphics/unknown/unknown_58E82C.gbapal"); +static const u8 sRecordMixLights_Gfx[] = INCBIN_U8("graphics/field_effects/pics/record_mix_lights.4bpp"); +static const u16 sRecordMixLights_Pal[] = INCBIN_U16("graphics/field_effects/palettes/record_mix_lights.gbapal"); -static const struct SpriteFrameImage gUnknown_0858E84C[] = +static const struct SpriteFrameImage sPicTable_RecordMixLights[] = { - {gSpriteImage_858E6AC, sizeof(gSpriteImage_858E6AC)}, - {gSpriteImage_858E72C, sizeof(gSpriteImage_858E72C)}, - {gSpriteImage_858E7AC, sizeof(gSpriteImage_858E7AC)}, + overworld_frame(sRecordMixLights_Gfx, 4, 1, 0), + overworld_frame(sRecordMixLights_Gfx, 4, 1, 1), + overworld_frame(sRecordMixLights_Gfx, 4, 1, 2), }; -static const struct SpritePalette gUnknown_0858E864 = {gUnknown_0858E82C, FLDEFF_PAL_TAG_0}; +static const struct SpritePalette sSpritePalette_RecordMixLights = {sRecordMixLights_Pal, FLDEFF_PAL_TAG_0}; -static const union AnimCmd gSpriteAnim_858E86C[] = +static const union AnimCmd sAnim_RecordMixLights[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -310,173 +295,182 @@ static const union AnimCmd gSpriteAnim_858E86C[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const gSpriteAnimTable_858E87C[] = +static const union AnimCmd *const sAnimTable_RecordMixLights[] = { - gSpriteAnim_858E86C, + sAnim_RecordMixLights, }; -static const struct SpriteTemplate gUnknown_0858E880 = +static const struct SpriteTemplate sSpriteTemplate_RecordMixLights = { .tileTag = 0xFFFF, .paletteTag = FLDEFF_PAL_TAG_0, .oam = &gObjectEventBaseOam_32x8, - .anims = gSpriteAnimTable_858E87C, - .images = gUnknown_0858E84C, + .anims = sAnimTable_RecordMixLights, + .images = sPicTable_RecordMixLights, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -void sub_80F9BCC(u16 a0, u16 a1, u8 a2) +// For accessing pokemon storage PC or the Hall of Fame PC +void ComputerScreenOpenEffect(u16 increment, u16 unused, u8 priority) { - sub_80F9C44(sub_80F9C90, a0, a1, a2); + CreateComputerScreenEffectTask(Task_ComputerScreenOpenEffect, increment, unused, priority); } -void sub_80F9BF4(u16 a0, u16 a1, u8 a2) +void ComputerScreenCloseEffect(u16 increment, u16 unused, u8 priority) { - sub_80F9C44(sub_80F9DFC, a0, a1, a2); + CreateComputerScreenEffectTask(Task_ComputerScreenCloseEffect, increment, unused, priority); } -bool8 sub_80F9C1C(void) +bool8 IsComputerScreenOpenEffectActive(void) { - return FuncIsActiveTask(sub_80F9C90); + return FuncIsActiveTask(Task_ComputerScreenOpenEffect); } -bool8 sub_80F9C30(void) +bool8 IsComputerScreenCloseEffectActive(void) { - return FuncIsActiveTask(sub_80F9DFC); + return FuncIsActiveTask(Task_ComputerScreenCloseEffect); } -static void sub_80F9C44(void (*taskfunc) (u8), u16 a1, u16 a2, u8 a3) -{ - u8 taskId = CreateTask(taskfunc, a3); +#define tState data[0] +#define tHorzIncrement data[1] +#define tVertIncrement data[2] +#define tWinLeft data[3] +#define tWinRight data[4] +#define tWinTop data[5] +#define tWinBottom data[6] +#define tBlendCnt data[7] +#define tBlendY data[8] - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = a1 == 0 ? 16 : a1; - gTasks[taskId].data[2] = a1 == 0 ? 20 : a1; +static void CreateComputerScreenEffectTask(void (*taskfunc) (u8), u16 increment, u16 unused, u8 priority) +{ + u8 taskId = CreateTask(taskfunc, priority); + + gTasks[taskId].tState = 0; + gTasks[taskId].tHorzIncrement = increment == 0 ? 16 : increment; + gTasks[taskId].tVertIncrement = increment == 0 ? 20 : increment; gTasks[taskId].func(taskId); } -static void sub_80F9C90(u8 taskId) +static void Task_ComputerScreenOpenEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - task->data[3] = 0x78; - task->data[4] = 0x78; - task->data[5] = 0x50; - task->data[6] = 0x51; + task->tWinLeft = DISPLAY_WIDTH / 2; + task->tWinRight = DISPLAY_WIDTH / 2; + task->tWinTop = DISPLAY_HEIGHT / 2; + task->tWinBottom = DISPLAY_HEIGHT / 2 + 1; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); - SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WINOUT, 0); break; case 1: - task->data[7] = GetGpuReg(REG_OFFSET_BLDCNT); - task->data[8] = GetGpuReg(REG_OFFSET_BLDY); + task->tBlendCnt = GetGpuReg(REG_OFFSET_BLDCNT); + task->tBlendY = GetGpuReg(REG_OFFSET_BLDY); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN); - SetGpuReg(REG_OFFSET_BLDY, 0x10); + SetGpuReg(REG_OFFSET_BLDY, 16); break; case 2: - task->data[3] -= task->data[1]; - task->data[4] += task->data[1]; + task->tWinLeft -= task->tHorzIncrement; + task->tWinRight += task->tHorzIncrement; - if (task->data[3] < 1 || task->data[4] > 0xEF) + if (task->tWinLeft < 1 || task->tWinRight > DISPLAY_WIDTH - 1) { - task->data[3] = 0; - task->data[4] = 0xF0; + task->tWinLeft = 0; + task->tWinRight = DISPLAY_WIDTH; SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]); + SetGpuReg(REG_OFFSET_BLDCNT, task->tBlendCnt); BlendPalettes(0xFFFFFFFF, 0, 0); gPlttBufferFaded[0] = 0; } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); - if (task->data[3] != 0) + if (task->tWinLeft != 0) return; break; case 3: - task->data[5] -= task->data[2]; - task->data[6] += task->data[2]; + task->tWinTop -= task->tVertIncrement; + task->tWinBottom += task->tVertIncrement; - if (task->data[5] < 1 || task->data[6] > 0x9F) + if (task->tWinTop < 1 || task->tWinBottom > DISPLAY_HEIGHT - 1) { - task->data[5] = 0; - task->data[6] = 0xA0; + task->tWinTop = 0; + task->tWinBottom = DISPLAY_HEIGHT; ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); - if (task->data[5] != 0) + if (task->tWinTop != 0) return; break; default: - SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]); + SetGpuReg(REG_OFFSET_BLDCNT, task->tBlendCnt); DestroyTask(taskId); return; } - task->data[0]++; + task->tState++; } -static void sub_80F9DFC(u8 taskId) +static void Task_ComputerScreenCloseEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; - int temp = task->data[0]; - - switch (temp) + switch (task->tState) { case 0: - gPlttBufferFaded[0] = temp; + gPlttBufferFaded[0] = 0; break; case 1: - task->data[3] = 0; - task->data[4] = 0xF0; - task->data[5] = 0; - task->data[6] = 0xA0; + task->tWinLeft = 0; + task->tWinRight = DISPLAY_WIDTH; + task->tWinTop = 0; + task->tWinBottom = DISPLAY_HEIGHT; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); - SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WINOUT, 0); break; case 2: - task->data[5] += task->data[2]; - task->data[6] -= task->data[2]; + task->tWinTop += task->tVertIncrement; + task->tWinBottom -= task->tVertIncrement; - if (task->data[5] > 0x4F || task->data[6] < 0x52) + if (task->tWinTop >= DISPLAY_HEIGHT / 2 || task->tWinBottom <= DISPLAY_HEIGHT / 2 + 1) { - task->data[5] = 0x50; - task->data[6] = 0x51; + task->tWinTop = DISPLAY_HEIGHT / 2; + task->tWinBottom = DISPLAY_HEIGHT / 2 + 1; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN); - SetGpuReg(REG_OFFSET_BLDY, 0x10); + SetGpuReg(REG_OFFSET_BLDY, 16); } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); - if (task->data[5] != 0x50) + if (task->tWinTop != DISPLAY_HEIGHT / 2) return; break; case 3: - task->data[3] += task->data[1]; - task->data[4] -= task->data[1]; + task->tWinLeft += task->tHorzIncrement; + task->tWinRight -= task->tHorzIncrement; - if (task->data[3] > 0x77 || task->data[4] < 0x79) + if (task->tWinLeft >= DISPLAY_WIDTH / 2 || task->tWinRight <= DISPLAY_WIDTH / 2) { - task->data[3] = 0x78; - task->data[4] = 0x78; - BlendPalettes(-1, 0x10, 0); + task->tWinLeft = DISPLAY_WIDTH / 2; + task->tWinRight = DISPLAY_WIDTH / 2; + BlendPalettes(-1, 16, 0); gPlttBufferFaded[0] = 0; } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); - if (task->data[3] != 0x78) + if (task->tWinLeft != DISPLAY_WIDTH / 2) return; break; default: @@ -486,9 +480,19 @@ static void sub_80F9DFC(u8 taskId) DestroyTask(taskId); return; } - task->data[0]++; + task->tState++; } +#undef tState +#undef tHorzIncrement +#undef tVertIncrement +#undef tWinLeft +#undef tWinRight +#undef tWinTop +#undef tWinBottom +#undef tBlendCnt +#undef tBlendY + static void SetCurrentSecretBase(void) { SetCurSecretBaseIdFromPosition(&gPlayerFacingPosition, gMapHeader.events); @@ -607,22 +611,22 @@ static void StartSecretBaseCaveFieldEffect(void) bool8 FldEff_SecretPowerCave(void) { AdjustSecretPowerSpritePixelOffsets(); - CreateSprite(&gUnknown_0858E600, + CreateSprite(&sSpriteTemplate_SecretPowerCave, gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5], gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6], 148); return FALSE; } -static void CaveEntranceSpriteCallback1(struct Sprite *sprite) +static void SpriteCB_CaveEntranceInit(struct Sprite *sprite) { PlaySE(SE_W088); sprite->data[0] = 0; - sprite->callback = CaveEntranceSpriteCallback2; + sprite->callback = SpriteCB_CaveEntranceOpen; } -static void CaveEntranceSpriteCallback2(struct Sprite *sprite) +static void SpriteCB_CaveEntranceOpen(struct Sprite *sprite) { if (sprite->data[0] < 40) { @@ -632,11 +636,11 @@ static void CaveEntranceSpriteCallback2(struct Sprite *sprite) else { sprite->data[0] = 0; - sprite->callback = CaveEntranceSpriteCallbackEnd; + sprite->callback = SpriteCB_CaveEntranceEnd; } } -static void CaveEntranceSpriteCallbackEnd(struct Sprite *sprite) +static void SpriteCB_CaveEntranceEnd(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SECRET_POWER_CAVE); EnableBothScriptContexts(); @@ -676,7 +680,7 @@ bool8 FldEff_SecretPowerTree(void) AdjustSecretPowerSpritePixelOffsets(); - CreateSprite(&gUnknown_0858E618, + CreateSprite(&sSpriteTemplate_SecretPowerTree, gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5], gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6], 148); @@ -687,16 +691,16 @@ bool8 FldEff_SecretPowerTree(void) return FALSE; } -static void TreeEntranceSpriteCallback1(struct Sprite *sprite) +static void SpriteCB_TreeEntranceInit(struct Sprite *sprite) { PlaySE(SE_W010); sprite->animNum = gFieldEffectArguments[7]; sprite->data[0] = 0; - sprite->callback = TreeEntranceSpriteCallback2; + sprite->callback = SpriteCB_TreeEntranceOpen; } -static void TreeEntranceSpriteCallback2(struct Sprite *sprite) +static void SpriteCB_TreeEntranceOpen(struct Sprite *sprite) { sprite->data[0]++; @@ -706,11 +710,11 @@ static void TreeEntranceSpriteCallback2(struct Sprite *sprite) ToggleSecretBaseEntranceMetatile(); sprite->data[0] = 0; - sprite->callback = TreeEntranceSpriteCallbackEnd; + sprite->callback = SpriteCB_TreeEntranceEnd; } } -static void TreeEntranceSpriteCallbackEnd(struct Sprite *sprite) +static void SpriteCB_TreeEntranceEnd(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SECRET_POWER_TREE); EnableBothScriptContexts(); @@ -742,7 +746,7 @@ bool8 FldEff_SecretPowerShrub(void) { AdjustSecretPowerSpritePixelOffsets(); - CreateSprite(&gUnknown_0858E630, + CreateSprite(&sSpriteTemplate_SecretPowerShrub, gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5], gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6], 148); @@ -750,15 +754,15 @@ bool8 FldEff_SecretPowerShrub(void) return FALSE; } -static void ShrubEntranceSpriteCallback1(struct Sprite *sprite) +static void SpriteCB_ShrubEntranceInit(struct Sprite *sprite) { PlaySE(SE_W077); sprite->data[0] = 0; - sprite->callback = ShrubEntranceSpriteCallback2; + sprite->callback = SpriteCB_ShrubEntranceOpen; } -static void ShrubEntranceSpriteCallback2(struct Sprite *sprite) +static void SpriteCB_ShrubEntranceOpen(struct Sprite *sprite) { if (sprite->data[0] < 40) { @@ -770,16 +774,20 @@ static void ShrubEntranceSpriteCallback2(struct Sprite *sprite) else { sprite->data[0] = 0; - sprite->callback = ShrubEntranceSpriteCallbackEnd; + sprite->callback = SpriteCB_ShrubEntranceEnd; } } -static void ShrubEntranceSpriteCallbackEnd(struct Sprite *sprite) +static void SpriteCB_ShrubEntranceEnd(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SECRET_POWER_SHRUB); EnableBothScriptContexts(); } +#define tX data[0] +#define tY data[1] +#define tState data[2] + bool8 FldEff_SecretBasePCTurnOn(void) { s16 x, y; @@ -788,9 +796,9 @@ bool8 FldEff_SecretBasePCTurnOn(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); taskId = CreateTask(Task_SecretBasePCTurnOn, 0); - gTasks[taskId].data[0] = x; - gTasks[taskId].data[1] = y; - gTasks[taskId].data[2] = 0; + gTasks[taskId].tX = x; + gTasks[taskId].tY = y; + gTasks[taskId].tState = 0; return FALSE; } @@ -799,30 +807,34 @@ static void Task_SecretBasePCTurnOn(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[2]) + switch (tState) { case 4: case 12: - MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On); - CurrentMapDrawMetatileAt(data[0], data[1]); + MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC_On); + CurrentMapDrawMetatileAt(tX, tY); break; case 8: case 16: - MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC); - CurrentMapDrawMetatileAt(data[0], data[1]); + MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC); + CurrentMapDrawMetatileAt(tX, tY); break; case 20: - MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On); - CurrentMapDrawMetatileAt(data[0], data[1]); + MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC_On); + CurrentMapDrawMetatileAt(tX, tY); FieldEffectActiveListRemove(FLDEFF_PCTURN_ON); EnableBothScriptContexts(); DestroyTask(taskId); return; } - data[2]++; + tState++; } +#undef tX +#undef tY +#undef tState + void DoSecretBasePCTurnOffEffect(void) { s16 x, y; @@ -892,12 +904,12 @@ static void DoBalloonSoundEffect(s16 metatileId) } } -bool8 FldEff_NopA6FC(void) +bool8 FldEff_Nop47(void) { return FALSE; } -bool8 FldEff_NopA700(void) +bool8 FldEff_Nop48(void) { return FALSE; } @@ -1034,7 +1046,7 @@ bool8 FldEff_SandPillar(void) switch (GetPlayerFacingDirection()) { case DIR_SOUTH: - CreateSprite(&gUnknown_0858E68C, + CreateSprite(&sSpriteTemplate_SandPillar, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 32, 0); @@ -1042,7 +1054,7 @@ bool8 FldEff_SandPillar(void) break; case DIR_NORTH: - CreateSprite(&gUnknown_0858E68C, + CreateSprite(&sSpriteTemplate_SandPillar, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y, 148); @@ -1050,7 +1062,7 @@ bool8 FldEff_SandPillar(void) break; case DIR_WEST: - CreateSprite(&gUnknown_0858E68C, + CreateSprite(&sSpriteTemplate_SandPillar, gSprites[gPlayerAvatar.spriteId].oam.x - 8, gSprites[gPlayerAvatar.spriteId].oam.y + 16, 148); @@ -1058,7 +1070,7 @@ bool8 FldEff_SandPillar(void) break; case DIR_EAST: - CreateSprite(&gUnknown_0858E68C, + CreateSprite(&sSpriteTemplate_SandPillar, gSprites[gPlayerAvatar.spriteId].oam.x + 24, gSprites[gPlayerAvatar.spriteId].oam.y + 16, 148); @@ -1069,7 +1081,7 @@ bool8 FldEff_SandPillar(void) return FALSE; } -static void SpriteCB_SandPillar_0(struct Sprite *sprite) +static void SpriteCB_SandPillar_BreakTop(struct Sprite *sprite) { PlaySE(SE_W088); @@ -1083,10 +1095,10 @@ static void SpriteCB_SandPillar_0(struct Sprite *sprite) CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]); sprite->data[0] = 0; - sprite->callback = SpriteCB_SandPillar_1; + sprite->callback = SpriteCB_SandPillar_BreakBase; } -static void SpriteCB_SandPillar_1(struct Sprite *sprite) +static void SpriteCB_SandPillar_BreakBase(struct Sprite *sprite) { if (sprite->data[0] < 18) { @@ -1097,11 +1109,11 @@ static void SpriteCB_SandPillar_1(struct Sprite *sprite) MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | METATILE_COLLISION_MASK); CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]); sprite->data[0] = 0; - sprite->callback = SpriteCB_SandPillar_2; + sprite->callback = SpriteCB_SandPillar_End; } } -static void SpriteCB_SandPillar_2(struct Sprite *sprite) +static void SpriteCB_SandPillar_End(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SAND_PILLAR); EnableBothScriptContexts(); @@ -1167,12 +1179,13 @@ void InteractWithShieldOrTVDecoration(void) } } -bool8 sub_80FADE4(u16 metatileId, u8 arg1) +// As opposed to a small one (single metatile) like the balloons +bool8 IsLargeBreakableDecoration(u16 metatileId, bool8 checkBase) { if (!CurMapIsSecretBase()) return FALSE; - if (!arg1) + if (!checkBase) { if (metatileId == METATILE_SecretBase_SandOrnament_Top || metatileId == METATILE_SecretBase_SandOrnament_TopWall) return TRUE; @@ -1224,25 +1237,26 @@ bool32 FldEffPoison_IsActive(void) return FuncIsActiveTask(Task_FieldPoisonEffect); } -static void Task_WateringBerryTreeAnim_0(u8 taskId) +static void Task_WateringBerryTreeAnim(u8 taskId) { - gTasks[taskId].func = Task_WateringBerryTreeAnim_1; + gTasks[taskId].func = Task_WateringBerryTreeAnim_Start; } -static void Task_WateringBerryTreeAnim_1(u8 taskId) +static void Task_WateringBerryTreeAnim_Start(u8 taskId) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(playerObjEvent) || ObjectEventClearHeldMovementIfFinished(playerObjEvent)) { + // Start watering SetPlayerAvatarWatering(GetPlayerFacingDirection()); ObjectEventSetHeldMovement(playerObjEvent, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); - gTasks[taskId].func = Task_WateringBerryTreeAnim_2; + gTasks[taskId].func = Task_WateringBerryTreeAnim_Continue; } } -static void Task_WateringBerryTreeAnim_2(u8 taskId) +static void Task_WateringBerryTreeAnim_Continue(u8 taskId) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1250,15 +1264,15 @@ static void Task_WateringBerryTreeAnim_2(u8 taskId) { s16 value = gTasks[taskId].data[1]++; + // Continue holding watering action 10 times, then end if (value < 10) ObjectEventSetHeldMovement(playerObjEvent, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); - else - gTasks[taskId].func = Task_WateringBerryTreeAnim_3; + gTasks[taskId].func = Task_WateringBerryTreeAnim_End; } } -static void Task_WateringBerryTreeAnim_3(u8 taskId) +static void Task_WateringBerryTreeAnim_End(u8 taskId) { SetPlayerAvatarTransitionFlags(GetPlayerAvatarFlags()); DestroyTask(taskId); @@ -1267,16 +1281,17 @@ static void Task_WateringBerryTreeAnim_3(u8 taskId) void DoWateringBerryTreeAnim(void) { - CreateTask(Task_WateringBerryTreeAnim_0, 80); + CreateTask(Task_WateringBerryTreeAnim, 80); } -u8 CreateRecordMixingSprite(void) +// The lights that blink on the counter when mixing records in the cable club +u8 CreateRecordMixingLights(void) { u8 spriteId; - LoadSpritePalette(&gUnknown_0858E864); + LoadSpritePalette(&sSpritePalette_RecordMixLights); - spriteId = CreateSprite(&gUnknown_0858E880, 0, 0, 82); + spriteId = CreateSprite(&sSpriteTemplate_RecordMixLights, 0, 0, 82); if (spriteId == MAX_SPRITES) { @@ -1293,13 +1308,13 @@ u8 CreateRecordMixingSprite(void) return spriteId; } -void DestroyRecordMixingSprite(void) +void DestroyRecordMixingLights(void) { int i; for (i = 0; i < MAX_SPRITES; i++) { - if (gSprites[i].template == &gUnknown_0858E880) + if (gSprites[i].template == &sSpriteTemplate_RecordMixLights) { FreeSpritePalette(&gSprites[i]); DestroySprite(&gSprites[i]); diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 4d7dcb66e7..ec8e64012a 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -20,13 +20,13 @@ #include "constants/songs.h" // static functions -static void Task_DoFieldMove_0(u8 taskId); -static void Task_DoFieldMove_1(u8 taskId); -static void Task_DoFieldMove_2(u8 taskId); -static void Task_DoFieldMove_3(u8 taskId); +static void Task_DoFieldMove_Init(u8 taskId); +static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId); +static void Task_DoFieldMove_WaitForMon(u8 taskId); +static void Task_DoFieldMove_RunFunc(u8 taskId); static void FieldCallback_RockSmash(void); -static void sub_8135714(void); +static void FieldMove_RockSmash(void); // text bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) @@ -50,10 +50,10 @@ bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) u8 CreateFieldMoveTask(void) { GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); - return CreateTask(Task_DoFieldMove_0, 8); + return CreateTask(Task_DoFieldMove_Init, 8); } -static void Task_DoFieldMove_0(u8 taskId) +static void Task_DoFieldMove_Init(u8 taskId) { u8 objEventId; @@ -65,28 +65,30 @@ static void Task_DoFieldMove_0(u8 taskId) { if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) { + // Skip field move pose underwater FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = Task_DoFieldMove_2; + gTasks[taskId].func = Task_DoFieldMove_WaitForMon; } else { + // Do field move pose SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); - gTasks[taskId].func = Task_DoFieldMove_1; + gTasks[taskId].func = Task_DoFieldMove_ShowMonAfterPose; } } } -static void Task_DoFieldMove_1(u8 taskId) +static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId) { if (ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]) == TRUE) { FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = Task_DoFieldMove_2; + gTasks[taskId].func = Task_DoFieldMove_WaitForMon; } } -static void Task_DoFieldMove_2(u8 taskId) +static void Task_DoFieldMove_WaitForMon(u8 taskId) { if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { @@ -102,19 +104,22 @@ static void Task_DoFieldMove_2(u8 taskId) ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByCurrentState()); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); - gTasks[taskId].func = Task_DoFieldMove_3; + gTasks[taskId].func = Task_DoFieldMove_RunFunc; } } -static void Task_DoFieldMove_3(u8 taskId) +static void Task_DoFieldMove_RunFunc(u8 taskId) { - void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); + // The function for the field move to do is stored in halves across data[8] and data[9] + void (*fieldMoveFunc)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); - func(); + fieldMoveFunc(); gPlayerAvatar.preventStep = FALSE; DestroyTask(taskId); } +// Called when Rock Smash is used from the party menu +// For interacting with a smashable rock in the field, see EventScript_RockSmash bool8 SetUpFieldMove_RockSmash(void) { // In Ruby and Sapphire, Regirock's tomb is opened by using Strength. In Emerald, @@ -141,20 +146,21 @@ bool8 SetUpFieldMove_RockSmash(void) static void FieldCallback_RockSmash(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_FldEffRockSmash); + ScriptContext1_SetupScript(EventScript_RockSmashFromPartyMenu); } bool8 FldEff_UseRockSmash(void) { u8 taskId = CreateFieldMoveTask(); - gTasks[taskId].data[8] = (u32)sub_8135714 >> 16; - gTasks[taskId].data[9] = (u32)sub_8135714; + gTasks[taskId].data[8] = (u32)FieldMove_RockSmash >> 16; + gTasks[taskId].data[9] = (u32)FieldMove_RockSmash; IncrementGameStat(GAME_STAT_USED_ROCK_SMASH); return FALSE; } -static void sub_8135714(void) +// The actual rock smashing is handled by EventScript_SmashRock, so this function does very little +static void FieldMove_RockSmash(void) { PlaySE(SE_W088); FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 5405b7c42f..b4745ff4e3 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -799,7 +799,7 @@ void CB2_DoHallOfFamePC(void) { struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer); fameTeam->mon[0] = sDummyFameMon; - sub_80F9BCC(0, 0, 0); + ComputerScreenOpenEffect(0, 0, 0); SetVBlankCallback(VBlankCB_HallOfFame); gMain.state++; } @@ -809,7 +809,7 @@ void CB2_DoHallOfFamePC(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - if (!sub_80F9C1C()) + if (!IsComputerScreenOpenEffectActive()) gMain.state++; break; case 5: @@ -1023,13 +1023,13 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskId) CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer); fameTeam->mon[0] = sDummyFameMon; - sub_80F9BF4(0, 0, 0); + ComputerScreenCloseEffect(0, 0, 0); gTasks[taskId].func = Task_HofPC_HandleExit; } static void Task_HofPC_HandleExit(u8 taskId) { - if (!sub_80F9C30()) + if (!IsComputerScreenCloseEffectActive()) { u8 i; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 104f92c730..31cb479657 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -2360,11 +2360,11 @@ static void Cb_ShowPSS(u8 taskId) { case 0: PlaySE(SE_PC_LOGIN); - sub_80F9BCC(0x14, 0, 1); + ComputerScreenOpenEffect(20, 0, 1); sPSSData->state++; break; case 1: - if (!sub_80F9C1C()) + if (!IsComputerScreenOpenEffectActive()) SetPSSCallback(Cb_MainPSS); break; } @@ -3781,11 +3781,11 @@ static void Cb_OnCloseBoxPressed(u8 taskId) } break; case 3: - sub_80F9BF4(0x14, 0, 1); + ComputerScreenCloseEffect(20, 0, 1); sPSSData->state++; break; case 4: - if (!sub_80F9C30()) + if (!IsComputerScreenCloseEffectActive()) { sub_80CABE0(); gPlayerPartyCount = CalculatePlayerPartyCount(); @@ -3842,11 +3842,11 @@ static void Cb_OnBPressed(u8 taskId) } break; case 3: - sub_80F9BF4(0x14, 0, 0); + ComputerScreenCloseEffect(20, 0, 0); sPSSData->state++; break; case 4: - if (!sub_80F9C30()) + if (!IsComputerScreenCloseEffectActive()) { sub_80CABE0(); gPlayerPartyCount = CalculatePlayerPartyCount(); diff --git a/src/record_mixing.c b/src/record_mixing.c index 3a93d72f8c..54b5272160 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -327,7 +327,7 @@ static void Task_RecordMixing_Main(u8 taskId) VarSet(VAR_TEMP_0, 1); gUnknown_03001130 = FALSE; PrepareExchangePacket(); - CreateRecordMixingSprite(); + CreateRecordMixingLights(); tState = 1; data[10] = CreateTask(Task_MixingRecordsRecv, 80); tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 81); @@ -337,7 +337,7 @@ static void Task_RecordMixing_Main(u8 taskId) { tState = 2; FlagSet(FLAG_SYS_MIX_RECORD); - DestroyRecordMixingSprite(); + DestroyRecordMixingLights(); DestroyTask(tSndEffTaskId); } break; From abdf7cbf02442fb3d5cfe9945a8e093b273317a9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 29 Jun 2020 16:53:38 -0400 Subject: [PATCH 04/85] Label fishing effect functions --- include/constants/items.h | 5 ++ include/tv.h | 2 +- src/data/items.h | 6 +- src/field_effect_helpers.c | 2 +- src/field_player_avatar.c | 154 ++++++++++++++++++------------------- src/field_screen_effect.c | 6 +- src/tv.c | 14 +--- src/wild_encounter.c | 7 -- 8 files changed, 94 insertions(+), 102 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index fafcac8b18..d795194cfc 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -495,6 +495,11 @@ #define MAX_PC_ITEM_CAPACITY 999 #define MAX_BERRY_CAPACITY 999 +// Secondary IDs for rods +#define OLD_ROD 0 +#define GOOD_ROD 1 +#define SUPER_ROD 2 + // Check if the item is one that can be used on a Pokemon. #define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2) diff --git a/include/tv.h b/include/tv.h index 7e286ff6e3..e2c50cad2a 100644 --- a/include/tv.h +++ b/include/tv.h @@ -35,7 +35,7 @@ void sub_80EDC60(const u16 *words); void sub_80EDA80(void); void ReceivePokeNewsData(void *src, u32 size, u8 masterIdx); void sub_80F0BB8(void); -void sub_80ED950(bool8 flag); +void RecordFishingAttemptForTV(bool8 caughtFish); void IncrementDailySlotsUses(void); void IncrementDailyRouletteUses(void); void IncrementDailyWildBattles(void); diff --git a/src/data/items.h b/src/data/items.h index 4d262e6833..30beb53528 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -3426,7 +3426,7 @@ const struct Item gItems[] = .pocket = POCKET_KEY_ITEMS, .type = 2, .fieldUseFunc = ItemUseOutOfBattle_Rod, - .secondaryId = 0, + .secondaryId = OLD_ROD, }, [ITEM_GOOD_ROD] = @@ -3440,7 +3440,7 @@ const struct Item gItems[] = .pocket = POCKET_KEY_ITEMS, .type = 2, .fieldUseFunc = ItemUseOutOfBattle_Rod, - .secondaryId = 1, + .secondaryId = GOOD_ROD, }, [ITEM_SUPER_ROD] = @@ -3454,7 +3454,7 @@ const struct Item gItems[] = .pocket = POCKET_KEY_ITEMS, .type = 2, .fieldUseFunc = ItemUseOutOfBattle_Rod, - .secondaryId = 2, + .secondaryId = SUPER_ROD, }, [ITEM_SS_TICKET] = diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index e3ca54f16d..9950978adf 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1423,7 +1423,7 @@ void UpdateRayquazaSpotlightEffect(struct Sprite *sprite) switch (sprite->sState) { case 0: - SetGpuReg(REG_OFFSET_BG0VOFS, 120 - (sprite->sTimer / 3)); + SetGpuReg(REG_OFFSET_BG0VOFS, DISPLAY_WIDTH / 2 - (sprite->sTimer / 3)); if (sprite->sTimer == 96) { for (i = 0; i < 3; i++) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 41ddfc17dd..37342f02da 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -26,6 +26,7 @@ #include "constants/event_object_movement.h" #include "constants/field_effects.h" #include "constants/flags.h" +#include "constants/items.h" #include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" @@ -121,22 +122,22 @@ static void Task_StopSurfingInit(u8 taskId); static void Task_WaitStopSurfing(u8 taskId); static void Task_Fishing(u8 taskId); -static u8 Fishing1(struct Task *task); -static u8 Fishing2(struct Task *task); -static u8 Fishing3(struct Task *task); -static u8 Fishing4(struct Task *task); -static u8 Fishing5(struct Task *task); -static u8 Fishing6(struct Task *task); -static u8 Fishing7(struct Task *task); -static u8 Fishing8(struct Task *task); -static u8 Fishing9(struct Task *task); -static u8 Fishing10(struct Task *task); -static u8 Fishing11(struct Task *task); -static u8 Fishing12(struct Task *task); -static u8 Fishing13(struct Task *task); -static u8 Fishing14(struct Task *task); -static u8 Fishing15(struct Task *task); -static u8 Fishing16(struct Task *task); +static u8 Fishing_Init(struct Task *task); +static u8 Fishing_GetRodOut(struct Task *task); +static u8 Fishing_WaitBeforeDots(struct Task *task); +static u8 Fishing_InitDots(struct Task *task); +static u8 Fishing_ShowDots(struct Task *task); +static u8 Fishing_CheckForBite(struct Task *task); +static u8 Fishing_GotBite(struct Task *task); +static u8 Fishing_WaitForA(struct Task *task); +static u8 Fishing_CheckMoreDots(struct Task *task); +static u8 Fishing_MonOnHook(struct Task *task); +static u8 Fishing_StartEncounter(struct Task *task); +static u8 Fishing_NotEvenNibble(struct Task *task); +static u8 Fishing_GotAway(struct Task *task); +static u8 Fishing_NoMon(struct Task *task); +static u8 Fishing_PutRodAway(struct Task *task); +static u8 Fishing_EndNoMon(struct Task *task); static void AlignFishingAnimationFrames(void); static u8 sub_808D38C(struct ObjectEvent *object, s16 *a1); @@ -1670,26 +1671,6 @@ static void Task_WaitStopSurfing(u8 taskId) } } -static bool8 (*const sFishingStateFuncs[])(struct Task *) = -{ - Fishing1, - Fishing2, - Fishing3, - Fishing4, - Fishing5, - Fishing6, - Fishing7, - Fishing8, - Fishing9, - Fishing10, - Fishing11, - Fishing12, - Fishing13, - Fishing14, - Fishing15, - Fishing16, -}; - #define tStep data[0] #define tFrameCounter data[1] #define tNumDots data[2] @@ -1699,6 +1680,7 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) = #define tPlayerGfxId data[14] #define tFishingRod data[15] +// Some states are jumped to directly, labeled below #define FISHING_START_ROUND 3 #define FISHING_GOT_BITE 6 #define FISHING_ON_HOOK 9 @@ -1706,6 +1688,26 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) = #define FISHING_GOT_AWAY 12 #define FISHING_SHOW_RESULT 13 +static bool8 (*const sFishingStateFuncs[])(struct Task *) = +{ + Fishing_Init, + Fishing_GetRodOut, + Fishing_WaitBeforeDots, + Fishing_InitDots, // FISHING_START_ROUND + Fishing_ShowDots, + Fishing_CheckForBite, + Fishing_GotBite, // FISHING_GOT_BITE + Fishing_WaitForA, + Fishing_CheckMoreDots, + Fishing_MonOnHook, // FISHING_ON_HOOK + Fishing_StartEncounter, + Fishing_NotEvenNibble, // FISHING_NO_BITE + Fishing_GotAway, // FISHING_GOT_AWAY + Fishing_NoMon, // FISHING_SHOW_RESULT + Fishing_PutRodAway, + Fishing_EndNoMon, +}; + void StartFishing(u8 rod) { u8 taskId = CreateTask(Task_Fishing, 0xFF); @@ -1720,7 +1722,7 @@ static void Task_Fishing(u8 taskId) ; } -static bool8 Fishing1(struct Task *task) +static bool8 Fishing_Init(struct Task *task) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; @@ -1728,14 +1730,22 @@ static bool8 Fishing1(struct Task *task) return FALSE; } -static bool8 Fishing2(struct Task *task) +static bool8 Fishing_GetRodOut(struct Task *task) { struct ObjectEvent *playerObjEvent; - const s16 arr1[] = {1, 1, 1}; - const s16 arr2[] = {1, 3, 6}; + const s16 minRounds1[] = { + [OLD_ROD] = 1, + [GOOD_ROD] = 1, + [SUPER_ROD] = 1 + }; + const s16 minRounds2[] = { + [OLD_ROD] = 1, + [GOOD_ROD] = 3, + [SUPER_ROD] = 6 + }; task->tRoundsPlayed = 0; - task->tMinRoundsRequired = arr1[task->tFishingRod] + (Random() % arr2[task->tFishingRod]); + task->tMinRoundsRequired = minRounds1[task->tFishingRod] + (Random() % minRounds2[task->tFishingRod]); task->tPlayerGfxId = gObjectEvents[gPlayerAvatar.objectEventId].graphicsId; playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventClearHeldMovementIfActive(playerObjEvent); @@ -1745,7 +1755,7 @@ static bool8 Fishing2(struct Task *task) return FALSE; } -static bool8 Fishing3(struct Task *task) +static bool8 Fishing_WaitBeforeDots(struct Task *task) { AlignFishingAnimationFrames(); @@ -1756,7 +1766,7 @@ static bool8 Fishing3(struct Task *task) return FALSE; } -static bool8 Fishing4(struct Task *task) +static bool8 Fishing_InitDots(struct Task *task) { u32 randVal; @@ -1774,8 +1784,7 @@ static bool8 Fishing4(struct Task *task) return TRUE; } -// Play a round of the dot game -static bool8 Fishing5(struct Task *task) +static bool8 Fishing_ShowDots(struct Task *task) { const u8 dot[] = _("·"); @@ -1810,8 +1819,7 @@ static bool8 Fishing5(struct Task *task) } } -// Determine if fish bites -static bool8 Fishing6(struct Task *task) +static bool8 Fishing_CheckForBite(struct Task *task) { bool8 bite; @@ -1831,34 +1839,25 @@ static bool8 Fishing6(struct Task *task) if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD) { if (Random() % 100 > 14) - { bite = TRUE; - } } } if (!bite) { if (Random() & 1) - { task->tStep = FISHING_NO_BITE; - } else - { bite = TRUE; - } } if (bite == TRUE) - { StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); - } } return TRUE; } -// Oh! A Bite! -static bool8 Fishing7(struct Task *task) +static bool8 Fishing_GotBite(struct Task *task) { AlignFishingAnimationFrames(); AddTextPrinterParameterized(0, 1, gText_OhABite, 0, 17, 0, NULL); @@ -1868,9 +1867,13 @@ static bool8 Fishing7(struct Task *task) } // We have a bite. Now, wait for the player to press A, or the timer to expire. -static bool8 Fishing8(struct Task *task) +static bool8 Fishing_WaitForA(struct Task *task) { - const s16 reelTimeouts[3] = {36, 33, 30}; + const s16 reelTimeouts[3] = { + [OLD_ROD] = 36, + [GOOD_ROD] = 33, + [SUPER_ROD] = 30 + }; AlignFishingAnimationFrames(); task->tFrameCounter++; @@ -1882,13 +1885,13 @@ static bool8 Fishing8(struct Task *task) } // Determine if we're going to play the dot game again -static bool8 Fishing9(struct Task *task) +static bool8 Fishing_CheckMoreDots(struct Task *task) { - const s16 arr[][2] = + const s16 moreDotsChance[][2] = { - {0, 0}, - {40, 10}, - {70, 30} + [OLD_ROD] = {0, 0}, + [GOOD_ROD] = {40, 10}, + [SUPER_ROD] = {70, 30} }; AlignFishingAnimationFrames(); @@ -1902,13 +1905,13 @@ static bool8 Fishing9(struct Task *task) // probability of having to play another round s16 probability = Random() % 100; - if (arr[task->tFishingRod][task->tRoundsPlayed] > probability) + if (moreDotsChance[task->tFishingRod][task->tRoundsPlayed] > probability) task->tStep = FISHING_START_ROUND; } return FALSE; } -static bool8 Fishing10(struct Task *task) +static bool8 Fishing_MonOnHook(struct Task *task) { AlignFishingAnimationFrames(); FillWindowPixelBuffer(0, PIXEL_FILL(1)); @@ -1918,7 +1921,7 @@ static bool8 Fishing10(struct Task *task) return FALSE; } -static bool8 Fishing11(struct Task *task) +static bool8 Fishing_StartEncounter(struct Task *task) { if (task->tFrameCounter == 0) AlignFishingAnimationFrames(); @@ -1948,14 +1951,13 @@ static bool8 Fishing11(struct Task *task) gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); FishingWildEncounter(task->tFishingRod); - sub_80ED950(1); + RecordFishingAttemptForTV(TRUE); DestroyTask(FindTaskIdByFunc(Task_Fishing)); } return FALSE; } -// Not even a nibble -static bool8 Fishing12(struct Task *task) +static bool8 Fishing_NotEvenNibble(struct Task *task) { AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); @@ -1965,8 +1967,7 @@ static bool8 Fishing12(struct Task *task) return TRUE; } -// It got away -static bool8 Fishing13(struct Task *task) +static bool8 Fishing_GotAway(struct Task *task) { AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); @@ -1976,15 +1977,14 @@ static bool8 Fishing13(struct Task *task) return TRUE; } -// Wait one second -static bool8 Fishing14(struct Task *task) +static bool8 Fishing_NoMon(struct Task *task) { AlignFishingAnimationFrames(); task->tStep++; return FALSE; } -static bool8 Fishing15(struct Task *task) +static bool8 Fishing_PutRodAway(struct Task *task) { AlignFishingAnimationFrames(); if (gSprites[gPlayerAvatar.spriteId].animEnded) @@ -2002,7 +2002,7 @@ static bool8 Fishing15(struct Task *task) return FALSE; } -static bool8 Fishing16(struct Task *task) +static bool8 Fishing_EndNoMon(struct Task *task) { RunTextPrinters(); if (!IsTextPrinterActive(0)) @@ -2011,7 +2011,7 @@ static bool8 Fishing16(struct Task *task) ScriptContext2_Disable(); UnfreezeObjectEvents(); ClearDialogWindowAndFrame(0, TRUE); - sub_80ED950(0); + RecordFishingAttemptForTV(FALSE); DestroyTask(FindTaskIdByFunc(Task_Fishing)); } return FALSE; diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 57dc27ed9b..9bdf98d689 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -979,7 +979,7 @@ void AnimateFlash(u8 flashLevel) u8 value = 0; if (!flashLevel) value = 1; - sub_80AFFDC(120, 80, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1); + sub_80AFFDC(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1); sub_80AFFB8(); ScriptContext2_Enable(); } @@ -988,14 +988,14 @@ void WriteFlashScanlineEffectBuffer(u8 flashLevel) { if (flashLevel) { - SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, sFlashLevelPixelRadii[flashLevel]); + SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[flashLevel]); CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480); } } void WriteBattlePyramidViewScanlineEffectBuffer(void) { - SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, gSaveBlock2Ptr->frontier.pyramidLightRadius); + SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, gSaveBlock2Ptr->frontier.pyramidLightRadius); CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480); } diff --git a/src/tv.c b/src/tv.c index 17a02be6b9..d48d48bb36 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1836,31 +1836,25 @@ static void TryEndMassOutbreak(u16 days) gSaveBlock1Ptr->outbreakDaysLeft -= days; } -void sub_80ED950(bool8 flag) +void RecordFishingAttemptForTV(bool8 caughtFish) { - if (flag) + if (caughtFish) { if (sPokemonAnglerAttemptCounters >> 8 > 4) - { PutFishingAdviceShowOnTheAir(); - } + sPokemonAnglerAttemptCounters &= 0xFF; if (sPokemonAnglerAttemptCounters != 0xFF) - { sPokemonAnglerAttemptCounters += 0x01; - } } else { if ((u8)sPokemonAnglerAttemptCounters > 4) - { PutFishingAdviceShowOnTheAir(); - } + sPokemonAnglerAttemptCounters &= 0xFF00; if (sPokemonAnglerAttemptCounters >> 8 != 0xFF) - { sPokemonAnglerAttemptCounters += 0x0100; - } } } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 7d20b2476f..e486cd2f87 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -185,13 +185,6 @@ static u8 ChooseWildMonIndex_WaterRock(void) return 4; } -enum -{ - OLD_ROD, - GOOD_ROD, - SUPER_ROD -}; - static u8 ChooseWildMonIndex_Fishing(u8 rod) { u8 wildMonIndex = 0; From c84f98a7ff229ab8b09053fae8d66506764ce099 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 29 Jun 2020 17:24:17 -0400 Subject: [PATCH 05/85] Document misc field control --- include/field_screen_effect.h | 2 +- src/field_control_avatar.c | 2 +- src/field_screen_effect.c | 15 ++++++++------- src/scrcmd.c | 3 ++- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index de472da3c3..951bf07886 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -28,7 +28,7 @@ void DoFallWarp(void); void DoEscalatorWarp(u8 metatileBehavior); void DoLavaridgeGymB1FWarp(void); void DoLavaridgeGym1FWarp(void); -void DoTeleportWarp(void); +void DoTeleportTileWarp(void); void DoMossdeepGymWarp(void); void DoPortholeWarp(void); void DoCableClubWarp(void); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 5a47f13542..3684b53e6d 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -725,7 +725,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB } if (MetatileBehavior_IsAquaHideoutWarp(metatileBehavior) == TRUE) { - DoTeleportWarp(); + DoTeleportTileWarp(); return TRUE; } if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 9bdf98d689..e14efce677 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -44,7 +44,7 @@ static void sub_808115C(u8); static void FillPalBufferWhite(void); static void Task_ExitDoor(u8); static bool32 WaitForWeatherFadeIn(void); -static void task0A_mpl_807E31C(u8 taskId); +static void Task_TeleportTileWarpExit(u8 taskId); static void Task_WarpAndLoadMap(u8 taskId); static void Task_DoDoorWarp(u8 taskId); static void Task_EnableScriptAfterMusicFade(u8 taskId); @@ -297,12 +297,12 @@ void FieldCB_WarpExitFadeFromBlack(void) ScriptContext2_Enable(); } -static void FieldCB_TeleportWarpExit(void) +static void FieldCB_TeleportTileWarpExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); PlaySE(SE_TK_WARPOUT); - CreateTask(task0A_mpl_807E31C, 10); + CreateTask(Task_TeleportTileWarpExit, 10); ScriptContext2_Enable(); } @@ -545,14 +545,15 @@ void DoLavaridgeGym1FWarp(void) StartLavaridgeGym1FWarp(10); } -void DoTeleportWarp(void) +// Warp from a teleporting tile, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut) +void DoTeleportTileWarp(void) { ScriptContext2_Enable(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlaySE(SE_TK_WARPIN); CreateTask(Task_WarpAndLoadMap, 10); - gFieldCallback = FieldCB_TeleportWarpExit; + gFieldCallback = FieldCB_TeleportTileWarpExit; } void DoMossdeepGymWarp(void) @@ -999,7 +1000,7 @@ void WriteBattlePyramidViewScanlineEffectBuffer(void) CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480); } -static void task0A_mpl_807E31C(u8 taskId) +static void Task_TeleportTileWarpExit(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1056,7 +1057,7 @@ void sub_80B0244(void) { ScriptContext2_Enable(); CreateTask(Task_WarpAndLoadMap, 10); - gFieldCallback = FieldCB_TeleportWarpExit; + gFieldCallback = FieldCB_TeleportTileWarpExit; } void sub_80B0268(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index 9e62c45c5f..3b5003c3bc 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -801,6 +801,7 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) return TRUE; } +// RS mossdeep gym warp, unused in Emerald bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); @@ -810,7 +811,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); SetWarpDestination(mapGroup, mapNum, warpId, x, y); - DoTeleportWarp(); + DoTeleportTileWarp(); ResetInitialPlayerAvatarState(); return TRUE; } From 8589e138a82b74bbfdaec6008cb389e5d5e8cce8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 2 Jul 2020 00:17:14 -0400 Subject: [PATCH 06/85] Eliminate METATILE_ID() macro --- src/braille_puzzles.c | 36 +++--- src/field_effect.c | 4 +- src/field_special_scene.c | 12 +- src/field_specials.c | 236 +++++++++++++++++++------------------- src/field_tasks.c | 62 +++++----- src/fldeff_escalator.c | 42 +++---- src/mirage_tower.c | 36 +++--- 7 files changed, 214 insertions(+), 214 deletions(-) diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 3802b9ecaa..a3862c7160 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -87,12 +87,12 @@ bool8 ShouldDoBrailleDigEffect(void) void DoBrailleDigEffect(void) { - MapGridSetMetatileIdAt(16, 8, METATILE_ID(Cave, SealedChamberEntrance_TopLeft)); - MapGridSetMetatileIdAt(17, 8, METATILE_ID(Cave, SealedChamberEntrance_TopMid)); - MapGridSetMetatileIdAt(18, 8, METATILE_ID(Cave, SealedChamberEntrance_TopRight)); - MapGridSetMetatileIdAt(16, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(17, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomMid)); - MapGridSetMetatileIdAt(18, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(16, 8, METATILE_Cave_SealedChamberEntrance_TopLeft); + MapGridSetMetatileIdAt(17, 8, METATILE_Cave_SealedChamberEntrance_TopMid); + MapGridSetMetatileIdAt(18, 8, METATILE_Cave_SealedChamberEntrance_TopRight); + MapGridSetMetatileIdAt(16, 9, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(17, 9, METATILE_Cave_SealedChamberEntrance_BottomMid); + MapGridSetMetatileIdAt(18, 9, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BAN); FlagSet(FLAG_SYS_BRAILLE_DIG); @@ -280,12 +280,12 @@ void UseRegirockHm_Callback(void) void DoBrailleRegirockEffect(void) { - MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft)); - MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid)); - MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight)); - MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid)); - MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft); + MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid); + MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight); + MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid); + MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BAN); FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED); @@ -319,12 +319,12 @@ void UseRegisteelHm_Callback(void) void DoBrailleRegisteelEffect(void) { - MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft)); - MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid)); - MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight)); - MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid)); - MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft); + MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid); + MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight); + MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid); + MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BAN); FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED); diff --git a/src/field_effect.c b/src/field_effect.c index b681fc70ea..c2302eed95 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3816,7 +3816,7 @@ static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite) sprite->pos1.y += 12; break; } - if ((u16)(sprite->pos1.x + 4) > 248 || sprite->pos1.y < -4 || sprite->pos1.y > 164) + if ((u16)(sprite->pos1.x + 4) > DISPLAY_WIDTH + 8 || sprite->pos1.y < -4 || sprite->pos1.y > DISPLAY_HEIGHT + 4) DestroySprite(sprite); } @@ -3834,7 +3834,7 @@ bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite) xPos = (gFieldEffectArguments[3] - xPos) * 16; yPos = (gFieldEffectArguments[4] - yPos) * 16; ShiftObjectEventCoords(object, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7); - taskId = CreateTask(Task_MoveDeoxysRock, 0x50); + taskId = CreateTask(Task_MoveDeoxysRock, 80); gTasks[taskId].data[1] = object->spriteId; gTasks[taskId].data[2] = gSprites[object->spriteId].pos1.x + xPos; gTasks[taskId].data[3] = gSprites[object->spriteId].pos1.y + yPos; diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 540bcd1d42..e19e31361c 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -216,9 +216,9 @@ void Task_HandleTruckSequence(u8 taskId) data[1]++; if (data[1] == 120) { - MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, ExitLight_Top)); - MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, ExitLight_Mid)); - MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, ExitLight_Bottom)); + MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_ExitLight_Top); + MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_ExitLight_Mid); + MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_ExitLight_Bottom); DrawWholeMapView(); PlaySE(SE_TRACK_DOOR); DestroyTask(taskId); @@ -230,9 +230,9 @@ void Task_HandleTruckSequence(u8 taskId) void ExecuteTruckSequence(void) { - MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, DoorClosedFloor_Top)); - MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, DoorClosedFloor_Mid)); - MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, DoorClosedFloor_Bottom)); + MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_DoorClosedFloor_Top); + MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_DoorClosedFloor_Mid); + MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_DoorClosedFloor_Bottom); DrawWholeMapView(); ScriptContext2_Enable(); CpuFastFill(0, gPlttBufferFaded, 0x400); diff --git a/src/field_specials.c b/src/field_specials.c index 818cd70db3..e1d336d21d 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -656,9 +656,9 @@ void MauvilleGymPressSwitch(void) for (i = 0; i < ARRAY_COUNT(sMauvilleGymSwitchCoords); i++) { if (i == gSpecialVar_0x8004) - MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, PressedSwitch)); + MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_MauvilleGym_PressedSwitch); else - MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, RaisedSwitch)); + MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_MauvilleGym_RaisedSwitch); } } @@ -673,83 +673,83 @@ void MauvilleGymSetDefaultBarriers(void) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_ID(MauvilleGym, GreenBeamH1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off)); + case METATILE_MauvilleGym_GreenBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamH2_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off)); + case METATILE_MauvilleGym_GreenBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamH3_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off)); + case METATILE_MauvilleGym_GreenBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamH4_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off)); + case METATILE_MauvilleGym_GreenBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamH1_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_On)); + case METATILE_MauvilleGym_GreenBeamH1_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_On); break; - case METATILE_ID(MauvilleGym, GreenBeamH2_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_On)); + case METATILE_MauvilleGym_GreenBeamH2_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On); break; - case METATILE_ID(MauvilleGym, GreenBeamH3_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_GreenBeamH3_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, GreenBeamH4_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_GreenBeamH4_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, RedBeamH1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off)); + case METATILE_MauvilleGym_RedBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH2_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off)); + case METATILE_MauvilleGym_RedBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH3_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off)); + case METATILE_MauvilleGym_RedBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH4_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off)); + case METATILE_MauvilleGym_RedBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH1_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_On)); + case METATILE_MauvilleGym_RedBeamH1_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_On); break; - case METATILE_ID(MauvilleGym, RedBeamH2_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_On)); + case METATILE_MauvilleGym_RedBeamH2_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On); break; - case METATILE_ID(MauvilleGym, RedBeamH3_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_RedBeamH3_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, RedBeamH4_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_RedBeamH4_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, GreenBeamV1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_GreenBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, GreenBeamV2_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile)); + case METATILE_MauvilleGym_GreenBeamV2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); break; - case METATILE_ID(MauvilleGym, RedBeamV1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_RedBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, RedBeamV2_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile)); + case METATILE_MauvilleGym_RedBeamV2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); break; - case METATILE_ID(MauvilleGym, PoleBottom_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV1_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_PoleBottom_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV1_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, FloorTile): - if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_ID(MauvilleGym, GreenBeamV1_On)) - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV2_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_FloorTile: + if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_MauvilleGym_GreenBeamV1_On) + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV2_On | METATILE_COLLISION_MASK); else - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV2_On) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, PoleBottom_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV1_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_PoleBottom_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV1_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, PoleTop_Off): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_PoleTop_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, PoleTop_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off)); + case METATILE_MauvilleGym_PoleTop_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off); break; } } @@ -763,7 +763,7 @@ void MauvilleGymDeactivatePuzzle(void) const struct UCoords8 *switchCoords = sMauvilleGymSwitchCoords; for (i = ARRAY_COUNT(sMauvilleGymSwitchCoords) - 1; i >= 0; i--) { - MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_ID(MauvilleGym, PressedSwitch)); + MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_MauvilleGym_PressedSwitch); switchCoords++; } for (y = 12; y < 24; y++) @@ -772,42 +772,42 @@ void MauvilleGymDeactivatePuzzle(void) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_ID(MauvilleGym, GreenBeamH1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off)); + case METATILE_MauvilleGym_GreenBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamH2_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off)); + case METATILE_MauvilleGym_GreenBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamH3_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off)); + case METATILE_MauvilleGym_GreenBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamH4_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off)); + case METATILE_MauvilleGym_GreenBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off)); + case METATILE_MauvilleGym_RedBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH2_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off)); + case METATILE_MauvilleGym_RedBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH3_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off)); + case METATILE_MauvilleGym_RedBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off); break; - case METATILE_ID(MauvilleGym, RedBeamH4_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off)); + case METATILE_MauvilleGym_RedBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off); break; - case METATILE_ID(MauvilleGym, GreenBeamV1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_GreenBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, RedBeamV1_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK); + case METATILE_MauvilleGym_RedBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK); break; - case METATILE_ID(MauvilleGym, GreenBeamV2_On): - case METATILE_ID(MauvilleGym, RedBeamV2_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile)); + case METATILE_MauvilleGym_GreenBeamV2_On: + case METATILE_MauvilleGym_RedBeamV2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); break; - case METATILE_ID(MauvilleGym, PoleTop_On): - MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off)); + case METATILE_MauvilleGym_PoleTop_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off); break; } } @@ -817,11 +817,11 @@ void MauvilleGymDeactivatePuzzle(void) static const bool8 sSlidingDoorNextFrameDelay[] = {0, 1, 1, 1, 1}; static const u16 sPetalburgGymSlidingDoorMetatiles[] = { - METATILE_ID(PetalburgGym, SlidingDoor_Frame0), - METATILE_ID(PetalburgGym, SlidingDoor_Frame1), - METATILE_ID(PetalburgGym, SlidingDoor_Frame2), - METATILE_ID(PetalburgGym, SlidingDoor_Frame3), - METATILE_ID(PetalburgGym, SlidingDoor_Frame4), + METATILE_PetalburgGym_SlidingDoor_Frame0, + METATILE_PetalburgGym_SlidingDoor_Frame1, + METATILE_PetalburgGym_SlidingDoor_Frame2, + METATILE_PetalburgGym_SlidingDoor_Frame3, + METATILE_PetalburgGym_SlidingDoor_Frame4, }; void PetalburgGymSlideOpenRoomDoors(void) @@ -1096,30 +1096,30 @@ static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy) { if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) { - tileId = METATILE_ID(Building, PC_Off); + tileId = METATILE_Building_PC_Off; } else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) { - tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off); + tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; } else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) { - tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off); + tileId = METATILE_BrendansMaysHouse_MayPC_Off; } } else { if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) { - tileId = METATILE_ID(Building, PC_On); + tileId = METATILE_Building_PC_On; } else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) { - tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_On); + tileId = METATILE_BrendansMaysHouse_BrendanPC_On; } else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) { - tileId = METATILE_ID(BrendansMaysHouse, MayPC_On); + tileId = METATILE_BrendansMaysHouse_MayPC_On; } } MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK); @@ -1153,15 +1153,15 @@ static void PCTurnOffEffect(void) } if (gSpecialVar_0x8004 == 0) { - tileId = METATILE_ID(Building, PC_Off); + tileId = METATILE_Building_PC_Off; } else if (gSpecialVar_0x8004 == 1) { - tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off); + tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; } else if (gSpecialVar_0x8004 == 2) { - tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off); + tileId = METATILE_BrendansMaysHouse_MayPC_Off; } MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK); DrawWholeMapView(); @@ -1196,13 +1196,13 @@ static void LotteryCornerComputerEffect(struct Task *task) task->data[3] = 0; if (task->data[4] != 0) { - MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK); } else { - MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Flash) | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Flash) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Flash | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Flash | METATILE_COLLISION_MASK); } DrawWholeMapView(); task->data[4] ^= 1; @@ -1216,8 +1216,8 @@ static void LotteryCornerComputerEffect(struct Task *task) void EndLotteryCornerComputerEffect(void) { - MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK); DrawWholeMapView(); } @@ -1751,38 +1751,38 @@ const u8 *const gDeptStoreFloorNames[] = static const u16 sElevatorWindowTiles_Ascending[][3] = { { - METATILE_ID(BattleFrontier, Elevator_Top0), - METATILE_ID(BattleFrontier, Elevator_Top1), - METATILE_ID(BattleFrontier, Elevator_Top2) + METATILE_BattleFrontier_Elevator_Top0, + METATILE_BattleFrontier_Elevator_Top1, + METATILE_BattleFrontier_Elevator_Top2 }, { - METATILE_ID(BattleFrontier, Elevator_Mid0), - METATILE_ID(BattleFrontier, Elevator_Mid1), - METATILE_ID(BattleFrontier, Elevator_Mid2) + METATILE_BattleFrontier_Elevator_Mid0, + METATILE_BattleFrontier_Elevator_Mid1, + METATILE_BattleFrontier_Elevator_Mid2 }, { - METATILE_ID(BattleFrontier, Elevator_Bottom0), - METATILE_ID(BattleFrontier, Elevator_Bottom1), - METATILE_ID(BattleFrontier, Elevator_Bottom2) + METATILE_BattleFrontier_Elevator_Bottom0, + METATILE_BattleFrontier_Elevator_Bottom1, + METATILE_BattleFrontier_Elevator_Bottom2 }, }; static const u16 sElevatorWindowTiles_Descending[][3] = { { - METATILE_ID(BattleFrontier, Elevator_Top0), - METATILE_ID(BattleFrontier, Elevator_Top2), - METATILE_ID(BattleFrontier, Elevator_Top1) + METATILE_BattleFrontier_Elevator_Top0, + METATILE_BattleFrontier_Elevator_Top2, + METATILE_BattleFrontier_Elevator_Top1 }, { - METATILE_ID(BattleFrontier, Elevator_Mid0), - METATILE_ID(BattleFrontier, Elevator_Mid2), - METATILE_ID(BattleFrontier, Elevator_Mid1) + METATILE_BattleFrontier_Elevator_Mid0, + METATILE_BattleFrontier_Elevator_Mid2, + METATILE_BattleFrontier_Elevator_Mid1 }, { - METATILE_ID(BattleFrontier, Elevator_Bottom0), - METATILE_ID(BattleFrontier, Elevator_Bottom2), - METATILE_ID(BattleFrontier, Elevator_Bottom1) + METATILE_BattleFrontier_Elevator_Bottom0, + METATILE_BattleFrontier_Elevator_Bottom2, + METATILE_BattleFrontier_Elevator_Bottom1 }, }; diff --git a/src/field_tasks.c b/src/field_tasks.c index 21b2732c34..de2884e49f 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -52,26 +52,26 @@ static const TaskFunc sPerStepCallbacks[] = // they are in pairs but declared as 1D array static const struct PacifidlogMetatileOffsets sHalfSubmergedBridgeMetatileOffsets[] = { - { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}, - { 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}, - { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}, - {-1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)} + { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1}, + { 0, -1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1}, + { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1}, + {-1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1} }; static const struct PacifidlogMetatileOffsets sFullySubmergedBridgeMetatileOffsets[] = { - { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}, - { 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}, - { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}, - {-1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)} + { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_SubmergedLogs_Vertical1}, + { 0, -1, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical1}, + { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1}, + {-1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1} }; static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] = { - { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}, - { 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}, - { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}, - {-1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)} + { 0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_FloatingLogs_Vertical1}, + { 0, -1, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical1}, + { 0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1}, + {-1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1} }; // Each element corresponds to a y coordinate row in the sootopolis gym 1F map. @@ -106,10 +106,10 @@ static const u16 sSootopolisGymIceRowVars[] = }; static const u16 sMuddySlopeMetatiles[] = { - METATILE_ID(General, MuddySlope_Frame0), - METATILE_ID(General, MuddySlope_Frame3), - METATILE_ID(General, MuddySlope_Frame2), - METATILE_ID(General, MuddySlope_Frame1) + METATILE_General_MuddySlope_Frame0, + METATILE_General_MuddySlope_Frame3, + METATILE_General_MuddySlope_Frame2, + METATILE_General_MuddySlope_Frame1 }; static void Task_RunPerStepCallback(u8 taskId) @@ -381,11 +381,11 @@ static void SetLoweredForetreeBridgeMetatile(s16 x, s16 y) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_ID(Fortree, BridgeOverGrass_Raised): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Lowered)); + case METATILE_Fortree_BridgeOverGrass_Raised: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Lowered); break; - case METATILE_ID(Fortree, BridgeOverTrees_Raised): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Lowered)); + case METATILE_Fortree_BridgeOverTrees_Raised: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Lowered); break; } } @@ -398,11 +398,11 @@ static void SetNormalFortreeBridgeMetatile(s16 x, s16 y) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_ID(Fortree, BridgeOverGrass_Lowered): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Raised)); + case METATILE_Fortree_BridgeOverGrass_Lowered: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Raised); break; - case METATILE_ID(Fortree, BridgeOverTrees_Lowered): - MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Raised)); + case METATILE_Fortree_BridgeOverTrees_Lowered: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Raised); break; } } @@ -530,7 +530,7 @@ void SetSootopolisGymCrackedIceMetatiles(void) for (y = 0; y < height; y++) { if (IsIcePuzzleCoordVisited(x, y) == TRUE) - MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_ID(SootopolisGym, Ice_Cracked)); + MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SootopolisGym_Ice_Cracked); } } } @@ -585,7 +585,7 @@ static void SootopolisGymIcePerStepCallback(u8 taskId) x = data[4]; y = data[5]; PlaySE(SE_RU_BARI); - MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Cracked)); + MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Cracked); CurrentMapDrawMetatileAt(x, y); MarkIcePuzzleCoordVisited(x - 7, y - 7); data[1] = 1; @@ -601,7 +601,7 @@ static void SootopolisGymIcePerStepCallback(u8 taskId) x = data[4]; y = data[5]; PlaySE(SE_RU_GASYAN); - MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Broken)); + MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Broken); CurrentMapDrawMetatileAt(x, y); data[1] = 1; } @@ -621,10 +621,10 @@ static void AshGrassPerStepCallback(u8 taskId) data[2] = y; if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y))) { - if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(Fallarbor, AshGrass)) - StartAshFieldEffect(x, y, METATILE_ID(Fallarbor, NormalGrass), 4); + if (MapGridGetMetatileIdAt(x, y) == METATILE_Fallarbor_AshGrass) + StartAshFieldEffect(x, y, METATILE_Fallarbor_NormalGrass, 4); else - StartAshFieldEffect(x, y, METATILE_ID(Lavaridge, NormalGrass), 4); + StartAshFieldEffect(x, y, METATILE_Lavaridge_NormalGrass, 4); if (CheckBagHasItem(ITEM_SOOT_SACK, 1)) { @@ -693,7 +693,7 @@ static void SetMuddySlopeMetatile(s16 *data, s16 x, s16 y) MapGridSetMetatileIdAt(x, y, tile); CurrentMapDrawMetatileAt(x, y); - MapGridSetMetatileIdAt(x, y, METATILE_ID(General, MuddySlope_Frame0)); + MapGridSetMetatileIdAt(x, y, METATILE_General_MuddySlope_Frame0); } static void Task_MuddySlope(u8 taskId) diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index d1f262b5c7..13edda57d2 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -17,45 +17,45 @@ static void Task_DrawTeleporterCable(u8 taskId); #define LAST_ESCALATOR_STAGE (ESCALATOR_STAGES - 1) static const u16 sElevatorMetatiles_1F_0[ESCALATOR_STAGES] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame0) + METATILE_PokemonCenter_Elevator1F_Tile0_Frame2, + METATILE_PokemonCenter_Elevator1F_Tile0_Frame1, + METATILE_PokemonCenter_Elevator1F_Tile0_Frame0 }; static const u16 sElevatorMetatiles_1F_1[ESCALATOR_STAGES] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame0) + METATILE_PokemonCenter_Elevator1F_Tile1_Frame2, + METATILE_PokemonCenter_Elevator1F_Tile1_Frame1, + METATILE_PokemonCenter_Elevator1F_Tile1_Frame0 }; static const u16 sElevatorMetatiles_1F_2[ESCALATOR_STAGES] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame0) + METATILE_PokemonCenter_Elevator1F_Tile2_Frame2, + METATILE_PokemonCenter_Elevator1F_Tile2_Frame1, + METATILE_PokemonCenter_Elevator1F_Tile2_Frame0 }; static const u16 sElevatorMetatiles_1F_3[ESCALATOR_STAGES] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame0) + METATILE_PokemonCenter_Elevator1F_Tile3_Frame2, + METATILE_PokemonCenter_Elevator1F_Tile3_Frame1, + METATILE_PokemonCenter_Elevator1F_Tile3_Frame0 }; static const u16 sElevatorMetatiles_2F_0[ESCALATOR_STAGES] = { - METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame0), - METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame1), - METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame2) + METATILE_PokemonCenter_Elevator2F_Tile0_Frame0, + METATILE_PokemonCenter_Elevator2F_Tile0_Frame1, + METATILE_PokemonCenter_Elevator2F_Tile0_Frame2 }; static const u16 sElevatorMetatiles_2F_1[ESCALATOR_STAGES] = { - METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame0), - METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame1), - METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame2) + METATILE_PokemonCenter_Elevator2F_Tile1_Frame0, + METATILE_PokemonCenter_Elevator2F_Tile1_Frame1, + METATILE_PokemonCenter_Elevator2F_Tile1_Frame2 }; static const u16 sElevatorMetatiles_2F_2[ESCALATOR_STAGES] = { - METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame0), - METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame1), - METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame2) + METATILE_PokemonCenter_Elevator2F_Tile2_Frame0, + METATILE_PokemonCenter_Elevator2F_Tile2_Frame1, + METATILE_PokemonCenter_Elevator2F_Tile2_Frame2 }; #define tState data[0] diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 2a6d6d6c4d..f61f7b9889 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -110,24 +110,24 @@ const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[] = static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] = { - {18, 53, METATILE_ID(Mauville, DeepSand_Center)}, - {19, 53, METATILE_ID(Mauville, DeepSand_Center)}, - {20, 53, METATILE_ID(Mauville, DeepSand_Center)}, - {18, 54, METATILE_ID(Mauville, DeepSand_Center)}, - {19, 54, METATILE_ID(Mauville, DeepSand_Center)}, - {20, 54, METATILE_ID(Mauville, DeepSand_Center)}, - {18, 55, METATILE_ID(Mauville, DeepSand_Center)}, - {19, 55, METATILE_ID(Mauville, DeepSand_Center)}, - {20, 55, METATILE_ID(Mauville, DeepSand_Center)}, - {18, 56, METATILE_ID(Mauville, DeepSand_Center)}, - {19, 56, METATILE_ID(Mauville, DeepSand_Center)}, - {20, 56, METATILE_ID(Mauville, DeepSand_Center)}, - {18, 57, METATILE_ID(Mauville, DeepSand_BottomMid)}, - {19, 57, METATILE_ID(Mauville, DeepSand_BottomMid)}, - {20, 57, METATILE_ID(Mauville, DeepSand_BottomMid)}, - {18, 58, METATILE_ID(General, SandPit_Center)}, - {19, 58, METATILE_ID(General, SandPit_Center)}, - {20, 58, METATILE_ID(General, SandPit_Center)}, + {18, 53, METATILE_Mauville_DeepSand_Center}, + {19, 53, METATILE_Mauville_DeepSand_Center}, + {20, 53, METATILE_Mauville_DeepSand_Center}, + {18, 54, METATILE_Mauville_DeepSand_Center}, + {19, 54, METATILE_Mauville_DeepSand_Center}, + {20, 54, METATILE_Mauville_DeepSand_Center}, + {18, 55, METATILE_Mauville_DeepSand_Center}, + {19, 55, METATILE_Mauville_DeepSand_Center}, + {20, 55, METATILE_Mauville_DeepSand_Center}, + {18, 56, METATILE_Mauville_DeepSand_Center}, + {19, 56, METATILE_Mauville_DeepSand_Center}, + {20, 56, METATILE_Mauville_DeepSand_Center}, + {18, 57, METATILE_Mauville_DeepSand_BottomMid}, + {19, 57, METATILE_Mauville_DeepSand_BottomMid}, + {20, 57, METATILE_Mauville_DeepSand_BottomMid}, + {18, 58, METATILE_General_SandPit_Center}, + {19, 58, METATILE_General_SandPit_Center}, + {20, 58, METATILE_General_SandPit_Center}, }; static const union AnimCmd gSpriteAnim_8617DEC[] = From 1ce929157f6e6825b54ce39d73a41374534998c6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 2 Jul 2020 04:59:52 -0400 Subject: [PATCH 07/85] Clean up field effect doc --- data/field_effect_scripts.s | 74 +++++++------- data/scripts/field_move_scripts.inc | 11 +- data/scripts/flash.inc | 2 +- .../palettes/{02.pal => ash.pal} | 0 .../palettes/{06.pal => cut_grass.pal} | 0 .../palettes/{00.pal => general_0.pal} | 0 .../palettes/{01.pal => general_1.pal} | 0 .../palettes/{05.pal => hof_monitor.pal} | 0 .../palettes/{10.pal => pokeball.pal} | 0 .../palettes/{04.pal => pokeball_glow.pal} | 0 .../{07.pal => secret_power_cave.pal} | 0 .../{08.pal => secret_power_plant.pal} | 0 .../palettes/{03.pal => small_sparkle.pal} | 0 graphics/field_effects/pics/sand_pillar.png | Bin 673 -> 0 bytes .../pics/{unknown_19.png => unused_sand.png} | Bin include/battle_transition.h | 2 +- include/constants/field_effects.h | 34 +++---- include/event_object_movement.h | 2 +- include/event_scripts.h | 7 +- include/fldeff.h | 13 +-- spritesheet_rules.mk | 5 +- src/battle_transition.c | 26 ++--- .../field_effect_object_template_pointers.h | 8 +- src/data/field_effects/field_effect_objects.h | 95 +++++++++--------- .../object_events/object_event_graphics.h | 14 +-- src/event_object_movement.c | 2 +- src/faraway_island.c | 6 +- src/field_effect.c | 48 ++++----- src/field_effect_helpers.c | 18 ++-- src/field_screen_effect.c | 2 - src/field_special_scene.c | 24 ++--- src/fldeff_cut.c | 10 +- src/fldeff_dig.c | 14 +-- src/fldeff_flash.c | 2 +- src/fldeff_misc.c | 31 +++--- src/fldeff_rocksmash.c | 2 +- src/fldeff_strength.c | 19 ++-- 37 files changed, 226 insertions(+), 245 deletions(-) rename graphics/field_effects/palettes/{02.pal => ash.pal} (100%) rename graphics/field_effects/palettes/{06.pal => cut_grass.pal} (100%) rename graphics/field_effects/palettes/{00.pal => general_0.pal} (100%) rename graphics/field_effects/palettes/{01.pal => general_1.pal} (100%) rename graphics/field_effects/palettes/{05.pal => hof_monitor.pal} (100%) rename graphics/field_effects/palettes/{10.pal => pokeball.pal} (100%) rename graphics/field_effects/palettes/{04.pal => pokeball_glow.pal} (100%) rename graphics/field_effects/palettes/{07.pal => secret_power_cave.pal} (100%) rename graphics/field_effects/palettes/{08.pal => secret_power_plant.pal} (100%) rename graphics/field_effects/palettes/{03.pal => small_sparkle.pal} (100%) delete mode 100644 graphics/field_effects/pics/sand_pillar.png rename graphics/field_effects/pics/{unknown_19.png => unused_sand.png} (100%) diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 23b1841224..5c637615df 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -24,9 +24,9 @@ gFieldEffectScriptPointers:: @ 82DB9D4 .4byte gFieldEffectScript_JumpSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH .4byte gFieldEffectScript_LongGrass @ FLDEFF_LONG_GRASS .4byte gFieldEffectScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS - .4byte gFieldEffectScript_Unknown19 @ FLDEFF_UNKNOWN_19 + .4byte gFieldEffectScript_UnusedGrass @ FLDEFF_UNUSED_GRASS .4byte gFieldEffectScript_UnusedGrass2 @ FLDEFF_UNUSED_GRASS_2 - .4byte gFieldEffectScript_Unknown21 @ FLDEFF_UNKNOWN_21 + .4byte gFieldEffectScript_UnusedSand @ FLDEFF_UNUSED_SAND .4byte gFieldEffectScript_WaterSurfacing @ FLDEFF_WATER_SURFACING .4byte gFieldEffectScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE .4byte gFieldEffectScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS @@ -90,11 +90,11 @@ gFieldEffectScript_Shadow:: @ 82DBAF2 field_eff_end gFieldEffectScript_TallGrass:: @ 82DBAF8 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_TallGrass + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_TallGrass field_eff_end gFieldEffectScript_Ripple:: @ 82DBB02 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Ripple + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Ripple field_eff_end gFieldEffectScript_FieldMoveShowMon:: @ 82DBB0C @@ -102,7 +102,7 @@ gFieldEffectScript_FieldMoveShowMon:: @ 82DBB0C field_eff_end gFieldEffectScript_Ash:: @ 82DBB12 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Ash + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Ash field_eff_end gFieldEffectScript_SurfBlob:: @ 82DBB1C @@ -114,7 +114,7 @@ gFieldEffectScript_UseSurf:: @ 82DBB22 field_eff_end gFieldEffectScript_GroundImpactDust:: @ 82DBB28 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Dust + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Dust field_eff_end gFieldEffectScript_UseSecretPowerCave:: @ 82DBB32 @@ -122,47 +122,47 @@ gFieldEffectScript_UseSecretPowerCave:: @ 82DBB32 field_eff_end gFieldEffectScript_JumpTallGrass:: @ 82DBB38 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpTallGrass + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpTallGrass field_eff_end gFieldEffectScript_SandFootprints:: @ 82DBB42 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_SandFootprints + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandFootprints field_eff_end gFieldEffectScript_JumpBigSplash:: @ 82DBB4C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpBigSplash + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpBigSplash field_eff_end gFieldEffectScript_Splash:: @ 82DBB56 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Splash + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Splash field_eff_end gFieldEffectScript_JumpSmallSplash:: @ 82DBB60 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpSmallSplash + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpSmallSplash field_eff_end gFieldEffectScript_LongGrass:: @ 82DBB6A - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_LongGrass + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_LongGrass field_eff_end gFieldEffectScript_JumpLongGrass:: @ 82DBB74 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpLongGrass + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpLongGrass field_eff_end -gFieldEffectScript_Unknown19:: @ 82DBB7E - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Unknown19 +gFieldEffectScript_UnusedGrass:: @ 82DBB7E + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass field_eff_end gFieldEffectScript_UnusedGrass2:: @ 82DBB88 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_UnusedGrass2 + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass2 field_eff_end -gFieldEffectScript_Unknown21:: @ 82DBB92 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown21 +gFieldEffectScript_UnusedSand:: @ 82DBB92 + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_UnusedSand field_eff_end gFieldEffectScript_WaterSurfacing:: @ 82DBB9C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_WaterSurfacing + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_WaterSurfacing field_eff_end gFieldEffectScript_BerryTreeGrowthSparkle:: @ 82DBBA6 @@ -170,12 +170,12 @@ gFieldEffectScript_BerryTreeGrowthSparkle:: @ 82DBBA6 field_eff_end gFieldEffectScript_DeepSandFootprints:: @ 82DBBAC - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_DeepSandFootprints + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_DeepSandFootprints field_eff_end gFieldEffectScript_PokeCenterHeal:: @ 82DBBB6 - field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_PokecenterHeal + field_eff_loadfadedpal gSpritePalette_PokeballGlow + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_PokecenterHeal field_eff_end gFieldEffectScript_UseSecretPowerTree:: @ 82DBBC5 @@ -211,11 +211,11 @@ gFieldEffectScript_QuestionMarkIcon:: @ 82DBBEF field_eff_end gFieldEffectScript_FeetInFlowingWater:: @ 82DBBF5 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_FeetInFlowingWater + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_FeetInFlowingWater field_eff_end gFieldEffectScript_BikeTireTracks:: @ 82DBBFF - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_BikeTireTracks + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_BikeTireTracks field_eff_end gFieldEffectScript_SandDisguisePlaceholder:: @ 82DBC09 @@ -227,7 +227,7 @@ gFieldEffectScript_UseRockSmash:: @ 82DBC0F field_eff_end gFieldEffectScript_UseStrength:: @ 82DBC15 - field_eff_callnative sub_8145E2C + field_eff_callnative FldEff_UseStrength field_eff_end gFieldEffectScript_UseDig:: @ 82DBC1B @@ -235,15 +235,15 @@ gFieldEffectScript_UseDig:: @ 82DBC1B field_eff_end gFieldEffectScript_SandPile:: @ 82DBC21 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_SandPile + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandPile field_eff_end gFieldEffectScript_ShortGrass:: @ 82DBC2B - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_ShortGrass + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_ShortGrass field_eff_end gFieldEffectScript_HotSpringsWater:: @ 82DBC35 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_HotSpringsWater + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_HotSpringsWater field_eff_end gFieldEffectScript_UseWaterfall:: @ 82DBC3F @@ -255,12 +255,12 @@ gFieldEffectScript_UseDive:: @ 82DBC45 field_eff_end gFieldEffectScript_Pokeball:: @ 82DBC4B - field_eff_loadpal gFieldEffectObjectPaletteInfo10 + field_eff_loadpal gSpritePalette_Pokeball field_eff_callnative FldEff_Pokeball field_eff_end gFieldEffectScript_HeartIcon:: @ 82DBC56 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_HeartIcon + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_HeartIcon field_eff_end gFieldEffectScript_Nop47:: @ 82DBC60 @@ -272,11 +272,11 @@ gFieldEffectScript_Nop48:: @ 82DBC66 field_eff_end gFieldEffectScript_AshPuff:: @ 82DBC6C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_AshPuff + field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshPuff field_eff_end gFieldEffectScript_AshLaunch:: @ 82DBC76 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_AshLaunch + field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshLaunch field_eff_end gFieldEffectScript_SweetScent:: @ 82DBC80 @@ -288,11 +288,11 @@ gFieldEffectScript_SandPillar:: @ 82DBC86 field_eff_end gFieldEffectScript_Bubbles:: @ 82DBC90 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Bubbles + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Bubbles field_eff_end gFieldEffectScript_Sparkle:: @ 82DBC9A - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo3, FldEff_Sparkle + field_eff_loadfadedpal_callnative gSpritePalette_SmallSparkle, FldEff_Sparkle field_eff_end gFieldEffectScript_ShowSecretPowerCave:: @ 82DBCA4 @@ -308,7 +308,7 @@ gFieldEffectScript_ShowSecretPowerShrub:: @ 82DBCB8 field_eff_end gFieldEffectScript_ShowCutGrass:: @ 82DBCC2 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo6, FldEff_CutGrass + field_eff_loadfadedpal_callnative gSpritePalette_CutGrass, FldEff_CutGrass field_eff_end gFieldEffectScript_FieldMoveShowMonInit:: @ 82DBCCC @@ -324,8 +324,8 @@ gFieldEffectScript_SecretBaseBootPC:: @ 82DBCD8 field_eff_end gFieldEffectScript_HallOfFameRecord:: @ 82DBCDE - field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo5, FldEff_HallOfFameRecord + field_eff_loadfadedpal gSpritePalette_PokeballGlow + field_eff_loadfadedpal_callnative gSpritePalette_HofMonitor, FldEff_HallOfFameRecord field_eff_end gFieldEffectScript_UseTeleport:: @ 82DBCED diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index c5647daa42..2d689348b0 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -1,4 +1,4 @@ - +@ Interact with cuttable tree EventScript_CutTree:: @ 82906BB lockall goto_if_unset FLAG_BADGE01_GET, EventScript_CheckTreeCantCut @@ -18,7 +18,8 @@ EventScript_CutTree:: @ 82906BB goto EventScript_CutTreeDown end -EventScript_FldEffCut:: @ 8290705 +@ Use cut from party menu +EventScript_UseCut:: @ 8290705 lockall dofieldeffect FLDEFF_USE_CUT_ON_TREE waitstate @@ -58,6 +59,7 @@ Text_CantCut: @ 829077D .string "This tree looks like it can be\n" .string "CUT down!$" +@ Interact with smashable rock EventScript_RockSmash:: @ 82907A6 lockall goto_if_unset FLAG_BADGE03_GET, EventScript_CantSmashRock @@ -77,7 +79,8 @@ EventScript_RockSmash:: @ 82907A6 goto EventScript_SmashRock end -EventScript_RockSmashFromPartyMenu:: @ 82907F0 +@ Use rock smash from party menu +EventScript_UseRockSmash:: @ 82907F0 lockall dofieldeffect FLDEFF_USE_ROCK_SMASH waitstate @@ -141,7 +144,7 @@ EventScript_StrengthBoulder:: @ 82908BA goto EventScript_ActivateStrength end -EventScript_FldEffStrength:: @ 82908FD +EventScript_UseStrength:: @ 82908FD lockall dofieldeffect FLDEFF_USE_STRENGTH waitstate diff --git a/data/scripts/flash.inc b/data/scripts/flash.inc index 916b507194..bb4ae84eb5 100644 --- a/data/scripts/flash.inc +++ b/data/scripts/flash.inc @@ -1,4 +1,4 @@ -EventScript_FldEffFlash:: @ 82926F8 +EventScript_UseFlash:: @ 82926F8 animateflash 1 setflashradius 1 end diff --git a/graphics/field_effects/palettes/02.pal b/graphics/field_effects/palettes/ash.pal similarity index 100% rename from graphics/field_effects/palettes/02.pal rename to graphics/field_effects/palettes/ash.pal diff --git a/graphics/field_effects/palettes/06.pal b/graphics/field_effects/palettes/cut_grass.pal similarity index 100% rename from graphics/field_effects/palettes/06.pal rename to graphics/field_effects/palettes/cut_grass.pal diff --git a/graphics/field_effects/palettes/00.pal b/graphics/field_effects/palettes/general_0.pal similarity index 100% rename from graphics/field_effects/palettes/00.pal rename to graphics/field_effects/palettes/general_0.pal diff --git a/graphics/field_effects/palettes/01.pal b/graphics/field_effects/palettes/general_1.pal similarity index 100% rename from graphics/field_effects/palettes/01.pal rename to graphics/field_effects/palettes/general_1.pal diff --git a/graphics/field_effects/palettes/05.pal b/graphics/field_effects/palettes/hof_monitor.pal similarity index 100% rename from graphics/field_effects/palettes/05.pal rename to graphics/field_effects/palettes/hof_monitor.pal diff --git a/graphics/field_effects/palettes/10.pal b/graphics/field_effects/palettes/pokeball.pal similarity index 100% rename from graphics/field_effects/palettes/10.pal rename to graphics/field_effects/palettes/pokeball.pal diff --git a/graphics/field_effects/palettes/04.pal b/graphics/field_effects/palettes/pokeball_glow.pal similarity index 100% rename from graphics/field_effects/palettes/04.pal rename to graphics/field_effects/palettes/pokeball_glow.pal diff --git a/graphics/field_effects/palettes/07.pal b/graphics/field_effects/palettes/secret_power_cave.pal similarity index 100% rename from graphics/field_effects/palettes/07.pal rename to graphics/field_effects/palettes/secret_power_cave.pal diff --git a/graphics/field_effects/palettes/08.pal b/graphics/field_effects/palettes/secret_power_plant.pal similarity index 100% rename from graphics/field_effects/palettes/08.pal rename to graphics/field_effects/palettes/secret_power_plant.pal diff --git a/graphics/field_effects/palettes/03.pal b/graphics/field_effects/palettes/small_sparkle.pal similarity index 100% rename from graphics/field_effects/palettes/03.pal rename to graphics/field_effects/palettes/small_sparkle.pal diff --git a/graphics/field_effects/pics/sand_pillar.png b/graphics/field_effects/pics/sand_pillar.png deleted file mode 100644 index 1f56c00fcc0ad4b9f36fc9ce748127eba55972ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!VDyr{d%Skq*&4&eH|GXHuiJ>Nn`~{CVK?= zGB8xBF)%c=FfjZA3N^f7U?>G@e3ih!U^Rn*LA+qju0R{0glK?Ih-=W6pe;+1ii?Y{ z9_^me>=+aj^#A|=(qczXpaRAuZ+92A#Izl?Kn{C}r>`sf6E<04YeviG-hn_Nf#gKL zG7t^K3P217sRx*^0=4FPx;TbtoL@W9vFNq|kE>(%O>U;m+t-xDi&!y4Hvc|zW8eSK zUyhcKPx?$d+9o7t_kmOB@BN5#_RI9u{~CMznrDAf>Dzbp1z9!>XYU_STl6+yN#nj2 z`Lvj6T`9|UUh@8>cxDgNl5{)UleZ?sXLIzus`+B2dq#WQZd+rwX!-Bb{l`5gdsh5u)zV*^e{^>B>&i{Xepz4qwZnSd4fDEN=WYc|=A4?N z6JSuLTsv>Wu16vauWL1*-Q8j$U#2TG+vr+PSnJM~x4uVH_*-W<{uJBA7;)v;2klw) zjkXMTRvzOqyjFKu|8SW`4!^6g^Y6Oksh8L;B>#B$>MxuAj_cJs9z}R=ITU_=#WDS~ z9q!B4pJo0!%h=|sPr=0p&pzw6^xA*ilJN0gzu@}GMaMQ@w*MjL`?fsAbptR4R7+eV zN>UO_QmvAUQh^kMk%5tcu7R1Zk!6UXrIoRnm5H&ofq|8Q!Q#VG?kE~^^HVa@DsgML TG;h&wP#k-@`njxgN@xNAt-cCp diff --git a/graphics/field_effects/pics/unknown_19.png b/graphics/field_effects/pics/unused_sand.png similarity index 100% rename from graphics/field_effects/pics/unknown_19.png rename to graphics/field_effects/pics/unused_sand.png diff --git a/include/battle_transition.h b/include/battle_transition.h index 0f583b1019..b2e5efdc97 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -9,7 +9,7 @@ bool8 FldEff_Pokeball(void); void TransitionPhase1_Task_RunFuncs(u8 taskId); void GetBg0TilesDst(u16 **tilemap, u16 **tileset); -extern const struct SpritePalette gFieldEffectObjectPaletteInfo10; +extern const struct SpritePalette gSpritePalette_Pokeball; enum // TRANSITION_MUGSHOT { diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index 7032bc8268..dc1085f7ca 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -20,9 +20,9 @@ #define FLDEFF_JUMP_SMALL_SPLASH 16 #define FLDEFF_LONG_GRASS 17 #define FLDEFF_JUMP_LONG_GRASS 18 -#define FLDEFF_UNKNOWN_19 19 +#define FLDEFF_UNUSED_GRASS 19 #define FLDEFF_UNUSED_GRASS_2 20 -#define FLDEFF_UNKNOWN_21 21 +#define FLDEFF_UNUSED_SAND 21 #define FLDEFF_WATER_SURFACING 22 #define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23 #define FLDEFF_DEEP_SAND_FOOTPRINTS 24 @@ -86,9 +86,9 @@ #define FLDEFFOBJ_JUMP_SMALL_SPLASH 14 #define FLDEFFOBJ_LONG_GRASS 15 #define FLDEFFOBJ_JUMP_LONG_GRASS 16 -#define FLDEFFOBJ_17 17 +#define FLDEFFOBJ_UNUSED_GRASS 17 #define FLDEFFOBJ_UNUSED_GRASS_2 18 -#define FLDEFFOBJ_19 19 +#define FLDEFFOBJ_UNUSED_SAND 19 #define FLDEFFOBJ_WATER_SURFACING 20 #define FLDEFFOBJ_REFLECTION_DISTORTION 21 #define FLDEFFOBJ_SPARKLE 22 @@ -107,19 +107,17 @@ #define FLDEFFOBJ_SMALL_SPARKLE 35 #define FLDEFFOBJ_RAYQUAZA 36 -#define FLDEFF_PAL_TAG_0 0x1000 -#define FLDEFF_PAL_TAG_3 0x1003 -#define FLDEFF_PAL_TAG_4 0x1004 -#define FLDEFF_PAL_TAG_5 0x1005 -#define FLDEFF_PAL_TAG_6 0x1006 -#define FLDEFF_PAL_TAG_7 0x1007 -#define FLDEFF_PAL_TAG_8 0x1008 -#define FLDEFF_PAL_TAG_9 0x1009 -#define FLDEFF_PAL_TAG_10 0x100A -#define FLDEFF_PAL_TAG_13 0x100D -#define FLDEFF_PAL_TAG_14 0x100E -#define FLDEFF_PAL_TAG_15 0x100F -#define FLDEFF_PAL_TAG_16 0x1010 -#define FLDEFF_PAL_TAG_17 0x1011 +#define FLDEFF_PAL_TAG_CUT_GRASS 0x1000 +#define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003 +#define FLDEFF_PAL_TAG_GENERAL_0 0x1004 +#define FLDEFF_PAL_TAG_GENERAL_1 0x1005 +#define FLDEFF_PAL_TAG_POKEBALL_GLOW 0x1007 +#define FLDEFF_PAL_TAG_SECRET_POWER_PLANT 0x1008 +#define FLDEFF_PAL_TAG_POKEBALL 0x1009 +#define FLDEFF_PAL_TAG_ASH 0x100D +#define FLDEFF_PAL_TAG_SAND_PILLAR 0x100E +#define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F +#define FLDEFF_PAL_TAG_HOF_MONITOR 0x1010 +#define FLDEFF_PAL_TAG_UNKNOWN 0x1011 #endif // GUARD_FIELD_EFFECT_CONSTANTS_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index fa7cedff07..28443864db 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -100,7 +100,7 @@ void ObjectEventTurnByLocalIdAndMap(u8, u8, u8, u8); const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId); void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8); void FreeAndReserveObjectSpritePalettes(void); -void sub_808E82C(u8, u8, u8, s16, s16); +void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); void sub_808E7E4(u8, u8, u8); void sub_808E78C(u8, u8, u8, u8); void sub_808E75C(s16, s16); diff --git a/include/event_scripts.h b/include/event_scripts.h index 8495b7ee1e..3c43801083 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -372,10 +372,11 @@ extern const u8 SecretBase_Text_Trainer8Defeated[]; extern const u8 SecretBase_Text_Trainer9Defeated[]; //field effects -extern const u8 EventScript_FldEffStrength[]; +extern const u8 EventScript_UseStrength[]; extern const u8 EventScript_FailSweetScent[]; -extern const u8 EventScript_FldEffFlash[]; -extern const u8 EventScript_RockSmashFromPartyMenu[]; +extern const u8 EventScript_UseFlash[]; +extern const u8 EventScript_UseCut[]; +extern const u8 EventScript_UseRockSmash[]; //player pc extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[]; diff --git a/include/fldeff.h b/include/fldeff.h index 99bcdafafe..597ce6f475 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -9,18 +9,9 @@ bool8 FldEff_CutGrass(void); void FixLongGrassMetatilesWindowTop(s16 x, s16 y); void FixLongGrassMetatilesWindowBottom(s16 x, s16 y); -extern const struct SpritePalette gFieldEffectObjectPaletteInfo6; +extern const struct SpritePalette gSpritePalette_CutGrass; extern struct MapPosition gPlayerFacingPosition; -// groundshake -bool8 sub_81BE66C(void); -void sub_81BE6AC(void); -void sub_81BE6B8(void); -void sub_81BE72C(void); -void sub_81BE79C(void); -void sub_81BE7F4(void); -void sub_81BE994(void); - // escalator void StartEscalator(bool8 var); void StopEscalator(void); @@ -39,7 +30,7 @@ bool8 GetMapPairFadeFromType(u8 a1, u8 a2); // strength bool8 SetUpFieldMove_Strength(void); -bool8 sub_8145E2C(void); +bool8 FldEff_UseStrength(void); // sweet scent bool8 SetUpFieldMove_SweetScent(void); diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index 1c858899ce..ae79719602 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -645,7 +645,7 @@ $(FLDEFFGFXDIR)/unknown_17.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/unused_grass_2.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/unknown_19.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/unused_sand.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 $(FLDEFFGFXDIR)/water_surfacing.4bpp: %.4bpp: %.png @@ -672,8 +672,5 @@ $(FLDEFFGFXDIR)/secret_power_shrub.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/secret_power_tree.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/sand_pillar.4bpp: %.4bpp: %.png - $(GFX) $< $@ -mwidth 2 -mheight 4 - $(FLDEFFGFXDIR)/record_mix_lights.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 1 diff --git a/src/battle_transition.c b/src/battle_transition.c index 3e8dbb4e07..8655c9e0e7 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -749,7 +749,7 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_Pokeball[] = static const struct SpriteTemplate sSpriteTemplate_Pokeball = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_9, + .paletteTag = FLDEFF_PAL_TAG_POKEBALL, .oam = &gObjectEventBaseOam_32x32, .anims = sSpriteAnimTable_Pokeball, .images = sSpriteImage_Pokeball, @@ -798,7 +798,7 @@ static const union AnimCmd *const sSpriteAnimTable_UnusedBrendanLass[] = static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_10, + .paletteTag = 0x100A, .oam = &sOam_UnusedBrendanLass, .anims = sSpriteAnimTable_UnusedBrendanLass, .images = sImageTable_UnusedBrendan, @@ -809,7 +809,7 @@ static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan = static const struct SpriteTemplate sSpriteTemplate_UnusedLass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_10, + .paletteTag = 0x100A, .oam = &sOam_UnusedBrendanLass, .anims = sSpriteAnimTable_UnusedBrendanLass, .images = sImageTable_UnusedLass, @@ -817,12 +817,9 @@ static const struct SpriteTemplate sSpriteTemplate_UnusedLass = .callback = SpriteCb_TrainerPic }; -static const u16 gFieldEffectObjectPalette10[] = INCBIN_U16("graphics/field_effects/palettes/10.gbapal"); +static const u16 sFieldEffectPal_Pokeball[] = INCBIN_U16("graphics/field_effects/palettes/pokeball.gbapal"); -const struct SpritePalette gFieldEffectObjectPaletteInfo10 = -{ - gFieldEffectObjectPalette10, FLDEFF_PAL_TAG_9 -}; +const struct SpritePalette gSpritePalette_Pokeball = {sFieldEffectPal_Pokeball, FLDEFF_PAL_TAG_POKEBALL}; static const u16 sMugshotPal_Sidney[] = INCBIN_U16("graphics/battle_transitions/sidney_bg.gbapal"); static const u16 sMugshotPal_Phoebe[] = INCBIN_U16("graphics/battle_transitions/phoebe_bg.gbapal"); @@ -848,10 +845,7 @@ static const u16 *const sPlayerMugshotsPals[GENDER_COUNT] = }; static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); -static const struct SpritePalette sSpritePalette_UnusedTrainer = -{ - sUnusedTrainerPalette, FLDEFF_PAL_TAG_10 -}; +static const struct SpritePalette sSpritePalette_UnusedTrainer = {sUnusedTrainerPalette, 0x100A}; static const u16 sBigPokeball_Tilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_map.bin"); static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/elite_four_bg_map.bin"); @@ -1323,7 +1317,7 @@ static bool8 Phase2_BigPokeball_Func1(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, 0x800); CpuCopy16(sBigPokeball_Tileset, tileset, 0x580); - LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); task->tState++; return FALSE; @@ -1629,7 +1623,7 @@ static bool8 Phase2_PokeballsTrail_Func1(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuSet(sPokeballTrail_Tileset, tileset, 0x20); CpuFill32(0, tilemap, 0x800); - LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); task->tState++; return FALSE; @@ -2919,7 +2913,7 @@ static bool8 Phase2_RectangularSpiral_Func1(struct Task *task) CpuCopy16(sShrinkingBoxTileset, tileset, 0x20); CpuCopy16(sShrinkingBoxTileset + 0x70, tileset + 0x20, 0x20); CpuFill16(0xF000, tilemap, 0x800); - LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); task->tData3 = 1; task->tState++; @@ -3428,7 +3422,7 @@ static bool8 Phase2_GridSquares_Func1(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuSet(sShrinkingBoxTileset, tileset, 0x10); CpuFill16(0xF000, tilemap, 0x800); - LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); task->tState++; return FALSE; diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h index e455daf73e..41d6271bf2 100755 --- a/src/data/field_effects/field_effect_object_template_pointers.h +++ b/src/data/field_effects/field_effect_object_template_pointers.h @@ -15,9 +15,9 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Splash; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash; const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass; const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand; const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing; const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion; const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle; @@ -54,9 +54,9 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_JUMP_SMALL_SPLASH] = &gFieldEffectObjectTemplate_JumpSmallSplash, [FLDEFFOBJ_LONG_GRASS] = &gFieldEffectObjectTemplate_LongGrass, [FLDEFFOBJ_JUMP_LONG_GRASS] = &gFieldEffectObjectTemplate_JumpLongGrass, - [FLDEFFOBJ_17] = &gFieldEffectObjectTemplate_Unknown17, + [FLDEFFOBJ_UNUSED_GRASS] = &gFieldEffectObjectTemplate_UnusedGrass, [FLDEFFOBJ_UNUSED_GRASS_2] = &gFieldEffectObjectTemplate_UnusedGrass2, - [FLDEFFOBJ_19] = &gFieldEffectObjectTemplate_Unknown19, + [FLDEFFOBJ_UNUSED_SAND] = &gFieldEffectObjectTemplate_UnusedSand, [FLDEFFOBJ_WATER_SURFACING] = &gFieldEffectObjectTemplate_WaterSurfacing, [FLDEFFOBJ_REFLECTION_DISTORTION] = &gFieldEffectObjectTemplate_ReflectionDistortion, [FLDEFFOBJ_SPARKLE] = &gFieldEffectObjectTemplate_Sparkle, diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 071beeecd7..1626b9f323 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1,6 +1,5 @@ -const struct SpritePalette gFieldEffectObjectPaletteInfo0 = {gFieldEffectObjectPalette0, FLDEFF_PAL_TAG_4}; - -const struct SpritePalette gFieldEffectObjectPaletteInfo1 = {gFieldEffectObjectPalette1, FLDEFF_PAL_TAG_5}; +const struct SpritePalette gSpritePalette_GeneralFieldEffect0 = {gFieldEffectObjectPalette0, FLDEFF_PAL_TAG_GENERAL_0}; +const struct SpritePalette gSpritePalette_GeneralFieldEffect1 = {gFieldEffectObjectPalette1, FLDEFF_PAL_TAG_GENERAL_1}; static const union AnimCmd sAnim_Shadow[] = { @@ -94,7 +93,7 @@ static const union AnimCmd *const sAnimTable_TallGrass[] = const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_TallGrass, .images = sPicTable_TallGrass, @@ -130,7 +129,7 @@ static const union AnimCmd *const sAnimTable_Ripple[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Ripple, .images = sPicTable_Ripple, @@ -163,7 +162,7 @@ static const union AnimCmd *const sAnimTable_Ash[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Ash = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Ash, .images = sPicTable_Ash, @@ -297,7 +296,7 @@ static const union AnimCmd *const sAnimTable_GroundImpactDust[] = const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_GroundImpactDust, .images = sPicTable_GroundImpactDust, @@ -328,7 +327,7 @@ static const union AnimCmd *const sAnimTable_JumpTallGrass[] = const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_JumpTallGrass, .images = sPicTable_JumpTallGrass, @@ -376,7 +375,7 @@ static const union AnimCmd *const sAnimTable_SandFootprints[] = const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_SandFootprints, .images = sPicTable_SandFootprints, @@ -424,7 +423,7 @@ static const union AnimCmd *const sAnimTable_DeepSandFootprints[] = const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_DeepSandFootprints, .images = sPicTable_DeepSandFootprints, @@ -502,7 +501,7 @@ static const union AnimCmd *const sAnimTable_BikeTireTracks[] = const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_BikeTireTracks, .images = sPicTable_BikeTireTracks, @@ -533,7 +532,7 @@ static const union AnimCmd *const sAnimTable_JumpBigSplash[] = const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_JumpBigSplash, .images = sPicTable_JumpBigSplash, @@ -574,7 +573,7 @@ static const union AnimCmd *const sAnimTable_Splash[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_Splash, .images = sPicTable_Splash, @@ -603,7 +602,7 @@ static const union AnimCmd *const sAnimTable_JumpSmallSplash[] = const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_JumpSmallSplash, .images = sPicTable_JumpSmallSplash, @@ -637,7 +636,7 @@ static const union AnimCmd *const sAnimTable_LongGrass[] = const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_LongGrass, .images = sPicTable_LongGrass, @@ -672,7 +671,7 @@ static const union AnimCmd *const sAnimTable_JumpLongGrass[] = const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_JumpLongGrass, .images = sPicTable_JumpLongGrass, @@ -680,7 +679,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass = { .callback = UpdateJumpImpactEffect, }; -static const struct SpriteFrameImage sPicTable_Unknown17[] = { +static const struct SpriteFrameImage sPicTable_UnusedGrass[] = { overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 6), overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 1), @@ -692,7 +691,7 @@ static const struct SpriteFrameImage sPicTable_Unknown17[] = { overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 7), }; -static const union AnimCmd sAnim_Unknown17[] = +static const union AnimCmd sAnim_UnusedGrass[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 4), @@ -706,17 +705,17 @@ static const union AnimCmd sAnim_Unknown17[] = ANIMCMD_JUMP(7), }; -static const union AnimCmd *const sAnimTable_Unknown17[] = +static const union AnimCmd *const sAnimTable_UnusedGrass[] = { - sAnim_Unknown17, + sAnim_UnusedGrass, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17 = { +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, - .anims = sAnimTable_Unknown17, - .images = sPicTable_Unknown17, + .anims = sAnimTable_UnusedGrass, + .images = sPicTable_UnusedGrass, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; @@ -746,7 +745,7 @@ static const union AnimCmd *const sAnimTable_UnusedGrass2[] = const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2 = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_UnusedGrass2, .images = sPicTable_UnusedGrass2, @@ -754,14 +753,14 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2 = { .callback = WaitFieldEffectSpriteAnim, }; -static const struct SpriteFrameImage sPicTable_Unknown19[] = { - overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 3), +static const struct SpriteFrameImage sPicTable_UnusedSand[] = { + overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 3), }; -static const union AnimCmd sAnim_Unknown19[] = +static const union AnimCmd sAnim_UnusedSand[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -770,17 +769,17 @@ static const union AnimCmd sAnim_Unknown19[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnimTable_Unknown19[] = +static const union AnimCmd *const sAnimTable_UnusedSand[] = { - sAnim_Unknown19, + sAnim_UnusedSand, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19 = { +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, - .anims = sAnimTable_Unknown19, - .images = sPicTable_Unknown19, + .anims = sAnimTable_UnusedSand, + .images = sPicTable_UnusedSand, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; @@ -806,7 +805,7 @@ static const union AnimCmd *const sAnimTable_SandPile[] = const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_SandPile, .images = sPicTable_SandPile, @@ -839,7 +838,7 @@ static const union AnimCmd *const sAnimTable_WaterSurfacing[] = const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_WaterSurfacing, .images = sPicTable_WaterSurfacing, @@ -1092,7 +1091,7 @@ static const union AnimCmd *const sAnimTable_ShortGrass[] = const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_ShortGrass, .images = sPicTable_ShortGrass, @@ -1117,7 +1116,7 @@ static const union AnimCmd *const sAnimTable_HotSpringsWater[] = const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_5, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_HotSpringsWater, .images = sPicTable_HotSpringsWater, @@ -1151,7 +1150,7 @@ static const union AnimCmd *const sAnimTable_AshPuff[] = const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_13, + .paletteTag = FLDEFF_PAL_TAG_ASH, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_AshPuff, .images = sPicTable_AshPuff, @@ -1159,7 +1158,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff = .callback = SpriteCB_AshPuff }; -const struct SpritePalette gFieldEffectObjectPaletteInfo2 = {gFieldEffectObjectPalette2, FLDEFF_PAL_TAG_13}; +const struct SpritePalette gSpritePalette_Ash = {gFieldEffectPal_Ash, FLDEFF_PAL_TAG_ASH}; static const struct SpriteFrameImage sPicTable_AshLaunch[] = { overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 0), @@ -1187,7 +1186,7 @@ static const union AnimCmd *const sAnimTable_AshLaunch[] = const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_13, + .paletteTag = FLDEFF_PAL_TAG_ASH, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_AshLaunch, .images = sPicTable_AshLaunch, @@ -1226,7 +1225,7 @@ static const union AnimCmd *const sAnimTable_Bubbles[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_Bubbles, .images = sPicTable_Bubbles, @@ -1254,7 +1253,7 @@ static const union AnimCmd *const sAnimTable_SmallSparkle[] = const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_15, + .paletteTag = FLDEFF_PAL_TAG_SMALL_SPARKLE, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_SmallSparkle, .images = sPicTable_SmallSparkle, @@ -1262,7 +1261,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle = { .callback = UpdateSparkleFieldEffect, }; -const struct SpritePalette gFieldEffectObjectPaletteInfo3 = {gFieldEffectObjectPalette3, FLDEFF_PAL_TAG_15}; +const struct SpritePalette gSpritePalette_SmallSparkle = {gFieldEffectPal_SmallSparkle, FLDEFF_PAL_TAG_SMALL_SPARKLE}; static const union AnimCmd sAnim_Rayquaza[] = { ANIMCMD_FRAME(0, 1), @@ -1287,4 +1286,4 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { .callback = UpdateRayquazaSpotlightEffect, }; -const struct SpritePalette gFieldEffectObjectPaletteInfoUnused = {gObjectEventPalette2, FLDEFF_PAL_TAG_17}; +static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPalette2, FLDEFF_PAL_TAG_UNKNOWN}; diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 87c0fa8a39..50fc6715c7 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -293,15 +293,15 @@ const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effec const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effects/pics/shadow_medium.4bpp"); const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_large.4bpp"); const u32 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_extra_large.4bpp"); -const u32 filler_8368A08[0x48] = {}; +static const u32 sFiller[0x48] = {}; const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/field_effects/pics/cut_grass.4bpp"); const u32 gFieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effects/pics/cut_grass.4bpp"); -const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/field_effects/palettes/06.gbapal"); +const u16 gFieldEffectPal_CutGrass[] = INCBIN_U16("graphics/field_effects/palettes/cut_grass.gbapal"); const u32 gFieldEffectObjectPic_Ripple[] = INCBIN_U32("graphics/field_effects/pics/ripple.4bpp"); const u32 gFieldEffectObjectPic_Ash[] = INCBIN_U32("graphics/field_effects/pics/ash.4bpp"); const u32 gFieldEffectObjectPic_Arrow[] = INCBIN_U32("graphics/field_effects/pics/arrow.4bpp"); -const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/00.gbapal"); -const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/01.gbapal"); +const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/general_0.gbapal"); +const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/general_1.gbapal"); const u32 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U32("graphics/field_effects/pics/ground_impact_dust.4bpp"); const u32 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U32("graphics/field_effects/pics/jump_tall_grass.4bpp"); const u32 gUnusedGrass3[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_3.4bpp"); @@ -314,7 +314,7 @@ const u32 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U32("graphics/field_effect const u32 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U32("graphics/field_effects/pics/sand_footprints.4bpp"); const u32 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U32("graphics/field_effects/pics/deep_sand_footprints.4bpp"); const u32 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U32("graphics/field_effects/pics/bike_tire_tracks.4bpp"); -const u32 gFieldEffectObjectPic_Unknown19[] = INCBIN_U32("graphics/field_effects/pics/unknown_19.4bpp"); +const u32 gFieldEffectObjectPic_UnusedSand[] = INCBIN_U32("graphics/field_effects/pics/unused_sand.4bpp"); const u32 gFieldEffectObjectPic_SandPile[] = INCBIN_U32("graphics/field_effects/pics/sand_pile.4bpp"); const u32 gFieldEffectObjectPic_JumpBigSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_big_splash.4bpp"); const u32 gFieldEffectObjectPic_Splash[] = INCBIN_U32("graphics/field_effects/pics/splash.4bpp"); @@ -324,12 +324,12 @@ const u32 gFieldEffectObjectPic_TreeDisguise[] = INCBIN_U32("graphics/field_effe const u32 gFieldEffectObjectPic_MountainDisguise[] = INCBIN_U32("graphics/field_effects/pics/mountain_disguise.4bpp"); const u32 gFieldEffectObjectPic_SandDisguisePlaceholder[] = INCBIN_U32("graphics/field_effects/pics/sand_disguise_placeholder.4bpp"); const u32 gFieldEffectObjectPic_HotSpringsWater[] = INCBIN_U32("graphics/field_effects/pics/hot_springs_water.4bpp"); -const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/field_effects/palettes/02.gbapal"); +const u16 gFieldEffectPal_Ash[] = INCBIN_U16("graphics/field_effects/palettes/ash.gbapal"); const u32 gFieldEffectObjectPic_AshPuff[] = INCBIN_U32("graphics/field_effects/pics/ash_puff.4bpp"); const u32 gFieldEffectObjectPic_AshLaunch[] = INCBIN_U32("graphics/field_effects/pics/ash_launch.4bpp"); const u32 gFieldEffectObjectPic_Bubbles[] = INCBIN_U32("graphics/field_effects/pics/bubbles.4bpp"); const u32 gFieldEffectObjectPic_SmallSparkle[] = INCBIN_U32("graphics/field_effects/pics/small_sparkle.4bpp"); -const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/field_effects/palettes/03.gbapal"); +const u16 gFieldEffectPal_SmallSparkle[] = INCBIN_U16("graphics/field_effects/palettes/small_sparkle.gbapal"); const u32 gFieldEffectObjectPic_Bird[] = INCBIN_U32("graphics/field_effects/pics/bird.4bpp"); const u32 gObjectEventPic_Juan[] = INCBIN_U32("graphics/object_events/pics/people/gym_leaders/juan.4bpp"); const u32 gObjectEventPic_Scott[] = INCBIN_U32("graphics/object_events/pics/people/scott.4bpp"); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index c6aa3d9ef0..5e1de36a00 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1948,7 +1948,7 @@ void sub_808E7E4(u8 localId, u8 mapNum, u8 mapGroup) } } -void sub_808E82C(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) { u8 objectEventId; struct Sprite *sprite; diff --git a/src/faraway_island.c b/src/faraway_island.c index 4233c43d80..d66a7c41e0 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -26,7 +26,7 @@ static s16 sPlayerToMewDeltaX; static s16 sPlayerToMewDeltaY; static u8 sMewDirectionCandidates[4]; -extern const struct SpritePalette gFieldEffectObjectPaletteInfo1; +extern const struct SpritePalette gSpritePalette_GeneralFieldEffect1; extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; static const s16 sFarawayIslandRockCoords[4][2] = @@ -374,8 +374,8 @@ void sub_81D4A90(void) if (gSpecialVar_Facing != DIR_NORTH) gSprites[mew->spriteId].subpriority = 1; - LoadSpritePalette(&gFieldEffectObjectPaletteInfo1); - UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(gFieldEffectObjectPaletteInfo1.tag)); + LoadSpritePalette(&gSpritePalette_GeneralFieldEffect1); + UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(gSpritePalette_GeneralFieldEffect1.tag)); x = mew->currentCoords.x; y = mew->currentCoords.y; diff --git a/src/field_effect.c b/src/field_effect.c index c2302eed95..699db4c993 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -246,12 +246,12 @@ static const u32 sNewGameBirch_Gfx[] = INCBIN_U32("graphics/birch_speech/birch.4 static const u32 sUnusedBirchBeauty[] = INCBIN_U32("graphics/unused/intro_birch_beauty.4bpp"); static const u16 sNewGameBirch_Pal[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); static const u32 sPokeballGlow_Gfx[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp"); -static const u16 sFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effects/palettes/04.gbapal"); +static const u16 sPokeballGlow_Pal[16] = INCBIN_U16("graphics/field_effects/palettes/pokeball_glow.gbapal"); static const u32 sPokecenterMonitor0_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); static const u32 sPokecenterMonitor1_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); static const u32 sHofMonitorBig_Gfx[] = INCBIN_U32("graphics/misc/hof_monitor_big.4bpp"); static const u8 sHofMonitorSmall_Gfx[] = INCBIN_U8("graphics/misc/hof_monitor_small.4bpp"); -static const u16 sFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effects/palettes/05.gbapal"); +static const u16 sHofMonitor_Pal[16] = INCBIN_U16("graphics/field_effects/palettes/hof_monitor.gbapal"); // Graphics for the lights streaking past your Pokemon when it uses a field move. static const u32 sFieldMoveStreaksOutdoors_Gfx[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp"); @@ -332,7 +332,7 @@ static const struct SpriteFrameImage sPicTable_NewGameBirch[] = static const struct SpritePalette sSpritePalette_NewGameBirch = { .data = sNewGameBirch_Pal, - .tag = FLDEFF_PAL_TAG_6 + .tag = 0x1006 }; static const union AnimCmd sAnim_NewGameBirch[] = @@ -349,7 +349,7 @@ static const union AnimCmd *const sAnimTable_NewGameBirch[] = static const struct SpriteTemplate sSpriteTemplate_NewGameBirch = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_6, + .paletteTag = 0x1006, .oam = &sOam_64x64, .anims = sAnimTable_NewGameBirch, .images = sPicTable_NewGameBirch, @@ -357,16 +357,16 @@ static const struct SpriteTemplate sSpriteTemplate_NewGameBirch = .callback = SpriteCallbackDummy }; -const struct SpritePalette gFieldEffectObjectPaletteInfo4 = +const struct SpritePalette gSpritePalette_PokeballGlow = { - .data = sFieldEffectObjectPalette4, - .tag = FLDEFF_PAL_TAG_7 + .data = sPokeballGlow_Pal, + .tag = FLDEFF_PAL_TAG_POKEBALL_GLOW }; -const struct SpritePalette gFieldEffectObjectPaletteInfo5 = +const struct SpritePalette gSpritePalette_HofMonitor = { - .data = sFieldEffectObjectPalette5, - .tag = FLDEFF_PAL_TAG_16 + .data = sHofMonitor_Pal, + .tag = FLDEFF_PAL_TAG_HOF_MONITOR }; static const struct OamData sOam_32x16 = @@ -513,7 +513,7 @@ static const union AnimCmd *const sAnimTable_HofMonitor[] = static const struct SpriteTemplate sSpriteTemplate_PokeballGlow = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_7, + .paletteTag = FLDEFF_PAL_TAG_POKEBALL_GLOW, .oam = &sOam_8x8, .anims = gSpriteAnimTable_855C2F8, .images = sPicTable_PokeballGlow, @@ -524,7 +524,7 @@ static const struct SpriteTemplate sSpriteTemplate_PokeballGlow = static const struct SpriteTemplate sSpriteTemplate_PokecenterMonitor = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_4, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &sOam_16x16, .anims = gSpriteAnimTable_855C2F8, .images = sPicTable_PokecenterMonitor, @@ -535,7 +535,7 @@ static const struct SpriteTemplate sSpriteTemplate_PokecenterMonitor = static const struct SpriteTemplate sSpriteTemplate_HofMonitorBig = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_16, + .paletteTag = FLDEFF_PAL_TAG_HOF_MONITOR, .oam = &sOam_16x16, .anims = sAnimTable_HofMonitor, .images = sPicTable_HofMonitorBig, @@ -546,7 +546,7 @@ static const struct SpriteTemplate sSpriteTemplate_HofMonitorBig = static const struct SpriteTemplate sSpriteTemplate_HofMonitorSmall = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_16, + .paletteTag = FLDEFF_PAL_TAG_HOF_MONITOR, .oam = &sOam_32x16, .anims = sAnimTable_HofMonitor, .images = sPicTable_HofMonitorSmall, @@ -1178,14 +1178,14 @@ static void PokeballGlowEffect_Flash1(struct Sprite *sprite) sprite->data[3]++; } phase = (sprite->sCounter + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); if (sprite->data[3] > 2) { sprite->sState++; @@ -1209,11 +1209,11 @@ static void PokeballGlowEffect_Flash2(struct Sprite *sprite) } } phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_7) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); } static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *sprite) diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9950978adf..78948618fb 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -348,7 +348,7 @@ u32 FldEff_JumpTallGrass(void) sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = 12; + sprite->data[1] = FLDEFF_JUMP_TALL_GRASS; } return 0; } @@ -451,7 +451,7 @@ u32 FldEff_JumpLongGrass(void) sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = 18; + sprite->data[1] = FLDEFF_JUMP_LONG_GRASS; } return 0; } @@ -800,19 +800,19 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) } } -u32 FldEff_Unknown19(void) +u32 FldEff_UnusedGrass(void) { u8 spriteId; struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNKNOWN_19; + sprite->data[0] = FLDEFF_UNUSED_GRASS; } return 0; } @@ -834,19 +834,19 @@ u32 FldEff_UnusedGrass2(void) return 0; } -u32 FldEff_Unknown21(void) +u32 FldEff_UnusedSand(void) { u8 spriteId; struct Sprite *sprite; sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_SAND], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNKNOWN_21; + sprite->data[0] = FLDEFF_UNUSED_SAND; } return 0; } @@ -1115,7 +1115,7 @@ u32 FldEff_Dust(void) sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = 10; + sprite->data[1] = FLDEFF_DUST; } return 0; } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index e14efce677..7727f4ac12 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -36,11 +36,9 @@ #include "fldeff.h" // This file's functions. -static void sub_8080B9C(u8); static void Task_ExitNonAnimDoor(u8); static void Task_ExitNonDoor(u8); static void Task_DoContestHallWarp(u8); -static void sub_808115C(u8); static void FillPalBufferWhite(void); static void Task_ExitDoor(u8); static bool32 WaitForWeatherFadeIn(void); diff --git a/src/field_special_scene.c b/src/field_special_scene.c index e19e31361c..df45af0975 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -74,11 +74,11 @@ void Task_Truck1(u8 taskId) s16 box1, box2, box3; box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box. - sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); + SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box. - sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); + SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box. - sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); + SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); if (++data[0] == SECONDS(500)) // this will never run data[0] = 0; // reset the timer if it gets stuck. @@ -117,11 +117,11 @@ void Task_Truck2(u8 taskId) cameraYpan = GetTruckCameraBobbingY(data[2]); SetCameraPanning(cameraXpan, cameraYpan); box1 = GetTruckBoxMovement(data[2] + 30) * 4; - sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); + SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); box2 = GetTruckBoxMovement(data[2]) * 2; - sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); + SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); box3 = GetTruckBoxMovement(data[2]) * 4; - sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); + SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); } } @@ -148,9 +148,9 @@ static void Task_Truck3(u8 taskId) cameraXpan = gTruckCamera_HorizontalTable[data[1]]; cameraYpan = 0; SetCameraPanning(cameraXpan, 0); - sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3); - sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3); - sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan); + SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3); + SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3); + SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan); } } @@ -243,9 +243,9 @@ void EndTruckSequence(u8 taskId) { if (!FuncIsActiveTask(Task_HandleTruckSequence)) { - sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3); - sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3); - sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0); + SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3); + SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3); + SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0); } } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index efd533d083..34868342fb 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -1,6 +1,7 @@ #include "global.h" #include "event_object_lock.h" #include "event_object_movement.h" +#include "event_scripts.h" #include "faraway_island.h" #include "field_camera.h" #include "field_effect.h" @@ -24,11 +25,10 @@ extern struct MapPosition gPlayerFacingPosition; -extern const u8 EventScript_FldEffCut[]; extern const u8 FarawayIsland_Interior_EventScript_HideMewWhenGrassCut[]; extern const u8 gFieldEffectPic_CutGrass[]; -extern const u16 gFieldEffectObjectPalette6[]; +extern const u16 gFieldEffectPal_CutGrass[]; // cut 'square' defines #define CUT_NORMAL_SIDE 3 @@ -122,12 +122,12 @@ static const struct SpriteFrameImage sSpriteImageTable_CutGrass[] = {gFieldEffectPic_CutGrass, 0x20}, }; -const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, FLDEFF_PAL_TAG_0}; +const struct SpritePalette gSpritePalette_CutGrass = {gFieldEffectPal_CutGrass, FLDEFF_PAL_TAG_CUT_GRASS}; static const struct SpriteTemplate sSpriteTemplate_CutGrass = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_0, + .paletteTag = FLDEFF_PAL_TAG_CUT_GRASS, .oam = &sOamData_CutGrass, .anims = sSpriteAnimTable_CutGrass, .images = sSpriteImageTable_CutGrass, @@ -292,7 +292,7 @@ bool8 FldEff_UseCutOnGrass(void) static void FieldCallback_CutTree(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_FldEffCut); + ScriptContext1_SetupScript(EventScript_UseCut); } bool8 FldEff_UseCutOnTree(void) diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c index 322758a421..c3ab989cd8 100644 --- a/src/fldeff_dig.c +++ b/src/fldeff_dig.c @@ -10,8 +10,8 @@ #include "constants/field_effects.h" // static functions -static void hm2_dig(void); -static void sub_8135780(void); +static void FieldCallback_Dig(void); +static void StartDigFieldEffect(void); // text bool8 SetUpFieldMove_Dig(void) @@ -19,7 +19,7 @@ bool8 SetUpFieldMove_Dig(void) if (CanUseDigOrEscapeRopeOnCurMap() == TRUE) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = hm2_dig; + gPostMenuFieldCallback = FieldCallback_Dig; return TRUE; } else @@ -28,7 +28,7 @@ bool8 SetUpFieldMove_Dig(void) } } -static void hm2_dig(void) +static void FieldCallback_Dig(void) { Overworld_ResetStateAfterDigEscRope(); FieldEffectStart(FLDEFF_USE_DIG); @@ -39,14 +39,14 @@ bool8 FldEff_UseDig(void) { u8 taskId = CreateFieldMoveTask(); - gTasks[taskId].data[8] = (u32)sub_8135780 >> 16; - gTasks[taskId].data[9] = (u32)sub_8135780; + gTasks[taskId].data[8] = (u32)StartDigFieldEffect >> 16; + gTasks[taskId].data[9] = (u32)StartDigFieldEffect; if (!ShouldDoBrailleDigEffect()) SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); return FALSE; } -static void sub_8135780(void) +static void StartDigFieldEffect(void) { u8 taskId; diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index d10635a561..2d25928b8a 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -106,7 +106,7 @@ static void FldEff_UseFlash(void) { PlaySE(SE_W115); FlagSet(FLAG_SYS_USE_FLASH); - ScriptContext1_SetupScript(EventScript_FldEffFlash); + ScriptContext1_SetupScript(EventScript_UseFlash); } static void CB2_ChangeMapMain(void) diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index 50feaf3686..6160cae36d 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -65,12 +65,12 @@ static void SpriteCB_SandPillar_End(struct Sprite *); static const u8 sSecretPowerCave_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_cave.4bpp"); static const u8 sFiller[32] = {0}; -static const u16 sSecretPowerCave_Pal[] = INCBIN_U16("graphics/field_effects/palettes/07.gbapal"); +static const u16 sSecretPowerCave_Pal[] = INCBIN_U16("graphics/field_effects/palettes/secret_power_cave.gbapal"); static const u8 sSecretPowerShrub_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_shrub.4bpp"); static const u8 sSecretPowerTree_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_tree.4bpp"); -static const u16 sSecretPowerPlant_Pal[] = INCBIN_U16("graphics/field_effects/palettes/08.gbapal"); +static const u16 sSecretPowerPlant_Pal[] = INCBIN_U16("graphics/field_effects/palettes/secret_power_plant.gbapal"); -// TODO: These should also be combined into a single image +// TODO: These should also be combined into a single image, not matching for some reason static const u8 sSandPillar0_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/0.4bpp"); static const u8 sSandPillar1_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/1.4bpp"); static const u8 sSandPillar2_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/2.4bpp"); @@ -196,7 +196,7 @@ static const struct SpriteFrameImage sPicTable_SecretPowerShrub[] = static const struct SpriteTemplate sSpriteTemplate_SecretPowerCave = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_3, + .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_TREE, .oam = &sOam_SecretPower, .anims = sAnimTable_SecretPowerCave, .images = sPicTable_SecretPowerCave, @@ -207,7 +207,7 @@ static const struct SpriteTemplate sSpriteTemplate_SecretPowerCave = static const struct SpriteTemplate sSpriteTemplate_SecretPowerTree = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_8, + .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT, .oam = &sOam_SecretPower, .anims = sAnimTable_SecretPowerTree, .images = sPicTable_SecretPowerTree, @@ -218,7 +218,7 @@ static const struct SpriteTemplate sSpriteTemplate_SecretPowerTree = static const struct SpriteTemplate sSpriteTemplate_SecretPowerShrub = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_8, + .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT, .oam = &sOam_SecretPower, .anims = sAnimTable_SecretPowerShrub, .images = sPicTable_SecretPowerShrub, @@ -226,8 +226,8 @@ static const struct SpriteTemplate sSpriteTemplate_SecretPowerShrub = .callback = SpriteCB_ShrubEntranceInit, }; -const struct SpritePalette gSpritePalette_SecretPower_Cave = {sSecretPowerCave_Pal, FLDEFF_PAL_TAG_3}; -const struct SpritePalette gSpritePalette_SecretPower_Plant = {sSecretPowerPlant_Pal, FLDEFF_PAL_TAG_8}; +const struct SpritePalette gSpritePalette_SecretPower_Cave = {sSecretPowerCave_Pal, FLDEFF_PAL_TAG_SECRET_POWER_TREE}; +const struct SpritePalette gSpritePalette_SecretPower_Plant = {sSecretPowerPlant_Pal, FLDEFF_PAL_TAG_SECRET_POWER_PLANT}; static const struct OamData sOam_SandPillar = { @@ -256,15 +256,15 @@ static const union AnimCmd *const sAnimTable_SandPillar[] = static const struct SpriteFrameImage sPicTable_SandPillar[] = { - {sSandPillar0_Gfx, 0x100}, - {sSandPillar1_Gfx, 0x100}, - {sSandPillar2_Gfx, 0x100}, + {sSandPillar0_Gfx, sizeof(sSandPillar0_Gfx)}, + {sSandPillar1_Gfx, sizeof(sSandPillar1_Gfx)}, + {sSandPillar2_Gfx, sizeof(sSandPillar2_Gfx)}, }; static const struct SpriteTemplate sSpriteTemplate_SandPillar = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_14, + .paletteTag = FLDEFF_PAL_TAG_SAND_PILLAR, .oam = &sOam_SandPillar, .anims = sAnimTable_SandPillar, .images = sPicTable_SandPillar, @@ -272,8 +272,7 @@ static const struct SpriteTemplate sSpriteTemplate_SandPillar = .callback = SpriteCB_SandPillar_BreakTop, }; -// This uses one of the secret base palettes, so there is no "graphics/field_effects/palettes/09.pal" file. -const struct SpritePalette gSpritePalette_SandPillar = {gTilesetPalettes_SecretBase[5], FLDEFF_PAL_TAG_14}; +const struct SpritePalette gSpritePalette_SandPillar = {gTilesetPalettes_SecretBase[5], FLDEFF_PAL_TAG_SAND_PILLAR}; static const u8 sRecordMixLights_Gfx[] = INCBIN_U8("graphics/field_effects/pics/record_mix_lights.4bpp"); static const u16 sRecordMixLights_Pal[] = INCBIN_U16("graphics/field_effects/palettes/record_mix_lights.gbapal"); @@ -285,7 +284,7 @@ static const struct SpriteFrameImage sPicTable_RecordMixLights[] = overworld_frame(sRecordMixLights_Gfx, 4, 1, 2), }; -static const struct SpritePalette sSpritePalette_RecordMixLights = {sRecordMixLights_Pal, FLDEFF_PAL_TAG_0}; +static const struct SpritePalette sSpritePalette_RecordMixLights = {sRecordMixLights_Pal, 0x1000}; static const union AnimCmd sAnim_RecordMixLights[] = { @@ -303,7 +302,7 @@ static const union AnimCmd *const sAnimTable_RecordMixLights[] = static const struct SpriteTemplate sSpriteTemplate_RecordMixLights = { .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_0, + .paletteTag = 0x1000, .oam = &gObjectEventBaseOam_32x8, .anims = sAnimTable_RecordMixLights, .images = sPicTable_RecordMixLights, diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index ec8e64012a..0c35ec74ed 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -146,7 +146,7 @@ bool8 SetUpFieldMove_RockSmash(void) static void FieldCallback_RockSmash(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_RockSmashFromPartyMenu); + ScriptContext1_SetupScript(EventScript_UseRockSmash); } bool8 FldEff_UseRockSmash(void) diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 800e458212..61960d0ffc 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -11,8 +11,8 @@ #include "constants/field_effects.h" // static functions -static void FldEff_UseStrength(void); -static void sub_8145E74(void); +static void FieldCallback_Strength(void); +static void StartStrengthFieldEffect(void); // text bool8 SetUpFieldMove_Strength(void) @@ -21,28 +21,29 @@ bool8 SetUpFieldMove_Strength(void) { gSpecialVar_Result = GetCursorSelectionMonId(); gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = FldEff_UseStrength; + gPostMenuFieldCallback = FieldCallback_Strength; return TRUE; } return FALSE; } -static void FldEff_UseStrength(void) +static void FieldCallback_Strength(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_FldEffStrength); + ScriptContext1_SetupScript(EventScript_UseStrength); } -bool8 sub_8145E2C(void) +bool8 FldEff_UseStrength(void) { u8 taskId = CreateFieldMoveTask(); - gTasks[taskId].data[8] = (u32)sub_8145E74 >> 16; - gTasks[taskId].data[9] = (u32)sub_8145E74; + gTasks[taskId].data[8] = (u32)StartStrengthFieldEffect >> 16; + gTasks[taskId].data[9] = (u32)StartStrengthFieldEffect; GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1); return FALSE; } -static void sub_8145E74(void) +// Just passes control back to EventScript_UseStrength +static void StartStrengthFieldEffect(void) { FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH); EnableBothScriptContexts(); From c0bc7e8f7b94ebab1e39b761aa194630e4c7bf6b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 6 Jul 2020 16:02:49 -0400 Subject: [PATCH 08/85] Fix elevator metatile typo --- include/constants/metatile_labels.h | 50 ++++++++++----------- src/fldeff_escalator.c | 70 ++++++++++++++--------------- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 5861076872..f7405f46a2 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -289,31 +289,31 @@ #define METATILE_EverGrande_Door_PokemonLeague 0x21D // gTileset_PokemonCenter -#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame0 0x280 -#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame1 0x282 -#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame2 0x284 -#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame0 0x281 -#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame1 0x283 -#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame2 0x285 -#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame0 0x288 -#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame1 0x28A -#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame2 0x28C -#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame0 0x289 -#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame1 0x28B -#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame2 0x28D -#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame0 0x2A0 -#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame1 0x2A2 -#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame2 0x2A4 -#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame0 0x2A1 -#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame1 0x2A3 -#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame2 0x2A5 -#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame0 0x2A8 -#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame1 0x2AA -#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame2 0x2AC -#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 -#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E -#define METATILE_PokemonCenter_CounterBarrier 0x25D +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC +#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC +#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 +#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E +#define METATILE_PokemonCenter_CounterBarrier 0x25D // gTileset_InsideOfTruck #define METATILE_InsideOfTruck_ExitLight_Top 0x208 diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index 13edda57d2..7a96eaa828 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -16,46 +16,46 @@ static void Task_DrawTeleporterCable(u8 taskId); #define ESCALATOR_STAGES 3 #define LAST_ESCALATOR_STAGE (ESCALATOR_STAGES - 1) -static const u16 sElevatorMetatiles_1F_0[ESCALATOR_STAGES] = { - METATILE_PokemonCenter_Elevator1F_Tile0_Frame2, - METATILE_PokemonCenter_Elevator1F_Tile0_Frame1, - METATILE_PokemonCenter_Elevator1F_Tile0_Frame0 +static const u16 sEscalatorMetatiles_1F_0[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator1F_Tile0_Frame2, + METATILE_PokemonCenter_Escalator1F_Tile0_Frame1, + METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 }; -static const u16 sElevatorMetatiles_1F_1[ESCALATOR_STAGES] = { - METATILE_PokemonCenter_Elevator1F_Tile1_Frame2, - METATILE_PokemonCenter_Elevator1F_Tile1_Frame1, - METATILE_PokemonCenter_Elevator1F_Tile1_Frame0 +static const u16 sEscalatorMetatiles_1F_1[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator1F_Tile1_Frame2, + METATILE_PokemonCenter_Escalator1F_Tile1_Frame1, + METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 }; -static const u16 sElevatorMetatiles_1F_2[ESCALATOR_STAGES] = { - METATILE_PokemonCenter_Elevator1F_Tile2_Frame2, - METATILE_PokemonCenter_Elevator1F_Tile2_Frame1, - METATILE_PokemonCenter_Elevator1F_Tile2_Frame0 +static const u16 sEscalatorMetatiles_1F_2[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator1F_Tile2_Frame2, + METATILE_PokemonCenter_Escalator1F_Tile2_Frame1, + METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 }; -static const u16 sElevatorMetatiles_1F_3[ESCALATOR_STAGES] = { - METATILE_PokemonCenter_Elevator1F_Tile3_Frame2, - METATILE_PokemonCenter_Elevator1F_Tile3_Frame1, - METATILE_PokemonCenter_Elevator1F_Tile3_Frame0 +static const u16 sEscalatorMetatiles_1F_3[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator1F_Tile3_Frame2, + METATILE_PokemonCenter_Escalator1F_Tile3_Frame1, + METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 }; -static const u16 sElevatorMetatiles_2F_0[ESCALATOR_STAGES] = { - METATILE_PokemonCenter_Elevator2F_Tile0_Frame0, - METATILE_PokemonCenter_Elevator2F_Tile0_Frame1, - METATILE_PokemonCenter_Elevator2F_Tile0_Frame2 +static const u16 sEscalatorMetatiles_2F_0[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator2F_Tile0_Frame0, + METATILE_PokemonCenter_Escalator2F_Tile0_Frame1, + METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 }; -static const u16 sElevatorMetatiles_2F_1[ESCALATOR_STAGES] = { - METATILE_PokemonCenter_Elevator2F_Tile1_Frame0, - METATILE_PokemonCenter_Elevator2F_Tile1_Frame1, - METATILE_PokemonCenter_Elevator2F_Tile1_Frame2 +static const u16 sEscalatorMetatiles_2F_1[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator2F_Tile1_Frame0, + METATILE_PokemonCenter_Escalator2F_Tile1_Frame1, + METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 }; -static const u16 sElevatorMetatiles_2F_2[ESCALATOR_STAGES] = { - METATILE_PokemonCenter_Elevator2F_Tile2_Frame0, - METATILE_PokemonCenter_Elevator2F_Tile2_Frame1, - METATILE_PokemonCenter_Elevator2F_Tile2_Frame2 +static const u16 sEscalatorMetatiles_2F_2[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator2F_Tile2_Frame0, + METATILE_PokemonCenter_Escalator2F_Tile2_Frame1, + METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 }; #define tState data[0] @@ -122,25 +122,25 @@ static void Task_DrawEscalator(u8 taskId) switch (tState) { case 0: - SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_0, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_0, 0); break; case 1: - SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_1, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0); break; case 2: - SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_2, METATILE_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, METATILE_COLLISION_MASK); break; case 3: - SetEscalatorMetatile(taskId, sElevatorMetatiles_1F_3, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0); break; case 4: - SetEscalatorMetatile(taskId, sElevatorMetatiles_2F_0, METATILE_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, METATILE_COLLISION_MASK); break; case 5: - SetEscalatorMetatile(taskId, sElevatorMetatiles_2F_1, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0); break; case 6: - SetEscalatorMetatile(taskId, sElevatorMetatiles_2F_2, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_2, 0); break; } From a4e47f12012ef249d8fe25f5e2f391f3dd0a871f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 21 Jul 2020 13:29:51 -0400 Subject: [PATCH 09/85] Clean some battle_message.c data --- data/battle_scripts_1.s | 18 +++--- data/battle_scripts_2.s | 36 ++++++------ src/battle_message.c | 127 ++++++++++++++++++++++++++-------------- 3 files changed, 111 insertions(+), 70 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3db9f28ffe..273b3d028f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -798,7 +798,7 @@ BattleScript_KOFail:: BattleScript_EffectRazorWind:: jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn - setbyte sTWOTURN_STRINGID, 0x0 + setbyte sTWOTURN_STRINGID, 0 call BattleScriptFirstChargingTurn goto BattleScript_MoveEnd @@ -1084,7 +1084,7 @@ BattleScript_EffectAccuracyDownHit:: BattleScript_EffectSkyAttack:: jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn - setbyte sTWOTURN_STRINGID, 0x3 + setbyte sTWOTURN_STRINGID, 3 call BattleScriptFirstChargingTurn goto BattleScript_MoveEnd @@ -1831,7 +1831,7 @@ BattleScript_EffectMirrorCoat:: BattleScript_EffectSkullBash:: jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn - setbyte sTWOTURN_STRINGID, 0x2 + setbyte sTWOTURN_STRINGID, 2 call BattleScriptFirstChargingTurn setstatchanger STAT_DEF, 1, FALSE statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_SkullBashEnd @@ -1927,7 +1927,7 @@ BattleScript_EffectSolarbeam:: BattleScript_SolarbeamDecideTurn:: jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn - setbyte sTWOTURN_STRINGID, 0x1 + setbyte sTWOTURN_STRINGID, 1 call BattleScriptFirstChargingTurn goto BattleScript_MoveEnd BattleScript_SolarbeamOnFirstTurn:: @@ -1996,19 +1996,19 @@ BattleScript_EffectSemiInvulnerable:: jumpifmove MOVE_FLY, BattleScript_FirstTurnFly jumpifmove MOVE_DIVE, BattleScript_FirstTurnDive jumpifmove MOVE_BOUNCE, BattleScript_FirstTurnBounce - setbyte sTWOTURN_STRINGID, 0x5 + setbyte sTWOTURN_STRINGID, 5 goto BattleScript_FirstTurnSemiInvulnerable BattleScript_FirstTurnBounce:: - setbyte sTWOTURN_STRINGID, 0x7 + setbyte sTWOTURN_STRINGID, 7 goto BattleScript_FirstTurnSemiInvulnerable BattleScript_FirstTurnDive:: - setbyte sTWOTURN_STRINGID, 0x6 + setbyte sTWOTURN_STRINGID, 6 goto BattleScript_FirstTurnSemiInvulnerable BattleScript_FirstTurnFly:: - setbyte sTWOTURN_STRINGID, 0x4 + setbyte sTWOTURN_STRINGID, 4 BattleScript_FirstTurnSemiInvulnerable:: call BattleScriptFirstChargingTurn setsemiinvulnerablebit @@ -3252,7 +3252,7 @@ BattleScript_SunlightFaded:: end2 BattleScript_OverworldWeatherStarts:: - printfromtable gWeatherContinuesStringIds + printfromtable gWeatherStartsStringIds waitmessage 0x40 playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL end3 diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index b74f557a7c..316b4df25b 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -13,28 +13,28 @@ .align 2 gBattlescriptsForBallThrow:: @ 82DBD08 - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_SafariBallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow - .4byte BattleScript_BallThrow + .4byte BattleScript_BallThrow @ ITEM_NONE + .4byte BattleScript_BallThrow @ ITEM_MASTER_BALL + .4byte BattleScript_BallThrow @ ITEM_ULTRA_BALL + .4byte BattleScript_BallThrow @ ITEM_GREAT_BALL + .4byte BattleScript_BallThrow @ ITEM_POKE_BALL + .4byte BattleScript_SafariBallThrow @ ITEM_SAFARI_BALL + .4byte BattleScript_BallThrow @ ITEM_NET_BALL + .4byte BattleScript_BallThrow @ ITEM_DIVE_BALL + .4byte BattleScript_BallThrow @ ITEM_NEST_BALL + .4byte BattleScript_BallThrow @ ITEM_REPEAT_BALL + .4byte BattleScript_BallThrow @ ITEM_TIMER_BALL + .4byte BattleScript_BallThrow @ ITEM_LUXURY_BALL + .4byte BattleScript_BallThrow @ ITEM_PREMIER_BALL .align 2 gBattlescriptsForUsingItem:: @ 82DBD3C .4byte BattleScript_PlayerUsesItem - .4byte BattleScript_OpponentUsesHealItem - .4byte BattleScript_OpponentUsesHealItem - .4byte BattleScript_OpponentUsesStatusCureItem - .4byte BattleScript_OpponentUsesXItem - .4byte BattleScript_OpponentUsesGuardSpecs + .4byte BattleScript_OpponentUsesHealItem @ AI_ITEM_FULL_RESTORE + .4byte BattleScript_OpponentUsesHealItem @ AI_ITEM_HEAL_HP + .4byte BattleScript_OpponentUsesStatusCureItem @ AI_ITEM_CURE_CONDITION + .4byte BattleScript_OpponentUsesXItem @ AI_ITEM_X_STAT + .4byte BattleScript_OpponentUsesGuardSpecs @ AI_ITEM_GUARD_SPECS .align 2 gBattlescriptsForRunningByItem:: @ 82DBD54 diff --git a/src/battle_message.c b/src/battle_message.c index 2a0ba4ded3..cc43d1656e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -19,12 +19,15 @@ #include "text.h" #include "trainer_hill.h" #include "window.h" +#include "constants/battle_dome.h" #include "constants/battle_string_ids.h" +#include "constants/berry.h" #include "constants/frontier_util.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/trainers.h" #include "constants/trainer_hill.h" +#include "constants/weather.h" struct BattleWindowText { @@ -433,11 +436,16 @@ static const u8 sText_SpDef2[] = _("SP. DEF"); static const u8 sText_Accuracy[] = _("accuracy"); static const u8 sText_Evasiveness[] = _("evasiveness"); -const u8 * const gStatNamesTable[] = +const u8 * const gStatNamesTable[NUM_BATTLE_STATS] = { - sText_HP2, sText_Attack2, sText_Defense2, - sText_Speed, sText_SpAtk2, sText_SpDef2, - sText_Accuracy, sText_Evasiveness + [STAT_HP] = sText_HP2, + [STAT_ATK] = sText_Attack2, + [STAT_DEF] = sText_Defense2, + [STAT_SPEED] = sText_Speed, + [STAT_SPATK] = sText_SpAtk2, + [STAT_SPDEF] = sText_SpDef2, + [STAT_ACC] = sText_Accuracy, + [STAT_EVASION] = sText_Evasiveness }; static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); @@ -446,11 +454,13 @@ static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!"); static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!"); static const u8 sText_PokeblockWasTooSour[] = _("was too sour!"); -const u8 * const gPokeblockWasTooXStringTable[] = +const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = { - sText_PokeblockWasTooSpicy, sText_PokeblockWasTooDry, - sText_PokeblockWasTooSweet, sText_PokeblockWasTooBitter, - sText_PokeblockWasTooSour + [FLAVOR_SPICY] = sText_PokeblockWasTooSpicy, + [FLAVOR_DRY] = sText_PokeblockWasTooDry, + [FLAVOR_SWEET] = sText_PokeblockWasTooSweet, + [FLAVOR_BITTER] = sText_PokeblockWasTooBitter, + [FLAVOR_SOUR] = sText_PokeblockWasTooSour }; static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); @@ -979,16 +989,28 @@ const u16 gStatDownStringIds[] = STRINGID_PKMNSSTATCHANGED3, STRINGID_PKMNSSTATCHANGED4, STRINGID_STATSWONTDECREASE, STRINGID_EMPTYSTRING3 }; +// Index read from sTWOTURN_STRINGID const u16 gFirstTurnOfTwoStringIds[] = { - STRINGID_PKMNWHIPPEDWHIRLWIND, STRINGID_PKMNTOOKSUNLIGHT, STRINGID_PKMNLOWEREDHEAD, STRINGID_PKMNISGLOWING, - STRINGID_PKMNFLEWHIGH, STRINGID_PKMNDUGHOLE, STRINGID_PKMNHIDUNDERWATER, STRINGID_PKMNSPRANGUP + STRINGID_PKMNWHIPPEDWHIRLWIND, // MOVE_RAZOR_WIND + STRINGID_PKMNTOOKSUNLIGHT, // MOVE_SOLAR_BEAM + STRINGID_PKMNLOWEREDHEAD, // MOVE_SKULL_BASH + STRINGID_PKMNISGLOWING, // MOVE_SKY_ATTACK + STRINGID_PKMNFLEWHIGH, // MOVE_FLY + STRINGID_PKMNDUGHOLE, // MOVE_DIG + STRINGID_PKMNHIDUNDERWATER, // MOVE_DIVE + STRINGID_PKMNSPRANGUP // MOVE_BOUNCE }; +// Index copied from move's index in gTrappingMoves const u16 gWrappedStringIds[] = { - STRINGID_PKMNSQUEEZEDBYBIND, STRINGID_PKMNWRAPPEDBY, STRINGID_PKMNTRAPPEDINVORTEX, - STRINGID_PKMNCLAMPED, STRINGID_PKMNTRAPPEDINVORTEX, STRINGID_PKMNTRAPPEDBYSANDTOMB + STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND + STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP + STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN + STRINGID_PKMNCLAMPED, // MOVE_CLAMP + STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL + STRINGID_PKMNTRAPPEDBYSANDTOMB // MOVE_SAND_TOMB }; const u16 gMistUsedStringIds[] = @@ -1078,13 +1100,25 @@ const u16 gBallEscapeStringIds[] = STRINGID_PKMNBROKEFREE, STRINGID_ITAPPEAREDCAUGHT, STRINGID_AARGHALMOSTHADIT, STRINGID_SHOOTSOCLOSE }; -const u16 gWeatherContinuesStringIds[] = +// Overworld weathers that don't have an associated battle weather default to "It is raining." +const u16 gWeatherStartsStringIds[] = { - STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, - STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, - STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_SANDSTORMISRAGING, - STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, - STRINGID_SUNLIGHTSTRONG, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING + [WEATHER_NONE] = STRINGID_ITISRAINING, + [WEATHER_SUNNY_CLOUDS] = STRINGID_ITISRAINING, + [WEATHER_SUNNY] = STRINGID_ITISRAINING, + [WEATHER_RAIN] = STRINGID_ITISRAINING, + [WEATHER_SNOW] = STRINGID_ITISRAINING, + [WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING, + [WEATHER_FOG_HORIZONTAL] = STRINGID_ITISRAINING, + [WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING, + [WEATHER_SANDSTORM] = STRINGID_SANDSTORMISRAGING, + [WEATHER_FOG_DIAGONAL] = STRINGID_ITISRAINING, + [WEATHER_UNDERWATER] = STRINGID_ITISRAINING, + [WEATHER_SHADE] = STRINGID_ITISRAINING, + [WEATHER_DROUGHT] = STRINGID_SUNLIGHTSTRONG, + [WEATHER_DOWNPOUR] = STRINGID_ITISRAINING, + [WEATHER_UNDERWATER_BUBBLES] = STRINGID_ITISRAINING, + [WEATHER_ABNORMAL] = STRINGID_ITISRAINING }; const u16 gInobedientStringIds[] = @@ -1146,7 +1180,13 @@ const u16 gCaughtMonStringIds[] = const u16 gTrappingMoves[] = { - MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, 0xFFFF + MOVE_BIND, + MOVE_WRAP, + MOVE_FIRE_SPIN, + MOVE_CLAMP, + MOVE_WHIRLPOOL, + MOVE_SAND_TOMB, + 0xFFFF }; const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); @@ -1207,26 +1247,27 @@ const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); static const u8 sText_SpaceIs[] = _(" is"); static const u8 sText_ApostropheS[] = _("'s"); -static const u8 sATypeMove_Table[][17] = +// For displaying names of invalid moves +static const u8 sATypeMove_Table[][NUMBER_OF_MON_TYPES - 1] = { - _("a NORMAL move"), - _("a FIGHTING move"), - _("a FLYING move"), - _("a POISON move"), - _("a GROUND move"), - _("a ROCK move"), - _("a BUG move"), - _("a GHOST move"), - _("a STEEL move"), - _("a ??? move"), - _("a FIRE move"), - _("a WATER move"), - _("a GRASS move"), - _("an ELECTRIC move"), - _("a PSYCHIC move"), - _("an ICE move"), - _("a DRAGON move"), - _("a DARK move") + [TYPE_NORMAL] = _("a NORMAL move"), + [TYPE_FIGHTING] = _("a FIGHTING move"), + [TYPE_FLYING] = _("a FLYING move"), + [TYPE_POISON] = _("a POISON move"), + [TYPE_GROUND] = _("a GROUND move"), + [TYPE_ROCK] = _("a ROCK move"), + [TYPE_BUG] = _("a BUG move"), + [TYPE_GHOST] = _("a GHOST move"), + [TYPE_STEEL] = _("a STEEL move"), + [TYPE_MYSTERY] = _("a ??? move"), + [TYPE_FIRE] = _("a FIRE move"), + [TYPE_WATER] = _("a WATER move"), + [TYPE_GRASS] = _("a GRASS move"), + [TYPE_ELECTRIC] = _("an ELECTRIC move"), + [TYPE_PSYCHIC] = _("a PSYCHIC move"), + [TYPE_ICE] = _("an ICE move"), + [TYPE_DRAGON] = _("a DRAGON move"), + [TYPE_DARK] = _("a DARK move") }; const u8 gText_BattleTourney[] = _("BATTLE TOURNEY"); @@ -1235,12 +1276,12 @@ static const u8 sText_Round2[] = _("Round 2"); static const u8 sText_Semifinal[] = _("Semifinal"); static const u8 sText_Final[] = _("Final"); -const u8 *const gRoundsStringTable[] = +const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] = { - sText_Round1, - sText_Round2, - sText_Semifinal, - sText_Final + [DOME_ROUND1] = sText_Round1, + [DOME_ROUND2] = sText_Round2, + [DOME_SEMIFINAL] = sText_Semifinal, + [DOME_FINAL] = sText_Final }; const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); From 60ca1aa3fd4beaf7a4be7a61727ca832a4c489ef Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 23 Jul 2020 05:05:03 -0400 Subject: [PATCH 10/85] Restore tabs in field_effect_scripts.s --- data/field_effect_scripts.s | 416 ++++++++++++++++++------------------ 1 file changed, 208 insertions(+), 208 deletions(-) diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 5c637615df..c57f19a040 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -1,345 +1,345 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" + .include "asm/macros.inc" + .include "constants/constants.inc" - .section script_data, "aw", %progbits + .section script_data, "aw", %progbits - .align 2 + .align 2 gFieldEffectScriptPointers:: @ 82DB9D4 - .4byte gFieldEffectScript_ExclamationMarkIcon1 @ FLDEFF_EXCLAMATION_MARK_ICON - .4byte gFieldEffectScript_UseCutOnTallGrass @ FLDEFF_USE_CUT_ON_GRASS - .4byte gFieldEffectScript_UseCutOnTree @ FLDEFF_USE_CUT_ON_TREE - .4byte gFieldEffectScript_Shadow @ FLDEFF_SHADOW - .4byte gFieldEffectScript_TallGrass @ FLDEFF_TALL_GRASS - .4byte gFieldEffectScript_Ripple @ FLDEFF_RIPPLE - .4byte gFieldEffectScript_FieldMoveShowMon @ FLDEFF_FIELD_MOVE_SHOW_MON - .4byte gFieldEffectScript_Ash @ FLDEFF_ASH - .4byte gFieldEffectScript_SurfBlob @ FLDEFF_SURF_BLOB - .4byte gFieldEffectScript_UseSurf @ FLDEFF_USE_SURF - .4byte gFieldEffectScript_GroundImpactDust @ FLDEFF_DUST - .4byte gFieldEffectScript_UseSecretPowerCave @ FLDEFF_USE_SECRET_POWER_CAVE - .4byte gFieldEffectScript_JumpTallGrass @ FLDEFF_JUMP_TALL_GRASS - .4byte gFieldEffectScript_SandFootprints @ FLDEFF_SAND_FOOTPRINTS - .4byte gFieldEffectScript_JumpBigSplash @ FLDEFF_JUMP_BIG_SPLASH - .4byte gFieldEffectScript_Splash @ FLDEFF_SPLASH - .4byte gFieldEffectScript_JumpSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH - .4byte gFieldEffectScript_LongGrass @ FLDEFF_LONG_GRASS - .4byte gFieldEffectScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS - .4byte gFieldEffectScript_UnusedGrass @ FLDEFF_UNUSED_GRASS - .4byte gFieldEffectScript_UnusedGrass2 @ FLDEFF_UNUSED_GRASS_2 - .4byte gFieldEffectScript_UnusedSand @ FLDEFF_UNUSED_SAND - .4byte gFieldEffectScript_WaterSurfacing @ FLDEFF_WATER_SURFACING - .4byte gFieldEffectScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE - .4byte gFieldEffectScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS - .4byte gFieldEffectScript_PokeCenterHeal @ FLDEFF_POKECENTER_HEAL - .4byte gFieldEffectScript_UseSecretPowerTree @ FLDEFF_USE_SECRET_POWER_TREE - .4byte gFieldEffectScript_UseSecretPowerShrub @ FLDEFF_USE_SECRET_POWER_SHRUB - .4byte gFieldEffectScript_TreeDisguise @ FLDEFF_TREE_DISGUISE - .4byte gFieldEffectScript_MountainDisguise @ FLDEFF_MOUNTAIN_DISGUISE - .4byte gFieldEffectScript_NPCUseFly @ FLDEFF_NPCFLY_OUT - .4byte gFieldEffectScript_UseFly @ FLDEFF_USE_FLY - .4byte gFieldEffectScript_FlyIn @ FLDEFF_FLY_IN - .4byte gFieldEffectScript_QuestionMarkIcon @ FLDEFF_QUESTION_MARK_ICON - .4byte gFieldEffectScript_FeetInFlowingWater @ FLDEFF_FEET_IN_FLOWING_WATER - .4byte gFieldEffectScript_BikeTireTracks @ FLDEFF_BIKE_TIRE_TRACKS - .4byte gFieldEffectScript_SandDisguisePlaceholder @ FLDEFF_SAND_DISGUISE - .4byte gFieldEffectScript_UseRockSmash @ FLDEFF_USE_ROCK_SMASH - .4byte gFieldEffectScript_UseDig @ FLDEFF_USE_DIG - .4byte gFieldEffectScript_SandPile @ FLDEFF_SAND_PILE - .4byte gFieldEffectScript_UseStrength @ FLDEFF_USE_STRENGTH - .4byte gFieldEffectScript_ShortGrass @ FLDEFF_SHORT_GRASS - .4byte gFieldEffectScript_HotSpringsWater @ FLDEFF_HOT_SPRINGS_WATER - .4byte gFieldEffectScript_UseWaterfall @ FLDEFF_USE_WATERFALL - .4byte gFieldEffectScript_UseDive @ FLDEFF_USE_DIVE - .4byte gFieldEffectScript_Pokeball @ FLDEFF_POKEBALL - .4byte gFieldEffectScript_HeartIcon @ FLDEFF_HEART_ICON - .4byte gFieldEffectScript_Nop47 @ FLDEFF_NOP_47 - .4byte gFieldEffectScript_Nop48 @ FLDEFF_NOP_48 - .4byte gFieldEffectScript_AshPuff @ FLDEFF_ASH_PUFF - .4byte gFieldEffectScript_AshLaunch @ FLDEFF_ASH_LAUNCH - .4byte gFieldEffectScript_SweetScent @ FLDEFF_SWEET_SCENT - .4byte gFieldEffectScript_SandPillar @ FLDEFF_SAND_PILLAR - .4byte gFieldEffectScript_Bubbles @ FLDEFF_BUBBLES - .4byte gFieldEffectScript_Sparkle @ FLDEFF_SPARKLE - .4byte gFieldEffectScript_ShowSecretPowerCave @ FLDEFF_SECRET_POWER_CAVE - .4byte gFieldEffectScript_ShowSecretPowerTree @ FLDEFF_SECRET_POWER_TREE - .4byte gFieldEffectScript_ShowSecretPowerShrub @ FLDEFF_SECRET_POWER_SHRUB - .4byte gFieldEffectScript_ShowCutGrass @ FLDEFF_CUT_GRASS - .4byte gFieldEffectScript_FieldMoveShowMonInit @ FLDEFF_FIELD_MOVE_SHOW_MON_INIT - .4byte gFieldEffectScript_UsePuzzleEffect @ FLDEFF_USE_TOMB_PUZZLE_EFFECT - .4byte gFieldEffectScript_SecretBaseBootPC @ FLDEFF_PCTURN_ON - .4byte gFieldEffectScript_HallOfFameRecord @ FLDEFF_HALL_OF_FAME_RECORD - .4byte gFieldEffectScript_UseTeleport @ FLDEFF_USE_TELEPORT - .4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT - .4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK - .4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK + .4byte gFieldEffectScript_ExclamationMarkIcon1 @ FLDEFF_EXCLAMATION_MARK_ICON + .4byte gFieldEffectScript_UseCutOnTallGrass @ FLDEFF_USE_CUT_ON_GRASS + .4byte gFieldEffectScript_UseCutOnTree @ FLDEFF_USE_CUT_ON_TREE + .4byte gFieldEffectScript_Shadow @ FLDEFF_SHADOW + .4byte gFieldEffectScript_TallGrass @ FLDEFF_TALL_GRASS + .4byte gFieldEffectScript_Ripple @ FLDEFF_RIPPLE + .4byte gFieldEffectScript_FieldMoveShowMon @ FLDEFF_FIELD_MOVE_SHOW_MON + .4byte gFieldEffectScript_Ash @ FLDEFF_ASH + .4byte gFieldEffectScript_SurfBlob @ FLDEFF_SURF_BLOB + .4byte gFieldEffectScript_UseSurf @ FLDEFF_USE_SURF + .4byte gFieldEffectScript_GroundImpactDust @ FLDEFF_DUST + .4byte gFieldEffectScript_UseSecretPowerCave @ FLDEFF_USE_SECRET_POWER_CAVE + .4byte gFieldEffectScript_JumpTallGrass @ FLDEFF_JUMP_TALL_GRASS + .4byte gFieldEffectScript_SandFootprints @ FLDEFF_SAND_FOOTPRINTS + .4byte gFieldEffectScript_JumpBigSplash @ FLDEFF_JUMP_BIG_SPLASH + .4byte gFieldEffectScript_Splash @ FLDEFF_SPLASH + .4byte gFieldEffectScript_JumpSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH + .4byte gFieldEffectScript_LongGrass @ FLDEFF_LONG_GRASS + .4byte gFieldEffectScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS + .4byte gFieldEffectScript_UnusedGrass @ FLDEFF_UNUSED_GRASS + .4byte gFieldEffectScript_UnusedGrass2 @ FLDEFF_UNUSED_GRASS_2 + .4byte gFieldEffectScript_UnusedSand @ FLDEFF_UNUSED_SAND + .4byte gFieldEffectScript_WaterSurfacing @ FLDEFF_WATER_SURFACING + .4byte gFieldEffectScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE + .4byte gFieldEffectScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS + .4byte gFieldEffectScript_PokeCenterHeal @ FLDEFF_POKECENTER_HEAL + .4byte gFieldEffectScript_UseSecretPowerTree @ FLDEFF_USE_SECRET_POWER_TREE + .4byte gFieldEffectScript_UseSecretPowerShrub @ FLDEFF_USE_SECRET_POWER_SHRUB + .4byte gFieldEffectScript_TreeDisguise @ FLDEFF_TREE_DISGUISE + .4byte gFieldEffectScript_MountainDisguise @ FLDEFF_MOUNTAIN_DISGUISE + .4byte gFieldEffectScript_NPCUseFly @ FLDEFF_NPCFLY_OUT + .4byte gFieldEffectScript_UseFly @ FLDEFF_USE_FLY + .4byte gFieldEffectScript_FlyIn @ FLDEFF_FLY_IN + .4byte gFieldEffectScript_QuestionMarkIcon @ FLDEFF_QUESTION_MARK_ICON + .4byte gFieldEffectScript_FeetInFlowingWater @ FLDEFF_FEET_IN_FLOWING_WATER + .4byte gFieldEffectScript_BikeTireTracks @ FLDEFF_BIKE_TIRE_TRACKS + .4byte gFieldEffectScript_SandDisguisePlaceholder @ FLDEFF_SAND_DISGUISE + .4byte gFieldEffectScript_UseRockSmash @ FLDEFF_USE_ROCK_SMASH + .4byte gFieldEffectScript_UseDig @ FLDEFF_USE_DIG + .4byte gFieldEffectScript_SandPile @ FLDEFF_SAND_PILE + .4byte gFieldEffectScript_UseStrength @ FLDEFF_USE_STRENGTH + .4byte gFieldEffectScript_ShortGrass @ FLDEFF_SHORT_GRASS + .4byte gFieldEffectScript_HotSpringsWater @ FLDEFF_HOT_SPRINGS_WATER + .4byte gFieldEffectScript_UseWaterfall @ FLDEFF_USE_WATERFALL + .4byte gFieldEffectScript_UseDive @ FLDEFF_USE_DIVE + .4byte gFieldEffectScript_Pokeball @ FLDEFF_POKEBALL + .4byte gFieldEffectScript_HeartIcon @ FLDEFF_HEART_ICON + .4byte gFieldEffectScript_Nop47 @ FLDEFF_NOP_47 + .4byte gFieldEffectScript_Nop48 @ FLDEFF_NOP_48 + .4byte gFieldEffectScript_AshPuff @ FLDEFF_ASH_PUFF + .4byte gFieldEffectScript_AshLaunch @ FLDEFF_ASH_LAUNCH + .4byte gFieldEffectScript_SweetScent @ FLDEFF_SWEET_SCENT + .4byte gFieldEffectScript_SandPillar @ FLDEFF_SAND_PILLAR + .4byte gFieldEffectScript_Bubbles @ FLDEFF_BUBBLES + .4byte gFieldEffectScript_Sparkle @ FLDEFF_SPARKLE + .4byte gFieldEffectScript_ShowSecretPowerCave @ FLDEFF_SECRET_POWER_CAVE + .4byte gFieldEffectScript_ShowSecretPowerTree @ FLDEFF_SECRET_POWER_TREE + .4byte gFieldEffectScript_ShowSecretPowerShrub @ FLDEFF_SECRET_POWER_SHRUB + .4byte gFieldEffectScript_ShowCutGrass @ FLDEFF_CUT_GRASS + .4byte gFieldEffectScript_FieldMoveShowMonInit @ FLDEFF_FIELD_MOVE_SHOW_MON_INIT + .4byte gFieldEffectScript_UsePuzzleEffect @ FLDEFF_USE_TOMB_PUZZLE_EFFECT + .4byte gFieldEffectScript_SecretBaseBootPC @ FLDEFF_PCTURN_ON + .4byte gFieldEffectScript_HallOfFameRecord @ FLDEFF_HALL_OF_FAME_RECORD + .4byte gFieldEffectScript_UseTeleport @ FLDEFF_USE_TELEPORT + .4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT + .4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK + .4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK gFieldEffectScript_ExclamationMarkIcon1:: @ 82DBAE0 - field_eff_callnative FldEff_ExclamationMarkIcon - field_eff_end + field_eff_callnative FldEff_ExclamationMarkIcon + field_eff_end gFieldEffectScript_UseCutOnTallGrass:: @ 82DBAE6 - field_eff_callnative FldEff_UseCutOnGrass - field_eff_end + field_eff_callnative FldEff_UseCutOnGrass + field_eff_end gFieldEffectScript_UseCutOnTree:: @ 82DBAEC - field_eff_callnative FldEff_UseCutOnTree - field_eff_end + field_eff_callnative FldEff_UseCutOnTree + field_eff_end gFieldEffectScript_Shadow:: @ 82DBAF2 - field_eff_callnative FldEff_Shadow - field_eff_end + field_eff_callnative FldEff_Shadow + field_eff_end gFieldEffectScript_TallGrass:: @ 82DBAF8 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_TallGrass - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_TallGrass + field_eff_end gFieldEffectScript_Ripple:: @ 82DBB02 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Ripple - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Ripple + field_eff_end gFieldEffectScript_FieldMoveShowMon:: @ 82DBB0C - field_eff_callnative FldEff_FieldMoveShowMon - field_eff_end + field_eff_callnative FldEff_FieldMoveShowMon + field_eff_end gFieldEffectScript_Ash:: @ 82DBB12 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Ash - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Ash + field_eff_end gFieldEffectScript_SurfBlob:: @ 82DBB1C - field_eff_callnative FldEff_SurfBlob - field_eff_end + field_eff_callnative FldEff_SurfBlob + field_eff_end gFieldEffectScript_UseSurf:: @ 82DBB22 - field_eff_callnative FldEff_UseSurf - field_eff_end + field_eff_callnative FldEff_UseSurf + field_eff_end gFieldEffectScript_GroundImpactDust:: @ 82DBB28 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Dust - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Dust + field_eff_end gFieldEffectScript_UseSecretPowerCave:: @ 82DBB32 - field_eff_callnative FldEff_UseSecretPowerCave - field_eff_end + field_eff_callnative FldEff_UseSecretPowerCave + field_eff_end gFieldEffectScript_JumpTallGrass:: @ 82DBB38 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpTallGrass - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpTallGrass + field_eff_end gFieldEffectScript_SandFootprints:: @ 82DBB42 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandFootprints - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandFootprints + field_eff_end gFieldEffectScript_JumpBigSplash:: @ 82DBB4C - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpBigSplash - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpBigSplash + field_eff_end gFieldEffectScript_Splash:: @ 82DBB56 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Splash - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Splash + field_eff_end gFieldEffectScript_JumpSmallSplash:: @ 82DBB60 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpSmallSplash - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpSmallSplash + field_eff_end gFieldEffectScript_LongGrass:: @ 82DBB6A - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_LongGrass - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_LongGrass + field_eff_end gFieldEffectScript_JumpLongGrass:: @ 82DBB74 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpLongGrass - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpLongGrass + field_eff_end gFieldEffectScript_UnusedGrass:: @ 82DBB7E - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass + field_eff_end gFieldEffectScript_UnusedGrass2:: @ 82DBB88 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass2 - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass2 + field_eff_end gFieldEffectScript_UnusedSand:: @ 82DBB92 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_UnusedSand - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_UnusedSand + field_eff_end gFieldEffectScript_WaterSurfacing:: @ 82DBB9C - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_WaterSurfacing - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_WaterSurfacing + field_eff_end gFieldEffectScript_BerryTreeGrowthSparkle:: @ 82DBBA6 - field_eff_callnative FldEff_BerryTreeGrowthSparkle - field_eff_end + field_eff_callnative FldEff_BerryTreeGrowthSparkle + field_eff_end gFieldEffectScript_DeepSandFootprints:: @ 82DBBAC - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_DeepSandFootprints - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_DeepSandFootprints + field_eff_end gFieldEffectScript_PokeCenterHeal:: @ 82DBBB6 - field_eff_loadfadedpal gSpritePalette_PokeballGlow - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_PokecenterHeal - field_eff_end + field_eff_loadfadedpal gSpritePalette_PokeballGlow + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_PokecenterHeal + field_eff_end gFieldEffectScript_UseSecretPowerTree:: @ 82DBBC5 - field_eff_callnative FldEff_UseSecretPowerTree - field_eff_end + field_eff_callnative FldEff_UseSecretPowerTree + field_eff_end gFieldEffectScript_UseSecretPowerShrub:: @ 82DBBCB - field_eff_callnative FldEff_UseSecretPowerShrub - field_eff_end + field_eff_callnative FldEff_UseSecretPowerShrub + field_eff_end gFieldEffectScript_TreeDisguise:: @ 82DBBD1 - field_eff_callnative ShowTreeDisguiseFieldEffect - field_eff_end + field_eff_callnative ShowTreeDisguiseFieldEffect + field_eff_end gFieldEffectScript_MountainDisguise:: @ 82DBBD7 - field_eff_callnative ShowMountainDisguiseFieldEffect - field_eff_end + field_eff_callnative ShowMountainDisguiseFieldEffect + field_eff_end gFieldEffectScript_NPCUseFly:: @ 82DBBDD - field_eff_callnative FldEff_NPCFlyOut - field_eff_end + field_eff_callnative FldEff_NPCFlyOut + field_eff_end gFieldEffectScript_UseFly:: @ 82DBBE3 - field_eff_callnative FldEff_UseFly - field_eff_end + field_eff_callnative FldEff_UseFly + field_eff_end gFieldEffectScript_FlyIn:: @ 82DBBE9 - field_eff_callnative FldEff_FlyIn - field_eff_end + field_eff_callnative FldEff_FlyIn + field_eff_end gFieldEffectScript_QuestionMarkIcon:: @ 82DBBEF - field_eff_callnative FldEff_QuestionMarkIcon - field_eff_end + field_eff_callnative FldEff_QuestionMarkIcon + field_eff_end gFieldEffectScript_FeetInFlowingWater:: @ 82DBBF5 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_FeetInFlowingWater - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_FeetInFlowingWater + field_eff_end gFieldEffectScript_BikeTireTracks:: @ 82DBBFF - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_BikeTireTracks - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_BikeTireTracks + field_eff_end gFieldEffectScript_SandDisguisePlaceholder:: @ 82DBC09 - field_eff_callnative ShowSandDisguiseFieldEffect - field_eff_end + field_eff_callnative ShowSandDisguiseFieldEffect + field_eff_end gFieldEffectScript_UseRockSmash:: @ 82DBC0F - field_eff_callnative FldEff_UseRockSmash - field_eff_end + field_eff_callnative FldEff_UseRockSmash + field_eff_end gFieldEffectScript_UseStrength:: @ 82DBC15 - field_eff_callnative FldEff_UseStrength - field_eff_end + field_eff_callnative FldEff_UseStrength + field_eff_end gFieldEffectScript_UseDig:: @ 82DBC1B - field_eff_callnative FldEff_UseDig - field_eff_end + field_eff_callnative FldEff_UseDig + field_eff_end gFieldEffectScript_SandPile:: @ 82DBC21 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandPile - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandPile + field_eff_end gFieldEffectScript_ShortGrass:: @ 82DBC2B - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_ShortGrass - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_ShortGrass + field_eff_end gFieldEffectScript_HotSpringsWater:: @ 82DBC35 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_HotSpringsWater - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_HotSpringsWater + field_eff_end gFieldEffectScript_UseWaterfall:: @ 82DBC3F - field_eff_callnative FldEff_UseWaterfall - field_eff_end + field_eff_callnative FldEff_UseWaterfall + field_eff_end gFieldEffectScript_UseDive:: @ 82DBC45 - field_eff_callnative FldEff_UseDive - field_eff_end + field_eff_callnative FldEff_UseDive + field_eff_end gFieldEffectScript_Pokeball:: @ 82DBC4B - field_eff_loadpal gSpritePalette_Pokeball - field_eff_callnative FldEff_Pokeball - field_eff_end + field_eff_loadpal gSpritePalette_Pokeball + field_eff_callnative FldEff_Pokeball + field_eff_end gFieldEffectScript_HeartIcon:: @ 82DBC56 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_HeartIcon - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_HeartIcon + field_eff_end gFieldEffectScript_Nop47:: @ 82DBC60 - field_eff_callnative FldEff_Nop47 - field_eff_end + field_eff_callnative FldEff_Nop47 + field_eff_end gFieldEffectScript_Nop48:: @ 82DBC66 - field_eff_callnative FldEff_Nop48 - field_eff_end + field_eff_callnative FldEff_Nop48 + field_eff_end gFieldEffectScript_AshPuff:: @ 82DBC6C - field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshPuff - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshPuff + field_eff_end gFieldEffectScript_AshLaunch:: @ 82DBC76 - field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshLaunch - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshLaunch + field_eff_end gFieldEffectScript_SweetScent:: @ 82DBC80 - field_eff_callnative FldEff_SweetScent - field_eff_end + field_eff_callnative FldEff_SweetScent + field_eff_end gFieldEffectScript_SandPillar:: @ 82DBC86 - field_eff_loadfadedpal_callnative gSpritePalette_SandPillar, FldEff_SandPillar - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_SandPillar, FldEff_SandPillar + field_eff_end gFieldEffectScript_Bubbles:: @ 82DBC90 - field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Bubbles - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Bubbles + field_eff_end gFieldEffectScript_Sparkle:: @ 82DBC9A - field_eff_loadfadedpal_callnative gSpritePalette_SmallSparkle, FldEff_Sparkle - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_SmallSparkle, FldEff_Sparkle + field_eff_end gFieldEffectScript_ShowSecretPowerCave:: @ 82DBCA4 - field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Cave, FldEff_SecretPowerCave - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Cave, FldEff_SecretPowerCave + field_eff_end gFieldEffectScript_ShowSecretPowerTree:: @ 82DBCAE - field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Plant, FldEff_SecretPowerTree - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Plant, FldEff_SecretPowerTree + field_eff_end gFieldEffectScript_ShowSecretPowerShrub:: @ 82DBCB8 - field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Plant, FldEff_SecretPowerShrub - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_SecretPower_Plant, FldEff_SecretPowerShrub + field_eff_end gFieldEffectScript_ShowCutGrass:: @ 82DBCC2 - field_eff_loadfadedpal_callnative gSpritePalette_CutGrass, FldEff_CutGrass - field_eff_end + field_eff_loadfadedpal_callnative gSpritePalette_CutGrass, FldEff_CutGrass + field_eff_end gFieldEffectScript_FieldMoveShowMonInit:: @ 82DBCCC - field_eff_callnative FldEff_FieldMoveShowMonInit - field_eff_end + field_eff_callnative FldEff_FieldMoveShowMonInit + field_eff_end gFieldEffectScript_UsePuzzleEffect:: @ 82DBCD2 - field_eff_callnative FldEff_UsePuzzleEffect - field_eff_end + field_eff_callnative FldEff_UsePuzzleEffect + field_eff_end gFieldEffectScript_SecretBaseBootPC:: @ 82DBCD8 - field_eff_callnative FldEff_SecretBasePCTurnOn - field_eff_end + field_eff_callnative FldEff_SecretBasePCTurnOn + field_eff_end gFieldEffectScript_HallOfFameRecord:: @ 82DBCDE - field_eff_loadfadedpal gSpritePalette_PokeballGlow - field_eff_loadfadedpal_callnative gSpritePalette_HofMonitor, FldEff_HallOfFameRecord - field_eff_end + field_eff_loadfadedpal gSpritePalette_PokeballGlow + field_eff_loadfadedpal_callnative gSpritePalette_HofMonitor, FldEff_HallOfFameRecord + field_eff_end gFieldEffectScript_UseTeleport:: @ 82DBCED - field_eff_callnative FldEff_UseTeleport - field_eff_end + field_eff_callnative FldEff_UseTeleport + field_eff_end gFieldEffectScript_RayquazaSpotlight:: @ 82DBCF3 - field_eff_callnative FldEff_RayquazaSpotlight - field_eff_end + field_eff_callnative FldEff_RayquazaSpotlight + field_eff_end gFieldEffectScript_DestroyDeoxysRock:: @ 82DBCF9 - field_eff_callnative FldEff_DestroyDeoxysRock - field_eff_end + field_eff_callnative FldEff_DestroyDeoxysRock + field_eff_end gFieldEffectScript_MoveDeoxysRock:: @ 82DBCFF - field_eff_callnative FldEff_MoveDeoxysRock - field_eff_end + field_eff_callnative FldEff_MoveDeoxysRock + field_eff_end From 52a4428ba624b19569418a9c72f60d3494fb71eb Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 11 Jul 2020 20:25:56 -0400 Subject: [PATCH 11/85] Begin new contest documentation --- data/contest_ai_scripts.s | 25 +- .../contest/{heart.png => slider_heart.png} | Bin include/constants/contest.h | 8 - include/constants/global.h | 8 + include/contest.h | 158 +++-- include/contest_link.h | 11 + include/contest_util.h | 1 - include/global.h | 4 +- include/graphics.h | 4 +- src/contest.c | 622 +++++++++--------- src/contest_ai.c | 85 +-- src/contest_effect.c | 84 +-- src/contest_link.c | 231 +++---- src/contest_link_util.c | 65 +- src/contest_util.c | 10 +- src/data/contest_opponents.h | 96 --- src/graphics.c | 4 +- src/pokemon.c | 4 +- 18 files changed, 685 insertions(+), 735 deletions(-) rename graphics/contest/{heart.png => slider_heart.png} (100%) diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index 7346876d7e..252c39a3aa 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -48,7 +48,7 @@ gContestAIChecks:: @ 82DE350 @ Unreferenced AI routine to encourage moves that improve condition on the first @ turn. Additionally, it checks the appeal order of the user and the effect -@ type, but the code is buggy and doesn't affect the score. +@ type, but the code is buggy and doesnt affect the score. if_turn_not_eq 0, ContestUnreferenced_80 if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80 score +10 @@ -63,7 +63,7 @@ ContestUnreferenced_0D: ContestUnreferenced_end: end -@ Unreferenced AI routine that doesn't make much sense. +@ Unreferenced AI routine that doesnt make much sense. if_turn_eq 0, ContestUnreferenced_0F_1 if_turn_eq 1, ContestUnreferenced_0F_2 if_turn_eq 2, ContestUnreferenced_0F_3 @@ -122,25 +122,26 @@ ContestUnreferenced_score2: end AI_CheckBoring: - if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_end_081DC27F - if_move_used_count_eq 1, AI_score1_081DC27F - if_move_used_count_eq 2, AI_score2_081DC27F - if_move_used_count_eq 3, AI_score3_081DC27F - if_move_used_count_eq 4, AI_score4_081DC27F + if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CheckBoring_NotBoring + if_move_used_count_eq 1, AI_CheckBoring_FirstRepeat + if_move_used_count_eq 2, AI_CheckBoring_SecondRepeat + if_move_used_count_eq 3, AI_CheckBoring_ThirdRepeat + if_move_used_count_eq 4, AI_CheckBoring_FourthRepeat + @ No repeats end -AI_score1_081DC27F: +AI_CheckBoring_FirstRepeat: score -5 end -AI_score2_081DC27F: +AI_CheckBoring_SecondRepeat: score -15 end -AI_score3_081DC27F: +AI_CheckBoring_ThirdRepeat: score -20 end -AI_score4_081DC27F: +AI_CheckBoring_FourthRepeat: score -25 end -AI_end_081DC27F: +AI_CheckBoring_NotBoring: end AI_CheckExcitement: diff --git a/graphics/contest/heart.png b/graphics/contest/slider_heart.png similarity index 100% rename from graphics/contest/heart.png rename to graphics/contest/slider_heart.png diff --git a/include/constants/contest.h b/include/constants/contest.h index 2de2866a37..5eabb5f46b 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -1,7 +1,6 @@ #ifndef GUARD_CONSTANTS_CONTEST_H #define GUARD_CONSTANTS_CONTEST_H -#define CONTESTANT_COUNT 4 #define APPLAUSE_METER_SIZE 5 #define CONTEST_TURN_COUNT 5 @@ -22,13 +21,6 @@ #define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1) #define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1) -#define CONTEST_CATEGORY_COOL 0 -#define CONTEST_CATEGORY_BEAUTY 1 -#define CONTEST_CATEGORY_CUTE 2 -#define CONTEST_CATEGORY_SMART 3 -#define CONTEST_CATEGORY_TOUGH 4 -#define CONTEST_CATEGORIES_COUNT 5 - #define CONTEST_WINNER_ARTIST 0 // Winner shown by the artist, painting not necessarily saved #define CONTEST_WINNER_HALL_1 1 #define CONTEST_WINNER_HALL_2 2 diff --git a/include/constants/global.h b/include/constants/global.h index 956f86a054..7a7009fd54 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -62,6 +62,14 @@ #define MAX_MON_MOVES 4 #define NUM_STATS 6 +#define CONTESTANT_COUNT 4 +#define CONTEST_CATEGORY_COOL 0 +#define CONTEST_CATEGORY_BEAUTY 1 +#define CONTEST_CATEGORY_CUTE 2 +#define CONTEST_CATEGORY_SMART 3 +#define CONTEST_CATEGORY_TOUGH 4 +#define CONTEST_CATEGORIES_COUNT 5 + // party sizes #define PARTY_SIZE 6 #define MULTI_PARTY_SIZE PARTY_SIZE / 2 diff --git a/include/contest.h b/include/contest.h index a9b1db9ee9..b6818f996c 100644 --- a/include/contest.h +++ b/include/contest.h @@ -226,7 +226,9 @@ struct ContestPokemon /*0x29*/ u8 smart; // smart /*0x2A*/ u8 tough; // tough /*0x2B*/ u8 sheen; // sheen - /*0x2C*/ u8 unk2C[12]; + u8 highestRank; + bool8 gameCleared; + /*0x2C*/ u8 unk2C[10]; /*0x38*/ u32 personality; // personality /*0x3C*/ u32 otId; // otId }; @@ -252,85 +254,85 @@ struct ContestStruct_field_18 struct Contest { - /*0x0*/ u8 playerMoveChoice; - /*0x1*/ u8 turnNumber; - /*0x2*/ u8 unused2[CONTESTANT_COUNT]; - /*0x6*/ u16 unk1920A_0:1; // Task active flags? - u16 unk1920A_1:1; - u16 unk1920A_2:1; - u16 unk1920A_3:1; - u16 unk1920A_4:1; - u16 isShowingApplauseMeter:1; - u16 applauseMeterIsMoving:1; - u16 unk1920A_7:1; - /*0x7*/ u16 unk1920B_0:1; - u16 unk1920B_1:1; - u16 unk1920B_2:1; - /*0x8*/ u8 mainTaskId; - /*0x9*/ u8 unk1920D[4]; - /*0xD*/ u8 unk19211; - /*0xE*/ u8 unk19212; - /*0xF*/ u8 filler19213; - /*0x10*/ u8 unk19214; - /*0x11*/ u8 unk19215; - /*0x12*/ u8 unk19216; // sprite ID - /*0x13*/ s8 applauseLevel; - /*0x19218*/ u8 prevTurnOrder[CONTESTANT_COUNT]; - /*0x1921C*/ u32 unk1921C; // saved RNG value? + u8 playerMoveChoice; + u8 turnNumber; + u8 unused2[CONTESTANT_COUNT]; + bool16 unk1920A_0:1; // Task active flags? + bool16 unk1920A_1:1; + bool16 unk1920A_2:1; + bool16 unk1920A_3:1; + bool16 unk1920A_4:1; + bool16 isShowingApplauseMeter:1; + bool16 applauseMeterIsMoving:1; + bool16 unk1920A_7:1; + bool16 unk1920B_0:1; + bool16 sliderHeartsAnimating:1; // When the slider heart is appearing/disappearing + bool16 unk1920B_2:1; + u8 mainTaskId; + u8 unk1920D[4]; + u8 unk19211; + u8 unk19212; + u8 filler19213; + u8 unk19214; + u8 unk19215; + u8 unk19216; // sprite ID + s8 applauseLevel; + u8 prevTurnOrder[CONTESTANT_COUNT]; + u32 unk1921C; // saved RNG value? u16 moveHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT]; u8 excitementHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT]; u8 applauseMeterSpriteId; - /*0x1925D*/ u8 contestSetupState; - /*0x1925E*/ u8 unk1925E; + u8 contestSetupState; + u8 unk1925E; }; struct ContestantStatus { - /*0x00*/ s16 appeal1; // move appeal? - /*0x02*/ s16 appeal2; // final appeal after end of turn, maybe? - /*0x04*/ s16 pointTotal; - /*0x06*/ u16 currMove; - /*0x08*/ u16 prevMove; - /*0x0A*/ u8 moveCategory; - /*0x0B*/ u8 ranking:2; + s16 appeal1; // move appeal? + s16 appeal2; // final appeal after end of turn, maybe? + s16 pointTotal; + u16 currMove; + u16 prevMove; + u8 moveCategory; + u8 ranking:2; u8 unkB_2:2; u8 moveRepeatCount:3; - u8 noMoreTurns:1; // used a one-time move? - /*0x0C*/ u8 nervous:1; + bool8 noMoreTurns:1; // used a one-time move? + bool8 nervous:1; u8 numTurnsSkipped:2; - /*0x0D*/ s8 condition; - /*0x0E*/ u8 jam; - /*0x0F*/ u8 jamReduction; + s8 condition; + u8 jam; + u8 jamReduction; // Flags set by move effect - /*0x10*/ u8 resistant:1; - u8 immune:1; - u8 moreEasilyStartled:1; - u8 usedRepeatableMove:1; + bool8 resistant:1; + bool8 immune:1; + bool8 moreEasilyStartled:1; + bool8 usedRepeatableMove:1; u8 conditionMod:2; // 1: just raised condition; 2: appeal greatly improved by condition u8 turnOrderMod:2; // 1: defined; 2: random - /*0x11*/ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random - u8 turnSkipped:1; - u8 exploded:1; - u8 overrideCategoryExcitementMod:1; - u8 appealTripleCondition:1; + u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random + bool8 turnSkipped:1; + bool8 exploded:1; + bool8 overrideCategoryExcitementMod:1; + bool8 appealTripleCondition:1; - /*0x12*/ u8 jamSafetyCount; - /*0x13*/ u8 effectStringId; // status action? - /*0x14*/ u8 effectStringId2; - /*0x15*/ u8 disappointedRepeat:1; - u8 unk15_1:1; - u8 unk15_2:1; - u8 unk15_3:1; - u8 hasJudgesAttention:1; - u8 judgesAttentionWasRemoved:1; - u8 unk15_6:1; - /*0x16*/ u8 unk16; - /*0x17*/ u8 unk17; - /*0x18*/ u8 unk18; - /*0x19*/ u8 nextTurnOrder; // turn position - /*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out" - /*0x1B*/ u8 unk1B; + u8 jamSafetyCount; + u8 effectStringId; // status action? + u8 effectStringId2; + bool8 repeatedMove:1; + bool8 unused:1; + bool8 repeatedPrevMove:1; // never read + bool8 unk15_3:1; + bool8 hasJudgesAttention:1; + bool8 judgesAttentionWasRemoved:1; + bool8 unk15_6:1; + u8 unk16; + u8 unk17; + u8 unk18; + u8 nextTurnOrder; // turn position + u8 attentionLevel; // How much the Pokemon "stood out" + u8 unk1B; }; struct UnknownContestStruct7 @@ -348,9 +350,9 @@ struct ContestAIInfo /*0x00*/ u8 aiState; /*0x02*/ u16 nextMove; /*0x04*/ u8 nextMoveIndex; - /*0x05*/ u8 unk5[4]; + /*0x05*/ u8 moveScores[MAX_MON_MOVES]; /*0x09*/ u8 aiAction; - /*0x0A*/ u8 fillerA[0x6]; // TODO: don't know what's here + /*0x0A*/ u8 filler[6]; /*0x10*/ u8 currentAICheck; /*0x14*/ u32 aiChecks; /*0x18*/ s16 scriptResult; @@ -370,9 +372,9 @@ struct UnknownContestStruct5 struct UnknownContestStruct4 { - u8 unk0; // sprite ID - u8 unk1; // sprite ID - u8 unk2_0:1; + u8 sliderHeartSpriteId; + u8 nextTurnSpriteId; + u8 sliderUpdating:1; u8 unk2_1:1; u8 unk2_2:1; }; @@ -454,7 +456,7 @@ extern u32 gContestRngValue; void ResetLinkContestBoolean(void); void LoadContestBgAfterMoveAnim(void); void CB2_StartContest(void); -void sub_80DA8C8(u8 partyIndex); +void CreateContestMonFromParty(u8 partyIndex); void sub_80DAB8C(u8 contestType, u8 rank); void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame); u8 GetContestEntryEligibility(struct Pokemon *pkmn); @@ -474,18 +476,6 @@ void ResetContestLinkResults(void); bool8 sub_80DEDA8(u8 a); u8 sub_80DEFA8(u8 a, u8 b); void ClearContestWinnerPicsInContestHall(void); -void sub_80DFA08(struct ContestPokemon *mon, s32 language); - -// contest link -void sub_81D9DE4(u8 taskId); -void sub_80FCF40(u8); -void sub_80FCFD0(u8); -void sub_80F8714(u8); -bool32 sub_80FC670(s16 *); -bool32 sub_80FC4F4(void *, u16); -bool8 sub_80FC55C(void); -bool8 sub_80FC530(u8); -u8 sub_80F86E0(u8 *); -void sub_80FC9F8(u8 taskId); +void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language); #endif //GUARD_CONTEST_H diff --git a/include/contest_link.h b/include/contest_link.h index 4344d55ad7..e52ebc426a 100644 --- a/include/contest_link.h +++ b/include/contest_link.h @@ -9,5 +9,16 @@ void sub_80FC6BC(u8); void sub_80FC804(u8); void sub_80FCE48(u8); void sub_80FC894(u8); +void Task_LinkContest_CommunicateMonIdxs(u8 taskId); +void sub_81D9DE4(u8 taskId); +void sub_80FCF40(u8); +void sub_80FCFD0(u8); +void sub_80F8714(u8); +bool32 sub_80FC670(s16 *); +bool32 LinkContest_SendBlock(void *, u16); +bool8 LinkContest_GetBlockReceivedFromAllPlayers(void); +bool8 LinkContest_GetBlockReceived(u8); +u8 sub_80F86E0(u8 *); +void Task_LinkContest_CommunicateMoveSelections(u8 taskId); #endif //GUARD_CONTEST_LINK_H diff --git a/include/contest_util.h b/include/contest_util.h index c0d8df031a..d0021153d5 100644 --- a/include/contest_util.h +++ b/include/contest_util.h @@ -7,6 +7,5 @@ void StartContest(void); void BufferContestantMonSpecies(void); void ShowContestResults(void); void ContestLinkTransfer(u8); -void sub_80FC998(u8 taskId); #endif // GUARD_CONTEST_UTIL_H diff --git a/include/global.h b/include/global.h index abcf1d5454..230a50f55b 100644 --- a/include/global.h +++ b/include/global.h @@ -474,7 +474,7 @@ struct SaveBlock2 /*0x20C*/ struct BerryPickingResults berryPick; /*0x21C*/ struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][3]; // From record mixing. /*0x57C*/ struct RankingHall2P hallRecords2P[2][3]; // From record mixing. - /*0x624*/ u16 contestLinkResults[5][4]; // 4 positions for 5 categories. + /*0x624*/ u16 contestLinkResults[CONTEST_CATEGORIES_COUNT][CONTESTANT_COUNT]; /*0x64C*/ struct BattleFrontier frontier; }; // sizeof=0xF2C @@ -483,7 +483,7 @@ extern struct SaveBlock2 *gSaveBlock2Ptr; struct SecretBaseParty { u32 personality[PARTY_SIZE]; - u16 moves[PARTY_SIZE * 4]; + u16 moves[PARTY_SIZE * MAX_MON_MOVES]; u16 species[PARTY_SIZE]; u16 heldItems[PARTY_SIZE]; u8 levels[PARTY_SIZE]; diff --git a/include/graphics.h b/include/graphics.h index 8514d49bdf..4605727965 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4786,10 +4786,10 @@ extern const u32 gOldContestGfx[]; extern const u32 gOldContestPalette[]; extern const u32 gUnknown_08C17170[]; extern const u32 gUnknown_08C17980[]; -extern const u32 gTiles_8C19450[]; +extern const u32 gContestSliderHeart_Gfx[]; extern const u32 gContestNextTurnGfx[]; extern const u16 gContestPal[]; -extern const u32 gUnknown_08C19168[]; +extern const u32 gContestFaces_Gfx[]; extern const u32 gContestApplauseGfx[]; extern const u32 gContestJudgeGfx[]; extern const u32 gContestJudgeSymbolsGfx[]; diff --git a/src/contest.c b/src/contest.c index 314ebb381a..76650da185 100644 --- a/src/contest.c +++ b/src/contest.c @@ -11,6 +11,7 @@ #include "battle.h" #include "battle_anim.h" #include "contest.h" +#include "contest_link.h" #include "data.h" #include "decompress.h" #include "graphics.h" @@ -45,56 +46,29 @@ #include "constants/rgb.h" #include "contest_ai.h" -#define APPLAUSE_METER_GFX_TAG 0xABE2 - -// An index into a palette where the text color for each contestant is stored. -// Contestant 0 will use palette color 10, contestant 1 will use color 11, etc. -#define CONTESTANT_TEXT_COLOR_START 10 - -enum -{ -// The "{Pokemon Name} / {Trainer Name}" windows. - CONTEST_WINDOW_CONTESTANT0_NAME, - CONTEST_WINDOW_CONTESTANT1_NAME, - CONTEST_WINDOW_CONTESTANT2_NAME, - CONTEST_WINDOW_CONTESTANT3_NAME, - CONTEST_WINDOW_GENERAL_TEXT, - // The available moves, from top to bottom - CONTEST_WINDOW_MOVE0, - CONTEST_WINDOW_MOVE1, - CONTEST_WINDOW_MOVE2, - CONTEST_WINDOW_MOVE3, - // The small "/" character between the move category and the - // appeal/jam display - CONTEST_WINDOW_SLASH, - CONTEST_WINDOW_MOVE_DESCRIPTION -}; - -#define MOVE_WINDOWS_START CONTEST_WINDOW_MOVE0 - // This file's functions. -static void sub_80D782C(void); -static void sub_80D7C7C(u8 taskId); -static void sub_80D7CB4(u8 taskId); -static void sub_80D7DAC(u8 taskId); -static void sub_80D7DC8(u8 taskId); +static void LoadContestPalettes(void); +static void Task_StartContestWaitFade(u8 taskId); +static void Task_TryStartLinkContest(u8 taskId); +static void Task_CommunicateMonIdxs(u8 taskId); +static void Task_EndCommunicateMonIdxs(u8 taskId); static void sub_80D7DE8(u8 taskId); static bool8 SetupContestGraphics(u8 *stateVar); static void sub_80D80C8(u8 taskId); static void sub_80D8108(u8 taskId); -static void vblank_cb_battle(void); +static void VBlankCB_Contest(void); static void CB2_ContestMain(void); -static void sub_80D833C(u8 taskId); -static void sub_80D8424(u8 taskId); -static void sub_80D8610(u8 taskId); -static void sub_80D8490(u8 taskId); -static void sub_80D880C(s8); -static void sub_80D883C(s8); -static void sub_80D8894(u8 taskId); -static void sub_80D892C(u8 taskId); -static void sub_80D895C(u8 taskId); -static void sub_80D8A04(u8 taskId); -static void sub_80D8A50(u8 taskId); +static void Task_DisplayAppealNumberText(u8 taskId); +static void Task_TryShowMoveSelectScreen(u8 taskId); +static void Task_ShowMoveSelectScreen(u8 taskId); +static void Task_HandleMoveSelectInput(u8 taskId); +static void DrawMoveSelectArrow(s8); +static void EraseMoveSelectArrow(s8); +static void Task_SelectMove(u8 taskId); +static void Task_EndCommunicateMoveSelections(u8 taskId); +static void Task_HideMoveSelectScreen(u8 taskId); +static void Task_HideApplauseMeterForAppealStart(u8 taskId); +static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId); static void sub_80D8A88(u8 taskId); static void sub_80D8B38(u8 taskId); static void sub_80DA110(u8); @@ -135,9 +109,9 @@ static u16 GetChosenMove(u8); static void GetAllChosenMoves(void); static void ContestPrintLinkStandby(void); static void FillContestantWindowBgs(void); -static void sub_80DC2BC(void); -static void sub_80DC490(bool8); -static void sub_80DC4F0(void); +static void CreateSliderHeartSprites(void); +static void SetBottomSliderHeartsInvisibility(bool8); +static void CreateNextTurnSprites(void); static void CreateApplauseMeterSprite(void); static void sub_80DC5E8(void); static void sub_80DC7EC(void); @@ -149,7 +123,7 @@ static void TryMoveApplauseMeterOffscreen(void); static void sub_80DE224(void); static void sub_80DE350(void); static void sub_80DE424(u8); -static void sub_80DE69C(u8); +static void AnimateSliderHearts(u8); static void sub_80DEA20(void); static void Contest_StartTextPrinter(const u8 *, u32); static void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, s16); @@ -180,15 +154,15 @@ static void sub_80DDE0C(void); static void UpdateApplauseMeter(void); static void RankContestants(void); static void sub_80DBA18(void); -static void sub_80DC3AC(void); -static bool8 sub_80DC3C4(void); +static void UpdateHeartSliders(void); +static bool8 SlidersDoneUpdating(void); static void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8); static void Contest_PrintTextToBg0WindowStd(u32, const u8 *); static s16 GetContestantRound2Points(u8); static void DetermineFinalStandings(void); static bool8 sub_80DBF30(s32, s32, struct UnknownContestStruct6 *); static void sub_80DC0F4(u8); -static void sub_80DC408(struct Sprite *); +static void SpriteCB_UpdateHeartSlider(struct Sprite *); static void sub_80DC728(u8); static void sub_80DC6A4(u8); static void sub_80DC8D0(u8); @@ -208,16 +182,58 @@ static void sub_80DE464(u8); static void sub_80DE4A8(u8); static void sub_80DE5F4(u8); static void sub_80DE65C(u8); -static void sub_80DE794(u8); +static void Task_WaitForSliderHeartAnim(u8); static void sub_80DEA5C(void); static void sub_80DF250(void); static void sub_80DF4F8(void); static void sub_80DF080(u8); static void ContestDebugPrintBitStrings(void); -static void sub_80DF9D4(u8 *); -static void sub_80DF9E0(u8 *, s32); +static void StripPlayerNameForLinkContest(u8 *); +static void StripMonNameForLinkContest(u8 *, s32); static void SwapMoveDescAndContestTilemaps(void); +// An index into a palette where the text color for each contestant is stored. +// Contestant 0 will use palette color 10, contestant 1 will use color 11, etc. +#define CONTESTANT_TEXT_COLOR_START 10 + +enum +{ +// The "{Pokemon Name} / {Trainer Name}" windows. + CONTEST_WINDOW_CONTESTANT0_NAME, + CONTEST_WINDOW_CONTESTANT1_NAME, + CONTEST_WINDOW_CONTESTANT2_NAME, + CONTEST_WINDOW_CONTESTANT3_NAME, + CONTEST_WINDOW_GENERAL_TEXT, + // The available moves, from top to bottom + CONTEST_WINDOW_MOVE0, + CONTEST_WINDOW_MOVE1, + CONTEST_WINDOW_MOVE2, + CONTEST_WINDOW_MOVE3, + // The small "/" character between the move category and the + // appeal/jam display + CONTEST_WINDOW_SLASH, + CONTEST_WINDOW_MOVE_DESCRIPTION +}; + +#define MOVE_WINDOWS_START CONTEST_WINDOW_MOVE0 + +#define TAG_FACES_GFX 0xABE1 +#define TAG_APPLAUSE_METER 0xABE2 + +#define TAG_SLIDER_HEART 0x4E20 + +#define TAG_NEXT_TURN_PAL 0x4E22 +#define TAG_NEXT_TURN_1_GFX 0x4E22 +#define TAG_NEXT_TURN_2_GFX 0x4E23 +#define TAG_NEXT_TURN_3_GFX 0x4E24 +#define TAG_NEXT_TURN_4_GFX 0x4E25 + +enum { + SLIDER_HEART_ANIM_NORMAL, + SLIDER_HEART_ANIM_DISAPPEAR, + SLIDER_HEART_ANIM_APPEAR, +}; + // EWRAM vars. EWRAM_DATA struct ContestPokemon gContestMons[CONTESTANT_COUNT] = {0}; EWRAM_DATA s16 gContestMonConditions[CONTESTANT_COUNT] = {0}; @@ -250,24 +266,25 @@ extern const u8 gText_BDot[]; extern const u8 gText_CDot[]; extern void (*const gContestEffectFuncs[])(void); -static const u8 gUnknown_08587A6C[] = +static const u8 sSliderHeartYPositions[CONTESTANT_COUNT] = { - 0x24, 0x4C, 0x74, 0x9C + 36, 76, 116, 156 }; -static const u8 gUnknown_08587A70[] = +// The "Next Turn" sprites cover up the slider, so the y positions are the same as above +static const u8 sNextTurnSpriteYPositions[CONTESTANT_COUNT] = { - 0x24, 0x4C, 0x74, 0x9C + 36, 76, 116, 156 }; -static const struct SpriteSheet gUnknown_08587A74 = +static const struct SpriteSheet sSpriteSheet_SliderHeart = { - .data = gTiles_8C19450, + .data = gContestSliderHeart_Gfx, .size = 0x20, - .tag = 0x4E20 + .tag = TAG_SLIDER_HEART }; -static const struct OamData gOamData_8587A7C = +static const struct OamData sOam_SliderHeart = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -284,75 +301,75 @@ static const struct OamData gOamData_8587A7C = .affineParam = 0 }; -static const union AffineAnimCmd gSpriteAffineAnim_8587A84[] = +static const union AffineAnimCmd sAffineAnim_SliderHeart_Normal[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_8587A94[] = +static const union AffineAnimCmd sAffineAnim_SliderHeart_SpinDisappear[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, -20, 20), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(-10, -10, -20, 20), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8587AAC[] = +static const union AffineAnimCmd sAffineAnim_SliderHeart_SpinAppear[] = { - AFFINEANIMCMD_FRAME(0x38, 0x38, 0, 0), + AFFINEANIMCMD_FRAME(56, 56, 0, 0), AFFINEANIMCMD_FRAME(10, 10, 20, 20), AFFINEANIMCMD_END }; -static const union AffineAnimCmd* const gSpriteAffineAnimTable_8587AC4[] = +static const union AffineAnimCmd* const sAffineAnims_SliderHeart[] = { - gSpriteAffineAnim_8587A84, - gSpriteAffineAnim_8587A94, - gSpriteAffineAnim_8587AAC + [SLIDER_HEART_ANIM_NORMAL] = sAffineAnim_SliderHeart_Normal, + [SLIDER_HEART_ANIM_DISAPPEAR] = sAffineAnim_SliderHeart_SpinDisappear, + [SLIDER_HEART_ANIM_APPEAR] = sAffineAnim_SliderHeart_SpinAppear }; -static const struct SpriteTemplate gSpriteTemplate_8587AD0 = +static const struct SpriteTemplate sSpriteTemplate_SliderHeart = { - .tileTag = 0x4E20, + .tileTag = TAG_SLIDER_HEART, .paletteTag = 0xABE0, - .oam = &gOamData_8587A7C, + .oam = &sOam_SliderHeart, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_8587AC4, + .affineAnims = sAffineAnims_SliderHeart, .callback = SpriteCallbackDummy }; -static const struct CompressedSpriteSheet gUnknown_08587AE8[] = +static const struct CompressedSpriteSheet sSpriteSheet_NextTurn[CONTESTANT_COUNT] = { { .data = gContestNextTurnGfx, .size = 0x100, - .tag = 0x4E22 + .tag = TAG_NEXT_TURN_1_GFX }, { .data = gContestNextTurnGfx, .size = 0x100, - .tag = 0x4E23 + .tag = TAG_NEXT_TURN_2_GFX }, { .data = gContestNextTurnGfx, .size = 0x100, - .tag = 0x4E24 + .tag = TAG_NEXT_TURN_3_GFX }, { .data = gContestNextTurnGfx, .size = 0x100, - .tag = 0x4E25 + .tag = TAG_NEXT_TURN_4_GFX } }; -static const struct SpritePalette gUnknown_08587B08 = +static const struct SpritePalette sSpritePalette_NextTurn = { .data = gContestPal, - .tag = 0x4E22 + .tag = TAG_NEXT_TURN_PAL }; -static const struct OamData gOamData_8587B10 = +static const struct OamData sOam_NextTurn = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -369,39 +386,39 @@ static const struct OamData gOamData_8587B10 = .affineParam = 0 }; -static const struct SpriteTemplate gSpriteTemplate_8587B18[] = +static const struct SpriteTemplate sSpriteTemplates_NextTurn[CONTESTANT_COUNT] = { { - .tileTag = 0x4E22, - .paletteTag = 0x4E22, - .oam = &gOamData_8587B10, + .tileTag = TAG_NEXT_TURN_1_GFX, + .paletteTag = TAG_NEXT_TURN_PAL, + .oam = &sOam_NextTurn, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, { - .tileTag = 0x4E23, - .paletteTag = 0x4E22, - .oam = &gOamData_8587B10, + .tileTag = TAG_NEXT_TURN_2_GFX, + .paletteTag = TAG_NEXT_TURN_PAL, + .oam = &sOam_NextTurn, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, { - .tileTag = 0x4E24, - .paletteTag = 0x4E22, - .oam = &gOamData_8587B10, + .tileTag = TAG_NEXT_TURN_3_GFX, + .paletteTag = TAG_NEXT_TURN_PAL, + .oam = &sOam_NextTurn, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, { - .tileTag = 0x4E25, - .paletteTag = 0x4E22, - .oam = &gOamData_8587B10, + .tileTag = TAG_NEXT_TURN_4_GFX, + .paletteTag = TAG_NEXT_TURN_PAL, + .oam = &sOam_NextTurn, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -409,7 +426,7 @@ static const struct SpriteTemplate gSpriteTemplate_8587B18[] = } }; -const struct Subsprite gSubspriteTable_8587B78[] = +static const struct Subsprite sSubsprites_NextTurn[] = { { .x = -28, @@ -429,19 +446,19 @@ const struct Subsprite gSubspriteTable_8587B78[] = } }; -const struct SubspriteTable gSubspriteTables_8587B80[] = +static const struct SubspriteTable sSubspriteTable_NextTurn[] = { { - .subspriteCount = 2, - .subsprites = gSubspriteTable_8587B78 + .subspriteCount = ARRAY_COUNT(sSubsprites_NextTurn), + .subsprites = sSubsprites_NextTurn } }; const struct CompressedSpriteSheet gUnknown_08587B88 = { - .data = gUnknown_08C19168, + .data = gContestFaces_Gfx, .size = 0x180, - .tag = 0xABE1 + .tag = TAG_FACES_GFX }; const struct OamData gOamData_8587B90 = @@ -460,7 +477,7 @@ const struct OamData gOamData_8587B90 = const struct SpriteTemplate gSpriteTemplate_8587B98 = { - .tileTag = 0xABE1, + .tileTag = TAG_FACES_GFX, .paletteTag = 0xABE0, .oam = &gOamData_8587B90, .anims = gDummySpriteAnimTable, @@ -473,13 +490,13 @@ static const struct CompressedSpriteSheet sApplauseMeterSpriteSheet = { .data = gContestApplauseGfx, .size = 0x400, - .tag = APPLAUSE_METER_GFX_TAG + .tag = TAG_APPLAUSE_METER }; static const struct SpritePalette sApplauseMeterPalette = { .data = gContestPal, - .tag = APPLAUSE_METER_GFX_TAG + .tag = TAG_APPLAUSE_METER }; static const struct OamData sApplauseMeterOamData = @@ -498,8 +515,8 @@ static const struct OamData sApplauseMeterOamData = static const struct SpriteTemplate sApplauseMeterSpriteTemplate = { - .tileTag = APPLAUSE_METER_GFX_TAG, - .paletteTag = APPLAUSE_METER_GFX_TAG, + .tileTag = TAG_APPLAUSE_METER, + .paletteTag = TAG_APPLAUSE_METER, .oam = &sApplauseMeterOamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -887,7 +904,7 @@ void LoadContestBgAfterMoveAnim(void) CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0); CopyBgTilemapBufferToVram(3); LoadCompressedPalette(gOldContestPalette, 0, 0x200); - sub_80D782C(); + LoadContestPalettes(); for (i = 0; i < CONTESTANT_COUNT; i++) { u32 contestantWindowId = MOVE_WINDOWS_START + i; @@ -923,7 +940,7 @@ static void InitContestWindows(void) } } -static void sub_80D782C(void) +static void LoadContestPalettes(void) { s32 i; @@ -1060,8 +1077,8 @@ void CB2_StartContest(void) gBattle_BG1_Y = 0; BeginFastPaletteFade(2); gPaletteFade.bufferTransferDisabled = FALSE; - SetVBlankCallback(vblank_cb_battle); - eContest.mainTaskId = CreateTask(sub_80D7C7C, 10); + SetVBlankCallback(VBlankCB_Contest); + eContest.mainTaskId = CreateTask(Task_StartContestWaitFade, 10); SetMainCallback2(CB2_ContestMain); if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) { @@ -1072,16 +1089,16 @@ void CB2_StartContest(void) } } -static void sub_80D7C7C(u8 taskId) +static void Task_StartContestWaitFade(u8 taskId) { if (!gPaletteFade.active) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80D7CB4; + gTasks[taskId].func = Task_TryStartLinkContest; } } -static void sub_80D7CB4(u8 taskId) +static void Task_TryStartLinkContest(u8 taskId) { if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { @@ -1113,7 +1130,7 @@ static void sub_80D7CB4(u8 taskId) gPaletteFade.bufferTransferDisabled = FALSE; if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)) ContestPrintLinkStandby(); - CreateTask(sub_80D7DAC, 0); + CreateTask(Task_CommunicateMonIdxs, 0); gTasks[taskId].data[0] = 0; gTasks[taskId].func = TaskDummy1; } @@ -1124,12 +1141,12 @@ static void sub_80D7CB4(u8 taskId) } } -static void sub_80D7DAC(u8 taskId) +static void Task_CommunicateMonIdxs(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80D7DC8); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_EndCommunicateMonIdxs); } -static void sub_80D7DC8(u8 taskId) +static void Task_EndCommunicateMonIdxs(u8 taskId) { gTasks[taskId].data[0] = 1; gTasks[taskId].func = sub_80D7DE8; @@ -1137,6 +1154,7 @@ static void sub_80D7DC8(u8 taskId) static void sub_80D7DE8(u8 taskId) { + // data[0] always 1 here gTasks[taskId].data[0]--; if (gTasks[taskId].data[0] <= 0) { @@ -1184,15 +1202,15 @@ static bool8 SetupContestGraphics(u8 *stateVar) CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); CpuCopy32(tempPalette1, gPlttBufferUnfaded + (MOVE_WINDOWS_START + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.cachedWindowPalettes, sizeof(eUnknownHeap1A004.cachedWindowPalettes)); - sub_80D782C(); + LoadContestPalettes(); break; case 6: DrawContestantWindows(); FillContestantWindowBgs(); SwapMoveDescAndContestTilemaps(); eContest.unk19216 = sub_80DB120(); - sub_80DC2BC(); - sub_80DC4F0(); + CreateSliderHeartSprites(); + CreateNextTurnSprites(); CreateApplauseMeterSprite(); sub_80DC5E8(); sub_80DC7EC(); @@ -1272,7 +1290,7 @@ static void sub_80D8108(u8 taskId) break; gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80D833C; + gTasks[taskId].func = Task_DisplayAppealNumberText; break; } } @@ -1294,7 +1312,7 @@ static void CB2_ContestMain(void) sContestBgCopyFlags = 0; } -static void vblank_cb_battle(void) +static void VBlankCB_Contest(void) { SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); @@ -1314,7 +1332,7 @@ static void vblank_cb_battle(void) ScanlineEffect_InitHBlankDmaTransfer(); } -static void sub_80D833C(u8 taskId) +static void Task_DisplayAppealNumberText(u8 taskId) { if (gTasks[taskId].data[0] == 0) { @@ -1337,67 +1355,69 @@ static void sub_80D833C(u8 taskId) if (!Contest_RunTextPrinters()) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80D8424; + gTasks[taskId].func = Task_TryShowMoveSelectScreen; } } } -static void sub_80D8424(u8 taskId) +static void Task_TryShowMoveSelectScreen(u8 taskId) { + // Wait for button press to show move select screen if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON)) { PlaySE(SE_SELECT); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) { - sub_80DC490(TRUE); - gTasks[taskId].func = sub_80D8490; + SetBottomSliderHeartsInvisibility(TRUE); + gTasks[taskId].func = Task_ShowMoveSelectScreen; } else { - gTasks[taskId].func = sub_80D8894; + // Skip move selection (selected move will be MOVE_NONE) + gTasks[taskId].func = Task_SelectMove; } } } -static void sub_80D8490(u8 taskId) +static void Task_ShowMoveSelectScreen(u8 taskId) { u8 i; - u8 sp8[32]; + u8 moveName[32]; - gBattle_BG0_Y = 0xA0; - gBattle_BG2_Y = 0xA0; + gBattle_BG0_Y = 160; + gBattle_BG2_Y = 160; for (i = 0; i < MAX_MON_MOVES; i++) { u16 move = gContestMons[gContestPlayerMonIndex].moves[i]; - u8 *r5 = sp8; + u8 *moveNameBuffer = moveName; if (eContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE && sub_80DE1E8(gContestPlayerMonIndex) && AreMovesContestCombo(eContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0 && eContestantStatus[gContestPlayerMonIndex].hasJudgesAttention) { - r5 = StringCopy(sp8, gText_ColorLightShadowDarkGrey); + moveNameBuffer = StringCopy(moveName, gText_ColorLightShadowDarkGrey); } - else if (move != 0 + else if (move != MOVE_NONE && eContestantStatus[gContestPlayerMonIndex].prevMove == move && gContestMoves[move].effect != CONTEST_EFFECT_REPETITION_NOT_BORING) { // Gray the text because it is a repeated move - r5 = StringCopy(sp8, gText_ColorBlue); + moveNameBuffer = StringCopy(moveName, gText_ColorBlue); } - r5 = StringCopy(r5, gMoveNames[move]); + moveNameBuffer = StringCopy(moveNameBuffer, gMoveNames[move]); FillWindowPixelBuffer(i + MOVE_WINDOWS_START, PIXEL_FILL(0)); - Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, sp8, 5, 1, 7); + Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, moveName, 5, 1, 7); } - sub_80D880C(eContest.playerMoveChoice); + DrawMoveSelectArrow(eContest.playerMoveChoice); PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]); - gTasks[taskId].func = sub_80D8610; + gTasks[taskId].func = Task_HandleMoveSelectInput; } -static void sub_80D8610(u8 taskId) +static void Task_HandleMoveSelectInput(u8 taskId) { u8 numMoves = 0; s32 i; @@ -1411,15 +1431,16 @@ static void sub_80D8610(u8 taskId) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - gTasks[taskId].func = sub_80D8894; + gTasks[taskId].func = Task_SelectMove; } else { switch (gMain.newAndRepeatedKeys) { case B_BUTTON: + // Cancel move selection PlaySE(SE_SELECT); - sub_80DC490(FALSE); + SetBottomSliderHeartsInvisibility(FALSE); ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed); @@ -1430,29 +1451,29 @@ static void sub_80D8610(u8 taskId) Contest_StartTextPrinter(gStringVar4, 0); gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - gTasks[taskId].func = sub_80D8424; + gTasks[taskId].func = Task_TryShowMoveSelectScreen; break; case DPAD_LEFT: case DPAD_RIGHT: break; case DPAD_UP: - sub_80D883C(eContest.playerMoveChoice); + EraseMoveSelectArrow(eContest.playerMoveChoice); if (eContest.playerMoveChoice == 0) eContest.playerMoveChoice = numMoves - 1; else eContest.playerMoveChoice--; - sub_80D880C(eContest.playerMoveChoice); + DrawMoveSelectArrow(eContest.playerMoveChoice); PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]); if (numMoves > 1) PlaySE(SE_SELECT); break; case DPAD_DOWN: - sub_80D883C(eContest.playerMoveChoice); + EraseMoveSelectArrow(eContest.playerMoveChoice); if (eContest.playerMoveChoice == numMoves - 1) eContest.playerMoveChoice = 0; else eContest.playerMoveChoice++; - sub_80D880C(eContest.playerMoveChoice); + DrawMoveSelectArrow(eContest.playerMoveChoice); PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]); if (numMoves > 1) PlaySE(SE_SELECT); @@ -1461,18 +1482,18 @@ static void sub_80D8610(u8 taskId) } } -static void sub_80D880C(s8 a0) +static void DrawMoveSelectArrow(s8 moveIndex) { - ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + a0 * 2, 2, 2, 17, 1); + ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + moveIndex * 2, 2, 2, 17, 1); } -static void sub_80D883C(s8 a0) +static void EraseMoveSelectArrow(s8 moveIndex) { - ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + a0 * 2, 2, 1, 17, 1); - ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + a0 * 2, 2, 1, 17, 1); + ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + moveIndex * 2, 2, 1, 17, 1); + ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + moveIndex * 2, 2, 1, 17, 1); } -static void sub_80D8894(u8 taskId) +static void Task_SelectMove(u8 taskId) { if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { @@ -1480,33 +1501,33 @@ static void sub_80D8894(u8 taskId) u8 taskId2; eContestantStatus[gContestPlayerMonIndex].currMove = move; - taskId2 = CreateTask(sub_80FC9F8, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FC9F8, sub_80D892C); + taskId2 = CreateTask(Task_LinkContest_CommunicateMoveSelections, 0); + SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateMoveSelections, Task_EndCommunicateMoveSelections); gTasks[taskId].func = TaskDummy1; ContestPrintLinkStandby(); - sub_80DC490(FALSE); + SetBottomSliderHeartsInvisibility(FALSE); } else { GetAllChosenMoves(); - gTasks[taskId].func = sub_80D895C; + gTasks[taskId].func = Task_HideMoveSelectScreen; } } -static void sub_80D892C(u8 taskId) +static void Task_EndCommunicateMoveSelections(u8 taskId) { DestroyTask(taskId); - gTasks[eContest.mainTaskId].func = sub_80D895C; + gTasks[eContest.mainTaskId].func = Task_HideMoveSelectScreen; } -static void sub_80D895C(u8 taskId) +static void Task_HideMoveSelectScreen(u8 taskId) { s32 i; ContestClearGeneralTextWindow(); gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - sub_80DC490(FALSE); + SetBottomSliderHeartsInvisibility(FALSE); for (i = 0; i < CONTESTANT_COUNT; i++) { @@ -1520,10 +1541,10 @@ static void sub_80D895C(u8 taskId) LoadPalette(eUnknownHeap1A004.unk18204, 0, PLTT_BUFFER_SIZE * 2); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80D8A04; + gTasks[taskId].func = Task_HideApplauseMeterForAppealStart; } -static void sub_80D8A04(u8 taskId) +static void Task_HideApplauseMeterForAppealStart(u8 taskId) { if (++gTasks[taskId].data[0] > 2) { @@ -1531,15 +1552,15 @@ static void sub_80D8A04(u8 taskId) if (++gTasks[taskId].data[1] == 2) { TryMoveApplauseMeterOffscreen(); - sub_80DE69C(1); - gTasks[taskId].func = sub_80D8A50; + AnimateSliderHearts(SLIDER_HEART_ANIM_DISAPPEAR); + gTasks[taskId].func = Task_WaitHideApplauseMeterForAppealStart; } } } -static void sub_80D8A50(u8 taskId) +static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId) { - if (!eContest.applauseMeterIsMoving && !eContest.unk1920B_1) + if (!eContest.applauseMeterIsMoving && !eContest.sliderHeartsAnimating) gTasks[taskId].func = sub_80D8A88; } @@ -1984,7 +2005,7 @@ static void sub_80D8B38(u8 taskId) } return; case 17: - if (eContestantStatus[r6].disappointedRepeat) + if (eContestantStatus[r6].repeatedMove) { ContestClearGeneralTextWindow(); StringCopy(gStringVar1, gContestMons[r6].nickname); @@ -2039,7 +2060,7 @@ static void sub_80D8B38(u8 taskId) } if (r3 > 0) { - if (eContestantStatus[r6].disappointedRepeat) + if (eContestantStatus[r6].repeatedMove) r3 = 0; } ContestClearGeneralTextWindow(); @@ -2354,13 +2375,13 @@ static void sub_80DA28C(u8 taskId) case 0: if (++gTasks[taskId].data[1] > 20) { - sub_80DE69C(2); + AnimateSliderHearts(SLIDER_HEART_ANIM_APPEAR); gTasks[taskId].data[1] = 0; gTasks[taskId].data[0]++; } break; case 1: - if (!eContest.unk1920B_1) + if (!eContest.sliderHeartsAnimating) { if (++gTasks[taskId].data[1] > 20) { @@ -2370,7 +2391,7 @@ static void sub_80DA28C(u8 taskId) } break; case 2: - sub_80DC3AC(); + UpdateHeartSliders(); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].func = sub_80DA31C; @@ -2380,7 +2401,7 @@ static void sub_80DA28C(u8 taskId) static void sub_80DA31C(u8 taskId) { - if (sub_80DC3C4()) + if (SlidersDoneUpdating()) gTasks[taskId].func = sub_80DA348; } @@ -2430,14 +2451,14 @@ static void sub_80DA464(u8 taskId) if (gTasks[taskId].data[0]++ > 29) { gTasks[taskId].data[0] = 0; - sub_80DC3AC(); + UpdateHeartSliders(); gTasks[taskId].func = sub_80DA49C; } } static void sub_80DA49C(u8 taskId) { - if (sub_80DC3C4()) + if (SlidersDoneUpdating()) { gTasks[taskId].data[0] = 0; gTasks[taskId].func = sub_80DA4CC; @@ -2479,7 +2500,7 @@ static void sub_80DA51C(u8 taskId) static void sub_80DA5B4(u8 taskId) { if (!eContest.applauseMeterIsMoving) - gTasks[taskId].func = sub_80D833C; + gTasks[taskId].func = Task_DisplayAppealNumberText; } static void sub_80DA5E8(u8 taskId) @@ -2556,7 +2577,7 @@ static void sub_80DA7A0(u8 taskId) SetTaskFuncWithFollowupFunc(taskId2, sub_80FCACC, sub_80DA7EC); gTasks[taskId].func = TaskDummy1; ContestPrintLinkStandby(); - sub_80DC490(FALSE); + SetBottomSliderHeartsInvisibility(FALSE); } static void sub_80DA7EC(u8 taskId) @@ -2588,7 +2609,7 @@ static void sub_80DA874(void) static void TryPutPlayerLast(void) { if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)) - gContestPlayerMonIndex = 3; + gContestPlayerMonIndex = CONTESTANT_COUNT - 1; } static bool8 sub_80DA8A4(void) @@ -2598,7 +2619,7 @@ static bool8 sub_80DA8A4(void) return FALSE; } -void sub_80DA8C8(u8 partyIndex) +void CreateContestMonFromParty(u8 partyIndex) { u8 name[20]; u16 heldItem; @@ -2611,7 +2632,7 @@ void sub_80DA8C8(u8 partyIndex) StringCopy(name, gSaveBlock2Ptr->playerName); if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { - sub_80DF9D4(name); + StripPlayerNameForLinkContest(name); } memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8); if (gSaveBlock2Ptr->playerGender == MALE) @@ -2619,13 +2640,13 @@ void sub_80DA8C8(u8 partyIndex) else gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY; gContestMons[gContestPlayerMonIndex].aiChecks = 0; - gContestMons[gContestPlayerMonIndex].unk2C[0] = 0; + gContestMons[gContestPlayerMonIndex].highestRank = 0; gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); StringGetEnd10(name); if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { - sub_80DF9E0(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE)); + StripMonNameForLinkContest(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE)); } memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, POKEMON_NAME_LENGTH + 1); StringCopy(gContestMons[gContestPlayerMonIndex].nickname, name); @@ -2730,7 +2751,7 @@ void sub_80DAB8C(u8 contestType, u8 rank) opponentsCount--; } - sub_80DA8C8(gContestMonPartyIndex); + CreateContestMonFromParty(gContestMonPartyIndex); } void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) @@ -2770,8 +2791,8 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) u16 rnd = GetContestRand() % opponentsCount; gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]]; - sub_80DF9D4(gContestMons[gNumLinkContestPlayers + i].trainerName); - sub_80DF9E0(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE); + StripPlayerNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].trainerName); + StripMonNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE); for (j = rnd; opponents[j] != 0xFF; j++) opponents[j] = opponents[j + 1]; opponentsCount--; @@ -3167,7 +3188,7 @@ static bool8 sub_80DB798(u8 a) u16 r8 = 0; u8 r7 = gContestantTurnOrder[a] * 5 + 2; - if (eContestantStatus[a].resistant != 0 || eContestantStatus[a].immune != 0 || eContestantStatus[a].jamSafetyCount != 0 || eContestantStatus[a].jamReduction != 0) + if (eContestantStatus[a].resistant || eContestantStatus[a].immune || eContestantStatus[a].jamSafetyCount != 0 || eContestantStatus[a].jamReduction != 0) r8 = sub_80DB748(0); else if (eContestantStatus[a].nervous) r8 = sub_80DB748(1); @@ -3205,7 +3226,7 @@ static void ContestClearGeneralTextWindow(void) static u16 GetChosenMove(u8 contestant) { if (Contest_IsMonsTurnDisabled(contestant)) - return 0; + return MOVE_NONE; if (contestant == gContestPlayerMonIndex) { return gContestMons[contestant].moves[eContest.playerMoveChoice]; @@ -3333,8 +3354,8 @@ static void sub_80DBAA0(void) eContestantStatus[i].effectStringId = CONTEST_STRING_NONE; eContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; eContestantStatus[i].conditionMod = 0; - eContestantStatus[i].unk15_2 = eContestantStatus[i].disappointedRepeat; - eContestantStatus[i].disappointedRepeat = FALSE; + eContestantStatus[i].repeatedPrevMove = eContestantStatus[i].repeatedMove; + eContestantStatus[i].repeatedMove = FALSE; eContestantStatus[i].turnOrderModAction = 0; eContestantStatus[i].appealTripleCondition = 0; if (eContestantStatus[i].turnSkipped) @@ -3344,8 +3365,8 @@ static void sub_80DBAA0(void) } if (eContestantStatus[i].exploded) { - eContestantStatus[i].noMoreTurns = 1; - eContestantStatus[i].exploded = 0; + eContestantStatus[i].noMoreTurns = TRUE; + eContestantStatus[i].exploded = FALSE; } eContestantStatus[i].overrideCategoryExcitementMod = 0; } @@ -3634,56 +3655,60 @@ static void sub_80DC0F4(u8 taskId) } } -static void sub_80DC2BC(void) +static void CreateSliderHeartSprites(void) { s32 i; - LoadSpriteSheet(&gUnknown_08587A74); + LoadSpriteSheet(&sSpriteSheet_SliderHeart); for (i = 0; i < CONTESTANT_COUNT; i++) { - u8 y = gUnknown_08587A6C[gContestantTurnOrder[i]]; + u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]]; - gContestResources->field_14[i].unk0 = CreateSprite(&gSpriteTemplate_8587AD0, 180, y, 1); + gContestResources->field_14[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1); } } -static void sub_80DC308(u8 contestant) +#define sContestant data[0] +#define sTargetX data[1] +#define sMoveX data[2] + +static void UpdateHeartSlider(u8 contestant) { u8 spriteId; - s16 r5; + s16 slideTarget; - gContestResources->field_14[contestant].unk2_0 = 1; - spriteId = gContestResources->field_14[contestant].unk0; - r5 = eContestantStatus[contestant].pointTotal / 10 * 2; - if (r5 > 56) - r5 = 56; - else if (r5 < 0) - r5 = 0; + gContestResources->field_14[contestant].sliderUpdating = TRUE; + spriteId = gContestResources->field_14[contestant].sliderHeartSpriteId; + slideTarget = eContestantStatus[contestant].pointTotal / 10 * 2; + if (slideTarget > 56) + slideTarget = 56; + else if (slideTarget < 0) + slideTarget = 0; gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].data[0] = contestant; - gSprites[spriteId].data[1] = r5; - if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x) - gSprites[spriteId].data[2] = 1; + gSprites[spriteId].sContestant = contestant; + gSprites[spriteId].sTargetX = slideTarget; + if (gSprites[spriteId].sTargetX > gSprites[spriteId].pos2.x) + gSprites[spriteId].sMoveX = 1; else - gSprites[spriteId].data[2] = -1; - gSprites[spriteId].callback = sub_80DC408; + gSprites[spriteId].sMoveX = -1; + gSprites[spriteId].callback = SpriteCB_UpdateHeartSlider; } -static void sub_80DC3AC(void) +static void UpdateHeartSliders(void) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - sub_80DC308(i); + UpdateHeartSlider(i); } -static bool8 sub_80DC3C4(void) +static bool8 SlidersDoneUpdating(void) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (gContestResources->field_14[i].unk2_0) + if (gContestResources->field_14[i].sliderUpdating) break; } if (i == CONTESTANT_COUNT) @@ -3692,57 +3717,64 @@ static bool8 sub_80DC3C4(void) return FALSE; } -static void sub_80DC408(struct Sprite *sprite) +static void SpriteCB_UpdateHeartSlider(struct Sprite *sprite) { - if (sprite->pos2.x == sprite->data[1]) + if (sprite->pos2.x == sprite->sTargetX) { - gContestResources->field_14[sprite->data[0]].unk2_0 = 0; + gContestResources->field_14[sprite->sContestant].sliderUpdating = FALSE; sprite->callback = SpriteCallbackDummy; } else { - sprite->pos2.x += sprite->data[2]; + sprite->pos2.x += sprite->sMoveX; } } -static void sub_80DC44C(void) +#undef sContestant +#undef sTargetX +#undef sMoveX + +// Y positions change as the contestants change order +static void UpdateSliderHeartSpriteYPositions(void) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - gSprites[gContestResources->field_14[i].unk0].pos1.y = gUnknown_08587A6C[gContestantTurnOrder[i]]; + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]]; } -static void sub_80DC490(bool8 a) +// Used to hide (or subsequently reshow) the bottom two slider hearts that get hidden by text windows by moving them offscreen +static void SetBottomSliderHeartsInvisibility(bool8 invisible) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) { + // The contestants that go 3rd and 4th should be moved if (gContestantTurnOrder[i] > 1) { - if (!a) - gSprites[gContestResources->field_14[i].unk0].pos1.x = 180; + if (!invisible) + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].pos1.x = 180; else - gSprites[gContestResources->field_14[i].unk0].pos1.x = 256; + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].pos1.x = 256; } } } -static void sub_80DC4F0(void) +static void CreateNextTurnSprites(void) { s32 i; - LoadSpritePalette(&gUnknown_08587B08); + LoadSpritePalette(&sSpritePalette_NextTurn); for (i = 0; i < CONTESTANT_COUNT; i++) { - LoadCompressedSpriteSheet(&gUnknown_08587AE8[i]); - gContestResources->field_14[i].unk1 = CreateSprite(&gSpriteTemplate_8587B18[i], + LoadCompressedSpriteSheet(&sSpriteSheet_NextTurn[i]); + gContestResources->field_14[i].nextTurnSpriteId = CreateSprite(&sSpriteTemplates_NextTurn[i], 204, - gUnknown_08587A70[gContestantTurnOrder[i]], + sNextTurnSpriteYPositions[gContestantTurnOrder[i]], 0); - SetSubspriteTables(&gSprites[gContestResources->field_14[i].unk1], gSubspriteTables_8587B80); - gSprites[gContestResources->field_14[i].unk1].invisible = TRUE; + SetSubspriteTables(&gSprites[gContestResources->field_14[i].nextTurnSpriteId], sSubspriteTable_NextTurn); + gSprites[gContestResources->field_14[i].nextTurnSpriteId].invisible = TRUE; } } @@ -4225,7 +4257,7 @@ static void sub_80DD080(u8 contestant) eContestantStatus[contestant].moveCategory = gContestMoves[eContestantStatus[contestant].currMove].contestCategory; if (eContestantStatus[contestant].currMove == eContestantStatus[contestant].prevMove && eContestantStatus[contestant].currMove != MOVE_NONE) { - eContestantStatus[contestant].disappointedRepeat = TRUE; + eContestantStatus[contestant].repeatedMove = TRUE; eContestantStatus[contestant].moveRepeatCount++; } else @@ -4258,25 +4290,25 @@ static void sub_80DD080(u8 contestant) eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition; eContestantStatus[contestant].unk16 = 0; - eContestantStatus[contestant].unk15_6 = 0; + eContestantStatus[contestant].unk15_6 = FALSE; if (sub_80DE1E8(contestant)) { - u8 r2 = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove); + bool8 usedCombo = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove); - if (r2 != 0 && eContestantStatus[contestant].hasJudgesAttention) + if (usedCombo && eContestantStatus[contestant].hasJudgesAttention) { - eContestantStatus[contestant].unk16 = r2; - eContestantStatus[contestant].unk15_6 = 1; + eContestantStatus[contestant].unk16 = usedCombo; + eContestantStatus[contestant].unk15_6 = TRUE; eContestantStatus[contestant].hasJudgesAttention = 0; eContestantStatus[contestant].unk17 = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].unk16; - eContestantStatus[contestant].unk15_3 = 1; + eContestantStatus[contestant].unk15_3 = TRUE; } else { if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) { eContestantStatus[contestant].hasJudgesAttention = 1; - eContestantStatus[contestant].unk15_6 = 1; + eContestantStatus[contestant].unk15_6 = TRUE; } else { @@ -4284,7 +4316,7 @@ static void sub_80DD080(u8 contestant) } } } - if (eContestantStatus[contestant].disappointedRepeat) + if (eContestantStatus[contestant].repeatedMove) eContestantStatus[contestant].unk18 = (eContestantStatus[contestant].moveRepeatCount + 1) * 10; if (eContestantStatus[contestant].nervous) @@ -4309,7 +4341,7 @@ static void sub_80DD080(u8 contestant) eContestResources10.unk2 = 0; } - rnd = Random() % 3; + rnd = Random() % (CONTESTANT_COUNT - 1); for (i = 0; i < CONTESTANT_COUNT; i++) { if (i != contestant) @@ -4537,7 +4569,7 @@ static u8 StartApplauseOverflowAnimation(void) u8 taskId = CreateTask(Task_ApplauseOverflowAnimation, 10); gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(APPLAUSE_METER_GFX_TAG); + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(TAG_APPLAUSE_METER); return taskId; } @@ -4661,14 +4693,14 @@ static void Task_ShowAndUpdateApplauseMeter(u8 taskId) } // Unused. -void HideApplauseMeterNoAnim(void) +static void HideApplauseMeterNoAnim(void) { gSprites[eContest.applauseMeterSpriteId].pos2.x = 0; gSprites[eContest.applauseMeterSpriteId].invisible = FALSE; } // Unused. -void ShowApplauseMeterNoAnim(void) +static void ShowApplauseMeterNoAnim(void) { gSprites[eContest.applauseMeterSpriteId].invisible = TRUE; } @@ -4779,13 +4811,13 @@ static void sub_80DE008(bool8 a) { if (eContestantStatus[i].turnOrderMod != 0 && a) { - CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[gContestResources->field_14[i].unk1].oam.tileNum + 6) * 32), 32); - gSprites[gContestResources->field_14[i].unk1].pos1.y = gUnknown_08587A70[gContestantTurnOrder[i]]; - gSprites[gContestResources->field_14[i].unk1].invisible = FALSE; + CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[gContestResources->field_14[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); + gSprites[gContestResources->field_14[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]]; + gSprites[gContestResources->field_14[i].nextTurnSpriteId].invisible = FALSE; } else { - gSprites[gContestResources->field_14[i].unk1].invisible = TRUE; + gSprites[gContestResources->field_14[i].nextTurnSpriteId].invisible = TRUE; } } } @@ -4800,21 +4832,17 @@ static const u8 *GetTurnOrderNumberGfx(u8 contestant) static void sub_80DE12C(void) { - s32 r7 = 0; - u8 r10 = 2; - u8 r8 = 1; - u8 r9 = 0x11; - - for (r7 = 0; r7 < CONTESTANT_COUNT; r7++) + s32 i = 0; + for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.unnervedPokes[r7] != 0 && !Contest_IsMonsTurnDisabled(r7)) + if (eContestResources8.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) { - u32 r6 = gContestantTurnOrder[r7] * 5 + 2; + u32 r6 = gContestantTurnOrder[i] * 5 + 2; u16 var = sub_80DB748(3); - ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6, r10, r8, r9, r8); + ContestBG_FillBoxWithIncrementingTile(0, var, 20, r6, 2, 1, 17, 1); var += 16; - ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6 + 1, r10, r8, r9, r8); + ContestBG_FillBoxWithIncrementingTile(0, var, 20, r6 + 1, 2, 1, 17, 1); PlaySE(SE_C_PASI); } } @@ -4822,7 +4850,7 @@ static void sub_80DE12C(void) bool8 sub_80DE1E8(u8 contestant) { - if (eContestantStatus[contestant].disappointedRepeat || eContestantStatus[contestant].nervous) + if (eContestantStatus[contestant].repeatedMove || eContestantStatus[contestant].nervous) return FALSE; else return TRUE; @@ -4859,10 +4887,10 @@ static void sub_80DE224(void) CopyToBgTilemapBuffer(1, gUnknown_08C17980, 0, 0); Contest_SetBgCopyFlags(1); - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { - gSprites[gContestResources->field_14[i].unk0].oam.priority = 1; - gSprites[gContestResources->field_14[i].unk1].oam.priority = 1; + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.priority = 1; + gSprites[gContestResources->field_14[i].nextTurnSpriteId].oam.priority = 1; } } @@ -4887,8 +4915,8 @@ static void sub_80DE350(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - gSprites[gContestResources->field_14[i].unk0].oam.priority = 0; - gSprites[gContestResources->field_14[i].unk1].oam.priority = 0; + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.priority = 0; + gSprites[gContestResources->field_14[i].nextTurnSpriteId].oam.priority = 0; } } @@ -4927,7 +4955,7 @@ static void sub_80DE4A8(u8 taskId) sub_80DB69C(); DrawContestantWindows(); sub_80DE008(TRUE); - sub_80DC44C(); + UpdateSliderHeartSpriteYPositions(); gTasks[taskId].data[0] = 1; break; case 1: @@ -5013,45 +5041,49 @@ static void sub_80DE65C(u8 taskId) } } -static void sub_80DE69C(u8 a) +#define tAnimId data[0] + +static void AnimateSliderHearts(u8 animId) { s32 i; u8 taskId; for (i = 0; i < CONTESTANT_COUNT; i++) { - gSprites[gContestResources->field_14[i].unk0].oam.matrixNum = AllocOamMatrix(); - gSprites[gContestResources->field_14[i].unk0].oam.affineMode = ST_OAM_AFFINE_NORMAL; - StartSpriteAffineAnim(&gSprites[gContestResources->field_14[i].unk0], a); - if (a == 2) + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix(); + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + StartSpriteAffineAnim(&gSprites[gContestResources->field_14[i].sliderHeartSpriteId], animId); + if (animId == SLIDER_HEART_ANIM_APPEAR) { - AnimateSprite(&gSprites[gContestResources->field_14[i].unk0]); - gSprites[gContestResources->field_14[i].unk0].invisible = FALSE; + AnimateSprite(&gSprites[gContestResources->field_14[i].sliderHeartSpriteId]); + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].invisible = FALSE; } } - taskId = CreateTask(sub_80DE794, 5); - gTasks[taskId].data[0] = a; - eContest.unk1920B_1 = 1; + taskId = CreateTask(Task_WaitForSliderHeartAnim, 5); + gTasks[taskId].tAnimId = animId; + eContest.sliderHeartsAnimating = TRUE; } -static void sub_80DE794(u8 taskId) +static void Task_WaitForSliderHeartAnim(u8 taskId) { s32 i; - if (gSprites[gContestResources->field_14[0].unk0].affineAnimEnded) + if (gSprites[gContestResources->field_14[0].sliderHeartSpriteId].affineAnimEnded) { - if ((u8)gTasks[taskId].data[0] == 1) + if ((u8)gTasks[taskId].tAnimId == SLIDER_HEART_ANIM_DISAPPEAR) { for (i = 0; i < CONTESTANT_COUNT; i++) - gSprites[gContestResources->field_14[i].unk0].invisible = TRUE; + gSprites[gContestResources->field_14[i].sliderHeartSpriteId].invisible = TRUE; } for (i = 0; i < CONTESTANT_COUNT; i++) - FreeSpriteOamMatrix(&gSprites[gContestResources->field_14[i].unk0]); - eContest.unk1920B_1 = 0; + FreeSpriteOamMatrix(&gSprites[gContestResources->field_14[i].sliderHeartSpriteId]); + eContest.sliderHeartsAnimating = FALSE; DestroyTask(taskId); } } +#undef tAnimId + static u16 SanitizeMove(u16 move) { if (move >= MOVES_COUNT) @@ -5073,7 +5105,7 @@ static void sub_80DE864(u8 a) u16 species = SanitizeSpecies(gContestMons[a].species); u8 r5_2; - memset(&gContestResources->field_18->species, 0, 0x14); + memset(&gContestResources->field_18->species, 0, 20); ClearBattleAnimationVars(); for (i = 0; i < CONTESTANT_COUNT; i++) gBattleMonForms[i] = 0; @@ -5277,7 +5309,7 @@ void ResetContestLinkResults(void) s32 j; for(i = 0; i < CONTEST_CATEGORIES_COUNT; i++) - for(j = 0; j < 4; j++) + for(j = 0; j < CONTESTANT_COUNT; j++) gSaveBlock2Ptr->contestLinkResults[i][j] = 0; } @@ -5391,7 +5423,7 @@ static void sub_80DF080(u8 contestant) if (!gContestResources->field_10->excitementFrozen && gContestResources->field_10->bits_0 > 0 - && !eContestantStatus[contestant].disappointedRepeat) + && !eContestantStatus[contestant].repeatedMove) { gContestResources->field_1c[contestant].unkC |= 1; gContestResources->field_1c[contestant].unkE_2 = 1; @@ -5434,7 +5466,7 @@ static void sub_80DF080(u8 contestant) gContestResources->field_1c[contestant].unk0[eContest.turnNumber] = eContestantStatus[contestant].currMove; } - if (eContestantStatus[contestant].disappointedRepeat) + if (eContestantStatus[contestant].repeatedMove) gContestResources->field_1c[contestant].unkD |= 2; if (eContest.applauseLevel == 4 @@ -5745,14 +5777,14 @@ static void ContestDebugPrintBitStrings(void) SwapMoveDescAndContestTilemaps(); } -static u8 sub_80DF940(u8 *nickname) +static u8 GetMonNicknameLanguage(u8 *nickname) { u8 ret = GAME_LANGUAGE; if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN) return LANGUAGE_ENGLISH; - if (StringLength(nickname) < 6) + if (StringLength(nickname) < PLAYER_NAME_LENGTH - 1) { while (*nickname != EOS) { @@ -5786,7 +5818,7 @@ static u8 sub_80DF940(u8 *nickname) return ret; } -static void sub_80DF9D4(u8 *playerName) +static void StripPlayerNameForLinkContest(u8 *playerName) { u8 chr = playerName[5]; @@ -5794,7 +5826,7 @@ static void sub_80DF9D4(u8 *playerName) playerName[PLAYER_NAME_LENGTH] = chr; } -static void sub_80DF9E0(u8 *monName, s32 language) +static void StripMonNameForLinkContest(u8 *monName, s32 language) { u8 chr; @@ -5812,13 +5844,13 @@ static void sub_80DF9E0(u8 *monName, s32 language) } } -void sub_80DFA08(struct ContestPokemon *mon, s32 language) +void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language) { u8 *name = mon->nickname; if (language == LANGUAGE_JAPANESE) { - ConvertInternationalString(name, sub_80DF940(name)); + ConvertInternationalString(name, GetMonNicknameLanguage(name)); } else if (name[POKEMON_NAME_LENGTH] == EXT_CTRL_CODE_BEGIN) { diff --git a/src/contest_ai.c b/src/contest_ai.c index 723c503ab7..e2afb2890c 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -4,6 +4,7 @@ #include "random.h" #include "contest_ai.h" #include "contest_effect.h" +#include "constants/moves.h" extern const u8 *gAIScriptPtr; extern const u8 *gContestAIChecks[]; @@ -288,7 +289,7 @@ static const ContestAICmdFunc sContestAICmdTable[] = }; static void ContestAI_DoAIProcessing(void); -static bool8 sub_81563B0(u8); +static bool8 GetContestantIdByTurn(u8); static void AIStackPushVar(const u8 *); static u8 AIStackPop(void); @@ -297,8 +298,8 @@ void ContestAI_ResetAI(u8 contestantAI) int i; memset(&eContestAI, 0, sizeof(struct ContestAIInfo)); - for (i = 0; i < 4; i++) - eContestAI.unk5[i] = 100; + for (i = 0; i < MAX_MON_MOVES; i++) + eContestAI.moveScores[i] = 100; eContestAI.contestantId = contestantAI; eContestAI.stackSize = 0; @@ -321,16 +322,18 @@ u8 ContestAI_GetActionToUse(void) while (1) { - u8 rval = Random() & 3; - u8 r2 = eContestAI.unk5[rval]; + // Randomly choose a move index. If it's the move + // with the highest (or tied highest) score, return + u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % 4 doesn't match + u8 score = eContestAI.moveScores[moveIdx]; int i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { - if (r2 < eContestAI.unk5[i]) + if (score < eContestAI.moveScores[i]) break; } - if (i == 4) - return rval; + if (i == MAX_MON_MOVES) + return moveIdx; } } @@ -345,26 +348,26 @@ static void ContestAI_DoAIProcessing(void) case CONTESTAI_SETTING_UP: gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck]; - if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == 0) - eContestAI.nextMove = 0; // don't process a move that doesn't exist. + if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE) + eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist. else eContestAI.nextMove = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex]; eContestAI.aiState++; break; case CONTESTAI_PROCESSING: - if (eContestAI.nextMove != 0) + if (eContestAI.nextMove != MOVE_NONE) { sContestAICmdTable[*gAIScriptPtr](); // run the command. } else { - eContestAI.unk5[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist. + eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist. eContestAI.aiAction |= 1; } if (eContestAI.aiAction & 1) { eContestAI.nextMoveIndex++; - if (eContestAI.nextMoveIndex < 4) + if (eContestAI.nextMoveIndex < MAX_MON_MOVES) eContestAI.aiState = 0; else // aiState = CONTESTAI_FINISHED @@ -376,12 +379,12 @@ static void ContestAI_DoAIProcessing(void) } } -static u8 sub_81563B0(u8 var) +static u8 GetContestantIdByTurn(u8 turn) { int i; - for (i = 0; i < 4; i++) - if (eContestResources8.turnOrder[i] == var) + for (i = 0; i < CONTESTANT_COUNT; i++) + if (eContestResources8.turnOrder[i] == turn) break; return i; @@ -389,14 +392,14 @@ static u8 sub_81563B0(u8 var) static void ContestAICmd_score(void) { - s16 score = eContestAI.unk5[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1]; + s16 score = eContestAI.moveScores[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1]; if (score > 255) score = 255; else if (score < 0) score = 0; - eContestAI.unk5[eContestAI.nextMoveIndex] = score; + eContestAI.moveScores[eContestAI.nextMoveIndex] = score; gAIScriptPtr += 2; } @@ -1146,9 +1149,9 @@ static void ContestAICmd_if_would_not_finish_combo(void) static void ContestAICmd_get_condition(void) { - int var = sub_81563B0(gAIScriptPtr[1]); + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - eContestAI.scriptResult = eContestantStatus[var].condition / 10; + eContestAI.scriptResult = eContestantStatus[contestant].condition / 10; gAIScriptPtr += 2; } @@ -1194,11 +1197,11 @@ static void ContestAICmd_if_condition_not_eq(void) static void ContestAICmd_get_used_combo_starter(void) { - u16 result = 0; - u8 var = sub_81563B0(gAIScriptPtr[1]); + u16 result = FALSE; + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - if (sub_80DE1E8(var)) - result = gContestMoves[eContestantStatus[var].prevMove].comboStarterId ? 1 : 0; + if (sub_80DE1E8(contestant)) + result = gContestMoves[eContestantStatus[contestant].prevMove].comboStarterId ? TRUE : FALSE; eContestAI.scriptResult = result; gAIScriptPtr += 2; @@ -1246,7 +1249,7 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void) static void ContestAICmd_check_can_participate(void) { - if (Contest_IsMonsTurnDisabled(sub_81563B0(gAIScriptPtr[1]))) + if (Contest_IsMonsTurnDisabled(GetContestantIdByTurn(gAIScriptPtr[1]))) eContestAI.scriptResult = FALSE; else eContestAI.scriptResult = TRUE; @@ -1276,9 +1279,9 @@ static void ContestAICmd_if_cannot_participate(void) static void ContestAICmd_get_val_812A188(void) { - u8 var = sub_81563B0(gAIScriptPtr[1]); + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - eContestAI.scriptResult = eContestantStatus[var].unk15_3; + eContestAI.scriptResult = eContestantStatus[contestant].unk15_3; gAIScriptPtr += 2; } @@ -1304,9 +1307,9 @@ static void ContestAICmd_contest_58(void) static void ContestAICmd_unk_59(void) { - u8 var = sub_81563B0(gAIScriptPtr[1]); + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - eContestAI.scriptResult = eContestantStatus[var].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal; + eContestAI.scriptResult = eContestantStatus[contestant].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal; gAIScriptPtr += 2; } @@ -1352,9 +1355,9 @@ static void ContestAICmd_unk_5D(void) static void ContestAICmd_unk_5E(void) { - u8 var = sub_81563B0(gAIScriptPtr[1]); + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - eContestAI.scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI.contestantId]; + eContestAI.scriptResult = gContestMonConditions[contestant] - gContestMonConditions[eContestAI.contestantId]; gAIScriptPtr += 2; } @@ -1400,9 +1403,9 @@ static void ContestAICmd_unk_62(void) static void ContestAICmd_unk_63(void) { - u8 var = sub_81563B0(gAIScriptPtr[1]); - u8 var2 = gAIScriptPtr[2]; - u16 move = eContest.moveHistory[var2][var]; + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); + u8 turn = gAIScriptPtr[2]; + u16 move = eContest.moveHistory[turn][contestant]; eContestAI.scriptResult = gContestMoves[move].effect; gAIScriptPtr += 3; @@ -1450,9 +1453,9 @@ static void ContestAICmd_unk_67(void) static void ContestAICmd_unk_68(void) { - u8 var = sub_81563B0(gAIScriptPtr[1]); - u8 var2 = gAIScriptPtr[2]; - s8 result = eContest.excitementHistory[var2][var]; + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); + u8 turn = gAIScriptPtr[2]; + s8 result = eContest.excitementHistory[turn][contestant]; eContestAI.scriptResult = result; gAIScriptPtr += 3; @@ -1500,9 +1503,9 @@ static void ContestAICmd_unk_6C(void) static void ContestAICmd_unk_6D(void) { - u8 var = sub_81563B0(gAIScriptPtr[1]); - u8 var2 = gAIScriptPtr[2]; - u16 move = eContest.moveHistory[var2][var]; + u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); + u8 turn = gAIScriptPtr[2]; + u16 move = eContest.moveHistory[turn][contestant]; eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType; gAIScriptPtr += 3; diff --git a/src/contest_effect.c b/src/contest_effect.c index d6b06c3bae..1d3c817763 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -97,7 +97,7 @@ static void ContestEffect_GreatAppealButNoMoreMoves(void) static void ContestEffect_RepetitionNotBoring(void) { eContestantStatus[eContestResources8.contestant].usedRepeatableMove = TRUE; - eContestantStatus[eContestResources8.contestant].disappointedRepeat = FALSE; + eContestantStatus[eContestResources8.contestant].repeatedMove = FALSE; eContestantStatus[eContestResources8.contestant].moveRepeatCount = 0; } @@ -138,7 +138,7 @@ static void ContestEffect_StartleFrontMon(void) if (eContestResources8.turnOrder[a] != 0) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[a] - 1 == eContestResources8.turnOrder[i]) break; @@ -156,15 +156,15 @@ static void ContestEffect_StartleFrontMon(void) static void ContestEffect_StartlePrevMons(void) { u8 idx = 0; - u8 a = eContestResources8.contestant; + u8 contestant = eContestResources8.contestant; - if (eContestResources8.turnOrder[a] != 0) + if (eContestResources8.turnOrder[contestant] != 0) { int i, j; - for (i = 0, j = 0; i < 4; i++) + for (i = 0, j = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[a] > eContestResources8.turnOrder[i]) + if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i]) eContestResources8.jamQueue[j++] = i; } @@ -390,11 +390,11 @@ static void ContestEffect_MakeFollowingMonsNervous(void) u8 contestantIds[5]; int i; int numAfter; - s16 oddsMod[4]; - s16 odds[4]; + s16 oddsMod[CONTESTANT_COUNT]; + s16 odds[CONTESTANT_COUNT]; memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds)); - for (i = 0, numAfter = 0; i < 4; i++) + for (i = 0, numAfter = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] < eContestResources8.turnOrder[i] && !eContestantStatus[i].nervous && !Contest_IsMonsTurnDisabled(i)) @@ -418,10 +418,10 @@ static void ContestEffect_MakeFollowingMonsNervous(void) } else { - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) odds[i] = 0; } - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestantStatus[i].hasJudgesAttention && sub_80DE1E8(i)) oddsMod[i] = gComboStarterLookupTable[gContestMoves[eContestantStatus[i].prevMove].comboStarterId] * 10; @@ -471,7 +471,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) u8 numHit = 0; int i; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i] && eContestantStatus[i].condition > 0 && @@ -495,7 +495,7 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void) u8 numHit = 0; int i; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) { @@ -542,7 +542,7 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void) int i; int appealSum; - for (i = 0, appealSum = 0; i < 4; i++) + for (i = 0, appealSum = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) appealSum += eContestantStatus[i].appeal2; @@ -570,7 +570,7 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void) if (eContestResources8.turnOrder[eContestResources8.contestant] != 0) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i]) appeal = eContestantStatus[i].appeal2; @@ -647,7 +647,7 @@ static void ContestEffect_BetterIfSameType(void) while (1) { - for (j = 0; j < 4; j++) + for (j = 0; j < CONTESTANT_COUNT; j++) { if (eContestResources8.turnOrder[j] == i) break; @@ -679,7 +679,7 @@ static void ContestEffect_BetterIfDiffType(void) u16 move = eContestantStatus[eContestResources8.contestant].currMove; int i; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i] && gContestMoves[move].contestCategory != gContestMoves[eContestantStatus[i].currMove].contestCategory) @@ -699,7 +699,7 @@ static void ContestEffect_AffectedByPrevAppeal(void) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i]) { @@ -748,18 +748,18 @@ static void ContestEffect_NextAppealEarlier(void) { s8 i; s8 j; - u8 turnOrder[4]; + u8 turnOrder[CONTESTANT_COUNT]; if (eContest.turnNumber != 4) { - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; turnOrder[eContestResources8.contestant] = 0xFF; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { - for (j = 0; j < 4; j++) + for (j = 0; j < CONTESTANT_COUNT; j++) { if (j != eContestResources8.contestant && i == turnOrder[j] && @@ -769,14 +769,14 @@ static void ContestEffect_NextAppealEarlier(void) break; } } - if (j == 4) + if (j == CONTESTANT_COUNT) break; } turnOrder[eContestResources8.contestant] = 0; eContestantStatus[eContestResources8.contestant].turnOrderMod = 1; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].nextTurnOrder = turnOrder[i]; } @@ -790,18 +790,18 @@ static void ContestEffect_NextAppealLater(void) { s8 i; s8 j; - u8 turnOrder[4]; + u8 turnOrder[CONTESTANT_COUNT]; if (eContest.turnNumber != 4) { - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; turnOrder[eContestResources8.contestant] = 0xFF; - for (i = 3; i > -1; i--) + for (i = CONTESTANT_COUNT - 1; i > -1; i--) { - for (j = 0; j < 4; j++) + for (j = 0; j < CONTESTANT_COUNT; j++) { if (j != eContestResources8.contestant && i == turnOrder[j] && @@ -811,14 +811,14 @@ static void ContestEffect_NextAppealLater(void) break; } } - if (j == 4) + if (j == CONTESTANT_COUNT) break; } - turnOrder[eContestResources8.contestant] = 3; + turnOrder[eContestResources8.contestant] = CONTESTANT_COUNT - 1; eContestantStatus[eContestResources8.contestant].turnOrderMod = 1; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].nextTurnOrder = turnOrder[i]; } @@ -838,22 +838,22 @@ static void ContestEffect_ScrambleNextTurnOrder(void) { s8 i; s8 j; - u8 turnOrder[4]; - u8 unselectedContestants[4]; + u8 turnOrder[CONTESTANT_COUNT]; + u8 unselectedContestants[CONTESTANT_COUNT]; if (eContest.turnNumber != 4) { - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { turnOrder[i] = eContestantStatus[i].nextTurnOrder; unselectedContestants[i] = i; } - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { - u8 rval = Random() % (4 - i); + u8 rval = Random() % (CONTESTANT_COUNT - i); - for (j = 0; j < 4; j++) + for (j = 0; j < CONTESTANT_COUNT; j++) { if (unselectedContestants[j] != 0xFF) { @@ -869,7 +869,7 @@ static void ContestEffect_ScrambleNextTurnOrder(void) } } - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].nextTurnOrder = turnOrder[i]; eContestantStatus[i].turnOrderMod = 2; @@ -894,7 +894,7 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) int i; u8 numJammed = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) { @@ -965,7 +965,7 @@ static void JamByMoveCategory(u8 category) int i; int numJammed = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) { @@ -1010,7 +1010,7 @@ static bool8 CanUnnerveContestant(u8 i) static bool8 WasAtLeastOneOpponentJammed(void) { - s16 jamBuffer[4] = {0}; + s16 jamBuffer[CONTESTANT_COUNT] = {0}; int i; for (i = 0; eContestResources8.jamQueue[i] != 0xFF; i++) @@ -1044,7 +1044,7 @@ static bool8 WasAtLeastOneOpponentJammed(void) } } - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) { if (jamBuffer[i] != 0) return TRUE; diff --git a/src/contest_link.c b/src/contest_link.c index eb688f55e8..9241102e7c 100644 --- a/src/contest_link.c +++ b/src/contest_link.c @@ -12,7 +12,11 @@ static void sub_80FC5C0(u8); static void sub_80FC5DC(u8); -bool32 sub_80FC4F4(void *src, u16 size) +#define tState data[0] +#define tCategory data[9] +#define tTimer data[11] + +bool32 LinkContest_SendBlock(void *src, u16 size) { memcpy(gDecompressionBuffer, src, size); if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size)) @@ -21,21 +25,21 @@ bool32 sub_80FC4F4(void *src, u16 size) return FALSE; } -bool8 sub_80FC530(u8 arg0) +bool8 LinkContest_GetBlockReceived(u8 flag) { - u8 mask = (1 << arg0); + u8 mask = (1 << flag); if (!(GetBlockReceivedStatus() & mask)) { return FALSE; } else { - ResetBlockReceivedFlag(arg0); + ResetBlockReceivedFlag(flag); return TRUE; } } -bool8 sub_80FC55C(void) +bool8 LinkContest_GetBlockReceivedFromAllPlayers(void) { if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags()) { @@ -52,10 +56,10 @@ void sub_80FC580(u8 taskId) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) gBlockRecvBuffer[i][0] = 0xFF; - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; gTasks[taskId].func = sub_80FC5C0; } @@ -77,6 +81,7 @@ static void sub_80FC5DC(u8 taskId) if (gWirelessCommType == 1) gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK | LINK_CONTEST_FLAG_IS_WIRELESS; + // Get number of players using Emerald/FRLG for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++) ; @@ -86,22 +91,22 @@ static void sub_80FC5DC(u8 taskId) SwitchTaskToFollowupFunc(taskId); } -bool32 sub_80FC670(s16 *arg0) +bool32 sub_80FC670(s16 *state) { if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER) return TRUE; - switch (*arg0) + switch (*state) { case 0: if (IsLinkTaskFinished()) { sub_800ADF8(); - (*arg0)++; + (*state)++; } return FALSE; case 1: - (*arg0)++; + (*state)++; return FALSE; default: if (IsLinkTaskFinished() != TRUE) @@ -118,7 +123,7 @@ void sub_80FC6BC(u8 taskId) if (!sub_80FC670(&gTasks[taskId].data[12])) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (GetMultiplayerId() == 0) @@ -126,37 +131,37 @@ void sub_80FC6BC(u8 taskId) if (IsLinkTaskFinished()) { memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)); - gTasks[taskId].data[0] = 10; + gTasks[taskId].tState = 10; } } else { memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)); - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < gNumLinkContestPlayers; i++) { memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon)); - sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language); + StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language); } - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 10: - if (++gTasks[taskId].data[11] > 300) + if (++gTasks[taskId].tTimer > 300) { sub_800A4D8(2); - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; } break; default: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[11] = 0; + gTasks[taskId].tState = 0; + gTasks[taskId].tTimer = 0; gTasks[taskId].data[12] = 0; SwitchTaskToFollowupFunc(taskId); break; @@ -165,29 +170,29 @@ void sub_80FC6BC(u8 taskId) void sub_80FC804(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (GetMultiplayerId() == 0) { - if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE) - gTasks[taskId].data[0]++; + if (IsLinkTaskFinished() && LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == TRUE) + gTasks[taskId].tState++; } else { - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC530(0)) + if (LinkContest_GetBlockReceived(0)) { memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue)); memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; default: - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -200,91 +205,93 @@ void sub_80FC894(u8 taskId) if (!sub_80FC670(&gTasks[taskId].data[12])) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - gBlockSendBuffer[0] = gTasks[taskId].data[9]; + gBlockSendBuffer[0] = gTasks[taskId].tCategory; if (GetMultiplayerId() == 0) { if (IsLinkTaskFinished()) - gTasks[taskId].data[0] = 10; + gTasks[taskId].tState = 10; } else { - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < gNumLinkContestPlayers; i++) gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0]; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 10: - if (++gTasks[taskId].data[11] > 10) + if (++gTasks[taskId].tTimer > 10) { sub_800A4D8(2); - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; } break; default: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[11] = 0; + gTasks[taskId].tState = 0; + gTasks[taskId].tTimer = 0; gTasks[taskId].data[12] = 0; SwitchTaskToFollowupFunc(taskId); break; } } -void sub_80FC998(u8 taskId) +void Task_LinkContest_CommunicateMonIdxs(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE) + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) - gTasks[taskId].data[0]++; + if (LinkContest_GetBlockReceivedFromAllPlayers()) + gTasks[taskId].tState++; break; default: - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; SwitchTaskToFollowupFunc(taskId); break; } } -void sub_80FC9F8(u8 taskId) +void Task_LinkContest_CommunicateMoveSelections(u8 taskId) { int i; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE) - gTasks[taskId].data[0]++; + // Send player's move selection + if (LinkContest_SendBlock(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE) + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { + // Receive partners' move selections for (i = 0; i < gNumLinkContestPlayers; i++) eContestantStatus[i].currMove = gBlockRecvBuffer[i][0]; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; default: - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -292,20 +299,20 @@ void sub_80FC9F8(u8 taskId) void sub_80FCACC(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1) + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 2: @@ -315,53 +322,53 @@ void sub_80FCACC(u8 taskId) if (gTasks[taskId].data[1]++ > 10) { gTasks[taskId].data[1] = 0; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 3: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1) + gTasks[taskId].tState++; } break; case 4: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 6: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1) + gTasks[taskId].tState++; } break; case 7: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 9: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1) + gTasks[taskId].tState++; } break; case 10: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; default: - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -369,20 +376,20 @@ void sub_80FCACC(u8 taskId) void sub_80FCC88(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1) + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 2: @@ -392,53 +399,53 @@ void sub_80FCC88(u8 taskId) if (gTasks[taskId].data[1]++ > 10) { gTasks[taskId].data[1] = 0; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 3: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1) + gTasks[taskId].tState++; } break; case 4: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 6: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1) + gTasks[taskId].tState++; } break; case 7: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 9: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1) + gTasks[taskId].tState++; } break; case 10: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; default: - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -451,39 +458,39 @@ void sub_80FCE48(u8 taskId) if (!sub_80FC670(&gTasks[taskId].data[12])) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: gBlockSendBuffer[0] = 0x6E; if (GetMultiplayerId() == 0) { if (IsLinkTaskFinished()) - gTasks[taskId].data[0] = 10; + gTasks[taskId].tState = 10; } else { - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0]; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 10: - if (++gTasks[taskId].data[11] > 10) + if (++gTasks[taskId].tTimer > 10) { sub_800A4D8(2); - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; } break; default: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[11] = 0; + gTasks[taskId].tState = 0; + gTasks[taskId].tTimer = 0; gTasks[taskId].data[12] = 0; SwitchTaskToFollowupFunc(taskId); break; @@ -495,24 +502,24 @@ void sub_80FCF40(u8 taskId) if (!sub_80FC670(&gTasks[taskId].data[12])) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestMonConditions, sizeof(gContestMonConditions)) == 1) + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; default: - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; gTasks[taskId].data[12] = 0; SwitchTaskToFollowupFunc(taskId); break; @@ -524,24 +531,24 @@ void sub_80FCFD0(u8 taskId) if (!sub_80FC670(&gTasks[taskId].data[12])) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1) - gTasks[taskId].data[0]++; + if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1) + gTasks[taskId].tState++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; default: - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; gTasks[taskId].data[12] = 0; SwitchTaskToFollowupFunc(taskId); break; diff --git a/src/contest_link_util.c b/src/contest_link_util.c index 8060b6cdc9..2213741124 100644 --- a/src/contest_link_util.c +++ b/src/contest_link_util.c @@ -1,5 +1,6 @@ #include "global.h" #include "contest.h" +#include "contest_link.h" #include "event_data.h" #include "link.h" #include "random.h" @@ -17,33 +18,35 @@ static void sub_81DA2E8(u8); static void sub_81DA3B8(u8); static void sub_81DA488(u8); +#define tCategory data[9] + void sub_81D9DE4(u8 taskId) { int gameCleared; - switch (gTasks[taskId].data[9]) + switch (gTasks[taskId].tCategory) { - case 0: + case CONTEST_CATEGORY_COOL: gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON); break; - case 1: + case CONTEST_CATEGORY_BEAUTY: gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON); break; - case 2: + case CONTEST_CATEGORY_CUTE: gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON); break; - case 3: + case CONTEST_CATEGORY_SMART: gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON); break; - case 4: + case CONTEST_CATEGORY_TOUGH: default: gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON); break; } - gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank; + gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank; gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0; - gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared; + gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared; SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14); } @@ -94,13 +97,13 @@ static void sub_81D9F68(u8 taskId) for (i = 0; i < gNumLinkContestPlayers; i++) data2[i] = gTasks[taskId].data[i + 5]; - if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0) + if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0) { - rank = gContestMons[0].unk2C[0]; + rank = gContestMons[0].highestRank; for (i = 1; i < gNumLinkContestPlayers; i++) { - if (rank < gContestMons[i].unk2C[0]) - rank = gContestMons[i].unk2C[0]; + if (rank < gContestMons[i].highestRank) + rank = gContestMons[i].highestRank; } if (rank) @@ -109,7 +112,7 @@ static void sub_81D9F68(u8 taskId) gameCleared = 1; for (i = 0; i < gNumLinkContestPlayers; i++) { - if (!gContestMons[i].unk2C[1]) + if (!gContestMons[i].gameCleared) { gameCleared = 0; break; @@ -120,7 +123,7 @@ static void sub_81D9F68(u8 taskId) } gUnknown_02039F2B = sub_80F86E0(data2); - if (gNumLinkContestPlayers < 4) + if (gNumLinkContestPlayers < CONTESTANT_COUNT) SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C); else gTasks[taskId].func = sub_81DA10C; @@ -155,17 +158,17 @@ static void sub_81DA160(u8 taskId) case 0: if (IsLinkTaskFinished()) { - if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1) + if (LinkContest_SendBlock(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1) gTasks[taskId].data[0]++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < gNumLinkContestPlayers; i++) { memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon)); - sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language); + StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language); } gTasks[taskId].data[0]++; @@ -192,7 +195,7 @@ static void sub_81DA244(u8 taskId) if (!IsLinkTaskFinished()) return; - if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1) + if (LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == 1) gTasks[taskId].data[0]++; } else @@ -201,7 +204,7 @@ static void sub_81DA244(u8 taskId) } break; case 1: - if (sub_80FC530(0)) + if (LinkContest_GetBlockReceived(0)) { memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue)); memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue)); @@ -231,12 +234,12 @@ static void sub_81DA2E8(u8 taskId) if (IsLinkTaskFinished()) { var0 = 0x6E; - if (sub_80FC4F4(&var0, sizeof(var0)) == 1) + if (LinkContest_SendBlock(&var0, sizeof(var0)) == 1) gTasks[taskId].data[0]++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < gNumLinkContestPlayers; i++) { @@ -253,8 +256,8 @@ static void sub_81DA2E8(u8 taskId) static void sub_81DA3B8(u8 taskId) { int i; - u16 data[4]; - u16 var0; + u16 data[CONTESTANT_COUNT]; + u16 category; if (!sub_80FC670(&gTasks[taskId].data[12])) return; @@ -269,13 +272,13 @@ static void sub_81DA3B8(u8 taskId) case 0: if (IsLinkTaskFinished()) { - var0 = gTasks[taskId].data[9]; - if (sub_80FC4F4(&var0, sizeof(var0)) == 1) + category = gTasks[taskId].tCategory; + if (LinkContest_SendBlock(&category, sizeof(category)) == 1) gTasks[taskId].data[0]++; } break; case 1: - if (sub_80FC55C()) + if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < gNumLinkContestPlayers; i++) { @@ -309,7 +312,7 @@ static void sub_81DA488(u8 taskId) if (!IsLinkTaskFinished()) return; - if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1) + if (LinkContest_SendBlock(&gContestMons[gNumLinkContestPlayers], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1) gTasks[taskId].data[0]++; } else @@ -318,11 +321,11 @@ static void sub_81DA488(u8 taskId) } break; case 1: - if (sub_80FC530(0)) + if (LinkContest_GetBlockReceived(0)) { - memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)); - for (i = gNumLinkContestPlayers; i < 4; i++) - sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language); + memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)); + for (i = gNumLinkContestPlayers; i < CONTESTANT_COUNT; i++) + StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[0].language); gTasks[taskId].data[0]++; } diff --git a/src/contest_util.c b/src/contest_util.c index 22074e1a1b..6ad67ee50e 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -653,7 +653,7 @@ static void Task_WaitForLinkPartnersBeforeResults(u8 taskId) static void sub_80F5F14(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80F5F30); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, sub_80F5F30); } static void sub_80F5F30(u8 taskId) @@ -2405,25 +2405,25 @@ void GetContestPlayerId(void) gSpecialVar_0x8004 = gContestPlayerMonIndex; } -void ContestLinkTransfer(u8 taskId) +void ContestLinkTransfer(u8 category) { u8 newTaskId; ScriptContext2_Enable(); newTaskId = CreateTask(sub_80FC580, 0); SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508); - gTasks[newTaskId].data[9] = taskId; + gTasks[newTaskId].data[9] = category; } static void sub_80F8508(u8 taskId) { if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER) { - sub_80DA8C8(gContestMonPartyIndex); + CreateContestMonFromParty(gContestMonPartyIndex); SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568); } else { - sub_80DA8C8(gContestMonPartyIndex); + CreateContestMonFromParty(gContestMonPartyIndex); gTasks[taskId].func = sub_81D9DE4; } } diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 8fa7467255..53868fc84f 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -203,7 +203,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 3, .tough = 4, .sheen = 50, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -232,7 +231,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 1, .tough = 2, .sheen = 60, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -261,7 +259,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 12, .tough = 4, .sheen = 70, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -290,7 +287,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 2, .tough = 7, .sheen = 80, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -319,7 +315,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 5, .tough = 4, .sheen = 90, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -348,7 +343,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 7, .tough = 8, .sheen = 100, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -377,7 +371,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 2, .tough = 2, .sheen = 50, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -406,7 +399,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 10, .sheen = 60, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -435,7 +427,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 5, .tough = 18, .sheen = 70, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -464,7 +455,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 2, .tough = 7, .sheen = 80, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -493,7 +483,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 8, .tough = 1, .sheen = 90, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -522,7 +511,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 2, .sheen = 100, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -551,7 +539,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 2, .tough = 10, .sheen = 50, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -580,7 +567,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 5, .sheen = 60, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -609,7 +595,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 1, .tough = 1, .sheen = 70, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -638,7 +623,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 4, .sheen = 50, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -667,7 +651,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 4, .sheen = 60, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -696,7 +679,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 2, .tough = 3, .sheen = 70, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -725,7 +707,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 5, .tough = 10, .sheen = 80, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -754,7 +735,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 3, .tough = 10, .sheen = 90, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -783,7 +763,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 1, .tough = 5, .sheen = 100, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -812,7 +791,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 6, .tough = 2, .sheen = 90, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -841,7 +819,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 5, .tough = 3, .sheen = 80, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -870,7 +847,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 8, .tough = 10, .sheen = 70, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -899,7 +875,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 20, .sheen = 100, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -928,7 +903,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 85, .tough = 35, .sheen = 110, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -957,7 +931,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 25, .sheen = 120, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -986,7 +959,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 65, .tough = 25, .sheen = 130, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1015,7 +987,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 100, .sheen = 140, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1044,7 +1015,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 35, .tough = 35, .sheen = 150, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1073,7 +1043,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 40, .tough = 40, .sheen = 100, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1102,7 +1071,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 10, .tough = 25, .sheen = 110, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1131,7 +1099,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 30, .tough = 25, .sheen = 120, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1160,7 +1127,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 40, .tough = 30, .sheen = 130, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1189,7 +1155,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 75, .tough = 35, .sheen = 140, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1218,7 +1183,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 30, .tough = 25, .sheen = 150, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1247,7 +1211,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 25, .tough = 15, .sheen = 100, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1276,7 +1239,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 60, .tough = 20, .sheen = 110, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1305,7 +1267,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 15, .tough = 75, .sheen = 120, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1334,7 +1295,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 30, .tough = 20, .sheen = 100, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1363,7 +1323,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 20, .tough = 20, .sheen = 110, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1392,7 +1351,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 20, .tough = 20, .sheen = 120, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1421,7 +1379,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 30, .tough = 45, .sheen = 130, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1450,7 +1407,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 20, .tough = 45, .sheen = 140, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1479,7 +1435,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 20, .tough = 20, .sheen = 150, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1508,7 +1463,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 25, .tough = 25, .sheen = 140, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1537,7 +1491,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 20, .tough = 20, .sheen = 130, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1566,7 +1519,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 45, .tough = 20, .sheen = 120, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1595,7 +1547,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 100, .tough = 90, .sheen = 200, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1624,7 +1575,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 35, .tough = 70, .sheen = 210, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1653,7 +1603,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 70, .tough = 70, .sheen = 220, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1682,7 +1631,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 75, .tough = 40, .sheen = 230, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1711,7 +1659,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 70, .tough = 70, .sheen = 240, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1740,7 +1687,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 80, .tough = 100, .sheen = 250, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1769,7 +1715,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 70, .tough = 90, .sheen = 200, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1798,7 +1743,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 50, .tough = 65, .sheen = 210, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1827,7 +1771,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 60, .tough = 50, .sheen = 220, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1856,7 +1799,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 45, .tough = 70, .sheen = 230, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1885,7 +1827,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 40, .tough = 100, .sheen = 240, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1914,7 +1855,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 50, .tough = 30, .sheen = 250, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1943,7 +1883,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 50, .tough = 160, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -1972,7 +1911,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 70, .tough = 50, .sheen = 210, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2001,7 +1939,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 35, .tough = 35, .sheen = 220, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2030,7 +1967,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 100, .tough = 80, .sheen = 200, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2059,7 +1995,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 35, .tough = 100, .sheen = 210, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2088,7 +2023,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 50, .tough = 100, .sheen = 220, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2117,7 +2051,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 40, .tough = 95, .sheen = 230, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2146,7 +2079,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 50, .tough = 100, .sheen = 240, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2175,7 +2107,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 80, .tough = 80, .sheen = 250, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2204,7 +2135,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 40, .tough = 110, .sheen = 240, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2233,7 +2163,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 25, .tough = 80, .sheen = 230, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2262,7 +2191,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 35, .tough = 40, .sheen = 220, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2291,7 +2219,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 40, .tough = 160, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2320,7 +2247,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 150, .tough = 160, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2349,7 +2275,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 185, .tough = 60, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2378,7 +2303,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 110, .tough = 150, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2407,7 +2331,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 30, .tough = 90, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2436,7 +2359,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 230, .tough = 80, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2465,7 +2387,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 130, .tough = 40, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2494,7 +2415,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 150, .tough = 160, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2523,7 +2443,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 130, .tough = 170, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2552,7 +2471,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 75, .tough = 100, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2581,7 +2499,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 40, .tough = 190, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2610,7 +2527,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 240, .tough = 140, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2639,7 +2555,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 35, .tough = 50, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2668,7 +2583,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 115, .tough = 120, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2697,7 +2611,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 220, .tough = 210, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2726,7 +2639,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 80, .tough = 180, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2755,7 +2667,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 130, .tough = 130, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2784,7 +2695,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 120, .tough = 150, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2813,7 +2723,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 170, .tough = 80, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2842,7 +2751,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 150, .tough = 120, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2871,7 +2779,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 120, .tough = 80, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2900,7 +2807,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 80, .tough = 150, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2929,7 +2835,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 110, .tough = 170, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF }, @@ -2958,7 +2863,6 @@ const struct ContestPokemon gContestOpponents[] = .smart = 80, .tough = 190, .sheen = 255, - .unk2C = {0}, .personality = 0, .otId = 0xFFFF } diff --git a/src/graphics.c b/src/graphics.c index b774c5ad21..055a6c4cd2 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -461,12 +461,12 @@ const u32 gContestMiscGfx[] = INCBIN_U32("graphics/contest/misc.4bpp.lz"); const u32 gContestAudienceGfx[] = INCBIN_U32("graphics/contest/audience.4bpp.lz"); -const u32 gUnknown_08C19168[] = INCBIN_U32("graphics/contest/faces.4bpp.lz"); +const u32 gContestFaces_Gfx[] = INCBIN_U32("graphics/contest/faces.4bpp.lz"); const u32 gContestJudgeSymbolsGfx[] = INCBIN_U32("graphics/contest/judge_symbols.4bpp.lz"); const u32 gContest3Pal[] = INCBIN_U32("graphics/contest/judge_symbols.gbapal.lz"); -const u8 gTiles_8C19450[] = INCBIN_U8("graphics/contest/heart.4bpp"); +const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4bpp"); const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz"); const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz"); diff --git a/src/pokemon.c b/src/pokemon.c index 329240f994..9687a5abf3 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4499,8 +4499,8 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord) for (j = 0; j < MAX_MON_MOVES; j++) { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]); - SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp); + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]); + SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]].pp); } } } From aca50c87beaa88f66ca2a8602c23411fd20b0884 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 24 Jul 2020 00:14:53 -0400 Subject: [PATCH 12/85] Continue new contest documentation --- asm/macros/contest_ai_script.inc | 22 +- constants/constants.inc | 2 - constants/contest_constants.inc | 68 ------ constants/contest_move_effects.inc | 49 ---- data/contest_ai_scripts.s | 70 +++--- include/constants/contest.h | 150 +++++++++++- include/contest.h | 136 +---------- include/contest_link.h | 6 +- src/contest.c | 376 +++++++++++++++-------------- src/contest_ai.c | 46 ++-- src/contest_effect.c | 6 +- src/contest_link.c | 18 +- src/contest_link_util.c | 21 +- src/contest_util.c | 14 +- src/data/contest_opponents.h | 36 +-- src/script_pokemon_util_80F87D8.c | 4 +- 16 files changed, 478 insertions(+), 546 deletions(-) delete mode 100644 constants/contest_constants.inc delete mode 100644 constants/contest_move_effects.inc diff --git a/asm/macros/contest_ai_script.inc b/asm/macros/contest_ai_script.inc index 05d70e3510..763c3d1c40 100644 --- a/asm/macros/contest_ai_script.inc +++ b/asm/macros/contest_ai_script.inc @@ -5,36 +5,42 @@ .byte \score .endm -@ turn (AKA "Appeal No.") - - .macro get_turn + .macro get_appeal_num .byte 0x01 .endm - .macro if_turn_less_than param, addr + .macro if_appeal_num_less_than param, addr .byte 0x02 .byte \param .4byte \addr .endm - .macro if_turn_more_than param, addr + .macro if_appeal_num_more_than param, addr .byte 0x03 .byte \param .4byte \addr .endm - .macro if_turn_eq param, addr + .macro if_appeal_num_eq param, addr .byte 0x04 .byte \param .4byte \addr .endm - .macro if_turn_not_eq param, addr + .macro if_appeal_num_not_eq param, addr .byte 0x05 .byte \param .4byte \addr .endm + .macro if_last_appeal addr:req + if_appeal_num_eq CONTEST_LAST_APPEAL, \addr + .endm + + .macro if_not_last_appeal addr:req + if_appeal_num_not_eq CONTEST_LAST_APPEAL, \addr + .endm + @ audience excitement .macro get_excitement @@ -65,7 +71,7 @@ .4byte \addr .endm -@ the order that the user goes in the current turn +@ the order that the user goes in the current appeal .macro get_user_order .byte 0x0B diff --git a/constants/constants.inc b/constants/constants.inc index a58bf92a25..e7561f4293 100644 --- a/constants/constants.inc +++ b/constants/constants.inc @@ -1,4 +1,2 @@ .include "constants/gba_constants.inc" .include "constants/global.inc" - .include "constants/contest_constants.inc" - .include "constants/contest_move_effects.inc" diff --git a/constants/contest_constants.inc b/constants/contest_constants.inc deleted file mode 100644 index e971764d61..0000000000 --- a/constants/contest_constants.inc +++ /dev/null @@ -1,68 +0,0 @@ - .set CONTEST_COOL, 0x00 - .set CONTEST_BEAUTY, 0x01 - .set CONTEST_CUTE, 0x02 - .set CONTEST_SMART, 0x03 - .set CONTEST_TOUGH, 0x04 - - .set COMBO_STARTER_RAIN_DANCE, 0x01 - .set COMBO_STARTER_RAGE, 0x02 - .set COMBO_STARTER_FOCUS_ENERGY, 0x03 - .set COMBO_STARTER_HYPNOSIS, 0x04 - .set COMBO_STARTER_ENDURE, 0x05 - .set COMBO_STARTER_HORN_ATTACK, 0x06 - .set COMBO_STARTER_SWORDS_DANCE, 0x07 - .set COMBO_STARTER_STOCKPILE, 0x08 - .set COMBO_STARTER_SUNNY_DAY, 0x09 - .set COMBO_STARTER_REST, 0x0A - .set COMBO_STARTER_VICE_GRIP, 0x0B - .set COMBO_STARTER_DEFENSE_CURL, 0x0C - .set COMBO_STARTER_CHARGE, 0x0D - .set COMBO_STARTER_ROCK_THROW, 0x0E - .set COMBO_STARTER_YAWN, 0x0F - .set COMBO_STARTER_SCARY_FACE, 0x10 - .set COMBO_STARTER_POWDER_SNOW, 0x11 - .set COMBO_STARTER_LOCK_ON, 0x12 - .set COMBO_STARTER_SOFT_BOILED, 0x13 - .set COMBO_STARTER_MEAN_LOOK, 0x14 - .set COMBO_STARTER_SCRATCH, 0x15 - .set COMBO_STARTER_GROWTH, 0x16 - .set COMBO_STARTER_HAIL, 0x17 - .set COMBO_STARTER_SANDSTORM, 0x18 - .set COMBO_STARTER_BELLY_DRUM, 0x19 - .set COMBO_STARTER_MIND_READER, 0x1A - .set COMBO_STARTER_DRAGON_BREATH, 0x1B - .set COMBO_STARTER_DRAGON_RAGE, 0x1C - .set COMBO_STARTER_DRAGON_DANCE, 0x1D - .set COMBO_STARTER_SURF, 0x1E - .set COMBO_STARTER_DIVE, 0x1F - .set COMBO_STARTER_STRING_SHOT, 0x20 - .set COMBO_STARTER_LEER, 0x21 - .set COMBO_STARTER_TAUNT, 0x22 - .set COMBO_STARTER_CHARM, 0x23 - .set COMBO_STARTER_HARDEN, 0x24 - .set COMBO_STARTER_SING, 0x25 - .set COMBO_STARTER_EARTHQUAKE, 0x26 - .set COMBO_STARTER_DOUBLE_TEAM, 0x27 - .set COMBO_STARTER_CURSE, 0x28 - .set COMBO_STARTER_SWEET_SCENT, 0x29 - .set COMBO_STARTER_SLUDGE, 0x2A - .set COMBO_STARTER_SLUDGE_BOMB, 0x2B - .set COMBO_STARTER_THUNDER_PUNCH, 0x2C - .set COMBO_STARTER_FIRE_PUNCH, 0x2D - .set COMBO_STARTER_ICE_PUNCH, 0x2E - .set COMBO_STARTER_PECK, 0x2F - .set COMBO_STARTER_METAL_SOUND, 0x30 - .set COMBO_STARTER_MUD_SPORT, 0x31 - .set COMBO_STARTER_WATER_SPORT, 0x32 - .set COMBO_STARTER_BONE_CLUB, 0x33 - .set COMBO_STARTER_BONEMERANG, 0x34 - .set COMBO_STARTER_BONE_RUSH, 0x35 - .set COMBO_STARTER_SAND_ATTACK, 0x36 - .set COMBO_STARTER_MUD_SLAP, 0x37 - .set COMBO_STARTER_FAKE_OUT, 0x38 - .set COMBO_STARTER_PSYCHIC, 0x39 - .set COMBO_STARTER_KINESIS, 0x3A - .set COMBO_STARTER_CONFUSION, 0x3B - .set COMBO_STARTER_POUND, 0x3C - .set COMBO_STARTER_SMOG, 0x3D - .set COMBO_STARTER_CALM_MIND, 0x3E diff --git a/constants/contest_move_effects.inc b/constants/contest_move_effects.inc deleted file mode 100644 index b19e05004a..0000000000 --- a/constants/contest_move_effects.inc +++ /dev/null @@ -1,49 +0,0 @@ - enum_start - enum CONTEST_EFFECT_HIGHLY_APPEALING @ 0 - enum CONTEST_EFFECT_USER_MORE_EASILY_STARTLED @ 1 - enum CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES @ 2 - enum CONTEST_EFFECT_REPETITION_NOT_BORING @ 3 - enum CONTEST_EFFECT_AVOID_STARTLE_ONCE @ 4 - enum CONTEST_EFFECT_AVOID_STARTLE @ 5 - enum CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY @ 6 - enum CONTEST_EFFECT_USER_LESS_EASILY_STARTLED @ 7 - enum CONTEST_EFFECT_STARTLE_FRONT_MON @ 8 - enum CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS @ 9 - enum CONTEST_EFFECT_STARTLE_PREV_MON @ 10 - enum CONTEST_EFFECT_STARTLE_PREV_MONS @ 11 - enum CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON @ 12 - enum CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS @ 13 - enum CONTEST_EFFECT_STARTLE_PREV_MON_2 @ 14 - enum CONTEST_EFFECT_STARTLE_PREV_MONS_2 @ 15 - enum CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION @ 16 - enum CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION @ 17 - enum CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN @ 18 - enum CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL @ 19 - enum CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL @ 20 - enum CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL @ 21 - enum CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL @ 22 - enum CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL @ 23 - enum CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL @ 24 - enum CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS @ 25 - enum CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS @ 26 - enum CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS @ 27 - enum CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION @ 28 - enum CONTEST_EFFECT_BETTER_IF_FIRST @ 29 - enum CONTEST_EFFECT_BETTER_IF_LAST @ 30 - enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES @ 31 - enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE @ 32 - enum CONTEST_EFFECT_BETTER_WHEN_LATER @ 33 - enum CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING @ 34 - enum CONTEST_EFFECT_BETTER_IF_SAME_TYPE @ 35 - enum CONTEST_EFFECT_BETTER_IF_DIFF_TYPE @ 36 - enum CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL @ 37 - enum CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS @ 38 - enum CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION @ 39 - enum CONTEST_EFFECT_NEXT_APPEAL_EARLIER @ 40 - enum CONTEST_EFFECT_NEXT_APPEAL_LATER @ 41 - enum CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER @ 42 - enum CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER @ 43 - enum CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST @ 44 - enum CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS @ 45 - enum CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED @ 46 - enum CONTEST_EFFECT_DONT_EXCITE_AUDIENCE @ 47 diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index 252c39a3aa..4938a8c93c 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -1,9 +1,13 @@ +#include "constants/global.h" +#include "constants/contest.h" .include "asm/macros.inc" .include "asm/macros/contest_ai_script.inc" .include "constants/constants.inc" .section script_data, "aw", %progbits +@ TODO + enum_start enum MON_1 enum MON_2 @@ -12,13 +16,13 @@ .align 2 gContestAIChecks:: @ 82DE350 - .4byte AI_CheckForBadMove // 0x00000001 - .4byte AI_CheckForCombo // 0x00000002 - .4byte AI_CheckBoring // 0x00000004 - .4byte AI_CheckExcitement // 0x00000008 - .4byte AI_CheckOrder // 0x00000010 - .4byte AI_CheckForGoodMove // 0x00000020 - .4byte AI_Erratic // 0x00000040 + .4byte AI_CheckForBadMove @ CONTEST_AI_CHECK_BAD_MOVE + .4byte AI_CheckForCombo @ CONTEST_AI_CHECK_COMBO + .4byte AI_CheckBoring @ CONTEST_AI_CHECK_BORING + .4byte AI_CheckExcitement @ CONTEST_AI_CHECK_EXCITEMENT + .4byte AI_CheckOrder @ CONTEST_AI_CHECK_ORDER + .4byte AI_CheckForGoodMove @ CONTEST_AI_CHECK_GOOD_MOVE + .4byte AI_Erratic @ CONTEST_AI_ERRATIC .4byte AI_Nothing // 0x00000080 .4byte AI_Nothing // 0x00000100 .4byte AI_Nothing // 0x00000200 @@ -47,9 +51,9 @@ gContestAIChecks:: @ 82DE350 @ Unreferenced AI routine to encourage moves that improve condition on the first -@ turn. Additionally, it checks the appeal order of the user and the effect +@ appeal. Additionally, it checks the turn order of the user and the effect @ type, but the code is buggy and doesnt affect the score. - if_turn_not_eq 0, ContestUnreferenced_80 + if_appeal_num_not_eq 0, ContestUnreferenced_80 if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80 score +10 ContestUnreferenced_80: @@ -64,11 +68,11 @@ ContestUnreferenced_end: end @ Unreferenced AI routine that doesnt make much sense. - if_turn_eq 0, ContestUnreferenced_0F_1 - if_turn_eq 1, ContestUnreferenced_0F_2 - if_turn_eq 2, ContestUnreferenced_0F_3 - if_turn_eq 3, ContestUnreferenced_0F_4 - if_turn_eq 4, ContestUnreferenced_0F_5 + if_appeal_num_eq 0, ContestUnreferenced_0F_1 + if_appeal_num_eq 1, ContestUnreferenced_0F_2 + if_appeal_num_eq 2, ContestUnreferenced_0F_3 + if_appeal_num_eq 3, ContestUnreferenced_0F_4 + if_last_appeal ContestUnreferenced_0F_5 end ContestUnreferenced_0F_1: if_user_order_not_eq MON_1, ContestUnreferenced_2B_1 @@ -166,7 +170,7 @@ AI_contest7D_1_081DC2AB: end AI_contest0F_2_081DC2AB: if_user_order_not_eq MON_1, AI_contest7D_3_081DC2AB - if_turn_eq 4, AI_score_081DC2AB + if_last_appeal AI_score_081DC2AB AI_contest7D_2_081DC2AB: if_random 51, AI_end_081DC2AB score +10 @@ -222,22 +226,22 @@ AI_score_081DC348: score +25 end AI_contest04_1_081DC348: - if_turn_eq 4, AI_contest7D_081DC348 + if_last_appeal AI_contest7D_081DC348 if_random 150, AI_end_081DC348 score +10 end AI_contest04_2_081DC348: - if_turn_eq 4, AI_contest7D_081DC348 + if_last_appeal AI_contest7D_081DC348 if_random 125, AI_end_081DC348 score +10 end AI_contest04_3_081DC348: - if_turn_eq 4, AI_contest7D_081DC348 + if_last_appeal AI_contest7D_081DC348 if_random 50, AI_end_081DC348 score +10 end AI_contest04_4_081DC348: - if_turn_eq 4, AI_contest7D_081DC348 + if_last_appeal AI_contest7D_081DC348 score +10 end AI_contest7D_081DC348: @@ -302,7 +306,7 @@ ContestEffect3: if_random 50, ContestEffectEnd score +15 end - if_turn_eq 4, ContestEffect3_7D + if_last_appeal ContestEffect3_7D if_random 220, ContestEffect3_score score +10 end @@ -324,8 +328,8 @@ ContestEffect38_score1: score -10 end ContestEffect38_contest04: - if_turn_eq 4, ContestEffect38_score2 - if_turn_eq 0, ContestEffect38_random + if_last_appeal ContestEffect38_score2 + if_appeal_num_eq 0, ContestEffect38_random if_move_used_count_eq 1, ContestEffectEnd if_random 125, ContestEffectEnd score +10 @@ -342,7 +346,7 @@ ContestEffect47: if_move_used_count_eq 1, ContestEffectEnd if_user_order_eq MON_1, ContestEffect47_random if_user_order_eq MON_2, ContestEffect47_random - if_turn_not_eq 4, ContestEffectEnd + if_not_last_appeal ContestEffectEnd if_user_has_exciting_move ContestEffectEnd if_excitement_less_than 1, ContestEffectEnd score +10 @@ -409,7 +413,7 @@ ContestEffect46: if_user_order_more_than MON_1, ContestEffect46_score4 end ContestEffect46_05: - if_turn_not_eq 0, ContestEffect46_score1 + if_appeal_num_not_eq 0, ContestEffect46_score1 if_excitement_eq 4, ContestEffect46_score2 if_excitement_eq 3, ContestEffect46_score3 end @@ -566,7 +570,7 @@ ContestEffect_FollowingMonsNervous_CheckMon2: end ContestEffect18: - if_turn_eq 4, ContestEffect18_score1 + if_last_appeal ContestEffect18_score1 jump ContestEffect18_0E end ContestEffect18_score1: @@ -600,9 +604,9 @@ ContestEffectEnd: @ Randomly encourage moves in Cute, Smart, and Tough contests. AI_Erratic: - if_contest_type_eq CONTEST_CUTE, Erratic_CuteSmartTough - if_contest_type_eq CONTEST_SMART, Erratic_CuteSmartTough - if_contest_type_eq CONTEST_TOUGH, Erratic_CuteSmartTough + if_contest_type_eq CONTEST_CATEGORY_CUTE, Erratic_CuteSmartTough + if_contest_type_eq CONTEST_CATEGORY_SMART, Erratic_CuteSmartTough + if_contest_type_eq CONTEST_CATEGORY_TOUGH, Erratic_CuteSmartTough end Erratic_CuteSmartTough: if_random 125, Erratic_NoScoreIncrease @@ -763,11 +767,11 @@ ContestEffect2_4_score3: end ContestEffect2_2: - if_turn_eq 0, ContestEffect2_2_score1 - if_turn_eq 1, ContestEffect2_2_score2 - if_turn_eq 2, ContestEffect2_2_score3 - if_turn_eq 3, ContestEffect2_2_score4 - if_turn_eq 4, ContestEffect2_2_score5 + if_appeal_num_eq 0, ContestEffect2_2_score1 + if_appeal_num_eq 1, ContestEffect2_2_score2 + if_appeal_num_eq 2, ContestEffect2_2_score3 + if_appeal_num_eq 3, ContestEffect2_2_score4 + if_last_appeal ContestEffect2_2_score5 end ContestEffect2_2_score1: if_random 20, ContestEffectEnd2 diff --git a/include/constants/contest.h b/include/constants/contest.h index 5eabb5f46b..a10354169b 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -2,7 +2,8 @@ #define GUARD_CONSTANTS_CONTEST_H #define APPLAUSE_METER_SIZE 5 -#define CONTEST_TURN_COUNT 5 +#define CONTEST_NUM_APPEALS 5 +#define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1) #define LINK_CONTEST_FLAG_IS_LINK (1 << 0) #define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1) @@ -44,4 +45,151 @@ #define CANT_ENTER_CONTEST_EGG 3 #define CANT_ENTER_CONTEST_FAINTED 4 +#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0) +#define CONTEST_AI_CHECK_COMBO (1 << 1) +#define CONTEST_AI_CHECK_BORING (1 << 2) +#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3) +#define CONTEST_AI_CHECK_ORDER (1 << 4) +#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5) +#define CONTEST_AI_ERRATIC (1 << 6) +#define CONTEST_AI_DUMMY_1 (1 << 7) +#define CONTEST_AI_DUMMY_2 (1 << 8) +#define CONTEST_AI_DUMMY_3 (1 << 9) +#define CONTEST_AI_DUMMY_4 (1 << 10) +#define CONTEST_AI_DUMMY_5 (1 << 11) +#define CONTEST_AI_DUMMY_6 (1 << 12) +#define CONTEST_AI_DUMMY_7 (1 << 13) +#define CONTEST_AI_DUMMY_8 (1 << 14) +#define CONTEST_AI_DUMMY_9 (1 << 15) +#define CONTEST_AI_DUMMY_10 (1 << 16) +#define CONTEST_AI_DUMMY_11 (1 << 17) +#define CONTEST_AI_DUMMY_12 (1 << 18) +#define CONTEST_AI_DUMMY_13 (1 << 19) +#define CONTEST_AI_DUMMY_14 (1 << 20) +#define CONTEST_AI_DUMMY_15 (1 << 21) +#define CONTEST_AI_DUMMY_16 (1 << 22) +#define CONTEST_AI_DUMMY_17 (1 << 23) +#define CONTEST_AI_DUMMY_18 (1 << 24) +#define CONTEST_AI_DUMMY_19 (1 << 25) +#define CONTEST_AI_DUMMY_20 (1 << 26) +#define CONTEST_AI_DUMMY_21 (1 << 27) +#define CONTEST_AI_DUMMY_22 (1 << 28) +#define CONTEST_AI_DUMMY_23 (1 << 29) +#define CONTEST_AI_DUMMY_24 (1 << 30) +#define CONTEST_AI_DUMMY_25 (1 << 31) +#define CONTEST_AI_ALL (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC) +#define CONTEST_AI_DUMMIES_1 (CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5) + +#define CONTEST_EFFECT_HIGHLY_APPEALING 0 +#define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1 +#define CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES 2 +#define CONTEST_EFFECT_REPETITION_NOT_BORING 3 +#define CONTEST_EFFECT_AVOID_STARTLE_ONCE 4 +#define CONTEST_EFFECT_AVOID_STARTLE 5 +#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6 +#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7 +#define CONTEST_EFFECT_STARTLE_FRONT_MON 8 +#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9 +#define CONTEST_EFFECT_STARTLE_PREV_MON 10 +#define CONTEST_EFFECT_STARTLE_PREV_MONS 11 +#define CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON 12 +#define CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS 13 +#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14 +#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15 +#define CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION 16 +#define CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION 17 +#define CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN 18 +#define CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL 19 +#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20 +#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21 +#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22 +#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23 +#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24 +#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25 +#define CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS 26 +#define CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS 27 +#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28 +#define CONTEST_EFFECT_BETTER_IF_FIRST 29 +#define CONTEST_EFFECT_BETTER_IF_LAST 30 +#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES 31 +#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE 32 +#define CONTEST_EFFECT_BETTER_WHEN_LATER 33 +#define CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING 34 +#define CONTEST_EFFECT_BETTER_IF_SAME_TYPE 35 +#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36 +#define CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL 37 +#define CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS 38 +#define CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION 39 +#define CONTEST_EFFECT_NEXT_APPEAL_EARLIER 40 +#define CONTEST_EFFECT_NEXT_APPEAL_LATER 41 +#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42 +#define CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER 43 +#define CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST 44 +#define CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS 45 +#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46 +#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47 + +#define COMBO_STARTER_RAIN_DANCE 1 +#define COMBO_STARTER_RAGE 2 +#define COMBO_STARTER_FOCUS_ENERGY 3 +#define COMBO_STARTER_HYPNOSIS 4 +#define COMBO_STARTER_ENDURE 5 +#define COMBO_STARTER_HORN_ATTACK 6 +#define COMBO_STARTER_SWORDS_DANCE 7 +#define COMBO_STARTER_STOCKPILE 8 +#define COMBO_STARTER_SUNNY_DAY 9 +#define COMBO_STARTER_REST 10 +#define COMBO_STARTER_VICE_GRIP 11 +#define COMBO_STARTER_DEFENSE_CURL 12 +#define COMBO_STARTER_CHARGE 13 +#define COMBO_STARTER_ROCK_THROW 14 +#define COMBO_STARTER_YAWN 15 +#define COMBO_STARTER_SCARY_FACE 16 +#define COMBO_STARTER_POWDER_SNOW 17 +#define COMBO_STARTER_LOCK_ON 18 +#define COMBO_STARTER_SOFT_BOILED 19 +#define COMBO_STARTER_MEAN_LOOK 20 +#define COMBO_STARTER_SCRATCH 21 +#define COMBO_STARTER_GROWTH 22 +#define COMBO_STARTER_HAIL 23 +#define COMBO_STARTER_SANDSTORM 24 +#define COMBO_STARTER_BELLY_DRUM 25 +#define COMBO_STARTER_MIND_READER 26 +#define COMBO_STARTER_DRAGON_BREATH 27 +#define COMBO_STARTER_DRAGON_RAGE 28 +#define COMBO_STARTER_DRAGON_DANCE 29 +#define COMBO_STARTER_SURF 30 +#define COMBO_STARTER_DIVE 31 +#define COMBO_STARTER_STRING_SHOT 32 +#define COMBO_STARTER_LEER 33 +#define COMBO_STARTER_TAUNT 34 +#define COMBO_STARTER_CHARM 35 +#define COMBO_STARTER_HARDEN 36 +#define COMBO_STARTER_SING 37 +#define COMBO_STARTER_EARTHQUAKE 38 +#define COMBO_STARTER_DOUBLE_TEAM 39 +#define COMBO_STARTER_CURSE 40 +#define COMBO_STARTER_SWEET_SCENT 41 +#define COMBO_STARTER_SLUDGE 42 +#define COMBO_STARTER_SLUDGE_BOMB 43 +#define COMBO_STARTER_THUNDER_PUNCH 44 +#define COMBO_STARTER_FIRE_PUNCH 45 +#define COMBO_STARTER_ICE_PUNCH 46 +#define COMBO_STARTER_PECK 47 +#define COMBO_STARTER_METAL_SOUND 48 +#define COMBO_STARTER_MUD_SPORT 49 +#define COMBO_STARTER_WATER_SPORT 50 +#define COMBO_STARTER_BONE_CLUB 51 +#define COMBO_STARTER_BONEMERANG 52 +#define COMBO_STARTER_BONE_RUSH 53 +#define COMBO_STARTER_SAND_ATTACK 54 +#define COMBO_STARTER_MUD_SLAP 55 +#define COMBO_STARTER_FAKE_OUT 56 +#define COMBO_STARTER_PSYCHIC 57 +#define COMBO_STARTER_KINESIS 58 +#define COMBO_STARTER_CONFUSION 59 +#define COMBO_STARTER_POUND 60 +#define COMBO_STARTER_SMOG 61 +#define COMBO_STARTER_CALM_MIND 62 + #endif // GUARD_CONSTANTS_CONTEST_H diff --git a/include/contest.h b/include/contest.h index b6818f996c..1cad717058 100644 --- a/include/contest.h +++ b/include/contest.h @@ -15,124 +15,6 @@ enum CONTEST_DEBUG_MODE_PRINT_UNK_D }; -enum -{ - CONTEST_EFFECT_HIGHLY_APPEALING, - CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, - CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, - CONTEST_EFFECT_REPETITION_NOT_BORING, - CONTEST_EFFECT_AVOID_STARTLE_ONCE, - CONTEST_EFFECT_AVOID_STARTLE, - CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY, - CONTEST_EFFECT_USER_LESS_EASILY_STARTLED, - CONTEST_EFFECT_STARTLE_FRONT_MON, - CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS, - CONTEST_EFFECT_STARTLE_PREV_MON, - CONTEST_EFFECT_STARTLE_PREV_MONS, - CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, - CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, - CONTEST_EFFECT_STARTLE_PREV_MON_2, - CONTEST_EFFECT_STARTLE_PREV_MONS_2, - CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, - CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, - CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, - CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL, - CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS, - CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, - CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, - CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION, - CONTEST_EFFECT_BETTER_IF_FIRST, - CONTEST_EFFECT_BETTER_IF_LAST, - CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, - CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, - CONTEST_EFFECT_BETTER_WHEN_LATER, - CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, - CONTEST_EFFECT_BETTER_IF_SAME_TYPE, - CONTEST_EFFECT_BETTER_IF_DIFF_TYPE, - CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, - CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, - CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, - CONTEST_EFFECT_NEXT_APPEAL_EARLIER, - CONTEST_EFFECT_NEXT_APPEAL_LATER, - CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER, - CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, - CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, - CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, - CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, - CONTEST_EFFECT_DONT_EXCITE_AUDIENCE -}; - -enum -{ - COMBO_STARTER_RAIN_DANCE = 1, - COMBO_STARTER_RAGE, - COMBO_STARTER_FOCUS_ENERGY, - COMBO_STARTER_HYPNOSIS, - COMBO_STARTER_ENDURE, - COMBO_STARTER_HORN_ATTACK, - COMBO_STARTER_SWORDS_DANCE, - COMBO_STARTER_STOCKPILE, - COMBO_STARTER_SUNNY_DAY, - COMBO_STARTER_REST, - COMBO_STARTER_VICE_GRIP, - COMBO_STARTER_DEFENSE_CURL, - COMBO_STARTER_CHARGE, - COMBO_STARTER_ROCK_THROW, - COMBO_STARTER_YAWN, - COMBO_STARTER_SCARY_FACE, - COMBO_STARTER_POWDER_SNOW, - COMBO_STARTER_LOCK_ON, - COMBO_STARTER_SOFT_BOILED, - COMBO_STARTER_MEAN_LOOK, - COMBO_STARTER_SCRATCH, - COMBO_STARTER_GROWTH, - COMBO_STARTER_HAIL, - COMBO_STARTER_SANDSTORM, - COMBO_STARTER_BELLY_DRUM, - COMBO_STARTER_MIND_READER, - COMBO_STARTER_DRAGON_BREATH, - COMBO_STARTER_DRAGON_RAGE, - COMBO_STARTER_DRAGON_DANCE, - COMBO_STARTER_SURF, - COMBO_STARTER_DIVE, - COMBO_STARTER_STRING_SHOT, - COMBO_STARTER_LEER, - COMBO_STARTER_TAUNT, - COMBO_STARTER_CHARM, - COMBO_STARTER_HARDEN, - COMBO_STARTER_SING, - COMBO_STARTER_EARTHQUAKE, - COMBO_STARTER_DOUBLE_TEAM, - COMBO_STARTER_CURSE, - COMBO_STARTER_SWEET_SCENT, - COMBO_STARTER_SLUDGE, - COMBO_STARTER_SLUDGE_BOMB, - COMBO_STARTER_THUNDER_PUNCH, - COMBO_STARTER_FIRE_PUNCH, - COMBO_STARTER_ICE_PUNCH, - COMBO_STARTER_PECK, - COMBO_STARTER_METAL_SOUND, - COMBO_STARTER_MUD_SPORT, - COMBO_STARTER_WATER_SPORT, - COMBO_STARTER_BONE_CLUB, - COMBO_STARTER_BONEMERANG, - COMBO_STARTER_BONE_RUSH, - COMBO_STARTER_SAND_ATTACK, - COMBO_STARTER_MUD_SLAP, - COMBO_STARTER_FAKE_OUT, - COMBO_STARTER_PSYCHIC, - COMBO_STARTER_KINESIS, - COMBO_STARTER_CONFUSION, - COMBO_STARTER_POUND, - COMBO_STARTER_SMOG, - COMBO_STARTER_CALM_MIND -}; - enum { CONTEST_STRING_MORE_CONSCIOUS, @@ -255,7 +137,7 @@ struct ContestStruct_field_18 struct Contest { u8 playerMoveChoice; - u8 turnNumber; + u8 appealNumber; u8 unused2[CONTESTANT_COUNT]; bool16 unk1920A_0:1; // Task active flags? bool16 unk1920A_1:1; @@ -273,14 +155,14 @@ struct Contest u8 unk19211; u8 unk19212; u8 filler19213; - u8 unk19214; - u8 unk19215; + u8 turnNumber; + u8 currentContestant; u8 unk19216; // sprite ID s8 applauseLevel; u8 prevTurnOrder[CONTESTANT_COUNT]; u32 unk1921C; // saved RNG value? - u16 moveHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT]; - u8 excitementHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT]; + u16 moveHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT]; + u8 excitementHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT]; u8 applauseMeterSpriteId; u8 contestSetupState; u8 unk1925E; @@ -431,9 +313,9 @@ struct ContestResources #define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004)) extern struct ContestPokemon gContestMons[CONTESTANT_COUNT]; -extern s16 gContestMonConditions[CONTESTANT_COUNT]; +extern s16 gContestMonRound1Points[CONTESTANT_COUNT]; extern s16 gContestMonTotalPoints[CONTESTANT_COUNT]; -extern s16 gUnknown_02039F10[CONTESTANT_COUNT]; +extern s16 gContestMonAppealPointTotals[CONTESTANT_COUNT]; extern s16 gContestMonRound2Points[CONTESTANT_COUNT]; extern u8 gContestFinalStandings[CONTESTANT_COUNT]; extern u8 gContestMonPartyIndex; @@ -457,8 +339,8 @@ void ResetLinkContestBoolean(void); void LoadContestBgAfterMoveAnim(void); void CB2_StartContest(void); void CreateContestMonFromParty(u8 partyIndex); -void sub_80DAB8C(u8 contestType, u8 rank); -void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame); +void SetContestants(u8 contestType, u8 rank); +void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame); u8 GetContestEntryEligibility(struct Pokemon *pkmn); void sub_80DB09C(u8 contestCategory); bool8 IsSpeciesNotUnown(u16 species); diff --git a/include/contest_link.h b/include/contest_link.h index e52ebc426a..52b7ee330f 100644 --- a/include/contest_link.h +++ b/include/contest_link.h @@ -3,7 +3,7 @@ void sub_80FCC88(u8); void sub_80FCC88(u8); -void sub_80FCACC(u8); +void Task_LinkContest_CommunicateFinalStandings(u8); void sub_80FC580(u8); void sub_80FC6BC(u8); void sub_80FC804(u8); @@ -11,8 +11,8 @@ void sub_80FCE48(u8); void sub_80FC894(u8); void Task_LinkContest_CommunicateMonIdxs(u8 taskId); void sub_81D9DE4(u8 taskId); -void sub_80FCF40(u8); -void sub_80FCFD0(u8); +void Task_LinkContest_CommunicateRound1Points(u8); +void Task_LinkContest_CommunicateTurnOrder(u8); void sub_80F8714(u8); bool32 sub_80FC670(s16 *); bool32 LinkContest_SendBlock(void *, u16); diff --git a/src/contest.c b/src/contest.c index 76650da185..b90f894980 100644 --- a/src/contest.c +++ b/src/contest.c @@ -64,13 +64,13 @@ static void Task_ShowMoveSelectScreen(u8 taskId); static void Task_HandleMoveSelectInput(u8 taskId); static void DrawMoveSelectArrow(s8); static void EraseMoveSelectArrow(s8); -static void Task_SelectMove(u8 taskId); +static void Task_SelectedMove(u8 taskId); static void Task_EndCommunicateMoveSelections(u8 taskId); static void Task_HideMoveSelectScreen(u8 taskId); static void Task_HideApplauseMeterForAppealStart(u8 taskId); static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId); static void sub_80D8A88(u8 taskId); -static void sub_80D8B38(u8 taskId); +static void Task_DoAppeals(u8 taskId); static void sub_80DA110(u8); static void sub_80DA134(struct Sprite *); static void sub_80DA164(struct Sprite *); @@ -86,14 +86,14 @@ static void sub_80DA49C(u8); static void sub_80DA4CC(u8); static void sub_80DA51C(u8); static void sub_80DA5B4(u8); -static void sub_80DA5E8(u8); -static void sub_80DA6B4(u8); -static void sub_80DA700(u8); -static void sub_80DA740(u8); -static void sub_80DA7A0(u8); -static void sub_80DA7EC(u8); -static void sub_80DA830(u8); -static void sub_80DA874(void); +static void Task_EndAppeals(u8); +static void Task_WaitForOutOfTimeMsg(u8); +static void Task_CoverAppealPanelForEnd(u8); +static void Task_TryCommunicateFinalStandings(u8); +static void Task_CommunicateFinalStandings(u8); +static void Task_EndCommunicateFinalStandings(u8); +static void Task_ContestReturnToField(u8); +static void FieldCB_ContestReturnToField(void); static bool8 sub_80DA8A4(void); static void PrintContestantTrainerName(u8); static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1); @@ -101,7 +101,7 @@ static void PrintContestantMonName(u8); static void PrintContestantMonNameWithColor(u8, u8); static u8 sub_80DB0C4(void); static u8 sub_80DB120(void); -static u8 sub_80DB174(u16, u32, u32, u32); +static u8 CreateContestantSprite(u16, u32, u32, u32); static void PrintContestMoveDescription(u16); static u16 SanitizeSpecies(u16); static void ContestClearGeneralTextWindow(void); @@ -153,7 +153,7 @@ static void ShowAndUpdateApplauseMeter(s8 unused); static void sub_80DDE0C(void); static void UpdateApplauseMeter(void); static void RankContestants(void); -static void sub_80DBA18(void); +static void SetAttentionLevels(void); static void UpdateHeartSliders(void); static bool8 SlidersDoneUpdating(void); static void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8); @@ -217,6 +217,9 @@ enum #define MOVE_WINDOWS_START CONTEST_WINDOW_MOVE0 +#define TAG_CONTEST_SYMBOLS_PAL 0xABE0 + +#define TAG_JUDGE_SYMBOLS_GFX 0xABE0 #define TAG_FACES_GFX 0xABE1 #define TAG_APPLAUSE_METER 0xABE2 @@ -236,10 +239,10 @@ enum { // EWRAM vars. EWRAM_DATA struct ContestPokemon gContestMons[CONTESTANT_COUNT] = {0}; -EWRAM_DATA s16 gContestMonConditions[CONTESTANT_COUNT] = {0}; -EWRAM_DATA s16 gContestMonTotalPoints[CONTESTANT_COUNT] = {0}; -EWRAM_DATA s16 gUnknown_02039F10[CONTESTANT_COUNT] = {0}; -EWRAM_DATA s16 gContestMonRound2Points[CONTESTANT_COUNT] = {0}; +EWRAM_DATA s16 gContestMonRound1Points[CONTESTANT_COUNT] = {0}; // "Round 1" points are based on condition +EWRAM_DATA s16 gContestMonTotalPoints[CONTESTANT_COUNT] = {0}; // Round 1 points + Round 2 points +EWRAM_DATA s16 gContestMonAppealPointTotals[CONTESTANT_COUNT] = {0}; +EWRAM_DATA s16 gContestMonRound2Points[CONTESTANT_COUNT] = {0}; // "Round 2" points are just appeal points * 2 EWRAM_DATA u8 gContestFinalStandings[CONTESTANT_COUNT] = {0}; EWRAM_DATA u8 gContestMonPartyIndex = 0; EWRAM_DATA u8 gContestPlayerMonIndex = 0; @@ -331,7 +334,7 @@ static const union AffineAnimCmd* const sAffineAnims_SliderHeart[] = static const struct SpriteTemplate sSpriteTemplate_SliderHeart = { .tileTag = TAG_SLIDER_HEART, - .paletteTag = 0xABE0, + .paletteTag = TAG_CONTEST_SYMBOLS_PAL, .oam = &sOam_SliderHeart, .anims = gDummySpriteAnimTable, .images = NULL, @@ -454,14 +457,15 @@ static const struct SubspriteTable sSubspriteTable_NextTurn[] = } }; -const struct CompressedSpriteSheet gUnknown_08587B88 = +// Unused +static const struct CompressedSpriteSheet sSpriteSheet_Faces = { .data = gContestFaces_Gfx, .size = 0x180, .tag = TAG_FACES_GFX }; -const struct OamData gOamData_8587B90 = +static const struct OamData sOam_Faces = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -475,11 +479,12 @@ const struct OamData gOamData_8587B90 = .paletteNum = 0, }; -const struct SpriteTemplate gSpriteTemplate_8587B98 = +// Unused +static const struct SpriteTemplate sSpriteTemplate_Faces = { .tileTag = TAG_FACES_GFX, - .paletteTag = 0xABE0, - .oam = &gOamData_8587B90, + .paletteTag = TAG_CONTEST_SYMBOLS_PAL, + .oam = &sOam_Faces, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -556,23 +561,23 @@ const struct CompressedSpriteSheet gUnknown_08587C00 = .tag = 0x4E21 }; -const struct CompressedSpriteSheet gUnknown_08587C08 = +static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols = { .data = gContestJudgeSymbolsGfx, .size = 0x380, - .tag = 0xABE0 + .tag = TAG_JUDGE_SYMBOLS_GFX }; const struct CompressedSpritePalette gUnknown_08587C10 = { .data = gContest3Pal, - .tag = 0xABE0 + .tag = TAG_CONTEST_SYMBOLS_PAL }; const struct SpriteTemplate gSpriteTemplate_8587C18 = { - .tileTag = 0xABE0, - .paletteTag = 0xABE0, + .tileTag = TAG_JUDGE_SYMBOLS_GFX, + .paletteTag = TAG_CONTEST_SYMBOLS_PAL, .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, @@ -1340,7 +1345,7 @@ static void Task_DisplayAppealNumberText(u8 taskId) gBattle_BG2_Y = 0; ContestDebugDoPrint(); DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, PLTT_BUFFER_SIZE * 2); - ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); + ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed); else @@ -1374,7 +1379,7 @@ static void Task_TryShowMoveSelectScreen(u8 taskId) else { // Skip move selection (selected move will be MOVE_NONE) - gTasks[taskId].func = Task_SelectMove; + gTasks[taskId].func = Task_SelectedMove; } } } @@ -1431,7 +1436,7 @@ static void Task_HandleMoveSelectInput(u8 taskId) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - gTasks[taskId].func = Task_SelectMove; + gTasks[taskId].func = Task_SelectedMove; } else { @@ -1441,7 +1446,7 @@ static void Task_HandleMoveSelectInput(u8 taskId) // Cancel move selection PlaySE(SE_SELECT); SetBottomSliderHeartsInvisibility(FALSE); - ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); + ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed); else @@ -1493,7 +1498,7 @@ static void EraseMoveSelectArrow(s8 moveIndex) ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + moveIndex * 2, 2, 1, 17, 1); } -static void Task_SelectMove(u8 taskId) +static void Task_SelectedMove(u8 taskId) { if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { @@ -1568,7 +1573,7 @@ static void sub_80D8A88(u8 taskId) { if (++gTasks[taskId].data[0] > 19) { - eContest.unk19214 = 0; + eContest.turnNumber = 0; eContest.unk1921C = gRngValue; if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && sub_80DA8A4()) { @@ -1580,46 +1585,48 @@ static void sub_80D8A88(u8 taskId) } } gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80D8B38; + gTasks[taskId].func = Task_DoAppeals; } } -static void sub_80D8B38(u8 taskId) +#define tState data[0] + +static void Task_DoAppeals(u8 taskId) { u8 spriteId; s32 i; - u8 r6 = eContest.unk19215; + u8 r6 = eContest.currentContestant; s8 r3; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: ContestDebugDoPrint(); - for (i = 0; eContest.unk19214 != gContestResources->field_8->turnOrder[i]; i++) + for (i = 0; eContest.turnNumber != gContestResources->field_8->turnOrder[i]; i++) ; - eContest.unk19215 = i; - r6 = eContest.unk19215; + eContest.currentContestant = i; + r6 = eContest.currentContestant; if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { u8 taskId2; eContest.unk1920B_2 = 1; if (sub_80DA8A4()) - sub_80DD080(eContest.unk19215); + sub_80DD080(eContest.currentContestant); taskId2 = CreateTask(sub_80FCC88, 0); SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110); ContestPrintLinkStandby(); - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; } else { - sub_80DD080(eContest.unk19215); - gTasks[taskId].data[0] = 2; + sub_80DD080(eContest.currentContestant); + gTasks[taskId].tState = 2; } return; case 1: if (!eContest.unk1920B_2) - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = 2; return; case 2: sub_80DF080(r6); @@ -1627,44 +1634,44 @@ static void sub_80D8B38(u8 taskId) if (eContestantStatus[r6].numTurnsSkipped != 0 || eContestantStatus[r6].noMoreTurns) { - gTasks[taskId].data[0] = 31; + gTasks[taskId].tState = 31; } else { ContestClearGeneralTextWindow(); gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 3; + gTasks[taskId].tState = 3; } return; case 3: - for (i = 0; i < 4; i++) + for (i = 0; i < CONTESTANT_COUNT; i++) gBattleMonForms[i] = 0; memset(gContestResources->field_18, 0, sizeof(*gContestResources->field_18)); - sub_80DE9DC(eContest.unk19215); - spriteId = sub_80DB174( - gContestMons[eContest.unk19215].species, - gContestMons[eContest.unk19215].otId, - gContestMons[eContest.unk19215].personality, - eContest.unk19215); + sub_80DE9DC(eContest.currentContestant); + spriteId = CreateContestantSprite( + gContestMons[eContest.currentContestant].species, + gContestMons[eContest.currentContestant].otId, + gContestMons[eContest.currentContestant].personality, + eContest.currentContestant); gSprites[spriteId].pos2.x = 120; gSprites[spriteId].callback = sub_80DA134; gTasks[taskId].data[2] = spriteId; gBattlerSpriteIds[gBattlerAttacker] = spriteId; - sub_80DCBE8(sub_80DC9EC(eContest.unk19215), FALSE); - gTasks[taskId].data[0] = 4; + sub_80DCBE8(sub_80DC9EC(eContest.currentContestant), FALSE); + gTasks[taskId].tState = 4; return; case 4: spriteId = gTasks[taskId].data[2]; if (gSprites[spriteId].callback == SpriteCallbackDummy) { if (!gContestResources->field_14[r6].unk2_1) - gTasks[taskId].data[0] = 5; + gTasks[taskId].tState = 5; } return; case 5: if (eContestantStatus[r6].nervous) { - gTasks[taskId].data[0] = 33; + gTasks[taskId].tState = 33; } else { @@ -1676,25 +1683,25 @@ static void sub_80D8B38(u8 taskId) StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[r6].moveCategory]); StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove); Contest_StartTextPrinter(gStringVar4, 1); - gTasks[taskId].data[0] = 6; + gTasks[taskId].tState = 6; } return; case 6: if (!Contest_RunTextPrinters()) { eContest.unk1925E = 0; - gTasks[taskId].data[0] = 7; + gTasks[taskId].tState = 7; } return; case 7: { - u16 move = SanitizeMove(eContestantStatus[eContest.unk19215].currMove); + u16 move = SanitizeMove(eContestantStatus[eContest.currentContestant].currMove); - sub_80DE864(eContest.unk19215); - sub_80DE9DC(eContest.unk19215); + sub_80DE864(eContest.currentContestant); + sub_80DE9DC(eContest.currentContestant); SelectContestMoveBankTarget(move); DoMoveAnim(move); - gTasks[taskId].data[0] = 8; + gTasks[taskId].tState = 8; } return; case 8: @@ -1705,14 +1712,14 @@ static void sub_80D8B38(u8 taskId) if (eContest.unk1925E != 0) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 9; + gTasks[taskId].tState = 9; } else { if (!eContestantStatus[r6].hasJudgesAttention) sub_80DC674(r6); sub_80DE12C(); - gTasks[taskId].data[0] = 23; + gTasks[taskId].tState = 23; } } return; @@ -1720,7 +1727,7 @@ static void sub_80D8B38(u8 taskId) if (gTasks[taskId].data[10]++ > 30) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 7; + gTasks[taskId].tState = 7; } return; case 23: @@ -1729,7 +1736,7 @@ static void sub_80D8B38(u8 taskId) { sub_80DD45C(r6, eContestantStatus[r6].effectStringId); eContestantStatus[r6].effectStringId = CONTEST_STRING_NONE; - gTasks[taskId].data[0] = 24; + gTasks[taskId].tState = 24; } else { @@ -1744,22 +1751,22 @@ static void sub_80D8B38(u8 taskId) { sub_80DD45C(r6, eContestantStatus[r6].effectStringId2); eContestantStatus[r6].effectStringId2 = CONTEST_STRING_NONE; - gTasks[taskId].data[0] = 24; + gTasks[taskId].tState = 24; } else { - gTasks[taskId].data[0] = 48; + gTasks[taskId].tState = 48; } } else { - gTasks[taskId].data[0] = 48; + gTasks[taskId].tState = 48; } } return; case 24: if (!Contest_RunTextPrinters()) - gTasks[taskId].data[0] = 23; + gTasks[taskId].tState = 23; return; case 48: if (eContestantStatus[r6].turnOrderModAction == 1) @@ -1776,62 +1783,62 @@ static void sub_80D8B38(u8 taskId) } else { - gTasks[taskId].data[0] = 47; + gTasks[taskId].tState = 47; return; } - gTasks[taskId].data[0] = 49; + gTasks[taskId].tState = 49; return; case 49: if (!eContest.unk1920A_4) - gTasks[taskId].data[0] = 47; + gTasks[taskId].tState = 47; return; case 47: sub_80DE008(TRUE); - gTasks[taskId].data[0] = 12; + gTasks[taskId].tState = 12; return; case 12: sub_80DC028(0, eContestantStatus[r6].appeal2, r6); - gTasks[taskId].data[0] = 13; + gTasks[taskId].tState = 13; return; case 13: - if (!gContestResources->field_14[eContest.unk19215].unk2_2) - gTasks[taskId].data[0] = 35; + if (!gContestResources->field_14[eContest.currentContestant].unk2_2) + gTasks[taskId].tState = 35; return; case 35: if (eContestantStatus[r6].conditionMod == 1) sub_80DD720(8); - gTasks[taskId].data[0] = 36; + gTasks[taskId].tState = 36; return; case 36: if (!eContest.unk1920A_4) - gTasks[taskId].data[0] = 37; + gTasks[taskId].tState = 37; return; case 37: if (sub_80DB5B8(r6, 1)) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 38; + gTasks[taskId].tState = 38; } else { - gTasks[taskId].data[0] = 50; + gTasks[taskId].tState = 50; } return; case 38: if (++gTasks[taskId].data[10] > 20) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 50; + gTasks[taskId].tState = 50; } return; case 50: if (sub_80DB798(r6)) PlaySE(SE_C_PASI); - gTasks[taskId].data[0] = 25; + gTasks[taskId].tState = 25; return; case 25: gTasks[taskId].data[1] = 0; - gTasks[taskId].data[0] = 26; + gTasks[taskId].tState = 26; return; case 26: { @@ -1858,32 +1865,32 @@ static void sub_80D8B38(u8 taskId) gTasks[taskId].data[1] = gContestantTurnOrder[r2]; sub_80DD45C(r2, eContestantStatus[r2].effectStringId); eContestantStatus[r2].effectStringId = CONTEST_STRING_NONE; - gTasks[taskId].data[0] = 27; + gTasks[taskId].tState = 27; } else { gTasks[taskId].data[1] = 0; gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 51; + gTasks[taskId].tState = 51; sub_80DB884(); } } return; case 27: if (!Contest_RunTextPrinters()) - gTasks[taskId].data[0] = 28; + gTasks[taskId].tState = 28; return; case 28: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; sub_80DC028(eContestantStatus[i].appeal2 + eContestantStatus[i].jam, -eContestantStatus[i].jam, i); - gTasks[taskId].data[0] = 29; + gTasks[taskId].tState = 29; return; case 29: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; if (!gContestResources->field_14[i].unk2_2) - gTasks[taskId].data[0] = 39; + gTasks[taskId].tState = 39; return; case 39: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) @@ -1891,18 +1898,18 @@ static void sub_80D8B38(u8 taskId) if (sub_80DB5B8(i, 1)) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 40; + gTasks[taskId].tState = 40; } else { - gTasks[taskId].data[0] = 30; + gTasks[taskId].tState = 30; } return; case 40: if (++gTasks[taskId].data[10] > 20) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 30; + gTasks[taskId].tState = 30; } return; case 30: @@ -1921,7 +1928,7 @@ static void sub_80D8B38(u8 taskId) eContestantStatus[i].judgesAttentionWasRemoved = 0; } gTasks[taskId].data[1]++; - gTasks[taskId].data[0] = 26; + gTasks[taskId].tState = 26; return; case 51: if (gTasks[taskId].data[10]++ > 9) @@ -1935,16 +1942,16 @@ static void sub_80D8B38(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn); Contest_StartTextPrinter(gStringVar4, 1); } - gTasks[taskId].data[0] = 52; + gTasks[taskId].tState = 52; } return; case 52: if (!Contest_RunTextPrinters()) { if (!eContestantStatus[r6].unk15_6) - gTasks[taskId].data[0] = 17; + gTasks[taskId].tState = 17; else - gTasks[taskId].data[0] = 14; + gTasks[taskId].tState = 14; } return; case 14: @@ -1960,7 +1967,7 @@ static void sub_80D8B38(u8 taskId) Contest_StartTextPrinter(gText_AppealComboWentOverExcellently, TRUE); sub_80DD720(3); gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 45; + gTasks[taskId].tState = 45; } else { @@ -1970,14 +1977,14 @@ static void sub_80D8B38(u8 taskId) Contest_StartTextPrinter(gStringVar4, 1); sub_80DD720(2); gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 45; + gTasks[taskId].tState = 45; } return; case 45: if (!eContest.unk1920A_4) { - sub_80DC9B4(eContest.unk19215); - gTasks[taskId].data[0] = 15; + sub_80DC9B4(eContest.currentContestant); + gTasks[taskId].tState = 15; } return; case 15: @@ -1993,7 +2000,7 @@ static void sub_80D8B38(u8 taskId) r6); eContestantStatus[r6].appeal2 += eContestantStatus[r6].unk17; } - gTasks[taskId].data[0] = 16; + gTasks[taskId].tState = 16; } } return; @@ -2001,7 +2008,7 @@ static void sub_80D8B38(u8 taskId) if (!gContestResources->field_14[r6].unk2_2) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 17; + gTasks[taskId].tState = 17; } return; case 17: @@ -2013,23 +2020,23 @@ static void sub_80D8B38(u8 taskId) Contest_StartTextPrinter(gStringVar4, TRUE); gTasks[taskId].data[10] = 0; sub_80DD720(0); - gTasks[taskId].data[0] = 46; + gTasks[taskId].tState = 46; } else { - gTasks[taskId].data[0] = 41; + gTasks[taskId].tState = 41; } return; case 46: if (!eContest.unk1920A_4) - gTasks[taskId].data[0] = 19; + gTasks[taskId].tState = 19; return; case 19: if (!Contest_RunTextPrinters()) { sub_80DC028(eContestantStatus[r6].appeal2, -eContestantStatus[r6].unk18, r6); eContestantStatus[r6].appeal2 -= eContestantStatus[r6].unk18; - gTasks[taskId].data[0] = 18; + gTasks[taskId].tState = 18; } return; case 18: @@ -2038,13 +2045,13 @@ static void sub_80D8B38(u8 taskId) { gTasks[taskId].data[10] = 0; ContestClearGeneralTextWindow(); - gTasks[taskId].data[0] = 41; + gTasks[taskId].tState = 41; } return; case 41: if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer) { - gTasks[taskId].data[0] = 57; + gTasks[taskId].tState = 57; } else { @@ -2070,7 +2077,7 @@ static void sub_80D8B38(u8 taskId) eContest.applauseLevel = 0; if (r3 == 0) { - gTasks[taskId].data[0] = 55; + gTasks[taskId].tState = 55; } else { @@ -2084,9 +2091,9 @@ static void sub_80D8B38(u8 taskId) gTasks[taskId].data[10] = 0; gTasks[taskId].data[11] = 0; if (r3 < 0) - gTasks[taskId].data[0] = 53; + gTasks[taskId].tState = 53; else - gTasks[taskId].data[0] = 54; + gTasks[taskId].tState = 54; } } return; @@ -2121,7 +2128,7 @@ static void sub_80D8B38(u8 taskId) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[11] = 0; - gTasks[taskId].data[0] = 43; + gTasks[taskId].tState = 43; } break; } @@ -2172,7 +2179,7 @@ static void sub_80D8B38(u8 taskId) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[11] = 0; - gTasks[taskId].data[0] = 43; + gTasks[taskId].tState = 43; } break; } @@ -2181,7 +2188,7 @@ static void sub_80D8B38(u8 taskId) if (!gContestResources->field_14[r6].unk2_2) { ContestClearGeneralTextWindow(); - gTasks[taskId].data[0] = 55; + gTasks[taskId].tState = 55; } return; case 57: @@ -2191,7 +2198,7 @@ static void sub_80D8B38(u8 taskId) StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]); StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].data[0] = 58; + gTasks[taskId].tState = 58; return; case 58: if (!Contest_RunTextPrinters()) @@ -2199,14 +2206,14 @@ static void sub_80D8B38(u8 taskId) ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, gText_MonsMoveIsIgnored); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].data[0] = 59; + gTasks[taskId].tState = 59; } return; case 59: if (!Contest_RunTextPrinters()) { ContestClearGeneralTextWindow(); - gTasks[taskId].data[0] = 55; + gTasks[taskId].tState = 55; } return; case 33: @@ -2217,15 +2224,15 @@ static void sub_80D8B38(u8 taskId) StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]); StringExpandPlaceholders(gStringVar4, gText_MonWasTooNervousToMove); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].data[0] = 34; + gTasks[taskId].tState = 34; return; case 34: if (!Contest_RunTextPrinters()) - gTasks[taskId].data[0] = 55; + gTasks[taskId].tState = 55; return; case 55: TryMoveApplauseMeterOffscreen(); - gTasks[taskId].data[0] = 56; + gTasks[taskId].tState = 56; return; case 56: if (!eContest.applauseMeterIsMoving) @@ -2235,13 +2242,13 @@ static void sub_80D8B38(u8 taskId) eContest.applauseLevel = 0; UpdateApplauseMeter(); } - gTasks[taskId].data[0] = 10; + gTasks[taskId].tState = 10; } return; case 10: spriteId = gTasks[taskId].data[2]; gSprites[spriteId].callback = sub_80DA164; - gTasks[taskId].data[0] = 11; + gTasks[taskId].tState = 11; return; case 11: spriteId = gTasks[taskId].data[2]; @@ -2249,42 +2256,42 @@ static void sub_80D8B38(u8 taskId) { FreeSpriteOamMatrix(&gSprites[spriteId]); DestroySprite(&gSprites[spriteId]); - gTasks[taskId].data[0] = 20; + gTasks[taskId].tState = 20; } return; case 20: gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 21; + gTasks[taskId].tState = 21; return; case 31: ContestClearGeneralTextWindow(); StringCopy(gStringVar1, gContestMons[r6].nickname); StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].data[0] = 32; + gTasks[taskId].tState = 32; return; case 32: if (!Contest_RunTextPrinters()) - gTasks[taskId].data[0] = 21; + gTasks[taskId].tState = 21; return; case 21: if (++gTasks[taskId].data[10] > 29) { gTasks[taskId].data[10] = 0; - gTasks[taskId].data[0] = 22; + gTasks[taskId].tState = 22; } return; case 22: - if (++eContest.unk19214 == 4) + if (++eContest.turnNumber == CONTESTANT_COUNT) { - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; gTasks[taskId].func = sub_80DA198; } else { - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; } return; } @@ -2335,7 +2342,7 @@ static void sub_80DA198(u8 taskId) if (sub_80DA8A4()) { RankContestants(); - sub_80DBA18(); + SetAttentionLevels(); } taskId2 = CreateTask(sub_80FCC88, 0); SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110); @@ -2345,7 +2352,7 @@ static void sub_80DA198(u8 taskId) else { RankContestants(); - sub_80DBA18(); + SetAttentionLevels(); gTasks[taskId].data[0] = 2; } break; @@ -2485,10 +2492,10 @@ static void sub_80DA51C(u8 taskId) ((vBgCnt *)&sp2)->priority = 0; SetGpuReg(REG_OFFSET_BG0CNT, sp0); SetGpuReg(REG_OFFSET_BG2CNT, sp2); - eContest.turnNumber++; - if (eContest.turnNumber == 5) + eContest.appealNumber++; + if (eContest.appealNumber == CONTEST_NUM_APPEALS) { - gTasks[taskId].func = sub_80DA5E8; + gTasks[taskId].func = Task_EndAppeals; } else { @@ -2503,14 +2510,14 @@ static void sub_80DA5B4(u8 taskId) gTasks[taskId].func = Task_DisplayAppealNumberText; } -static void sub_80DA5E8(u8 taskId) +static void Task_EndAppeals(u8 taskId) { s32 i; gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; for (i = 0; i < CONTESTANT_COUNT; i++) - gUnknown_02039F10[i] = eContestantStatus[i].pointTotal; + gContestMonAppealPointTotals[i] = eContestantStatus[i].pointTotal; CalculateFinalScores(); ContestClearGeneralTextWindow(); if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)) @@ -2525,10 +2532,10 @@ static void sub_80DA5E8(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_AllOutOfAppealTime); Contest_StartTextPrinter(gStringVar4, TRUE); gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80DA6B4; + gTasks[taskId].func = Task_WaitForOutOfTimeMsg; } -static void sub_80DA6B4(u8 taskId) +static void Task_WaitForOutOfTimeMsg(u8 taskId) { if (!Contest_RunTextPrinters()) { @@ -2537,62 +2544,62 @@ static void sub_80DA6B4(u8 taskId) gBattle_BG1_Y = 160; PlaySE12WithPanning(SE_C_MAKU_D, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80DA700; + gTasks[taskId].func = Task_CoverAppealPanelForEnd; } } -static void sub_80DA700(u8 taskId) +static void Task_CoverAppealPanelForEnd(u8 taskId) { gBattle_BG1_Y -= 7; if ((s16)gBattle_BG1_Y < 0) gBattle_BG1_Y = 0; if (gBattle_BG1_Y == 0) { - gTasks[taskId].func = sub_80DA740; + gTasks[taskId].func = Task_TryCommunicateFinalStandings; gTasks[taskId].data[0] = 0; } } -static void sub_80DA740(u8 taskId) +static void Task_TryCommunicateFinalStandings(u8 taskId) { if (gTasks[taskId].data[0]++ >= 50) { gTasks[taskId].data[0] = 0; if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { - gTasks[taskId].func = sub_80DA7A0; + gTasks[taskId].func = Task_CommunicateFinalStandings; } else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_80DA830; + gTasks[taskId].func = Task_ContestReturnToField; } } } -static void sub_80DA7A0(u8 taskId) +static void Task_CommunicateFinalStandings(u8 taskId) { - u8 taskId2 = CreateTask(sub_80FCACC, 0); + u8 taskId2 = CreateTask(Task_LinkContest_CommunicateFinalStandings, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FCACC, sub_80DA7EC); + SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateFinalStandings, Task_EndCommunicateFinalStandings); gTasks[taskId].func = TaskDummy1; ContestPrintLinkStandby(); SetBottomSliderHeartsInvisibility(FALSE); } -static void sub_80DA7EC(u8 taskId) +static void Task_EndCommunicateFinalStandings(u8 taskId) { DestroyTask(taskId); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[eContest.mainTaskId].func = sub_80DA830; + gTasks[eContest.mainTaskId].func = Task_ContestReturnToField; } -static void sub_80DA830(u8 taskId) +static void Task_ContestReturnToField(u8 taskId) { if (!gPaletteFade.active) { DestroyTask(taskId); - gFieldCallback = sub_80DA874; + gFieldCallback = FieldCB_ContestReturnToField; FreeAllWindowBuffers(); FreeContestResources(); FreeMonSpritesGfx(); @@ -2600,7 +2607,7 @@ static void sub_80DA830(u8 taskId) } } -static void sub_80DA874(void) +static void FieldCB_ContestReturnToField(void) { ScriptContext2_Disable(); EnableBothScriptContexts(); @@ -2696,33 +2703,33 @@ void CreateContestMonFromParty(u8 partyIndex) gContestMons[gContestPlayerMonIndex].tough = tough; } -void sub_80DAB8C(u8 contestType, u8 rank) +void SetContestants(u8 contestType, u8 rank) { s32 i; u8 opponentsCount = 0; u8 opponents[100]; - bool8 r7 = FALSE; - const u8 * r3; + bool8 allowPostgameContestants = FALSE; + const u8 * filter; TryPutPlayerLast(); if (FlagGet(FLAG_SYS_GAME_CLEAR) && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)) - r7 = TRUE; + allowPostgameContestants = TRUE; // Find all suitable opponents - r3 = gPostgameContestOpponentFilter; + filter = gPostgameContestOpponentFilter; for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++) { if (rank == gContestOpponents[i].whichRank) { - if (r7 == TRUE) + if (allowPostgameContestants == TRUE) { - if (r3[i] == 1) + if (filter[i] == CONTEST_FILTER_NO_POSTGAME) continue; } else { - if (r3[i] == 2) + if (filter[i] == CONTEST_FILTER_ONLY_POSTGAME) continue; } if (contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool) @@ -2740,7 +2747,7 @@ void sub_80DAB8C(u8 contestType, u8 rank) opponents[opponentsCount] = 0xFF; // Choose three random opponents from the list - for (i = 0; i < 3; i++) + for (i = 0; i < CONTESTANT_COUNT - 1; i++) { u16 rnd = Random() % opponentsCount; s32 j; @@ -2754,15 +2761,16 @@ void sub_80DAB8C(u8 contestType, u8 rank) CreateContestMonFromParty(gContestMonPartyIndex); } -void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) +void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame) { s32 i, j; u8 opponentsCount = 0; u8 opponents[100]; - if (gNumLinkContestPlayers == 4) + if (gNumLinkContestPlayers == CONTESTANT_COUNT) return; + // Find all suitable AI opponents for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++) { if (rank != gContestOpponents[i].whichRank) @@ -2786,6 +2794,8 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) opponents[opponentsCount++] = i; } opponents[opponentsCount] = 0xFF; + + // Fill remaining contestant slots with random AI opponents from the list for (i = 0; i < CONTESTANT_COUNT - gNumLinkContestPlayers; i++) { u16 rnd = GetContestRand() % opponentsCount; @@ -2935,7 +2945,7 @@ void sub_80DB09C(u8 contestCategory) s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - gContestMonConditions[i] = sub_80DAFE0(i, contestCategory); + gContestMonRound1Points[i] = sub_80DAFE0(i, contestCategory); } static u8 sub_80DB0C4(void) @@ -2954,7 +2964,7 @@ static u8 sub_80DB120(void) { u8 spriteId; - LoadCompressedSpriteSheet(&gUnknown_08587C08); + LoadCompressedSpriteSheet(&sSpriteSheet_JudgeSymbols); LoadCompressedSpritePalette(&gUnknown_08587C10); spriteId = CreateSprite(&gSpriteTemplate_8587C18, 96, 10, 29); gSprites[spriteId].invisible = TRUE; @@ -2962,7 +2972,7 @@ static u8 sub_80DB120(void) return spriteId; } -static u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index) +static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 index) { u8 spriteId; species = SanitizeSpecies(species); @@ -3300,7 +3310,7 @@ static void RankContestants(void) ApplyNextTurnOrder(); } -static void sub_80DBA18(void) +static void SetAttentionLevels(void) { s32 i; @@ -3373,16 +3383,16 @@ static void sub_80DBAA0(void) for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].prevMove = eContestantStatus[i].currMove; - eContest.moveHistory[eContest.turnNumber][i] = eContestantStatus[i].currMove; - eContest.excitementHistory[eContest.turnNumber][i] = Contest_GetMoveExcitement(eContestantStatus[i].currMove); + eContest.moveHistory[eContest.appealNumber][i] = eContestantStatus[i].currMove; + eContest.excitementHistory[eContest.appealNumber][i] = Contest_GetMoveExcitement(eContestantStatus[i].currMove); eContestantStatus[i].currMove = MOVE_NONE; } eContestResources10.excitementFrozen = 0; } -bool8 Contest_IsMonsTurnDisabled(u8 a) +bool8 Contest_IsMonsTurnDisabled(u8 contestant) { - if (eContestantStatus[a].numTurnsSkipped != 0 || eContestantStatus[a].noMoreTurns) + if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) return TRUE; else return FALSE; @@ -3391,7 +3401,7 @@ bool8 Contest_IsMonsTurnDisabled(u8 a) static void CalculateTotalPointsForContestant(u8 contestant) { gContestMonRound2Points[contestant] = GetContestantRound2Points(contestant); - gContestMonTotalPoints[contestant] = gContestMonConditions[contestant] + gContestMonRound2Points[contestant]; + gContestMonTotalPoints[contestant] = gContestMonRound1Points[contestant] + gContestMonRound2Points[contestant]; } static void CalculateFinalScores(void) @@ -3405,7 +3415,7 @@ static void CalculateFinalScores(void) static s16 GetContestantRound2Points(u8 contestant) { - return gUnknown_02039F10[contestant] * 2; + return gContestMonAppealPointTotals[contestant] * 2; } static void DetermineFinalStandings(void) @@ -3433,7 +3443,7 @@ static void DetermineFinalStandings(void) for (i = 0; i < CONTESTANT_COUNT; i++) { sp8[i].unk0 = gContestMonTotalPoints[i]; - sp8[i].unk4 = gContestMonConditions[i]; + sp8[i].unk4 = gContestMonRound1Points[i]; sp8[i].unk8 = randomOrdering[i]; sp8[i].unkC = i; } @@ -4147,8 +4157,8 @@ void SortContestants(bool8 useRanking) // Determine where the contestant should be ordered. for (v3 = 0; v3 < i; v3++) { - if (gContestMonConditions[gContestantTurnOrder[v3]] < gContestMonConditions[i] - || (gContestMonConditions[gContestantTurnOrder[v3]] == gContestMonConditions[i] && randomOrdering[gContestantTurnOrder[v3]] < randomOrdering[i])) + if (gContestMonRound1Points[gContestantTurnOrder[v3]] < gContestMonRound1Points[i] + || (gContestMonRound1Points[gContestantTurnOrder[v3]] == gContestMonRound1Points[i] && randomOrdering[gContestantTurnOrder[v3]] < randomOrdering[i])) { // Shift everything larger up to make room. s32 j; @@ -5463,7 +5473,7 @@ static void sub_80DF080(u8 contestant) { gContestResources->field_1c[contestant].unkC |= 0x80; gContestResources->field_1c[contestant].unkE_1 = 1; - gContestResources->field_1c[contestant].unk0[eContest.turnNumber] = eContestantStatus[contestant].currMove; + gContestResources->field_1c[contestant].unk0[eContest.appealNumber] = eContestantStatus[contestant].currMove; } if (eContestantStatus[contestant].repeatedMove) @@ -5511,7 +5521,7 @@ static void sub_80DF250(void) for (j = 0; j < CONTESTANT_COUNT; j++) { - if (gContestMonConditions[i] < gContestMonConditions[j]) + if (gContestMonRound1Points[i] < gContestMonRound1Points[j]) break; } if (j == 4 && gContestFinalStandings[i] != 0) @@ -5521,7 +5531,7 @@ static void sub_80DF250(void) r8 = FALSE; for (j = 0; j < CONTESTANT_COUNT; j++) { - if (gContestMonConditions[i] > gContestMonConditions[j]) + if (gContestMonRound1Points[i] > gContestMonRound1Points[j]) r12 = TRUE; if (gContestMonRound2Points[i] > gContestMonRound2Points[j]) r8 = TRUE; @@ -5612,7 +5622,7 @@ static void sub_80DF4F8(void) r10 = 0; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (gContestMonConditions[r7] < gContestMonConditions[i]) + if (gContestMonRound1Points[r7] < gContestMonRound1Points[i]) r9++; if (gContestMonRound2Points[r7] < gContestMonRound2Points[i]) r10++; diff --git a/src/contest_ai.c b/src/contest_ai.c index e2afb2890c..7585cac692 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -10,11 +10,11 @@ extern const u8 *gAIScriptPtr; extern const u8 *gContestAIChecks[]; static void ContestAICmd_score(void); -static void ContestAICmd_get_turn(void); -static void ContestAICmd_if_turn_less_than(void); -static void ContestAICmd_if_turn_more_than(void); -static void ContestAICmd_if_turn_eq(void); -static void ContestAICmd_if_turn_not_eq(void); +static void ContestAICmd_get_appeal_num(void); +static void ContestAICmd_if_appeal_num_less_than(void); +static void ContestAICmd_if_appeal_num_more_than(void); +static void ContestAICmd_if_appeal_num_eq(void); +static void ContestAICmd_if_appeal_num_not_eq(void); static void ContestAICmd_get_excitement(void); static void ContestAICmd_if_excitement_less_than(void); static void ContestAICmd_if_excitement_more_than(void); @@ -151,11 +151,11 @@ typedef void (* ContestAICmdFunc)(void); static const ContestAICmdFunc sContestAICmdTable[] = { ContestAICmd_score, // 0x00 - ContestAICmd_get_turn, // 0x01 - ContestAICmd_if_turn_less_than, // 0x02 - ContestAICmd_if_turn_more_than, // 0x03 - ContestAICmd_if_turn_eq, // 0x04 - ContestAICmd_if_turn_not_eq, // 0x05 + ContestAICmd_get_appeal_num, // 0x01 + ContestAICmd_if_appeal_num_less_than, // 0x02 + ContestAICmd_if_appeal_num_more_than, // 0x03 + ContestAICmd_if_appeal_num_eq, // 0x04 + ContestAICmd_if_appeal_num_not_eq, // 0x05 ContestAICmd_get_excitement, // 0x06 ContestAICmd_if_excitement_less_than, // 0x07 ContestAICmd_if_excitement_more_than, // 0x08 @@ -324,7 +324,7 @@ u8 ContestAI_GetActionToUse(void) { // Randomly choose a move index. If it's the move // with the highest (or tied highest) score, return - u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % 4 doesn't match + u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match u8 score = eContestAI.moveScores[moveIdx]; int i; for (i = 0; i < MAX_MON_MOVES; i++) @@ -404,15 +404,15 @@ static void ContestAICmd_score(void) gAIScriptPtr += 2; } -static void ContestAICmd_get_turn(void) +static void ContestAICmd_get_appeal_num(void) { - eContestAI.scriptResult = eContest.turnNumber; + eContestAI.scriptResult = eContest.appealNumber; gAIScriptPtr += 1; } -static void ContestAICmd_if_turn_less_than(void) +static void ContestAICmd_if_appeal_num_less_than(void) { - ContestAICmd_get_turn(); + ContestAICmd_get_appeal_num(); if (eContestAI.scriptResult < gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -420,9 +420,9 @@ static void ContestAICmd_if_turn_less_than(void) gAIScriptPtr += 5; } -static void ContestAICmd_if_turn_more_than(void) +static void ContestAICmd_if_appeal_num_more_than(void) { - ContestAICmd_get_turn(); + ContestAICmd_get_appeal_num(); if (eContestAI.scriptResult > gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -430,9 +430,9 @@ static void ContestAICmd_if_turn_more_than(void) gAIScriptPtr += 5; } -static void ContestAICmd_if_turn_eq(void) +static void ContestAICmd_if_appeal_num_eq(void) { - ContestAICmd_get_turn(); + ContestAICmd_get_appeal_num(); if (eContestAI.scriptResult == gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -440,9 +440,9 @@ static void ContestAICmd_if_turn_eq(void) gAIScriptPtr += 5; } -static void ContestAICmd_if_turn_not_eq(void) +static void ContestAICmd_if_appeal_num_not_eq(void) { - ContestAICmd_get_turn(); + ContestAICmd_get_appeal_num(); if (eContestAI.scriptResult != gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -636,7 +636,7 @@ static void ContestAICmd_unk_19(void) static void ContestAICmd_unk_1A(void) { - eContestAI.scriptResult = gContestMonConditions[eContestAI.contestantId]; + eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId]; gAIScriptPtr += 1; } @@ -1357,7 +1357,7 @@ static void ContestAICmd_unk_5E(void) { u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - eContestAI.scriptResult = gContestMonConditions[contestant] - gContestMonConditions[eContestAI.contestantId]; + eContestAI.scriptResult = gContestMonRound1Points[contestant] - gContestMonRound1Points[eContestAI.contestantId]; gAIScriptPtr += 2; } diff --git a/src/contest_effect.c b/src/contest_effect.c index 1d3c817763..809aecbed0 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -750,7 +750,7 @@ static void ContestEffect_NextAppealEarlier(void) s8 j; u8 turnOrder[CONTESTANT_COUNT]; - if (eContest.turnNumber != 4) + if (eContest.appealNumber != CONTEST_LAST_APPEAL) { for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; @@ -792,7 +792,7 @@ static void ContestEffect_NextAppealLater(void) s8 j; u8 turnOrder[CONTESTANT_COUNT]; - if (eContest.turnNumber != 4) + if (eContest.appealNumber != CONTEST_LAST_APPEAL) { for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; @@ -841,7 +841,7 @@ static void ContestEffect_ScrambleNextTurnOrder(void) u8 turnOrder[CONTESTANT_COUNT]; u8 unselectedContestants[CONTESTANT_COUNT]; - if (eContest.turnNumber != 4) + if (eContest.appealNumber != CONTEST_LAST_APPEAL) { for (i = 0; i < CONTESTANT_COUNT; i++) { diff --git a/src/contest_link.c b/src/contest_link.c index 9241102e7c..172a2b2ba9 100644 --- a/src/contest_link.c +++ b/src/contest_link.c @@ -297,7 +297,7 @@ void Task_LinkContest_CommunicateMoveSelections(u8 taskId) } } -void sub_80FCACC(u8 taskId) +void Task_LinkContest_CommunicateFinalStandings(u8 taskId) { switch (gTasks[taskId].tState) { @@ -328,14 +328,14 @@ void sub_80FCACC(u8 taskId) case 3: if (IsLinkTaskFinished()) { - if (LinkContest_SendBlock(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1) + if (LinkContest_SendBlock(gContestMonAppealPointTotals, sizeof(gContestMonAppealPointTotals)) == 1) gTasks[taskId].tState++; } break; case 4: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10)); + memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonAppealPointTotals)); gTasks[taskId].tState++; } break; @@ -381,14 +381,14 @@ void sub_80FCC88(u8 taskId) case 0: if (IsLinkTaskFinished()) { - if (LinkContest_SendBlock(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1) + if (LinkContest_SendBlock(eContestantStatus, CONTESTANT_COUNT * sizeof(struct ContestantStatus)) == 1) gTasks[taskId].tState++; } break; case 1: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus)); + memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], CONTESTANT_COUNT * sizeof(struct ContestantStatus)); gTasks[taskId].tState++; } break; @@ -497,7 +497,7 @@ void sub_80FCE48(u8 taskId) } } -void sub_80FCF40(u8 taskId) +void Task_LinkContest_CommunicateRound1Points(u8 taskId) { if (!sub_80FC670(&gTasks[taskId].data[12])) return; @@ -507,14 +507,14 @@ void sub_80FCF40(u8 taskId) case 0: if (IsLinkTaskFinished()) { - if (LinkContest_SendBlock(gContestMonConditions, sizeof(gContestMonConditions)) == 1) + if (LinkContest_SendBlock(gContestMonRound1Points, sizeof(gContestMonRound1Points)) == 1) gTasks[taskId].tState++; } break; case 1: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions)); + memcpy(gContestMonRound1Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound1Points)); gTasks[taskId].tState++; } break; @@ -526,7 +526,7 @@ void sub_80FCF40(u8 taskId) } } -void sub_80FCFD0(u8 taskId) +void Task_LinkContest_CommunicateTurnOrder(u8 taskId) { if (!sub_80FC670(&gTasks[taskId].data[12])) return; diff --git a/src/contest_link_util.c b/src/contest_link_util.c index 2213741124..02c94f0baf 100644 --- a/src/contest_link_util.c +++ b/src/contest_link_util.c @@ -70,29 +70,30 @@ static void sub_81D9F68(u8 taskId) u8 i; u8 rank; int gameCleared; - u8 data1[4]; - u8 data2[4]; + u8 contestCategories[CONTESTANT_COUNT]; + u8 data2[CONTESTANT_COUNT]; - memset(data1, 0, sizeof(data1)); + memset(contestCategories, 0, sizeof(contestCategories)); memset(data2, 0, sizeof(data2)); for (i = 0; i < gNumLinkContestPlayers; i++) - data1[i] = gTasks[taskId].data[i + 1]; + contestCategories[i] = gTasks[taskId].data[i + 1]; + // Ensure all players are doing the same category i = 0; if (i < gNumLinkContestPlayers) { while (++i < gNumLinkContestPlayers) { - if (data1[0] != data1[i]) + if (contestCategories[0] != contestCategories[i]) break; } } if (i == gNumLinkContestPlayers) - gSpecialVar_0x8004 = 0; + gSpecialVar_0x8004 = FALSE; else - gSpecialVar_0x8004 = 1; + gSpecialVar_0x8004 = TRUE; for (i = 0; i < gNumLinkContestPlayers; i++) data2[i] = gTasks[taskId].data[i + 5]; @@ -119,7 +120,7 @@ static void sub_81D9F68(u8 taskId) } } - sub_80DACBC(data1[0], rank, gameCleared); + SetLinkAIContestants(contestCategories[0], rank, gameCleared); } gUnknown_02039F2B = sub_80F86E0(data2); @@ -132,13 +133,13 @@ static void sub_81D9F68(u8 taskId) static void sub_81DA10C(u8 taskId) { sub_80DB09C(gSpecialVar_ContestCategory); - SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_81DA138); } static void sub_81DA138(u8 taskId) { SortContestants(FALSE); - SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714); } static void sub_81DA160(u8 taskId) diff --git a/src/contest_util.c b/src/contest_util.c index 6ad67ee50e..1fd3e04826 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -1718,7 +1718,7 @@ static void LoadContestResultsTilemaps(void) // Represented on results board as stars static u8 GetNumPreliminaryPoints(u8 monIndex, bool8 capPoints) { - u32 condition = gContestMonConditions[monIndex] << 16; + u32 condition = gContestMonRound1Points[monIndex] << 16; u32 numStars = condition / 0x3F; if (numStars & 0xFFFF) @@ -1966,7 +1966,7 @@ static void CalculateContestantsResultData(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - relativePoints = (gContestMonConditions[i] * 1000) / abs(highestPoints); + relativePoints = (gContestMonRound1Points[i] * 1000) / abs(highestPoints); if (relativePoints % 10 > 4) relativePoints += 10; (*sContestResults->monResults)[i].relativePreliminaryPoints = relativePoints / 10; @@ -2206,7 +2206,7 @@ void TryEnterContestMon(void) // Nonzero eligibility can still be non-eligibile, if mon is fainted or egg if (eligibility) { - sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); + SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); sub_80DB09C(gSpecialVar_ContestCategory); } @@ -2324,7 +2324,7 @@ void GetContestMonConditionRanking(void) for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++) { - if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i]) + if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i]) rank++; } @@ -2333,7 +2333,7 @@ void GetContestMonConditionRanking(void) void GetContestMonCondition(void) { - gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006]; + gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006]; } void GetContestWinnerId(void) @@ -2472,13 +2472,13 @@ static void sub_80F85BC(u8 taskId) gUnknown_02039F2B = sub_80F86E0(sp4); sub_80DB09C(gSpecialVar_ContestCategory); - SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_80F86B8); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_80F86B8); } static void sub_80F86B8(u8 taskId) { SortContestants(FALSE); - SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714); } u8 sub_80F86E0(u8 *arg0) diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 53868fc84f..e77223d95e 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -183,7 +183,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("POOCHY"), .trainerName = _("JIMMY"), .trainerGfxId = OBJ_EVENT_GFX_BOY_1, - .aiChecks = 0xC000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -211,7 +211,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("MUSILLE"), .trainerName = _("EDITH"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -239,7 +239,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DUSTER"), .trainerName = _("EVAN"), .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, - .aiChecks = 0x21000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -603,7 +603,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BULBY"), .trainerName = _("AGATHA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, - .aiChecks = 0xC000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -631,7 +631,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("FUTTERBE"), .trainerName = _("BEAU"), .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -659,7 +659,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("PIDEOT"), .trainerName = _("KAY"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, - .aiChecks = 0x21000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -883,7 +883,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DUODO"), .trainerName = _("BOBBY"), .trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1275,7 +1275,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BROWLO"), .trainerName = _("LUKE"), .trainerGfxId = OBJ_EVENT_GFX_FAT_MAN, - .aiChecks = 0xC000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1303,7 +1303,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("FETCHIN"), .trainerName = _("RAUL"), .trainerGfxId = OBJ_EVENT_GFX_MAN_5, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -1331,7 +1331,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SEELEY"), .trainerName = _("JADA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, - .aiChecks = 0x21000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1555,7 +1555,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SHIFTY"), .trainerName = _("CLAUDIA"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1947,7 +1947,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("EGGSOR"), .trainerName = _("GRACIE"), .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, - .aiChecks = 0xC000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1975,7 +1975,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CUBIN"), .trainerName = _("COLTIN"), .trainerGfxId = OBJ_EVENT_GFX_MAN_4, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2003,7 +2003,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("HITMON"), .trainerName = _("ELLIE"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_F, - .aiChecks = 0x21000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2227,7 +2227,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LOUDERD"), .trainerName = _("RALPH"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_M, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2619,7 +2619,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GAREN"), .trainerName = _("CAMILE"), .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, - .aiChecks = 0xC000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2647,7 +2647,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GONPOR"), .trainerName = _("MARTIN"), .trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1, - .aiChecks = 0x82000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2675,7 +2675,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DRITE"), .trainerName = _("SERGIO"), .trainerGfxId = OBJ_EVENT_GFX_BOY_1, - .aiChecks = 0x21000FFF, + .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index a6ab1693b5..89029210bb 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -158,7 +158,7 @@ void sub_80F8970(void) u8 r7; for (i = 0; i < CONTESTANT_COUNT; i++) - conditions[i] = gContestMonConditions[i]; + conditions[i] = gContestMonRound1Points[i]; for (i = 0; i < CONTESTANT_COUNT - 1; i++) { @@ -195,7 +195,7 @@ void sub_80F8970(void) var2 = r8; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (condition == gContestMonConditions[i]) + if (condition == gContestMonRound1Points[i]) { if (var2 == 1) break; From 2439f42de4cdeeb87ee5e574926036707cd0dab6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 24 Jul 2020 03:43:37 -0400 Subject: [PATCH 13/85] Add warnings to generated files --- include/constants/layouts.h | 4 ++++ include/constants/map_groups.h | 4 ++++ tools/mapjson/mapjson.cpp | 28 ++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/include/constants/layouts.h b/include/constants/layouts.h index 3e876f4993..500b82cd47 100755 --- a/include/constants/layouts.h +++ b/include/constants/layouts.h @@ -1,6 +1,10 @@ #ifndef GUARD_CONSTANTS_LAYOUTS_H #define GUARD_CONSTANTS_LAYOUTS_H +// +// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json +// + #define LAYOUT_PETALBURG_CITY 1 #define LAYOUT_SLATEPORT_CITY 2 #define LAYOUT_MAUVILLE_CITY 3 diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h index 17fe7ab533..aef9924fac 100755 --- a/include/constants/map_groups.h +++ b/include/constants/map_groups.h @@ -1,6 +1,10 @@ #ifndef GUARD_CONSTANTS_MAP_GROUPS_H #define GUARD_CONSTANTS_MAP_GROUPS_H +// +// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json +// + // Map Group 0 #define MAP_PETALBURG_CITY (0 | (0 << 8)) #define MAP_SLATEPORT_CITY (1 | (0 << 8)) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 55335e382a..5e246ff249 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -77,6 +77,10 @@ string generate_map_header_text(Json map_data, Json layouts_data, string version ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" + << map_data["name"].string_value() + << "/map.json\n@\n\n"; + text << map_data["name"].string_value() << ":\n" << "\t.4byte " << layout["name"].string_value() << "\n"; @@ -124,6 +128,10 @@ string generate_map_connections_text(Json map_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" + << map_data["name"].string_value() + << "/map.json\n@\n\n"; + text << map_data["name"].string_value() << "_MapConnectionsList:\n"; for (auto &connection : map_data["connections"].array_items()) { @@ -146,6 +154,10 @@ string generate_map_events_text(Json map_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" + << map_data["name"].string_value() + << "/map.json\n@\n\n"; + string objects_label, warps_label, coords_label, bgs_label; if (map_data["object_events"].array_items().size() > 0) { @@ -286,6 +298,8 @@ void process_map(string map_filepath, string layouts_filepath, string version) { string generate_groups_text(Json groups_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + for (auto &key : groups_data["group_order"].array_items()) { string group = key.string_value(); text << group << "::\n"; @@ -325,6 +339,8 @@ string generate_connections_text(Json groups_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + for (Json map_name : map_names) text << "\t.include \"data/maps/" << map_name.string_value() << "/connections.inc\"\n"; @@ -340,6 +356,8 @@ string generate_headers_text(Json groups_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + for (string map_name : map_names) text << "\t.include \"data/maps/" << map_name << "/header.inc\"\n"; @@ -355,6 +373,8 @@ string generate_events_text(Json groups_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + for (string map_name : map_names) text << "\t.include \"data/maps/" << map_name << "/events.inc\"\n"; @@ -370,6 +390,8 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { text << "#ifndef GUARD_CONSTANTS_MAP_GROUPS_H\n" << "#define GUARD_CONSTANTS_MAP_GROUPS_H\n\n"; + text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n//\n\n"; + int group_num = 0; for (auto &group : groups_data["group_order"].array_items()) { @@ -428,6 +450,8 @@ void process_groups(string groups_filepath) { string generate_layout_headers_text(Json layouts_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n@\n\n"; + for (auto &layout : layouts_data["layouts"].array_items()) { string border_label = layout["name"].string_value() + "_Border"; string blockdata_label = layout["name"].string_value() + "_Blockdata"; @@ -451,6 +475,8 @@ string generate_layout_headers_text(Json layouts_data) { string generate_layouts_table_text(Json layouts_data) { ostringstream text; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n@\n\n"; + text << "\t.align 2\n" << layouts_data["layouts_table_label"].string_value() << "::\n"; @@ -466,6 +492,8 @@ string generate_layouts_constants_text(Json layouts_data) { text << "#ifndef GUARD_CONSTANTS_LAYOUTS_H\n" << "#define GUARD_CONSTANTS_LAYOUTS_H\n\n"; + text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n//\n\n"; + int i = 0; for (auto &layout : layouts_data["layouts"].array_items()) text << "#define " << layout["id"].string_value() << " " << ++i << "\n"; From c5aa91741b4ba674e0eec574b33a6fb78b349b7a Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Sun, 19 Jul 2020 15:57:20 -0400 Subject: [PATCH 14/85] Change signedness and add casts to avoid implicit conversion warnings --- src/agb_flash.c | 28 +++++++++++++-------------- src/battle_anim_bug.c | 38 +++++++++++++------------------------ src/battle_anim_effects_1.c | 2 +- src/berry.c | 2 +- src/berry_blender.c | 10 +++++----- src/easy_chat.c | 18 +++++++++--------- src/event_object_movement.c | 6 +++--- src/field_effect.c | 2 +- src/hall_of_fame.c | 4 ++-- src/item_use.c | 2 +- src/list_menu.c | 10 +++++----- src/mirage_tower.c | 7 +++---- src/overworld.c | 2 +- src/party_menu.c | 8 ++++---- src/player_pc.c | 14 +++++++------- src/pokedex.c | 6 +++--- src/roulette.c | 32 +++++++++++++++---------------- src/scrcmd.c | 4 ++-- src/secret_base.c | 8 ++++---- src/slot_machine.c | 2 +- src/start_menu.c | 2 +- src/trainer_see.c | 4 ++-- 22 files changed, 99 insertions(+), 112 deletions(-) diff --git a/src/agb_flash.c b/src/agb_flash.c index 1ad9e47ecb..0045219c41 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -41,7 +41,7 @@ u16 ReadFlashId(void) u8 (*readFlash1)(u8 *); SetReadFlash1(readFlash1Buffer); - readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); + readFlash1 = (u8 (*)(u8 *))((uintptr_t)readFlash1Buffer + 1); // Enter ID mode. FLASH_WRITE(0x5555, 0xAA); @@ -113,12 +113,12 @@ void SetReadFlash1(u16 *dest) u16 *src; u16 i; - PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); + PollFlashStatus = (u8 (*)(u8 *))((uintptr_t)dest + 1); src = (u16 *)ReadFlash1; - src = (u16 *)((s32)src ^ 1); + src = (u16 *)((uintptr_t)src ^ 1); - i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; + i = ((uintptr_t)SetReadFlash1 - (uintptr_t)ReadFlash1) >> 1; while (i != 0) { @@ -154,10 +154,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) } funcSrc = (u16 *)ReadFlash_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = readFlash_Core_Buffer; - i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; + i = ((uintptr_t)ReadFlash - (uintptr_t)ReadFlash_Core) >> 1; while (i != 0) { @@ -165,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) i--; } - readFlash_Core = (void (*)(vu8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); + readFlash_Core = (void (*)(vu8 *, u8 *, u32))((uintptr_t)readFlash_Core_Buffer + 1); src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; @@ -202,10 +202,10 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) } funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); while (i != 0) { @@ -213,7 +213,7 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); size = gFlash->sector.size; @@ -239,10 +239,10 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); while (i != 0) { @@ -250,7 +250,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); @@ -293,4 +293,4 @@ u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n) } return result; -} +} \ No newline at end of file diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index ea3df80986..5e8a8b2a76 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -372,14 +372,11 @@ static void AnimTranslateStinger(struct Sprite *sprite) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - else + else if (GetBattlerSide(gBattleAnimAttacker)) { - if (GetBattlerSide(gBattleAnimAttacker)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - } + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; } if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) @@ -387,13 +384,8 @@ static void AnimTranslateStinger(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) { - s16 temp1, temp2; - - temp1 = gBattleAnimArgs[2]; - gBattleAnimArgs[2] = -temp1; - - temp2 = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -temp2; + gBattleAnimArgs[2] *= -1; + gBattleAnimArgs[0] *= -1; } } @@ -448,28 +440,24 @@ static void AnimMissileArc_Step(struct Sprite *sprite) else { s16 tempData[8]; - u16 *data = sprite->data; - u16 x1 = sprite->pos1.x; - s16 x2 = sprite->pos2.x; - u16 y1 = sprite->pos1.y; - s16 y2 = sprite->pos2.y; + s16 xpos, ypos; int i; for (i = 0; i < 8; i++) - tempData[i] = data[i]; + tempData[i] = sprite->data[i]; - x2 += x1; - y2 += y1; + xpos = sprite->pos1.x + sprite->pos2.x; + ypos = sprite->pos1.y + sprite->pos2.y; if (!TranslateAnimHorizontalArc(sprite)) { - u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2, - sprite->pos1.y + sprite->pos2.y - y2); + u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - xpos, //Isn't this zero lol + sprite->pos1.y + sprite->pos2.y - ypos); rotation += 0xC000; TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); for (i = 0; i < 8; i++) - data[i] = tempData[i]; + sprite->data[i] = tempData[i]; } } } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 516c58e557..9acb4b83ab 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4445,7 +4445,7 @@ static void AnimBowMon_Step1_Callback(struct Sprite* sprite) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); - sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; + sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : (s16)0xFFFFFD00; sprite->data[5] = 0; } diff --git a/src/berry.c b/src/berry.c index 98264f37b8..d70e8c3537 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1331,7 +1331,7 @@ void ResetBerryTreeSparkleFlags(void) s16 bottom; int i; - GetCameraCoords(&cam_left, &cam_top); + GetCameraCoords((u16*)&cam_left, (u16*)&cam_top); left = cam_left; top = cam_top + 3; right = cam_left + 14; diff --git a/src/berry_blender.c b/src/berry_blender.c index a2a96c0892..de3cc62759 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -116,8 +116,8 @@ struct BerryBlenderData u16 field_116; u16 field_118; u16 field_11A; - u16 bg_X; - u16 bg_Y; + s16 bg_X; + s16 bg_Y; u8 field_120[3]; u8 field_123; u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO]; @@ -3166,13 +3166,13 @@ static void sub_80832E8(s16* a0) static void sub_808330C(void) { - sub_80832E8(&sBerryBlenderData->bg_X); - sub_80832E8(&sBerryBlenderData->bg_Y); + sub_80832E8((s16 *)&sBerryBlenderData->bg_X); + sub_80832E8((s16 *)&sBerryBlenderData->bg_Y); } static void sub_8083334(s16* a0, u16 a1) { - s32 var; + u8 var; if (a1 < 10) var = 16; diff --git a/src/easy_chat.c b/src/easy_chat.c index 44a7b90c14..c839c0070d 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -2537,7 +2537,7 @@ u8 sub_811BBBC(void) return sEasyChatScreen->unk_0c; } -void sub_811BBC8(u8 *arg0, u8 *arg1) +static void sub_811BBC8(s8 *arg0, s8 *arg1) { *arg0 = sEasyChatScreen->unk_10; *arg1 = sEasyChatScreen->unk_11; @@ -4529,18 +4529,18 @@ static void sub_811E30C(void) x = var0 * 13; x = x * 8 + 28; y = var1 * 16 + 96; - sub_811E34C(x, y); + sub_811E34C((u8)x, (u8)y); } static void sub_811E34C(u8 x, u8 y) { - if (sUnknown_0203A11C->unk2E4) - { - sUnknown_0203A11C->unk2E4->pos1.x = x; - sUnknown_0203A11C->unk2E4->pos1.y = y; - sUnknown_0203A11C->unk2E4->pos2.x = 0; - sUnknown_0203A11C->unk2E4->data[0] = 0; - } + if (!sUnknown_0203A11C->unk2E4) + return; + + sUnknown_0203A11C->unk2E4->pos1.x = (s16)x; + sUnknown_0203A11C->unk2E4->pos1.y = (s16)y; + sUnknown_0203A11C->unk2E4->pos2.x = 0; + sUnknown_0203A11C->unk2E4->data[0] = 0; } static void sub_811E380(void) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index ad839e0067..c3fef8c0de 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8950,7 +8950,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *objectEvent) u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF); struct Task *task = &gTasks[taskId]; - StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent); + StoreWordInTwoHalfwords((u16 *)&task->data[0], (u32)objectEvent); objectEvent->warpArrowSpriteId = taskId; task->data[3] = 0xFFFF; } @@ -8961,7 +8961,7 @@ static void ApplyLevitateMovement(u8 taskId) struct Sprite *sprite; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer. + LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // load the map object pointer. sprite = &gSprites[objectEvent->spriteId]; if(!(task->data[2] & 0x3)) @@ -8978,7 +8978,7 @@ void DestroyExtraMovementTask(u8 taskId) struct ObjectEvent *objectEvent; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent + LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // unused objectEvent DestroyTask(taskId); } diff --git a/src/field_effect.c b/src/field_effect.c index 07579f55d5..bc1e6f134d 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2501,7 +2501,7 @@ static void sub_80B8584(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; - StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); + StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); task->data[1] = 0xf0f1; task->data[2] = 0x5051; task->data[3] = 0x3f; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index bf9850deca..8e47c1e3ae 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -612,7 +612,7 @@ static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId) static void Task_Hof_TryDisplayAnotherMon(u8 taskId) { - u16 currPokeID = gTasks[taskId].tDisplayedMonId; + u16 currPokeID = (u16)gTasks[taskId].tDisplayedMonId; struct HallofFameMon* currMon = &sHofMonPtr->mon[currPokeID]; if (gTasks[taskId].tFrameCount != 0) @@ -1483,7 +1483,7 @@ static void UpdateDomeConfetti(struct ConfettiUtil *util) static void Task_DoDomeConfetti(u8 taskId) { u32 id = 0; - u16 *data = gTasks[taskId].data; + u16 *data = (u16 *)gTasks[taskId].data; switch (tState) { diff --git a/src/item_use.c b/src/item_use.c index 0aae441c8b..fa3f130810 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -721,7 +721,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) static bool8 TryToWaterSudowoodo(void) { - u16 x, y; + s16 x, y; u8 z; u8 objId; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); diff --git a/src/list_menu.c b/src/list_menu.c index ddcad0fe9c..ebf02bab65 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -1257,17 +1257,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st s32 i, j, id = 0; subsprites[id] = sSubsprite_RedOutline1; - subsprites[id].x = 136; - subsprites[id].y = 136; + subsprites[id].x = -120; + subsprites[id].y = -120; id++; subsprites[id] = sSubsprite_RedOutline2; subsprites[id].x = rowWidth + 128; - subsprites[id].y = 136; + subsprites[id].y = -120; id++; subsprites[id] = sSubsprite_RedOutline7; - subsprites[id].x = 136; + subsprites[id].x = -120; subsprites[id].y = rowHeight + 128; id++; @@ -1297,7 +1297,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st for (j = 8; j < rowHeight - 8; j += 8) { subsprites[id] = sSubsprite_RedOutline4; - subsprites[id].x = 136; + subsprites[id].x = -120; subsprites[id].y = j - 120; id++; diff --git a/src/mirage_tower.c b/src/mirage_tower.c index e2f5cefb78..bdddbdbe64 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -168,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .numColors = 15, .delay = 5, .numFadeCycles = -1, - .maxBlendCoeff = 11, + .maxBlendCoeff = -5, .fadeType = 1, .restorePaletteOnUnload = FALSE, .unk7_7 = 1, @@ -412,10 +412,9 @@ void DoMirageTowerCeilingCrumble(void) static void WaitCeilingCrumble(u8 taskId) { - u16 *data = gTasks[taskId].data; - data[1]++; + u16 *data = (u16 *)gTasks[taskId].data; // Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed. - if (data[1] == 1000 || data[0] == 17) + if (++data[1] == 1000 || data[0] == 17) gTasks[taskId].func = FinishCeilingCrumbleTask; } diff --git a/src/overworld.c b/src/overworld.c index ea0d633bcf..6b8fd232e6 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -3212,7 +3212,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1); sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation); - if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE) + if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte)); else StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte)); diff --git a/src/party_menu.c b/src/party_menu.c index d5bc6dfb63..6a38d90989 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1862,7 +1862,7 @@ u8 GetMonAilment(struct Pokemon *mon) static void SetPartyMonsAllowedInMinigame(void) { - u16 *ptr; + s16 *ptr; if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) { @@ -4951,9 +4951,9 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId) static void DisplayLevelUpStatsPg1(u8 taskId) { - s16 *arrayPtr = sPartyMenuInternal->data; + u16 *arrayPtr = (u16*)sPartyMenuInternal->data; - arrayPtr[12] = CreateLevelUpStatsWindow(); + arrayPtr[12] = (u16)CreateLevelUpStatsWindow(); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); ScheduleBgCopyTilemapToVram(2); @@ -4961,7 +4961,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId) static void DisplayLevelUpStatsPg2(u8 taskId) { - s16 *arrayPtr = sPartyMenuInternal->data; + u16 *arrayPtr = (u16 *)sPartyMenuInternal->data; DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); diff --git a/src/player_pc.c b/src/player_pc.c index fc0bd9f4c8..2010d84f85 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -327,7 +327,7 @@ void PlayerPC(void) static void InitPlayerPCMenu(u8 taskId) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -346,7 +346,7 @@ static void InitPlayerPCMenu(u8 taskId) static void PlayerPCProcessMenuInput(u8 taskId) { - u16 *data; + s16 *data; s8 inputOptionId; data = gTasks[taskId].data; @@ -435,7 +435,7 @@ static void PlayerPC_TurnOff(u8 taskId) static void InitItemStorageMenu(u8 taskId, u8 var) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -548,7 +548,7 @@ static void ItemStorage_Toss(u8 taskId) static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; data[3] = toss; sub_816B4DC(taskId); @@ -581,9 +581,9 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId) static void sub_816B4DC(u8 taskId) { - u16 *data = gTasks[taskId].data; + u16 *data = (u16 *)gTasks[taskId].data; - ClearStdWindowAndFrameToTransparent(data[4], FALSE); + ClearStdWindowAndFrameToTransparent((u8)data[4], FALSE); ClearWindowTilemap(data[4]); RemoveWindow(data[4]); ScheduleBgCopyTilemapToVram(0); @@ -1380,7 +1380,7 @@ static void ItemStorage_DoItemToss(u8 taskId) data = gTasks[taskId].data; b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); - if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId)) + if (ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId) == 0) { CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); diff --git a/src/pokedex.c b/src/pokedex.c index 0541f3f2e6..777cc52cd6 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -5117,9 +5117,9 @@ static void Task_SelectSearchMenuItem(u8 taskId) u16 *scrollOffset; DrawOrEraseSearchParameterBox(FALSE); - menuItem = gTasks[taskId].tMenuItem; - cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; - scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + menuItem = (u16)gTasks[taskId].tMenuItem; + cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; gTasks[taskId].tCursorPos = *cursorPos; gTasks[taskId].tScrollOffset = *scrollOffset; PrintSearchParameterText(taskId); diff --git a/src/roulette.c b/src/roulette.c index 58e120cb50..f55736a969 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -633,7 +633,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -643,7 +643,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -653,7 +653,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -663,7 +663,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -673,7 +673,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -683,7 +683,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -693,7 +693,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -703,7 +703,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -713,7 +713,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -723,7 +723,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -733,7 +733,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -743,7 +743,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -753,7 +753,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 10, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, }; @@ -767,7 +767,7 @@ static const struct UnkStruct1 gUnknown_085B63F0[] = .var05 = 30, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -777,7 +777,7 @@ static const struct UnkStruct1 gUnknown_085B63F0[] = .var05 = 30, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -787,7 +787,7 @@ static const struct UnkStruct1 gUnknown_085B63F0[] = .var05 = 30, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 } }; diff --git a/src/scrcmd.c b/src/scrcmd.c index 4a7f4ea735..2a6abf17e1 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -788,8 +788,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - u16 x; - u16 y; + s16 x; + s16 y; PlayerGetDestCoords(&x, &y); if (mapGroup == 0xFF && mapNum == 0xFF) diff --git a/src/secret_base.c b/src/secret_base.c index 83626710fc..35ac31d4a7 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -964,7 +964,7 @@ static void HandleRegistryMenuInput(u8 taskId) data = gTasks[taskId].data; input = ListMenu_ProcessInput(data[5]); - ListMenuGetScrollAndRow(data[5], &data[2], &data[1]); + ListMenuGetScrollAndRow((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); switch (input) { case LIST_NOTHING_CHOSEN: @@ -1045,10 +1045,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask(data[5], &data[2], &data[1]); + DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0; BuildRegistryMenuItems(taskId); - sub_812225C(&data[2], &data[1], data[3], data[0]); + sub_812225C((u16 *)&data[2], (u16 *)&data[1], (u16)data[3], (u16)data[0]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1062,7 +1062,7 @@ static void DeleteRegistry_No(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask(data[5], &data[2], &data[1]); + DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } diff --git a/src/slot_machine.c b/src/slot_machine.c index d1cb05b180..6557e8cf49 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -775,7 +775,7 @@ static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback cb) { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->data[0] = slotMachineIndex; - StoreWordInTwoHalfwords(task->data + 1, (intptr_t)cb); + StoreWordInTwoHalfwords((u16 *)(task->data + 1), (intptr_t)cb); } diff --git a/src/start_menu.c b/src/start_menu.c index 88ad364c7b..68a3161855 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -463,7 +463,7 @@ static bool32 InitStartMenuStep(void) sInitStartMenuData[0]++; break; case 4: - if (PrintStartMenuActions(&sInitStartMenuData[1], 2)) + if (PrintStartMenuActions((s8 *)&sInitStartMenuData[1], 2)) sInitStartMenuData[0]++; break; case 5: diff --git a/src/trainer_see.c b/src/trainer_see.c index 68a16e208b..93daab421d 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -603,7 +603,7 @@ static void sub_80B44C8(u8 taskId) struct ObjectEvent *objEvent; // another objEvent loaded into by loadword? - LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&objEvent); + LoadWordFromTwoHalfwords((u16*)&task->data[1], (u32 *)&objEvent); if (!task->data[7]) { ObjectEventClearHeldMovement(objEvent); @@ -624,7 +624,7 @@ static void sub_80B44C8(u8 taskId) void sub_80B4578(struct ObjectEvent *var) { - StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); + StoreWordInTwoHalfwords((u16 *)&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); } void EndTrainerApproach(void) From 36a4764a784ec5eb0a5dbcd59bcce6804cded2f4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 26 Jul 2020 01:17:09 -0400 Subject: [PATCH 15/85] Document some slot machine data --- .../{reel_time.png => digital_display.png} | Bin include/constants/slot_machine.h | 36 - include/graphics.h | 10 +- include/strings.h | 6 + src/data/graphics/slot_machine.h | 10 +- src/slot_machine.c | 2033 +++++++++-------- 6 files changed, 1099 insertions(+), 996 deletions(-) rename graphics/slot_machine/{reel_time.png => digital_display.png} (100%) diff --git a/graphics/slot_machine/reel_time.png b/graphics/slot_machine/digital_display.png similarity index 100% rename from graphics/slot_machine/reel_time.png rename to graphics/slot_machine/digital_display.png diff --git a/include/constants/slot_machine.h b/include/constants/slot_machine.h index 9ecf46d794..2b7c68793f 100644 --- a/include/constants/slot_machine.h +++ b/include/constants/slot_machine.h @@ -1,42 +1,6 @@ #ifndef GUARD_CONSTANTS_SLOT_MACHINE_H #define GUARD_CONSTANTS_SLOT_MACHINE_H -#define NUM_REELS 3 -#define REEL_NUM_TAGS 21 -#define REEL_TAG_HEIGHT 24 #define SLOT_MACHINE_COUNT 12 -// Lucky Flags -#define LUCKY_BIAS_REPLAY (1 << 0) -#define LUCKY_BIAS_CHERRY (1 << 1) -#define LUCKY_BIAS_LOTAD (1 << 2) -#define LUCKY_BIAS_AZURILL (1 << 3) -#define LUCKY_BIAS_POWER (1 << 4) -#define LUCKY_BIAS_REELTIME (1 << 5) -#define LUCKY_BIAS_MIXED_777 (1 << 6) -#define LUCKY_BIAS_777 (1 << 7) - -#define SLOT_MACHINE_TAG_7_RED 0 -#define SLOT_MACHINE_TAG_7_BLUE 1 -#define SLOT_MACHINE_TAG_AZURILL 2 -#define SLOT_MACHINE_TAG_LOTAD 3 -#define SLOT_MACHINE_TAG_CHERRY 4 -#define SLOT_MACHINE_TAG_POWER 5 -#define SLOT_MACHINE_TAG_REPLAY 6 - -#define SLOT_MACHINE_MATCHED_1CHERRY 0 -#define SLOT_MACHINE_MATCHED_2CHERRY 1 -#define SLOT_MACHINE_MATCHED_REPLAY 2 -#define SLOT_MACHINE_MATCHED_LOTAD 3 -#define SLOT_MACHINE_MATCHED_AZURILL 4 -#define SLOT_MACHINE_MATCHED_POWER 5 -#define SLOT_MACHINE_MATCHED_777_MIXED 6 -#define SLOT_MACHINE_MATCHED_777_RED 7 -#define SLOT_MACHINE_MATCHED_777_BLUE 8 -#define SLOT_MACHINE_MATCHED_NONE 9 - -#define LEFT_REEL 0 -#define MIDDLE_REEL 1 -#define RIGHT_REEL 2 - #endif // GUARD_CONSTANTS_SLOT_MACHINE_H \ No newline at end of file diff --git a/include/graphics.h b/include/graphics.h index 8514d49bdf..ab2b299c05 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4824,7 +4824,7 @@ extern const u32 gUnknown_08D91DB8[]; extern const u32 gUnknown_08D927EC[]; // Slot Machine -extern const u32 gSlotMachineReelTime_Gfx[]; +extern const u32 gSlotMachineDigitalDisplay_Gfx[]; extern const u8 gSlotMachineReelTimeNumber0[]; extern const u8 gSlotMachineReelTimeNumber1[]; extern const u8 gSlotMachineReelTimeNumber2[]; @@ -4833,14 +4833,14 @@ extern const u8 gSlotMachineReelTimeNumber4[]; extern const u8 gSlotMachineReelTimeNumber5[]; extern const u8 gSlotMachineReelTimeShadow[]; extern const u8 gUnknown_08DD1A18[]; -extern const u8 gSlotMachineReelTimeLargeBolt0[]; -extern const u8 gSlotMachineReelTimeLargeBolt1[]; +extern const u8 gSlotMachineReelTimeBolt0[]; +extern const u8 gSlotMachineReelTimeBolt1[]; extern const u8 gSlotMachineReelTimePikaAura[]; extern const u8 gSlotMachineReelTimeExplosion0[]; extern const u8 gSlotMachineReelTimeExplosion1[]; extern const u8 gSlotMachineReelTimeDuck[]; extern const u8 gSlotMachineReelTimeSmoke[]; -extern const u8 gSlotMachineReelTimeBolt[]; +extern const u8 gSlotMachinePikaPowerBolt[]; extern const u8 gSlotMachineReelSymbol1Tiles[]; extern const u8 gSlotMachineReelSymbol2Tiles[]; extern const u8 gSlotMachineReelSymbol3Tiles[]; @@ -4866,7 +4866,7 @@ extern const u16 gSlotMachineMenu_Pal[]; extern const u16 gUnknown_08DCF230[]; extern const u16 gUnknown_08DCF170[]; extern const u16 gUnknown_08DCF1B0[]; -extern const u16 gSlotMachineReelTime_Pal[]; +extern const u16 gSlotMachineDigitalDisplay_Pal[]; extern const u16 gUnknown_08DCF1F0[]; extern const u16 gUnknown_08DCF210[]; extern const u16 gUnknown_08DCF230[]; diff --git a/include/strings.h b/include/strings.h index 702392efa2..50af23a40a 100644 --- a/include/strings.h +++ b/include/strings.h @@ -88,6 +88,12 @@ extern const u8 gText_Slots[]; extern const u8 gText_Roulette[]; extern const u8 gText_Jackpot[]; +extern const u8 gText_YouDontHaveThreeCoins[]; +extern const u8 gText_QuitTheGame[]; +extern const u8 gText_YouveGot9999Coins[]; +extern const u8 gText_YouveRunOutOfCoins[]; +extern const u8 gText_ReelTimeHelp[]; + extern const u8 gText_First[]; extern const u8 gText_Second[]; extern const u8 gText_Third[]; diff --git a/src/data/graphics/slot_machine.h b/src/data/graphics/slot_machine.h index a94f2b6223..94ab989e28 100644 --- a/src/data/graphics/slot_machine.h +++ b/src/data/graphics/slot_machine.h @@ -10,7 +10,7 @@ const u16 gUnknown_08DCF190[] = INCBIN_U16("graphics/slot_machine/reel_pikachu.g const u16 gUnknown_08DCF1B0[] = INCBIN_U16("graphics/slot_machine/shadow.gbapal"); -const u16 gSlotMachineReelTime_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time.gbapal"); +const u16 gSlotMachineDigitalDisplay_Pal[] = INCBIN_U16("graphics/slot_machine/digital_display.gbapal"); const u16 gUnknown_08DCF1F0[] = INCBIN_U16("graphics/slot_machine/smoke.gbapal"); // also duck and pika aura @@ -26,7 +26,7 @@ const u8 gSlotMachineReelSymbol5Tiles[] = INCBIN_U8("graphics/slot_machine/reel_ const u8 gSlotMachineReelSymbol6Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/6.4bpp"); const u8 gSlotMachineReelSymbol7Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/7.4bpp"); -const u32 gSlotMachineReelTime_Gfx[] = INCBIN_U32("graphics/slot_machine/reel_time.4bpp.lz"); +const u32 gSlotMachineDigitalDisplay_Gfx[] = INCBIN_U32("graphics/slot_machine/digital_display.4bpp.lz"); const u8 gSlotMachineNumber0Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/0.4bpp"); const u8 gSlotMachineNumber1Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/1.4bpp"); @@ -39,7 +39,7 @@ const u8 gSlotMachineNumber7Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/7 const u8 gSlotMachineNumber8Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/8.4bpp"); const u8 gSlotMachineNumber9Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/9.4bpp"); -const u8 gSlotMachineReelTimeBolt[] = INCBIN_U8("graphics/slot_machine/bolt.4bpp"); +const u8 gSlotMachinePikaPowerBolt[] = INCBIN_U8("graphics/slot_machine/bolt.4bpp"); const u8 gSlotMachineReelTimeDuck[] = INCBIN_U8("graphics/slot_machine/duck.4bpp"); const u8 gSlotMachineReelTimeSmoke[] = INCBIN_U8("graphics/slot_machine/smoke.4bpp"); @@ -50,8 +50,8 @@ const u8 gSlotMachineReelTimeNumber3[] = INCBIN_U8("graphics/slot_machine/reel_t const u8 gSlotMachineReelTimeNumber4[] = INCBIN_U8("graphics/slot_machine/reel_time_numbers/4.4bpp"); const u8 gSlotMachineReelTimeNumber5[] = INCBIN_U8("graphics/slot_machine/reel_time_numbers/5.4bpp"); -const u8 gSlotMachineReelTimeLargeBolt0[] = INCBIN_U8("graphics/slot_machine/large_bolt/0.4bpp"); -const u8 gSlotMachineReelTimeLargeBolt1[] = INCBIN_U8("graphics/slot_machine/large_bolt/1.4bpp"); +const u8 gSlotMachineReelTimeBolt0[] = INCBIN_U8("graphics/slot_machine/large_bolt/0.4bpp"); +const u8 gSlotMachineReelTimeBolt1[] = INCBIN_U8("graphics/slot_machine/large_bolt/1.4bpp"); const u8 gSlotMachineReelTimeExplosion0[] = INCBIN_U8("graphics/slot_machine/reel_time_explosion/0.4bpp"); const u8 gSlotMachineReelTimeExplosion1[] = INCBIN_U8("graphics/slot_machine/reel_time_explosion/1.4bpp"); diff --git a/src/slot_machine.c b/src/slot_machine.c index d1cb05b180..517cbb1431 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1,5 +1,4 @@ #include "global.h" -#include "constants/songs.h" #include "overworld.h" #include "field_effect.h" #include "random.h" @@ -18,23 +17,133 @@ #include "bg.h" #include "gpu_regs.h" #include "coins.h" +#include "strings.h" #include "tv.h" #include "text_window.h" -#include "constants/rgb.h" #include "main_menu.h" #include "bg.h" #include "window.h" #include "constants/coins.h" +#include "constants/rgb.h" #include "constants/slot_machine.h" +#include "constants/songs.h" -// Text -extern const u8 gText_YouDontHaveThreeCoins[]; -extern const u8 gText_QuitTheGame[]; -extern const u8 gText_YouveGot9999Coins[]; -extern const u8 gText_YouveRunOutOfCoins[]; -extern const u8 gText_ReelTimeHelp[]; +#define SLOTMACHINE_GFX_TILES 233 +#define MAX_BET 3 -struct SlotMachineEwramStruct +#define REEL_NUM_TAGS 21 +#define REEL_TAG_HEIGHT 24 + +// Lucky Flags +#define LUCKY_BIAS_REPLAY (1 << 0) +#define LUCKY_BIAS_CHERRY (1 << 1) +#define LUCKY_BIAS_LOTAD (1 << 2) +#define LUCKY_BIAS_AZURILL (1 << 3) +#define LUCKY_BIAS_POWER (1 << 4) +#define LUCKY_BIAS_REELTIME (1 << 5) +#define LUCKY_BIAS_MIXED_777 (1 << 6) +#define LUCKY_BIAS_777 (1 << 7) + +#define SLOT_MACHINE_TAG_7_RED 0 +#define SLOT_MACHINE_TAG_7_BLUE 1 +#define SLOT_MACHINE_TAG_AZURILL 2 +#define SLOT_MACHINE_TAG_LOTAD 3 +#define SLOT_MACHINE_TAG_CHERRY 4 +#define SLOT_MACHINE_TAG_POWER 5 +#define SLOT_MACHINE_TAG_REPLAY 6 + +#define SLOT_MACHINE_MATCHED_1CHERRY 0 +#define SLOT_MACHINE_MATCHED_2CHERRY 1 +#define SLOT_MACHINE_MATCHED_REPLAY 2 +#define SLOT_MACHINE_MATCHED_LOTAD 3 +#define SLOT_MACHINE_MATCHED_AZURILL 4 +#define SLOT_MACHINE_MATCHED_POWER 5 +#define SLOT_MACHINE_MATCHED_777_MIXED 6 +#define SLOT_MACHINE_MATCHED_777_RED 7 +#define SLOT_MACHINE_MATCHED_777_BLUE 8 +#define SLOT_MACHINE_MATCHED_NONE 9 + +#define LEFT_REEL 0 +#define MIDDLE_REEL 1 +#define RIGHT_REEL 2 +#define NUM_REELS 3 + +enum { + SLOT_ACTION_UNFADE, + SLOT_ACTION_1, + SLOT_ACTION_2, + SLOT_ACTION_3, + SLOT_ACTION_4, + SLOT_ACTION_BET_INPUT, + SLOT_ACTION_6, + SLOT_ACTION_7, + SLOT_ACTION_8, + SLOT_ACTION_9, + SLOT_ACTION_10, + SLOT_ACTION_11, + SLOT_ACTION_12, + SLOT_ACTION_13, + SLOT_ACTION_14, + SLOT_ACTION_15, + SLOT_ACTION_16, + SLOT_ACTION_17, + SLOT_ACTION_18, + SLOT_ACTION_19, + SLOT_ACTION_20, + SLOT_ACTION_ASK_QUIT, + SLOT_ACTION_HANDLE_QUIT_INPUT, + SLOT_ACTION_MSG_MAX_COINS, + SLOT_ACTION_WAIT_MSG_MAX_COINS, + SLOT_ACTION_MSG_NO_MORE_COINS, + SLOT_ACTION_WAIT_MSG_NO_MORE_COINS, + SLOT_ACTION_END, + SLOT_ACTION_FREE, +}; + +#define DIG_SPRITE_DUMMY {255, 0, 0} + +// Sprite template IDs for the digital display in the right panel +enum { + DIG_SPRITE_REEL, + DIG_SPRITE_TIME, + DIG_SPRITE_INSERT, + DIG_SPRITE_WIN, + DIG_SPRITE_LOSE, + DIG_SPRITE_A_BUTTON, + DIG_SPRITE_SMOKE, + DIG_SPRITE_NUMBER, + DIG_SPRITE_POKE_BALL, + DIG_SPRITE_D_PAD, + DIG_SPRITE_STOP_S, + DIG_SPRITE_STOP_T, + DIG_SPRITE_STOP_O, + DIG_SPRITE_STOP_P, + DIG_SPRITE_BONUS_B, + DIG_SPRITE_BONUS_O, + DIG_SPRITE_BONUS_N, + DIG_SPRITE_BONUS_U, + DIG_SPRITE_BONUS_S, + DIG_SPRITE_BIG_B, + DIG_SPRITE_BIG_I, + DIG_SPRITE_BIG_G, + DIG_SPRITE_REG_R, + DIG_SPRITE_REG_E, + DIG_SPRITE_REG_G, + DIG_SPRITE_EMPTY, + NUM_DIG_DISPLAY_SPRITES +}; + +enum { + DIG_DISPLAY_INSERT_BET, + DIG_DISPLAY_STOP_REEL, + DIG_DISPLAY_WIN, + DIG_DISPLAY_LOSE, + DIG_DISPLAY_REEL_TIME, + DIG_DISPLAY_BONUS_REG, + DIG_DISPLAY_BONUS_BIG +}; + +struct SlotMachine { /*0x00*/ u8 state; /*0x01*/ u8 machineId; @@ -45,8 +154,8 @@ struct SlotMachineEwramStruct /*0x06*/ u8 luckySpinsLeft; // tentative /*0x07*/ u8 biasTag; /*0x08*/ u16 matchedSymbols; - /*0x0A*/ u8 fairRollsLeft; // only happens if you win reeltime - /*0x0B*/ u8 fairRollsUsed; + /*0x0A*/ u8 reelTimeSpinsLeft; + /*0x0B*/ u8 reelTimeSpinsUsed; /*0x0C*/ s16 coins; /*0x0E*/ s16 payout; /*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0) @@ -55,26 +164,26 @@ struct SlotMachineEwramStruct /*0x16*/ s16 reeltimePosition; /*0x18*/ s16 currReel; /*0x1A*/ s16 reelIncrement; // speed of reel - /*0x1C*/ s16 reelPixelOffsets[3]; - /*0x22*/ u16 reelPixelOffsetsWhileStopping[3]; - /*0x28*/ s16 reelPositions[3]; + /*0x1C*/ s16 reelPixelOffsets[NUM_REELS]; + /*0x22*/ u16 reelPixelOffsetsWhileStopping[NUM_REELS]; + /*0x28*/ s16 reelPositions[NUM_REELS]; /*0x2E*/ s16 reelExtraTurns[3]; /*0x34*/ s16 winnerRows[3]; /*0x3A*/ u8 slotReelTasks[3]; /*0x3D*/ u8 unkTaskPointer3D; /*0x3E*/ u8 unkTaskPointer3E; - /*0x3F*/ u8 reelTimeSprite3F; + /*0x3F*/ u8 reelTimePikachuSpriteId; /*0x40*/ u8 unk40; - /*0x41*/ u8 unk41; - /*0x42*/ u8 unk42; - /*0x43*/ u8 unk43; + /*0x41*/ u8 reelTimeExplosionSpriteId; + /*0x42*/ u8 reelTimeBrokenMachineSpriteId; + /*0x43*/ u8 reelTimeSmokeSpriteId; /*0x44*/ u8 unk44[5]; - /*0x49*/ u8 unk49[2]; - /*0x49*/ u8 unk4B[3]; - /*0x4E*/ u8 unk4E[2]; - /*0x50*/ u8 reelTimeSprites1[2]; - /*0x52*/ u8 reelTimeSprites2[2]; - /*0x54*/ u8 unk54[4]; + /*0x49*/ u8 reelTimeMachineSpriteIds[2]; + /*0x49*/ u8 reelTimeNumberSpriteIds[3]; + /*0x4E*/ u8 reelTimeShadowSpriteIds[2]; + /*0x50*/ u8 reelTimeBoltSpriteIds[2]; + /*0x52*/ u8 reelTimePikachuAuraSpriteIds[2]; + /*0x54*/ u8 reelTimeDuckSpriteIds[4]; /*0x58*/ u16 win0h; /*0x5a*/ u16 win0v; /*0x5c*/ u16 winIn; @@ -83,15 +192,13 @@ struct SlotMachineEwramStruct /*0x64*/ MainCallback prevMainCb; }; -struct UnkStruct1 +struct DigitalDisplaySprite { - /*0x00*/ u8 unk00; + /*0x00*/ u8 spriteTemplateId; /*0x01*/ u8 unk01; /*0x02*/ s16 unk02; }; -#define SLOTMACHINE_GFX_TILES 233 - static void CB2_SlotMachineSetup(void); static void CB2_SlotMachineLoop(void); static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback cb); @@ -107,8 +214,8 @@ static void SlotMachineSetup_4_0(void); static void SlotMachineSetup_5_0(void); static void SlotMachineSetup_6_0(void); static void SlotMachineSetup_6_1(void); -static void SlotMachineSetup_8_0(void); -static void SlotMachineSetup_9_0(void); +static void SlotMachineSetup_AllocDigDisplayGfx(void); +static void SlotMachineSetup_SetDigDisplayImagePtrs(void); static void SlotMachineSetup_10_0(void); static void SlotMachineSetupGameplayTasks(void); static void GameplayTasks_Slots(void); @@ -119,7 +226,7 @@ static bool8 SlotAction_WaitForUnfade(struct Task *task); static bool8 SlotAction_SetSlotMachineVars(struct Task *task); static bool8 SlotAction3(struct Task *task); static bool8 SlotAction4(struct Task *task); -static bool8 SlotAction_AwaitPlayerInput(struct Task *task); +static bool8 SlotAction_HandleBetInput(struct Task *task); static bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task); static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task); static bool8 SlotAction_GivingInformation(struct Task *task); @@ -136,11 +243,11 @@ static bool8 SlotAction18(struct Task *task); static bool8 SlotAction_Loop(struct Task *task); static bool8 SlotAction_NoMatches(struct Task *task); static bool8 SlotAction_PrintQuitTheGame(struct Task *task); -static bool8 SlotAction_SeeIfPlayerQuits(struct Task *task); +static bool8 SlotAction_HandleQuitGameInput(struct Task *task); static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task); -static bool8 SlotAction_ExitMessage_9999Coins(struct Task *task); +static bool8 SlotAction_WaitMessage_9999Coins(struct Task *task); static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task); -static bool8 SlotAction_ExitMessage_NoMoreCoins(struct Task *task); +static bool8 SlotAction_WaitMessage_NoMoreCoins(struct Task *task); static bool8 SlotAction_EndGame(struct Task *task); static bool8 SlotAction_FreeDataStructures(struct Task *task); static void DrawLuckyFlags(void); @@ -208,7 +315,7 @@ static void sub_8103FE8_(u8 taskId); static void GameplayTask_PikaPower(void); static void DisplayPikaPower(u8 pikaPower); static bool8 sub_81040C8(void); -static void sub_81040E8(u8 taskId); +static void Task_CreatePikaPowerBolt(u8 taskId); static void nullsub_68(struct Task *task); static void sub_810411C(struct Task *task); static void sub_8104144(struct Task *task); @@ -231,14 +338,14 @@ static void ReeltimeAction9(struct Task *task); static void ReeltimeAction10(struct Task *task); static void ReeltimeAction11(struct Task *task); static void ReeltimeAction12(struct Task *task); -static void ReeltimeAction13(struct Task *task); -static void ReeltimeAction14(struct Task *task); -static void ReeltimeAction15(struct Task *task); -static void ReeltimeAction16(struct Task *task); -static void ReeltimeAction17(struct Task *task); -static void sub_8104A40(s16 a0, s16 a1); -static void sub_8104A88(s16 a0); -static void OpenInfoBox(u8 a0); +static void ReeltimeAction13(struct Task *); +static void ReeltimeAction14(struct Task *); +static void ReeltimeAction15(struct Task *); +static void ReeltimeAction16(struct Task *); +static void ReeltimeAction17(struct Task *); +static void sub_8104A40(s16, s16); +static void sub_8104A88(s16); +static void OpenInfoBox(u8); static bool8 IsInfoBoxClosed(void); static void RunInfoBoxActions(u8 taskId); static void InfoBox_FadeIn(struct Task *task); @@ -251,40 +358,40 @@ static void InfoBox_812DE14(struct Task *task); static void InfoBox_812DE30(struct Task *task); static void InfoBox_FreeTask(struct Task *task); static void sub_8104C5C(void); -static void sub_8104CAC(u8 arg0); +static void CreateDigitalDisplayScene(u8 arg0); static bool8 sub_8104E18(void); static void nullsub_69(struct Task *task); static void sub_8104E74_(u8 taskId); -static void sub_8104EA8(void); -static void sub_8104F8C(void); -static void sub_8104FF4(s16 x, s16 y, u8 a2, s16 a3); -static void sub_81050C4(void); -static void sub_8105100(void); -static void sub_810514C(void); -static void sub_81051C0(void); -static void sub_8105284_(void); -static void sub_81052EC(void); -static void sub_81053A0(void); +static void CreateReelSymbolSprites(void); +static void CreateCreditPayoutNumberSprites(void); +static void CreateCoinNumberSprite(s16 x, s16 y, u8 a2, s16 a3); +static void CreateReelBackgroundSprite(void); +static void CreateReelTimePikachuSprite(void); +static void DestroyReelTimePikachuSprite(void); +static void CreateReelTimeMachineSprites(void); +static void CreateBrokenReelTimeMachineSprite(void); +static void CreateReelTimeNumberSprites(void); +static void CreateReelTimeShadowSprites(void); static void sub_810545C(void); -static void sub_81054B8(void); -static void sub_8105524(void); -static void sub_8105554(void); -static void CreateReelTimeSprites1(void); +static void DestroyReelTimeMachineSprites(void); +static void DestroyReelTimeShadowSprites(void); +static void DestroyBrokenReelTimeMachineSprite(void); +static void CreateReelTimeBoltSprites(void); static void sub_8105688(s16 a0); -static void sub_81056C0(void); -static void CreateReelTimeSprite2(void); +static void DestroyReelTimeBoltSprites(void); +static void CreateReelTimePikachuAuraSprites(void); static void sub_81057E8(s16 a0); -static void sub_8105804(void); -static void sub_8105854(void); -static void sub_81058A0(void); -static void sub_81058C4(void); -static void sub_81059B8(void); -static void sub_81059E8(void); +static void DestroyReelTimePikachuAuraSprites(void); +static void CreateReelTimeExplosionSprite(void); +static void DestroyReelTimeExplosionSprite(void); +static void CreateReelTimeDuckSprites(void); +static void DestroyReelTimeDuckSprites(void); +static void CreateReelTimeSmokeSprite(void); static bool8 sub_8105ACC(void); -static void sub_8105AEC(void); -static u8 sub_8105B1C(s16 x, s16 y); +static void DestroyReelTimeSmokeSprite(void); +static u8 CreatePikaPowerBoltSprite(s16 x, s16 y); static void sub_8105B88(u8 spriteId); -static u8 sub_8105BF8(u8 templateIdx, void (*callback)(struct Sprite*), s16 x, s16 y, s16 a4); +static u8 CreateDigitalDisplaySprite(u8 templateIdx, void (*callback)(struct Sprite*), s16 x, s16 y, s16 a4); static void sub_81063C0(void); static void sub_8106404(void); static void sub_8106448(void); @@ -294,7 +401,7 @@ static void sub_81065DC(void); static void sub_812F958(void); static void sub_812F968(void); static void LoadSlotMachineWheelOverlay(void); -static u8 sub_8105BB4(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2); +static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2); static void sub_8105C64(struct Sprite *sprite); static void sub_8105F54(struct Sprite *sprite); static void sub_8105F9C(struct Sprite *sprite); @@ -314,52 +421,52 @@ static void sub_810639C(void); static void sub_8106364(void); static void sub_8106370(void); static void nullsub_70(void); -static void sub_8104F18(struct Sprite *sprite); -static void sub_810506C(struct Sprite *sprite); -static void sub_8105170(struct Sprite *sprite); -static void sub_810535C(struct Sprite *sprite); -static void sub_810562C(struct Sprite *sprite); -static void sub_8105784(struct Sprite *sprite); -static void sub_8105894(struct Sprite *sprite); -static void sub_810594C(struct Sprite *sprite); -static void sub_8105A38(struct Sprite *sprite); -static void sub_8105B70(struct Sprite *sprite); +static void SpriteCB_ReelSymbol(struct Sprite *sprite); +static void SpriteCB_CoinNumber(struct Sprite *sprite); +static void SpriteCB_ReelTimePikachu(struct Sprite *sprite); +static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite); +static void SpriteCB_ReelTimeBolt(struct Sprite *sprite); +static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite); +static void SpriteCB_ReelTimeExplosion(struct Sprite *sprite); +static void SpriteCB_ReelTimeDuck(struct Sprite *sprite); +static void SpriteCB_ReelTimeSmoke(struct Sprite *sprite); +static void SpriteCB_PikaPowerBolt(struct Sprite *sprite); // Ewram variables static EWRAM_DATA u16 *sUnknown_0203AAC8 = NULL; static EWRAM_DATA u16 *sSelectedPikaPowerTile = NULL; static EWRAM_DATA u16 *sUnknown_0203AAD0 = NULL; -static EWRAM_DATA u8 *sUnknown_0203AAD4 = NULL; -static EWRAM_DATA u8 *sUnknown_0203AAD8 = NULL; +static EWRAM_DATA u8 *sDigitalDisplayGfxPtr = NULL; +static EWRAM_DATA u8 *sReelTimeGfxPtr = NULL; static EWRAM_DATA u16 *sUnknown_0203AADC = NULL; static EWRAM_DATA u8 *sUnknown_0203AAE0 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAE4 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAE8 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAEC = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAF0 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAF4 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAF8 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAFC = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB00 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB04 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB08 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB0C = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB10 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB14 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB18 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB1C = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB20 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB24 = NULL; -static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB28 = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimePikachu = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimeMachineAntennae = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimeMachine = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_BrokenReelTimeMachine = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Reel = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Time = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Insert = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Stop = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Win = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Lose = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Bonus = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Big = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Reg = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_AButton = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Smoke = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Number = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Pokeball = NULL; +static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_DPad = NULL; static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB2C = NULL; -static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL; -static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL; +static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL; // Mix of digital display spritesheets and reel spritesheets +static EWRAM_DATA struct SlotMachine *sSlotMachine = NULL; // IWRAM bss -static struct SpriteFrameImage *gUnknown_03001188[26]; +static struct SpriteFrameImage *sImageTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES]; // Const rom data. -static const struct UnkStruct1 *const gUnknown_083ED048[]; +static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[]; static const u16 gPalette_83EDE24[]; static const u8 gLuckyRoundProbabilities[][3]; static const u8 gBiasTags[]; @@ -367,14 +474,14 @@ static const u16 gLuckyFlagSettings_Top3[]; static const u16 gLuckyFlagSettings_NotTop3[]; static const s16 gUnknown_083ECE7E[][2]; static const SpriteCallback gUnknown_083ECF0C[]; -static const struct SpriteTemplate *const gUnknown_083EDB5C[]; -static const struct SubspriteTable *const gUnknown_083EDBC4[]; -static const struct SpriteTemplate gSpriteTemplate_83ED6CC; -static const struct SpriteTemplate gSpriteTemplate_83ED564; -static const struct SpriteTemplate gSpriteTemplate_83ED54C; -static const struct SpriteTemplate gSpriteTemplate_83ED534; +static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES]; +static const struct SubspriteTable *const sSubspriteTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES]; +static const struct SpriteTemplate sSpriteTemplate_PikaPowerBolt; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion; static const u8 gUnknown_083ECC58[2]; -static const struct SpriteTemplate gSpriteTemplate_83ED51C; +static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura; static const u16 gProbabilityTable_SkipToReeltimeAction14[]; static const u16 *const gUnknown_083EDE10[]; static const u16 gReelIncrementTable[][2]; @@ -383,20 +490,18 @@ static const u16 gSlotMatchFlags[]; static const u16 gSlotPayouts[]; static const u8 *const gUnknown_083EDCE4; static const u8 *const gUnknown_083EDCDC; -static const u32 gReelTimeGfx[]; +static const u32 sReelTimeGfx[]; static const struct SpriteSheet gSlotMachineSpriteSheets[22]; static const struct SpritePalette gSlotMachineSpritePalettes[]; static const u16 *const gUnknown_083EDE20; static const s16 gInitialReelPositions[][2]; -static const struct BgTemplate gUnknown_085A7424[4]; -static const struct WindowTemplate gUnknown_085A7434[]; static const u8 gLuckyFlagProbabilities_Top3[][6]; static const u8 gLuckyFlagProbabilities_NotTop3[][6]; static const u8 gReeltimeProbabilities_UnluckyGame[][17]; static const u8 gReelTimeProbabilities_LuckyGame[][17]; static const u8 gSym2Match[]; static const u8 gReelTimeTags[]; -static const u8 gReelSymbols[][REEL_NUM_TAGS]; +static const u8 sReelSymbols[NUM_REELS][REEL_NUM_TAGS]; static const u8 *const gUnknown_083EDD08[]; static const u16 *const gUnknown_083EDD1C[]; static const u8 gUnknown_083EDD30[]; @@ -407,25 +512,25 @@ static const u16 *const gUnknown_083EDDAC; static const u16 gReelTimeWindowTilemap[]; static const u16 gUnknown_085A9898[]; static void (*const gUnknown_083ED064[])(void); -static const struct SpriteTemplate gSpriteTemplate_83ED504; -static const struct SpriteTemplate gSpriteTemplate_83ED4EC; -static const struct SpriteTemplate gSpriteTemplate_83ED4D4; -static const struct SpriteTemplate gSpriteTemplate_83ED4BC; -static const struct SpriteTemplate gSpriteTemplate_83ED4A4; -static const struct SpriteTemplate gSpriteTemplate_83ED474; -static const struct SpriteTemplate gSpriteTemplate_83ED48C; -static const struct SpriteTemplate gSpriteTemplate_83ED444; -static const struct SpriteTemplate gSpriteTemplate_83ED42C; -static const struct SpriteTemplate gSpriteTemplate_83ED414; -static const struct SpriteTemplate gSpriteTemplate_83ED45C; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt; +static const struct SpriteTemplate gSpriteTemplate_83ED4EC; // reel time. machine number background? +static const struct SpriteTemplate sSpriteTemplate_ReelTimeShadow; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers; +static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachineAntennae; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachine; +static const struct SpriteTemplate sSpriteTemplate_ReelBackground; +static const struct SpriteTemplate sSpriteTemplate_CoinNumber; +static const struct SpriteTemplate sSpriteTemplate_ReelSymbol; +static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu; static const struct SubspriteTable gSubspriteTables_83ED7D4[]; -static const struct SubspriteTable gSubspriteTables_83ED7B4[]; -static const struct SubspriteTable gSubspriteTables_83ED78C[]; -static const struct SubspriteTable gSubspriteTables_83ED73C[]; -static const struct SubspriteTable gSubspriteTables_83ED75C[]; -static const struct SubspriteTable gSubspriteTables_83ED704[]; +static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[]; +static const struct SubspriteTable sSubspriteTable_BrokenReelTimeMachine[]; +static const struct SubspriteTable sSubspriteTable_ReelTimeMachineAntennae[]; +static const struct SubspriteTable sSubspriteTable_ReelTimeMachine[]; +static const struct SubspriteTable sSubspriteTable_ReelBackground[]; -static const struct BgTemplate gUnknown_085A7424[] = +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, @@ -465,50 +570,64 @@ static const struct BgTemplate gUnknown_085A7424[] = }, }; -static const struct WindowTemplate gUnknown_085A7434[] = +static const struct WindowTemplate sWindowTemplates[] = { - {0, 2, 15, 0x1B, 4, 15, 0x194}, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 27, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x194 + }, DUMMY_WIN_TEMPLATE }; static const struct WindowTemplate gUnknown_085A7444 = { - 0, 1, 3, 20, 13, 13, 1 + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 20, + .height = 13, + .paletteNum = 13, + .baseBlock = 1 }; static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; bool8 (*const SlotActions[])(struct Task *task) = { - SlotAction_UnfadeScreen, // 0 - SlotAction_WaitForUnfade, // 1 - SlotAction_SetSlotMachineVars, // 2 - SlotAction3, // 3 - SlotAction4, // 4 - SlotAction_AwaitPlayerInput, // 5 - SlotAction_PrintYouDontHaveThreeCoins, // 6 - SlotAction_ExitYouDontHaveThreeCoinsMessage, // 7 - SlotAction_GivingInformation, // 8 - SlotAction9, // 9 - SlotAction10, // 10 - SlotAction_SetLuckySpins, // 11 - SlotAction_AwaitReelStop, // 12 - SlotAction_WaitForAllReelsToStop, // 13 - SlotAction_CheckMatches, // 14 - SlotAction_WaitForPayoutToBeAwarded, // 15 - SlotAction_EndOfRoll, // 16 - SlotAction_MatchedPower, // 17 - SlotAction18, // 18 - SlotAction_Loop, // 19 - SlotAction_NoMatches, // 20 - SlotAction_PrintQuitTheGame, // 21 - SlotAction_SeeIfPlayerQuits, // 22 - SlotAction_PrintMessage_9999Coins, // 23 - SlotAction_ExitMessage_9999Coins, // 24 - SlotAction_PrintMessage_NoMoreCoins, // 25 - SlotAction_ExitMessage_NoMoreCoins, // 26 - SlotAction_EndGame, // 27 - SlotAction_FreeDataStructures, // 28 + [SLOT_ACTION_UNFADE] = SlotAction_UnfadeScreen, + [SLOT_ACTION_1] = SlotAction_WaitForUnfade, + [SLOT_ACTION_2] = SlotAction_SetSlotMachineVars, + [SLOT_ACTION_3] = SlotAction3, + [SLOT_ACTION_4] = SlotAction4, + [SLOT_ACTION_BET_INPUT] = SlotAction_HandleBetInput, + [SLOT_ACTION_6] = SlotAction_PrintYouDontHaveThreeCoins, + [SLOT_ACTION_7] = SlotAction_ExitYouDontHaveThreeCoinsMessage, + [SLOT_ACTION_8] = SlotAction_GivingInformation, + [SLOT_ACTION_9] = SlotAction9, + [SLOT_ACTION_10] = SlotAction10, + [SLOT_ACTION_11] = SlotAction_SetLuckySpins, + [SLOT_ACTION_12] = SlotAction_AwaitReelStop, + [SLOT_ACTION_13] = SlotAction_WaitForAllReelsToStop, + [SLOT_ACTION_14] = SlotAction_CheckMatches, + [SLOT_ACTION_15] = SlotAction_WaitForPayoutToBeAwarded, + [SLOT_ACTION_16] = SlotAction_EndOfRoll, + [SLOT_ACTION_17] = SlotAction_MatchedPower, + [SLOT_ACTION_18] = SlotAction18, + [SLOT_ACTION_19] = SlotAction_Loop, + [SLOT_ACTION_20] = SlotAction_NoMatches, + [SLOT_ACTION_ASK_QUIT] = SlotAction_PrintQuitTheGame, + [SLOT_ACTION_HANDLE_QUIT_INPUT] = SlotAction_HandleQuitGameInput, + [SLOT_ACTION_MSG_MAX_COINS] = SlotAction_PrintMessage_9999Coins, + [SLOT_ACTION_WAIT_MSG_MAX_COINS] = SlotAction_WaitMessage_9999Coins, + [SLOT_ACTION_MSG_NO_MORE_COINS] = SlotAction_PrintMessage_NoMoreCoins, + [SLOT_ACTION_WAIT_MSG_NO_MORE_COINS] = SlotAction_WaitMessage_NoMoreCoins, + [SLOT_ACTION_END] = SlotAction_EndGame, + [SLOT_ACTION_FREE] = SlotAction_FreeDataStructures, }; bool8 (*const AwardPayoutActions[])(struct Task *task) = @@ -589,7 +708,7 @@ void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId) = const s16 gUnknown_083ECBAC[] = {5, 10, 15}; -void (*const gUnknown_083ECBB4[])(struct Task *task) = +void (*const sPikaPowerBoltFuncs[])(struct Task *task) = { nullsub_68, sub_810411C, @@ -679,12 +798,12 @@ static void Task_FadeToSlotMachine(u8 taskId) } } -void PlaySlotMachine(u8 slotMachineIndex, MainCallback cb) +void PlaySlotMachine(u8 slotMachineIndex, MainCallback exitCallback) { u8 taskId; sSlotMachine = AllocZeroed(sizeof(*sSlotMachine)); - PlaySlotMachine_Internal(slotMachineIndex, cb); + PlaySlotMachine_Internal(slotMachineIndex, exitCallback); taskId = CreateTask(Task_FadeToSlotMachine, 0); gTasks[taskId].tState = 0; } @@ -734,11 +853,11 @@ static void CB2_SlotMachineSetup(void) gMain.state++; break; case 8: - SlotMachineSetup_8_0(); + SlotMachineSetup_AllocDigDisplayGfx(); gMain.state++; break; case 9: - SlotMachineSetup_9_0(); + SlotMachineSetup_SetDigDisplayImagePtrs(); gMain.state++; break; case 10: @@ -771,11 +890,11 @@ static void SlotMachine_VBlankCallback(void) SetGpuReg(REG_OFFSET_WINOUT, sSlotMachine->winOut); } -static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback cb) +static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback exitCallback) { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->data[0] = slotMachineIndex; - StoreWordInTwoHalfwords(task->data + 1, (intptr_t)cb); + StoreWordInTwoHalfwords(task->data + 1, (intptr_t)exitCallback); } @@ -796,8 +915,8 @@ static void SlotMachineSetup_0_0(void) SetHBlankCallback(NULL); CpuFill32(0, (void *)VRAM, VRAM_SIZE); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_085A7424, ARRAY_COUNT(gUnknown_085A7424)); - InitWindows(gUnknown_085A7434); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); } @@ -849,8 +968,8 @@ static void SlotMachineSetup_0_1(void) sSlotMachine->luckyGame = Random() & 1; sSlotMachine->luckyFlags = 0; sSlotMachine->matchedSymbols = 0; - sSlotMachine->fairRollsLeft = 0; - sSlotMachine->fairRollsUsed = 0; + sSlotMachine->reelTimeSpinsLeft = 0; + sSlotMachine->reelTimeSpinsUsed = 0; sSlotMachine->coins = GetCoins(); sSlotMachine->payout = 0; sSlotMachine->netCoinLoss = 0; @@ -910,10 +1029,10 @@ static void SlotMachineSetup_5_0(void) static void SlotMachineSetup_10_0(void) { - sub_8104EA8(); - sub_8104F8C(); + CreateReelSymbolSprites(); + CreateCreditPayoutNumberSprites(); sub_8103DC8(); - sub_81050C4(); + CreateReelBackgroundSprite(); } // create gameplay tasks @@ -945,6 +1064,7 @@ static bool8 SlotAction_UnfadeScreen(struct Task *task) return FALSE; } +// SLOT_ACTION_1 static bool8 SlotAction_WaitForUnfade(struct Task *task) { if (!gPaletteFade.active) @@ -952,81 +1072,88 @@ static bool8 SlotAction_WaitForUnfade(struct Task *task) return FALSE; } +// SLOT_ACTION_2 static bool8 SlotAction_SetSlotMachineVars(struct Task *task) { sSlotMachine->payout = 0; sSlotMachine->bet = 0; sSlotMachine->currReel = 0; sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); - sSlotMachine->state = 4; + sSlotMachine->state = SLOT_ACTION_4; if (sSlotMachine->coins <= 0) { - sSlotMachine->state = 25; + sSlotMachine->state = SLOT_ACTION_MSG_NO_MORE_COINS; } - else if (sSlotMachine->fairRollsLeft) + else if (sSlotMachine->reelTimeSpinsLeft) { - sSlotMachine->state = 3; - sub_8104CAC(4); + sSlotMachine->state = SLOT_ACTION_3; + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); } return TRUE; } +// SLOT_ACTION_3 static bool8 SlotAction3(struct Task *task) { if (sub_8104E18()) - sSlotMachine->state = 4; + sSlotMachine->state = SLOT_ACTION_4; return FALSE; } +// SLOT_ACTION_4 static bool8 SlotAction4(struct Task *task) { - sub_8104CAC(0); - sSlotMachine->state = 5; + CreateDigitalDisplayScene(DIG_DISPLAY_INSERT_BET); + sSlotMachine->state = SLOT_ACTION_BET_INPUT; if (sSlotMachine->coins >= MAX_COINS) - sSlotMachine->state = 23; + sSlotMachine->state = SLOT_ACTION_MSG_MAX_COINS; return TRUE; } -static bool8 SlotAction_AwaitPlayerInput(struct Task *task) +// SLOT_ACTION_BET_INPUT +static bool8 SlotAction_HandleBetInput(struct Task *task) { s16 i; - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { - OpenInfoBox(0); - sSlotMachine->state = 8; + OpenInfoBox(DIG_DISPLAY_INSERT_BET); + sSlotMachine->state = SLOT_ACTION_8; } - else if (gMain.newKeys & R_BUTTON) // bet the max amount + else if (JOY_NEW(R_BUTTON)) // bet the max amount { - if (sSlotMachine->coins - (3 - sSlotMachine->bet) >= 0) + if (sSlotMachine->coins - (MAX_BET - sSlotMachine->bet) >= 0) { - for (i = sSlotMachine->bet; i < 3; i++) + for (i = sSlotMachine->bet; i < MAX_BET; i++) LoadBetTiles(i); - sSlotMachine->coins -= (3 - sSlotMachine->bet); - sSlotMachine->bet = 3; - sSlotMachine->state = 9; + sSlotMachine->coins -= (MAX_BET - sSlotMachine->bet); + sSlotMachine->bet = MAX_BET; + sSlotMachine->state = SLOT_ACTION_9; PlaySE(SE_REGI); } else // you didn't have enough coins to bet the max { - sSlotMachine->state = 6; + sSlotMachine->state = SLOT_ACTION_6; } } else { - if (gMain.newKeys & DPAD_DOWN && sSlotMachine->coins != 0) + // Increase bet + if (JOY_NEW(DPAD_DOWN) && sSlotMachine->coins != 0) { PlaySE(SE_REGI); LoadBetTiles(sSlotMachine->bet); sSlotMachine->coins--; sSlotMachine->bet++; } - // player maxed out or finished betting - if (sSlotMachine->bet >= 3 || (sSlotMachine->bet != 0 && gMain.newKeys & A_BUTTON)) - sSlotMachine->state = 9; - // player wants to quit - if (gMain.newKeys & B_BUTTON) - sSlotMachine->state = 21; + + // Maxed bet or finished betting + if (sSlotMachine->bet >= MAX_BET || (sSlotMachine->bet != 0 && JOY_NEW(A_BUTTON))) + sSlotMachine->state = SLOT_ACTION_9; + + // Quit prompt + if (JOY_NEW(B_BUTTON)) + sSlotMachine->state = SLOT_ACTION_ASK_QUIT; } return FALSE; } @@ -1036,7 +1163,7 @@ static bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task) DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, 1, gText_YouDontHaveThreeCoins, 0, 1, 0, 0); CopyWindowToVram(0, 3); - sSlotMachine->state = 7; + sSlotMachine->state = SLOT_ACTION_7; return FALSE; } @@ -1045,7 +1172,7 @@ static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task) if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = 5; + sSlotMachine->state = SLOT_ACTION_BET_INPUT; } return FALSE; } @@ -1053,7 +1180,7 @@ static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task) static bool8 SlotAction_GivingInformation(struct Task *task) { if (IsInfoBoxClosed()) - sSlotMachine->state = 5; + sSlotMachine->state = SLOT_ACTION_BET_INPUT; return FALSE; } @@ -1074,15 +1201,15 @@ static bool8 SlotAction9(struct Task *task) if (sSlotMachine->luckyFlags & LUCKY_BIAS_REELTIME) { BeginReeltime(); - sSlotMachine->state = 10; + sSlotMachine->state = SLOT_ACTION_10; } else { - sub_8104CAC(1); - sSlotMachine->state = 11; + CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); + sSlotMachine->state = SLOT_ACTION_11; } sSlotMachine->reelIncrement = 8; - if (sSlotMachine->fairRollsLeft) + if (sSlotMachine->reelTimeSpinsLeft) sSlotMachine->reelIncrement = SlowReelSpeed(); return FALSE; } @@ -1091,9 +1218,9 @@ static bool8 SlotAction10(struct Task *task) { if (IsFinalTask_RunReelTimeActions()) { - sub_8104CAC(1); + CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); sSlotMachine->luckyFlags &= ~LUCKY_BIAS_REELTIME; - sSlotMachine->state = 11; + sSlotMachine->state = SLOT_ACTION_11; } return FALSE; } @@ -1103,7 +1230,7 @@ static bool8 SlotAction_SetLuckySpins(struct Task *task) if (++task->data[0] >= 30) { SetLuckySpins(); - sSlotMachine->state = 12; + sSlotMachine->state = SLOT_ACTION_12; } return FALSE; } @@ -1115,7 +1242,7 @@ static bool8 SlotAction_AwaitReelStop(struct Task *task) PlaySE(SE_JYUNI); sub_8102E1C(sSlotMachine->currReel); sub_8103C14(sSlotMachine->currReel); - sSlotMachine->state = 13; + sSlotMachine->state = SLOT_ACTION_13; } return FALSE; } @@ -1125,10 +1252,10 @@ static bool8 SlotAction_WaitForAllReelsToStop(struct Task *task) if (!IsSlotReelMoving(sSlotMachine->currReel)) { sSlotMachine->currReel++; - sSlotMachine->state = 12; + sSlotMachine->state = SLOT_ACTION_12; if (sSlotMachine->currReel > 2) { - sSlotMachine->state = 14; + sSlotMachine->state = SLOT_ACTION_14; } return TRUE; } @@ -1140,15 +1267,15 @@ static bool8 SlotAction_CheckMatches(struct Task *task) { sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); CheckMatch(); - if (sSlotMachine->fairRollsLeft) + if (sSlotMachine->reelTimeSpinsLeft) { - sSlotMachine->fairRollsLeft--; - sSlotMachine->fairRollsUsed++; + sSlotMachine->reelTimeSpinsLeft--; + sSlotMachine->reelTimeSpinsUsed++; } if (sSlotMachine->matchedSymbols) { - sSlotMachine->state = 15; + sSlotMachine->state = SLOT_ACTION_15; AwardPayout(); sub_8103F70(); if ((sSlotMachine->netCoinLoss -= sSlotMachine->payout) < 0) @@ -1158,17 +1285,17 @@ static bool8 SlotAction_CheckMatches(struct Task *task) if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) { PlayFanfare(MUS_ME_B_BIG); - sub_8104CAC(6); + CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_BIG); } else if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_MIXED)) { PlayFanfare(MUS_ME_B_BIG); - sub_8104CAC(5); + CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_REG); } else { PlayFanfare(MUS_ME_B_SMALL); - sub_8104CAC(2); + CreateDigitalDisplayScene(DIG_DISPLAY_WIN); } // if you matched 777... if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_MIXED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) @@ -1176,8 +1303,8 @@ static bool8 SlotAction_CheckMatches(struct Task *task) sSlotMachine->luckyFlags &= ~(LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) { - sSlotMachine->fairRollsLeft = 0; - sSlotMachine->fairRollsUsed = 0; + sSlotMachine->reelTimeSpinsLeft = 0; + sSlotMachine->reelTimeSpinsUsed = 0; sSlotMachine->luckyGame = FALSE; if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_BLUE)) // this may be an error, but if you get blue 777, the game becomes lucky @@ -1192,8 +1319,8 @@ static bool8 SlotAction_CheckMatches(struct Task *task) } else { - sub_8104CAC(3); - sSlotMachine->state = 20; + CreateDigitalDisplayScene(DIG_DISPLAY_LOSE); + sSlotMachine->state = SLOT_ACTION_20; if ((sSlotMachine->netCoinLoss += sSlotMachine->bet) > MAX_COINS) sSlotMachine->netCoinLoss = MAX_COINS; } @@ -1203,7 +1330,7 @@ static bool8 SlotAction_CheckMatches(struct Task *task) static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task) { if (IsFinalTask_RunAwardPayoutActions()) - sSlotMachine->state = 16; + sSlotMachine->state = SLOT_ACTION_16; return FALSE; } @@ -1211,20 +1338,20 @@ static bool8 SlotAction_EndOfRoll(struct Task *task) { if (sub_8103FA0()) { - sSlotMachine->state = 19; + sSlotMachine->state = SLOT_ACTION_19; if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE))) IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) { sSlotMachine->currReel = 0; - sSlotMachine->state = 9; + sSlotMachine->state = SLOT_ACTION_9; } if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER)) - sSlotMachine->state = 17; - if (sSlotMachine->fairRollsLeft && sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + sSlotMachine->state = SLOT_ACTION_17; + if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) { - sub_8104CAC(4); - sSlotMachine->state = 18; + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); + sSlotMachine->state = SLOT_ACTION_18; } } return FALSE; @@ -1234,14 +1361,14 @@ static bool8 SlotAction_MatchedPower(struct Task *task) { if (!sub_81040C8()) { - sSlotMachine->state = 19; + sSlotMachine->state = SLOT_ACTION_19; if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) { - sSlotMachine->state = 9; - if (sSlotMachine->fairRollsLeft) + sSlotMachine->state = SLOT_ACTION_9; + if (sSlotMachine->reelTimeSpinsLeft) { - sub_8104CAC(4); - sSlotMachine->state = 18; + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); + sSlotMachine->state = SLOT_ACTION_18; } } } @@ -1252,10 +1379,10 @@ static bool8 SlotAction18(struct Task *task) { if (sub_8104E18()) { - sSlotMachine->state = 19; + sSlotMachine->state = SLOT_ACTION_19; if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) { - sSlotMachine->state = 9; + sSlotMachine->state = SLOT_ACTION_9; } } return FALSE; @@ -1266,7 +1393,7 @@ static bool8 SlotAction_Loop(struct Task *task) sub_8103D8C(0); sub_8103D8C(1); sub_8103D8C(2); - sSlotMachine->state = 2; + sSlotMachine->state = SLOT_ACTION_2; return FALSE; } @@ -1275,7 +1402,7 @@ static bool8 SlotAction_NoMatches(struct Task *task) if (++task->data[1] > 64) { task->data[1] = 0; - sSlotMachine->state = 19; + sSlotMachine->state = SLOT_ACTION_19; } return FALSE; } @@ -1286,11 +1413,11 @@ static bool8 SlotAction_PrintQuitTheGame(struct Task *task) AddTextPrinterParameterized(0, 1, gText_QuitTheGame, 0, 1, 0, 0); CopyWindowToVram(0, 3); CreateYesNoMenuParameterized(0x15, 7, 0x214, 0x180, 0xE, 0xF); - sSlotMachine->state = 22; + sSlotMachine->state = SLOT_ACTION_HANDLE_QUIT_INPUT; return FALSE; } -static bool8 SlotAction_SeeIfPlayerQuits(struct Task *task) +static bool8 SlotAction_HandleQuitGameInput(struct Task *task) { s8 input = Menu_ProcessInputNoWrapClearOnChoose(); if (input == 0) // player chooses to quit @@ -1300,12 +1427,12 @@ static bool8 SlotAction_SeeIfPlayerQuits(struct Task *task) sub_8103D8C(1); sub_8103D8C(2); sSlotMachine->coins += sSlotMachine->bet; - sSlotMachine->state = 27; + sSlotMachine->state = SLOT_ACTION_END; } else if (input == 1 || input == -1) // player chooses not to quit { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = 5; + sSlotMachine->state = SLOT_ACTION_BET_INPUT; } return FALSE; } @@ -1315,16 +1442,16 @@ static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task) DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, 1, gText_YouveGot9999Coins, 0, 1, 0, 0); CopyWindowToVram(0, 3); - sSlotMachine->state = 24; + sSlotMachine->state = SLOT_ACTION_WAIT_MSG_MAX_COINS; return FALSE; } -static bool8 SlotAction_ExitMessage_9999Coins(struct Task *task) +static bool8 SlotAction_WaitMessage_9999Coins(struct Task *task) { if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = 5; + sSlotMachine->state = SLOT_ACTION_BET_INPUT; } return FALSE; } @@ -1334,16 +1461,16 @@ static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task) DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, 1, gText_YouveRunOutOfCoins, 0, 1, 0, 0); CopyWindowToVram(0, 3); - sSlotMachine->state = 26; + sSlotMachine->state = SLOT_ACTION_WAIT_MSG_NO_MORE_COINS; return FALSE; } -static bool8 SlotAction_ExitMessage_NoMoreCoins(struct Task *task) +static bool8 SlotAction_WaitMessage_NoMoreCoins(struct Task *task) { if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = 27; + sSlotMachine->state = SLOT_ACTION_END; } return FALSE; } @@ -1353,7 +1480,7 @@ static bool8 SlotAction_EndGame(struct Task *task) SetCoins(sSlotMachine->coins); AlertTVOfNewCoinTotal(GetCoins()); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - sSlotMachine->state++; + sSlotMachine->state++; // SLOT_ACTION_FREE return FALSE; } @@ -1362,33 +1489,33 @@ static bool8 SlotAction_FreeDataStructures(struct Task *task) if (!gPaletteFade.active) { SetMainCallback2(sSlotMachine->prevMainCb); - FREE_AND_SET_NULL(sUnknown_0203AAF4); - FREE_AND_SET_NULL(sUnknown_0203AAF8); - FREE_AND_SET_NULL(sUnknown_0203AAFC); - FREE_AND_SET_NULL(sUnknown_0203AB00); - FREE_AND_SET_NULL(sUnknown_0203AB04); - FREE_AND_SET_NULL(sUnknown_0203AB08); - FREE_AND_SET_NULL(sUnknown_0203AB0C); - FREE_AND_SET_NULL(sUnknown_0203AB10); - FREE_AND_SET_NULL(sUnknown_0203AB14); - FREE_AND_SET_NULL(sUnknown_0203AB18); - FREE_AND_SET_NULL(sUnknown_0203AB1C); - FREE_AND_SET_NULL(sUnknown_0203AB20); - FREE_AND_SET_NULL(sUnknown_0203AB24); - FREE_AND_SET_NULL(sUnknown_0203AB28); - if (sUnknown_0203AAE4 != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAE4); - if (sUnknown_0203AAE8 != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAE8); - if (sUnknown_0203AAEC != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAEC); - if (sUnknown_0203AAF0 != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAF0); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Reel); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Time); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Insert); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Stop); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Win); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Lose); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Bonus); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Big); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Reg); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_AButton); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Smoke); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Number); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Pokeball); + FREE_AND_SET_NULL(sImageTable_DigitalDisplay_DPad); + if (sImageTable_ReelTimePikachu != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); + if (sImageTable_ReelTimeMachineAntennae != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); + if (sImageTable_ReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); + if (sImageTable_BrokenReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); FREE_AND_SET_NULL(sUnknown_0203AAC8); FREE_AND_SET_NULL(sSelectedPikaPowerTile); FREE_AND_SET_NULL(sUnknown_0203AAD0); - FREE_AND_SET_NULL(sUnknown_0203AAD4); - FREE_AND_SET_NULL(sUnknown_0203AAD8); + FREE_AND_SET_NULL(sDigitalDisplayGfxPtr); + FREE_AND_SET_NULL(sReelTimeGfxPtr); FREE_AND_SET_NULL(sUnknown_0203AADC); FREE_AND_SET_NULL(sUnknown_0203AAE0); FREE_AND_SET_NULL(sUnknown_0203AB2C); @@ -1403,7 +1530,7 @@ static void DrawLuckyFlags(void) { u8 attempts; - if (sSlotMachine->fairRollsLeft == 0) + if (sSlotMachine->reelTimeSpinsLeft == 0) { if (!(sSlotMachine->luckyFlags & (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777))) { @@ -1554,7 +1681,7 @@ static u16 SlowReelSpeed(void) if (rval < value) return 4; rval = Random() % 100; - value = gReelIncrementTable[i][1] + gReelTimeBonusIncrementTable[sSlotMachine->fairRollsUsed]; + value = gReelIncrementTable[i][1] + gReelTimeBonusIncrementTable[sSlotMachine->reelTimeSpinsUsed]; if (rval < value) return 2; return 8; @@ -1744,7 +1871,7 @@ static u8 GetTagAtRest(u8 reel, s16 offset) s16 pos = (sSlotMachine->reelPositions[reel] + offset) % REEL_NUM_TAGS; if (pos < 0) pos += REEL_NUM_TAGS; - return gReelSymbols[reel][pos]; + return sReelSymbols[reel][pos]; } // Calculates GetTagAtRest as if the reel were snapped downwards into place. @@ -1860,7 +1987,7 @@ static bool8 SlotReelAction_DecideWhereToStop(struct Task *task) sSlotMachine->winnerRows[task->data[15]] = 0; sSlotMachine->reelExtraTurns[task->data[15]] = 0; - if (sSlotMachine->fairRollsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->luckySpinsLeft == 0 || !DecideReelTurns_BiasTag[task->data[15]]())) + if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->luckySpinsLeft == 0 || !DecideReelTurns_BiasTag[task->data[15]]())) { sSlotMachine->luckySpinsLeft = 0; DecideReelTurns_NoBiasTag[task->data[15]](); @@ -2639,7 +2766,7 @@ static void sub_8103FE8_(u8 taskId) static void GameplayTask_PikaPower(void) { - sSlotMachine->unkTaskPointer3E = CreateTask(sub_81040E8, 8); + sSlotMachine->unkTaskPointer3E = CreateTask(Task_CreatePikaPowerBolt, 8); } static void DisplayPikaPower(u8 pikaPower) @@ -2664,9 +2791,9 @@ static bool8 sub_81040C8(void) return gTasks[sSlotMachine->unkTaskPointer3E].data[15]; } -static void sub_81040E8(u8 taskId) +static void Task_CreatePikaPowerBolt(u8 taskId) { - gUnknown_083ECBB4[gTasks[taskId].data[0]](&gTasks[taskId]); + sPikaPowerBoltFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } static void nullsub_68(struct Task *task) @@ -2675,7 +2802,7 @@ static void nullsub_68(struct Task *task) static void sub_810411C(struct Task *task) { - task->data[2] = sub_8105B1C((task->data[1] << 3) + 20, 20); + task->data[2] = CreatePikaPowerBoltSprite((task->data[1] << 3) + 20, 20); task->data[0]++; } @@ -2726,7 +2853,7 @@ static void ClearTaskDataFields_2orHigher(struct Task *task) { u8 i; - for (i = 2; i < 16; i++) + for (i = 2; i < NUM_TASK_DATA; i++) task->data[i] = 0; } @@ -2783,7 +2910,7 @@ static void RunReeltimeActions(u8 taskId) static void ReeltimeAction0(struct Task *task) { - sSlotMachine->fairRollsLeft = 0; + sSlotMachine->reelTimeSpinsLeft = 0; sSlotMachine->reeltimePixelOffset = 0; sSlotMachine->reeltimePosition = 0; task->data[0]++; @@ -2795,10 +2922,10 @@ static void ReeltimeAction0(struct Task *task) SetGpuReg(REG_OFFSET_BG1HOFS, 0); SetGpuReg(REG_OFFSET_BG1VOFS, 0); sub_8104A40(REG_OFFSET_BG3VOFS, 0); - sub_81051C0(); - sub_8105100(); - sub_81052EC(); - sub_81053A0(); + CreateReelTimeMachineSprites(); + CreateReelTimePikachuSprite(); + CreateReelTimeNumberSprites(); + CreateReelTimeShadowSprites(); sub_810545C(); GetReeltimeDraw(); StopMapMusic(); @@ -2832,8 +2959,8 @@ static void ReeltimeAction2(struct Task *task) if (++task->data[5] >= 60) { task->data[0]++; - CreateReelTimeSprites1(); - CreateReelTimeSprite2(); + CreateReelTimeBoltSprites(); + CreateReelTimePikachuAuraSprites(); } } @@ -2854,7 +2981,7 @@ static void ReeltimeAction3(struct Task *task) r5 = 4 - (task->data[4] >> 8); sub_8105688(sp4[r5]); sub_81057E8(spC[r5]); - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, sp0[r5]); + StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, sp0[r5]); // once speed goes below 256, go to next ReelTimeAction and keep the speed level if (task->data[4] <= 0x100) { @@ -2872,7 +2999,7 @@ static void ReeltimeAction4(struct Task *task) task->data[0]++; task->data[5] = 0; sub_81057E8(2); - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 3); + StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 3); } } @@ -2896,7 +3023,7 @@ static void ReeltimeAction6(struct Task *task) task->data[5] = 0; if (sSlotMachine->reelTimeDraw) { - if (sSlotMachine->fairRollsLeft <= task->data[6]) + if (sSlotMachine->reelTimeSpinsLeft <= task->data[6]) task->data[0]++; } else if (task->data[6] > 3) @@ -2937,20 +3064,20 @@ static void ReeltimeAction8(struct Task *task) if (++task->data[4] >= 60) { StopMapMusic(); - sub_81056C0(); - sub_8105804(); + DestroyReelTimeBoltSprites(); + DestroyReelTimePikachuAuraSprites(); task->data[0]++; if(sSlotMachine->reelTimeDraw == 0) { task->data[4] = 0xa0; - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 5); + StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 5); PlayFanfare(MUS_ME_ZANNEN); } else { task->data[4] = 0xc0; - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 4); - gSprites[sSlotMachine->reelTimeSprite3F].animCmdIndex = 0; + StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 4); + gSprites[sSlotMachine->reelTimePikachuSpriteId].animCmdIndex = 0; if (sSlotMachine->pikaPower) { sub_8104098(); @@ -2983,22 +3110,22 @@ static void ReeltimeAction10(struct Task *task) static void ReeltimeAction11(struct Task *task) { - sSlotMachine->fairRollsUsed = 0; - sSlotMachine->fairRollsLeft = sSlotMachine->reelTimeDraw; + sSlotMachine->reelTimeSpinsUsed = 0; + sSlotMachine->reelTimeSpinsLeft = sSlotMachine->reelTimeDraw; gSpriteCoordOffsetX = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); sSlotMachine->reelIncrement = 8; - sub_810514C(); - sub_81054B8(); - sub_8105524(); + DestroyReelTimePikachuSprite(); + DestroyReelTimeMachineSprites(); + DestroyReelTimeShadowSprites(); PlayNewMapMusic(sSlotMachine->backupMapMusic); - if (sSlotMachine->fairRollsLeft == 0) + if (sSlotMachine->reelTimeSpinsLeft == 0) { DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); } else { - sub_8104CAC(4); + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); task->data[1] = SlowReelSpeed(); task->data[2] = 0; task->data[3] = 0; @@ -3022,12 +3149,12 @@ static void ReeltimeAction13(struct Task *task) static void ReeltimeAction14(struct Task *task) { - sub_81054B8(); - sub_81056C0(); - sub_8105804(); - sub_8105854(); - gSprites[sSlotMachine->unk4E[0]].invisible = TRUE; - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 5); + DestroyReelTimeMachineSprites(); + DestroyReelTimeBoltSprites(); + DestroyReelTimePikachuAuraSprites(); + CreateReelTimeExplosionSprite(); + gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = TRUE; + StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 5); task->data[0]++; task->data[4] = 4; task->data[5] = 0; @@ -3046,11 +3173,11 @@ static void ReeltimeAction15(struct Task *task) task->data[4] >>= 1; if (task->data[4] == 0) { - sub_81058A0(); - sub_81058C4(); - sub_8105284_(); - sub_81059E8(); - gSprites[sSlotMachine->unk4E[0]].invisible = FALSE; + DestroyReelTimeExplosionSprite(); + CreateReelTimeDuckSprites(); + CreateBrokenReelTimeMachineSprite(); + CreateReelTimeSmokeSprite(); + gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = FALSE; task->data[0]++; task->data[5] = 0; } @@ -3063,7 +3190,7 @@ static void ReeltimeAction16(struct Task *task) if (sub_8105ACC()) { task->data[0]++; - sub_8105AEC(); + DestroyReelTimeSmokeSprite(); } } @@ -3072,10 +3199,10 @@ static void ReeltimeAction17(struct Task *task) gSpriteCoordOffsetX = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); PlayNewMapMusic(sSlotMachine->backupMapMusic); - sub_810514C(); - sub_8105554(); - sub_8105524(); - sub_81059B8(); + DestroyReelTimePikachuSprite(); + DestroyBrokenReelTimeMachineSprite(); + DestroyReelTimeShadowSprites(); + DestroyReelTimeDuckSprites(); DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); } @@ -3099,10 +3226,10 @@ static void sub_8104A88(s16 a0) } } -static void OpenInfoBox(u8 seemsUnused) +static void OpenInfoBox(u8 digDisplayId) { u8 taskId = CreateTask(RunInfoBoxActions, 1); - gTasks[taskId].data[1] = seemsUnused; + gTasks[taskId].data[1] = digDisplayId; RunInfoBoxActions(taskId); } @@ -3171,7 +3298,7 @@ static void InfoBox_812DE14(struct Task *task) static void InfoBox_812DE30(struct Task *task) { - sub_8104CAC(task->data[1]); + CreateDigitalDisplayScene(task->data[1]); task->data[0]++; } @@ -3195,12 +3322,12 @@ static void sub_8104C5C(void) sSlotMachine->unkTaskPointer3D = i; task = &gTasks[i]; task->data[1] = -1; - for (i = 4; i < 16; i++) + for (i = 4; i < NUM_TASK_DATA; i++) task->data[i] = MAX_SPRITES; } -// possibly initialize each wheel -static void sub_8104CAC(u8 arg0) +// For the panel on the right side of the slot screen +static void CreateDigitalDisplayScene(u8 id) { u8 i; struct Task *task; @@ -3208,29 +3335,29 @@ static void sub_8104CAC(u8 arg0) sub_8104DA4(); task = &gTasks[sSlotMachine->unkTaskPointer3D]; - task->data[1] = arg0; + task->data[1] = id; - for (i = 0; gUnknown_083ED048[arg0][i].unk00 != 0xFF; i++) + for (i = 0; sDigitalDisplayScenes[id][i].spriteTemplateId != 255; i++) { u8 spriteId; - spriteId = sub_8105BB4( - gUnknown_083ED048[arg0][i].unk00, - gUnknown_083ED048[arg0][i].unk01, - gUnknown_083ED048[arg0][i].unk02 + spriteId = CreateStdDigitalDisplaySprite( + sDigitalDisplayScenes[id][i].spriteTemplateId, + sDigitalDisplayScenes[id][i].unk01, + sDigitalDisplayScenes[id][i].unk02 ); task->data[4 + i] = spriteId; } } -static void sub_8104D30(u8 a0, SpriteCallback a1, s16 a2, s16 a3, s16 a4) +static void sub_8104D30(u8 templateIdx, SpriteCallback a1, s16 a2, s16 a3, s16 a4) { u8 i; struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D]; - for (i = 4; i < 16; i++) + for (i = 4; i < NUM_TASK_DATA; i++) { if (task->data[i] == MAX_SPRITES) { - task->data[i] = sub_8105BF8(a0, a1, a2, a3, a4); + task->data[i] = CreateDigitalDisplaySprite(templateIdx, a1, a2, a3, a4); break; } } @@ -3242,7 +3369,7 @@ static void sub_8104DA4(void) struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D]; if ((u16)task->data[1] != 0xFFFF) gUnknown_083ED064[task->data[1]](); - for (i = 4; i < 16; i++) + for (i = 4; i < NUM_TASK_DATA; i++) { if (task->data[i] != MAX_SPRITES) { @@ -3256,7 +3383,7 @@ static bool8 sub_8104E18(void) { u8 i; struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D]; - for (i = 4; i < 16; i++) + for (i = 4; i < NUM_TASK_DATA; i++) { if (task->data[i] != MAX_SPRITES) { @@ -3276,7 +3403,7 @@ static void nullsub_69(struct Task *task) { } -static void sub_8104EA8(void) +static void CreateReelSymbolSprites(void) { s16 i; s16 j; @@ -3285,7 +3412,7 @@ static void sub_8104EA8(void) { for (j = 0; j < 120; j += 24) { - struct Sprite *sprite = gSprites + CreateSprite(&gSpriteTemplate_83ED414, x, 0, 14); + struct Sprite *sprite = gSprites + CreateSprite(&sSpriteTemplate_ReelSymbol, x, 0, 14); sprite->oam.priority = 3; sprite->data[0] = i; sprite->data[1] = j; @@ -3294,7 +3421,7 @@ static void sub_8104EA8(void) } } -static void sub_8104F18(struct Sprite *sprite) +static void SpriteCB_ReelSymbol(struct Sprite *sprite) { sprite->data[2] = sSlotMachine->reelPixelOffsets[sprite->data[0]] + sprite->data[1]; sprite->data[2] %= 120; @@ -3303,28 +3430,31 @@ static void sub_8104F18(struct Sprite *sprite) SetSpriteSheetFrameTileNum(sprite); } -static void sub_8104F8C(void) +static void CreateCreditPayoutNumberSprites(void) { s16 i; s16 x; + // Credit number sprite for (x = 203, i = 1; i <= MAX_COINS; i *= 10, x -= 7) - sub_8104FF4(x, 23, 0, i); + CreateCoinNumberSprite(x, 23, FALSE, i); + + // Payout number sprite for (x = 235, i = 1; i <= MAX_COINS; i *= 10, x -= 7) - sub_8104FF4(x, 23, 1, i); + CreateCoinNumberSprite(x, 23, TRUE, i); } -static void sub_8104FF4(s16 x, s16 y, u8 a2, s16 a3) +static void CreateCoinNumberSprite(s16 x, s16 y, bool8 isPayout, s16 a3) { - struct Sprite *sprite = gSprites + CreateSprite(&gSpriteTemplate_83ED42C, x, y, 13); + struct Sprite *sprite = gSprites + CreateSprite(&sSpriteTemplate_CoinNumber, x, y, 13); sprite->oam.priority = 2; - sprite->data[0] = a2; + sprite->data[0] = isPayout; sprite->data[1] = a3; sprite->data[2] = a3 * 10; sprite->data[3] = -1; } -static void sub_810506C(struct Sprite *sprite) +static void SpriteCB_CoinNumber(struct Sprite *sprite) { u16 tag = sSlotMachine->coins; if (sprite->data[0]) @@ -3340,47 +3470,47 @@ static void sub_810506C(struct Sprite *sprite) } } -static void sub_81050C4(void) +static void CreateReelBackgroundSprite(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED444, 0x58, 0x48, 15); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelBackground, 0x58, 0x48, 15); gSprites[spriteId].oam.priority = 3; - SetSubspriteTables(gSprites + spriteId, gSubspriteTables_83ED704); + SetSubspriteTables(gSprites + spriteId, sSubspriteTable_ReelBackground); } -static void sub_8105100(void) +static void CreateReelTimePikachuSprite(void) { struct SpriteTemplate spriteTemplate; u8 spriteId; - if (sUnknown_0203AAE4 == NULL) - sUnknown_0203AAE4 = AllocZeroed(sizeof(struct SpriteFrameImage) * 5); + if (sImageTable_ReelTimePikachu == NULL) + sImageTable_ReelTimePikachu = AllocZeroed(sizeof(struct SpriteFrameImage) * 5); - sUnknown_0203AAE4[0].data = sUnknown_0203AAD8 + (0 * 0x800); - sUnknown_0203AAE4[0].size = 0x800; - sUnknown_0203AAE4[1].data = sUnknown_0203AAD8 + (1 * 0x800); - sUnknown_0203AAE4[1].size = 0x800; - sUnknown_0203AAE4[2].data = sUnknown_0203AAD8 + (2 * 0x800); - sUnknown_0203AAE4[2].size = 0x800; - sUnknown_0203AAE4[3].data = sUnknown_0203AAD8 + (3 * 0x800); - sUnknown_0203AAE4[3].size = 0x800; - sUnknown_0203AAE4[4].data = sUnknown_0203AAD8 + (4 * 0x800); - sUnknown_0203AAE4[4].size = 0x800; + sImageTable_ReelTimePikachu[0].data = sReelTimeGfxPtr + (0 * 0x800); + sImageTable_ReelTimePikachu[0].size = 0x800; + sImageTable_ReelTimePikachu[1].data = sReelTimeGfxPtr + (1 * 0x800); + sImageTable_ReelTimePikachu[1].size = 0x800; + sImageTable_ReelTimePikachu[2].data = sReelTimeGfxPtr + (2 * 0x800); + sImageTable_ReelTimePikachu[2].size = 0x800; + sImageTable_ReelTimePikachu[3].data = sReelTimeGfxPtr + (3 * 0x800); + sImageTable_ReelTimePikachu[3].size = 0x800; + sImageTable_ReelTimePikachu[4].data = sReelTimeGfxPtr + (4 * 0x800); + sImageTable_ReelTimePikachu[4].size = 0x800; - spriteTemplate = gSpriteTemplate_83ED45C; - spriteTemplate.images = sUnknown_0203AAE4; + spriteTemplate = sSpriteTemplate_ReelTimePikachu; + spriteTemplate.images = sImageTable_ReelTimePikachu; spriteId = CreateSprite(&spriteTemplate, 280, 80, 1); gSprites[spriteId].oam.priority = 1; gSprites[spriteId].coordOffsetEnabled = TRUE; - sSlotMachine->reelTimeSprite3F = spriteId; + sSlotMachine->reelTimePikachuSpriteId = spriteId; } -static void sub_810514C(void) +static void DestroyReelTimePikachuSprite(void) { - DestroySprite(gSprites + sSlotMachine->reelTimeSprite3F); - if (sUnknown_0203AAE4 != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAE4); + DestroySprite(gSprites + sSlotMachine->reelTimePikachuSpriteId); + if (sImageTable_ReelTimePikachu != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); } -static void sub_8105170(struct Sprite *sprite) +static void SpriteCB_ReelTimePikachu(struct Sprite *sprite) { sprite->pos2.y = sprite->pos2.x = 0; if (sprite->animNum == 4) @@ -3391,78 +3521,78 @@ static void sub_8105170(struct Sprite *sprite) } } -static void sub_81051C0(void) +static void CreateReelTimeMachineSprites(void) { struct SpriteTemplate spriteTemplate; u8 spriteId; struct Sprite *sprite; - if (sUnknown_0203AAE8 == NULL) - sUnknown_0203AAE8 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + if (sImageTable_ReelTimeMachineAntennae == NULL) + sImageTable_ReelTimeMachineAntennae = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAE8[0].data = sUnknown_0203AAD8 + 0x2800; - sUnknown_0203AAE8[0].size = 0x300; - spriteTemplate = gSpriteTemplate_83ED474; - spriteTemplate.images = sUnknown_0203AAE8; + sImageTable_ReelTimeMachineAntennae[0].data = sReelTimeGfxPtr + 0x2800; + sImageTable_ReelTimeMachineAntennae[0].size = 0x300; + spriteTemplate = sSpriteTemplate_ReelTimeMachineAntennae; + spriteTemplate.images = sImageTable_ReelTimeMachineAntennae; spriteId = CreateSprite(&spriteTemplate, 368, 52, 7); sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; - SetSubspriteTables(sprite, gSubspriteTables_83ED73C); - sSlotMachine->unk49[0] = spriteId; + SetSubspriteTables(sprite, sSubspriteTable_ReelTimeMachineAntennae); + sSlotMachine->reelTimeMachineSpriteIds[0] = spriteId; - if (sUnknown_0203AAEC == NULL) - sUnknown_0203AAEC = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + if (sImageTable_ReelTimeMachine == NULL) + sImageTable_ReelTimeMachine = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAEC[0].data = sUnknown_0203AAD8 + 0x2800 + 0x300; - sUnknown_0203AAEC[0].size = 0x500; - spriteTemplate = gSpriteTemplate_83ED48C; - spriteTemplate.images = sUnknown_0203AAEC; + sImageTable_ReelTimeMachine[0].data = sReelTimeGfxPtr + 0x2800 + 0x300; + sImageTable_ReelTimeMachine[0].size = 0x500; + spriteTemplate = sSpriteTemplate_ReelTimeMachine; + spriteTemplate.images = sImageTable_ReelTimeMachine; spriteId = CreateSprite(&spriteTemplate, 368, 84, 7); sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; - SetSubspriteTables(sprite, gSubspriteTables_83ED75C); - sSlotMachine->unk49[1] = spriteId; + SetSubspriteTables(sprite, sSubspriteTable_ReelTimeMachine); + sSlotMachine->reelTimeMachineSpriteIds[1] = spriteId; } -static void sub_8105284_(void) +static void CreateBrokenReelTimeMachineSprite(void) { struct SpriteTemplate spriteTemplate; u8 spriteId; struct Sprite *sprite; - if (sUnknown_0203AAF0 == NULL) - sUnknown_0203AAF0 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + if (sImageTable_BrokenReelTimeMachine == NULL) + sImageTable_BrokenReelTimeMachine = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAF0[0].data = sUnknown_0203AAD8 + 0x3000; - sUnknown_0203AAF0[0].size = 0x600; - spriteTemplate = gSpriteTemplate_83ED4A4; - spriteTemplate.images = sUnknown_0203AAF0; + sImageTable_BrokenReelTimeMachine[0].data = sReelTimeGfxPtr + 0x3000; + sImageTable_BrokenReelTimeMachine[0].size = 0x600; + spriteTemplate = sSpriteTemplate_BrokenReelTimeMachine; + spriteTemplate.images = sImageTable_BrokenReelTimeMachine; spriteId = CreateSprite(&spriteTemplate, 0xa8 - gSpriteCoordOffsetX, 0x50, 7); sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; - SetSubspriteTables(sprite, gSubspriteTables_83ED78C); - sSlotMachine->unk42 = spriteId; + SetSubspriteTables(sprite, sSubspriteTable_BrokenReelTimeMachine); + sSlotMachine->reelTimeBrokenMachineSpriteId = spriteId; } -static void sub_81052EC(void) +static void CreateReelTimeNumberSprites(void) { u8 i; s16 r5; - for (i = 0, r5 = 0; i < 3; i++, r5 += 20) + for (i = 0, r5 = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeNumberSpriteIds); i++, r5 += 20) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4BC, 0x170, 0, 10); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeNumbers, 0x170, 0, 10); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; sprite->data[7] = r5; - sSlotMachine->unk4B[i] = spriteId; + sSlotMachine->reelTimeNumberSpriteIds[i] = spriteId; } } -static void sub_810535C(struct Sprite *sprite) +static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite) { s16 r0 = (u16)(sSlotMachine->reeltimePixelOffset + sprite->data[7]); r0 %= 40; @@ -3470,21 +3600,21 @@ static void sub_810535C(struct Sprite *sprite) StartSpriteAnimIfDifferent(sprite, GetNearbyReelTimeTag(r0 / 20)); } -static void sub_81053A0(void) +static void CreateReelTimeShadowSprites(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x170, 0x64, 9); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 0x170, 0x64, 9); struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; - SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); - sSlotMachine->unk4E[0] = spriteId; + SetSubspriteTables(sprite, sSubspriteTable_ReelTimeShadow); + sSlotMachine->reelTimeShadowSpriteIds[0] = spriteId; - spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x120, 0x68, 4); + spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 0x120, 0x68, 4); sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; - SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); - sSlotMachine->unk4E[1] = spriteId; + SetSubspriteTables(sprite, sSubspriteTable_ReelTimeShadow); + sSlotMachine->reelTimeShadowSpriteIds[1] = spriteId; } static void sub_810545C(void) @@ -3497,61 +3627,60 @@ static void sub_810545C(void) sSlotMachine->unk40 = spriteId; } -static void sub_81054B8(void) +static void DestroyReelTimeMachineSprites(void) { u8 i; DestroySprite(&gSprites[sSlotMachine->unk40]); - for (i = 0; i < 2; i++) - DestroySprite(&gSprites[sSlotMachine->unk49[i]]); + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeMachineSpriteIds); i++) + DestroySprite(&gSprites[sSlotMachine->reelTimeMachineSpriteIds[i]]); - if (sUnknown_0203AAE8 != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAE8); - if (sUnknown_0203AAEC != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAEC); + if (sImageTable_ReelTimeMachineAntennae != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); + if (sImageTable_ReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); - for (i = 0; i < 3; i++) - DestroySprite(&gSprites[sSlotMachine->unk4B[i]]); + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeNumberSpriteIds); i++) + DestroySprite(&gSprites[sSlotMachine->reelTimeNumberSpriteIds[i]]); } -static void sub_8105524(void) +static void DestroyReelTimeShadowSprites(void) { u8 i; - for (i = 0; i < 2; i++) - DestroySprite(&gSprites[sSlotMachine->unk4E[i]]); + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeShadowSpriteIds); i++) + DestroySprite(&gSprites[sSlotMachine->reelTimeShadowSpriteIds[i]]); } -static void sub_8105554(void) +static void DestroyBrokenReelTimeMachineSprite(void) { - DestroySprite(&gSprites[sSlotMachine->unk42]); - if (sUnknown_0203AAF0 != NULL) - FREE_AND_SET_NULL(sUnknown_0203AAF0); + DestroySprite(&gSprites[sSlotMachine->reelTimeBrokenMachineSpriteId]); + if (sImageTable_BrokenReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); } -// TODO: check if this is true -static void CreateReelTimeSprites1(void) +static void CreateReelTimeBoltSprites(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0x98, 0x20, 5); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 0x98, 0x20, 5); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->hFlip = TRUE; - sSlotMachine->reelTimeSprites1[0] = spriteId; + sSlotMachine->reelTimeBoltSpriteIds[0] = spriteId; sprite->data[0] = 8; sprite->data[1] = -1; sprite->data[2] = -1; sprite->data[7] = 0x20; - spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0xb8, 0x20, 5); + spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 0xb8, 0x20, 5); sprite = &gSprites[spriteId]; sprite->oam.priority = 1; - sSlotMachine->reelTimeSprites1[1] = spriteId; + sSlotMachine->reelTimeBoltSpriteIds[1] = spriteId; sprite->data[1] = 1; sprite->data[2] = -1; sprite->data[7] = 0x20; } -static void sub_810562C(struct Sprite *sprite) +static void SpriteCB_ReelTimeBolt(struct Sprite *sprite) { if (sprite->data[0] != 0) { @@ -3575,35 +3704,37 @@ static void sub_810562C(struct Sprite *sprite) static void sub_8105688(s16 a0) { - gSprites[sSlotMachine->reelTimeSprites1[0]].data[7] = a0; - gSprites[sSlotMachine->reelTimeSprites1[1]].data[7] = a0; + gSprites[sSlotMachine->reelTimeBoltSpriteIds[0]].data[7] = a0; + gSprites[sSlotMachine->reelTimeBoltSpriteIds[1]].data[7] = a0; } -static void sub_81056C0(void) +static void DestroyReelTimeBoltSprites(void) { u8 i; - for (i = 0; i < 2; i++) - DestroySprite(&gSprites[sSlotMachine->reelTimeSprites1[i]]); + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeBoltSpriteIds); i++) + DestroySprite(&gSprites[sSlotMachine->reelTimeBoltSpriteIds[i]]); } -static void CreateReelTimeSprite2(void) +static void CreateReelTimePikachuAuraSprites(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x48, 0x50, 3); + // Left half of electricity orb + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 0x48, 0x50, 3); gSprites[spriteId].oam.priority = 1; gSprites[spriteId].data[0] = 1; gSprites[spriteId].data[5] = 0; gSprites[spriteId].data[6] = 16; gSprites[spriteId].data[7] = 8; - sSlotMachine->reelTimeSprites2[0] = spriteId; + sSlotMachine->reelTimePikachuAuraSpriteIds[0] = spriteId; - spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x68, 0x50, 3); + // Right half + spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 0x68, 0x50, 3); gSprites[spriteId].oam.priority = 1; gSprites[spriteId].hFlip = TRUE; - sSlotMachine->reelTimeSprites2[1] = spriteId; + sSlotMachine->reelTimePikachuAuraSpriteIds[1] = spriteId; } -static void sub_8105784(struct Sprite *sprite) +static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite) { u8 sp[] = {16, 0}; if (sprite->data[0] && --sprite->data[6] <= 0) @@ -3617,50 +3748,51 @@ static void sub_8105784(struct Sprite *sprite) static void sub_81057E8(s16 a0) { - gSprites[sSlotMachine->reelTimeSprites2[0]].data[7] = a0; + gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[0]].data[7] = a0; } -static void sub_8105804(void) +static void DestroyReelTimePikachuAuraSprites(void) { u8 i; MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, 0, 0, 0); - for (i = 0; i < 2; i++) - DestroySprite(&gSprites[sSlotMachine->reelTimeSprites2[i]]); + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimePikachuAuraSpriteIds); i++) + DestroySprite(&gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[i]]); } -static void sub_8105854(void) +static void CreateReelTimeExplosionSprite(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED534, 0xa8, 0x50, 6); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeExplosion, 0xa8, 0x50, 6); gSprites[spriteId].oam.priority = 1; - sSlotMachine->unk41 = spriteId; + sSlotMachine->reelTimeExplosionSpriteId = spriteId; } -static void sub_8105894(struct Sprite *sprite) +static void SpriteCB_ReelTimeExplosion(struct Sprite *sprite) { sprite->pos2.y = gSpriteCoordOffsetY; } -static void sub_81058A0(void) +static void DestroyReelTimeExplosionSprite(void) { - DestroySprite(&gSprites[sSlotMachine->unk41]); + DestroySprite(&gSprites[sSlotMachine->reelTimeExplosionSpriteId]); } -static void sub_81058C4(void) +// The "confusion" ducks that circle Pikachu if the Reel Time machine explodes +static void CreateReelTimeDuckSprites(void) { u8 i; u16 sp[] = {0x0, 0x40, 0x80, 0xC0}; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeDuckSpriteIds); i++) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED54C, 0x50 - gSpriteCoordOffsetX, 0x44, 0); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeDuck, 0x50 - gSpriteCoordOffsetX, 0x44, 0); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; sprite->data[0] = sp[i]; - sSlotMachine->unk54[i] = spriteId; + sSlotMachine->reelTimeDuckSpriteIds[i] = spriteId; } } -static void sub_810594C(struct Sprite *sprite) +static void SpriteCB_ReelTimeDuck(struct Sprite *sprite) { sprite->data[0] -= 2; sprite->data[0] &= 0xff; @@ -3678,26 +3810,26 @@ static void sub_810594C(struct Sprite *sprite) } } -static void sub_81059B8(void) +static void DestroyReelTimeDuckSprites(void) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeDuckSpriteIds); i++) { - DestroySprite(&gSprites[sSlotMachine->unk54[i]]); + DestroySprite(&gSprites[sSlotMachine->reelTimeDuckSpriteIds[i]]); } } -static void sub_81059E8(void) +static void CreateReelTimeSmokeSprite(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED564, 0xa8, 0x3c, 8); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeSmoke, 0xa8, 0x3c, 8); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; InitSpriteAffineAnim(sprite); - sSlotMachine->unk43 = spriteId; + sSlotMachine->reelTimeSmokeSpriteId = spriteId; } -static void sub_8105A38(struct Sprite *sprite) +static void SpriteCB_ReelTimeSmoke(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -3726,19 +3858,19 @@ static void sub_8105A38(struct Sprite *sprite) static u8 sub_8105ACC(void) { - return gSprites[sSlotMachine->unk43].data[7]; + return gSprites[sSlotMachine->reelTimeSmokeSpriteId].data[7]; } -static void sub_8105AEC(void) +static void DestroyReelTimeSmokeSprite(void) { - struct Sprite *sprite = &gSprites[sSlotMachine->unk43]; + struct Sprite *sprite = &gSprites[sSlotMachine->reelTimeSmokeSpriteId]; FreeOamMatrix(sprite->oam.matrixNum); DestroySprite(sprite); } -static u8 sub_8105B1C(s16 x, s16 y) +static u8 CreatePikaPowerBoltSprite(s16 x, s16 y) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED6CC, x, y, 12); + u8 spriteId = CreateSprite(&sSpriteTemplate_PikaPowerBolt, x, y, 12); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 2; sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; @@ -3746,7 +3878,7 @@ static u8 sub_8105B1C(s16 x, s16 y) return spriteId; } -static void sub_8105B70(struct Sprite *sprite) +static void SpriteCB_PikaPowerBolt(struct Sprite *sprite) { if (sprite->affineAnimEnded) sprite->data[7] = 1; @@ -3759,27 +3891,27 @@ static void sub_8105B88(u8 spriteId) DestroySprite(sprite); } -static u8 sub_8105BB4(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2) +static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2) { - return sub_8105BF8(templateIdx, gUnknown_083ECF0C[cbAndCoordsIdx], gUnknown_083ECE7E[cbAndCoordsIdx][0], gUnknown_083ECE7E[cbAndCoordsIdx][1], a2); + return CreateDigitalDisplaySprite(templateIdx, gUnknown_083ECF0C[cbAndCoordsIdx], gUnknown_083ECE7E[cbAndCoordsIdx][0], gUnknown_083ECE7E[cbAndCoordsIdx][1], a2); } -static u8 sub_8105BF8(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4) +static u8 CreateDigitalDisplaySprite(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4) { struct SpriteTemplate spriteTemplate; u8 spriteId; struct Sprite *sprite; - spriteTemplate = *gUnknown_083EDB5C[templateIdx]; - spriteTemplate.images = gUnknown_03001188[templateIdx]; + spriteTemplate = *sSpriteTemplates_DigitalDisplay[templateIdx]; + spriteTemplate.images = sImageTables_DigitalDisplay[templateIdx]; spriteId = CreateSprite(&spriteTemplate, x, y, 16); sprite = &gSprites[spriteId]; sprite->oam.priority = 3; sprite->callback = callback; sprite->data[6] = a4; sprite->data[7] = 1; - if (gUnknown_083EDBC4[templateIdx]) - SetSubspriteTables(sprite, gUnknown_083EDBC4[templateIdx]); + if (sSubspriteTables_DigitalDisplay[templateIdx]) + SetSubspriteTables(sprite, sSubspriteTables_DigitalDisplay[templateIdx]); return spriteId; } @@ -3885,7 +4017,7 @@ static void sub_8105E08(struct Sprite *sprite) switch (sprite->data[0]) { case 0: - StartSpriteAnim(sprite, sSlotMachine->fairRollsLeft - 1); + StartSpriteAnim(sprite, sSlotMachine->reelTimeSpinsLeft - 1); sprite->data[0]++; // fallthrough case 1: @@ -4115,7 +4247,7 @@ static void sub_8106230(struct Sprite *sprite) case 2: if (sSlotMachine->bet == 0) break; - sub_8104D30(5, SpriteCallbackDummy, 0xd0, 0x74, 0); + sub_8104D30(DIG_SPRITE_A_BUTTON, SpriteCallbackDummy, 0xd0, 0x74, 0); sSlotMachine->win0h = 0xc0e0; sSlotMachine->win0v = 0x6880; sSlotMachine->winIn = 0x2f; @@ -4167,10 +4299,10 @@ static void sub_81063C0(void) u8 i; sub_8106404(); - sUnknown_0203AAD4 = Alloc(0x3200); - LZDecompressWram(gSlotMachineReelTime_Gfx, sUnknown_0203AAD4); - sUnknown_0203AAD8 = Alloc(0x3600); - LZDecompressWram(gReelTimeGfx, sUnknown_0203AAD8); + sDigitalDisplayGfxPtr = Alloc(0x3200); + LZDecompressWram(gSlotMachineDigitalDisplay_Gfx, sDigitalDisplayGfxPtr); + sReelTimeGfxPtr = Alloc(0x3600); + LZDecompressWram(sReelTimeGfx, sReelTimeGfxPtr); sUnknown_0203AB30 = AllocZeroed(sizeof(struct SpriteSheet) * ARRAY_COUNT(gSlotMachineSpriteSheets)); for (i = 0; i < ARRAY_COUNT(gSlotMachineSpriteSheets); i++) { @@ -4178,10 +4310,10 @@ static void sub_81063C0(void) sUnknown_0203AB30[i].size = gSlotMachineSpriteSheets[i].size; sUnknown_0203AB30[i].tag = gSlotMachineSpriteSheets[i].tag; } - sUnknown_0203AB30[17].data = sUnknown_0203AAD4 + 0xA00; - sUnknown_0203AB30[18].data = sUnknown_0203AAD4 + 0x1400; - sUnknown_0203AB30[19].data = sUnknown_0203AAD4 + 0x1600; - sUnknown_0203AB30[20].data = sUnknown_0203AAD4 + 0x1900; + sUnknown_0203AB30[17].data = sDigitalDisplayGfxPtr + 0xA00; // STOP + sUnknown_0203AB30[18].data = sDigitalDisplayGfxPtr + 0x1400; // BONUS + sUnknown_0203AB30[19].data = sDigitalDisplayGfxPtr + 0x1600; // BIG + sUnknown_0203AB30[20].data = sDigitalDisplayGfxPtr + 0x1900; // REG LoadSpriteSheets(sUnknown_0203AB30); LoadSpritePalettes(gSlotMachineSpritePalettes); } @@ -4266,110 +4398,110 @@ static void sub_81065DC(void) HideBg(3); } -static void SlotMachineSetup_9_0(void) +static void SlotMachineSetup_SetDigDisplayImagePtrs(void) { - gUnknown_03001188[0] = sUnknown_0203AAF4; - gUnknown_03001188[1] = sUnknown_0203AAF8; - gUnknown_03001188[2] = sUnknown_0203AAFC; - gUnknown_03001188[3] = sUnknown_0203AB04; - gUnknown_03001188[4] = sUnknown_0203AB08; - gUnknown_03001188[5] = sUnknown_0203AB18; - gUnknown_03001188[6] = sUnknown_0203AB1C; - gUnknown_03001188[7] = sUnknown_0203AB20; - gUnknown_03001188[8] = sUnknown_0203AB24; - gUnknown_03001188[9] = sUnknown_0203AB28; - gUnknown_03001188[10] = sUnknown_0203AB00; - gUnknown_03001188[11] = sUnknown_0203AB00; - gUnknown_03001188[12] = sUnknown_0203AB00; - gUnknown_03001188[13] = sUnknown_0203AB00; - gUnknown_03001188[14] = sUnknown_0203AB0C; - gUnknown_03001188[15] = sUnknown_0203AB0C; - gUnknown_03001188[16] = sUnknown_0203AB0C; - gUnknown_03001188[17] = sUnknown_0203AB0C; - gUnknown_03001188[18] = sUnknown_0203AB0C; - gUnknown_03001188[19] = sUnknown_0203AB10; - gUnknown_03001188[20] = sUnknown_0203AB10; - gUnknown_03001188[21] = sUnknown_0203AB10; - gUnknown_03001188[22] = sUnknown_0203AB14; - gUnknown_03001188[23] = sUnknown_0203AB14; - gUnknown_03001188[24] = sUnknown_0203AB14; - gUnknown_03001188[25] = NULL; + sImageTables_DigitalDisplay[DIG_SPRITE_REEL] = sImageTable_DigitalDisplay_Reel; + sImageTables_DigitalDisplay[DIG_SPRITE_TIME] = sImageTable_DigitalDisplay_Time; + sImageTables_DigitalDisplay[DIG_SPRITE_INSERT] = sImageTable_DigitalDisplay_Insert; + sImageTables_DigitalDisplay[DIG_SPRITE_WIN] = sImageTable_DigitalDisplay_Win; + sImageTables_DigitalDisplay[DIG_SPRITE_LOSE] = sImageTable_DigitalDisplay_Lose; + sImageTables_DigitalDisplay[DIG_SPRITE_A_BUTTON] = sImageTable_DigitalDisplay_AButton; + sImageTables_DigitalDisplay[DIG_SPRITE_SMOKE] = sImageTable_DigitalDisplay_Smoke; + sImageTables_DigitalDisplay[DIG_SPRITE_NUMBER] = sImageTable_DigitalDisplay_Number; + sImageTables_DigitalDisplay[DIG_SPRITE_POKE_BALL] = sImageTable_DigitalDisplay_Pokeball; + sImageTables_DigitalDisplay[DIG_SPRITE_D_PAD] = sImageTable_DigitalDisplay_DPad; + sImageTables_DigitalDisplay[DIG_SPRITE_STOP_S] = sImageTable_DigitalDisplay_Stop; + sImageTables_DigitalDisplay[DIG_SPRITE_STOP_T] = sImageTable_DigitalDisplay_Stop; + sImageTables_DigitalDisplay[DIG_SPRITE_STOP_O] = sImageTable_DigitalDisplay_Stop; + sImageTables_DigitalDisplay[DIG_SPRITE_STOP_P] = sImageTable_DigitalDisplay_Stop; + sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_B] = sImageTable_DigitalDisplay_Bonus; + sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_O] = sImageTable_DigitalDisplay_Bonus; + sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_N] = sImageTable_DigitalDisplay_Bonus; + sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_U] = sImageTable_DigitalDisplay_Bonus; + sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_S] = sImageTable_DigitalDisplay_Bonus; + sImageTables_DigitalDisplay[DIG_SPRITE_BIG_B] = sImageTable_DigitalDisplay_Big; + sImageTables_DigitalDisplay[DIG_SPRITE_BIG_I] = sImageTable_DigitalDisplay_Big; + sImageTables_DigitalDisplay[DIG_SPRITE_BIG_G] = sImageTable_DigitalDisplay_Big; + sImageTables_DigitalDisplay[DIG_SPRITE_REG_R] = sImageTable_DigitalDisplay_Reg; + sImageTables_DigitalDisplay[DIG_SPRITE_REG_E] = sImageTable_DigitalDisplay_Reg; + sImageTables_DigitalDisplay[DIG_SPRITE_REG_G] = sImageTable_DigitalDisplay_Reg; + sImageTables_DigitalDisplay[DIG_SPRITE_EMPTY] = NULL; } -static void SlotMachineSetup_8_0(void) +static void SlotMachineSetup_AllocDigDisplayGfx(void) { - sUnknown_0203AAF4 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAF4[0].data = sUnknown_0203AAD4; - sUnknown_0203AAF4[0].size = 0x600; + sImageTable_DigitalDisplay_Reel = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Reel[0].data = sDigitalDisplayGfxPtr; + sImageTable_DigitalDisplay_Reel[0].size = 0x600; - sUnknown_0203AAF8 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAF8[0].data = sUnknown_0203AAD4 + 0x600; - sUnknown_0203AAF8[0].size = 0x200; + sImageTable_DigitalDisplay_Time = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Time[0].data = sDigitalDisplayGfxPtr + 0x600; + sImageTable_DigitalDisplay_Time[0].size = 0x200; - sUnknown_0203AAFC = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAFC[0].data = sUnknown_0203AAD4 + 0x800; - sUnknown_0203AAFC[0].size = 0x200; + sImageTable_DigitalDisplay_Insert = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Insert[0].data = sDigitalDisplayGfxPtr + 0x800; + sImageTable_DigitalDisplay_Insert[0].size = 0x200; - sUnknown_0203AB00 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB00[0].data = sUnknown_0203AAD4 + 0xA00; - sUnknown_0203AB00[0].size = 0x200; + sImageTable_DigitalDisplay_Stop = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Stop[0].data = sDigitalDisplayGfxPtr + 0xA00; + sImageTable_DigitalDisplay_Stop[0].size = 0x200; - sUnknown_0203AB04 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB04[0].data = sUnknown_0203AAD4 + 0xC00; - sUnknown_0203AB04[0].size = 0x300; + sImageTable_DigitalDisplay_Win = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Win[0].data = sDigitalDisplayGfxPtr + 0xC00; + sImageTable_DigitalDisplay_Win[0].size = 0x300; - sUnknown_0203AB08 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB08[0].data = sUnknown_0203AAD4 + 0x1000; - sUnknown_0203AB08[0].size = 0x400; + sImageTable_DigitalDisplay_Lose = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Lose[0].data = sDigitalDisplayGfxPtr + 0x1000; + sImageTable_DigitalDisplay_Lose[0].size = 0x400; - sUnknown_0203AB0C = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB0C[0].data = sUnknown_0203AAD4 + 0x1400; - sUnknown_0203AB0C[0].size = 0x200; + sImageTable_DigitalDisplay_Bonus = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Bonus[0].data = sDigitalDisplayGfxPtr + 0x1400; + sImageTable_DigitalDisplay_Bonus[0].size = 0x200; - sUnknown_0203AB10 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB10[0].data = sUnknown_0203AAD4 + 0x1600; - sUnknown_0203AB10[0].size = 0x300; + sImageTable_DigitalDisplay_Big = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Big[0].data = sDigitalDisplayGfxPtr + 0x1600; + sImageTable_DigitalDisplay_Big[0].size = 0x300; - sUnknown_0203AB14 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB14[0].data = sUnknown_0203AAD4 + 0x1900; - sUnknown_0203AB14[0].size = 0x300; + sImageTable_DigitalDisplay_Reg = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Reg[0].data = sDigitalDisplayGfxPtr + 0x1900; + sImageTable_DigitalDisplay_Reg[0].size = 0x300; - sUnknown_0203AB18 = AllocZeroed(sizeof(struct SpriteFrameImage) * 2); - sUnknown_0203AB18[0].data = sUnknown_0203AAD4 + 0x1C00; - sUnknown_0203AB18[0].size = 0x200; - sUnknown_0203AB18[1].data = sUnknown_0203AAD4 + 0x1E00; - sUnknown_0203AB18[1].size = 0x200; + sImageTable_DigitalDisplay_AButton = AllocZeroed(sizeof(struct SpriteFrameImage) * 2); + sImageTable_DigitalDisplay_AButton[0].data = sDigitalDisplayGfxPtr + 0x1C00; + sImageTable_DigitalDisplay_AButton[0].size = 0x200; + sImageTable_DigitalDisplay_AButton[1].data = sDigitalDisplayGfxPtr + 0x1E00; + sImageTable_DigitalDisplay_AButton[1].size = 0x200; - sUnknown_0203AB1C = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB1C[0].data = sUnknown_0203AAD4 + 0x2000; - sUnknown_0203AB1C[0].size = 640; + sImageTable_DigitalDisplay_Smoke = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Smoke[0].data = sDigitalDisplayGfxPtr + 0x2000; + sImageTable_DigitalDisplay_Smoke[0].size = 640; - sUnknown_0203AB20 = AllocZeroed(sizeof(struct SpriteFrameImage) * 5); - sUnknown_0203AB20[0].data = sUnknown_0203AAD4 + 0x2280; - sUnknown_0203AB20[0].size = 0x80; - sUnknown_0203AB20[1].data = sUnknown_0203AAD4 + 0x2300; - sUnknown_0203AB20[1].size = 0x80; - sUnknown_0203AB20[2].data = sUnknown_0203AAD4 + 0x2380; - sUnknown_0203AB20[2].size = 0x80; - sUnknown_0203AB20[3].data = sUnknown_0203AAD4 + 0x2400; - sUnknown_0203AB20[3].size = 0x80; - sUnknown_0203AB20[4].data = sUnknown_0203AAD4 + 0x2480; - sUnknown_0203AB20[4].size = 0x80; + sImageTable_DigitalDisplay_Number = AllocZeroed(sizeof(struct SpriteFrameImage) * 5); + sImageTable_DigitalDisplay_Number[0].data = sDigitalDisplayGfxPtr + 0x2280; + sImageTable_DigitalDisplay_Number[0].size = 0x80; + sImageTable_DigitalDisplay_Number[1].data = sDigitalDisplayGfxPtr + 0x2300; + sImageTable_DigitalDisplay_Number[1].size = 0x80; + sImageTable_DigitalDisplay_Number[2].data = sDigitalDisplayGfxPtr + 0x2380; + sImageTable_DigitalDisplay_Number[2].size = 0x80; + sImageTable_DigitalDisplay_Number[3].data = sDigitalDisplayGfxPtr + 0x2400; + sImageTable_DigitalDisplay_Number[3].size = 0x80; + sImageTable_DigitalDisplay_Number[4].data = sDigitalDisplayGfxPtr + 0x2480; + sImageTable_DigitalDisplay_Number[4].size = 0x80; - sUnknown_0203AB24 = AllocZeroed(sizeof(struct SpriteFrameImage) * 2); - sUnknown_0203AB24[0].data = sUnknown_0203AAD4 + 0x2600; - sUnknown_0203AB24[0].size = 0x480; - sUnknown_0203AB24[1].data = sUnknown_0203AAD4 + 10880; - sUnknown_0203AB24[1].size = 0x480; + sImageTable_DigitalDisplay_Pokeball = AllocZeroed(sizeof(struct SpriteFrameImage) * 2); + sImageTable_DigitalDisplay_Pokeball[0].data = sDigitalDisplayGfxPtr + 0x2600; + sImageTable_DigitalDisplay_Pokeball[0].size = 0x480; + sImageTable_DigitalDisplay_Pokeball[1].data = sDigitalDisplayGfxPtr + 10880; + sImageTable_DigitalDisplay_Pokeball[1].size = 0x480; - sUnknown_0203AB28 = AllocZeroed(sizeof(struct SpriteFrameImage) * 2); - sUnknown_0203AB28[0].data = sUnknown_0203AAD4 + 0x2F00; - sUnknown_0203AB28[0].size = 0x180; - sUnknown_0203AB28[1].data = sUnknown_0203AAD4 + 0x3080; - sUnknown_0203AB28[1].size = 0x180; + sImageTable_DigitalDisplay_DPad = AllocZeroed(sizeof(struct SpriteFrameImage) * 2); + sImageTable_DigitalDisplay_DPad[0].data = sDigitalDisplayGfxPtr + 0x2F00; + sImageTable_DigitalDisplay_DPad[0].size = 0x180; + sImageTable_DigitalDisplay_DPad[1].data = sDigitalDisplayGfxPtr + 0x3080; + sImageTable_DigitalDisplay_DPad[1].size = 0x180; } -static const u8 gReelSymbols[][REEL_NUM_TAGS] = +static const u8 sReelSymbols[NUM_REELS][REEL_NUM_TAGS] = { { SLOT_MACHINE_TAG_7_RED, @@ -4446,7 +4578,7 @@ static const u8 gReelTimeTags[] = { 1, 0, 5, 4, 3, 2 }; -static const s16 gInitialReelPositions[][2] = { +static const s16 gInitialReelPositions[NUM_REELS][2] = { {0, 6}, {0, 10}, {0, 2} @@ -4624,79 +4756,79 @@ static const SpriteCallback gUnknown_083ECF0C[] = { sub_8106230 }; -static const struct UnkStruct1 Unknown_83ECF98[] = { - {25, 34, 0}, - {2, 0, 0}, - {9, 16, 0}, - {255, 0, 0} +static const struct DigitalDisplaySprite sDigitalDisplay_InsertBet[] = { + {DIG_SPRITE_EMPTY, 34, 0}, // Replaced with DIG_SPRITE_A_BUTTON after first bet + {DIG_SPRITE_INSERT, 0, 0}, + {DIG_SPRITE_D_PAD, 16, 0}, + DIG_SPRITE_DUMMY }; -static const struct UnkStruct1 Unknown_83ECFA8[] = { - {10, 1, 0}, - {11, 2, 0}, - {12, 3, 0}, - {13, 4, 0}, - {5, 5, 0}, - {8, 6, 0}, - {255, 0, 0} +static const struct DigitalDisplaySprite sDigitalDisplay_StopReel[] = { + {DIG_SPRITE_STOP_S, 1, 0}, + {DIG_SPRITE_STOP_T, 2, 0}, + {DIG_SPRITE_STOP_O, 3, 0}, + {DIG_SPRITE_STOP_P, 4, 0}, + {DIG_SPRITE_A_BUTTON, 5, 0}, + {DIG_SPRITE_POKE_BALL, 6, 0}, + DIG_SPRITE_DUMMY }; -static const struct UnkStruct1 Unknown_83ECFC4[] = { - {3, 7, 0}, - {8, 17, 0}, - {255, 0, 0} +static const struct DigitalDisplaySprite sDigitalDisplay_Win[] = { + {DIG_SPRITE_WIN, 7, 0}, + {DIG_SPRITE_POKE_BALL, 17, 0}, + DIG_SPRITE_DUMMY }; -static const struct UnkStruct1 Unknown_83ECFD0[] = { - {4, 8, 0}, - {6, 9, 0}, - {6, 10, 1}, - {6, 11, 2}, - {6, 12, 3}, - {255, 0, 0} +static const struct DigitalDisplaySprite sDigitalDisplay_Lose[] = { + {DIG_SPRITE_LOSE, 8, 0}, + {DIG_SPRITE_SMOKE, 9, 0}, + {DIG_SPRITE_SMOKE, 10, 1}, + {DIG_SPRITE_SMOKE, 11, 2}, + {DIG_SPRITE_SMOKE, 12, 3}, + DIG_SPRITE_DUMMY }; -static const struct UnkStruct1 Unknown_83ECFE8[] = { - {0, 13, 0}, - {1, 14, 0}, - {7, 15, 0}, - {255, 0, 0} +static const struct DigitalDisplaySprite sDigitalDisplay_ReelTime[] = { + {DIG_SPRITE_REEL, 13, 0}, + {DIG_SPRITE_TIME, 14, 0}, + {DIG_SPRITE_NUMBER, 15, 0}, // Number of reel time spins left + DIG_SPRITE_DUMMY }; -static const struct UnkStruct1 Unknown_83ECFF8[] = { - {19, 26, 0}, - {20, 27, 1}, - {21, 28, 2}, - {14, 29, 3}, - {15, 30, 4}, - {16, 31, 5}, - {17, 32, 6}, - {18, 33, 7}, - {8, 17, 0}, - {255, 0, 0} +static const struct DigitalDisplaySprite sDigitalDisplay_BonusBig[] = { + {DIG_SPRITE_BIG_B, 26, 0}, + {DIG_SPRITE_BIG_I, 27, 1}, + {DIG_SPRITE_BIG_G, 28, 2}, + {DIG_SPRITE_BONUS_B, 29, 3}, + {DIG_SPRITE_BONUS_O, 30, 4}, + {DIG_SPRITE_BONUS_N, 31, 5}, + {DIG_SPRITE_BONUS_U, 32, 6}, + {DIG_SPRITE_BONUS_S, 33, 7}, + {DIG_SPRITE_POKE_BALL, 17, 0}, + DIG_SPRITE_DUMMY }; -static const struct UnkStruct1 Unknown_83ED020[] = { - {22, 18, 0}, - {23, 19, 1}, - {24, 20, 2}, - {14, 21, 3}, - {15, 22, 4}, - {16, 23, 5}, - {17, 24, 6}, - {18, 25, 7}, - {8, 17, 0}, - {255, 0, 0} +static const struct DigitalDisplaySprite sDigitalDisplay_BonusRegular[] = { + {DIG_SPRITE_REG_R, 18, 0}, + {DIG_SPRITE_REG_E, 19, 1}, + {DIG_SPRITE_REG_G, 20, 2}, + {DIG_SPRITE_BONUS_B, 21, 3}, + {DIG_SPRITE_BONUS_O, 22, 4}, + {DIG_SPRITE_BONUS_N, 23, 5}, + {DIG_SPRITE_BONUS_U, 24, 6}, + {DIG_SPRITE_BONUS_S, 25, 7}, + {DIG_SPRITE_POKE_BALL, 17, 0}, + DIG_SPRITE_DUMMY }; -static const struct UnkStruct1 *const gUnknown_083ED048[] = { - Unknown_83ECF98, - Unknown_83ECFA8, - Unknown_83ECFC4, - Unknown_83ECFD0, - Unknown_83ECFE8, - Unknown_83ED020, - Unknown_83ECFF8 +static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[] = { + [DIG_DISPLAY_INSERT_BET] = sDigitalDisplay_InsertBet, + [DIG_DISPLAY_STOP_REEL] = sDigitalDisplay_StopReel, + [DIG_DISPLAY_WIN] = sDigitalDisplay_Win, + [DIG_DISPLAY_LOSE] = sDigitalDisplay_Lose, + [DIG_DISPLAY_REEL_TIME] = sDigitalDisplay_ReelTime, + [DIG_DISPLAY_BONUS_REG] = sDigitalDisplay_BonusRegular, + [DIG_DISPLAY_BONUS_BIG] = sDigitalDisplay_BonusBig }; static void (*const gUnknown_083ED064[])(void) = { @@ -4709,7 +4841,7 @@ static void (*const gUnknown_083ED064[])(void) = { sub_8106370 }; -static const struct OamData gUnknown_085A7A3C = +static const struct OamData sOam_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4726,7 +4858,7 @@ static const struct OamData gUnknown_085A7A3C = .affineParam = 0, }; -static const struct OamData gUnknown_085A7A44 = +static const struct OamData sOam_8x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4743,7 +4875,7 @@ static const struct OamData gUnknown_085A7A44 = .affineParam = 0, }; -static const struct OamData gUnknown_085A7A4C = +static const struct OamData sOam_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4760,7 +4892,7 @@ static const struct OamData gUnknown_085A7A4C = .affineParam = 0, }; -static const struct OamData gUnknown_085A7A54 = +static const struct OamData sOam_16x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4777,7 +4909,7 @@ static const struct OamData gUnknown_085A7A54 = .affineParam = 0, }; -static const struct OamData gUnknown_085A7A5C = +static const struct OamData sOam_32x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4794,7 +4926,7 @@ static const struct OamData gUnknown_085A7A5C = .affineParam = 0, }; -static const struct OamData gUnknown_085A7A64 = +static const struct OamData sOam_32x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4811,7 +4943,7 @@ static const struct OamData gUnknown_085A7A64 = .affineParam = 0, }; -static const struct OamData gUnknown_085A7A6C = +static const struct OamData sOam_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4828,7 +4960,7 @@ static const struct OamData gUnknown_085A7A6C = .affineParam = 0, }; -static const struct OamData gUnknown_085A7A74 = +static const struct OamData sOam_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4845,7 +4977,7 @@ static const struct OamData gUnknown_085A7A74 = .affineParam = 0, }; -static const struct SpriteFrameImage gUnknown_085A7A7C[] = +static const struct SpriteFrameImage sImageTable_ReelTimeNumbers[] = { { gSlotMachineReelTimeNumber0, 0x80 }, { gSlotMachineReelTimeNumber1, 0x80 }, @@ -4855,26 +4987,26 @@ static const struct SpriteFrameImage gUnknown_085A7A7C[] = { gSlotMachineReelTimeNumber5, 0x80 }, }; -static const struct SpriteFrameImage gUnknown_085A7AAC[] = { gSlotMachineReelTimeShadow, 0x200 }; +static const struct SpriteFrameImage sImageTable_ReelTimeShadow[] = { gSlotMachineReelTimeShadow, 0x200 }; static const struct SpriteFrameImage gUnknown_085A7AB4[] = { gUnknown_08DD1A18, 0x40 }; -static const struct SpriteFrameImage gUnknown_085A7ABC[] = +static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] = { - { gSlotMachineReelTimeLargeBolt0, 0x100 }, - { gSlotMachineReelTimeLargeBolt1, 0x100 }, + { gSlotMachineReelTimeBolt0, 0x100 }, + { gSlotMachineReelTimeBolt1, 0x100 }, }; -static const struct SpriteFrameImage gUnknown_085A7ACC[] = { gSlotMachineReelTimePikaAura, 0x400 }; +static const struct SpriteFrameImage sImageTable_ReelTimePikachuAura[] = { gSlotMachineReelTimePikaAura, 0x400 }; -static const struct SpriteFrameImage gUnknown_085A7AD4[] = +static const struct SpriteFrameImage sImageTable_ReelTimeExplosion[] = { { gSlotMachineReelTimeExplosion0, 0x200 }, { gSlotMachineReelTimeExplosion1, 0x200 }, }; -static const struct SpriteFrameImage gUnknown_085A7AE4[] = { gSlotMachineReelTimeDuck, 0x20}; -static const struct SpriteFrameImage gUnknown_085A7AEC[] = { gSlotMachineReelTimeSmoke, 0x80}; -static const struct SpriteFrameImage gUnknown_085A7AF4[] = { gSlotMachineReelTimeBolt, 0x20}; +static const struct SpriteFrameImage sImageTable_ReelTimeDuck[] = { gSlotMachineReelTimeDuck, 0x20}; +static const struct SpriteFrameImage sImageTable_ReelTimeSmoke[] = { gSlotMachineReelTimeSmoke, 0x80}; +static const struct SpriteFrameImage sImageTable_PikaPowerBolt[] = { gSlotMachinePikaPowerBolt, 0x20}; static const union AnimCmd gUnknown_085A7AFC[] = { @@ -4888,118 +5020,118 @@ static const union AnimCmd gUnknown_085A7B04[] = ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7B0C[] = +static const union AnimCmd sAnim_ReelTimePikachu_Still[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B14[] = +static const union AnimCmd sAnim_ReelTimePikachu_ChargingSlow[] = { ANIMCMD_FRAME(1, 16), ANIMCMD_FRAME(0, 16), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7B20[] = +static const union AnimCmd sAnim_ReelTimePikachu_ChargingMedium[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7B2C[] = +static const union AnimCmd sAnim_ReelTimePikachu_ChargingFast[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(0, 4), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7B38[] = +static const union AnimCmd sAnim_ReelTimePikachu_Cheering[] = { ANIMCMD_FRAME(2, 32), ANIMCMD_FRAME(3, 32), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7B44[] = +static const union AnimCmd sAnim_ReelTimePikachu_FellOver[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B4C[] = +static const union AnimCmd sAnim_ReelTimeNumber_0[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B54[] = +static const union AnimCmd sAnim_ReelTimeNumber_1[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B5C[] = +static const union AnimCmd sAnim_ReelTimeNumber_2[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B64[] = +static const union AnimCmd sAnim_ReelTimeNumber_3[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B6C[] = +static const union AnimCmd sAnim_ReelTimeNumber_4[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B74[] = +static const union AnimCmd sAnim_ReelTimeNumber_5[] = { ANIMCMD_FRAME(5, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B7C[] = +static const union AnimCmd sAnim_ReelTimeBolt[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7B88[] = +static const union AnimCmd sAnim_ReelTimeExplosion[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7B94[] = +static const union AnimCmd sAnim_DigitalDisplay_AButton_Flashing[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7BA0[] = +static const union AnimCmd sAnim_DigitalDisplay_AButton_Static[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7BA8[] = +static const union AnimCmd sAnim_DigitalDisplay_DPad_Flashing[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7BB4[] = +static const union AnimCmd sAnim_DigitalDisplay_Pokeball_Rocking[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -5008,37 +5140,37 @@ static const union AnimCmd gUnknown_085A7BB4[] = ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_085A7BC8[] = +static const union AnimCmd sAnim_DigitalDisplay_Pokeball_Static[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7BD0[] = +static const union AnimCmd sAnim_DigitalDisplay_Number_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7BD8[] = +static const union AnimCmd sAnim_DigitalDisplay_Number_2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7BE0[] = +static const union AnimCmd sAnim_DigitalDisplay_Number_3[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7BE8[] = +static const union AnimCmd sAnim_DigitalDisplay_Number_4[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7BF0[] = +static const union AnimCmd sAnim_DigitalDisplay_Number_5[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END @@ -5054,64 +5186,64 @@ static const union AnimCmd *const gUnknown_085A7BFC[] = gUnknown_085A7B04 }; -static const union AnimCmd *const gUnknown_085A7C00[] = +static const union AnimCmd *const sAnims_ReelTimePikachu[] = { - gUnknown_085A7B0C, - gUnknown_085A7B14, - gUnknown_085A7B20, - gUnknown_085A7B2C, - gUnknown_085A7B38, - gUnknown_085A7B44 + sAnim_ReelTimePikachu_Still, + sAnim_ReelTimePikachu_ChargingSlow, + sAnim_ReelTimePikachu_ChargingMedium, + sAnim_ReelTimePikachu_ChargingFast, + sAnim_ReelTimePikachu_Cheering, + sAnim_ReelTimePikachu_FellOver }; -static const union AnimCmd *const gUnknown_085A7C18[] = +static const union AnimCmd *const sAnims_ReelTimeNumbers[] = { - gUnknown_085A7B4C, - gUnknown_085A7B54, - gUnknown_085A7B5C, - gUnknown_085A7B64, - gUnknown_085A7B6C, - gUnknown_085A7B74 + sAnim_ReelTimeNumber_0, + sAnim_ReelTimeNumber_1, + sAnim_ReelTimeNumber_2, + sAnim_ReelTimeNumber_3, + sAnim_ReelTimeNumber_4, + sAnim_ReelTimeNumber_5 }; -static const union AnimCmd *const gUnknown_085A7C30[] = +static const union AnimCmd *const sAnims_ReelTimeBolt[] = { - gUnknown_085A7B7C + sAnim_ReelTimeBolt }; -static const union AnimCmd *const gUnknown_085A7C34[] = +static const union AnimCmd *const sAnims_ReelTimeExplosion[] = { - gUnknown_085A7B88 + sAnim_ReelTimeExplosion }; -static const union AnimCmd *const gUnknown_085A7C38[] = +static const union AnimCmd *const sAnims_DigitalDisplay_AButton[] = { - gUnknown_085A7B94, - gUnknown_085A7BA0 + sAnim_DigitalDisplay_AButton_Flashing, + sAnim_DigitalDisplay_AButton_Static }; -static const union AnimCmd *const gUnknown_085A7C40[] = +static const union AnimCmd *const sAnims_DigitalDisplay_DPad[] = { - gUnknown_085A7BA8 + sAnim_DigitalDisplay_DPad_Flashing }; -static const union AnimCmd *const gUnknown_085A7C44[] = +static const union AnimCmd *const sAnims_DigitalDisplay_Pokeball[] = { - gUnknown_085A7BB4, - gUnknown_085A7BC8 + sAnim_DigitalDisplay_Pokeball_Rocking, + sAnim_DigitalDisplay_Pokeball_Static }; -static const union AnimCmd *const gUnknown_085A7C4C[] = +static const union AnimCmd *const sAnims_DigitalDisplay_Number[] = { - gUnknown_085A7BD0, - gUnknown_085A7BD8, - gUnknown_085A7BE0, - gUnknown_085A7BE8, - gUnknown_085A7BF0 + sAnim_DigitalDisplay_Number_1, + sAnim_DigitalDisplay_Number_2, + sAnim_DigitalDisplay_Number_3, + sAnim_DigitalDisplay_Number_4, + sAnim_DigitalDisplay_Number_5 }; -static const union AffineAnimCmd gUnknown_085A7C60[] = +static const union AffineAnimCmd sAffineAnim_ReelTimeSmoke[] = { AFFINEANIMCMD_FRAME(16, 16, 0, 0), AFFINEANIMCMD_LOOP(0), @@ -5120,12 +5252,13 @@ static const union AffineAnimCmd gUnknown_085A7C60[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gUnknown_085A7C88[] = +static const union AffineAnimCmd *const sAffineAnims_ReelTimeSmoke[] = { - gUnknown_085A7C60 + sAffineAnim_ReelTimeSmoke }; -static const union AffineAnimCmd gUnknown_085A7C8C[] = +// Spin as it appears +static const union AffineAnimCmd sAffineAnim_PikaPowerBolt[] = { AFFINEANIMCMD_FRAME(0, 0, 8, 32), AFFINEANIMCMD_FRAME(0, 0, 6, 32), @@ -5139,106 +5272,106 @@ static const union AffineAnimCmd gUnknown_085A7C8C[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gUnknown_085A7CDC[] = +static const union AffineAnimCmd *const sAffineAnims_PikaPowerBolt[] = { - gUnknown_085A7C8C + sAffineAnim_PikaPowerBolt }; -static const struct SpriteTemplate gSpriteTemplate_83ED414 = +static const struct SpriteTemplate sSpriteTemplate_ReelSymbol = { .tileTag = 0, .paletteTag = 0, - .oam = &gUnknown_085A7A5C, + .oam = &sOam_32x32, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8104F18 + .callback = SpriteCB_ReelSymbol }; -static const struct SpriteTemplate gSpriteTemplate_83ED42C = +static const struct SpriteTemplate sSpriteTemplate_CoinNumber = { .tileTag = 7, .paletteTag = 4, - .oam = &gUnknown_085A7A44, + .oam = &sOam_8x16, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810506C + .callback = SpriteCB_CoinNumber }; -static const struct SpriteTemplate gSpriteTemplate_83ED444 = +static const struct SpriteTemplate sSpriteTemplate_ReelBackground = { .tileTag = 17, .paletteTag = 0, - .oam = &gUnknown_085A7A74, + .oam = &sOam_64x64, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_83ED45C = +static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu = { .tileTag = 0xFFFF, .paletteTag = 1, - .oam = &gUnknown_085A7A74, - .anims = gUnknown_085A7C00, + .oam = &sOam_64x64, + .anims = sAnims_ReelTimePikachu, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105170 + .callback = SpriteCB_ReelTimePikachu }; -static const struct SpriteTemplate gSpriteTemplate_83ED474 = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachineAntennae = { .tileTag = 0xFFFF, .paletteTag = 2, - .oam = &gUnknown_085A7A44, + .oam = &sOam_8x16, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_83ED48C = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachine = { .tileTag = 0xFFFF, .paletteTag = 3, - .oam = &gUnknown_085A7A44, + .oam = &sOam_8x16, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_83ED4A4 = +static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine = { .tileTag = 0xFFFF, .paletteTag = 3, - .oam = &gUnknown_085A7A44, + .oam = &sOam_8x16, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_83ED4BC = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers = { .tileTag = 0xFFFF, .paletteTag = 4, - .oam = &gUnknown_085A7A4C, - .anims = gUnknown_085A7C18, - .images = gUnknown_085A7A7C, + .oam = &sOam_16x16, + .anims = sAnims_ReelTimeNumbers, + .images = sImageTable_ReelTimeNumbers, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810535C + .callback = SpriteCB_ReelTimeNumbers }; -static const struct SpriteTemplate gSpriteTemplate_83ED4D4 = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeShadow = { .tileTag = 0xFFFF, .paletteTag = 4, - .oam = &gUnknown_085A7A4C, + .oam = &sOam_16x16, .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AAC, + .images = sImageTable_ReelTimeShadow, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; @@ -5247,234 +5380,234 @@ static const struct SpriteTemplate gSpriteTemplate_83ED4EC = { .tileTag = 0xFFFF, .paletteTag = 4, - .oam = &gUnknown_085A7A4C, + .oam = &sOam_16x16, .anims = gUnknown_085A7BF8, .images = gUnknown_085A7AB4, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_83ED504 = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt = { .tileTag = 0xFFFF, .paletteTag = 4, - .oam = &gUnknown_085A7A54, - .anims = gUnknown_085A7C30, - .images = gUnknown_085A7ABC, + .oam = &sOam_16x32, + .anims = sAnims_ReelTimeBolt, + .images = sImageTable_ReelTimeBolt, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810562C + .callback = SpriteCB_ReelTimeBolt }; -static const struct SpriteTemplate gSpriteTemplate_83ED51C = +static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura = { .tileTag = 0xFFFF, .paletteTag = 7, - .oam = &gUnknown_085A7A64, + .oam = &sOam_32x64, .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7ACC, + .images = sImageTable_ReelTimePikachuAura, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105784 + .callback = SpriteCB_ReelTimePikachuAura }; -static const struct SpriteTemplate gSpriteTemplate_83ED534 = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion = { .tileTag = 0xFFFF, .paletteTag = 5, - .oam = &gUnknown_085A7A5C, - .anims = gUnknown_085A7C34, - .images = gUnknown_085A7AD4, + .oam = &sOam_32x32, + .anims = sAnims_ReelTimeExplosion, + .images = sImageTable_ReelTimeExplosion, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105894 + .callback = SpriteCB_ReelTimeExplosion }; -static const struct SpriteTemplate gSpriteTemplate_83ED54C = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck = { .tileTag = 0xFFFF, .paletteTag = 4, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BFC, - .images = gUnknown_085A7AE4, + .images = sImageTable_ReelTimeDuck, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810594C + .callback = SpriteCB_ReelTimeDuck }; -static const struct SpriteTemplate gSpriteTemplate_83ED564 = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke = { .tileTag = 0xFFFF, .paletteTag = 4, - .oam = &gUnknown_085A7A4C, + .oam = &sOam_16x16, .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AEC, - .affineAnims = gUnknown_085A7C88, - .callback = sub_8105A38 + .images = sImageTable_ReelTimeSmoke, + .affineAnims = sAffineAnims_ReelTimeSmoke, + .callback = SpriteCB_ReelTimeSmoke }; -static const struct SpriteTemplate gUnknown_085A7E48 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reel = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7E60 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Time = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7E78 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Insert = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7E90 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Stop = { .tileTag = 18, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7EA8 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Win = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A6C, + .oam = &sOam_64x32, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7EC0 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Lose = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A6C, + .oam = &sOam_64x32, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7ED8 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Bonus = { .tileTag = 19, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7EF0 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Big = { .tileTag = 20, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7F08 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reg = { .tileTag = 21, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7F20 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_AButton = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A5C, - .anims = gUnknown_085A7C38, + .oam = &sOam_32x32, + .anims = sAnims_DigitalDisplay_AButton, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7F38 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Smoke = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7F50 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Number = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A4C, - .anims = gUnknown_085A7C4C, + .oam = &sOam_16x16, + .anims = sAnims_DigitalDisplay_Number, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7F68 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Pokeball = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, - .anims = gUnknown_085A7C44, + .oam = &sOam_8x8, + .anims = sAnims_DigitalDisplay_Pokeball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085A7F80 = +static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_DPad = { .tileTag = 0xFFFF, .paletteTag = 6, - .oam = &gUnknown_085A7A3C, - .anims = gUnknown_085A7C40, + .oam = &sOam_8x8, + .anims = sAnims_DigitalDisplay_DPad, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_83ED6CC = +static const struct SpriteTemplate sSpriteTemplate_PikaPowerBolt = { .tileTag = 0xFFFF, .paletteTag = 4, - .oam = &gUnknown_085A7A3C, + .oam = &sOam_8x8, .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AF4, - .affineAnims = gUnknown_085A7CDC, - .callback = sub_8105B70 + .images = sImageTable_PikaPowerBolt, + .affineAnims = sAffineAnims_PikaPowerBolt, + .callback = SpriteCB_PikaPowerBolt }; -static const struct Subsprite gUnknown_085A7FB0[] = +static const struct Subsprite sSubsprites_ReelBackground[] = { { .x = -64, @@ -5510,12 +5643,12 @@ static const struct Subsprite gUnknown_085A7FB0[] = } }; -static const struct SubspriteTable gSubspriteTables_83ED704[] = +static const struct SubspriteTable sSubspriteTable_ReelBackground[] = { - ARRAY_COUNT(gUnknown_085A7FB0), gUnknown_085A7FB0 + ARRAY_COUNT(sSubsprites_ReelBackground), sSubsprites_ReelBackground }; -static const struct Subsprite gUnknown_085A7FC8[] = +static const struct Subsprite sSubsprites_ReelTimeMachineAntennae[] = { { .x = -32, @@ -5567,12 +5700,12 @@ static const struct Subsprite gUnknown_085A7FC8[] = } }; -static const struct SubspriteTable gSubspriteTables_83ED73C[] = +static const struct SubspriteTable sSubspriteTable_ReelTimeMachineAntennae[] = { - ARRAY_COUNT(gUnknown_085A7FC8), gUnknown_085A7FC8 + ARRAY_COUNT(sSubsprites_ReelTimeMachineAntennae), sSubsprites_ReelTimeMachineAntennae }; -static const struct Subsprite gUnknown_085A7FE8[] = +static const struct Subsprite sSubsprites_ReelTimeMachine[] = { { .x = -32, @@ -5600,12 +5733,12 @@ static const struct Subsprite gUnknown_085A7FE8[] = } }; -static const struct SubspriteTable gSubspriteTables_83ED75C[] = +static const struct SubspriteTable sSubspriteTable_ReelTimeMachine[] = { - ARRAY_COUNT(gUnknown_085A7FE8), gUnknown_085A7FE8 + ARRAY_COUNT(sSubsprites_ReelTimeMachine), sSubsprites_ReelTimeMachine }; -static const struct Subsprite gUnknown_085A7FFC[] = +static const struct Subsprite sSubsprites_BrokenReelTimeMachine[] = { { .x = -32, @@ -5649,12 +5782,12 @@ static const struct Subsprite gUnknown_085A7FFC[] = } }; -static const struct SubspriteTable gSubspriteTables_83ED78C[] = +static const struct SubspriteTable sSubspriteTable_BrokenReelTimeMachine[] = { - ARRAY_COUNT(gUnknown_085A7FFC), gUnknown_085A7FFC + ARRAY_COUNT(sSubsprites_BrokenReelTimeMachine), sSubsprites_BrokenReelTimeMachine }; -static const struct Subsprite gUnknown_085A8018[] = +static const struct Subsprite sSubsprites_ReelTimeShadow[] = { { .x = -32, @@ -5690,9 +5823,9 @@ static const struct Subsprite gUnknown_085A8018[] = } }; -static const struct SubspriteTable gSubspriteTables_83ED7B4[] = +static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[] = { - ARRAY_COUNT(gUnknown_085A8018), gUnknown_085A8018 + ARRAY_COUNT(sSubsprites_ReelTimeShadow), sSubsprites_ReelTimeShadow }; static const struct Subsprite gUnknown_085A8030[] = @@ -5728,7 +5861,7 @@ static const struct SubspriteTable gSubspriteTables_83ED7D4[] = ARRAY_COUNT(gUnknown_085A8030), gUnknown_085A8030 }; -static const struct Subsprite gUnknown_085A8044[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Reel[] = { { .x = -32, @@ -5772,12 +5905,12 @@ static const struct Subsprite gUnknown_085A8044[] = } }; -static const struct SubspriteTable gUnknown_085A8058[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Reel[] = { - ARRAY_COUNT(gUnknown_085A8044), gUnknown_085A8044 + ARRAY_COUNT(sSubsprites_DigitalDisplay_Reel), sSubsprites_DigitalDisplay_Reel }; -static const struct Subsprite gUnknown_085A8060[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Time[] = { { .x = -32, @@ -5813,12 +5946,12 @@ static const struct Subsprite gUnknown_085A8060[] = } }; -static const struct SubspriteTable gUnknown_085A8070[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Time[] = { - ARRAY_COUNT(gUnknown_085A8060), gUnknown_085A8060 + ARRAY_COUNT(sSubsprites_DigitalDisplay_Time), sSubsprites_DigitalDisplay_Time }; -static const struct Subsprite gUnknown_085A8078[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Insert[] = { { .x = -32, @@ -5854,12 +5987,12 @@ static const struct Subsprite gUnknown_085A8078[] = } }; -static const struct SubspriteTable gUnknown_085A8088[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Insert[] = { - ARRAY_COUNT(gUnknown_085A8078), gUnknown_085A8078 + ARRAY_COUNT(sSubsprites_DigitalDisplay_Insert), sSubsprites_DigitalDisplay_Insert }; -static const struct Subsprite gUnknown_085A8090[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Unused1[] = { { .x = -32, @@ -5895,12 +6028,12 @@ static const struct Subsprite gUnknown_085A8090[] = } }; -static const struct SubspriteTable gUnknown_085A80A0[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused1[] = { - ARRAY_COUNT(gUnknown_085A8090), gUnknown_085A8090 + ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused1), sSubsprites_DigitalDisplay_Unused1 }; -static const struct Subsprite gUnknown_085A80A8[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Win[] = { { .x = -32, @@ -5952,12 +6085,12 @@ static const struct Subsprite gUnknown_085A80A8[] = } }; -static const struct SubspriteTable gUnknown_085A80C0[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Win[] = { - ARRAY_COUNT(gUnknown_085A80A8), gUnknown_085A80A8 + ARRAY_COUNT(sSubsprites_DigitalDisplay_Win), sSubsprites_DigitalDisplay_Win }; -static const struct Subsprite gUnknown_085A80C8[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Smoke[] = { { .x = -16, @@ -5969,7 +6102,7 @@ static const struct Subsprite gUnknown_085A80C8[] = } }; -static const struct Subsprite gUnknown_085A80CC[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] = { { .x = -8, @@ -5981,17 +6114,17 @@ static const struct Subsprite gUnknown_085A80CC[] = } }; -static const struct SubspriteTable gUnknown_085A80D0[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Smoke[] = { - ARRAY_COUNT(gUnknown_085A80C8), gUnknown_085A80C8 + ARRAY_COUNT(sSubsprites_DigitalDisplay_Smoke), sSubsprites_DigitalDisplay_Smoke }; -static const struct SubspriteTable gUnknown_085A80D8[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused2[] = { - ARRAY_COUNT(gUnknown_085A80CC), gUnknown_085A80CC + ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused2), sSubsprites_DigitalDisplay_Unused2 }; -static const struct Subsprite gUnknown_085A80E0[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Pokeball[] = { { .x = -24, @@ -6091,12 +6224,12 @@ static const struct Subsprite gUnknown_085A80E0[] = } }; -static const struct SubspriteTable gUnknown_085A8110[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Pokeball[] = { - ARRAY_COUNT(gUnknown_085A80E0), gUnknown_085A80E0 + ARRAY_COUNT(sSubsprites_DigitalDisplay_Pokeball), sSubsprites_DigitalDisplay_Pokeball }; -static const struct Subsprite gUnknown_085A8118[] = +static const struct Subsprite sSubsprites_DigitalDisplay_DPad[] = { { .x = -16, @@ -6124,12 +6257,12 @@ static const struct Subsprite gUnknown_085A8118[] = } }; -static const struct SubspriteTable gUnknown_085A8124[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_DPad[] = { - ARRAY_COUNT(gUnknown_085A8118), gUnknown_085A8118 + ARRAY_COUNT(sSubsprites_DigitalDisplay_DPad), sSubsprites_DigitalDisplay_DPad }; -static const struct Subsprite gUnknown_085A812C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_StopS[] = { { .x = -8, @@ -6149,12 +6282,12 @@ static const struct Subsprite gUnknown_085A812C[] = } }; -static const struct SubspriteTable gUnknown_085A8134[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopS[] = { - ARRAY_COUNT(gUnknown_085A812C), gUnknown_085A812C + ARRAY_COUNT(sSubsprites_DigitalDisplay_StopS), sSubsprites_DigitalDisplay_StopS }; -static const struct Subsprite gUnknown_085A813C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_StopT[] = { { .x = -8, @@ -6174,12 +6307,12 @@ static const struct Subsprite gUnknown_085A813C[] = } }; -static const struct SubspriteTable gUnknown_085A8144[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopT[] = { - ARRAY_COUNT(gUnknown_085A813C), gUnknown_085A813C + ARRAY_COUNT(sSubsprites_DigitalDisplay_StopT), sSubsprites_DigitalDisplay_StopT }; -static const struct Subsprite gUnknown_085A814C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_StopO[] = { { .x = -8, @@ -6199,12 +6332,12 @@ static const struct Subsprite gUnknown_085A814C[] = } }; -static const struct SubspriteTable gUnknown_085A8154[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopO[] = { - ARRAY_COUNT(gUnknown_085A814C), gUnknown_085A814C + ARRAY_COUNT(sSubsprites_DigitalDisplay_StopO), sSubsprites_DigitalDisplay_StopO }; -static const struct Subsprite gUnknown_085A815C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_StopP[] = { { .x = -8, @@ -6224,12 +6357,12 @@ static const struct Subsprite gUnknown_085A815C[] = } }; -static const struct SubspriteTable gUnknown_085A8164[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopP[] = { - ARRAY_COUNT(gUnknown_085A815C), gUnknown_085A815C + ARRAY_COUNT(sSubsprites_DigitalDisplay_StopP), sSubsprites_DigitalDisplay_StopP }; -static const struct Subsprite gUnknown_085A816C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BonusB[] = { { .x = -8, @@ -6249,12 +6382,12 @@ static const struct Subsprite gUnknown_085A816C[] = } }; -static const struct SubspriteTable gUnknown_085A8174[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusB[] = { - ARRAY_COUNT(gUnknown_085A816C), gUnknown_085A816C + ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusB), sSubsprites_DigitalDisplay_BonusB }; -static const struct Subsprite gUnknown_085A817C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BonusO[] = { { .x = -4, @@ -6274,12 +6407,12 @@ static const struct Subsprite gUnknown_085A817C[] = } }; -static const struct SubspriteTable gUnknown_085A8184[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusO[] = { - ARRAY_COUNT(gUnknown_085A817C), gUnknown_085A817C + ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusO), sSubsprites_DigitalDisplay_BonusO }; -static const struct Subsprite gUnknown_085A818C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BonusN[] = { { .x = -8, @@ -6299,12 +6432,12 @@ static const struct Subsprite gUnknown_085A818C[] = } }; -static const struct SubspriteTable gUnknown_085A8194[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusN[] = { - ARRAY_COUNT(gUnknown_085A818C), gUnknown_085A818C + ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusN), sSubsprites_DigitalDisplay_BonusN }; -static const struct Subsprite gUnknown_085A819C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BonusU[] = { { .x = -4, @@ -6324,12 +6457,12 @@ static const struct Subsprite gUnknown_085A819C[] = } }; -static const struct SubspriteTable gUnknown_085A81A4[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusU[] = { - ARRAY_COUNT(gUnknown_085A819C), gUnknown_085A819C + ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusU), sSubsprites_DigitalDisplay_BonusU }; -static const struct Subsprite gUnknown_085A81AC[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BonusS[] = { { .x = -8, @@ -6349,12 +6482,12 @@ static const struct Subsprite gUnknown_085A81AC[] = } }; -static const struct SubspriteTable gUnknown_085A81B4[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusS[] = { - ARRAY_COUNT(gUnknown_085A81AC), gUnknown_085A81AC + ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusS), sSubsprites_DigitalDisplay_BonusS }; -static const struct Subsprite gUnknown_085A81BC[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BigB[] = { { .x = -12, @@ -6406,12 +6539,12 @@ static const struct Subsprite gUnknown_085A81BC[] = } }; -static const struct SubspriteTable gUnknown_085A81D4[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigB[] = { - ARRAY_COUNT(gUnknown_085A81BC), gUnknown_085A81BC + ARRAY_COUNT(sSubsprites_DigitalDisplay_BigB), sSubsprites_DigitalDisplay_BigB }; -static const struct Subsprite gUnknown_085A81DC[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BigI[] = { { .x = -8, @@ -6439,12 +6572,12 @@ static const struct Subsprite gUnknown_085A81DC[] = } }; -static const struct SubspriteTable gUnknown_085A81E8[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigI[] = { - ARRAY_COUNT(gUnknown_085A81DC), gUnknown_085A81DC + ARRAY_COUNT(sSubsprites_DigitalDisplay_BigI), sSubsprites_DigitalDisplay_BigI }; -static const struct Subsprite gUnknown_085A81F0[] = +static const struct Subsprite sSubsprites_DigitalDisplay_BigG[] = { { .x = -12, @@ -6496,12 +6629,12 @@ static const struct Subsprite gUnknown_085A81F0[] = } }; -static const struct SubspriteTable gUnknown_085A8208[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigG[] = { - ARRAY_COUNT(gUnknown_085A81F0), gUnknown_085A81F0 + ARRAY_COUNT(sSubsprites_DigitalDisplay_BigG), sSubsprites_DigitalDisplay_BigG }; -static const struct Subsprite gUnknown_085A8210[] = +static const struct Subsprite sSubsprites_DigitalDisplay_RegR[] = { { .x = -12, @@ -6553,12 +6686,12 @@ static const struct Subsprite gUnknown_085A8210[] = } }; -static const struct SubspriteTable gUnknown_085A8228[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegR[] = { - ARRAY_COUNT(gUnknown_085A8210), gUnknown_085A8210 + ARRAY_COUNT(sSubsprites_DigitalDisplay_RegR), sSubsprites_DigitalDisplay_RegR }; -static const struct Subsprite gUnknown_085A822C[] = +static const struct Subsprite sSubsprites_DigitalDisplay_RegE[] = { { .x = -8, @@ -6586,12 +6719,12 @@ static const struct Subsprite gUnknown_085A822C[] = } }; -static const struct SubspriteTable gUnknown_085A823C[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegE[] = { - ARRAY_COUNT(gUnknown_085A822C), gUnknown_085A822C + ARRAY_COUNT(sSubsprites_DigitalDisplay_RegE), sSubsprites_DigitalDisplay_RegE }; -static const struct Subsprite gUnknown_085A8244[] = +static const struct Subsprite sSubsprites_DigitalDisplay_RegG[] = { { .x = -12, @@ -6643,69 +6776,69 @@ static const struct Subsprite gUnknown_085A8244[] = } }; -static const struct SubspriteTable gUnknown_085A825C[] = +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegG[] = { - ARRAY_COUNT(gUnknown_085A8244), gUnknown_085A8244 + ARRAY_COUNT(sSubsprites_DigitalDisplay_RegG), sSubsprites_DigitalDisplay_RegG }; -static const struct SpriteTemplate *const gUnknown_083EDB5C[] = +static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES] = { - &gUnknown_085A7E48, - &gUnknown_085A7E60, - &gUnknown_085A7E78, - &gUnknown_085A7EA8, - &gUnknown_085A7EC0, - &gUnknown_085A7F20, - &gUnknown_085A7F38, - &gUnknown_085A7F50, - &gUnknown_085A7F68, - &gUnknown_085A7F80, - &gUnknown_085A7E90, - &gUnknown_085A7E90, - &gUnknown_085A7E90, - &gUnknown_085A7E90, - &gUnknown_085A7ED8, - &gUnknown_085A7ED8, - &gUnknown_085A7ED8, - &gUnknown_085A7ED8, - &gUnknown_085A7ED8, - &gUnknown_085A7EF0, - &gUnknown_085A7EF0, - &gUnknown_085A7EF0, - &gUnknown_085A7F08, - &gUnknown_085A7F08, - &gUnknown_085A7F08, - &gDummySpriteTemplate + [DIG_SPRITE_REEL] = &sSpriteTemplate_DigitalDisplay_Reel, + [DIG_SPRITE_TIME] = &sSpriteTemplate_DigitalDisplay_Time, + [DIG_SPRITE_INSERT] = &sSpriteTemplate_DigitalDisplay_Insert, + [DIG_SPRITE_WIN] = &sSpriteTemplate_DigitalDisplay_Win, + [DIG_SPRITE_LOSE] = &sSpriteTemplate_DigitalDisplay_Lose, + [DIG_SPRITE_A_BUTTON] = &sSpriteTemplate_DigitalDisplay_AButton, + [DIG_SPRITE_SMOKE] = &sSpriteTemplate_DigitalDisplay_Smoke, + [DIG_SPRITE_NUMBER] = &sSpriteTemplate_DigitalDisplay_Number, + [DIG_SPRITE_POKE_BALL] = &sSpriteTemplate_DigitalDisplay_Pokeball, + [DIG_SPRITE_D_PAD] = &sSpriteTemplate_DigitalDisplay_DPad, + [DIG_SPRITE_STOP_S] = &sSpriteTemplate_DigitalDisplay_Stop, + [DIG_SPRITE_STOP_T] = &sSpriteTemplate_DigitalDisplay_Stop, + [DIG_SPRITE_STOP_O] = &sSpriteTemplate_DigitalDisplay_Stop, + [DIG_SPRITE_STOP_P] = &sSpriteTemplate_DigitalDisplay_Stop, + [DIG_SPRITE_BONUS_B] = &sSpriteTemplate_DigitalDisplay_Bonus, + [DIG_SPRITE_BONUS_O] = &sSpriteTemplate_DigitalDisplay_Bonus, + [DIG_SPRITE_BONUS_N] = &sSpriteTemplate_DigitalDisplay_Bonus, + [DIG_SPRITE_BONUS_U] = &sSpriteTemplate_DigitalDisplay_Bonus, + [DIG_SPRITE_BONUS_S] = &sSpriteTemplate_DigitalDisplay_Bonus, + [DIG_SPRITE_BIG_B] = &sSpriteTemplate_DigitalDisplay_Big, + [DIG_SPRITE_BIG_I] = &sSpriteTemplate_DigitalDisplay_Big, + [DIG_SPRITE_BIG_G] = &sSpriteTemplate_DigitalDisplay_Big, + [DIG_SPRITE_REG_R] = &sSpriteTemplate_DigitalDisplay_Reg, + [DIG_SPRITE_REG_E] = &sSpriteTemplate_DigitalDisplay_Reg, + [DIG_SPRITE_REG_G] = &sSpriteTemplate_DigitalDisplay_Reg, + [DIG_SPRITE_EMPTY] = &gDummySpriteTemplate }; -static const struct SubspriteTable *const gUnknown_083EDBC4[] = +static const struct SubspriteTable *const sSubspriteTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES] = { - gUnknown_085A8058, - gUnknown_085A8070, - gUnknown_085A8088, - gUnknown_085A80C0, - NULL, - NULL, - gUnknown_085A80D0, - NULL, - gUnknown_085A8110, - gUnknown_085A8124, - gUnknown_085A8134, - gUnknown_085A8144, - gUnknown_085A8154, - gUnknown_085A8164, - gUnknown_085A8174, - gUnknown_085A8184, - gUnknown_085A8194, - gUnknown_085A81A4, - gUnknown_085A81B4, - gUnknown_085A81D4, - gUnknown_085A81E8, - gUnknown_085A8208, - gUnknown_085A8228, - gUnknown_085A823C, - gUnknown_085A825C, - NULL + [DIG_SPRITE_REEL] = sSubspriteTable_DigitalDisplay_Reel, + [DIG_SPRITE_TIME] = sSubspriteTable_DigitalDisplay_Time, + [DIG_SPRITE_INSERT] = sSubspriteTable_DigitalDisplay_Insert, + [DIG_SPRITE_WIN] = sSubspriteTable_DigitalDisplay_Win, + [DIG_SPRITE_LOSE] = NULL, + [DIG_SPRITE_A_BUTTON] = NULL, + [DIG_SPRITE_SMOKE] = sSubspriteTable_DigitalDisplay_Smoke, + [DIG_SPRITE_NUMBER] = NULL, + [DIG_SPRITE_POKE_BALL] = sSubspriteTable_DigitalDisplay_Pokeball, + [DIG_SPRITE_D_PAD] = sSubspriteTable_DigitalDisplay_DPad, + [DIG_SPRITE_STOP_S] = sSubspriteTable_DigitalDisplay_StopS, + [DIG_SPRITE_STOP_T] = sSubspriteTable_DigitalDisplay_StopT, + [DIG_SPRITE_STOP_O] = sSubspriteTable_DigitalDisplay_StopO, + [DIG_SPRITE_STOP_P] = sSubspriteTable_DigitalDisplay_StopP, + [DIG_SPRITE_BONUS_B] = sSubspriteTable_DigitalDisplay_BonusB, + [DIG_SPRITE_BONUS_O] = sSubspriteTable_DigitalDisplay_BonusO, + [DIG_SPRITE_BONUS_N] = sSubspriteTable_DigitalDisplay_BonusN, + [DIG_SPRITE_BONUS_U] = sSubspriteTable_DigitalDisplay_BonusU, + [DIG_SPRITE_BONUS_S] = sSubspriteTable_DigitalDisplay_BonusS, + [DIG_SPRITE_BIG_B] = sSubspriteTable_DigitalDisplay_BigB, + [DIG_SPRITE_BIG_I] = sSubspriteTable_DigitalDisplay_BigI, + [DIG_SPRITE_BIG_G] = sSubspriteTable_DigitalDisplay_BigG, + [DIG_SPRITE_REG_R] = sSubspriteTable_DigitalDisplay_RegR, + [DIG_SPRITE_REG_E] = sSubspriteTable_DigitalDisplay_RegE, + [DIG_SPRITE_REG_G] = sSubspriteTable_DigitalDisplay_RegG, + [DIG_SPRITE_EMPTY] = NULL }; static const struct SpriteSheet gSlotMachineSpriteSheets[22] = @@ -6819,7 +6952,7 @@ static const struct SpritePalette gSlotMachineSpritePalettes[] = { .data = gUnknown_08DCF170, .tag = 0}, { .data = gUnknown_08DCF190, .tag = 1}, { .data = gUnknown_08DCF1B0, .tag = 2}, - { .data = gSlotMachineReelTime_Pal, .tag = 3}, + { .data = gSlotMachineDigitalDisplay_Pal, .tag = 3}, { .data = gUnknown_08DCF1F0, .tag = 4}, { .data = gUnknown_08DCF210, .tag = 5}, { .data = gUnknown_08DCF230, .tag = 6}, @@ -6827,6 +6960,6 @@ static const struct SpritePalette gSlotMachineSpritePalettes[] = {} }; -static const u32 gReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz"); +static const u32 sReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz"); // reel_time_machine and reel_time_pikachu static const u16 gReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/85A96E0.bin"); static const u16 gUnknown_085A9898[] = {0}; From ddd012f3edf7cd1a3df518492faa8de15833874c Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Mon, 27 Jul 2020 12:47:08 -0400 Subject: [PATCH 16/85] holding back on casts --- src/agb_flash.c | 2 +- src/battle_anim_effects_1.c | 2 +- src/hall_of_fame.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/agb_flash.c b/src/agb_flash.c index 0045219c41..eeccf11164 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -242,7 +242,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); + i = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1; while (i != 0) { diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 9acb4b83ab..516c58e557 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4445,7 +4445,7 @@ static void AnimBowMon_Step1_Callback(struct Sprite* sprite) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); - sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : (s16)0xFFFFFD00; + sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; sprite->data[5] = 0; } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 8e47c1e3ae..bf9850deca 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -612,7 +612,7 @@ static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId) static void Task_Hof_TryDisplayAnotherMon(u8 taskId) { - u16 currPokeID = (u16)gTasks[taskId].tDisplayedMonId; + u16 currPokeID = gTasks[taskId].tDisplayedMonId; struct HallofFameMon* currMon = &sHofMonPtr->mon[currPokeID]; if (gTasks[taskId].tFrameCount != 0) @@ -1483,7 +1483,7 @@ static void UpdateDomeConfetti(struct ConfettiUtil *util) static void Task_DoDomeConfetti(u8 taskId) { u32 id = 0; - u16 *data = (u16 *)gTasks[taskId].data; + u16 *data = gTasks[taskId].data; switch (tState) { From 1c55734e44a2006571a0f04805bea38852207965 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 19 Jul 2020 14:12:38 -0400 Subject: [PATCH 17/85] Document faraway island --- data/maps/FarawayIsland_Interior/scripts.inc | 52 ++--- data/specials.inc | 4 +- include/faraway_island.h | 2 +- src/event_object_movement.c | 2 +- src/faraway_island.c | 191 ++++++++++--------- 5 files changed, 136 insertions(+), 115 deletions(-) diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index cad875b654..2a06ffdfaf 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -8,24 +8,24 @@ FarawayIsland_Interior_MapScripts:: @ 8267CFA .byte 0 FarawayIsland_Interior_OnReturnToField: @ 8267D0F - call_if_set FLAG_SYS_CTRL_OBJ_DELETE, FarawayIsland_Interior_EventScript_267D19 + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, FarawayIsland_Interior_EventScript_TrySetMewAboveGrass end -FarawayIsland_Interior_EventScript_267D19:: @ 8267D19 +FarawayIsland_Interior_EventScript_TrySetMewAboveGrass:: @ 8267D19 specialvar VAR_RESULT, GetBattleOutcome compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq FarawayIsland_Interior_EventScript_267D4B + goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq FarawayIsland_Interior_EventScript_267D4B + goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq FarawayIsland_Interior_EventScript_267D4B + goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass compare VAR_RESULT, B_OUTCOME_MON_TELEPORTED - goto_if_eq FarawayIsland_Interior_EventScript_267D4B + goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass return -FarawayIsland_Interior_EventScript_267D4B:: @ 8267D4B +FarawayIsland_Interior_EventScript_SetMewAboveGrass:: @ 8267D4B setvar VAR_0x8004, 1 - special sub_81D4A90 + special SetMewAboveGrass return FarawayIsland_Interior_OnResume: @ 8267D54 @@ -81,7 +81,7 @@ FarawayIsland_Interior_Movement_MewAppear: @ 8267DD4 set_visible step_end -FarawayIsland_Interior_Movement_MewHideDown: @ 8267DD6 +FarawayIsland_Interior_Movement_MewFloatUpNorth: @ 8267DD6 lock_facing_direction walk_fast_up walk_fast_up @@ -90,7 +90,7 @@ FarawayIsland_Interior_Movement_MewHideDown: @ 8267DD6 walk_in_place_down step_end -FarawayIsland_Interior_Movement_MewHideUp: @ 8267DDD +FarawayIsland_Interior_Movement_MewFloatUpSouth: @ 8267DDD lock_facing_direction walk_fast_up walk_fast_up @@ -99,7 +99,7 @@ FarawayIsland_Interior_Movement_MewHideUp: @ 8267DDD walk_in_place_up step_end -FarawayIsland_Interior_Movement_MewHideRight: @ 8267DE4 +FarawayIsland_Interior_Movement_MewFloatUpWest: @ 8267DE4 lock_facing_direction walk_fast_up walk_fast_up @@ -108,7 +108,7 @@ FarawayIsland_Interior_Movement_MewHideRight: @ 8267DE4 walk_in_place_right step_end -FarawayIsland_Interior_Movement_MewHideLeft: @ 8267DEB +FarawayIsland_Interior_Movement_MewFloatUpEast: @ 8267DEB lock_facing_direction walk_fast_up walk_fast_up @@ -123,19 +123,19 @@ FarawayIsland_Interior_EventScript_Mew:: @ 8267DF2 applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewAppear waitmovement 0 setvar VAR_0x8004, 0 - special sub_81D4A90 + special SetMewAboveGrass message FarawayIsland_Interior_Text_Mew waitse playmoncry SPECIES_MEW, 2 compare VAR_FACING, DIR_NORTH - call_if_eq FarawayIsland_Interior_EventScript_MewHideDown + call_if_eq FarawayIsland_Interior_EventScript_FoundMewNorth compare VAR_FACING, DIR_SOUTH - call_if_eq FarawayIsland_Interior_EventScript_MewHideUp + call_if_eq FarawayIsland_Interior_EventScript_FoundMewSouth compare VAR_FACING, DIR_WEST - call_if_eq FarawayIsland_Interior_EventScript_MewHideRight + call_if_eq FarawayIsland_Interior_EventScript_FoundMewWest compare VAR_FACING, DIR_EAST - call_if_eq FarawayIsland_Interior_EventScript_MewHideLeft - special sub_81D4BEC + call_if_eq FarawayIsland_Interior_EventScript_FoundMewEast + special DestroyMewEmergingGrassSprite delay 40 waitmoncry setvar VAR_0x8004, SPECIES_MEW @@ -170,23 +170,23 @@ FarawayIsland_Interior_EventScript_PlayerOrMewRan:: @ 8267EA4 goto Common_EventScript_LegendaryFlewAway end -FarawayIsland_Interior_EventScript_MewHideDown:: @ 8267EAF - applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewHideDown +FarawayIsland_Interior_EventScript_FoundMewNorth:: @ 8267EAF + applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpNorth waitmovement 0 return -FarawayIsland_Interior_EventScript_MewHideUp:: @ 8267EBA - applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewHideUp +FarawayIsland_Interior_EventScript_FoundMewSouth:: @ 8267EBA + applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpSouth waitmovement 0 return -FarawayIsland_Interior_EventScript_MewHideRight:: @ 8267EC5 - applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewHideRight +FarawayIsland_Interior_EventScript_FoundMewWest:: @ 8267EC5 + applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpWest waitmovement 0 return -FarawayIsland_Interior_EventScript_MewHideLeft:: @ 8267ED0 - applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewHideLeft +FarawayIsland_Interior_EventScript_FoundMewEast:: @ 8267ED0 + applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpEast waitmovement 0 return diff --git a/data/specials.inc b/data/specials.inc index 0f78f981f5..d7d1897d87 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -511,14 +511,14 @@ gSpecials:: @ 81DBA64 def_special ScriptMenu_CreateLilycoveSSTidalMultichoice def_special GetLilycoveSSTidalSelection def_special TurnOnTVScreen - def_special sub_81D4A90 + def_special SetMewAboveGrass def_special ShouldDistributeEonTicket def_special LinkRetireStatusWithBattleTowerPartner def_special sub_813B534 def_special CallTrainerHillFunction def_special Script_DoRayquazaScene @ Listed twice def_special LoopWingFlapSE - def_special sub_81D4BEC + def_special DestroyMewEmergingGrassSprite def_special ShowBerryCrushRankings def_special TryBufferWaldaPhrase def_special DoWaldaNamingScreen diff --git a/include/faraway_island.h b/include/faraway_island.h index 084b5a2779..a5243c6a70 100755 --- a/include/faraway_island.h +++ b/include/faraway_island.h @@ -2,7 +2,7 @@ #define GUARD_FARAWAY_ISLAND_H u32 GetMewMoveDirection(void); -bool8 sub_81D4A58(struct ObjectEvent*); +bool8 ShouldMewShakeGrass(struct ObjectEvent*); void UpdateFarawayIslandStepCounter(void); bool8 ObjectEventIsFarawayIslandMew(struct ObjectEvent *); bool8 IsMewPlayingHideAndSeek(void); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index c3fef8c0de..76331c2b14 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8124,7 +8124,7 @@ static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite * { u8 i; - if (ObjectEventIsFarawayIslandMew(objEvent) == TRUE && !sub_81D4A58(objEvent)) + if (ObjectEventIsFarawayIslandMew(objEvent) == TRUE && !ShouldMewShakeGrass(objEvent)) return; for (i = 0; i < ARRAY_COUNT(sGroundEffectFuncs); i++, flags >>= 1) diff --git a/src/faraway_island.c b/src/faraway_island.c index 06e47cd216..57d31057f0 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -9,15 +9,15 @@ #include "constants/maps.h" #include "constants/metatile_behaviors.h" -static u8 sub_81D4890(u8); -static bool8 sub_81D4C14(struct ObjectEvent*, u8); -static u8 sub_81D4C9C(struct ObjectEvent*, u8); -static u8 sub_81D4C58(struct ObjectEvent*, u8); -static u8 sub_81D4CE0(struct ObjectEvent*, u8); -static u8 sub_81D4D24(u8); -static bool8 CanMewWalkToCoords(s16, s16); +static u8 GetValidMewMoveDirection(u8); +static bool8 ShouldMewMoveNorth(struct ObjectEvent*, u8); +static bool8 ShouldMewMoveSouth(struct ObjectEvent*, u8); +static bool8 ShouldMewMoveEast(struct ObjectEvent*, u8); +static bool8 ShouldMewMoveWest(struct ObjectEvent*, u8); +static u8 GetRandomMewDirectionCandidate(u8); +static bool8 CanMewMoveToCoords(s16, s16); -static EWRAM_DATA u8 sUnknown_0203CF50 = 0; +static EWRAM_DATA u8 sGrassSpriteId = 0; static s16 sPlayerToMewDeltaX; static s16 sPlayerToMewDeltaY; @@ -28,10 +28,10 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; static const s16 sFarawayIslandRockCoords[4][2] = { - {21, 16}, - {25, 16}, - {16, 17}, - {20, 20}, + {14 + 7, 9 + 7}, + {18 + 7, 9 + 7}, + { 9 + 7, 10 + 7}, + {13 + 7, 13 + 7}, }; static u8 GetMewObjectEventId(void) @@ -41,10 +41,12 @@ static u8 GetMewObjectEventId(void) return objectEventId; } +// When the player enters Faraway Island interior it begins a "hide and seek" minigame where Mew disappears into the grass +// This function returns the direction Mew will take a step, and is run every time the player takes a step u32 GetMewMoveDirection(void) { u8 i; - int skip; + int mewSafeFromTrap; struct ObjectEvent *mew = &gObjectEvents[GetMewObjectEventId()]; sPlayerToMewDeltaX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x - mew->currentCoords.x; @@ -52,43 +54,47 @@ u32 GetMewMoveDirection(void) for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++) sMewDirectionCandidates[i] = DIR_NONE; + // Player hasn't moved (just facing new direction), don't move if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x == gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x && gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y == gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y) { return DIR_NONE; } + // Mew is invisible except for every 8th step if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 8 == 0) - mew->invisible = 0; + mew->invisible = FALSE; else - mew->invisible = 1; + mew->invisible = TRUE; + // Mew will stay in place for 1 step after its visible if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 9 == 0) return DIR_NONE; + // Below loop is for Mew to try to avoid getting trapped between the player and a rock for (i = 0; i < ARRAY_COUNT(sFarawayIslandRockCoords); i++) { if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x == sFarawayIslandRockCoords[i][0]) { - skip = 0; + mewSafeFromTrap = FALSE; if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y < sFarawayIslandRockCoords[i][1]) { if (mew->currentCoords.y <= sFarawayIslandRockCoords[i][1]) - skip = 1; + mewSafeFromTrap = TRUE; } else { if (mew->currentCoords.y >= sFarawayIslandRockCoords[i][1]) - skip = 1; + mewSafeFromTrap = TRUE; } - if (!skip) + if (!mewSafeFromTrap) { if (sPlayerToMewDeltaX > 0) { if (mew->currentCoords.x + 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x) { - if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; } } @@ -96,7 +102,7 @@ u32 GetMewMoveDirection(void) { if (mew->currentCoords.x - 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x) { - if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } } @@ -105,12 +111,12 @@ u32 GetMewMoveDirection(void) { if (sPlayerToMewDeltaY > 0) { - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; } else { - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } } @@ -119,25 +125,25 @@ u32 GetMewMoveDirection(void) if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y == sFarawayIslandRockCoords[i][1]) { - skip = 0; + mewSafeFromTrap = FALSE; if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x < sFarawayIslandRockCoords[i][0]) { if (mew->currentCoords.x <= sFarawayIslandRockCoords[i][0]) - skip = 1; + mewSafeFromTrap = TRUE; } else { if (mew->currentCoords.x >= sFarawayIslandRockCoords[i][0]) - skip = 1; + mewSafeFromTrap = TRUE; } - if (!skip) + if (!mewSafeFromTrap) { if (sPlayerToMewDeltaY > 0) { if (mew->currentCoords.y + 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y) { - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } } @@ -145,7 +151,7 @@ u32 GetMewMoveDirection(void) { if (mew->currentCoords.y - 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y) { - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; } } @@ -154,12 +160,12 @@ u32 GetMewMoveDirection(void) { if (sPlayerToMewDeltaX > 0) { - if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } else { - if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; } } @@ -167,92 +173,101 @@ u32 GetMewMoveDirection(void) } } - if (sub_81D4C14(mew, 0)) + // Check if Mew can move in any direction without getting closer to the player + // If so load into sMewDirectionCandidates + // If Mew can move in two of the checked directions, choose one randomly + if (ShouldMewMoveNorth(mew, 0)) { - if (sub_81D4C58(mew, 1)) - return sub_81D4D24(2); - else if (sub_81D4CE0(mew, 1)) - return sub_81D4D24(2); + if (ShouldMewMoveEast(mew, 1)) + return GetRandomMewDirectionCandidate(2); + else if (ShouldMewMoveWest(mew, 1)) + return GetRandomMewDirectionCandidate(2); else return DIR_NORTH; } - if (sub_81D4C9C(mew, 0)) + if (ShouldMewMoveSouth(mew, 0)) { - if (sub_81D4C58(mew, 1)) - return sub_81D4D24(2); - else if (sub_81D4CE0(mew, 1)) - return sub_81D4D24(2); + if (ShouldMewMoveEast(mew, 1)) + return GetRandomMewDirectionCandidate(2); + else if (ShouldMewMoveWest(mew, 1)) + return GetRandomMewDirectionCandidate(2); else return DIR_SOUTH; } - if (sub_81D4C58(mew, 0)) + if (ShouldMewMoveEast(mew, 0)) { - if (sub_81D4C14(mew, 1)) - return sub_81D4D24(2); - else if (sub_81D4C9C(mew, 1)) - return sub_81D4D24(2); + if (ShouldMewMoveNorth(mew, 1)) + return GetRandomMewDirectionCandidate(2); + else if (ShouldMewMoveSouth(mew, 1)) + return GetRandomMewDirectionCandidate(2); else return DIR_EAST; } - if (sub_81D4CE0(mew, 0)) + if (ShouldMewMoveWest(mew, 0)) { - if (sub_81D4C14(mew, 1)) - return sub_81D4D24(2); - else if (sub_81D4C9C(mew, 1)) - return sub_81D4D24(2); + if (ShouldMewMoveNorth(mew, 1)) + return GetRandomMewDirectionCandidate(2); + else if (ShouldMewMoveSouth(mew, 1)) + return GetRandomMewDirectionCandidate(2); else return DIR_WEST; } + // If this point is reached, Mew cannot move without getting closer to the player + + // Avoid player on same Y, try move North/South if (sPlayerToMewDeltaY == 0) { if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y > mew->currentCoords.y) { - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; } if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y < mew->currentCoords.y) { - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } + // Avoid player on same X, try move West/East if (sPlayerToMewDeltaX == 0) { if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x > mew->currentCoords.x) { - if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x < mew->currentCoords.x) { - if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; } - if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; - if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } - return sub_81D4890(DIR_NONE); + // Can't avoid player on axis, move any valid direction + return GetValidMewMoveDirection(DIR_NONE); } -static bool8 CanMewWalkToCoords(s16 x, s16 y) +// Mew can move to any Tall/Long Grass metatile the player isn't currently on +static bool8 CanMewMoveToCoords(s16 x, s16 y) { if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x == x && gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y == y) @@ -263,7 +278,8 @@ static bool8 CanMewWalkToCoords(s16 x, s16 y) return MetatileBehavior_IsPokeGrass(MapGridGetMetatileBehaviorAt(x, y)); } -static u8 sub_81D4890(u8 ignoredDir) +// Last ditch effort to move, clear move candidates and try all directions again +static u8 GetValidMewMoveDirection(u8 ignoredDir) { u8 i; u8 count = 0; @@ -272,25 +288,25 @@ static u8 sub_81D4890(u8 ignoredDir) for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++) sMewDirectionCandidates[i] = DIR_NONE; - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH) { sMewDirectionCandidates[count] = DIR_NORTH; count++; } - if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST) + if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST) { sMewDirectionCandidates[count] = DIR_EAST; count++; } - if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH) + if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH) { sMewDirectionCandidates[count] = DIR_SOUTH; count++; } - if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST) + if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST) { sMewDirectionCandidates[count] = DIR_WEST; count++; @@ -340,7 +356,9 @@ bool8 IsMewPlayingHideAndSeek(void) return FALSE; } -bool8 sub_81D4A58(struct ObjectEvent *objectEvent) +// Every 4th step Mew will shake the grass it steps into +// Otherwise its movement leaves grass undisturbed +bool8 ShouldMewShakeGrass(struct ObjectEvent *objectEvent) { if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) != 0xFFFF && VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 4 == 0) @@ -349,22 +367,25 @@ bool8 sub_81D4A58(struct ObjectEvent *objectEvent) return FALSE; } -void sub_81D4A90(void) +void SetMewAboveGrass(void) { s16 x; s16 y; u8 spriteId; struct ObjectEvent *mew = &gObjectEvents[GetMewObjectEventId()]; - mew->invisible = 0; + mew->invisible = FALSE; if (gSpecialVar_0x8004 == 1) { + // For after battle where Mew should still be present (e.g. if ran from battle) mew->fixedPriority = 1; gSprites[mew->spriteId].subspriteMode = SUBSPRITES_IGNORE_PRIORITY; gSprites[mew->spriteId].subpriority = 1; } else { + // Mew emerging from grass when found + // Also do field effect for grass shaking as it emerges VarSet(VAR_FARAWAY_ISLAND_STEP_COUNTER, 0xFFFF); mew->fixedPriority = 1; gSprites[mew->spriteId].subspriteMode = SUBSPRITES_IGNORE_PRIORITY; @@ -377,10 +398,10 @@ void sub_81D4A90(void) x = mew->currentCoords.x; y = mew->currentCoords.y; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); - sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1); - if (sUnknown_0203CF50 != MAX_SPRITES) + sGrassSpriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1); + if (sGrassSpriteId != MAX_SPRITES) { - struct Sprite *sprite = &gSprites[sUnknown_0203CF50]; + struct Sprite *sprite = &gSprites[sGrassSpriteId]; sprite->coordOffsetEnabled = 1; sprite->oam.priority = 2; sprite->callback = SpriteCallbackDummy; @@ -388,15 +409,15 @@ void sub_81D4A90(void) } } -void sub_81D4BEC(void) +void DestroyMewEmergingGrassSprite(void) { - if (sUnknown_0203CF50 != MAX_SPRITES) - DestroySprite(&gSprites[sUnknown_0203CF50]); + if (sGrassSpriteId != MAX_SPRITES) + DestroySprite(&gSprites[sGrassSpriteId]); } -static bool8 sub_81D4C14(struct ObjectEvent *mew, u8 index) +static bool8 ShouldMewMoveNorth(struct ObjectEvent *mew, u8 index) { - if (sPlayerToMewDeltaY > 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (sPlayerToMewDeltaY > 0 && CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) { sMewDirectionCandidates[index] = DIR_NORTH; return TRUE; @@ -405,9 +426,9 @@ static bool8 sub_81D4C14(struct ObjectEvent *mew, u8 index) return FALSE; } -static u8 sub_81D4C58(struct ObjectEvent *mew, u8 index) +static bool8 ShouldMewMoveEast(struct ObjectEvent *mew, u8 index) { - if (sPlayerToMewDeltaX < 0 && CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (sPlayerToMewDeltaX < 0 && CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) { sMewDirectionCandidates[index] = DIR_EAST; return TRUE; @@ -416,9 +437,9 @@ static u8 sub_81D4C58(struct ObjectEvent *mew, u8 index) return FALSE; } -static u8 sub_81D4C9C(struct ObjectEvent *mew, u8 index) +static bool8 ShouldMewMoveSouth(struct ObjectEvent *mew, u8 index) { - if (sPlayerToMewDeltaY < 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (sPlayerToMewDeltaY < 0 && CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) { sMewDirectionCandidates[index] = DIR_SOUTH; return TRUE; @@ -427,9 +448,9 @@ static u8 sub_81D4C9C(struct ObjectEvent *mew, u8 index) return FALSE; } -static u8 sub_81D4CE0(struct ObjectEvent *mew, u8 index) +static bool8 ShouldMewMoveWest(struct ObjectEvent *mew, u8 index) { - if (sPlayerToMewDeltaX > 0 && CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (sPlayerToMewDeltaX > 0 && CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) { sMewDirectionCandidates[index] = DIR_WEST; return TRUE; @@ -438,7 +459,7 @@ static u8 sub_81D4CE0(struct ObjectEvent *mew, u8 index) return FALSE; } -static u8 sub_81D4D24(u8 mod) +static u8 GetRandomMewDirectionCandidate(u8 numDirections) { - return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % mod]; + return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % numDirections]; } From ad3de420af4f5daf617103352f5139e17e7b636a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 21 Jul 2020 17:21:01 -0400 Subject: [PATCH 18/85] Sync flags with pokeruby --- data/maps/LavaridgeTown_HerbShop/scripts.inc | 4 +-- include/constants/flags.h | 34 +++++++------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/data/maps/LavaridgeTown_HerbShop/scripts.inc b/data/maps/LavaridgeTown_HerbShop/scripts.inc index c08d37609c..d98d6ef49f 100644 --- a/data/maps/LavaridgeTown_HerbShop/scripts.inc +++ b/data/maps/LavaridgeTown_HerbShop/scripts.inc @@ -28,12 +28,12 @@ LavaridgeTown_HerbShop_EventScript_ExpertM:: @ 81FE4FC LavaridgeTown_HerbShop_EventScript_OldMan:: @ 81FE505 lock faceplayer - goto_if_set FLFLAG_RECEIVED_CHARCOAL, LavaridgeTown_HerbShop_EventScript_ExplainCharcoal + goto_if_set FLAG_RECEIVED_CHARCOAL, LavaridgeTown_HerbShop_EventScript_ExplainCharcoal msgbox LavaridgeTown_HerbShop_Text_YouveComeToLookAtHerbalMedicine, MSGBOX_DEFAULT giveitem ITEM_CHARCOAL compare VAR_RESULT, FALSE goto_if_eq Common_EventScript_ShowBagIsFull - setflag FLFLAG_RECEIVED_CHARCOAL + setflag FLAG_RECEIVED_CHARCOAL release end diff --git a/include/constants/flags.h b/include/constants/flags.h index e1a88283a5..485dd3058c 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -275,7 +275,7 @@ #define FLAG_RECEIVED_DURIN_BERRY 0xFB #define FLAG_RECEIVED_BELUE_BERRY 0xFC #define FLAG_ENABLE_RIVAL_MATCH_CALL 0xFD -#define FLFLAG_RECEIVED_CHARCOAL 0xFE +#define FLAG_RECEIVED_CHARCOAL 0xFE #define FLAG_LATIOS_OR_LATIAS_ROAMING 0xFF #define FLAG_RECEIVED_REPEAT_BALL 0x100 #define FLAG_RECEIVED_OLD_ROD 0x101 @@ -1077,9 +1077,7 @@ #define FLAG_ITEM_ROUTE_120_NUGGET 0x406 #define FLAG_ITEM_ROUTE_120_FULL_HEAL 0x407 #define FLAG_ITEM_ROUTE_123_CALCIUM 0x408 - -#define FLAG_UNUSED_0x409 0x409 // Unused Flag - +#define FLAG_ITEM_ROUTE_123_RARE_CANDY 0x409 // Unused Flag, leftover from R/S. In Emerald this is a hidden item and uses a different flag #define FLAG_ITEM_ROUTE_127_ZINC 0x40A #define FLAG_ITEM_ROUTE_127_CARBOS 0x40B #define FLAG_ITEM_ROUTE_132_RARE_CANDY 0x40C @@ -1171,37 +1169,27 @@ #define FLAG_ITEM_NEW_MAUVILLE_FULL_HEAL 0x462 #define FLAG_ITEM_NEW_MAUVILLE_PARALYZE_HEAL 0x463 #define FLAG_ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL 0x464 - -#define FLAG_UNUSED_0x465 0x465 // Unused Flag -#define FLAG_UNUSED_0x466 0x466 // Unused Flag -#define FLAG_UNUSED_0x467 0x467 // Unused Flag +#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MASTER_BALL 0x465 // Unused Flag, leftover from the Ruby Magma hideout +#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MAX_ELIXIR 0x466 // Unused Flag, leftover from the Ruby Magma hideout +#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B2F_NEST_BALL 0x467 // Unused Flag, leftover from the Ruby Magma hideout #define FLAG_UNUSED_0x468 0x468 // Unused Flag - #define FLAG_ITEM_MT_PYRE_2F_ULTRA_BALL 0x469 #define FLAG_ITEM_MT_PYRE_4F_SEA_INCENSE 0x46A #define FLAG_ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE 0x46B #define FLAG_ITEM_AQUA_HIDEOUT_B1F_NUGGET 0x46C - -#define FLAG_UNUSED_0x46D 0x46D // Unused Flag - +#define FLAG_ITEM_MOSSDEEP_STEVENS_HOUSE_HM08 0x46D // Unused Flag, leftover from R/S. HM08 is given to the player directly in Emerald #define FLAG_ITEM_ROUTE_119_NUGGET 0x46E #define FLAG_ITEM_ROUTE_104_POTION 0x46F - #define FLAG_UNUSED_0x470 0x470 // Unused Flag - #define FLAG_ITEM_ROUTE_103_PP_UP 0x471 - #define FLAG_UNUSED_0x472 0x472 // Unused Flag - #define FLAG_ITEM_ROUTE_108_STAR_PIECE 0x473 #define FLAG_ITEM_ROUTE_109_POTION 0x474 #define FLAG_ITEM_ROUTE_110_ELIXIR 0x475 #define FLAG_ITEM_ROUTE_111_ELIXIR 0x476 #define FLAG_ITEM_ROUTE_113_HYPER_POTION 0x477 #define FLAG_ITEM_ROUTE_115_HEAL_POWDER 0x478 - #define FLAG_UNUSED_0x479 0x479 // Unused Flag - #define FLAG_ITEM_ROUTE_116_POTION 0x47A #define FLAG_ITEM_ROUTE_119_ELIXIR_2 0x47B #define FLAG_ITEM_ROUTE_120_REVIVE 0x47C @@ -1356,7 +1344,7 @@ #define FLAG_SYS_POKEMON_GET (SYSTEM_FLAGS + 0x0) // FLAG_0x860 #define FLAG_SYS_POKEDEX_GET (SYSTEM_FLAGS + 0x1) #define FLAG_SYS_POKENAV_GET (SYSTEM_FLAGS + 0x2) -#define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) +#define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) // Unused Flag #define FLAG_SYS_GAME_CLEAR (SYSTEM_FLAGS + 0x4) #define FLAG_SYS_CHAT_USED (SYSTEM_FLAGS + 0x5) #define FLAG_SYS_HIPSTER_MEET (SYSTEM_FLAGS + 0x6) @@ -1373,7 +1361,7 @@ #define NUM_BADGES (1 + FLAG_BADGE08_GET - FLAG_BADGE01_GET) // Towns and Cities -#define FLAG_VISITED_LITTLEROOT_TOWN (SYSTEM_FLAGS + 0xF) +#define FLAG_VISITED_LITTLEROOT_TOWN (SYSTEM_FLAGS + 0xF) #define FLAG_VISITED_OLDALE_TOWN (SYSTEM_FLAGS + 0x10) #define FLAG_VISITED_DEWFORD_TOWN (SYSTEM_FLAGS + 0x11) #define FLAG_VISITED_LAVARIDGE_TOWN (SYSTEM_FLAGS + 0x12) @@ -1418,9 +1406,9 @@ #define FLAG_SYS_MIX_RECORD (SYSTEM_FLAGS + 0x34) #define FLAG_SYS_CLOCK_SET (SYSTEM_FLAGS + 0x35) #define FLAG_SYS_NATIONAL_DEX (SYSTEM_FLAGS + 0x36) -#define FLAG_SYS_UNUSED_CAVE_SHIP (SYSTEM_FLAGS + 0x37) // Unused Flag? -#define FLAG_SYS_UNUSED_CAVE_WONDER (SYSTEM_FLAGS + 0x38) // Unused Flag? -#define FLAG_SYS_UNUSED_CAVE_BATTLE (SYSTEM_FLAGS + 0x39) // Unused Flag? +#define FLAG_SYS_CAVE_SHIP (SYSTEM_FLAGS + 0x37) // Unused Flag, leftover from R/S debug, presumably used by Emerald's debug too +#define FLAG_SYS_CAVE_WONDER (SYSTEM_FLAGS + 0x38) // Unused Flag, same as above +#define FLAG_SYS_CAVE_BATTLE (SYSTEM_FLAGS + 0x39) // Unused Flag, same as above #define FLAG_SYS_SHOAL_TIDE (SYSTEM_FLAGS + 0x3A) #define FLAG_SYS_RIBBON_GET (SYSTEM_FLAGS + 0x3B) From 11178a49db67304bb82287e4c93ef4a36cf5edca Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Jul 2020 12:27:35 +0200 Subject: [PATCH 19/85] Fix undefined behaviour in protect animation gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1] The above does NOT make it certain that i gets incremented before reading from the right side. Changed it, so the function always increments i first, then reads from pal buffer. --- src/battle_anim_effects_1.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 516c58e557..f4769145d4 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3967,24 +3967,25 @@ static void AnimProtect(struct Sprite* sprite) static void AnimProtect_Step(struct Sprite *sprite) { - int a; - int i; + int i, savedPal; sprite->data[5] += 96; sprite->pos2.x = -(sprite->data[5] >> 8); if (++sprite->data[1] > 1) { + int id; sprite->data[1] = 0; - a = gPlttBufferFaded[sprite->data[2] + 1]; + savedPal = gPlttBufferFaded[sprite->data[2] + 1]; i = 0; do { - gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; + id = sprite->data[2] + ++i; + gPlttBufferFaded[id] = gPlttBufferFaded[id + 1]; } while (i < 6); - gPlttBufferFaded[sprite->data[2] + 7] = a; + gPlttBufferFaded[sprite->data[2] + 7] = savedPal; } - if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) + if (sprite->data[7] > 6 && sprite->data[0] > 0 && ++sprite->data[6] > 1) { sprite->data[6] = 0; sprite->data[7] -= 1; From 5f6e7e2279711f9aab5fe861a76b20732551eebb Mon Sep 17 00:00:00 2001 From: PokeCodec <67983839+PokeCodec@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:59:37 -0400 Subject: [PATCH 20/85] Update secret_base.c --- src/secret_base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/secret_base.c b/src/secret_base.c index 35ac31d4a7..3f69e0419e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -964,7 +964,7 @@ static void HandleRegistryMenuInput(u8 taskId) data = gTasks[taskId].data; input = ListMenu_ProcessInput(data[5]); - ListMenuGetScrollAndRow((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); + ListMenuGetScrollAndRow(data[5], (u16 *)&data[2], (u16 *)&data[1]); switch (input) { case LIST_NOTHING_CHOSEN: From 71dc5edf2e590c85b5874f82dde3b418e5769450 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Mon, 27 Jul 2020 17:10:42 -0500 Subject: [PATCH 21/85] Document some battle_util.c --- include/battle_util.h | 4 ++-- src/battle_script_commands.c | 2 +- src/battle_util.c | 8 ++++---- src/pokemon.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index b77fa10ad6..e145a5e9ca 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -52,8 +52,8 @@ void CancelMultiTurnMoves(u8 battlerId); bool8 WasUnableToUseMove(u8 battlerId); void PrepareStringBattle(u16 stringId, u8 battlerId); void ResetSentPokesToOpponentValue(void); -void sub_803F9EC(u8 battlerId); -void sub_803FA70(u8 battlerId); +void OpponentSwitchInResetSentPokesToOpponent(u8 battlerId); +void UpdateSentPokesToOpponentValue(u8 battlerId); void BattleScriptPush(const u8* bsPtr); void BattleScriptPushCursor(void); void BattleScriptPop(void); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4e0e087b60..994d356258 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5471,7 +5471,7 @@ static void Cmd_switchineffects(void) s32 i; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - sub_803FA70(gActiveBattler); + UpdateSentPokesToOpponentValue(gActiveBattler); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gSpecialStatuses[gActiveBattler].flag40 = 0; diff --git a/src/battle_util.c b/src/battle_util.c index 9cc2252b68..a579f7edd6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -259,7 +259,7 @@ void ResetSentPokesToOpponentValue(void) gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits; } -void sub_803F9EC(u8 battler) +void OpponentSwitchInResetSentPokesToOpponent(u8 battler) { s32 i = 0; u32 bits = 0; @@ -279,11 +279,11 @@ void sub_803F9EC(u8 battler) } } -void sub_803FA70(u8 battler) +void UpdateSentPokesToOpponentValue(u8 battler) { if (GetBattlerSide(battler) == B_SIDE_OPPONENT) { - sub_803F9EC(battler); + OpponentSwitchInResetSentPokesToOpponent(battler); } else { @@ -1250,7 +1250,7 @@ bool8 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState = 3; break; case 2: - sub_803F9EC(gBattlerFainted); + OpponentSwitchInResetSentPokesToOpponent(gBattlerFainted); if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount) gBattleStruct->faintedActionsState = 3; else diff --git a/src/pokemon.c b/src/pokemon.c index 80e93c5685..b26f2f412a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4628,7 +4628,7 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) gBattleMons[battlerId].statStages[i] = 6; gBattleMons[battlerId].status2 = 0; - sub_803FA70(battlerId); + UpdateSentPokesToOpponentValue(battlerId); ClearTemporarySpeciesSpriteData(battlerId, FALSE); } From fb6f859eddd63cd59e8fabd53e47ca9080c63f3e Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Mon, 27 Jul 2020 19:17:34 -0400 Subject: [PATCH 22/85] semicolon --- src/AgbRfu_LinkManager.c | 2 +- src/battle_anim_psychic.c | 2 +- src/battle_anim_utility_funcs.c | 2 +- src/digit_obj_util.c | 2 +- src/mirage_tower.c | 2 +- src/save_failed_screen.c | 2 +- tools/gbagfx/gfx.c | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index e4127ee090..f6ebcc7265 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -918,7 +918,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { lman.reserveDisconnectSlot_flag = 0; lman.acceptCount = 0; - lman.acceptSlot_flag = 0;; + lman.acceptSlot_flag = 0; lman.parent_child = MODE_NEUTRAL; rfu_LMAN_managerChangeAgbClockMaster(); if (reqCommandId == ID_STOP_MODE_REQ) diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 7918698fc0..25340f9c6a 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -1101,7 +1101,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId) break; case 1: task->data[1] -= 4; - task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);; + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1); SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0); SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]); if (task->data[1] == 0) diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index dcef7d4830..bca669cc26 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -569,7 +569,7 @@ static void sub_81172EC(u8 taskId) if (gTasks[taskId].data[12] == 0) { sub_80A477C(0); - gTasks[taskId].data[15]++;; + gTasks[taskId].data[15]++; } } break; diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c index fe5d49e69d..f887dafb95 100644 --- a/src/digit_obj_util.c +++ b/src/digit_obj_util.c @@ -33,7 +33,7 @@ struct DigitPrinterAlloc }; // this file's functions -static u8 GetFirstOamId(u8 oamCount);; +static u8 GetFirstOamId(u8 oamCount); static void CopyWorkToOam(struct DigitPrinter *objWork); static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign); static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign); diff --git a/src/mirage_tower.c b/src/mirage_tower.c index bdddbdbe64..3f3dc1ef85 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -690,7 +690,7 @@ static void DoFossilFallAndSink(u8 taskId) if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]); - FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);; + FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles); FREE_AND_SET_NULL(sUnknown_0203CF0C); diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index a2a2acc8d6..7c824e82dd 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -349,7 +349,7 @@ static void VBlankCB_UpdateClockGraphics(void) gMain.oamBuffer[0] = sClockOamData; gMain.oamBuffer[0].x = 112; - gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8;; + gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8; if (gSaveFailedClockInfo[CLOCK_RUNNING] != FALSE) { diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 8d959465f7..4e85953fdc 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -282,7 +282,7 @@ static void HflipTile(unsigned char * tile, int bitDepth) for (i = 0; i < 8; i++) { SWAP_NYBBLES(&tile[4 * i + 0], &tile[4 * i + 3]); - SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]);; + SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]); } break; case 8: From b401e2eb86dba8a48c12fec75c2201de7fb1ec63 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Mon, 27 Jul 2020 21:22:16 -0500 Subject: [PATCH 23/85] Fix naming style of function --- include/battle_util.h | 2 +- src/battle_util.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index e145a5e9ca..157ba8eb6d 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -52,7 +52,7 @@ void CancelMultiTurnMoves(u8 battlerId); bool8 WasUnableToUseMove(u8 battlerId); void PrepareStringBattle(u16 stringId, u8 battlerId); void ResetSentPokesToOpponentValue(void); -void OpponentSwitchInResetSentPokesToOpponent(u8 battlerId); +void OpponentSwitchInResetSentPokesToOpponentValue(u8 battlerId); void UpdateSentPokesToOpponentValue(u8 battlerId); void BattleScriptPush(const u8* bsPtr); void BattleScriptPushCursor(void); diff --git a/src/battle_util.c b/src/battle_util.c index a579f7edd6..89fe95fbc4 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -259,7 +259,7 @@ void ResetSentPokesToOpponentValue(void) gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits; } -void OpponentSwitchInResetSentPokesToOpponent(u8 battler) +void OpponentSwitchInResetSentPokesToOpponentValue(u8 battler) { s32 i = 0; u32 bits = 0; @@ -283,7 +283,7 @@ void UpdateSentPokesToOpponentValue(u8 battler) { if (GetBattlerSide(battler) == B_SIDE_OPPONENT) { - OpponentSwitchInResetSentPokesToOpponent(battler); + OpponentSwitchInResetSentPokesToOpponentValue(battler); } else { @@ -1250,7 +1250,7 @@ bool8 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState = 3; break; case 2: - OpponentSwitchInResetSentPokesToOpponent(gBattlerFainted); + OpponentSwitchInResetSentPokesToOpponentValue(gBattlerFainted); if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount) gBattleStruct->faintedActionsState = 3; else From b22709ee3df4c4c7b8511fd5a824b5796df84d9a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 27 Jul 2020 16:31:36 -0400 Subject: [PATCH 24/85] More slot machine data documentation --- graphics/slot_machine/digital_display.png | Bin 1050 -> 1050 bytes ...85A843E.pal => flashing_lights_inside.pal} | 0 ...85A845E.pal => flashing_lights_middle.pal} | 0 ...5A847E.pal => flashing_lights_outside.pal} | 0 .../{slots_layout.bin => info_box.bin} | Bin .../{85A84B0.pal => pokeball_shining_0.pal} | 0 .../{85A84D0.pal => pokeball_shining_1.pal} | 0 .../{85A84F0.pal => pokeball_shining_2.pal} | 0 .../reel_background.bin} | 0 graphics/slot_machine/reel_pikachu.png | Bin 2210 -> 0 bytes .../reel_time_number_gap.png} | Bin .../{85A96E0.bin => reel_time_window.bin} | 0 graphics/slot_machine/spr6.pal | 19 - include/graphics.h | 19 +- src/data/graphics/slot_machine.h | 24 +- src/slot_machine.c | 2066 +++++++++-------- 16 files changed, 1134 insertions(+), 994 deletions(-) rename graphics/slot_machine/{85A843E.pal => flashing_lights_inside.pal} (100%) rename graphics/slot_machine/{85A845E.pal => flashing_lights_middle.pal} (100%) rename graphics/slot_machine/{85A847E.pal => flashing_lights_outside.pal} (100%) rename graphics/slot_machine/{slots_layout.bin => info_box.bin} (100%) rename graphics/slot_machine/{85A84B0.pal => pokeball_shining_0.pal} (100%) rename graphics/slot_machine/{85A84D0.pal => pokeball_shining_1.pal} (100%) rename graphics/slot_machine/{85A84F0.pal => pokeball_shining_2.pal} (100%) rename graphics/{unknown/unknown_DD19F8.bin => slot_machine/reel_background.bin} (100%) delete mode 100644 graphics/slot_machine/reel_pikachu.png rename graphics/{unknown/unknown_DD1A18.png => slot_machine/reel_time_number_gap.png} (100%) rename graphics/slot_machine/{85A96E0.bin => reel_time_window.bin} (100%) delete mode 100644 graphics/slot_machine/spr6.pal diff --git a/graphics/slot_machine/digital_display.png b/graphics/slot_machine/digital_display.png index 4ba92175f0212cfe89e001b601e1455032f13608..8295aeca2df776a26103a917108526eda35451a3 100644 GIT binary patch delta 63 tcmbQmF^gk@rb$v#)c?H#%?u1j9R=X%Kf`~lh=GAYXa2U08)Nq}0|0uv9p?Z5 delta 63 zcmbQmF^gk@rpcN$NB@Js(Qoe<_Re8Q@?!X(6|~pOvD?zn^4%JSHB%U}9RD-?pE6}m TR8*FxrsK9lOI$a`?qvo5ARHf1 diff --git a/graphics/slot_machine/85A843E.pal b/graphics/slot_machine/flashing_lights_inside.pal similarity index 100% rename from graphics/slot_machine/85A843E.pal rename to graphics/slot_machine/flashing_lights_inside.pal diff --git a/graphics/slot_machine/85A845E.pal b/graphics/slot_machine/flashing_lights_middle.pal similarity index 100% rename from graphics/slot_machine/85A845E.pal rename to graphics/slot_machine/flashing_lights_middle.pal diff --git a/graphics/slot_machine/85A847E.pal b/graphics/slot_machine/flashing_lights_outside.pal similarity index 100% rename from graphics/slot_machine/85A847E.pal rename to graphics/slot_machine/flashing_lights_outside.pal diff --git a/graphics/slot_machine/slots_layout.bin b/graphics/slot_machine/info_box.bin similarity index 100% rename from graphics/slot_machine/slots_layout.bin rename to graphics/slot_machine/info_box.bin diff --git a/graphics/slot_machine/85A84B0.pal b/graphics/slot_machine/pokeball_shining_0.pal similarity index 100% rename from graphics/slot_machine/85A84B0.pal rename to graphics/slot_machine/pokeball_shining_0.pal diff --git a/graphics/slot_machine/85A84D0.pal b/graphics/slot_machine/pokeball_shining_1.pal similarity index 100% rename from graphics/slot_machine/85A84D0.pal rename to graphics/slot_machine/pokeball_shining_1.pal diff --git a/graphics/slot_machine/85A84F0.pal b/graphics/slot_machine/pokeball_shining_2.pal similarity index 100% rename from graphics/slot_machine/85A84F0.pal rename to graphics/slot_machine/pokeball_shining_2.pal diff --git a/graphics/unknown/unknown_DD19F8.bin b/graphics/slot_machine/reel_background.bin similarity index 100% rename from graphics/unknown/unknown_DD19F8.bin rename to graphics/slot_machine/reel_background.bin diff --git a/graphics/slot_machine/reel_pikachu.png b/graphics/slot_machine/reel_pikachu.png deleted file mode 100644 index 29b004c84ca8ce20efbf5d4158ca76bd59548456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2210 zcmV;T2wnGyP)>+000Or zNkl3~ahr?54zBi3npgtV__~D&R z!UrbU#OKHm4=jL5oG^VN0*GB8SW^fDu!Bk|2Ef>%20%p-$XL0+3}c5C*2@S1h{e$b zbnCminnw{11Bi48OlM7gCII+@{Xm~#rgE+WfY;HD{?fExM4b5(yQUy{Q4~u86gTTm z5I+}G?f^1oVq>CtVG4~%<^dZUfFgj*nE9fv`iN?2vl{(GY19V8{J} zhcXt=W*oQxn5MXYUzm}Kg_i=BvM5YH7YO*nFbRs{{c{sR2(k8wy3_=X0|HDE+q5iJ zW)OJbe3zEO%!Uhq5UI2QxEuof*nXewW+-|kb5{V<4I%D#^%CoqqV8!g9?`Y*64Bf!g;j~NF>48kZ7jsd|N&ZUIiXF-&5z~QN9F;XtV z%b{)o-a))PRV}a{)F}hhb)+2z$>%V_rkogyG5`Jo0HqEAFgF&&UF&hBFSX>5B(IcO zxNAKLFA`eV6zaccLC8OV(!$1D5TmP#)NyVshO^2w!i#+m8js@mhXz0oB7wCaQ!D;q zt65Hn#$Z6%0SODF9WZnl7Kkrdkjet57H}L!ZN8efEyVlva4@xj(Bf^RnbCt98uix( zf>E4K{TCQu=hb)iVW~CTi-0}N%BC8JNv{0>^l{q@-+@#xB>Y}zq8%vTU=ShlW*kyZ zSi`L_>W@Us84OZ?>ylXifPJj3ONzNB>Pi!O9AZwp13;qbCTX*un^kNQLz{pk1yRMZ|(Ml;tPgt$ycKQ#XdP_$BKg(3i=Cd39; zR04{3{WcJozade67m#YAy(sM$ObEToR`wrUWsw`CK}%D7Cds6wHa-UKAw{SKjYL`M zRe0l>6pB1I2Lo|-)Jy*mAXRG)26jiIk`B=6fLI$TcYsAFh-)LWLtqMB$z}|Iz9!XT zQd@O(7Hb3~DSL|j)PSpt!R^m_knqoA&eTtW#}8oK!R?1ntgimG|45@K;c<^Uc)xzK zLm*MOY2JU5?1`4F8YRijk~`6wEMi3~^}X5($sLMK;ik}w_^&hntXTR;D8Q5@IlsERGG;zp))xx zmAgxd8QA9&u)2>)Zg)+~wcK(cc3t4z$SLe=`M;I12~i)e1GxFU4r~tBo8b4<{Qxsp zHQfNX;$H)3Uw9RGn4#nhKB>{;_EP}&Q2yocN3>FXpk2Ytr?}%TmqH)6wU4Sx5Z4xJ=md$o`W$P{4+zDhGTIf*v5?c>;q0s(}NWU}NxZ97hsUME$6phVE>*nJ={%pE45Uzz* zZPJtdK0d9I{($JBmtsj#-hPZvQc52{X|DhNT`$Q}E)fuer!H?le1!D(M*{LBL1lDS z`b;^$Cb)Cje#`cQK^O@?zKtG@zoF zq*Qsa8g>B&z#~?`Z{2J4M^jR)Aw%1 zh~1gH7&tYxmp1<9aWwU;2MJAmh8Cpa>gj$1ZH%=UY>4e8e`AwK#tvV(Q>=cGqX4k} zs4I#&f*JzJ2oSuUYP^=OE8%ejcp1A}83V!*hxG;TZ#;bgaJ7vf8U?tUkzS#fFRs7f zvGLw0(5ZFpN*;J=&vh;U^}$}xELcEa&lp?h-<>o-{n?nkDG!iUi_8U%jM-(1mhm~A z6)6O`<5{DsYt%lJ)VuYC5b&;Xi_E6nT*upYBW`~=GQ?JNZ&&PpohUC#xFzSJH1yM_ z;KqMu;TE8b%x!l*)u%M8VVD!vn{$6OTI4?h820!?Ce#3#o)%MQWv<9%YJhw|s*a9J z3G}NX#vW5EkS+#>G-m+)|YOaC^xLL%`1xIKm0LCe)g<|QwAVIbV z0de!Zq(iNx=W}R{#W3|f0R;if?_dadSUgjJ0=>?W0pep=RBBrwz|~K}oUW6Kl~NbZ kYA}z0u0Af=sQ;||139l>8&3HO#{d8T07*qoM6N<$f=8MSssI20 diff --git a/graphics/unknown/unknown_DD1A18.png b/graphics/slot_machine/reel_time_number_gap.png similarity index 100% rename from graphics/unknown/unknown_DD1A18.png rename to graphics/slot_machine/reel_time_number_gap.png diff --git a/graphics/slot_machine/85A96E0.bin b/graphics/slot_machine/reel_time_window.bin similarity index 100% rename from graphics/slot_machine/85A96E0.bin rename to graphics/slot_machine/reel_time_window.bin diff --git a/graphics/slot_machine/spr6.pal b/graphics/slot_machine/spr6.pal deleted file mode 100644 index 4f74a30792..0000000000 --- a/graphics/slot_machine/spr6.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -98 98 90 -255 189 16 -131 0 0 -197 65 16 -197 65 16 -197 65 16 -197 65 16 -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/include/graphics.h b/include/graphics.h index ab2b299c05..106798892f 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4832,7 +4832,7 @@ extern const u8 gSlotMachineReelTimeNumber3[]; extern const u8 gSlotMachineReelTimeNumber4[]; extern const u8 gSlotMachineReelTimeNumber5[]; extern const u8 gSlotMachineReelTimeShadow[]; -extern const u8 gUnknown_08DD1A18[]; +extern const u8 gSlotMachineReelTimeNumberGap_Gfx[]; extern const u8 gSlotMachineReelTimeBolt0[]; extern const u8 gSlotMachineReelTimeBolt1[]; extern const u8 gSlotMachineReelTimePikaAura[]; @@ -4858,19 +4858,18 @@ extern const u8 gSlotMachineNumber6Tiles[]; extern const u8 gSlotMachineNumber7Tiles[]; extern const u8 gSlotMachineNumber8Tiles[]; extern const u8 gSlotMachineNumber9Tiles[]; -extern const u8 gUnknown_08DD19F8[]; +extern const u8 gSlotMachineReelBackground_Tilemap[]; extern const u32 gSlotMachineMenu_Gfx[]; extern const u16 gSlotMachineMenu_Tilemap[]; -extern const u16 gUnknown_08DCEC70[]; +extern const u16 gSlotMachineInfoBox_Tilemap[]; extern const u16 gSlotMachineMenu_Pal[]; -extern const u16 gUnknown_08DCF230[]; -extern const u16 gUnknown_08DCF170[]; -extern const u16 gUnknown_08DCF1B0[]; +extern const u16 gSlotMachineReelSymbols_Pal[]; +extern const u16 gSlotMachineReelTimeMisc_Pal[]; +extern const u16 gSlotMachineReelTimeMachine_Pal[]; +extern const u16 gSlotMachineMisc_Pal[]; +extern const u16 gSlotMachineReelTimeExplosion_Pal[]; extern const u16 gSlotMachineDigitalDisplay_Pal[]; -extern const u16 gUnknown_08DCF1F0[]; -extern const u16 gUnknown_08DCF210[]; -extern const u16 gUnknown_08DCF230[]; -extern const u16 gUnknown_08DCF190[]; +extern const u16 gSlotMachineReelTimePikachu_Pal[]; extern const u32 gBattleAnimBgTilemap_Sandstorm[]; extern const u32 gBattleAnimBgImage_Sandstorm[]; diff --git a/src/data/graphics/slot_machine.h b/src/data/graphics/slot_machine.h index 94ab989e28..6500ad7f3b 100644 --- a/src/data/graphics/slot_machine.h +++ b/src/data/graphics/slot_machine.h @@ -2,22 +2,16 @@ const u16 gSlotMachineMenu_Pal[] = INCBIN_U16("graphics/slot_machine/menu.gbapal const u32 gSlotMachineMenu_Gfx[] = INCBIN_U32("graphics/slot_machine/menu.4bpp.lz"); const u16 gSlotMachineMenu_Tilemap[] = INCBIN_U16("graphics/slot_machine/menu.bin"); -const u16 gUnknown_08DCEC70[] = INCBIN_U16("graphics/slot_machine/slots_layout.bin"); - -const u16 gUnknown_08DCF170[] = INCBIN_U16("graphics/slot_machine/reel_symbols/1.gbapal"); - -const u16 gUnknown_08DCF190[] = INCBIN_U16("graphics/slot_machine/reel_pikachu.gbapal"); - -const u16 gUnknown_08DCF1B0[] = INCBIN_U16("graphics/slot_machine/shadow.gbapal"); +const u16 gSlotMachineInfoBox_Tilemap[] = INCBIN_U16("graphics/slot_machine/info_box.bin"); +const u16 gSlotMachineReelSymbols_Pal[] = INCBIN_U16("graphics/slot_machine/reel_symbols/1.gbapal"); +const u16 gSlotMachineReelTimePikachu_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_pikachu.gbapal"); +const u16 gSlotMachineReelTimeMisc_Pal[] = INCBIN_U16("graphics/slot_machine/shadow.gbapal"); +const u16 gSlotMachineReelTimeMachine_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_machine.gbapal"); +const u16 gSlotMachineMisc_Pal[] = INCBIN_U16("graphics/slot_machine/smoke.gbapal"); +const u16 gSlotMachineReelTimeExplosion_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_explosion/0.gbapal"); const u16 gSlotMachineDigitalDisplay_Pal[] = INCBIN_U16("graphics/slot_machine/digital_display.gbapal"); -const u16 gUnknown_08DCF1F0[] = INCBIN_U16("graphics/slot_machine/smoke.gbapal"); // also duck and pika aura - -const u16 gUnknown_08DCF210[] = INCBIN_U16("graphics/slot_machine/reel_time_explosion/0.gbapal"); - -const u16 gUnknown_08DCF230[] = INCBIN_U16("graphics/slot_machine/spr6.gbapal"); - const u8 gSlotMachineReelSymbol1Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/1.4bpp"); const u8 gSlotMachineReelSymbol2Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/2.4bpp"); const u8 gSlotMachineReelSymbol3Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/3.4bpp"); @@ -59,5 +53,5 @@ const u8 gSlotMachineReelTimeExplosion1[] = INCBIN_U8("graphics/slot_machine/ree const u8 gSlotMachineReelTimeShadow[] = INCBIN_U8("graphics/slot_machine/shadow.4bpp"); const u8 gSlotMachineReelTimePikaAura[] = INCBIN_U8("graphics/slot_machine/pika_aura.4bpp"); -const u8 gUnknown_08DD19F8[] = INCBIN_U8("graphics/unknown/unknown_DD19F8.bin"); -const u8 gUnknown_08DD1A18[] = INCBIN_U8("graphics/unknown/unknown_DD1A18.4bpp"); +const u8 gSlotMachineReelBackground_Tilemap[] = INCBIN_U8("graphics/slot_machine/reel_background.bin"); +const u8 gSlotMachineReelTimeNumberGap_Gfx[] = INCBIN_U8("graphics/slot_machine/reel_time_number_gap.4bpp"); diff --git a/src/slot_machine.c b/src/slot_machine.c index 517cbb1431..a02950a695 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -31,8 +31,8 @@ #define SLOTMACHINE_GFX_TILES 233 #define MAX_BET 3 -#define REEL_NUM_TAGS 21 -#define REEL_TAG_HEIGHT 24 +#define SYMBOLS_PER_REEL 21 +#define REEL_SYMBOL_HEIGHT 24 // Lucky Flags #define LUCKY_BIAS_REPLAY (1 << 0) @@ -44,13 +44,40 @@ #define LUCKY_BIAS_MIXED_777 (1 << 6) #define LUCKY_BIAS_777 (1 << 7) -#define SLOT_MACHINE_TAG_7_RED 0 -#define SLOT_MACHINE_TAG_7_BLUE 1 -#define SLOT_MACHINE_TAG_AZURILL 2 -#define SLOT_MACHINE_TAG_LOTAD 3 -#define SLOT_MACHINE_TAG_CHERRY 4 -#define SLOT_MACHINE_TAG_POWER 5 -#define SLOT_MACHINE_TAG_REPLAY 6 +#define GFXTAG_7_RED 0 +#define GFXTAG_7_BLUE 1 +#define GFXTAG_AZURILL 2 +#define GFXTAG_LOTAD 3 +#define GFXTAG_CHERRY 4 +#define GFXTAG_POWER 5 +#define GFXTAG_REPLAY 6 +#define GFXTAG_NUM_0 7 +#define GFXTAG_NUM_1 8 +#define GFXTAG_NUM_2 9 +#define GFXTAG_NUM_3 10 +#define GFXTAG_NUM_4 11 +#define GFXTAG_NUM_5 12 +#define GFXTAG_NUM_6 13 +#define GFXTAG_NUM_7 14 +#define GFXTAG_NUM_8 15 +#define GFXTAG_NUM_9 16 +#define GFXTAG_REEL_BG 17 +#define GFXTAG_STOP 18 +#define GFXTAG_BONUS 19 +#define GFXTAG_BIG 20 +#define GFXTAG_REG 21 + +#define GFXTAG_SYMBOLS_START (GFXTAG_7_RED) +#define GFXTAG_NUMBERS_START (GFXTAG_NUM_0) + +#define PALTAG_REEL 0 +#define PALTAG_REEL_TIME_PIKACHU 1 +#define PALTAG_REEL_TIME_MISC 2 +#define PALTAG_REEL_TIME_MACHINE 3 +#define PALTAG_MISC 4 +#define PALTAG_EXPLOSION 5 +#define PALTAG_DIG_DISPLAY 6 +#define PALTAG_PIKA_AURA 7 #define SLOT_MACHINE_MATCHED_1CHERRY 0 #define SLOT_MACHINE_MATCHED_2CHERRY 1 @@ -68,6 +95,15 @@ #define RIGHT_REEL 2 #define NUM_REELS 3 +enum { + MATCH_MIDDLE_ROW, + MATCH_TOP_ROW, + MATCH_BOTTOM_ROW, + MATCH_NWSE_DIAG, + MATCH_NESW_DIAG, + NUM_MATCH_LINES, +}; + enum { SLOT_ACTION_UNFADE, SLOT_ACTION_1, @@ -133,6 +169,46 @@ enum { NUM_DIG_DISPLAY_SPRITES }; +// IDs used by the digital display to set coords and callbacks for its sprites +enum { + DIG_DISPINFO_INSERT, + DIG_DISPINFO_STOP_S, + DIG_DISPINFO_STOP_T, + DIG_DISPINFO_STOP_O, + DIG_DISPINFO_STOP_P, + DIG_DISPINFO_A_BUTTON_STOP, + DIG_DISPINFO_POKE_BALL_ROCKING, + DIG_DISPINFO_WIN, + DIG_DISPINFO_LOSE, + DIG_DISPINFO_SMOKE_NW, + DIG_DISPINFO_SMOKE_NE, + DIG_DISPINFO_SMOKE_SW, + DIG_DISPINFO_SMOKE_SE, + DIG_DISPINFO_REEL, + DIG_DISPINFO_TIME, + DIG_DISPINFO_NUMBER, + DIG_DISPINFO_DPAD, + DIG_DISPINFO_POKE_BALL_SHINING, + DIG_DISPINFO_REG_R, + DIG_DISPINFO_REG_E, + DIG_DISPINFO_REG_G, + DIG_DISPINFO_REG_BONUS_B, + DIG_DISPINFO_REG_BONUS_O, + DIG_DISPINFO_REG_BONUS_N, + DIG_DISPINFO_REG_BONUS_U, + DIG_DISPINFO_REG_BONUS_S, + DIG_DISPINFO_BIG_B, + DIG_DISPINFO_BIG_I, + DIG_DISPINFO_BIG_G, + DIG_DISPINFO_BIG_BONUS_B, + DIG_DISPINFO_BIG_BONUS_O, + DIG_DISPINFO_BIG_BONUS_N, + DIG_DISPINFO_BIG_BONUS_U, + DIG_DISPINFO_BIG_BONUS_S, + DIG_DISPINFO_A_BUTTON_START +}; + +// IDs for digital display "scenes", i.e. each of the screens it can show made up of sprites enum { DIG_DISPLAY_INSERT_BET, DIG_DISPLAY_STOP_REEL, @@ -168,16 +244,16 @@ struct SlotMachine /*0x22*/ u16 reelPixelOffsetsWhileStopping[NUM_REELS]; /*0x28*/ s16 reelPositions[NUM_REELS]; /*0x2E*/ s16 reelExtraTurns[3]; - /*0x34*/ s16 winnerRows[3]; - /*0x3A*/ u8 slotReelTasks[3]; - /*0x3D*/ u8 unkTaskPointer3D; - /*0x3E*/ u8 unkTaskPointer3E; + /*0x34*/ s16 winnerRows[NUM_REELS]; + /*0x3A*/ u8 slotReelTasks[NUM_REELS]; + /*0x3D*/ u8 digDisplayTaskId; + /*0x3E*/ u8 pikaPowerBoltTaskId; /*0x3F*/ u8 reelTimePikachuSpriteId; - /*0x40*/ u8 unk40; + /*0x40*/ u8 reelTimeNumberGapSpriteId; /*0x41*/ u8 reelTimeExplosionSpriteId; /*0x42*/ u8 reelTimeBrokenMachineSpriteId; /*0x43*/ u8 reelTimeSmokeSpriteId; - /*0x44*/ u8 unk44[5]; + /*0x44*/ u8 flashMatchLineSpriteIds[NUM_MATCH_LINES]; /*0x49*/ u8 reelTimeMachineSpriteIds[2]; /*0x49*/ u8 reelTimeNumberSpriteIds[3]; /*0x4E*/ u8 reelTimeShadowSpriteIds[2]; @@ -195,8 +271,8 @@ struct SlotMachine struct DigitalDisplaySprite { /*0x00*/ u8 spriteTemplateId; - /*0x01*/ u8 unk01; - /*0x02*/ s16 unk02; + /*0x01*/ u8 dispInfoId; + /*0x02*/ s16 spriteId; }; static void CB2_SlotMachineSetup(void); @@ -214,12 +290,12 @@ static void SlotMachineSetup_4_0(void); static void SlotMachineSetup_5_0(void); static void SlotMachineSetup_6_0(void); static void SlotMachineSetup_6_1(void); -static void SlotMachineSetup_AllocDigDisplayGfx(void); -static void SlotMachineSetup_SetDigDisplayImagePtrs(void); +static void AllocDigitalDisplayGfx(void); +static void SetDigitalDisplayImagePtrs(void); static void SlotMachineSetup_10_0(void); static void SlotMachineSetupGameplayTasks(void); static void GameplayTasks_Slots(void); -static void sub_8104DA4(void); +static void DestroyDigitalDisplayScene(void); static void RunSlotActions(u8 taskId); static bool8 SlotAction_UnfadeScreen(struct Task *task); static bool8 SlotAction_WaitForUnfade(struct Task *task); @@ -296,32 +372,32 @@ static void DecideReelTurns_NoBiasTag_Reel3(void); static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void); static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void); static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void); -static void sub_8103C14(u8 a0); -static void sub_8103C48(u8 taskId); -static void LoadBetTiles(u8 a0); -static void sub_8103C78(struct Task *task, u8 taskId); -static void sub_8103CAC(struct Task *task, u8 taskId); -static void sub_8103CC8(struct Task *task, u8 taskId); -static void sub_8103D8C(u8 a0); -static void sub_8103DC8(void); -static void sub_8103E04(u8 a0); -static bool8 sub_8103E38(void); -static bool8 sub_8103E7C(void); -static bool8 sub_8103EAC(u8 spriteId); -static void sub_8103EE4(struct Sprite *sprite); -static void sub_8103F70(void); -static bool8 sub_8103FA0(void); -static void sub_8103FE8_(u8 taskId); -static void GameplayTask_PikaPower(void); -static void DisplayPikaPower(u8 pikaPower); +static void sub_8103C14(u8); +static void sub_8103C48(u8); +static void LightenBetTiles(u8); +static void sub_8103C78(struct Task *, u8); +static void sub_8103CAC(struct Task *, u8); +static void sub_8103CC8(struct Task *, u8); +static void DarkenBetTiles(u8); +static void CreateInvisibleFlashMatchLineSprites(void); +static void FlashMatchLine(u8); +static bool8 IsMatchLineDoneFlashingBeforePayout(void); +static bool8 TryStopMatchLinesFlashing(void); +static bool8 TryStopMatchLineFlashing(u8); +static void SpriteCB_FlashMatchingLines(struct Sprite *); +static void FlashSlotMachineLights(void); +static bool8 TryStopSlotMachineLights(void); +static void Task_FlashSlotMachineLights(u8); +static void CreatePikaPowerBoltTask(void); +static void DisplayPikaPower(u8); static bool8 sub_81040C8(void); -static void Task_CreatePikaPowerBolt(u8 taskId); -static void nullsub_68(struct Task *task); -static void sub_810411C(struct Task *task); -static void sub_8104144(struct Task *task); -static void sub_81041AC(struct Task *task); -static void ClearTaskDataFields_2orHigher(struct Task *task); -static void sub_810423C(u8 pikaPower); +static void Task_CreatePikaPowerBolt(u8); +static void nullsub_68(struct Task *); +static void sub_810411C(struct Task *); +static void sub_8104144(struct Task *); +static void sub_81041AC(struct Task *); +static void ClearTaskDataFields_2orHigher(struct Task *); +static void LoadPikaPowerMeter(u8 ); static void BeginReeltime(void); static bool8 IsFinalTask_RunReelTimeActions(void); static void RunReeltimeActions(u8 taskId); @@ -343,25 +419,25 @@ static void ReeltimeAction14(struct Task *); static void ReeltimeAction15(struct Task *); static void ReeltimeAction16(struct Task *); static void ReeltimeAction17(struct Task *); -static void sub_8104A40(s16, s16); -static void sub_8104A88(s16); +static void LoadReelTimeWindowTilemap(s16, s16); +static void ClearReelTimeWindowTilemap(s16); static void OpenInfoBox(u8); static bool8 IsInfoBoxClosed(void); static void RunInfoBoxActions(u8 taskId); static void InfoBox_FadeIn(struct Task *task); static void InfoBox_WaitForFade(struct Task *task); -static void InfoBox_8104B80(struct Task *task); +static void InfoBox_DrawWindow(struct Task *task); static void InfoBox_AwaitPlayerInput(struct Task *task); static void InfoBox_AddText(struct Task *task); -static void InfoBox_8104BFC(struct Task *task); -static void InfoBox_812DE14(struct Task *task); -static void InfoBox_812DE30(struct Task *task); +static void InfoBox_LoadPikaPowerMeter(struct Task *task); +static void InfoBox_LoadSlotMachineTilemap(struct Task *task); +static void InfoBox_CreateDigitalDisplay(struct Task *task); static void InfoBox_FreeTask(struct Task *task); -static void sub_8104C5C(void); +static void CreateDigitalDisplayTask(void); static void CreateDigitalDisplayScene(u8 arg0); -static bool8 sub_8104E18(void); -static void nullsub_69(struct Task *task); -static void sub_8104E74_(u8 taskId); +static bool8 IsDigitalDisplayAnimFinished(void); +static void DigitalDisplay_Idle(struct Task *task); +static void Task_DigitalDisplay(u8 taskId); static void CreateReelSymbolSprites(void); static void CreateCreditPayoutNumberSprites(void); static void CreateCoinNumberSprite(s16 x, s16 y, u8 a2, s16 a3); @@ -372,55 +448,55 @@ static void CreateReelTimeMachineSprites(void); static void CreateBrokenReelTimeMachineSprite(void); static void CreateReelTimeNumberSprites(void); static void CreateReelTimeShadowSprites(void); -static void sub_810545C(void); +static void CreateReelTimeNumberGapSprite(void); static void DestroyReelTimeMachineSprites(void); static void DestroyReelTimeShadowSprites(void); static void DestroyBrokenReelTimeMachineSprite(void); static void CreateReelTimeBoltSprites(void); -static void sub_8105688(s16 a0); +static void SetReelTimeBoltDelay(s16 a0); static void DestroyReelTimeBoltSprites(void); static void CreateReelTimePikachuAuraSprites(void); -static void sub_81057E8(s16 a0); +static void SetReelTimePikachuAuraFlashDelay(s16 a0); static void DestroyReelTimePikachuAuraSprites(void); static void CreateReelTimeExplosionSprite(void); static void DestroyReelTimeExplosionSprite(void); static void CreateReelTimeDuckSprites(void); static void DestroyReelTimeDuckSprites(void); static void CreateReelTimeSmokeSprite(void); -static bool8 sub_8105ACC(void); +static bool8 IsReelTimeSmokeAnimFinished(void); static void DestroyReelTimeSmokeSprite(void); static u8 CreatePikaPowerBoltSprite(s16 x, s16 y); -static void sub_8105B88(u8 spriteId); +static void DestroyPikaPowerBoltSprite(u8 spriteId); static u8 CreateDigitalDisplaySprite(u8 templateIdx, void (*callback)(struct Sprite*), s16 x, s16 y, s16 a4); static void sub_81063C0(void); -static void sub_8106404(void); -static void sub_8106448(void); +static void LoadReelBackground(void); +static void LoadMenuGfx(void); static void sub_81064B8(void); -static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4); -static void sub_81065DC(void); +static void SetReelButtonTilemap(s16, u16, u16, u16, u16); +static void LoadInfoBoxTilemap(void); static void sub_812F958(void); -static void sub_812F968(void); -static void LoadSlotMachineWheelOverlay(void); +static void LoadSlotMachineMenuTilemap(void); +static void LoadSlotMachineReelOverlay(void); static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2); -static void sub_8105C64(struct Sprite *sprite); -static void sub_8105F54(struct Sprite *sprite); -static void sub_8105F9C(struct Sprite *sprite); -static void sub_8105EB4(struct Sprite *sprite); -static void sub_8105C6C(struct Sprite *sprite); -static void sub_8105CF0(struct Sprite *sprite); -static void sub_8105D08(struct Sprite *sprite); -static void sub_8105D20(struct Sprite *sprite); -static void sub_8105D3C(struct Sprite *sprite); -static void sub_8105DA4(struct Sprite *sprite); -static void sub_8105E08(struct Sprite *sprite); -static void sub_8106058(struct Sprite *sprite); -static void sub_81060FC(struct Sprite *sprite); -static void sub_81061C8(struct Sprite *sprite); -static void sub_8106230(struct Sprite *sprite); -static void sub_810639C(void); -static void sub_8106364(void); -static void sub_8106370(void); -static void nullsub_70(void); +static void SpriteCB_DigitalDisplay_Static(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_Stop(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_AButtonStop(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_PokeballRocking(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_Smoke(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_SmokeNE(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_SmokeSW(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_SmokeSE(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_RegBonus(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_BigBonus(struct Sprite *sprite); +static void SpriteCB_DigitalDisplay_AButtonStart(struct Sprite *sprite); +static void EndDigitalDisplayScene_InsertBet(void); +static void EndDigitalDisplayScene_StopReel(void); +static void EndDigitalDisplayScene_Win(void); +static void EndDigitalDisplayScene_Dummy(void); static void SpriteCB_ReelSymbol(struct Sprite *sprite); static void SpriteCB_CoinNumber(struct Sprite *sprite); static void SpriteCB_ReelTimePikachu(struct Sprite *sprite); @@ -433,13 +509,13 @@ static void SpriteCB_ReelTimeSmoke(struct Sprite *sprite); static void SpriteCB_PikaPowerBolt(struct Sprite *sprite); // Ewram variables -static EWRAM_DATA u16 *sUnknown_0203AAC8 = NULL; +static EWRAM_DATA u16 *sMenuGfx = NULL; static EWRAM_DATA u16 *sSelectedPikaPowerTile = NULL; -static EWRAM_DATA u16 *sUnknown_0203AAD0 = NULL; +static EWRAM_DATA u16 *sReelOverlay_Tilemap = NULL; static EWRAM_DATA u8 *sDigitalDisplayGfxPtr = NULL; static EWRAM_DATA u8 *sReelTimeGfxPtr = NULL; -static EWRAM_DATA u16 *sUnknown_0203AADC = NULL; -static EWRAM_DATA u8 *sUnknown_0203AAE0 = NULL; +static EWRAM_DATA u16 *sReelButtonPress_Tilemap = NULL; +static EWRAM_DATA u8 *sReelBackground_Gfx = NULL; static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimePikachu = NULL; static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimeMachineAntennae = NULL; static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimeMachine = NULL; @@ -458,8 +534,8 @@ static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Smoke = NU static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Number = NULL; static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Pokeball = NULL; static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_DPad = NULL; -static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB2C = NULL; -static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL; // Mix of digital display spritesheets and reel spritesheets +static EWRAM_DATA struct SpriteSheet *sReelBackgroundSpriteSheet = NULL; +static EWRAM_DATA struct SpriteSheet *sSlotMachineSpritesheetsPtr = NULL; static EWRAM_DATA struct SlotMachine *sSlotMachine = NULL; // IWRAM bss @@ -472,28 +548,26 @@ static const u8 gLuckyRoundProbabilities[][3]; static const u8 gBiasTags[]; static const u16 gLuckyFlagSettings_Top3[]; static const u16 gLuckyFlagSettings_NotTop3[]; -static const s16 gUnknown_083ECE7E[][2]; -static const SpriteCallback gUnknown_083ECF0C[]; +static const s16 sDigitalDisplay_SpriteCoords[][2]; +static const SpriteCallback sDigitalDisplay_SpriteCallbacks[]; static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES]; static const struct SubspriteTable *const sSubspriteTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES]; static const struct SpriteTemplate sSpriteTemplate_PikaPowerBolt; static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke; static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck; static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion; -static const u8 gUnknown_083ECC58[2]; static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura; static const u16 gProbabilityTable_SkipToReeltimeAction14[]; -static const u16 *const gUnknown_083EDE10[]; +static const u16 *const sPokeballShiningPalTable[]; static const u16 gReelIncrementTable[][2]; static const u16 gReelTimeBonusIncrementTable[]; static const u16 gSlotMatchFlags[]; static const u16 gSlotPayouts[]; -static const u8 *const gUnknown_083EDCE4; -static const u8 *const gUnknown_083EDCDC; +static const u8 *const sReelBackground_Tilemap; static const u32 sReelTimeGfx[]; -static const struct SpriteSheet gSlotMachineSpriteSheets[22]; -static const struct SpritePalette gSlotMachineSpritePalettes[]; -static const u16 *const gUnknown_083EDE20; +static const struct SpriteSheet sSlotMachineSpriteSheets[22]; +static const struct SpritePalette sSlotMachineSpritePalettes[]; +static const u16 *const sDigitalDisplay_Pal; static const s16 gInitialReelPositions[][2]; static const u8 gLuckyFlagProbabilities_Top3[][6]; static const u8 gLuckyFlagProbabilities_NotTop3[][6]; @@ -501,19 +575,19 @@ static const u8 gReeltimeProbabilities_UnluckyGame[][17]; static const u8 gReelTimeProbabilities_LuckyGame[][17]; static const u8 gSym2Match[]; static const u8 gReelTimeTags[]; -static const u8 sReelSymbols[NUM_REELS][REEL_NUM_TAGS]; -static const u8 *const gUnknown_083EDD08[]; -static const u16 *const gUnknown_083EDD1C[]; -static const u8 gUnknown_083EDD30[]; -static const u8 gBettingTilesId[][2]; -static const u8 gNumberBettingTiles[]; -static const u16 *const gUnknown_083EDDA0[]; +static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL]; +static const u16 *const sLitMatchLinePalTable[]; +static const u16 *const sDarkMatchLinePalTable[]; +static const u8 sMatchLinePalOffsets[]; +static const u8 sBetToMatchLineIds[][2]; +static const u8 sMatchLinesPerBet[]; +static const u16 *const sFlashingLightsPalTable[]; static const u16 *const gUnknown_083EDDAC; -static const u16 gReelTimeWindowTilemap[]; -static const u16 gUnknown_085A9898[]; -static void (*const gUnknown_083ED064[])(void); +static const u16 sReelTimeWindow_Tilemap[]; +static const u16 sEmptyTilemap[]; +static void (*const sDigitalDisplaySceneExitCallbacks[])(void); static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt; -static const struct SpriteTemplate gSpriteTemplate_83ED4EC; // reel time. machine number background? +static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumberGap; static const struct SpriteTemplate sSpriteTemplate_ReelTimeShadow; static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers; static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine; @@ -523,7 +597,7 @@ static const struct SpriteTemplate sSpriteTemplate_ReelBackground; static const struct SpriteTemplate sSpriteTemplate_CoinNumber; static const struct SpriteTemplate sSpriteTemplate_ReelSymbol; static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu; -static const struct SubspriteTable gSubspriteTables_83ED7D4[]; +static const struct SubspriteTable sSubspriteTable_ReelTimeNumberGap[]; static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[]; static const struct SubspriteTable sSubspriteTable_BrokenReelTimeMachine[]; static const struct SubspriteTable sSubspriteTable_ReelTimeMachineAntennae[]; @@ -584,7 +658,7 @@ static const struct WindowTemplate sWindowTemplates[] = DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate gUnknown_085A7444 = +static const struct WindowTemplate sWindowTemplate_InfoBox = { .bg = 0, .tilemapLeft = 1, @@ -699,14 +773,14 @@ void (*const DecideReelTurns_NoBiasTag_Reel3_Bets[])(void) = DecideReelTurns_NoBiasTag_Reel3_Bet3 }; -void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId) = +void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) = { sub_8103C78, sub_8103CAC, sub_8103CC8 }; -const s16 gUnknown_083ECBAC[] = {5, 10, 15}; +static const s16 sReelButtonOffsets[NUM_REELS] = {5, 10, 15}; void (*const sPikaPowerBoltFuncs[])(struct Task *task) = { @@ -716,14 +790,14 @@ void (*const sPikaPowerBoltFuncs[])(struct Task *task) = sub_81041AC }; -const u16 pikaPowerTileTable[][2] = +static const u16 sPikaPowerTileTable[][2] = { {0x9e, 0x6e}, {0x9f, 0x6f}, {0xaf, 0x7f}, }; -void (*const ReeltimeActions[])(struct Task *task) = +static void (*const sReeltimeActions[])(struct Task *task) = { ReeltimeAction0, ReeltimeAction1, @@ -746,32 +820,36 @@ void (*const ReeltimeActions[])(struct Task *task) = ReeltimeAction17 }; -const u8 gUnknown_085A75C0[] = {1, 1, 2, 2}; -const s16 gUnknown_085A75C4[] = {0x40, 0x30, 0x18, 0x08}; -const s16 gUnknown_085A75CC[] = {10, 8, 6, 4}; +static const u8 sReelTimePikachuAnimIds[] = {1, 1, 2, 2}; +static const s16 sReelTimeBoltDelays[] = {64, 48, 24, 8}; +static const s16 sPikachuAuraFlashDelays[] = {10, 8, 6, 4}; -void (*const InfoBoxActions[])(struct Task *task) = +static void (*const sInfoBoxActions[])(struct Task *task) = { + // Go to Info screen InfoBox_FadeIn, InfoBox_WaitForFade, - InfoBox_8104B80, + InfoBox_DrawWindow, InfoBox_WaitForFade, InfoBox_AddText, InfoBox_WaitForFade, + // On Info screen InfoBox_AwaitPlayerInput, + // Exit Info screen InfoBox_WaitForFade, - InfoBox_812DE14, + InfoBox_LoadSlotMachineTilemap, InfoBox_WaitForFade, - InfoBox_812DE30, + InfoBox_CreateDigitalDisplay, InfoBox_WaitForFade, - InfoBox_8104BFC, + InfoBox_LoadPikaPowerMeter, InfoBox_WaitForFade, InfoBox_FreeTask, }; -void (*const gUnknown_083ECC54[])(struct Task *task) = +// Just idles, digital display is handled by CreateDigitalDisplayScene and sprite callbacks +void (*const sDigitalDisplayActions[])(struct Task *task) = { - nullsub_69, + DigitalDisplay_Idle, }; @@ -853,11 +931,11 @@ static void CB2_SlotMachineSetup(void) gMain.state++; break; case 8: - SlotMachineSetup_AllocDigDisplayGfx(); + AllocDigitalDisplayGfx(); gMain.state++; break; case 9: - SlotMachineSetup_SetDigDisplayImagePtrs(); + SetDigitalDisplayImagePtrs(); gMain.state++; break; case 10: @@ -951,8 +1029,8 @@ static void SlotMachineSetup_2_1(void) SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG3HOFS, 0); SetGpuReg(REG_OFFSET_BG3VOFS, 0); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_OBJ); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 8)); } @@ -976,18 +1054,18 @@ static void SlotMachineSetup_0_1(void) sSlotMachine->bet = 0; sSlotMachine->currReel = 0; sSlotMachine->reelIncrement = 8; - sSlotMachine->win0h = 0xf0; - sSlotMachine->win0v = 0xa0; - sSlotMachine->winIn = 0x3f; - sSlotMachine->winOut = 0x3f; + sSlotMachine->win0h = DISPLAY_WIDTH; + sSlotMachine->win0v = DISPLAY_HEIGHT; + sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; + sSlotMachine->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; sSlotMachine->backupMapMusic = GetCurrentMapMusic(); for (i = 0; i < NUM_REELS; i++) { sSlotMachine->reelPixelOffsetsWhileStopping[i] = 0; - sSlotMachine->reelPositions[i] = gInitialReelPositions[i][sSlotMachine->luckyGame] % REEL_NUM_TAGS; - sSlotMachine->reelPixelOffsets[i] = REEL_NUM_TAGS * REEL_TAG_HEIGHT - sSlotMachine->reelPositions[i] * REEL_TAG_HEIGHT; - sSlotMachine->reelPixelOffsets[i] %= REEL_NUM_TAGS * REEL_TAG_HEIGHT; + sSlotMachine->reelPositions[i] = gInitialReelPositions[i][sSlotMachine->luckyGame] % SYMBOLS_PER_REEL; + sSlotMachine->reelPixelOffsets[i] = SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT - sSlotMachine->reelPositions[i] * REEL_SYMBOL_HEIGHT; + sSlotMachine->reelPixelOffsets[i] %= SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT; } AlertTVThatPlayerPlayedSlotMachine(GetCoins()); } @@ -1004,22 +1082,22 @@ static void SlotMachineSetup_3_0(void) static void SlotMachineSetup_4_0(void) { sSelectedPikaPowerTile = Alloc(8); - sUnknown_0203AAD0 = AllocZeroed(0xE); - sUnknown_0203AADC = AllocZeroed(8); + sReelOverlay_Tilemap = AllocZeroed(14); + sReelButtonPress_Tilemap = AllocZeroed(8); // several of these are 1 bit off from each other - sUnknown_0203AAD0[0] = 0x2051; - sUnknown_0203AAD0[1] = 0x2851; - sUnknown_0203AAD0[2] = 0x2061; - sUnknown_0203AAD0[3] = 0x2861; - sUnknown_0203AAD0[4] = 0x20BE; - sUnknown_0203AAD0[5] = 0x28BE; - sUnknown_0203AAD0[6] = 0x20BF; + sReelOverlay_Tilemap[0] = 0x2051; + sReelOverlay_Tilemap[1] = 0x2851; + sReelOverlay_Tilemap[2] = 0x2061; + sReelOverlay_Tilemap[3] = 0x2861; + sReelOverlay_Tilemap[4] = 0x20BE; + sReelOverlay_Tilemap[5] = 0x28BE; + sReelOverlay_Tilemap[6] = 0x20BF; } static void SlotMachineSetup_5_0(void) { - sub_8106448(); + LoadMenuGfx(); sub_81064B8(); sub_81063C0(); LoadMessageBoxGfx(0, 0x200, 0xF0); @@ -1031,16 +1109,16 @@ static void SlotMachineSetup_10_0(void) { CreateReelSymbolSprites(); CreateCreditPayoutNumberSprites(); - sub_8103DC8(); + CreateInvisibleFlashMatchLineSprites(); CreateReelBackgroundSprite(); } // create gameplay tasks static void SlotMachineSetupGameplayTasks(void) { - GameplayTask_PikaPower(); + CreatePikaPowerBoltTask(); GameplayTask_StopSlotReel(); - sub_8104C5C(); + CreateDigitalDisplayTask(); GameplayTasks_Slots(); } @@ -1059,7 +1137,7 @@ static void RunSlotActions(u8 taskId) static bool8 SlotAction_UnfadeScreen(struct Task *task) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); - sub_810423C(sSlotMachine->pikaPower); + LoadPikaPowerMeter(sSlotMachine->pikaPower); sSlotMachine->state++; return FALSE; } @@ -1095,7 +1173,7 @@ static bool8 SlotAction_SetSlotMachineVars(struct Task *task) // SLOT_ACTION_3 static bool8 SlotAction3(struct Task *task) { - if (sub_8104E18()) + if (IsDigitalDisplayAnimFinished()) sSlotMachine->state = SLOT_ACTION_4; return FALSE; } @@ -1125,7 +1203,7 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) if (sSlotMachine->coins - (MAX_BET - sSlotMachine->bet) >= 0) { for (i = sSlotMachine->bet; i < MAX_BET; i++) - LoadBetTiles(i); + LightenBetTiles(i); sSlotMachine->coins -= (MAX_BET - sSlotMachine->bet); sSlotMachine->bet = MAX_BET; sSlotMachine->state = SLOT_ACTION_9; @@ -1142,7 +1220,7 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) if (JOY_NEW(DPAD_DOWN) && sSlotMachine->coins != 0) { PlaySE(SE_REGI); - LoadBetTiles(sSlotMachine->bet); + LightenBetTiles(sSlotMachine->bet); sSlotMachine->coins--; sSlotMachine->bet++; } @@ -1169,7 +1247,7 @@ static bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task) static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); sSlotMachine->state = SLOT_ACTION_BET_INPUT; @@ -1188,12 +1266,12 @@ static bool8 SlotAction_GivingInformation(struct Task *task) static bool8 SlotAction9(struct Task *task) { DrawLuckyFlags(); - sub_8104DA4(); + DestroyDigitalDisplayScene(); // for each reel... - ReelTasks_SetUnkTaskData(0); - ReelTasks_SetUnkTaskData(1); - ReelTasks_SetUnkTaskData(2); + ReelTasks_SetUnkTaskData(LEFT_REEL); + ReelTasks_SetUnkTaskData(MIDDLE_REEL); + ReelTasks_SetUnkTaskData(RIGHT_REEL); IncrementDailySlotsUses(); @@ -1237,7 +1315,7 @@ static bool8 SlotAction_SetLuckySpins(struct Task *task) static bool8 SlotAction_AwaitReelStop(struct Task *task) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_JYUNI); sub_8102E1C(sSlotMachine->currReel); @@ -1277,7 +1355,7 @@ static bool8 SlotAction_CheckMatches(struct Task *task) { sSlotMachine->state = SLOT_ACTION_15; AwardPayout(); - sub_8103F70(); + FlashSlotMachineLights(); if ((sSlotMachine->netCoinLoss -= sSlotMachine->payout) < 0) { sSlotMachine->netCoinLoss = 0; @@ -1336,7 +1414,7 @@ static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task) static bool8 SlotAction_EndOfRoll(struct Task *task) { - if (sub_8103FA0()) + if (TryStopSlotMachineLights()) { sSlotMachine->state = SLOT_ACTION_19; if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE))) @@ -1377,7 +1455,7 @@ static bool8 SlotAction_MatchedPower(struct Task *task) static bool8 SlotAction18(struct Task *task) { - if (sub_8104E18()) + if (IsDigitalDisplayAnimFinished()) { sSlotMachine->state = SLOT_ACTION_19; if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) @@ -1390,9 +1468,9 @@ static bool8 SlotAction18(struct Task *task) static bool8 SlotAction_Loop(struct Task *task) { - sub_8103D8C(0); - sub_8103D8C(1); - sub_8103D8C(2); + DarkenBetTiles(0); + DarkenBetTiles(1); + DarkenBetTiles(2); sSlotMachine->state = SLOT_ACTION_2; return FALSE; } @@ -1423,9 +1501,9 @@ static bool8 SlotAction_HandleQuitGameInput(struct Task *task) if (input == 0) // player chooses to quit { ClearDialogWindowAndFrame(0, TRUE); - sub_8103D8C(0); - sub_8103D8C(1); - sub_8103D8C(2); + DarkenBetTiles(0); + DarkenBetTiles(1); + DarkenBetTiles(2); sSlotMachine->coins += sSlotMachine->bet; sSlotMachine->state = SLOT_ACTION_END; } @@ -1448,7 +1526,7 @@ static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task) static bool8 SlotAction_WaitMessage_9999Coins(struct Task *task) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); sSlotMachine->state = SLOT_ACTION_BET_INPUT; @@ -1467,7 +1545,7 @@ static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task) static bool8 SlotAction_WaitMessage_NoMoreCoins(struct Task *task) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); sSlotMachine->state = SLOT_ACTION_END; @@ -1511,15 +1589,15 @@ static bool8 SlotAction_FreeDataStructures(struct Task *task) FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); if (sImageTable_BrokenReelTimeMachine != NULL) FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); - FREE_AND_SET_NULL(sUnknown_0203AAC8); + FREE_AND_SET_NULL(sMenuGfx); FREE_AND_SET_NULL(sSelectedPikaPowerTile); - FREE_AND_SET_NULL(sUnknown_0203AAD0); + FREE_AND_SET_NULL(sReelOverlay_Tilemap); FREE_AND_SET_NULL(sDigitalDisplayGfxPtr); FREE_AND_SET_NULL(sReelTimeGfxPtr); - FREE_AND_SET_NULL(sUnknown_0203AADC); - FREE_AND_SET_NULL(sUnknown_0203AAE0); - FREE_AND_SET_NULL(sUnknown_0203AB2C); - FREE_AND_SET_NULL(sUnknown_0203AB30); + FREE_AND_SET_NULL(sReelButtonPress_Tilemap); + FREE_AND_SET_NULL(sReelBackground_Gfx); + FREE_AND_SET_NULL(sReelBackgroundSpriteSheet); + FREE_AND_SET_NULL(sSlotMachineSpritesheetsPtr); FREE_AND_SET_NULL(sSlotMachine); } @@ -1709,7 +1787,7 @@ static void CheckMatch_CenterRow(void) { sSlotMachine->payout += gSlotPayouts[match]; sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; - sub_8103E04(0); + FlashMatchLine(MATCH_MIDDLE_ROW); } } @@ -1727,7 +1805,7 @@ static void CheckMatch_TopAndBottom(void) match = SLOT_MACHINE_MATCHED_2CHERRY; sSlotMachine->payout += gSlotPayouts[match]; sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; - sub_8103E04(1); + FlashMatchLine(MATCH_TOP_ROW); } c1 = GetTagAtRest(LEFT_REEL, 3); c2 = GetTagAtRest(MIDDLE_REEL, 3); @@ -1739,7 +1817,7 @@ static void CheckMatch_TopAndBottom(void) match = SLOT_MACHINE_MATCHED_2CHERRY; sSlotMachine->payout += gSlotPayouts[match]; sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; - sub_8103E04(2); + FlashMatchLine(MATCH_BOTTOM_ROW); } } @@ -1758,7 +1836,7 @@ static void CheckMatch_Diagonals(void) sSlotMachine->payout += gSlotPayouts[match]; sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; } - sub_8103E04(3); + FlashMatchLine(MATCH_NWSE_DIAG); } c1 = GetTagAtRest(LEFT_REEL, 3); c2 = GetTagAtRest(MIDDLE_REEL, 2); @@ -1771,7 +1849,7 @@ static void CheckMatch_Diagonals(void) sSlotMachine->payout += gSlotPayouts[match]; sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; } - sub_8103E04(4); + FlashMatchLine(MATCH_NESW_DIAG); } } @@ -1779,11 +1857,11 @@ static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3) { if (c1 == c2 && c1 == c3) return gSym2Match[c1]; - if (c1 == SLOT_MACHINE_TAG_7_RED && c2 == SLOT_MACHINE_TAG_7_RED && c3 == SLOT_MACHINE_TAG_7_BLUE) + if (c1 == GFXTAG_7_RED && c2 == GFXTAG_7_RED && c3 == GFXTAG_7_BLUE) return SLOT_MACHINE_MATCHED_777_MIXED; - if (c1 == SLOT_MACHINE_TAG_7_BLUE && c2 == SLOT_MACHINE_TAG_7_BLUE && c3 == SLOT_MACHINE_TAG_7_RED) + if (c1 == GFXTAG_7_BLUE && c2 == GFXTAG_7_BLUE && c3 == GFXTAG_7_RED) return SLOT_MACHINE_MATCHED_777_MIXED; - if (c1 == SLOT_MACHINE_TAG_CHERRY) + if (c1 == GFXTAG_CHERRY) return SLOT_MACHINE_MATCHED_1CHERRY; return SLOT_MACHINE_MATCHED_NONE; } @@ -1809,7 +1887,7 @@ static void RunAwardPayoutActions(u8 taskId) static bool8 AwardPayoutAction0(struct Task *task) { - if (sub_8103E38()) + if (IsMatchLineDoneFlashingBeforePayout()) { task->data[0]++; if (sSlotMachine->payout == 0) @@ -1834,7 +1912,7 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task) if (gMain.heldKeys & A_BUTTON) task->data[1] = 4; } - if (IsFanfareTaskInactive() && gMain.newKeys & START_BUTTON) + if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON)) { PlaySE(SE_PIN); sSlotMachine->coins += sSlotMachine->payout; @@ -1849,7 +1927,7 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task) static bool8 AwardPayoutAction_FreeTask(struct Task *task) { - if (sub_8103E7C()) + if (TryStopMatchLinesFlashing()) DestroyTask(FindTaskIdByFunc(RunAwardPayoutActions)); return FALSE; } @@ -1868,17 +1946,17 @@ static bool8 AwardPayoutAction_FreeTask(struct Task *task) // .-----------------. static u8 GetTagAtRest(u8 reel, s16 offset) { - s16 pos = (sSlotMachine->reelPositions[reel] + offset) % REEL_NUM_TAGS; + s16 pos = (sSlotMachine->reelPositions[reel] + offset) % SYMBOLS_PER_REEL; if (pos < 0) - pos += REEL_NUM_TAGS; - return sReelSymbols[reel][pos]; + pos += SYMBOLS_PER_REEL; + return sReelSymbolTileTags[reel][pos]; } // Calculates GetTagAtRest as if the reel were snapped downwards into place. static u8 GetTag(u8 reel, s16 offset) { s16 inc = 0; - s16 pixelOffset = sSlotMachine->reelPixelOffsets[reel] % REEL_TAG_HEIGHT; + s16 pixelOffset = sSlotMachine->reelPixelOffsets[reel] % REEL_SYMBOL_HEIGHT; if (pixelOffset != 0) inc = -1; return GetTagAtRest(reel, offset + inc); @@ -1896,18 +1974,18 @@ static void AdvanceSlotReel(u8 reelIndex, s16 value) { sSlotMachine->reelPixelOffsets[reelIndex] += value; sSlotMachine->reelPixelOffsets[reelIndex] %= 504; - sSlotMachine->reelPositions[reelIndex] = REEL_NUM_TAGS - sSlotMachine->reelPixelOffsets[reelIndex] / 24; + sSlotMachine->reelPositions[reelIndex] = SYMBOLS_PER_REEL - sSlotMachine->reelPixelOffsets[reelIndex] / REEL_SYMBOL_HEIGHT; } s16 AdvanceSlotReelToNextTag(u8 reelIndex, s16 value) { - s16 offset = sSlotMachine->reelPixelOffsets[reelIndex] % 24; + s16 offset = sSlotMachine->reelPixelOffsets[reelIndex] % REEL_SYMBOL_HEIGHT; if (offset != 0) { if (offset < value) value = offset; AdvanceSlotReel(reelIndex, value); - offset = sSlotMachine->reelPixelOffsets[reelIndex] % 24; + offset = sSlotMachine->reelPixelOffsets[reelIndex] % REEL_SYMBOL_HEIGHT; } return offset; } @@ -1935,7 +2013,7 @@ s16 AdvanceReeltimeReelToNextTag(s16 value) static void GameplayTask_StopSlotReel(void) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_REELS; i++) { u8 taskId = CreateTask(RunSlotReelActions, 2); gTasks[taskId].data[15] = i; @@ -2003,14 +2081,14 @@ static bool8 SlotReelAction_MoveToStop(struct Task *task) s16 reelPixelPos; memcpy(reelStopShocks, ReelStopShocks, sizeof(ReelStopShocks)); - reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % 24; + reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % REEL_SYMBOL_HEIGHT; if (reelPixelPos != 0) reelPixelPos = AdvanceSlotReelToNextTag(task->data[15], sSlotMachine->reelIncrement); else if (sSlotMachine->reelExtraTurns[task->data[15]]) { sSlotMachine->reelExtraTurns[task->data[15]]--; AdvanceSlotReel(task->data[15], sSlotMachine->reelIncrement); - reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % 24; + reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % REEL_SYMBOL_HEIGHT; } if (reelPixelPos == 0 && sSlotMachine->reelExtraTurns[task->data[15]] == 0) { @@ -2044,8 +2122,8 @@ static bool8 DecideReelTurns_BiasTag_Reel1(void) u8 tag1 = tag2; if (sSlotMachine->luckyFlags & (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777)) { - tag1 = SLOT_MACHINE_TAG_7_RED; - tag2 = SLOT_MACHINE_TAG_7_BLUE; + tag1 = GFXTAG_7_RED; + tag2 = GFXTAG_7_BLUE; } return DecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2); } @@ -2063,7 +2141,9 @@ static bool8 AreTagsAtPosition_Reel1(s16 pos, u8 tag1, u8 tag2) static bool8 AreCherriesOnScreen_Reel1(s16 offsetFromCenter) { - if (GetTag(LEFT_REEL, 1 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetTag(LEFT_REEL, 2 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetTag(LEFT_REEL, 3 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY) + if (GetTag(LEFT_REEL, 1 - offsetFromCenter) == GFXTAG_CHERRY + || GetTag(LEFT_REEL, 2 - offsetFromCenter) == GFXTAG_CHERRY + || GetTag(LEFT_REEL, 3 - offsetFromCenter) == GFXTAG_CHERRY) return TRUE; else return FALSE; @@ -2086,7 +2166,7 @@ static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8 tag1, u8 tag2) // if a lucky tag appears in the center row within 4 turns if (AreTagsAtPosition_Reel1(2 - i, tag1, tag2)) { - sSlotMachine->winnerRows[0] = 2; + sSlotMachine->winnerRows[LEFT_REEL] = 2; sSlotMachine->reelExtraTurns[0] = i; return TRUE; } @@ -2212,10 +2292,10 @@ static bool8 DecideReelTurns_BiasTag_Reel3(void) u8 biasTag = sSlotMachine->biasTag; if (sSlotMachine->luckyFlags & LUCKY_BIAS_MIXED_777) { - biasTag = SLOT_MACHINE_TAG_7_RED; - if (sSlotMachine->biasTag == SLOT_MACHINE_TAG_7_RED) + biasTag = GFXTAG_7_RED; + if (sSlotMachine->biasTag == GFXTAG_7_RED) { - biasTag = SLOT_MACHINE_TAG_7_BLUE; + biasTag = GFXTAG_7_BLUE; } } return DecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag); @@ -2278,14 +2358,14 @@ static void DecideReelTurns_NoBiasTag_Reel1(void) static bool8 IsBiasTag777_SwitchColor(u8 *biasTagPtr) { - if (*biasTagPtr == SLOT_MACHINE_TAG_7_RED) + if (*biasTagPtr == GFXTAG_7_RED) { - *biasTagPtr = SLOT_MACHINE_TAG_7_BLUE; + *biasTagPtr = GFXTAG_7_BLUE; return TRUE; } - if (*biasTagPtr == SLOT_MACHINE_TAG_7_BLUE) + if (*biasTagPtr == GFXTAG_7_BLUE) { - *biasTagPtr = SLOT_MACHINE_TAG_7_RED; + *biasTagPtr = GFXTAG_7_RED; return TRUE; } return FALSE; @@ -2416,7 +2496,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet3(void) static bool8 AreTagsMixed77(u8 tag1, u8 tag2) { - if ((tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_BLUE) || (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_RED)) + if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE) || (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED)) return TRUE; else return FALSE; @@ -2424,8 +2504,8 @@ static bool8 AreTagsMixed77(u8 tag1, u8 tag2) static bool8 AreTagsMixed777(u8 tag1, u8 tag2, u8 tag3) { - if ((tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED) || - (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE)) + if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) || + (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE)) return TRUE; else return FALSE; @@ -2433,10 +2513,10 @@ static bool8 AreTagsMixed777(u8 tag1, u8 tag2, u8 tag3) static bool8 TagsDontMatchOrHaveAny7s(u8 tag1, u8 tag2, u8 tag3) { - if ((tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED) || - (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE) || - (tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE) || - (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED) || + if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) || + (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) || + (tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) || + (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) || (tag1 == tag2 && tag1 == tag3)) { return FALSE; @@ -2461,7 +2541,7 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void) while (1) { u8 tag3; - if (!(tag1 == (tag3 = GetTag(RIGHT_REEL, 2 - i)) || (tag1 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE) || (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED))) + if (!(tag1 == (tag3 = GetTag(RIGHT_REEL, 2 - i)) || (tag1 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) || (tag1 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED))) break; i++; } @@ -2592,21 +2672,21 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void) } } -static void sub_8103C14(u8 a0) +static void sub_8103C14(u8 reelNum) { u8 taskId = CreateTask(sub_8103C48, 5); - gTasks[taskId].data[15] = a0; + gTasks[taskId].data[15] = reelNum; sub_8103C48(taskId); } static void sub_8103C48(u8 taskId) { - gUnknown_083ECBA0[gTasks[taskId].data[0]](&gTasks[taskId], taskId); + sReelStopButtonFuncs[gTasks[taskId].data[0]](&gTasks[taskId], taskId); } static void sub_8103C78(struct Task *task, u8 taskId) { - sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x62, 0x63, 0x72, 0x73); + SetReelButtonTilemap(sReelButtonOffsets[task->data[15]], 0x62, 0x63, 0x72, 0x73); task->data[0]++; } @@ -2618,131 +2698,159 @@ static void sub_8103CAC(struct Task *task, u8 taskId) static void sub_8103CC8(struct Task *task, u8 taskId) { - sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x42, 0x43, 0x52, 0x53); + SetReelButtonTilemap(sReelButtonOffsets[task->data[15]], 0x42, 0x43, 0x52, 0x53); DestroyTask(taskId); } -static void LoadLitTile(u8 tileId) +static void LightenMatchLine(u8 tileId) { - LoadPalette(gUnknown_083EDD08[tileId], gUnknown_083EDD30[tileId], 2); + LoadPalette(sLitMatchLinePalTable[tileId], sMatchLinePalOffsets[tileId], 2); } -static void sub_8103D28(u8 a0) +static void DarkenMatchLine(u8 tileId) { - LoadPalette(gUnknown_083EDD1C[a0], gUnknown_083EDD30[a0], 2); + LoadPalette(sDarkMatchLinePalTable[tileId], sMatchLinePalOffsets[tileId], 2); } -// light up the value bet by the player -static void LoadBetTiles(u8 betVal) +// light up the match line for each bet by the player +static void LightenBetTiles(u8 betVal) { u8 i; - for (i = 0; i < gNumberBettingTiles[betVal]; i++) - LoadLitTile(gBettingTilesId[betVal][i]); + for (i = 0; i < sMatchLinesPerBet[betVal]; i++) + LightenMatchLine(sBetToMatchLineIds[betVal][i]); } -static void sub_8103D8C(u8 a0) +static void DarkenBetTiles(u8 betVal) { u8 i; - for (i = 0; i < gNumberBettingTiles[a0]; i++) - sub_8103D28(gBettingTilesId[a0][i]); + for (i = 0; i < sMatchLinesPerBet[betVal]; i++) + DarkenMatchLine(sBetToMatchLineIds[betVal][i]); } -static void sub_8103DC8(void) +#define sMatchLineId data[0] +#define sFlashing data[1] +#define sNumFullFlashes data[2] +#define sDelayTimer data[3] +#define sColor data[4] +#define sColorIncr data[5] +#define sAtOriginalColor data[7] + +// Creates invisible sprites that flash the bet lines/numbers where a match occurs +// 5 are created, 1 for each possible match line (3 rows, 2 diagonals) +static void CreateInvisibleFlashMatchLineSprites(void) { u8 i; - for (i = 0; i < 5; i++) + for (i = 0; i < ARRAY_COUNT(sSlotMachine->flashMatchLineSpriteIds); i++) { - u8 spriteId = CreateInvisibleSprite(sub_8103EE4); - gSprites[spriteId].data[0] = i; - sSlotMachine->unk44[i] = spriteId; + u8 spriteId = CreateInvisibleSprite(SpriteCB_FlashMatchingLines); + gSprites[spriteId].sMatchLineId = i; + sSlotMachine->flashMatchLineSpriteIds[i] = spriteId; } } -static void sub_8103E04(u8 a0) +static void FlashMatchLine(u8 matchLineId) { - struct Sprite *sprite = gSprites + sSlotMachine->unk44[a0]; - sprite->data[1] = 1; - sprite->data[2] = 4; - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[5] = 2; - sprite->data[7] = 0; + struct Sprite *sprite = &gSprites[sSlotMachine->flashMatchLineSpriteIds[matchLineId]]; + sprite->sFlashing = TRUE; + sprite->sNumFullFlashes = 4; + sprite->sDelayTimer = 0; + sprite->sColor = 0; + sprite->sColorIncr = 2; + sprite->sAtOriginalColor = FALSE; } -// something with payout digits -static bool8 sub_8103E38(void) +// Match line flashes 4 times before the payout begins +// After this it does half-brightness flashes until the payout finishes +static bool8 IsMatchLineDoneFlashingBeforePayout(void) { u8 i; - for (i = 0; i < 5; i++) + for (i = 0; i < ARRAY_COUNT(sSlotMachine->flashMatchLineSpriteIds); i++) { - struct Sprite *sprite = &gSprites[sSlotMachine->unk44[i]]; - if (sprite->data[1] && sprite->data[2]) + struct Sprite *sprite = &gSprites[sSlotMachine->flashMatchLineSpriteIds[i]]; + if (sprite->sFlashing && sprite->sNumFullFlashes) return FALSE; } return TRUE; } -static bool8 sub_8103E7C(void) +// When payout is finished, stop lines flashing (but not if they're in the middle of a flash) +static bool8 TryStopMatchLinesFlashing(void) { u8 i; - for (i = 0; i < 5; i++) + for (i = 0; i < ARRAY_COUNT(sSlotMachine->flashMatchLineSpriteIds); i++) { - if (!sub_8103EAC(sSlotMachine->unk44[i])) + if (!TryStopMatchLineFlashing(sSlotMachine->flashMatchLineSpriteIds[i])) return FALSE; } return TRUE; } -static bool8 sub_8103EAC(u8 spriteId) +static bool8 TryStopMatchLineFlashing(u8 spriteId) { - struct Sprite *sprite = gSprites + spriteId; - if (!sprite->data[1]) + struct Sprite *sprite = &gSprites[spriteId]; + if (!sprite->sFlashing) return TRUE; - if (sprite->data[7]) - sprite->data[1] = 0; - return sprite->data[7]; + if (sprite->sAtOriginalColor) + sprite->sFlashing = FALSE; + + return sprite->sAtOriginalColor; } -static void sub_8103EE4(struct Sprite *sprite) +static void SpriteCB_FlashMatchingLines(struct Sprite *sprite) { - s16 r4; - if (sprite->data[1]) + s16 maxColorChange; + if (sprite->sFlashing) { - if (!sprite->data[3]--) + if (!sprite->sDelayTimer--) { - sprite->data[7] = 0; - sprite->data[3] = 1; - sprite->data[4] += sprite->data[5]; - r4 = 4; - if (sprite->data[2]) - r4 = 8; - if (sprite->data[4] <= 0) + sprite->sAtOriginalColor = FALSE; + sprite->sDelayTimer = 1; + sprite->sColor += sprite->sColorIncr; + maxColorChange = 4; + if (sprite->sNumFullFlashes) + maxColorChange = 8; + if (sprite->sColor <= 0) { - sprite->data[7] = 1; - sprite->data[5] = -sprite->data[5]; - if (sprite->data[2]) - sprite->data[2]--; + // Returned to original color, reverse + sprite->sAtOriginalColor = TRUE; + sprite->sColorIncr = -sprite->sColorIncr; + if (sprite->sNumFullFlashes) + sprite->sNumFullFlashes--; } - else if (sprite->data[4] >= r4) - sprite->data[5] = -sprite->data[5]; - if (sprite->data[2]) - sprite->data[3] <<= 1; + else if (sprite->sColor >= maxColorChange) { + // Reached peak darkness, reverse + sprite->sColorIncr = -sprite->sColorIncr; + } + if (sprite->sNumFullFlashes) + sprite->sDelayTimer <<= 1; } - MultiplyPaletteRGBComponents(gUnknown_083EDD30[sprite->data[0]], sprite->data[4], sprite->data[4], sprite->data[4]); + MultiplyPaletteRGBComponents(sMatchLinePalOffsets[sprite->sMatchLineId], sprite->sColor, sprite->sColor, sprite->sColor); } } -static void sub_8103F70(void) +#undef sMatchLineId +#undef sFlashing +#undef sNumFullFlashes +#undef sDelayTimer +#undef sColor +#undef sColorIncr +#undef sAtOriginalColor + +#define sDelayTimer data[1] +#define sFlashState data[2] +#define sFlashDir data[3] + +static void FlashSlotMachineLights(void) { - u8 taskId = CreateTask(sub_8103FE8_, 6); - gTasks[taskId].data[3] = 1; - sub_8103FE8_(taskId); + u8 taskId = CreateTask(Task_FlashSlotMachineLights, 6); + gTasks[taskId].sFlashDir = 1; + Task_FlashSlotMachineLights(taskId); } -static bool8 sub_8103FA0(void) +static bool8 TryStopSlotMachineLights(void) { - u8 taskId = FindTaskIdByFunc(sub_8103FE8_); - if (!gTasks[taskId].data[2]) + u8 taskId = FindTaskIdByFunc(Task_FlashSlotMachineLights); + if (gTasks[taskId].sFlashState == 0) { DestroyTask(taskId); LoadPalette(gUnknown_083EDDAC, 0x10, 0x20); @@ -2751,27 +2859,31 @@ static bool8 sub_8103FA0(void) return FALSE; } -static void sub_8103FE8_(u8 taskId) +static void Task_FlashSlotMachineLights(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (!task->data[1]--) + if (!task->sDelayTimer--) { - task->data[1] = 4; - task->data[2] += task->data[3]; - if (task->data[2] == 0 || task->data[2] == 2) - task->data[3] = -task->data[3]; + task->sDelayTimer = 4; + task->sFlashState += task->sFlashDir; + if (task->sFlashState == 0 || task->sFlashState == 2) + task->sFlashDir = -task->sFlashDir; } - LoadPalette(gUnknown_083EDDA0[task->data[2]], 0x10, 0x20); + LoadPalette(sFlashingLightsPalTable[task->sFlashState], 0x10, 0x20); } -static void GameplayTask_PikaPower(void) +#undef sDelayTimer +#undef sFlashState +#undef sFlashDir + +static void CreatePikaPowerBoltTask(void) { - sSlotMachine->unkTaskPointer3E = CreateTask(Task_CreatePikaPowerBolt, 8); + sSlotMachine->pikaPowerBoltTaskId = CreateTask(Task_CreatePikaPowerBolt, 8); } static void DisplayPikaPower(u8 pikaPower) { - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3E]; + struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; ClearTaskDataFields_2orHigher(task); task->data[0] = 1; task->data[1]++; @@ -2780,7 +2892,7 @@ static void DisplayPikaPower(u8 pikaPower) static void sub_8104098(void) { - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3E]; + struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; ClearTaskDataFields_2orHigher(task); task->data[0] = 3; task->data[15] = 1; // points to a reelIndex @@ -2788,7 +2900,7 @@ static void sub_8104098(void) static bool8 sub_81040C8(void) { - return gTasks[sSlotMachine->unkTaskPointer3E].data[15]; + return gTasks[sSlotMachine->pikaPowerBoltTaskId].data[15]; } static void Task_CreatePikaPowerBolt(u8 taskId) @@ -2817,9 +2929,9 @@ static void sub_8104144(struct Task *task) r3 = 1, r2 = 1; else if (task->data[1] == 16) r3 = 2, r2 = 2; - sSelectedPikaPowerTile[r2] = pikaPowerTileTable[r3][0]; + sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][0]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40); - sub_8105B88(task->data[2]); + DestroyPikaPowerBoltSprite(task->data[2]); task->data[0] = 0; task->data[15] = 0; // points to a reelIndex } @@ -2836,7 +2948,7 @@ static void sub_81041AC(struct Task *task) r3 = 2, r2 = 2; if (task->data[2] == 0) { - sSelectedPikaPowerTile[r2] = pikaPowerTileTable[r3][1]; + sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][1]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40); task->data[1]--; } @@ -2857,8 +2969,7 @@ static void ClearTaskDataFields_2orHigher(struct Task *task) task->data[i] = 0; } -// possibly load tiles for pika power meter -static void sub_810423C(u8 pikaPower) +static void LoadPikaPowerMeter(u8 pikaPower) { s16 i; s16 r3 = 0, r1 = 0; @@ -2870,7 +2981,7 @@ static void sub_810423C(u8 pikaPower) r3 = 1, r1 = 1; else if (i == 15) // pikaPower meter is full r3 = 2, r1 = 2; - sSelectedPikaPowerTile[r1] = pikaPowerTileTable[r3][0]; + sSelectedPikaPowerTile[r1] = sPikaPowerTileTable[r3][0]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r1], 2, r4 + 0x40); } for (; i < 16; i++, r4++) @@ -2880,10 +2991,10 @@ static void sub_810423C(u8 pikaPower) r3 = 1, r1 = 1; else if (i == 15) r3 = 2, r1 = 2; - sSelectedPikaPowerTile[r1] = pikaPowerTileTable[r3][1]; + sSelectedPikaPowerTile[r1] = sPikaPowerTileTable[r3][1]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r1], 2, r4 + 0x40); } - gTasks[sSlotMachine->unkTaskPointer3E].data[1] = pikaPower; + gTasks[sSlotMachine->pikaPowerBoltTaskId].data[1] = pikaPower; } static void BeginReeltime(void) @@ -2905,7 +3016,7 @@ static void RunReeltimeActions(u8 taskId) // task.data[1] has something to do with the threshold // task.data[4] says how many pixels to advance the reel // task.data[5] is a timer - ReeltimeActions[gTasks[taskId].data[0]](&gTasks[taskId]); + sReeltimeActions[gTasks[taskId].data[0]](&gTasks[taskId]); } static void ReeltimeAction0(struct Task *task) @@ -2921,12 +3032,12 @@ static void ReeltimeAction0(struct Task *task) gSpriteCoordOffsetY = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); SetGpuReg(REG_OFFSET_BG1VOFS, 0); - sub_8104A40(REG_OFFSET_BG3VOFS, 0); + LoadReelTimeWindowTilemap(REG_OFFSET_BG3VOFS, 0); CreateReelTimeMachineSprites(); CreateReelTimePikachuSprite(); CreateReelTimeNumberSprites(); CreateReelTimeShadowSprites(); - sub_810545C(); + CreateReelTimeNumberGapSprite(); GetReeltimeDraw(); StopMapMusic(); PlayNewMapMusic(MUS_BD_TIME); @@ -2943,7 +3054,7 @@ static void ReeltimeAction1(struct Task *task) { task->data[2] = r3; task->data[3] = task->data[1] >> 3; - sub_8104A40(r3, task->data[3]); + LoadReelTimeWindowTilemap(r3, task->data[3]); } if (task->data[1] >= 200) { @@ -2966,22 +3077,22 @@ static void ReeltimeAction2(struct Task *task) static void ReeltimeAction3(struct Task *task) { - int r5; - u8 sp0[ARRAY_COUNT(gUnknown_085A75C0)]; - s16 sp4[ARRAY_COUNT(gUnknown_085A75C4)]; - s16 spC[ARRAY_COUNT(gUnknown_085A75CC)]; + int i; + u8 pikachuAnimIds[ARRAY_COUNT(sReelTimePikachuAnimIds)]; + s16 reelTimeBoltDelays[ARRAY_COUNT(sReelTimeBoltDelays)]; + s16 pikachuAuraFlashDelays[ARRAY_COUNT(sPikachuAuraFlashDelays)]; - memcpy(sp0, gUnknown_085A75C0, sizeof(gUnknown_085A75C0)); - memcpy(sp4, gUnknown_085A75C4, sizeof(gUnknown_085A75C4)); - memcpy(spC, gUnknown_085A75CC, sizeof(gUnknown_085A75CC)); + memcpy(pikachuAnimIds, sReelTimePikachuAnimIds, sizeof(sReelTimePikachuAnimIds)); + memcpy(reelTimeBoltDelays, sReelTimeBoltDelays, sizeof(sReelTimeBoltDelays)); + memcpy(pikachuAuraFlashDelays, sPikachuAuraFlashDelays, sizeof(sPikachuAuraFlashDelays)); AdvanceReeltimeReel(task->data[4] >> 8); // gradually slow down the reel task->data[4] -= 4; - r5 = 4 - (task->data[4] >> 8); - sub_8105688(sp4[r5]); - sub_81057E8(spC[r5]); - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, sp0[r5]); + i = 4 - (task->data[4] >> 8); + SetReelTimeBoltDelay(reelTimeBoltDelays[i]); + SetReelTimePikachuAuraFlashDelay(pikachuAuraFlashDelays[i]); + StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], pikachuAnimIds[i]); // once speed goes below 256, go to next ReelTimeAction and keep the speed level if (task->data[4] <= 0x100) { @@ -2998,8 +3109,8 @@ static void ReeltimeAction4(struct Task *task) { task->data[0]++; task->data[5] = 0; - sub_81057E8(2); - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 3); + SetReelTimePikachuAuraFlashDelay(2); + StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 3); } } @@ -3070,13 +3181,13 @@ static void ReeltimeAction8(struct Task *task) if(sSlotMachine->reelTimeDraw == 0) { task->data[4] = 0xa0; - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 5); + StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5); PlayFanfare(MUS_ME_ZANNEN); } else { task->data[4] = 0xc0; - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 4); + StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 4); gSprites[sSlotMachine->reelTimePikachuSpriteId].animCmdIndex = 0; if (sSlotMachine->pikaPower) { @@ -3103,7 +3214,7 @@ static void ReeltimeAction10(struct Task *task) r4 = ((task->data[1] - 8) & 0xff) >> 3; SetGpuReg(REG_OFFSET_BG1HOFS, task->data[1] & 0x1ff); if (task->data[3] >> 3 <= 25) - sub_8104A88(r4); + ClearReelTimeWindowTilemap(r4); else task->data[0]++; } @@ -3137,13 +3248,13 @@ static void ReeltimeAction12(struct Task *task) { if (sSlotMachine->reelIncrement == task->data[1]) task->data[0]++; - else if (sSlotMachine->reelPixelOffsets[0] % 24 == 0 && (++task->data[2]& 0x07) == 0) + else if (sSlotMachine->reelPixelOffsets[0] % REEL_SYMBOL_HEIGHT == 0 && (++task->data[2]& 0x07) == 0) sSlotMachine->reelIncrement >>= 1; } static void ReeltimeAction13(struct Task *task) { - if (sub_8104E18()) + if (IsDigitalDisplayAnimFinished()) DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); } @@ -3154,7 +3265,7 @@ static void ReeltimeAction14(struct Task *task) DestroyReelTimePikachuAuraSprites(); CreateReelTimeExplosionSprite(); gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = TRUE; - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimePikachuSpriteId, 5); + StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5); task->data[0]++; task->data[4] = 4; task->data[5] = 0; @@ -3187,7 +3298,7 @@ static void ReeltimeAction16(struct Task *task) { gSpriteCoordOffsetY = 0; SetGpuReg(REG_OFFSET_BG1VOFS, 0); - if (sub_8105ACC()) + if (IsReelTimeSmokeAnimFinished()) { task->data[0]++; DestroyReelTimeSmokeSprite(); @@ -3206,26 +3317,27 @@ static void ReeltimeAction17(struct Task *task) DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); } -static void sub_8104A40(s16 a0, s16 a1) +static void LoadReelTimeWindowTilemap(s16 a0, s16 a1) { s16 i; for (i = 4; i < 15; i++) { - LoadBgTilemap(1, &gReelTimeWindowTilemap[a1 + (i - 4) * 20], 2, 32 * i + a0); + LoadBgTilemap(1, &sReelTimeWindow_Tilemap[a1 + (i - 4) * 20], 2, 32 * i + a0); } } -static void sub_8104A88(s16 a0) +static void ClearReelTimeWindowTilemap(s16 a0) { u8 i; for (i = 4; i < 15; i++) { - LoadBgTilemap(1, gUnknown_085A9898, 2, 32 * i + a0); + LoadBgTilemap(1, sEmptyTilemap, 2, 32 * i + a0); } } +// Info Box is the screen shown when Select is pressed static void OpenInfoBox(u8 digDisplayId) { u8 taskId = CreateTask(RunInfoBoxActions, 1); @@ -3243,7 +3355,7 @@ static bool8 IsInfoBoxClosed(void) static void RunInfoBoxActions(u8 taskId) { - InfoBoxActions[gTasks[taskId].data[0]](&gTasks[taskId]); + sInfoBoxActions[gTasks[taskId].data[0]](&gTasks[taskId]); } static void InfoBox_FadeIn(struct Task *task) @@ -3258,11 +3370,11 @@ static void InfoBox_WaitForFade(struct Task *task) task->data[0]++; } -static void InfoBox_8104B80(struct Task *task) +static void InfoBox_DrawWindow(struct Task *task) { - sub_8104DA4(); - sub_81065DC(); - AddWindow(&gUnknown_085A7444); + DestroyDigitalDisplayScene(); + LoadInfoBoxTilemap(); + AddWindow(&sWindowTemplate_InfoBox); PutWindowTilemap(1); FillWindowPixelBuffer(1, PIXEL_FILL(0)); task->data[0]++; @@ -3278,7 +3390,7 @@ static void InfoBox_AddText(struct Task *task) static void InfoBox_AwaitPlayerInput(struct Task *task) { - if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); ClearWindowTilemap(1); @@ -3289,22 +3401,22 @@ static void InfoBox_AwaitPlayerInput(struct Task *task) } } -static void InfoBox_812DE14(struct Task *task) +static void InfoBox_LoadSlotMachineTilemap(struct Task *task) { - sub_812F968(); + LoadSlotMachineMenuTilemap(); ShowBg(3); task->data[0]++; } -static void InfoBox_812DE30(struct Task *task) +static void InfoBox_CreateDigitalDisplay(struct Task *task) { CreateDigitalDisplayScene(task->data[1]); task->data[0]++; } -static void InfoBox_8104BFC(struct Task *task) +static void InfoBox_LoadPikaPowerMeter(struct Task *task) { - sub_810423C(sSlotMachine->pikaPower); + LoadPikaPowerMeter(sSlotMachine->pikaPower); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); task->data[0]++; } @@ -3314,12 +3426,15 @@ static void InfoBox_FreeTask(struct Task *task) DestroyTask(FindTaskIdByFunc(RunInfoBoxActions)); } -static void sub_8104C5C(void) + +#define sWaitForAnim data[7] + +static void CreateDigitalDisplayTask(void) { u8 i; struct Task *task; - i = CreateTask(sub_8104E74_, 3); - sSlotMachine->unkTaskPointer3D = i; + i = CreateTask(Task_DigitalDisplay, 3); + sSlotMachine->digDisplayTaskId = i; task = &gTasks[i]; task->data[1] = -1; for (i = 4; i < NUM_TASK_DATA; i++) @@ -3332,9 +3447,9 @@ static void CreateDigitalDisplayScene(u8 id) u8 i; struct Task *task; - sub_8104DA4(); + DestroyDigitalDisplayScene(); - task = &gTasks[sSlotMachine->unkTaskPointer3D]; + task = &gTasks[sSlotMachine->digDisplayTaskId]; task->data[1] = id; for (i = 0; sDigitalDisplayScenes[id][i].spriteTemplateId != 255; i++) @@ -3342,33 +3457,35 @@ static void CreateDigitalDisplayScene(u8 id) u8 spriteId; spriteId = CreateStdDigitalDisplaySprite( sDigitalDisplayScenes[id][i].spriteTemplateId, - sDigitalDisplayScenes[id][i].unk01, - sDigitalDisplayScenes[id][i].unk02 + sDigitalDisplayScenes[id][i].dispInfoId, + sDigitalDisplayScenes[id][i].spriteId ); task->data[4 + i] = spriteId; } } -static void sub_8104D30(u8 templateIdx, SpriteCallback a1, s16 a2, s16 a3, s16 a4) +static void AddDigitalDisplaySprite(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 spriteId) { u8 i; - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D]; + struct Task *task = &gTasks[sSlotMachine->digDisplayTaskId]; for (i = 4; i < NUM_TASK_DATA; i++) { if (task->data[i] == MAX_SPRITES) { - task->data[i] = CreateDigitalDisplaySprite(templateIdx, a1, a2, a3, a4); + task->data[i] = CreateDigitalDisplaySprite(templateIdx, callback, x, y, spriteId); break; } } } -static void sub_8104DA4(void) +static void DestroyDigitalDisplayScene(void) { u8 i; - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D]; + struct Task *task = &gTasks[sSlotMachine->digDisplayTaskId]; + if ((u16)task->data[1] != 0xFFFF) - gUnknown_083ED064[task->data[1]](); + sDigitalDisplaySceneExitCallbacks[task->data[1]](); + for (i = 4; i < NUM_TASK_DATA; i++) { if (task->data[i] != MAX_SPRITES) @@ -3379,27 +3496,27 @@ static void sub_8104DA4(void) } } -static bool8 sub_8104E18(void) +static bool8 IsDigitalDisplayAnimFinished(void) { u8 i; - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D]; + struct Task *task = &gTasks[sSlotMachine->digDisplayTaskId]; for (i = 4; i < NUM_TASK_DATA; i++) { if (task->data[i] != MAX_SPRITES) { - if (gSprites[task->data[i]].data[7]) + if (gSprites[task->data[i]].sWaitForAnim) return FALSE; } } return TRUE; } -static void sub_8104E74_(u8 taskId) +static void Task_DigitalDisplay(u8 taskId) { - gUnknown_083ECC54[gTasks[taskId].data[0]](&gTasks[taskId]); + sDigitalDisplayActions[gTasks[taskId].data[0]](&gTasks[taskId]); } -static void nullsub_69(struct Task *task) +static void DigitalDisplay_Idle(struct Task *task) { } @@ -3446,7 +3563,7 @@ static void CreateCreditPayoutNumberSprites(void) static void CreateCoinNumberSprite(s16 x, s16 y, bool8 isPayout, s16 a3) { - struct Sprite *sprite = gSprites + CreateSprite(&sSpriteTemplate_CoinNumber, x, y, 13); + struct Sprite *sprite = &gSprites[CreateSprite(&sSpriteTemplate_CoinNumber, x, y, 13)]; sprite->oam.priority = 2; sprite->data[0] = isPayout; sprite->data[1] = a3; @@ -3472,9 +3589,9 @@ static void SpriteCB_CoinNumber(struct Sprite *sprite) static void CreateReelBackgroundSprite(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelBackground, 0x58, 0x48, 15); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelBackground, 88, 72, 15); gSprites[spriteId].oam.priority = 3; - SetSubspriteTables(gSprites + spriteId, sSubspriteTable_ReelBackground); + SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_ReelBackground); } static void CreateReelTimePikachuSprite(void) @@ -3505,7 +3622,7 @@ static void CreateReelTimePikachuSprite(void) static void DestroyReelTimePikachuSprite(void) { - DestroySprite(gSprites + sSlotMachine->reelTimePikachuSpriteId); + DestroySprite(&gSprites[sSlotMachine->reelTimePikachuSpriteId]); if (sImageTable_ReelTimePikachu != NULL) FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); } @@ -3569,7 +3686,7 @@ static void CreateBrokenReelTimeMachineSprite(void) sImageTable_BrokenReelTimeMachine[0].size = 0x600; spriteTemplate = sSpriteTemplate_BrokenReelTimeMachine; spriteTemplate.images = sImageTable_BrokenReelTimeMachine; - spriteId = CreateSprite(&spriteTemplate, 0xa8 - gSpriteCoordOffsetX, 0x50, 7); + spriteId = CreateSprite(&spriteTemplate, 168 - gSpriteCoordOffsetX, 80, 7); sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; @@ -3583,7 +3700,7 @@ static void CreateReelTimeNumberSprites(void) s16 r5; for (i = 0, r5 = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeNumberSpriteIds); i++, r5 += 20) { - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeNumbers, 0x170, 0, 10); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeNumbers, 368, 0, 10); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; @@ -3602,14 +3719,14 @@ static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite) static void CreateReelTimeShadowSprites(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 0x170, 0x64, 9); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 368, 100, 9); struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; SetSubspriteTables(sprite, sSubspriteTable_ReelTimeShadow); sSlotMachine->reelTimeShadowSpriteIds[0] = spriteId; - spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 0x120, 0x68, 4); + spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 288, 104, 4); sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; @@ -3617,21 +3734,22 @@ static void CreateReelTimeShadowSprites(void) sSlotMachine->reelTimeShadowSpriteIds[1] = spriteId; } -static void sub_810545C(void) +// Creates a small black bar on the Reel Time machine to fill the gap between the numbers +static void CreateReelTimeNumberGapSprite(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4EC, 0x170, 0x4c, 11); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeNumberGap, 368, 76, 11); struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; - SetSubspriteTables(sprite, gSubspriteTables_83ED7D4); - sSlotMachine->unk40 = spriteId; + SetSubspriteTables(sprite, sSubspriteTable_ReelTimeNumberGap); + sSlotMachine->reelTimeNumberGapSpriteId = spriteId; } static void DestroyReelTimeMachineSprites(void) { u8 i; - DestroySprite(&gSprites[sSlotMachine->unk40]); + DestroySprite(&gSprites[sSlotMachine->reelTimeNumberGapSpriteId]); for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeMachineSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimeMachineSpriteIds[i]]); @@ -3659,32 +3777,38 @@ static void DestroyBrokenReelTimeMachineSprite(void) FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); } +#define sDelayTimer data[0] +#define sXDir data[1] +#define sYDir data[2] +#define sCounter data[3] +#define sDelay data[7] + static void CreateReelTimeBoltSprites(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 0x98, 0x20, 5); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 152, 32, 5); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->hFlip = TRUE; sSlotMachine->reelTimeBoltSpriteIds[0] = spriteId; - sprite->data[0] = 8; - sprite->data[1] = -1; - sprite->data[2] = -1; - sprite->data[7] = 0x20; + sprite->sDelayTimer = 8; + sprite->sXDir = -1; + sprite->sYDir = -1; + sprite->sDelay = 32; - spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 0xb8, 0x20, 5); + spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 184, 32, 5); sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sSlotMachine->reelTimeBoltSpriteIds[1] = spriteId; - sprite->data[1] = 1; - sprite->data[2] = -1; - sprite->data[7] = 0x20; + sprite->sXDir = 1; + sprite->sYDir = -1; + sprite->sDelay = 32; } static void SpriteCB_ReelTimeBolt(struct Sprite *sprite) { - if (sprite->data[0] != 0) + if (sprite->sDelayTimer != 0) { - sprite->data[0]--; + sprite->sDelayTimer--; sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->invisible = TRUE; @@ -3692,20 +3816,20 @@ static void SpriteCB_ReelTimeBolt(struct Sprite *sprite) else { sprite->invisible = FALSE; - sprite->pos2.x += sprite->data[1]; - sprite->pos2.y += sprite->data[2]; - if (++sprite->data[3] >= 8) + sprite->pos2.x += sprite->sXDir; + sprite->pos2.y += sprite->sYDir; + if (++sprite->sCounter >= 8) { - sprite->data[0] = sprite->data[7]; - sprite->data[3] = 0; + sprite->sDelayTimer = sprite->sDelay; + sprite->sCounter = 0; } } } -static void sub_8105688(s16 a0) +static void SetReelTimeBoltDelay(s16 delay) { - gSprites[sSlotMachine->reelTimeBoltSpriteIds[0]].data[7] = a0; - gSprites[sSlotMachine->reelTimeBoltSpriteIds[1]].data[7] = a0; + gSprites[sSlotMachine->reelTimeBoltSpriteIds[0]].sDelay = delay; + gSprites[sSlotMachine->reelTimeBoltSpriteIds[1]].sDelay = delay; } static void DestroyReelTimeBoltSprites(void) @@ -3716,19 +3840,30 @@ static void DestroyReelTimeBoltSprites(void) DestroySprite(&gSprites[sSlotMachine->reelTimeBoltSpriteIds[i]]); } +#undef sDelayTimer +#undef sXDir +#undef sYDir +#undef sCounter +#undef sDelay + +#define sFlashPal data[0] +#define sColorIdx data[5] +#define sDelayTimer data[6] +#define sDelay data[7] + static void CreateReelTimePikachuAuraSprites(void) { // Left half of electricity orb - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 0x48, 0x50, 3); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 72, 80, 3); gSprites[spriteId].oam.priority = 1; - gSprites[spriteId].data[0] = 1; - gSprites[spriteId].data[5] = 0; - gSprites[spriteId].data[6] = 16; - gSprites[spriteId].data[7] = 8; + gSprites[spriteId].sFlashPal = TRUE; // Only one of them needs to do the flashing, they share the palette + gSprites[spriteId].sColorIdx = 0; + gSprites[spriteId].sDelayTimer = 16; + gSprites[spriteId].sDelay = 8; sSlotMachine->reelTimePikachuAuraSpriteIds[0] = spriteId; // Right half - spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 0x68, 0x50, 3); + spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 104, 80, 3); gSprites[spriteId].oam.priority = 1; gSprites[spriteId].hFlip = TRUE; sSlotMachine->reelTimePikachuAuraSpriteIds[1] = spriteId; @@ -3736,32 +3871,37 @@ static void CreateReelTimePikachuAuraSprites(void) static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite) { - u8 sp[] = {16, 0}; - if (sprite->data[0] && --sprite->data[6] <= 0) + u8 colors[] = {16, 0}; + if (sprite->sFlashPal && --sprite->sDelayTimer <= 0) { - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, sp[sprite->data[5]], sp[sprite->data[5]], sp[sprite->data[5]]); - ++sprite->data[5]; - sprite->data[5] &= 1; - sprite->data[6] = sprite->data[7]; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]); + ++sprite->sColorIdx; + sprite->sColorIdx &= 1; + sprite->sDelayTimer = sprite->sDelay; } } -static void sub_81057E8(s16 a0) +static void SetReelTimePikachuAuraFlashDelay(s16 delay) { - gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[0]].data[7] = a0; + gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[0]].sDelay = delay; } static void DestroyReelTimePikachuAuraSprites(void) { u8 i; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, 0, 0, 0); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, 0, 0, 0); for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimePikachuAuraSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[i]]); } +#undef sFlashPal +#undef sColorIdx +#undef sDelayTimer +#undef sDelay + static void CreateReelTimeExplosionSprite(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeExplosion, 0xa8, 0x50, 6); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeExplosion, 168, 80, 6); gSprites[spriteId].oam.priority = 1; sSlotMachine->reelTimeExplosionSpriteId = spriteId; } @@ -3783,7 +3923,7 @@ static void CreateReelTimeDuckSprites(void) u16 sp[] = {0x0, 0x40, 0x80, 0xC0}; for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeDuckSpriteIds); i++) { - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeDuck, 0x50 - gSpriteCoordOffsetX, 0x44, 0); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeDuck, 80 - gSpriteCoordOffsetX, 68, 0); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; @@ -3819,9 +3959,14 @@ static void DestroyReelTimeDuckSprites(void) } } +#define sState data[0] +#define sMoveY data[1] +#define sTimer data[2] +#define sAnimFinished data[7] + static void CreateReelTimeSmokeSprite(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeSmoke, 0xa8, 0x3c, 8); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeSmoke, 168, 60, 8); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; @@ -3831,34 +3976,34 @@ static void CreateReelTimeSmokeSprite(void) static void SpriteCB_ReelTimeSmoke(struct Sprite *sprite) { - if (sprite->data[0] == 0) + if (sprite->sState == 0) { if (sprite->affineAnimEnded) - sprite->data[0]++; + sprite->sState++; } - else if (sprite->data[0] == 1) + else if (sprite->sState == 1) { sprite->invisible ^= 1; - if (++sprite->data[2] >= 24) + if (++sprite->sTimer >= 24) { - sprite->data[0]++; - sprite->data[2] = 0; + sprite->sState++; + sprite->sTimer = 0; } } else { sprite->invisible = TRUE; - if (++sprite->data[2] >= 16) - sprite->data[7] = 1; + if (++sprite->sTimer >= 16) + sprite->sAnimFinished = TRUE; } - sprite->data[1] &= 0xff; - sprite->data[1] += 16; - sprite->pos2.y -= (sprite->data[1] >> 8); + sprite->sMoveY &= 0xff; + sprite->sMoveY += 16; + sprite->pos2.y -= (sprite->sMoveY >> 8); } -static u8 sub_8105ACC(void) +static u8 IsReelTimeSmokeAnimFinished(void) { - return gSprites[sSlotMachine->reelTimeSmokeSpriteId].data[7]; + return gSprites[sSlotMachine->reelTimeSmokeSpriteId].sAnimFinished; } static void DestroyReelTimeSmokeSprite(void) @@ -3868,6 +4013,11 @@ static void DestroyReelTimeSmokeSprite(void) DestroySprite(sprite); } +#undef sState +#undef sMoveY +#undef sTimer +#undef sAnimFinished + static u8 CreatePikaPowerBoltSprite(s16 x, s16 y) { u8 spriteId = CreateSprite(&sSpriteTemplate_PikaPowerBolt, x, y, 12); @@ -3884,19 +4034,23 @@ static void SpriteCB_PikaPowerBolt(struct Sprite *sprite) sprite->data[7] = 1; } -static void sub_8105B88(u8 spriteId) +static void DestroyPikaPowerBoltSprite(u8 spriteId) { struct Sprite *sprite = &gSprites[spriteId]; FreeOamMatrix(sprite->oam.matrixNum); DestroySprite(sprite); } -static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2) +static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 dispInfoId, s16 spriteId) { - return CreateDigitalDisplaySprite(templateIdx, gUnknown_083ECF0C[cbAndCoordsIdx], gUnknown_083ECE7E[cbAndCoordsIdx][0], gUnknown_083ECE7E[cbAndCoordsIdx][1], a2); + return CreateDigitalDisplaySprite(templateIdx, sDigitalDisplay_SpriteCallbacks[dispInfoId], sDigitalDisplay_SpriteCoords[dispInfoId][0], sDigitalDisplay_SpriteCoords[dispInfoId][1], spriteId); } -static u8 CreateDigitalDisplaySprite(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4) +#define sState data[0] +#define sCounter data[1] +#define sSpriteId data[6] + +static u8 CreateDigitalDisplaySprite(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 internalSpriteId) { struct SpriteTemplate spriteTemplate; u8 spriteId; @@ -3908,123 +4062,125 @@ static u8 CreateDigitalDisplaySprite(u8 templateIdx, SpriteCallback callback, s1 sprite = &gSprites[spriteId]; sprite->oam.priority = 3; sprite->callback = callback; - sprite->data[6] = a4; - sprite->data[7] = 1; + sprite->sSpriteId = internalSpriteId; + sprite->sWaitForAnim = TRUE; if (sSubspriteTables_DigitalDisplay[templateIdx]) SetSubspriteTables(sprite, sSubspriteTables_DigitalDisplay[templateIdx]); return spriteId; } -static void sub_8105C64(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_Static(struct Sprite *sprite) { - sprite->data[7] = 0; + sprite->sWaitForAnim = FALSE; } -static void sub_8105C6C(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_Smoke(struct Sprite *sprite) { - s16 sp0[] = {4, -4, 4, -4}; - s16 sp8[] = {4, 4, -4, -4}; + s16 targetX[] = {4, -4, 4, -4}; + s16 targetY[] = {4, 4, -4, -4}; - if (sprite->data[1]++ >= 16) + if (sprite->sCounter++ >= 16) { sprite->subspriteTableNum ^= 1; - sprite->data[1] = 0; + sprite->sCounter = 0; } sprite->pos2.x = 0; sprite->pos2.y = 0; if (sprite->subspriteTableNum != 0) { - sprite->pos2.x = sp0[sprite->data[6]]; - sprite->pos2.y = sp8[sprite->data[6]]; + sprite->pos2.x = targetX[sprite->sSpriteId]; + sprite->pos2.y = targetY[sprite->sSpriteId]; } } -static void sub_8105CF0(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_SmokeNE(struct Sprite *sprite) { sprite->hFlip = TRUE; - sub_8105C6C(sprite); + SpriteCB_DigitalDisplay_Smoke(sprite); } -static void sub_8105D08(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_SmokeSW(struct Sprite *sprite) { sprite->vFlip = TRUE; - sub_8105C6C(sprite); + SpriteCB_DigitalDisplay_Smoke(sprite); } -static void sub_8105D20(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_SmokeSE(struct Sprite *sprite) { sprite->hFlip = TRUE; sprite->vFlip = TRUE; - sub_8105C6C(sprite); + SpriteCB_DigitalDisplay_Smoke(sprite); } -static void sub_8105D3C(struct Sprite *sprite) +// The word "Reel" in Reel Time +static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: sprite->pos1.x += 4; if (sprite->pos1.x >= 0xd0) { sprite->pos1.x = 0xd0; - sprite->data[0]++; + sprite->sState++; } break; case 1: - if (++sprite->data[1] > 90) - sprite->data[0]++; + if (++sprite->sCounter > 90) + sprite->sState++; break; case 2: sprite->pos1.x += 4; if (sprite->pos1.x >= 0x110) - sprite->data[0]++; + sprite->sState++; break; case 3: - sprite->data[7] = 0; + sprite->sWaitForAnim = FALSE; break; } } -static void sub_8105DA4(struct Sprite *sprite) +// The word "Time" in Reel Time +static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: sprite->pos1.x -= 4; if (sprite->pos1.x <= 0xd0) { sprite->pos1.x = 0xd0; - sprite->data[0]++; + sprite->sState++; } break; case 1: - if (++sprite->data[1] > 90) - sprite->data[0]++; + if (++sprite->sCounter > 90) + sprite->sState++; break; case 2: sprite->pos1.x -= 4; if (sprite->pos1.x <= 0x90) - sprite->data[0]++; + sprite->sState++; break; case 3: - sprite->data[7] = 0; + sprite->sWaitForAnim = FALSE; break; } } -static void sub_8105E08(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: StartSpriteAnim(sprite, sSlotMachine->reelTimeSpinsLeft - 1); - sprite->data[0]++; + sprite->sState++; // fallthrough case 1: - if (++sprite->data[1] >= 4) + if (++sprite->sCounter >= 4) { - sprite->data[0]++; - sprite->data[1] = 0; + sprite->sState++; + sprite->sCounter = 0; } break; case 2: @@ -4032,54 +4188,54 @@ static void sub_8105E08(struct Sprite *sprite) if (sprite->pos1.x >= 0xd0) { sprite->pos1.x = 0xd0; - sprite->data[0]++; + sprite->sState++; } break; case 3: - if (++sprite->data[1] > 90) - sprite->data[0]++; + if (++sprite->sCounter > 90) + sprite->sState++; break; case 4: sprite->pos1.x += 4; if (sprite->pos1.x >= 0xf8) - sprite->data[0]++; + sprite->sState++; break; case 5: - sprite->data[7] = 0; + sprite->sWaitForAnim = FALSE; break; } } -static void sub_8105EB4(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_PokeballRocking(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: sprite->animPaused = TRUE; - sprite->data[0]++; + sprite->sState++; // fallthrough case 1: sprite->pos1.y += 8; if (sprite->pos1.y >= 0x70) { sprite->pos1.y = 0x70; - sprite->data[1] = 16; - sprite->data[0]++; + sprite->sCounter = 16; + sprite->sState++; } break; case 2: if (sprite->data[2] == 0) { - sprite->pos1.y -= sprite->data[1]; - sprite->data[1] = -sprite->data[1]; + sprite->pos1.y -= sprite->sCounter; + sprite->sCounter = -sprite->sCounter; if (++sprite->data[3] >= 2) { - sprite->data[1] >>= 2; + sprite->sCounter >>= 2; sprite->data[3] = 0; - if (sprite->data[1] == 0) + if (sprite->sCounter == 0) { - sprite->data[0]++; - sprite->data[7] = 0; + sprite->sState++; + sprite->sWaitForAnim = FALSE; sprite->animPaused = FALSE; } } @@ -4090,53 +4246,53 @@ static void sub_8105EB4(struct Sprite *sprite) } } -static void sub_8105F54(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_Stop(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: - if (++sprite->data[1] > 8) - sprite->data[0]++; + if (++sprite->sCounter > 8) + sprite->sState++; break; case 1: sprite->pos1.y += 2; if (sprite->pos1.y >= 0x30) { sprite->pos1.y = 0x30; - sprite->data[0]++; - sprite->data[7] = 0; + sprite->sState++; + sprite->sWaitForAnim = FALSE; } break; } } -static void sub_8105F9C(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_AButtonStop(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: sprite->invisible = TRUE; - if (++sprite->data[1] > 0x20) + if (++sprite->sCounter > 0x20) { - sprite->data[0]++; - sprite->data[1] = 5; + sprite->sState++; + sprite->sCounter = 5; sprite->oam.mosaic = TRUE; sprite->invisible = FALSE; StartSpriteAnim(sprite, 1); - SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->data[1] << 4) | sprite->data[1]) << 8); + SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->sCounter << 4) | sprite->sCounter) << 8); } break; case 1: - sprite->data[1] -= (sprite->data[2] >> 8); - if (sprite->data[1] < 0) - sprite->data[1] = 0; - SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->data[1] << 4) | sprite->data[1]) << 8); + sprite->sCounter -= (sprite->data[2] >> 8); + if (sprite->sCounter < 0) + sprite->sCounter = 0; + SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->sCounter << 4) | sprite->sCounter) << 8); sprite->data[2] &= 0xff; sprite->data[2] += 0x80; - if (sprite->data[1] == 0) + if (sprite->sCounter == 0) { - sprite->data[0]++; - sprite->data[7] = 0; + sprite->sState++; + sprite->sWaitForAnim = FALSE; sprite->oam.mosaic = FALSE; StartSpriteAnim(sprite, 0); } @@ -4144,11 +4300,11 @@ static void sub_8105F9C(struct Sprite *sprite) } } -static void sub_8106058(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *sprite) { - if (sprite->data[1] < 3) + if (sprite->sCounter < 3) { - LoadPalette(gUnknown_083EDE10[sprite->data[1]], (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20); + LoadPalette(sPokeballShiningPalTable[sprite->sCounter], (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 32); if (++sprite->data[2] >= 4) { sprite->data[1]++; @@ -4157,34 +4313,35 @@ static void sub_8106058(struct Sprite *sprite) } else { - LoadPalette(gUnknown_083EDE10[sprite->data[1]], (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20); + LoadPalette(sPokeballShiningPalTable[sprite->sCounter], (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 32); if (++sprite->data[2] >= 25) { - sprite->data[1] = 0; + sprite->sCounter = 0; sprite->data[2] = 0; } } StartSpriteAnimIfDifferent(sprite, 1); - sprite->data[7] = 0; + sprite->sWaitForAnim = FALSE; } -static void sub_81060FC(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_RegBonus(struct Sprite *sprite) { - s16 sp00[] = {0, -40, 0, 0, 48, 0, 24, 0}; - s16 sp10[] = {-32, 0, -32, -48, 0, -48, 0, -48}; - s16 sp20[] = {16, 12, 16, 0, 0, 4, 8, 8}; + // Elements in array correspond to R E G B O N U S + s16 letterXOffset[] = { 0, -40, 0, 0, 48, 0, 24, 0}; + s16 letterYOffset[] = {-32, 0, -32, -48, 0, -48, 0, -48}; + s16 letterDelay[] = { 16, 12, 16, 0, 0, 4, 8, 8}; - switch (sprite->data[0]) + switch (sprite->sState) { case 0: - sprite->pos2.x = sp00[sprite->data[6]]; - sprite->pos2.y = sp10[sprite->data[6]]; - sprite->data[1] = sp20[sprite->data[6]]; - sprite->data[0]++; + sprite->pos2.x = letterXOffset[sprite->sSpriteId]; + sprite->pos2.y = letterYOffset[sprite->sSpriteId]; + sprite->sCounter = letterDelay[sprite->sSpriteId]; + sprite->sState++; // fallthrough case 1: - if (sprite->data[1]-- == 0) - sprite->data[0]++; + if (sprite->sCounter-- == 0) + sprite->sState++; break; case 2: if (sprite->pos2.x > 0) @@ -4198,166 +4355,168 @@ static void sub_81060FC(struct Sprite *sprite) sprite->pos2.y += 4; if (sprite->pos2.x == 0 && sprite->pos2.y == 0) - sprite->data[0]++; + sprite->sState++; break; } } -static void sub_81061C8(struct Sprite *sprite) +static void SpriteCB_DigitalDisplay_BigBonus(struct Sprite *sprite) { s16 sp0[] = {160, 192, 224, 104, 80, 64, 48, 24}; - if (sprite->data[0] == 0) + if (sprite->sState == 0) { - sprite->data[0]++; - sprite->data[1] = 12; + sprite->sState++; + sprite->sCounter = 12; } - sprite->pos2.x = Cos(sp0[sprite->data[6]], sprite->data[1]); - sprite->pos2.y = Sin(sp0[sprite->data[6]], sprite->data[1]); - if (sprite->data[1] != 0) - sprite->data[1]--; + sprite->pos2.x = Cos(sp0[sprite->sSpriteId], sprite->sCounter); + sprite->pos2.y = Sin(sp0[sprite->sSpriteId], sprite->sCounter); + if (sprite->sCounter != 0) + sprite->sCounter--; } -static void sub_8106230(struct Sprite *sprite) +// For the A Button prompt when inserting bet +// Initially no sprite until after the first bet +static void SpriteCB_DigitalDisplay_AButtonStart(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: - sSlotMachine->winIn = 0x2f; - sSlotMachine->winOut = 0x3f; - sSlotMachine->win0v = 0x2088; + sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_CLR; + sSlotMachine->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; + sSlotMachine->win0v = WIN_RANGE(32, 136); sprite->invisible = TRUE; - sprite->data[0]++; + sprite->sState++; // fallthrough case 1: - sprite->data[1] += 2; - sprite->data[2] = sprite->data[1] + 0xb0; - sprite->data[3] = 0xf0 - sprite->data[1]; - if (sprite->data[2] > 0xd0) - sprite->data[2] = 0xd0; - if (sprite->data[3] < 0xd0) - sprite->data[3] = 0xd0; + sprite->sCounter += 2; + sprite->data[2] = sprite->sCounter + 176; + sprite->data[3] = DISPLAY_WIDTH - sprite->sCounter; + if (sprite->data[2] > 208) + sprite->data[2] = 208; + if (sprite->data[3] < 208) + sprite->data[3] = 208; sSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3]; - if (sprite->data[1] > 0x33) + if (sprite->sCounter > 51) { - sprite->data[0]++; - sSlotMachine->winIn = 0x3f; + sprite->sState++; + sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; } break; case 2: if (sSlotMachine->bet == 0) break; - sub_8104D30(DIG_SPRITE_A_BUTTON, SpriteCallbackDummy, 0xd0, 0x74, 0); - sSlotMachine->win0h = 0xc0e0; - sSlotMachine->win0v = 0x6880; - sSlotMachine->winIn = 0x2f; - sprite->data[0]++; - sprite->data[1] = 0; + AddDigitalDisplaySprite(DIG_SPRITE_A_BUTTON, SpriteCallbackDummy, 208, 116, 0); + sSlotMachine->win0h = WIN_RANGE(192, 224); + sSlotMachine->win0v = WIN_RANGE(104, 128); + sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_CLR; + sprite->sState++; + sprite->sCounter = 0; // fallthrough case 3: - sprite->data[1] += 2; - sprite->data[2] = sprite->data[1] + 0xc0; - sprite->data[3] = 0xe0 - sprite->data[1]; - if (sprite->data[2] > 0xd0) - sprite->data[2] = 0xd0; - if (sprite->data[3] < 0xd0) - sprite->data[3] = 0xd0; + sprite->sCounter += 2; + sprite->data[2] = sprite->sCounter + 192; + sprite->data[3] = DISPLAY_WIDTH - 16 - sprite->sCounter; + if (sprite->data[2] > 208) + sprite->data[2] = 208; + if (sprite->data[3] < 208) + sprite->data[3] = 208; sSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3]; - if (sprite->data[1] > 0x0f) + if (sprite->sCounter > 15) { - sprite->data[0]++; - sSlotMachine->winIn = 0x3f; + sprite->sState++; + sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; } break; } } -static void nullsub_70(void) +static void EndDigitalDisplayScene_Dummy(void) { } -static void sub_8106364(void) +static void EndDigitalDisplayScene_StopReel(void) { SetGpuReg(REG_OFFSET_MOSAIC, 0); } -static void sub_8106370(void) +static void EndDigitalDisplayScene_Win(void) { - LoadPalette(gUnknown_083EDE20, (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20); + LoadPalette(sDigitalDisplay_Pal, (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 0x20); } -static void sub_810639C(void) +static void EndDigitalDisplayScene_InsertBet(void) { - sSlotMachine->win0h = 0xf0; - sSlotMachine->win0v = 0xa0; - sSlotMachine->winIn = 0x3f; - sSlotMachine->winOut = 0x3f; + sSlotMachine->win0h = DISPLAY_WIDTH; + sSlotMachine->win0v = DISPLAY_HEIGHT; + sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; + sSlotMachine->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; } static void sub_81063C0(void) { u8 i; - sub_8106404(); + LoadReelBackground(); sDigitalDisplayGfxPtr = Alloc(0x3200); LZDecompressWram(gSlotMachineDigitalDisplay_Gfx, sDigitalDisplayGfxPtr); sReelTimeGfxPtr = Alloc(0x3600); LZDecompressWram(sReelTimeGfx, sReelTimeGfxPtr); - sUnknown_0203AB30 = AllocZeroed(sizeof(struct SpriteSheet) * ARRAY_COUNT(gSlotMachineSpriteSheets)); - for (i = 0; i < ARRAY_COUNT(gSlotMachineSpriteSheets); i++) + sSlotMachineSpritesheetsPtr = AllocZeroed(sizeof(struct SpriteSheet) * ARRAY_COUNT(sSlotMachineSpriteSheets)); + for (i = 0; i < ARRAY_COUNT(sSlotMachineSpriteSheets); i++) { - sUnknown_0203AB30[i].data = gSlotMachineSpriteSheets[i].data; - sUnknown_0203AB30[i].size = gSlotMachineSpriteSheets[i].size; - sUnknown_0203AB30[i].tag = gSlotMachineSpriteSheets[i].tag; + sSlotMachineSpritesheetsPtr[i].data = sSlotMachineSpriteSheets[i].data; + sSlotMachineSpritesheetsPtr[i].size = sSlotMachineSpriteSheets[i].size; + sSlotMachineSpritesheetsPtr[i].tag = sSlotMachineSpriteSheets[i].tag; } - sUnknown_0203AB30[17].data = sDigitalDisplayGfxPtr + 0xA00; // STOP - sUnknown_0203AB30[18].data = sDigitalDisplayGfxPtr + 0x1400; // BONUS - sUnknown_0203AB30[19].data = sDigitalDisplayGfxPtr + 0x1600; // BIG - sUnknown_0203AB30[20].data = sDigitalDisplayGfxPtr + 0x1900; // REG - LoadSpriteSheets(sUnknown_0203AB30); - LoadSpritePalettes(gSlotMachineSpritePalettes); + sSlotMachineSpritesheetsPtr[GFXTAG_STOP - 1].data = sDigitalDisplayGfxPtr + 0xA00; + sSlotMachineSpritesheetsPtr[GFXTAG_BONUS - 1].data = sDigitalDisplayGfxPtr + 0x1400; + sSlotMachineSpritesheetsPtr[GFXTAG_BIG - 1].data = sDigitalDisplayGfxPtr + 0x1600; + sSlotMachineSpritesheetsPtr[GFXTAG_REG - 1].data = sDigitalDisplayGfxPtr + 0x1900; + LoadSpriteSheets(sSlotMachineSpritesheetsPtr); + LoadSpritePalettes(sSlotMachineSpritePalettes); } -static void sub_8106404(void) +static void LoadReelBackground(void) { u8 *dest; u8 i, j; - sUnknown_0203AB2C = AllocZeroed(sizeof(struct SpriteSheet)); - sUnknown_0203AAE0 = AllocZeroed(0x2000); - dest = sUnknown_0203AAE0; + sReelBackgroundSpriteSheet = AllocZeroed(sizeof(struct SpriteSheet)); + sReelBackground_Gfx = AllocZeroed(0x2000); // Background is plain white + dest = sReelBackground_Gfx; for (i = 0; i < 0x40; i++) { for (j = 0; j < 0x20; j++, dest++) - *dest = gUnknown_083EDCDC[j]; + *dest = sReelBackground_Tilemap[j]; } - sUnknown_0203AB2C->data = sUnknown_0203AAE0; - sUnknown_0203AB2C->size = 0x800; - sUnknown_0203AB2C->tag = 0x11; - LoadSpriteSheet(sUnknown_0203AB2C); + sReelBackgroundSpriteSheet->data = sReelBackground_Gfx; + sReelBackgroundSpriteSheet->size = 0x800; + sReelBackgroundSpriteSheet->tag = GFXTAG_REEL_BG; + LoadSpriteSheet(sReelBackgroundSpriteSheet); } -static void sub_8106448(void) +static void LoadMenuGfx(void) { - sUnknown_0203AAC8 = Alloc(0x2200); - LZDecompressWram(gSlotMachineMenu_Gfx, sUnknown_0203AAC8); - LoadBgTiles(2, sUnknown_0203AAC8, 0x2200, 0); + sMenuGfx = Alloc(0x2200); + LZDecompressWram(gSlotMachineMenu_Gfx, sMenuGfx); + LoadBgTiles(2, sMenuGfx, 0x2200, 0); LoadPalette(gSlotMachineMenu_Pal, 0, 160); LoadPalette(gPalette_83EDE24, 208, 32); } static void sub_81064B8(void) { - sub_812F968(); - LoadSlotMachineWheelOverlay(); + LoadSlotMachineMenuTilemap(); + LoadSlotMachineReelOverlay(); } -static void sub_812F968(void) +static void LoadSlotMachineMenuTilemap(void) { LoadBgTilemap(2, gSlotMachineMenu_Tilemap, 0x500, 0); } -static void LoadSlotMachineWheelOverlay(void) +static void LoadSlotMachineReelOverlay(void) { s16 x, y, dx; @@ -4365,40 +4524,41 @@ static void LoadSlotMachineWheelOverlay(void) { for (dx = 0; dx < 4; dx++) { - LoadBgTilemap(3, sUnknown_0203AAD0, 2, x + dx + 5 * 32); - LoadBgTilemap(3, sUnknown_0203AAD0 + 1, 2, x + dx + 13 * 32); - LoadBgTilemap(3, sUnknown_0203AAD0 + 2, 2, x + dx + 6 * 32); - LoadBgTilemap(3, sUnknown_0203AAD0 + 3, 2, x + dx + 12 * 32); + LoadBgTilemap(3, sReelOverlay_Tilemap, 2, x + dx + 5 * 32); + LoadBgTilemap(3, sReelOverlay_Tilemap + 1, 2, x + dx + 13 * 32); + LoadBgTilemap(3, sReelOverlay_Tilemap + 2, 2, x + dx + 6 * 32); + LoadBgTilemap(3, sReelOverlay_Tilemap + 3, 2, x + dx + 12 * 32); } - LoadBgTilemap(3, sUnknown_0203AAD0 + 4, 2, x + 6 * 32); - LoadBgTilemap(3, sUnknown_0203AAD0 + 5, 2, x + 12 * 32); + LoadBgTilemap(3, sReelOverlay_Tilemap + 4, 2, x + 6 * 32); + LoadBgTilemap(3, sReelOverlay_Tilemap + 5, 2, x + 12 * 32); for (y = 7; y <= 11; y++) - LoadBgTilemap(3, sUnknown_0203AAD0 + 6, 2, x + y * 32); + LoadBgTilemap(3, sReelOverlay_Tilemap + 6, 2, x + y * 32); } } -static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) +// For (un)shading the gray button at the bottom of a reel when A is pressed. The button is colored in quadrants +static void SetReelButtonTilemap(s16 offset, u16 topLeft, u16 topRight, u16 bottomLeft, u16 bottomRight) { - sUnknown_0203AADC[0] = arg1; - sUnknown_0203AADC[1] = arg2; - sUnknown_0203AADC[2] = arg3; - sUnknown_0203AADC[3] = arg4; + sReelButtonPress_Tilemap[0] = topLeft; + sReelButtonPress_Tilemap[1] = topRight; + sReelButtonPress_Tilemap[2] = bottomLeft; + sReelButtonPress_Tilemap[3] = bottomRight; - LoadBgTilemap(2, sUnknown_0203AADC, 2, 15 * 32 + arg0); - LoadBgTilemap(2, sUnknown_0203AADC + 1, 2, 15 * 32 + 1 + arg0); - LoadBgTilemap(2, sUnknown_0203AADC + 2, 2, 16 * 32 + arg0); - LoadBgTilemap(2, sUnknown_0203AADC + 3, 2, 16 * 32 + 1 + arg0); + LoadBgTilemap(2, sReelButtonPress_Tilemap, 2, 15 * 32 + offset); // Top left + LoadBgTilemap(2, sReelButtonPress_Tilemap + 1, 2, 15 * 32 + 1 + offset); // Top right + LoadBgTilemap(2, sReelButtonPress_Tilemap + 2, 2, 16 * 32 + offset); // Bottom left + LoadBgTilemap(2, sReelButtonPress_Tilemap + 3, 2, 16 * 32 + 1 + offset); // Bottom Right } -static void sub_81065DC(void) +static void LoadInfoBoxTilemap(void) { - LoadBgTilemap(2, gUnknown_08DCEC70, 0x500, 0); + LoadBgTilemap(2, gSlotMachineInfoBox_Tilemap, 0x500, 0); HideBg(3); } -static void SlotMachineSetup_SetDigDisplayImagePtrs(void) +static void SetDigitalDisplayImagePtrs(void) { sImageTables_DigitalDisplay[DIG_SPRITE_REEL] = sImageTable_DigitalDisplay_Reel; sImageTables_DigitalDisplay[DIG_SPRITE_TIME] = sImageTable_DigitalDisplay_Time; @@ -4428,7 +4588,7 @@ static void SlotMachineSetup_SetDigDisplayImagePtrs(void) sImageTables_DigitalDisplay[DIG_SPRITE_EMPTY] = NULL; } -static void SlotMachineSetup_AllocDigDisplayGfx(void) +static void AllocDigitalDisplayGfx(void) { sImageTable_DigitalDisplay_Reel = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); sImageTable_DigitalDisplay_Reel[0].data = sDigitalDisplayGfxPtr; @@ -4501,76 +4661,76 @@ static void SlotMachineSetup_AllocDigDisplayGfx(void) sImageTable_DigitalDisplay_DPad[1].size = 0x180; } -static const u8 sReelSymbols[NUM_REELS][REEL_NUM_TAGS] = +static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] = { { - SLOT_MACHINE_TAG_7_RED, - SLOT_MACHINE_TAG_CHERRY, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_7_BLUE, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_CHERRY, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_7_RED, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_7_BLUE, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_REPLAY + GFXTAG_7_RED, + GFXTAG_CHERRY, + GFXTAG_AZURILL, + GFXTAG_REPLAY, + GFXTAG_POWER, + GFXTAG_LOTAD, + GFXTAG_7_BLUE, + GFXTAG_LOTAD, + GFXTAG_CHERRY, + GFXTAG_POWER, + GFXTAG_REPLAY, + GFXTAG_AZURILL, + GFXTAG_7_RED, + GFXTAG_POWER, + GFXTAG_LOTAD, + GFXTAG_REPLAY, + GFXTAG_AZURILL, + GFXTAG_7_BLUE, + GFXTAG_POWER, + GFXTAG_LOTAD, + GFXTAG_REPLAY }, { - SLOT_MACHINE_TAG_7_RED, - SLOT_MACHINE_TAG_CHERRY, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_CHERRY, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_7_BLUE, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_CHERRY, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_CHERRY, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_CHERRY + GFXTAG_7_RED, + GFXTAG_CHERRY, + GFXTAG_REPLAY, + GFXTAG_LOTAD, + GFXTAG_AZURILL, + GFXTAG_CHERRY, + GFXTAG_REPLAY, + GFXTAG_POWER, + GFXTAG_POWER, + GFXTAG_LOTAD, + GFXTAG_7_BLUE, + GFXTAG_LOTAD, + GFXTAG_REPLAY, + GFXTAG_CHERRY, + GFXTAG_AZURILL, + GFXTAG_LOTAD, + GFXTAG_REPLAY, + GFXTAG_CHERRY, + GFXTAG_LOTAD, + GFXTAG_REPLAY, + GFXTAG_CHERRY }, { - SLOT_MACHINE_TAG_7_RED, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_7_BLUE, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_AZURILL, - SLOT_MACHINE_TAG_POWER, - SLOT_MACHINE_TAG_REPLAY, - SLOT_MACHINE_TAG_LOTAD, - SLOT_MACHINE_TAG_CHERRY + GFXTAG_7_RED, + GFXTAG_POWER, + GFXTAG_7_BLUE, + GFXTAG_REPLAY, + GFXTAG_LOTAD, + GFXTAG_AZURILL, + GFXTAG_REPLAY, + GFXTAG_LOTAD, + GFXTAG_POWER, + GFXTAG_AZURILL, + GFXTAG_REPLAY, + GFXTAG_LOTAD, + GFXTAG_AZURILL, + GFXTAG_POWER, + GFXTAG_REPLAY, + GFXTAG_LOTAD, + GFXTAG_AZURILL, + GFXTAG_POWER, + GFXTAG_REPLAY, + GFXTAG_LOTAD, + GFXTAG_CHERRY }, }; @@ -4643,7 +4803,7 @@ static const u16 gReelTimeBonusIncrementTable[] = { // tentative name static const u8 gBiasTags[] = { - SLOT_MACHINE_TAG_REPLAY, SLOT_MACHINE_TAG_CHERRY, SLOT_MACHINE_TAG_LOTAD, SLOT_MACHINE_TAG_AZURILL, SLOT_MACHINE_TAG_POWER, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED + GFXTAG_REPLAY, GFXTAG_CHERRY, GFXTAG_LOTAD, GFXTAG_AZURILL, GFXTAG_POWER, GFXTAG_7_RED, GFXTAG_7_RED, GFXTAG_7_RED }; static const u16 gLuckyFlagSettings_Top3[] = { @@ -4680,144 +4840,144 @@ static const u16 gSlotPayouts[] = { 2, 4, 0, 6, 12, 3, 90, 300, 300 }; -static const s16 gUnknown_083ECE7E[][2] = { - { 0xd0, 0x38}, - { 0xb8, 0x00}, - { 0xc8, 0x08}, - { 0xd8, 0x10}, - { 0xe8, 0x18}, - { 0xd0, 0x48}, - { 0xd0, 0x08}, - { 0xd0, 0x40}, - { 0xd0, 0x38}, - { 0xc0, 0x58}, - { 0xe0, 0x58}, - { 0xc0, 0x78}, - { 0xe0, 0x78}, - { 0x90, 0x38}, - {0x110, 0x58}, - { 0xa8, 0x70}, - { 0xd0, 0x54}, - { 0xd0, 0x70}, - { 0xbc, 0x34}, - { 0xd0, 0x34}, - { 0xe4, 0x34}, - { 0xb8, 0x48}, - { 0xc4, 0x48}, - { 0xd0, 0x48}, - { 0xdc, 0x48}, - { 0xe8, 0x48}, - { 0xbc, 0x34}, - { 0xd0, 0x34}, - { 0xe4, 0x34}, - { 0xb8, 0x48}, - { 0xc4, 0x48}, - { 0xd0, 0x48}, - { 0xdc, 0x48}, - { 0xe8, 0x48}, - { 0x00, 0x00} +static const s16 sDigitalDisplay_SpriteCoords[][2] = { + [DIG_DISPINFO_INSERT] = { 208, 56}, + [DIG_DISPINFO_STOP_S] = { 184, 0}, + [DIG_DISPINFO_STOP_T] = { 200, 8}, + [DIG_DISPINFO_STOP_O] = { 216, 16}, + [DIG_DISPINFO_STOP_P] = { 232, 24}, + [DIG_DISPINFO_A_BUTTON_STOP] = { 208, 72}, + [DIG_DISPINFO_POKE_BALL_ROCKING] = { 208, 8}, + [DIG_DISPINFO_WIN] = { 208, 64}, + [DIG_DISPINFO_LOSE] = { 208, 56}, + [DIG_DISPINFO_SMOKE_NW] = { 192, 88}, + [DIG_DISPINFO_SMOKE_NE] = { 224, 88}, + [DIG_DISPINFO_SMOKE_SW] = { 192, 120}, + [DIG_DISPINFO_SMOKE_SE] = { 224, 120}, + [DIG_DISPINFO_REEL] = { 144, 56}, + [DIG_DISPINFO_TIME] = { 272, 88}, + [DIG_DISPINFO_NUMBER] = { 168, 112}, + [DIG_DISPINFO_DPAD] = { 208, 84}, + [DIG_DISPINFO_POKE_BALL_SHINING] = { 208, 112}, + [DIG_DISPINFO_REG_R] = { 188, 52}, + [DIG_DISPINFO_REG_E] = { 208, 52}, + [DIG_DISPINFO_REG_G] = { 228, 52}, + [DIG_DISPINFO_REG_BONUS_B] = { 184, 72}, + [DIG_DISPINFO_REG_BONUS_O] = { 196, 72}, + [DIG_DISPINFO_REG_BONUS_N] = { 208, 72}, + [DIG_DISPINFO_REG_BONUS_U] = { 220, 72}, + [DIG_DISPINFO_REG_BONUS_S] = { 232, 72}, + [DIG_DISPINFO_BIG_B] = { 188, 52}, + [DIG_DISPINFO_BIG_I] = { 208, 52}, + [DIG_DISPINFO_BIG_G] = { 228, 52}, + [DIG_DISPINFO_BIG_BONUS_B] = { 184, 72}, + [DIG_DISPINFO_BIG_BONUS_O] = { 196, 72}, + [DIG_DISPINFO_BIG_BONUS_N] = { 208, 72}, + [DIG_DISPINFO_BIG_BONUS_U] = { 220, 72}, + [DIG_DISPINFO_BIG_BONUS_S] = { 232, 72}, + [DIG_DISPINFO_A_BUTTON_START] = { 0, 0} // Initially offscreen }; -static const SpriteCallback gUnknown_083ECF0C[] = { - sub_8105C64, - sub_8105F54, - sub_8105F54, - sub_8105F54, - sub_8105F54, - sub_8105F9C, - sub_8105EB4, - sub_8105C64, - sub_8105C64, - sub_8105C6C, - sub_8105CF0, - sub_8105D08, - sub_8105D20, - sub_8105D3C, - sub_8105DA4, - sub_8105E08, - sub_8105C64, - sub_8106058, - sub_81060FC, - sub_81060FC, - sub_81060FC, - sub_81060FC, - sub_81060FC, - sub_81060FC, - sub_81060FC, - sub_81060FC, - sub_81061C8, - sub_81061C8, - sub_81061C8, - sub_81061C8, - sub_81061C8, - sub_81061C8, - sub_81061C8, - sub_81061C8, - sub_8106230 +static const SpriteCallback sDigitalDisplay_SpriteCallbacks[] = { + [DIG_DISPINFO_INSERT] = SpriteCB_DigitalDisplay_Static, + [DIG_DISPINFO_STOP_S] = SpriteCB_DigitalDisplay_Stop, + [DIG_DISPINFO_STOP_T] = SpriteCB_DigitalDisplay_Stop, + [DIG_DISPINFO_STOP_O] = SpriteCB_DigitalDisplay_Stop, + [DIG_DISPINFO_STOP_P] = SpriteCB_DigitalDisplay_Stop, + [DIG_DISPINFO_A_BUTTON_STOP] = SpriteCB_DigitalDisplay_AButtonStop, + [DIG_DISPINFO_POKE_BALL_ROCKING] = SpriteCB_DigitalDisplay_PokeballRocking, + [DIG_DISPINFO_WIN] = SpriteCB_DigitalDisplay_Static, + [DIG_DISPINFO_LOSE] = SpriteCB_DigitalDisplay_Static, + [DIG_DISPINFO_SMOKE_NW] = SpriteCB_DigitalDisplay_Smoke, + [DIG_DISPINFO_SMOKE_NE] = SpriteCB_DigitalDisplay_SmokeNE, + [DIG_DISPINFO_SMOKE_SW] = SpriteCB_DigitalDisplay_SmokeSW, + [DIG_DISPINFO_SMOKE_SE] = SpriteCB_DigitalDisplay_SmokeSE, + [DIG_DISPINFO_REEL] = SpriteCB_DigitalDisplay_Reel, + [DIG_DISPINFO_TIME] = SpriteCB_DigitalDisplay_Time, + [DIG_DISPINFO_NUMBER] = SpriteCB_DigitalDisplay_ReelTimeNumber, + [DIG_DISPINFO_DPAD] = SpriteCB_DigitalDisplay_Static, + [DIG_DISPINFO_POKE_BALL_SHINING] = SpriteCB_DigitalDisplay_PokeballShining, + [DIG_DISPINFO_REG_R] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_REG_E] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_REG_G] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_REG_BONUS_B] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_REG_BONUS_O] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_REG_BONUS_N] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_REG_BONUS_U] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_REG_BONUS_S] = SpriteCB_DigitalDisplay_RegBonus, + [DIG_DISPINFO_BIG_B] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_BIG_I] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_BIG_G] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_BIG_BONUS_B] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_BIG_BONUS_O] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_BIG_BONUS_N] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_BIG_BONUS_U] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_BIG_BONUS_S] = SpriteCB_DigitalDisplay_BigBonus, + [DIG_DISPINFO_A_BUTTON_START] = SpriteCB_DigitalDisplay_AButtonStart }; static const struct DigitalDisplaySprite sDigitalDisplay_InsertBet[] = { - {DIG_SPRITE_EMPTY, 34, 0}, // Replaced with DIG_SPRITE_A_BUTTON after first bet - {DIG_SPRITE_INSERT, 0, 0}, - {DIG_SPRITE_D_PAD, 16, 0}, + {DIG_SPRITE_EMPTY, DIG_DISPINFO_A_BUTTON_START, 0}, // Sprite replaced with DIG_SPRITE_A_BUTTON after first bet + {DIG_SPRITE_INSERT, DIG_DISPINFO_INSERT, 0}, + {DIG_SPRITE_D_PAD, DIG_DISPINFO_DPAD, 0}, DIG_SPRITE_DUMMY }; static const struct DigitalDisplaySprite sDigitalDisplay_StopReel[] = { - {DIG_SPRITE_STOP_S, 1, 0}, - {DIG_SPRITE_STOP_T, 2, 0}, - {DIG_SPRITE_STOP_O, 3, 0}, - {DIG_SPRITE_STOP_P, 4, 0}, - {DIG_SPRITE_A_BUTTON, 5, 0}, - {DIG_SPRITE_POKE_BALL, 6, 0}, + {DIG_SPRITE_STOP_S, DIG_DISPINFO_STOP_S, 0}, + {DIG_SPRITE_STOP_T, DIG_DISPINFO_STOP_T, 0}, + {DIG_SPRITE_STOP_O, DIG_DISPINFO_STOP_O, 0}, + {DIG_SPRITE_STOP_P, DIG_DISPINFO_STOP_P, 0}, + {DIG_SPRITE_A_BUTTON, DIG_DISPINFO_A_BUTTON_STOP, 0}, + {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_ROCKING, 0}, DIG_SPRITE_DUMMY }; static const struct DigitalDisplaySprite sDigitalDisplay_Win[] = { - {DIG_SPRITE_WIN, 7, 0}, - {DIG_SPRITE_POKE_BALL, 17, 0}, + {DIG_SPRITE_WIN, DIG_DISPINFO_WIN, 0}, + {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_SHINING, 0}, DIG_SPRITE_DUMMY }; static const struct DigitalDisplaySprite sDigitalDisplay_Lose[] = { - {DIG_SPRITE_LOSE, 8, 0}, - {DIG_SPRITE_SMOKE, 9, 0}, - {DIG_SPRITE_SMOKE, 10, 1}, - {DIG_SPRITE_SMOKE, 11, 2}, - {DIG_SPRITE_SMOKE, 12, 3}, + {DIG_SPRITE_LOSE, DIG_DISPINFO_LOSE, 0}, + {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_NW, 0}, + {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_NE, 1}, + {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_SW, 2}, + {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_SE, 3}, DIG_SPRITE_DUMMY }; static const struct DigitalDisplaySprite sDigitalDisplay_ReelTime[] = { - {DIG_SPRITE_REEL, 13, 0}, - {DIG_SPRITE_TIME, 14, 0}, - {DIG_SPRITE_NUMBER, 15, 0}, // Number of reel time spins left + {DIG_SPRITE_REEL, DIG_DISPINFO_REEL, 0}, + {DIG_SPRITE_TIME, DIG_DISPINFO_TIME, 0}, + {DIG_SPRITE_NUMBER, DIG_DISPINFO_NUMBER, 0}, // Number of reel time spins left DIG_SPRITE_DUMMY }; static const struct DigitalDisplaySprite sDigitalDisplay_BonusBig[] = { - {DIG_SPRITE_BIG_B, 26, 0}, - {DIG_SPRITE_BIG_I, 27, 1}, - {DIG_SPRITE_BIG_G, 28, 2}, - {DIG_SPRITE_BONUS_B, 29, 3}, - {DIG_SPRITE_BONUS_O, 30, 4}, - {DIG_SPRITE_BONUS_N, 31, 5}, - {DIG_SPRITE_BONUS_U, 32, 6}, - {DIG_SPRITE_BONUS_S, 33, 7}, - {DIG_SPRITE_POKE_BALL, 17, 0}, + {DIG_SPRITE_BIG_B, DIG_DISPINFO_BIG_B, 0}, + {DIG_SPRITE_BIG_I, DIG_DISPINFO_BIG_I, 1}, + {DIG_SPRITE_BIG_G, DIG_DISPINFO_BIG_G, 2}, + {DIG_SPRITE_BONUS_B, DIG_DISPINFO_BIG_BONUS_B, 3}, + {DIG_SPRITE_BONUS_O, DIG_DISPINFO_BIG_BONUS_O, 4}, + {DIG_SPRITE_BONUS_N, DIG_DISPINFO_BIG_BONUS_N, 5}, + {DIG_SPRITE_BONUS_U, DIG_DISPINFO_BIG_BONUS_U, 6}, + {DIG_SPRITE_BONUS_S, DIG_DISPINFO_BIG_BONUS_S, 7}, + {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_SHINING, 0}, DIG_SPRITE_DUMMY }; static const struct DigitalDisplaySprite sDigitalDisplay_BonusRegular[] = { - {DIG_SPRITE_REG_R, 18, 0}, - {DIG_SPRITE_REG_E, 19, 1}, - {DIG_SPRITE_REG_G, 20, 2}, - {DIG_SPRITE_BONUS_B, 21, 3}, - {DIG_SPRITE_BONUS_O, 22, 4}, - {DIG_SPRITE_BONUS_N, 23, 5}, - {DIG_SPRITE_BONUS_U, 24, 6}, - {DIG_SPRITE_BONUS_S, 25, 7}, - {DIG_SPRITE_POKE_BALL, 17, 0}, + {DIG_SPRITE_REG_R, DIG_DISPINFO_REG_R, 0}, + {DIG_SPRITE_REG_E, DIG_DISPINFO_REG_E, 1}, + {DIG_SPRITE_REG_G, DIG_DISPINFO_REG_G, 2}, + {DIG_SPRITE_BONUS_B, DIG_DISPINFO_REG_BONUS_B, 3}, + {DIG_SPRITE_BONUS_O, DIG_DISPINFO_REG_BONUS_O, 4}, + {DIG_SPRITE_BONUS_N, DIG_DISPINFO_REG_BONUS_N, 5}, + {DIG_SPRITE_BONUS_U, DIG_DISPINFO_REG_BONUS_U, 6}, + {DIG_SPRITE_BONUS_S, DIG_DISPINFO_REG_BONUS_S, 7}, + {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_SHINING, 0}, DIG_SPRITE_DUMMY }; @@ -4831,14 +4991,14 @@ static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[] = { [DIG_DISPLAY_BONUS_BIG] = sDigitalDisplay_BonusBig }; -static void (*const gUnknown_083ED064[])(void) = { - sub_810639C, - sub_8106364, - sub_8106370, - nullsub_70, - nullsub_70, - sub_8106370, - sub_8106370 +static void (*const sDigitalDisplaySceneExitCallbacks[])(void) = { + [DIG_DISPLAY_INSERT_BET] = EndDigitalDisplayScene_InsertBet, + [DIG_DISPLAY_STOP_REEL] = EndDigitalDisplayScene_StopReel, + [DIG_DISPLAY_WIN] = EndDigitalDisplayScene_Win, + [DIG_DISPLAY_LOSE] = EndDigitalDisplayScene_Dummy, + [DIG_DISPLAY_REEL_TIME] = EndDigitalDisplayScene_Dummy, + [DIG_DISPLAY_BONUS_REG] = EndDigitalDisplayScene_Win, + [DIG_DISPLAY_BONUS_BIG] = EndDigitalDisplayScene_Win }; static const struct OamData sOam_8x8 = @@ -4988,7 +5148,7 @@ static const struct SpriteFrameImage sImageTable_ReelTimeNumbers[] = }; static const struct SpriteFrameImage sImageTable_ReelTimeShadow[] = { gSlotMachineReelTimeShadow, 0x200 }; -static const struct SpriteFrameImage gUnknown_085A7AB4[] = { gUnknown_08DD1A18, 0x40 }; +static const struct SpriteFrameImage sImageTable_ReelTimeNumberGap[] = { gSlotMachineReelTimeNumberGap_Gfx, 0x40 }; static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] = { @@ -5008,13 +5168,13 @@ static const struct SpriteFrameImage sImageTable_ReelTimeDuck[] = { gSlotMachine static const struct SpriteFrameImage sImageTable_ReelTimeSmoke[] = { gSlotMachineReelTimeSmoke, 0x80}; static const struct SpriteFrameImage sImageTable_PikaPowerBolt[] = { gSlotMachinePikaPowerBolt, 0x20}; -static const union AnimCmd gUnknown_085A7AFC[] = +static const union AnimCmd sAnim_SingleFrame[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd gUnknown_085A7B04[] = +static const union AnimCmd sAnim_ReelTimeDuck[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_JUMP(0) @@ -5176,14 +5336,14 @@ static const union AnimCmd sAnim_DigitalDisplay_Number_5[] = ANIMCMD_END }; -static const union AnimCmd *const gUnknown_085A7BF8[] = +static const union AnimCmd *const sAnims_SingleFrame[] = { - gUnknown_085A7AFC + sAnim_SingleFrame }; -static const union AnimCmd *const gUnknown_085A7BFC[] = +static const union AnimCmd *const sAnims_ReelTimeDuck[] = { - gUnknown_085A7B04 + sAnim_ReelTimeDuck }; static const union AnimCmd *const sAnims_ReelTimePikachu[] = @@ -5279,10 +5439,10 @@ static const union AffineAnimCmd *const sAffineAnims_PikaPowerBolt[] = static const struct SpriteTemplate sSpriteTemplate_ReelSymbol = { - .tileTag = 0, - .paletteTag = 0, + .tileTag = GFXTAG_SYMBOLS_START, + .paletteTag = PALTAG_REEL, .oam = &sOam_32x32, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelSymbol @@ -5290,10 +5450,10 @@ static const struct SpriteTemplate sSpriteTemplate_ReelSymbol = static const struct SpriteTemplate sSpriteTemplate_CoinNumber = { - .tileTag = 7, - .paletteTag = 4, + .tileTag = GFXTAG_NUMBERS_START, + .paletteTag = PALTAG_MISC, .oam = &sOam_8x16, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_CoinNumber @@ -5301,10 +5461,10 @@ static const struct SpriteTemplate sSpriteTemplate_CoinNumber = static const struct SpriteTemplate sSpriteTemplate_ReelBackground = { - .tileTag = 17, - .paletteTag = 0, + .tileTag = GFXTAG_REEL_BG, + .paletteTag = PALTAG_REEL, .oam = &sOam_64x64, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5313,7 +5473,7 @@ static const struct SpriteTemplate sSpriteTemplate_ReelBackground = static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu = { .tileTag = 0xFFFF, - .paletteTag = 1, + .paletteTag = PALTAG_REEL_TIME_PIKACHU, .oam = &sOam_64x64, .anims = sAnims_ReelTimePikachu, .images = NULL, @@ -5324,9 +5484,9 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu = static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachineAntennae = { .tileTag = 0xFFFF, - .paletteTag = 2, + .paletteTag = PALTAG_REEL_TIME_MISC, .oam = &sOam_8x16, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5335,9 +5495,9 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachineAntennae = static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachine = { .tileTag = 0xFFFF, - .paletteTag = 3, + .paletteTag = PALTAG_REEL_TIME_MACHINE, .oam = &sOam_8x16, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5346,9 +5506,9 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachine = static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine = { .tileTag = 0xFFFF, - .paletteTag = 3, + .paletteTag = PALTAG_REEL_TIME_MACHINE, .oam = &sOam_8x16, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5357,7 +5517,7 @@ static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine = static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers = { .tileTag = 0xFFFF, - .paletteTag = 4, + .paletteTag = PALTAG_MISC, .oam = &sOam_16x16, .anims = sAnims_ReelTimeNumbers, .images = sImageTable_ReelTimeNumbers, @@ -5368,21 +5528,21 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers = static const struct SpriteTemplate sSpriteTemplate_ReelTimeShadow = { .tileTag = 0xFFFF, - .paletteTag = 4, + .paletteTag = PALTAG_MISC, .oam = &sOam_16x16, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = sImageTable_ReelTimeShadow, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_83ED4EC = +static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumberGap = { .tileTag = 0xFFFF, - .paletteTag = 4, + .paletteTag = PALTAG_MISC, .oam = &sOam_16x16, - .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AB4, + .anims = sAnims_SingleFrame, + .images = sImageTable_ReelTimeNumberGap, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; @@ -5390,7 +5550,7 @@ static const struct SpriteTemplate gSpriteTemplate_83ED4EC = static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt = { .tileTag = 0xFFFF, - .paletteTag = 4, + .paletteTag = PALTAG_MISC, .oam = &sOam_16x32, .anims = sAnims_ReelTimeBolt, .images = sImageTable_ReelTimeBolt, @@ -5401,9 +5561,9 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt = static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura = { .tileTag = 0xFFFF, - .paletteTag = 7, + .paletteTag = PALTAG_PIKA_AURA, .oam = &sOam_32x64, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = sImageTable_ReelTimePikachuAura, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimePikachuAura @@ -5412,7 +5572,7 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura = static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion = { .tileTag = 0xFFFF, - .paletteTag = 5, + .paletteTag = PALTAG_EXPLOSION, .oam = &sOam_32x32, .anims = sAnims_ReelTimeExplosion, .images = sImageTable_ReelTimeExplosion, @@ -5423,9 +5583,9 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion = static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck = { .tileTag = 0xFFFF, - .paletteTag = 4, + .paletteTag = PALTAG_MISC, .oam = &sOam_8x8, - .anims = gUnknown_085A7BFC, + .anims = sAnims_ReelTimeDuck, .images = sImageTable_ReelTimeDuck, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimeDuck @@ -5434,9 +5594,9 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck = static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke = { .tileTag = 0xFFFF, - .paletteTag = 4, + .paletteTag = PALTAG_MISC, .oam = &sOam_16x16, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = sImageTable_ReelTimeSmoke, .affineAnims = sAffineAnims_ReelTimeSmoke, .callback = SpriteCB_ReelTimeSmoke @@ -5445,9 +5605,9 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reel = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5456,9 +5616,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reel = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Time = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5467,9 +5627,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Time = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Insert = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5478,9 +5638,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Insert = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Stop = { .tileTag = 18, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5489,9 +5649,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Stop = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Win = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_64x32, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5500,9 +5660,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Win = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Lose = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_64x32, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5511,9 +5671,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Lose = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Bonus = { .tileTag = 19, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5522,9 +5682,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Bonus = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Big = { .tileTag = 20, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5533,9 +5693,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Big = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reg = { .tileTag = 21, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5544,7 +5704,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reg = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_AButton = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_32x32, .anims = sAnims_DigitalDisplay_AButton, .images = NULL, @@ -5555,9 +5715,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_AButton = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Smoke = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -5566,7 +5726,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Smoke = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Number = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_16x16, .anims = sAnims_DigitalDisplay_Number, .images = NULL, @@ -5577,7 +5737,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Number = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Pokeball = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, .anims = sAnims_DigitalDisplay_Pokeball, .images = NULL, @@ -5588,7 +5748,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Pokeball = static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_DPad = { .tileTag = 0xFFFF, - .paletteTag = 6, + .paletteTag = PALTAG_DIG_DISPLAY, .oam = &sOam_8x8, .anims = sAnims_DigitalDisplay_DPad, .images = NULL, @@ -5599,9 +5759,9 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_DPad = static const struct SpriteTemplate sSpriteTemplate_PikaPowerBolt = { .tileTag = 0xFFFF, - .paletteTag = 4, + .paletteTag = PALTAG_MISC, .oam = &sOam_8x8, - .anims = gUnknown_085A7BF8, + .anims = sAnims_SingleFrame, .images = sImageTable_PikaPowerBolt, .affineAnims = sAffineAnims_PikaPowerBolt, .callback = SpriteCB_PikaPowerBolt @@ -5828,7 +5988,7 @@ static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[] = ARRAY_COUNT(sSubsprites_ReelTimeShadow), sSubsprites_ReelTimeShadow }; -static const struct Subsprite gUnknown_085A8030[] = +static const struct Subsprite sSubsprites_ReelTimeNumberGap[] = { { .x = -8, @@ -5856,9 +6016,9 @@ static const struct Subsprite gUnknown_085A8030[] = } }; -static const struct SubspriteTable gSubspriteTables_83ED7D4[] = +static const struct SubspriteTable sSubspriteTable_ReelTimeNumberGap[] = { - ARRAY_COUNT(gUnknown_085A8030), gUnknown_085A8030 + ARRAY_COUNT(sSubsprites_ReelTimeNumberGap), sSubsprites_ReelTimeNumberGap }; static const struct Subsprite sSubsprites_DigitalDisplay_Reel[] = @@ -6841,34 +7001,35 @@ static const struct SubspriteTable *const sSubspriteTables_DigitalDisplay[NUM_DI [DIG_SPRITE_EMPTY] = NULL }; -static const struct SpriteSheet gSlotMachineSpriteSheets[22] = +static const struct SpriteSheet sSlotMachineSpriteSheets[22] = { - { .data = gSlotMachineReelSymbol1Tiles, .size = 0x200, .tag = 0 }, - { .data = gSlotMachineReelSymbol2Tiles, .size = 0x200, .tag = 1 }, - { .data = gSlotMachineReelSymbol3Tiles, .size = 0x200, .tag = 2 }, - { .data = gSlotMachineReelSymbol4Tiles, .size = 0x200, .tag = 3 }, - { .data = gSlotMachineReelSymbol5Tiles, .size = 0x200, .tag = 4 }, - { .data = gSlotMachineReelSymbol6Tiles, .size = 0x200, .tag = 5 }, - { .data = gSlotMachineReelSymbol7Tiles, .size = 0x200, .tag = 6 }, - { .data = gSlotMachineNumber0Tiles, .size = 0x40, .tag = 7 }, - { .data = gSlotMachineNumber1Tiles, .size = 0x40, .tag = 8 }, - { .data = gSlotMachineNumber2Tiles, .size = 0x40, .tag = 9 }, - { .data = gSlotMachineNumber3Tiles, .size = 0x40, .tag = 10 }, - { .data = gSlotMachineNumber4Tiles, .size = 0x40, .tag = 11 }, - { .data = gSlotMachineNumber5Tiles, .size = 0x40, .tag = 12 }, - { .data = gSlotMachineNumber6Tiles, .size = 0x40, .tag = 13 }, - { .data = gSlotMachineNumber7Tiles, .size = 0x40, .tag = 14 }, - { .data = gSlotMachineNumber8Tiles, .size = 0x40, .tag = 15 }, - { .data = gSlotMachineNumber9Tiles, .size = 0x40, .tag = 16 }, + { .data = gSlotMachineReelSymbol1Tiles, .size = 0x200, .tag = GFXTAG_7_RED }, + { .data = gSlotMachineReelSymbol2Tiles, .size = 0x200, .tag = GFXTAG_7_BLUE }, + { .data = gSlotMachineReelSymbol3Tiles, .size = 0x200, .tag = GFXTAG_AZURILL }, + { .data = gSlotMachineReelSymbol4Tiles, .size = 0x200, .tag = GFXTAG_LOTAD }, + { .data = gSlotMachineReelSymbol5Tiles, .size = 0x200, .tag = GFXTAG_CHERRY }, + { .data = gSlotMachineReelSymbol6Tiles, .size = 0x200, .tag = GFXTAG_POWER }, + { .data = gSlotMachineReelSymbol7Tiles, .size = 0x200, .tag = GFXTAG_REPLAY }, + { .data = gSlotMachineNumber0Tiles, .size = 0x40, .tag = GFXTAG_NUM_0 }, + { .data = gSlotMachineNumber1Tiles, .size = 0x40, .tag = GFXTAG_NUM_1 }, + { .data = gSlotMachineNumber2Tiles, .size = 0x40, .tag = GFXTAG_NUM_2 }, + { .data = gSlotMachineNumber3Tiles, .size = 0x40, .tag = GFXTAG_NUM_3 }, + { .data = gSlotMachineNumber4Tiles, .size = 0x40, .tag = GFXTAG_NUM_4 }, + { .data = gSlotMachineNumber5Tiles, .size = 0x40, .tag = GFXTAG_NUM_5 }, + { .data = gSlotMachineNumber6Tiles, .size = 0x40, .tag = GFXTAG_NUM_6 }, + { .data = gSlotMachineNumber7Tiles, .size = 0x40, .tag = GFXTAG_NUM_7 }, + { .data = gSlotMachineNumber8Tiles, .size = 0x40, .tag = GFXTAG_NUM_8 }, + { .data = gSlotMachineNumber9Tiles, .size = 0x40, .tag = GFXTAG_NUM_9 }, + // skips GFXTAG_REEL_BG, which has its own spritesheet // the data for these sheets is determined at runtime - { .data = NULL, .size = 0x200, .tag = 18 }, - { .data = NULL, .size = 0x200, .tag = 19 }, - { .data = NULL, .size = 0x300, .tag = 20 }, - { .data = NULL, .size = 0x300, .tag = 21 }, + { .data = NULL, .size = 0x200, .tag = GFXTAG_STOP }, + { .data = NULL, .size = 0x200, .tag = GFXTAG_BONUS }, + { .data = NULL, .size = 0x300, .tag = GFXTAG_BIG }, + { .data = NULL, .size = 0x300, .tag = GFXTAG_REG }, {}, }; -static const u8 *const gUnknown_083EDCDC = gUnknown_08DD19F8; +static const u8 *const sReelBackground_Tilemap = gSlotMachineReelBackground_Tilemap; static const u8 sUnused2[][2] = { @@ -6884,82 +7045,87 @@ static const u8 sUnused2[][2] = {0xFD, 1} }; -static const u8 gUnknown_085A83FC[] = {0x91, 0x7F}; -static const u8 gUnknown_085A83FE[] = {0xBF, 0x43}; -static const u8 gUnknown_085A8400[] = {0xBF, 0x43}; -static const u8 gUnknown_085A8402[] = {0xBF, 0x4A}; -static const u8 gUnknown_085A8404[] = {0xBF, 0x4A}; - -static const u8 *const gUnknown_083EDD08[] = +// The Bet 2 and 3 match line palettes are duplicated unnecessarily +static const u16 sMiddleRowLit_Pal[] = {RGB(17, 28, 31)}; +static const u16 sTopRowLit_Pal[] = {RGB(31, 29, 16)}; +static const u16 sBottomRowt_Pal[] = {RGB(31, 29, 16)}; +static const u16 sNWSEDiagLit_Pal[] = {RGB(31, 21, 18)}; +static const u16 sNESWDiagLit_Pal[] = {RGB(31, 21, 18)}; +static const u16 *const sLitMatchLinePalTable[NUM_MATCH_LINES] = { - gUnknown_085A83FC, - gUnknown_085A83FE, - gUnknown_085A8400, - gUnknown_085A8402, - gUnknown_085A8404, + [MATCH_MIDDLE_ROW] = sMiddleRowLit_Pal, + [MATCH_TOP_ROW] = sTopRowLit_Pal, + [MATCH_BOTTOM_ROW] = sBottomRowt_Pal, + [MATCH_NWSE_DIAG] = sNWSEDiagLit_Pal, + [MATCH_NESW_DIAG] = sNESWDiagLit_Pal, }; -static const u16 *const gUnknown_083EDD1C[] = +static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES] = { - gSlotMachineMenu_Pal + 0x4A, - gSlotMachineMenu_Pal + 0x4B, - gSlotMachineMenu_Pal + 0x4C, - gSlotMachineMenu_Pal + 0x4D, - gSlotMachineMenu_Pal + 0x4E, + [MATCH_MIDDLE_ROW] = &gSlotMachineMenu_Pal[74], + [MATCH_TOP_ROW] = &gSlotMachineMenu_Pal[75], + [MATCH_BOTTOM_ROW] = &gSlotMachineMenu_Pal[76], + [MATCH_NWSE_DIAG] = &gSlotMachineMenu_Pal[77], + [MATCH_NESW_DIAG] = &gSlotMachineMenu_Pal[78], }; -static const u8 gUnknown_083EDD30[] = {0x4A, 0x4B, 0x4C, 0x4E, 0x4D}; - -static const u8 gBettingTilesId[][2] = -{ - {0, 0}, - {1, 2}, - {3, 4}, +static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES] = { + [MATCH_MIDDLE_ROW] = 74, + [MATCH_TOP_ROW] = 75, + [MATCH_BOTTOM_ROW] = 76, + [MATCH_NWSE_DIAG] = 78, // Diag colors flipped for some reason + [MATCH_NESW_DIAG] = 77 // Doesn't matter as both are identical }; -static const u8 gNumberBettingTiles[] = { 1, 2, 2 }; - -static const u16 gUnknown_085A843E[] = INCBIN_U16("graphics/slot_machine/85A843E.gbapal"); -static const u16 gUnknown_085A845E[] = INCBIN_U16("graphics/slot_machine/85A845E.gbapal"); -static const u16 gUnknown_085A847E[] = INCBIN_U16("graphics/slot_machine/85A847E.gbapal"); - -static const u16 *const gUnknown_083EDDA0[] = +static const u8 sBetToMatchLineIds[][2] = { - gUnknown_085A843E, - gUnknown_085A845E, - gUnknown_085A847E, + {MATCH_MIDDLE_ROW, MATCH_MIDDLE_ROW}, // Bet 1 + {MATCH_TOP_ROW, MATCH_BOTTOM_ROW}, // Bet 2 + {MATCH_NWSE_DIAG, MATCH_NESW_DIAG}, // Bet 3 }; -static const u16 *const gUnknown_083EDDAC = {gSlotMachineMenu_Pal + 0x10}; +static const u8 sMatchLinesPerBet[] = { 1, 2, 2 }; -static const u16 gUnknown_085A84B0[] = INCBIN_U16("graphics/slot_machine/85A84B0.gbapal"); -static const u16 gUnknown_085A84D0[] = INCBIN_U16("graphics/slot_machine/85A84D0.gbapal"); -static const u16 gUnknown_085A84F0[] = INCBIN_U16("graphics/slot_machine/85A84F0.gbapal"); - -static const u16 *const gUnknown_083EDE10[] = +// Flashing lights at top of slot machine, brightest point inside light goes from toward center of machine, to middle, to toward edges +static const u16 sFlashingLightsInside_Pal[] = INCBIN_U16("graphics/slot_machine/flashing_lights_inside.gbapal"); +static const u16 sFlashingLightsMiddle_Pal[] = INCBIN_U16("graphics/slot_machine/flashing_lights_middle.gbapal"); +static const u16 sFlashingLightsOutside_Pal[] = INCBIN_U16("graphics/slot_machine/flashing_lights_outside.gbapal"); +static const u16 *const sFlashingLightsPalTable[] = { - gUnknown_085A84B0, - gUnknown_085A84D0, - gUnknown_085A84F0, - gUnknown_08DCF230, + sFlashingLightsInside_Pal, + sFlashingLightsMiddle_Pal, + sFlashingLightsOutside_Pal, }; -static const u16 *const gUnknown_083EDE20 = gUnknown_08DCF230; +static const u16 *const gUnknown_083EDDAC = {gSlotMachineMenu_Pal + 16}; + +static const u16 sPokeballShining0_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_0.gbapal"); +static const u16 sPokeballShining1_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_1.gbapal"); +static const u16 sPokeballShining2_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_2.gbapal"); +static const u16 *const sPokeballShiningPalTable[] = +{ + sPokeballShining0_Pal, // Streak on left side of ball + sPokeballShining1_Pal, // Streak in middle of ball + sPokeballShining2_Pal, // Streak on right side of ball + gSlotMachineDigitalDisplay_Pal, // Back to normal +}; + +static const u16 *const sDigitalDisplay_Pal = gSlotMachineDigitalDisplay_Pal; static const u16 gPalette_83EDE24[] = INCBIN_U16("graphics/slot_machine/85A8524.bin"); -static const struct SpritePalette gSlotMachineSpritePalettes[] = +static const struct SpritePalette sSlotMachineSpritePalettes[] = { - { .data = gUnknown_08DCF170, .tag = 0}, - { .data = gUnknown_08DCF190, .tag = 1}, - { .data = gUnknown_08DCF1B0, .tag = 2}, - { .data = gSlotMachineDigitalDisplay_Pal, .tag = 3}, - { .data = gUnknown_08DCF1F0, .tag = 4}, - { .data = gUnknown_08DCF210, .tag = 5}, - { .data = gUnknown_08DCF230, .tag = 6}, - { .data = gUnknown_08DCF1F0, .tag = 7}, + { .data = gSlotMachineReelSymbols_Pal, .tag = PALTAG_REEL}, + { .data = gSlotMachineReelTimePikachu_Pal, .tag = PALTAG_REEL_TIME_PIKACHU}, + { .data = gSlotMachineReelTimeMisc_Pal, .tag = PALTAG_REEL_TIME_MISC}, + { .data = gSlotMachineReelTimeMachine_Pal, .tag = PALTAG_REEL_TIME_MACHINE}, + { .data = gSlotMachineMisc_Pal, .tag = PALTAG_MISC}, + { .data = gSlotMachineReelTimeExplosion_Pal, .tag = PALTAG_EXPLOSION}, + { .data = gSlotMachineDigitalDisplay_Pal, .tag = PALTAG_DIG_DISPLAY}, + { .data = gSlotMachineMisc_Pal, .tag = PALTAG_PIKA_AURA}, {} }; static const u32 sReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz"); // reel_time_machine and reel_time_pikachu -static const u16 gReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/85A96E0.bin"); -static const u16 gUnknown_085A9898[] = {0}; +static const u16 sReelTimeWindow_Tilemap[] = INCBIN_U16("graphics/slot_machine/reel_time_window.bin"); +static const u16 sEmptyTilemap[] = {0}; From ebcb982e16a0fd6b22185d159234495c44a15874 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Sun, 19 Jul 2020 15:57:20 -0400 Subject: [PATCH 25/85] Change signedness and add casts to avoid implicit conversion warnings --- src/agb_flash.c | 28 +++++++++++++-------------- src/battle_anim_bug.c | 38 +++++++++++++------------------------ src/battle_anim_effects_1.c | 2 +- src/berry.c | 2 +- src/berry_blender.c | 10 +++++----- src/easy_chat.c | 18 +++++++++--------- src/event_object_movement.c | 6 +++--- src/field_effect.c | 2 +- src/hall_of_fame.c | 4 ++-- src/item_use.c | 2 +- src/list_menu.c | 10 +++++----- src/mirage_tower.c | 7 +++---- src/overworld.c | 2 +- src/party_menu.c | 8 ++++---- src/player_pc.c | 14 +++++++------- src/pokedex.c | 6 +++--- src/roulette.c | 32 +++++++++++++++---------------- src/scrcmd.c | 4 ++-- src/secret_base.c | 8 ++++---- src/slot_machine.c | 2 +- src/start_menu.c | 2 +- src/trainer_see.c | 4 ++-- 22 files changed, 99 insertions(+), 112 deletions(-) diff --git a/src/agb_flash.c b/src/agb_flash.c index 1ad9e47ecb..0045219c41 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -41,7 +41,7 @@ u16 ReadFlashId(void) u8 (*readFlash1)(u8 *); SetReadFlash1(readFlash1Buffer); - readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); + readFlash1 = (u8 (*)(u8 *))((uintptr_t)readFlash1Buffer + 1); // Enter ID mode. FLASH_WRITE(0x5555, 0xAA); @@ -113,12 +113,12 @@ void SetReadFlash1(u16 *dest) u16 *src; u16 i; - PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); + PollFlashStatus = (u8 (*)(u8 *))((uintptr_t)dest + 1); src = (u16 *)ReadFlash1; - src = (u16 *)((s32)src ^ 1); + src = (u16 *)((uintptr_t)src ^ 1); - i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; + i = ((uintptr_t)SetReadFlash1 - (uintptr_t)ReadFlash1) >> 1; while (i != 0) { @@ -154,10 +154,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) } funcSrc = (u16 *)ReadFlash_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = readFlash_Core_Buffer; - i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; + i = ((uintptr_t)ReadFlash - (uintptr_t)ReadFlash_Core) >> 1; while (i != 0) { @@ -165,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) i--; } - readFlash_Core = (void (*)(vu8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); + readFlash_Core = (void (*)(vu8 *, u8 *, u32))((uintptr_t)readFlash_Core_Buffer + 1); src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; @@ -202,10 +202,10 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) } funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); while (i != 0) { @@ -213,7 +213,7 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); size = gFlash->sector.size; @@ -239,10 +239,10 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); while (i != 0) { @@ -250,7 +250,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); @@ -293,4 +293,4 @@ u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n) } return result; -} +} \ No newline at end of file diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index ea3df80986..5e8a8b2a76 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -372,14 +372,11 @@ static void AnimTranslateStinger(struct Sprite *sprite) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - else + else if (GetBattlerSide(gBattleAnimAttacker)) { - if (GetBattlerSide(gBattleAnimAttacker)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - } + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; } if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) @@ -387,13 +384,8 @@ static void AnimTranslateStinger(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) { - s16 temp1, temp2; - - temp1 = gBattleAnimArgs[2]; - gBattleAnimArgs[2] = -temp1; - - temp2 = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -temp2; + gBattleAnimArgs[2] *= -1; + gBattleAnimArgs[0] *= -1; } } @@ -448,28 +440,24 @@ static void AnimMissileArc_Step(struct Sprite *sprite) else { s16 tempData[8]; - u16 *data = sprite->data; - u16 x1 = sprite->pos1.x; - s16 x2 = sprite->pos2.x; - u16 y1 = sprite->pos1.y; - s16 y2 = sprite->pos2.y; + s16 xpos, ypos; int i; for (i = 0; i < 8; i++) - tempData[i] = data[i]; + tempData[i] = sprite->data[i]; - x2 += x1; - y2 += y1; + xpos = sprite->pos1.x + sprite->pos2.x; + ypos = sprite->pos1.y + sprite->pos2.y; if (!TranslateAnimHorizontalArc(sprite)) { - u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2, - sprite->pos1.y + sprite->pos2.y - y2); + u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - xpos, //Isn't this zero lol + sprite->pos1.y + sprite->pos2.y - ypos); rotation += 0xC000; TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); for (i = 0; i < 8; i++) - data[i] = tempData[i]; + sprite->data[i] = tempData[i]; } } } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index f93b2a5c48..e9930eeef0 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4445,7 +4445,7 @@ static void AnimBowMon_Step1_Callback(struct Sprite* sprite) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); - sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; + sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : (s16)0xFFFFFD00; sprite->data[5] = 0; } diff --git a/src/berry.c b/src/berry.c index 98264f37b8..d70e8c3537 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1331,7 +1331,7 @@ void ResetBerryTreeSparkleFlags(void) s16 bottom; int i; - GetCameraCoords(&cam_left, &cam_top); + GetCameraCoords((u16*)&cam_left, (u16*)&cam_top); left = cam_left; top = cam_top + 3; right = cam_left + 14; diff --git a/src/berry_blender.c b/src/berry_blender.c index a2a96c0892..de3cc62759 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -116,8 +116,8 @@ struct BerryBlenderData u16 field_116; u16 field_118; u16 field_11A; - u16 bg_X; - u16 bg_Y; + s16 bg_X; + s16 bg_Y; u8 field_120[3]; u8 field_123; u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO]; @@ -3166,13 +3166,13 @@ static void sub_80832E8(s16* a0) static void sub_808330C(void) { - sub_80832E8(&sBerryBlenderData->bg_X); - sub_80832E8(&sBerryBlenderData->bg_Y); + sub_80832E8((s16 *)&sBerryBlenderData->bg_X); + sub_80832E8((s16 *)&sBerryBlenderData->bg_Y); } static void sub_8083334(s16* a0, u16 a1) { - s32 var; + u8 var; if (a1 < 10) var = 16; diff --git a/src/easy_chat.c b/src/easy_chat.c index 44a7b90c14..c839c0070d 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -2537,7 +2537,7 @@ u8 sub_811BBBC(void) return sEasyChatScreen->unk_0c; } -void sub_811BBC8(u8 *arg0, u8 *arg1) +static void sub_811BBC8(s8 *arg0, s8 *arg1) { *arg0 = sEasyChatScreen->unk_10; *arg1 = sEasyChatScreen->unk_11; @@ -4529,18 +4529,18 @@ static void sub_811E30C(void) x = var0 * 13; x = x * 8 + 28; y = var1 * 16 + 96; - sub_811E34C(x, y); + sub_811E34C((u8)x, (u8)y); } static void sub_811E34C(u8 x, u8 y) { - if (sUnknown_0203A11C->unk2E4) - { - sUnknown_0203A11C->unk2E4->pos1.x = x; - sUnknown_0203A11C->unk2E4->pos1.y = y; - sUnknown_0203A11C->unk2E4->pos2.x = 0; - sUnknown_0203A11C->unk2E4->data[0] = 0; - } + if (!sUnknown_0203A11C->unk2E4) + return; + + sUnknown_0203A11C->unk2E4->pos1.x = (s16)x; + sUnknown_0203A11C->unk2E4->pos1.y = (s16)y; + sUnknown_0203A11C->unk2E4->pos2.x = 0; + sUnknown_0203A11C->unk2E4->data[0] = 0; } static void sub_811E380(void) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index de55362407..76331c2b14 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8950,7 +8950,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *objectEvent) u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF); struct Task *task = &gTasks[taskId]; - StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent); + StoreWordInTwoHalfwords((u16 *)&task->data[0], (u32)objectEvent); objectEvent->warpArrowSpriteId = taskId; task->data[3] = 0xFFFF; } @@ -8961,7 +8961,7 @@ static void ApplyLevitateMovement(u8 taskId) struct Sprite *sprite; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer. + LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // load the map object pointer. sprite = &gSprites[objectEvent->spriteId]; if(!(task->data[2] & 0x3)) @@ -8978,7 +8978,7 @@ void DestroyExtraMovementTask(u8 taskId) struct ObjectEvent *objectEvent; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent + LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // unused objectEvent DestroyTask(taskId); } diff --git a/src/field_effect.c b/src/field_effect.c index 07579f55d5..bc1e6f134d 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2501,7 +2501,7 @@ static void sub_80B8584(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; - StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); + StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); task->data[1] = 0xf0f1; task->data[2] = 0x5051; task->data[3] = 0x3f; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index bf9850deca..8e47c1e3ae 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -612,7 +612,7 @@ static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId) static void Task_Hof_TryDisplayAnotherMon(u8 taskId) { - u16 currPokeID = gTasks[taskId].tDisplayedMonId; + u16 currPokeID = (u16)gTasks[taskId].tDisplayedMonId; struct HallofFameMon* currMon = &sHofMonPtr->mon[currPokeID]; if (gTasks[taskId].tFrameCount != 0) @@ -1483,7 +1483,7 @@ static void UpdateDomeConfetti(struct ConfettiUtil *util) static void Task_DoDomeConfetti(u8 taskId) { u32 id = 0; - u16 *data = gTasks[taskId].data; + u16 *data = (u16 *)gTasks[taskId].data; switch (tState) { diff --git a/src/item_use.c b/src/item_use.c index 0aae441c8b..fa3f130810 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -721,7 +721,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) static bool8 TryToWaterSudowoodo(void) { - u16 x, y; + s16 x, y; u8 z; u8 objId; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); diff --git a/src/list_menu.c b/src/list_menu.c index ddcad0fe9c..ebf02bab65 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -1257,17 +1257,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st s32 i, j, id = 0; subsprites[id] = sSubsprite_RedOutline1; - subsprites[id].x = 136; - subsprites[id].y = 136; + subsprites[id].x = -120; + subsprites[id].y = -120; id++; subsprites[id] = sSubsprite_RedOutline2; subsprites[id].x = rowWidth + 128; - subsprites[id].y = 136; + subsprites[id].y = -120; id++; subsprites[id] = sSubsprite_RedOutline7; - subsprites[id].x = 136; + subsprites[id].x = -120; subsprites[id].y = rowHeight + 128; id++; @@ -1297,7 +1297,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st for (j = 8; j < rowHeight - 8; j += 8) { subsprites[id] = sSubsprite_RedOutline4; - subsprites[id].x = 136; + subsprites[id].x = -120; subsprites[id].y = j - 120; id++; diff --git a/src/mirage_tower.c b/src/mirage_tower.c index e2f5cefb78..bdddbdbe64 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -168,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .numColors = 15, .delay = 5, .numFadeCycles = -1, - .maxBlendCoeff = 11, + .maxBlendCoeff = -5, .fadeType = 1, .restorePaletteOnUnload = FALSE, .unk7_7 = 1, @@ -412,10 +412,9 @@ void DoMirageTowerCeilingCrumble(void) static void WaitCeilingCrumble(u8 taskId) { - u16 *data = gTasks[taskId].data; - data[1]++; + u16 *data = (u16 *)gTasks[taskId].data; // Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed. - if (data[1] == 1000 || data[0] == 17) + if (++data[1] == 1000 || data[0] == 17) gTasks[taskId].func = FinishCeilingCrumbleTask; } diff --git a/src/overworld.c b/src/overworld.c index ea0d633bcf..6b8fd232e6 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -3212,7 +3212,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1); sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation); - if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE) + if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte)); else StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte)); diff --git a/src/party_menu.c b/src/party_menu.c index d5bc6dfb63..6a38d90989 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1862,7 +1862,7 @@ u8 GetMonAilment(struct Pokemon *mon) static void SetPartyMonsAllowedInMinigame(void) { - u16 *ptr; + s16 *ptr; if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) { @@ -4951,9 +4951,9 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId) static void DisplayLevelUpStatsPg1(u8 taskId) { - s16 *arrayPtr = sPartyMenuInternal->data; + u16 *arrayPtr = (u16*)sPartyMenuInternal->data; - arrayPtr[12] = CreateLevelUpStatsWindow(); + arrayPtr[12] = (u16)CreateLevelUpStatsWindow(); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); ScheduleBgCopyTilemapToVram(2); @@ -4961,7 +4961,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId) static void DisplayLevelUpStatsPg2(u8 taskId) { - s16 *arrayPtr = sPartyMenuInternal->data; + u16 *arrayPtr = (u16 *)sPartyMenuInternal->data; DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); diff --git a/src/player_pc.c b/src/player_pc.c index fc0bd9f4c8..2010d84f85 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -327,7 +327,7 @@ void PlayerPC(void) static void InitPlayerPCMenu(u8 taskId) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -346,7 +346,7 @@ static void InitPlayerPCMenu(u8 taskId) static void PlayerPCProcessMenuInput(u8 taskId) { - u16 *data; + s16 *data; s8 inputOptionId; data = gTasks[taskId].data; @@ -435,7 +435,7 @@ static void PlayerPC_TurnOff(u8 taskId) static void InitItemStorageMenu(u8 taskId, u8 var) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -548,7 +548,7 @@ static void ItemStorage_Toss(u8 taskId) static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; data[3] = toss; sub_816B4DC(taskId); @@ -581,9 +581,9 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId) static void sub_816B4DC(u8 taskId) { - u16 *data = gTasks[taskId].data; + u16 *data = (u16 *)gTasks[taskId].data; - ClearStdWindowAndFrameToTransparent(data[4], FALSE); + ClearStdWindowAndFrameToTransparent((u8)data[4], FALSE); ClearWindowTilemap(data[4]); RemoveWindow(data[4]); ScheduleBgCopyTilemapToVram(0); @@ -1380,7 +1380,7 @@ static void ItemStorage_DoItemToss(u8 taskId) data = gTasks[taskId].data; b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); - if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId)) + if (ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId) == 0) { CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); diff --git a/src/pokedex.c b/src/pokedex.c index 0541f3f2e6..777cc52cd6 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -5117,9 +5117,9 @@ static void Task_SelectSearchMenuItem(u8 taskId) u16 *scrollOffset; DrawOrEraseSearchParameterBox(FALSE); - menuItem = gTasks[taskId].tMenuItem; - cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; - scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + menuItem = (u16)gTasks[taskId].tMenuItem; + cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; gTasks[taskId].tCursorPos = *cursorPos; gTasks[taskId].tScrollOffset = *scrollOffset; PrintSearchParameterText(taskId); diff --git a/src/roulette.c b/src/roulette.c index 58e120cb50..f55736a969 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -633,7 +633,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -643,7 +643,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -653,7 +653,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -663,7 +663,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -673,7 +673,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -683,7 +683,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -693,7 +693,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -703,7 +703,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -713,7 +713,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -723,7 +723,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -733,7 +733,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -743,7 +743,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 1, .var06 = 0xFF, .var07_0 = 8, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -753,7 +753,7 @@ static const struct UnkStruct1 gUnknown_085B6388[] = .var05 = 10, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, }; @@ -767,7 +767,7 @@ static const struct UnkStruct1 gUnknown_085B63F0[] = .var05 = 30, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -777,7 +777,7 @@ static const struct UnkStruct1 gUnknown_085B63F0[] = .var05 = 30, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 }, { @@ -787,7 +787,7 @@ static const struct UnkStruct1 gUnknown_085B63F0[] = .var05 = 30, .var06 = 0xFF, .var07_0 = 14, - .var07_5 = 2, + .var07_5 = -2, .var07_7 = 0 } }; diff --git a/src/scrcmd.c b/src/scrcmd.c index 4a7f4ea735..2a6abf17e1 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -788,8 +788,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - u16 x; - u16 y; + s16 x; + s16 y; PlayerGetDestCoords(&x, &y); if (mapGroup == 0xFF && mapNum == 0xFF) diff --git a/src/secret_base.c b/src/secret_base.c index 83626710fc..35ac31d4a7 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -964,7 +964,7 @@ static void HandleRegistryMenuInput(u8 taskId) data = gTasks[taskId].data; input = ListMenu_ProcessInput(data[5]); - ListMenuGetScrollAndRow(data[5], &data[2], &data[1]); + ListMenuGetScrollAndRow((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); switch (input) { case LIST_NOTHING_CHOSEN: @@ -1045,10 +1045,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask(data[5], &data[2], &data[1]); + DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0; BuildRegistryMenuItems(taskId); - sub_812225C(&data[2], &data[1], data[3], data[0]); + sub_812225C((u16 *)&data[2], (u16 *)&data[1], (u16)data[3], (u16)data[0]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1062,7 +1062,7 @@ static void DeleteRegistry_No(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask(data[5], &data[2], &data[1]); + DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } diff --git a/src/slot_machine.c b/src/slot_machine.c index d1cb05b180..6557e8cf49 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -775,7 +775,7 @@ static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback cb) { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->data[0] = slotMachineIndex; - StoreWordInTwoHalfwords(task->data + 1, (intptr_t)cb); + StoreWordInTwoHalfwords((u16 *)(task->data + 1), (intptr_t)cb); } diff --git a/src/start_menu.c b/src/start_menu.c index 88ad364c7b..68a3161855 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -463,7 +463,7 @@ static bool32 InitStartMenuStep(void) sInitStartMenuData[0]++; break; case 4: - if (PrintStartMenuActions(&sInitStartMenuData[1], 2)) + if (PrintStartMenuActions((s8 *)&sInitStartMenuData[1], 2)) sInitStartMenuData[0]++; break; case 5: diff --git a/src/trainer_see.c b/src/trainer_see.c index 68a16e208b..93daab421d 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -603,7 +603,7 @@ static void sub_80B44C8(u8 taskId) struct ObjectEvent *objEvent; // another objEvent loaded into by loadword? - LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&objEvent); + LoadWordFromTwoHalfwords((u16*)&task->data[1], (u32 *)&objEvent); if (!task->data[7]) { ObjectEventClearHeldMovement(objEvent); @@ -624,7 +624,7 @@ static void sub_80B44C8(u8 taskId) void sub_80B4578(struct ObjectEvent *var) { - StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); + StoreWordInTwoHalfwords((u16 *)&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); } void EndTrainerApproach(void) From c722b7755808e0ee34b84087f3a31a28bf685cad Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Mon, 27 Jul 2020 12:47:08 -0400 Subject: [PATCH 26/85] holding back on casts --- src/agb_flash.c | 2 +- src/battle_anim_effects_1.c | 2 +- src/hall_of_fame.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/agb_flash.c b/src/agb_flash.c index 0045219c41..eeccf11164 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -242,7 +242,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); + i = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1; while (i != 0) { diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index e9930eeef0..f93b2a5c48 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4445,7 +4445,7 @@ static void AnimBowMon_Step1_Callback(struct Sprite* sprite) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); - sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : (s16)0xFFFFFD00; + sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; sprite->data[5] = 0; } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 8e47c1e3ae..bf9850deca 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -612,7 +612,7 @@ static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId) static void Task_Hof_TryDisplayAnotherMon(u8 taskId) { - u16 currPokeID = (u16)gTasks[taskId].tDisplayedMonId; + u16 currPokeID = gTasks[taskId].tDisplayedMonId; struct HallofFameMon* currMon = &sHofMonPtr->mon[currPokeID]; if (gTasks[taskId].tFrameCount != 0) @@ -1483,7 +1483,7 @@ static void UpdateDomeConfetti(struct ConfettiUtil *util) static void Task_DoDomeConfetti(u8 taskId) { u32 id = 0; - u16 *data = (u16 *)gTasks[taskId].data; + u16 *data = gTasks[taskId].data; switch (tState) { From 462e3bc0cb63c92fcebb397252454d7912594c24 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 21 Jul 2020 17:21:01 -0400 Subject: [PATCH 27/85] Sync flags with pokeruby From 37957b2d15833db0c7949387ce7136a11265cd9b Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Mon, 27 Jul 2020 19:17:34 -0400 Subject: [PATCH 28/85] semicolon --- src/AgbRfu_LinkManager.c | 2 +- src/battle_anim_psychic.c | 2 +- src/battle_anim_utility_funcs.c | 2 +- src/digit_obj_util.c | 2 +- src/mirage_tower.c | 2 +- src/save_failed_screen.c | 2 +- tools/gbagfx/gfx.c | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index e4127ee090..f6ebcc7265 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -918,7 +918,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { lman.reserveDisconnectSlot_flag = 0; lman.acceptCount = 0; - lman.acceptSlot_flag = 0;; + lman.acceptSlot_flag = 0; lman.parent_child = MODE_NEUTRAL; rfu_LMAN_managerChangeAgbClockMaster(); if (reqCommandId == ID_STOP_MODE_REQ) diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 7918698fc0..25340f9c6a 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -1101,7 +1101,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId) break; case 1: task->data[1] -= 4; - task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);; + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1); SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0); SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]); if (task->data[1] == 0) diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index dcef7d4830..bca669cc26 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -569,7 +569,7 @@ static void sub_81172EC(u8 taskId) if (gTasks[taskId].data[12] == 0) { sub_80A477C(0); - gTasks[taskId].data[15]++;; + gTasks[taskId].data[15]++; } } break; diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c index fe5d49e69d..f887dafb95 100644 --- a/src/digit_obj_util.c +++ b/src/digit_obj_util.c @@ -33,7 +33,7 @@ struct DigitPrinterAlloc }; // this file's functions -static u8 GetFirstOamId(u8 oamCount);; +static u8 GetFirstOamId(u8 oamCount); static void CopyWorkToOam(struct DigitPrinter *objWork); static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign); static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign); diff --git a/src/mirage_tower.c b/src/mirage_tower.c index bdddbdbe64..3f3dc1ef85 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -690,7 +690,7 @@ static void DoFossilFallAndSink(u8 taskId) if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]); - FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);; + FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles); FREE_AND_SET_NULL(sUnknown_0203CF0C); diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index a2a2acc8d6..7c824e82dd 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -349,7 +349,7 @@ static void VBlankCB_UpdateClockGraphics(void) gMain.oamBuffer[0] = sClockOamData; gMain.oamBuffer[0].x = 112; - gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8;; + gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8; if (gSaveFailedClockInfo[CLOCK_RUNNING] != FALSE) { diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 8d959465f7..4e85953fdc 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -282,7 +282,7 @@ static void HflipTile(unsigned char * tile, int bitDepth) for (i = 0; i < 8; i++) { SWAP_NYBBLES(&tile[4 * i + 0], &tile[4 * i + 3]); - SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]);; + SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]); } break; case 8: From 7b6607d9e38702f41fda057cc13148b8f0bbcc0a Mon Sep 17 00:00:00 2001 From: PokeCodec <67983839+PokeCodec@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:59:37 -0400 Subject: [PATCH 29/85] Update secret_base.c --- src/secret_base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/secret_base.c b/src/secret_base.c index 35ac31d4a7..3f69e0419e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -964,7 +964,7 @@ static void HandleRegistryMenuInput(u8 taskId) data = gTasks[taskId].data; input = ListMenu_ProcessInput(data[5]); - ListMenuGetScrollAndRow((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); + ListMenuGetScrollAndRow(data[5], (u16 *)&data[2], (u16 *)&data[1]); switch (input) { case LIST_NOTHING_CHOSEN: From 044d968513f28566fab1db3ceff1b52162b8387a Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Tue, 28 Jul 2020 14:38:38 -0400 Subject: [PATCH 30/85] Match --- src/event_object_movement.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 76331c2b14..4b275a9702 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1205,8 +1205,7 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, { struct ObjectEvent *objectEvent; u8 objectEventId; - s16 x; - s16 y; + s16 x, y; if (GetAvailableObjectEventId(template->localId, mapNum, mapGroup, &objectEventId)) return OBJECT_EVENTS_COUNT; @@ -1220,7 +1219,6 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->movementType = template->movementType; objectEvent->localId = template->localId; objectEvent->mapNum = mapNum; - objectEvent++; objectEvent--; objectEvent->mapGroup = mapGroup; objectEvent->initialCoords.x = x; objectEvent->initialCoords.y = y; @@ -1237,9 +1235,6 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); SetObjectEventDynamicGraphicsId(objectEvent); -#ifndef NONMATCHING - asm("":::"r5", "r6"); -#endif if (gRangedMovementTypes[objectEvent->movementType]) { if (objectEvent->range.as_nybbles.x == 0) From e52ffacc2512bc10f4bb037516e50786ba770a29 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 28 Jul 2020 15:28:16 -0400 Subject: [PATCH 31/85] Clean up slot machine data doc --- src/slot_machine.c | 474 +++++++++++++++++++++++---------------------- 1 file changed, 245 insertions(+), 229 deletions(-) diff --git a/src/slot_machine.c b/src/slot_machine.c index a02950a695..dcbeab736e 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -44,56 +44,57 @@ #define LUCKY_BIAS_MIXED_777 (1 << 6) #define LUCKY_BIAS_777 (1 << 7) -#define GFXTAG_7_RED 0 -#define GFXTAG_7_BLUE 1 -#define GFXTAG_AZURILL 2 -#define GFXTAG_LOTAD 3 -#define GFXTAG_CHERRY 4 -#define GFXTAG_POWER 5 -#define GFXTAG_REPLAY 6 -#define GFXTAG_NUM_0 7 -#define GFXTAG_NUM_1 8 -#define GFXTAG_NUM_2 9 -#define GFXTAG_NUM_3 10 -#define GFXTAG_NUM_4 11 -#define GFXTAG_NUM_5 12 -#define GFXTAG_NUM_6 13 -#define GFXTAG_NUM_7 14 -#define GFXTAG_NUM_8 15 -#define GFXTAG_NUM_9 16 -#define GFXTAG_REEL_BG 17 -#define GFXTAG_STOP 18 -#define GFXTAG_BONUS 19 -#define GFXTAG_BIG 20 -#define GFXTAG_REG 21 +enum { + GFXTAG_7_RED, + GFXTAG_7_BLUE, + GFXTAG_AZURILL, + GFXTAG_LOTAD, + GFXTAG_CHERRY, + GFXTAG_POWER, + GFXTAG_REPLAY, + GFXTAG_NUM_0, + GFXTAG_NUM_1, + GFXTAG_NUM_2, + GFXTAG_NUM_3, + GFXTAG_NUM_4, + GFXTAG_NUM_5, + GFXTAG_NUM_6, + GFXTAG_NUM_7, + GFXTAG_NUM_8, + GFXTAG_NUM_9, + GFXTAG_REEL_BG, + GFXTAG_STOP, + GFXTAG_BONUS, + GFXTAG_BIG, + GFXTAG_REG, +}; #define GFXTAG_SYMBOLS_START (GFXTAG_7_RED) #define GFXTAG_NUMBERS_START (GFXTAG_NUM_0) -#define PALTAG_REEL 0 -#define PALTAG_REEL_TIME_PIKACHU 1 -#define PALTAG_REEL_TIME_MISC 2 -#define PALTAG_REEL_TIME_MACHINE 3 -#define PALTAG_MISC 4 -#define PALTAG_EXPLOSION 5 -#define PALTAG_DIG_DISPLAY 6 -#define PALTAG_PIKA_AURA 7 +enum { + PALTAG_REEL, + PALTAG_REEL_TIME_PIKACHU, + PALTAG_REEL_TIME_MISC, + PALTAG_REEL_TIME_MACHINE, + PALTAG_MISC, + PALTAG_EXPLOSION, + PALTAG_DIG_DISPLAY, + PALTAG_PIKA_AURA, +}; -#define SLOT_MACHINE_MATCHED_1CHERRY 0 -#define SLOT_MACHINE_MATCHED_2CHERRY 1 -#define SLOT_MACHINE_MATCHED_REPLAY 2 -#define SLOT_MACHINE_MATCHED_LOTAD 3 -#define SLOT_MACHINE_MATCHED_AZURILL 4 -#define SLOT_MACHINE_MATCHED_POWER 5 -#define SLOT_MACHINE_MATCHED_777_MIXED 6 -#define SLOT_MACHINE_MATCHED_777_RED 7 -#define SLOT_MACHINE_MATCHED_777_BLUE 8 -#define SLOT_MACHINE_MATCHED_NONE 9 - -#define LEFT_REEL 0 -#define MIDDLE_REEL 1 -#define RIGHT_REEL 2 -#define NUM_REELS 3 +enum { + MATCHED_1CHERRY, + MATCHED_2CHERRY, + MATCHED_REPLAY, + MATCHED_LOTAD, + MATCHED_AZURILL, + MATCHED_POWER, + MATCHED_777_MIXED, + MATCHED_777_RED, + MATCHED_777_BLUE, + MATCHED_NONE, +}; enum { MATCH_MIDDLE_ROW, @@ -104,6 +105,13 @@ enum { NUM_MATCH_LINES, }; +enum { + LEFT_REEL, + MIDDLE_REEL, + RIGHT_REEL, + NUM_REELS, +}; + enum { SLOT_ACTION_UNFADE, SLOT_ACTION_1, @@ -543,11 +551,11 @@ static struct SpriteFrameImage *sImageTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRI // Const rom data. static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[]; -static const u16 gPalette_83EDE24[]; -static const u8 gLuckyRoundProbabilities[][3]; -static const u8 gBiasTags[]; -static const u16 gLuckyFlagSettings_Top3[]; -static const u16 gLuckyFlagSettings_NotTop3[]; +static const u16 sUnkPalette[]; +static const u8 sLuckyRoundProbabilities[][3]; +static const u8 sBiasTags[]; +static const u16 sLuckyFlagSettings_Top3[]; +static const u16 sLuckyFlagSettings_NotTop3[]; static const s16 sDigitalDisplay_SpriteCoords[][2]; static const SpriteCallback sDigitalDisplay_SpriteCallbacks[]; static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES]; @@ -557,24 +565,24 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke; static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck; static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion; static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura; -static const u16 gProbabilityTable_SkipToReeltimeAction14[]; +static const u16 sProbabilityTable_SkipToReeltimeAction14[]; static const u16 *const sPokeballShiningPalTable[]; -static const u16 gReelIncrementTable[][2]; -static const u16 gReelTimeBonusIncrementTable[]; -static const u16 gSlotMatchFlags[]; -static const u16 gSlotPayouts[]; +static const u16 sReelIncrementTable[][2]; +static const u16 sReelTimeBonusIncrementTable[]; +static const u16 sSlotMatchFlags[]; +static const u16 sSlotPayouts[]; static const u8 *const sReelBackground_Tilemap; static const u32 sReelTimeGfx[]; static const struct SpriteSheet sSlotMachineSpriteSheets[22]; static const struct SpritePalette sSlotMachineSpritePalettes[]; static const u16 *const sDigitalDisplay_Pal; -static const s16 gInitialReelPositions[][2]; -static const u8 gLuckyFlagProbabilities_Top3[][6]; -static const u8 gLuckyFlagProbabilities_NotTop3[][6]; -static const u8 gReeltimeProbabilities_UnluckyGame[][17]; -static const u8 gReelTimeProbabilities_LuckyGame[][17]; -static const u8 gSym2Match[]; -static const u8 gReelTimeTags[]; +static const s16 sInitialReelPositions[NUM_REELS][2]; +static const u8 sLuckyFlagProbabilities_Top3[][6]; +static const u8 sLuckyFlagProbabilities_NotTop3[][6]; +static const u8 sReeltimeProbabilities_UnluckyGame[][17]; +static const u8 sReelTimeProbabilities_LuckyGame[][17]; +static const u8 sSymToMatch[]; +static const u8 sReelTimeTags[]; static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL]; static const u16 *const sLitMatchLinePalTable[]; static const u16 *const sDarkMatchLinePalTable[]; @@ -582,7 +590,7 @@ static const u8 sMatchLinePalOffsets[]; static const u8 sBetToMatchLineIds[][2]; static const u8 sMatchLinesPerBet[]; static const u16 *const sFlashingLightsPalTable[]; -static const u16 *const gUnknown_083EDDAC; +static const u16 *const sSlotMachineMenu_Pal; static const u16 sReelTimeWindow_Tilemap[]; static const u16 sEmptyTilemap[]; static void (*const sDigitalDisplaySceneExitCallbacks[])(void); @@ -671,7 +679,7 @@ static const struct WindowTemplate sWindowTemplate_InfoBox = static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; -bool8 (*const SlotActions[])(struct Task *task) = +static bool8 (*const sSlotActions[])(struct Task *task) = { [SLOT_ACTION_UNFADE] = SlotAction_UnfadeScreen, [SLOT_ACTION_1] = SlotAction_WaitForUnfade, @@ -704,14 +712,14 @@ bool8 (*const SlotActions[])(struct Task *task) = [SLOT_ACTION_FREE] = SlotAction_FreeDataStructures, }; -bool8 (*const AwardPayoutActions[])(struct Task *task) = +static bool8 (*const sAwardPayoutActions[])(struct Task *task) = { AwardPayoutAction0, AwardPayoutAction_GivePayoutToPlayer, AwardPayoutAction_FreeTask }; -bool8 (*const SlotReelActions[])(struct Task *task) = +static bool8 (*const sSlotReelActions[])(struct Task *task) = { SlotReelAction_StayStill, SlotReelAction_Spin, @@ -722,58 +730,58 @@ bool8 (*const SlotReelActions[])(struct Task *task) = // returns True if a match with the biasTag is possible in that reel // also modifies data in sSlotMachine reel arrays to indicate how to get to the matching state -bool8 (*const DecideReelTurns_BiasTag[])(void) = +static bool8 (*const sDecideReelTurns_BiasTag[NUM_REELS])(void) = { DecideReelTurns_BiasTag_Reel1, DecideReelTurns_BiasTag_Reel2, DecideReelTurns_BiasTag_Reel3 }; -void (*const DecideReelTurns_NoBiasTag[])(void) = +static void (*const sDecideReelTurns_NoBiasTag[NUM_REELS])(void) = { DecideReelTurns_NoBiasTag_Reel1, DecideReelTurns_NoBiasTag_Reel2, DecideReelTurns_NoBiasTag_Reel3 }; -const u16 ReelStopShocks[] = {2, 4, 4, 4, 8}; +static const u16 sReelStopShocks[] = {2, 4, 4, 4, 8}; -bool8 (*const DecideReelTurns_BiasTag_Reel1_Bets[])(u8 tag1, u8 tag2) = +static bool8 (*const sDecideReelTurns_BiasTag_Reel1_Bets[MAX_BET])(u8 tag1, u8 tag2) = { DecideReelTurns_BiasTag_Reel1_Bet1, DecideReelTurns_BiasTag_Reel1_Bet2or3, DecideReelTurns_BiasTag_Reel1_Bet2or3 }; -bool8 (*const DecideReelTurns_BiasTag_Reel2_Bets[])(void) = +static bool8 (*const sDecideReelTurns_BiasTag_Reel2_Bets[MAX_BET])(void) = { DecideReelTurns_BiasTag_Reel2_Bet1or2, DecideReelTurns_BiasTag_Reel2_Bet1or2, DecideReelTurns_BiasTag_Reel2_Bet3 }; -bool8 (*const DecideReelTurns_BiasTag_Reel3_Bets[])(u8 biasTag) = +static bool8 (*const sDecideReelTurns_BiasTag_Reel3_Bets[MAX_BET])(u8 biasTag) = { DecideReelTurns_BiasTag_Reel3_Bet1or2, DecideReelTurns_BiasTag_Reel3_Bet1or2, DecideReelTurns_BiasTag_Reel3_Bet3 }; -void (*const DecideReelTurns_NoBiasTag_Reel2_Bets[])(void) = +static void (*const sDecideReelTurns_NoBiasTag_Reel2_Bets[MAX_BET])(void) = { DecideReelTurns_NoBiasTag_Reel2_Bet1, DecideReelTurns_NoBiasTag_Reel2_Bet2, DecideReelTurns_NoBiasTag_Reel2_Bet3 }; -void (*const DecideReelTurns_NoBiasTag_Reel3_Bets[])(void) = +static void (*const sDecideReelTurns_NoBiasTag_Reel3_Bets[MAX_BET])(void) = { DecideReelTurns_NoBiasTag_Reel3_Bet1, DecideReelTurns_NoBiasTag_Reel3_Bet2, DecideReelTurns_NoBiasTag_Reel3_Bet3 }; -void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) = +static void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) = { sub_8103C78, sub_8103CAC, @@ -782,7 +790,7 @@ void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) = static const s16 sReelButtonOffsets[NUM_REELS] = {5, 10, 15}; -void (*const sPikaPowerBoltFuncs[])(struct Task *task) = +static void (*const sPikaPowerBoltFuncs[])(struct Task *task) = { nullsub_68, sub_810411C, @@ -847,7 +855,7 @@ static void (*const sInfoBoxActions[])(struct Task *task) = }; // Just idles, digital display is handled by CreateDigitalDisplayScene and sprite callbacks -void (*const sDigitalDisplayActions[])(struct Task *task) = +static void (*const sDigitalDisplayActions[])(struct Task *task) = { DigitalDisplay_Idle, }; @@ -1063,7 +1071,7 @@ static void SlotMachineSetup_0_1(void) for (i = 0; i < NUM_REELS; i++) { sSlotMachine->reelPixelOffsetsWhileStopping[i] = 0; - sSlotMachine->reelPositions[i] = gInitialReelPositions[i][sSlotMachine->luckyGame] % SYMBOLS_PER_REEL; + sSlotMachine->reelPositions[i] = sInitialReelPositions[i][sSlotMachine->luckyGame] % SYMBOLS_PER_REEL; sSlotMachine->reelPixelOffsets[i] = SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT - sSlotMachine->reelPositions[i] * REEL_SYMBOL_HEIGHT; sSlotMachine->reelPixelOffsets[i] %= SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT; } @@ -1130,7 +1138,7 @@ static void GameplayTasks_Slots(void) // task->data[0] is a timer static void RunSlotActions(u8 taskId) { - while (SlotActions[sSlotMachine->state](&gTasks[taskId])) + while (sSlotActions[sSlotMachine->state](&gTasks[taskId])) ; } @@ -1360,12 +1368,12 @@ static bool8 SlotAction_CheckMatches(struct Task *task) { sSlotMachine->netCoinLoss = 0; } - if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) + if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED))) { PlayFanfare(MUS_ME_B_BIG); CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_BIG); } - else if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_MIXED)) + else if (sSlotMachine->matchedSymbols & (1 << MATCHED_777_MIXED)) { PlayFanfare(MUS_ME_B_BIG); CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_REG); @@ -1376,20 +1384,20 @@ static bool8 SlotAction_CheckMatches(struct Task *task) CreateDigitalDisplayScene(DIG_DISPLAY_WIN); } // if you matched 777... - if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_MIXED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) + if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_MIXED) | (1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED))) { sSlotMachine->luckyFlags &= ~(LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); - if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) + if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED))) { sSlotMachine->reelTimeSpinsLeft = 0; sSlotMachine->reelTimeSpinsUsed = 0; sSlotMachine->luckyGame = FALSE; - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_BLUE)) + if (sSlotMachine->matchedSymbols & (1 << MATCHED_777_BLUE)) // this may be an error, but if you get blue 777, the game becomes lucky sSlotMachine->luckyGame = TRUE; } } - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER) && sSlotMachine->pikaPower < 16) + if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER) && sSlotMachine->pikaPower < 16) { sSlotMachine->pikaPower++; DisplayPikaPower(sSlotMachine->pikaPower); @@ -1417,16 +1425,16 @@ static bool8 SlotAction_EndOfRoll(struct Task *task) if (TryStopSlotMachineLights()) { sSlotMachine->state = SLOT_ACTION_19; - if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE))) + if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_RED) | (1 << MATCHED_777_BLUE))) IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { sSlotMachine->currReel = 0; sSlotMachine->state = SLOT_ACTION_9; } - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER)) + if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER)) sSlotMachine->state = SLOT_ACTION_17; - if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); sSlotMachine->state = SLOT_ACTION_18; @@ -1440,7 +1448,7 @@ static bool8 SlotAction_MatchedPower(struct Task *task) if (!sub_81040C8()) { sSlotMachine->state = SLOT_ACTION_19; - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { sSlotMachine->state = SLOT_ACTION_9; if (sSlotMachine->reelTimeSpinsLeft) @@ -1458,7 +1466,7 @@ static bool8 SlotAction18(struct Task *task) if (IsDigitalDisplayAnimFinished()) { sSlotMachine->state = SLOT_ACTION_19; - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { sSlotMachine->state = SLOT_ACTION_9; } @@ -1618,7 +1626,7 @@ static void DrawLuckyFlags(void) if (attempts != 3) // if you found a lucky number { // attempts == 1: reelTime flag set - sSlotMachine->luckyFlags |= gLuckyFlagSettings_Top3[attempts]; + sSlotMachine->luckyFlags |= sLuckyFlagSettings_Top3[attempts]; if (attempts != 1) { return; @@ -1629,7 +1637,7 @@ static void DrawLuckyFlags(void) attempts = AttemptsAtLuckyFlags_NotTop3(); if (attempts != 5) // if you found a lucky number { - sSlotMachine->luckyFlags |= gLuckyFlagSettings_NotTop3[attempts]; + sSlotMachine->luckyFlags |= sLuckyFlagSettings_NotTop3[attempts]; } } } @@ -1649,7 +1657,7 @@ static u8 GetBiasTag(u8 luckyFlags) for (i = 0; i < 8; i++) { if (luckyFlags & 1) - return gBiasTags[i]; + return sBiasTags[i]; luckyFlags >>= 1; } return 0; @@ -1659,7 +1667,7 @@ static u8 GetBiasTag(u8 luckyFlags) static bool8 IsThisRoundLucky(void) { u8 rval = Random(); - if (gLuckyRoundProbabilities[sSlotMachine->machineId][sSlotMachine->bet - 1] > rval) + if (sLuckyRoundProbabilities[sSlotMachine->machineId][sSlotMachine->bet - 1] > rval) return TRUE; return FALSE; } @@ -1671,7 +1679,7 @@ static u8 AttemptsAtLuckyFlags_Top3(void) for (count = 0; count < 3; count++) { s16 rval = Random() & 0xff; - s16 value = gLuckyFlagProbabilities_Top3[count][sSlotMachine->machineId]; + s16 value = sLuckyFlagProbabilities_Top3[count][sSlotMachine->machineId]; if (value > rval) break; } @@ -1685,7 +1693,7 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void) for (count = 0; count < 5; count++) { s16 rval = Random() & 0xff; // random byte - s16 value = gLuckyFlagProbabilities_NotTop3[count][sSlotMachine->machineId]; + s16 value = sLuckyFlagProbabilities_NotTop3[count][sSlotMachine->machineId]; // make first attempt easier if it's a lucky game if (count == 0 && sSlotMachine->luckyGame == TRUE) { @@ -1709,9 +1717,9 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void) static u8 GetReelTimeProbability(u8 reelTimeDraw) { if (sSlotMachine->luckyGame == FALSE) - return gReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + return sReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; else - return gReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; } static void GetReeltimeDraw(void) @@ -1735,7 +1743,7 @@ static void GetReeltimeDraw(void) static bool8 SkipToReeltimeAction14(u16 i) { u16 rval = Random() & 0xff; - if (rval < gProbabilityTable_SkipToReeltimeAction14[i]) + if (rval < sProbabilityTable_SkipToReeltimeAction14[i]) return TRUE; else return FALSE; @@ -1755,11 +1763,11 @@ static u16 SlowReelSpeed(void) else if (sSlotMachine->netCoinLoss >= 150) i = 1; rval = Random() % 100; - value = gReelIncrementTable[i][0]; + value = sReelIncrementTable[i][0]; if (rval < value) return 4; rval = Random() % 100; - value = gReelIncrementTable[i][1] + gReelTimeBonusIncrementTable[sSlotMachine->reelTimeSpinsUsed]; + value = sReelIncrementTable[i][1] + sReelTimeBonusIncrementTable[sSlotMachine->reelTimeSpinsUsed]; if (rval < value) return 2; return 8; @@ -1783,10 +1791,10 @@ static void CheckMatch_CenterRow(void) c2 = GetTagAtRest(MIDDLE_REEL, 2); c3 = GetTagAtRest(RIGHT_REEL, 2); match = GetMatchFromSymbolsInRow(c1, c2, c3); - if (match != SLOT_MACHINE_MATCHED_NONE) + if (match != MATCHED_NONE) { - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; + sSlotMachine->payout += sSlotPayouts[match]; + sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; FlashMatchLine(MATCH_MIDDLE_ROW); } } @@ -1799,24 +1807,24 @@ static void CheckMatch_TopAndBottom(void) c2 = GetTagAtRest(MIDDLE_REEL, 1); c3 = GetTagAtRest(RIGHT_REEL, 1); match = GetMatchFromSymbolsInRow(c1, c2, c3); - if (match != SLOT_MACHINE_MATCHED_NONE) + if (match != MATCHED_NONE) { - if (match == SLOT_MACHINE_MATCHED_1CHERRY) - match = SLOT_MACHINE_MATCHED_2CHERRY; - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; + if (match == MATCHED_1CHERRY) + match = MATCHED_2CHERRY; + sSlotMachine->payout += sSlotPayouts[match]; + sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; FlashMatchLine(MATCH_TOP_ROW); } c1 = GetTagAtRest(LEFT_REEL, 3); c2 = GetTagAtRest(MIDDLE_REEL, 3); c3 = GetTagAtRest(RIGHT_REEL, 3); match = GetMatchFromSymbolsInRow(c1, c2, c3); - if (match != SLOT_MACHINE_MATCHED_NONE) + if (match != MATCHED_NONE) { - if (match == SLOT_MACHINE_MATCHED_1CHERRY) - match = SLOT_MACHINE_MATCHED_2CHERRY; - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; + if (match == MATCHED_1CHERRY) + match = MATCHED_2CHERRY; + sSlotMachine->payout += sSlotPayouts[match]; + sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; FlashMatchLine(MATCH_BOTTOM_ROW); } } @@ -1829,12 +1837,12 @@ static void CheckMatch_Diagonals(void) c2 = GetTagAtRest(MIDDLE_REEL, 2); c3 = GetTagAtRest(RIGHT_REEL, 3); match = GetMatchFromSymbolsInRow(c1, c2, c3); - if (match != SLOT_MACHINE_MATCHED_NONE) + if (match != MATCHED_NONE) { - if (match != SLOT_MACHINE_MATCHED_1CHERRY) + if (match != MATCHED_1CHERRY) { - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; + sSlotMachine->payout += sSlotPayouts[match]; + sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; } FlashMatchLine(MATCH_NWSE_DIAG); } @@ -1842,12 +1850,12 @@ static void CheckMatch_Diagonals(void) c2 = GetTagAtRest(MIDDLE_REEL, 2); c3 = GetTagAtRest(RIGHT_REEL, 1); match = GetMatchFromSymbolsInRow(c1, c2, c3); - if (match != SLOT_MACHINE_MATCHED_NONE) + if (match != MATCHED_NONE) { - if (match != SLOT_MACHINE_MATCHED_1CHERRY) + if (match != MATCHED_1CHERRY) { - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; + sSlotMachine->payout += sSlotPayouts[match]; + sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; } FlashMatchLine(MATCH_NESW_DIAG); } @@ -1856,14 +1864,14 @@ static void CheckMatch_Diagonals(void) static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3) { if (c1 == c2 && c1 == c3) - return gSym2Match[c1]; + return sSymToMatch[c1]; if (c1 == GFXTAG_7_RED && c2 == GFXTAG_7_RED && c3 == GFXTAG_7_BLUE) - return SLOT_MACHINE_MATCHED_777_MIXED; + return MATCHED_777_MIXED; if (c1 == GFXTAG_7_BLUE && c2 == GFXTAG_7_BLUE && c3 == GFXTAG_7_RED) - return SLOT_MACHINE_MATCHED_777_MIXED; + return MATCHED_777_MIXED; if (c1 == GFXTAG_CHERRY) - return SLOT_MACHINE_MATCHED_1CHERRY; - return SLOT_MACHINE_MATCHED_NONE; + return MATCHED_1CHERRY; + return MATCHED_NONE; } static void AwardPayout(void) @@ -1881,7 +1889,7 @@ static bool8 IsFinalTask_RunAwardPayoutActions(void) static void RunAwardPayoutActions(u8 taskId) { - while (AwardPayoutActions[gTasks[taskId].data[0]](&gTasks[taskId])) + while (sAwardPayoutActions[gTasks[taskId].data[0]](&gTasks[taskId])) ; } @@ -1967,7 +1975,7 @@ static u8 GetNearbyReelTimeTag(s16 n) s16 newPosition = (sSlotMachine->reeltimePosition + n) % 6; if (newPosition < 0) newPosition += 6; - return gReelTimeTags[newPosition]; + return sReelTimeTags[newPosition]; } static void AdvanceSlotReel(u8 reelIndex, s16 value) @@ -2040,7 +2048,7 @@ static bool8 IsSlotReelMoving(u8 reelIndex) static void RunSlotReelActions(u8 taskId) { - while (SlotReelActions[gTasks[taskId].data[0]](&gTasks[taskId])) + while (sSlotReelActions[gTasks[taskId].data[0]](&gTasks[taskId])) ; } @@ -2061,14 +2069,14 @@ static bool8 SlotReelAction_Spin(struct Task *task) static bool8 SlotReelAction_DecideWhereToStop(struct Task *task) { task->data[0]++; - // initialize data for that reel --> these will be changed if gBiasTags can be lined up + // initialize data for that reel --> these will be changed if sBiasTags can be lined up sSlotMachine->winnerRows[task->data[15]] = 0; sSlotMachine->reelExtraTurns[task->data[15]] = 0; - if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->luckySpinsLeft == 0 || !DecideReelTurns_BiasTag[task->data[15]]())) + if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->luckySpinsLeft == 0 || !sDecideReelTurns_BiasTag[task->data[15]]())) { sSlotMachine->luckySpinsLeft = 0; - DecideReelTurns_NoBiasTag[task->data[15]](); + sDecideReelTurns_NoBiasTag[task->data[15]](); } task->data[1] = sSlotMachine->reelExtraTurns[task->data[15]]; return TRUE; @@ -2077,10 +2085,10 @@ static bool8 SlotReelAction_DecideWhereToStop(struct Task *task) // go to next tag and then do any additional turns static bool8 SlotReelAction_MoveToStop(struct Task *task) { - u16 reelStopShocks[ARRAY_COUNT(ReelStopShocks)]; + u16 reelStopShocks[ARRAY_COUNT(sReelStopShocks)]; s16 reelPixelPos; - memcpy(reelStopShocks, ReelStopShocks, sizeof(ReelStopShocks)); + memcpy(reelStopShocks, sReelStopShocks, sizeof(sReelStopShocks)); reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % REEL_SYMBOL_HEIGHT; if (reelPixelPos != 0) reelPixelPos = AdvanceSlotReelToNextTag(task->data[15], sSlotMachine->reelIncrement); @@ -2125,7 +2133,7 @@ static bool8 DecideReelTurns_BiasTag_Reel1(void) tag1 = GFXTAG_7_RED; tag2 = GFXTAG_7_BLUE; } - return DecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2); + return sDecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2); } static bool8 AreTagsAtPosition_Reel1(s16 pos, u8 tag1, u8 tag2) @@ -2227,7 +2235,7 @@ static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 tag1, u8 tag2) static bool8 DecideReelTurns_BiasTag_Reel2(void) { - return DecideReelTurns_BiasTag_Reel2_Bets[sSlotMachine->bet - 1](); + return sDecideReelTurns_BiasTag_Reel2_Bets[sSlotMachine->bet - 1](); } static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void) @@ -2298,7 +2306,7 @@ static bool8 DecideReelTurns_BiasTag_Reel3(void) biasTag = GFXTAG_7_BLUE; } } - return DecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag); + return sDecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag); } static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 biasTag) @@ -2373,7 +2381,7 @@ static bool8 IsBiasTag777_SwitchColor(u8 *biasTagPtr) static void DecideReelTurns_NoBiasTag_Reel2(void) { - DecideReelTurns_NoBiasTag_Reel2_Bets[sSlotMachine->bet - 1](); + sDecideReelTurns_NoBiasTag_Reel2_Bets[sSlotMachine->bet - 1](); } // only does stuff if the biasTag is one of the 7's, plus other conditions @@ -2526,7 +2534,7 @@ static bool8 TagsDontMatchOrHaveAny7s(u8 tag1, u8 tag2, u8 tag3) static void DecideReelTurns_NoBiasTag_Reel3(void) { - DecideReelTurns_NoBiasTag_Reel3_Bets[sSlotMachine->bet - 1](); + sDecideReelTurns_NoBiasTag_Reel3_Bets[sSlotMachine->bet - 1](); } static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void) @@ -2702,14 +2710,14 @@ static void sub_8103CC8(struct Task *task, u8 taskId) DestroyTask(taskId); } -static void LightenMatchLine(u8 tileId) +static void LightenMatchLine(u8 matchLineId) { - LoadPalette(sLitMatchLinePalTable[tileId], sMatchLinePalOffsets[tileId], 2); + LoadPalette(sLitMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 2); } -static void DarkenMatchLine(u8 tileId) +static void DarkenMatchLine(u8 matchLineId) { - LoadPalette(sDarkMatchLinePalTable[tileId], sMatchLinePalOffsets[tileId], 2); + LoadPalette(sDarkMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 2); } // light up the match line for each bet by the player @@ -2853,7 +2861,7 @@ static bool8 TryStopSlotMachineLights(void) if (gTasks[taskId].sFlashState == 0) { DestroyTask(taskId); - LoadPalette(gUnknown_083EDDAC, 0x10, 0x20); + LoadPalette(sSlotMachineMenu_Pal, 0x10, 0x20); return TRUE; } return FALSE; @@ -4502,7 +4510,7 @@ static void LoadMenuGfx(void) LZDecompressWram(gSlotMachineMenu_Gfx, sMenuGfx); LoadBgTiles(2, sMenuGfx, 0x2200, 0); LoadPalette(gSlotMachineMenu_Pal, 0, 160); - LoadPalette(gPalette_83EDE24, 208, 32); + LoadPalette(sUnkPalette, 208, 32); } static void sub_81064B8(void) @@ -4663,7 +4671,7 @@ static void AllocDigitalDisplayGfx(void) static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] = { - { + [LEFT_REEL] = { GFXTAG_7_RED, GFXTAG_CHERRY, GFXTAG_AZURILL, @@ -4686,7 +4694,7 @@ static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] = GFXTAG_LOTAD, GFXTAG_REPLAY }, - { + [MIDDLE_REEL] = { GFXTAG_7_RED, GFXTAG_CHERRY, GFXTAG_REPLAY, @@ -4709,7 +4717,7 @@ static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] = GFXTAG_REPLAY, GFXTAG_CHERRY }, - { + [RIGHT_REEL] = { GFXTAG_7_RED, GFXTAG_POWER, GFXTAG_7_BLUE, @@ -4734,17 +4742,17 @@ static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] = }, }; -static const u8 gReelTimeTags[] = { +static const u8 sReelTimeTags[] = { 1, 0, 5, 4, 3, 2 }; -static const s16 gInitialReelPositions[NUM_REELS][2] = { - {0, 6}, - {0, 10}, - {0, 2} +static const s16 sInitialReelPositions[NUM_REELS][2] = { + [LEFT_REEL] = {0, 6}, + [MIDDLE_REEL] = {0, 10}, + [RIGHT_REEL] = {0, 2} }; -static const u8 gLuckyRoundProbabilities[][3] = { +static const u8 sLuckyRoundProbabilities[][3] = { {1, 1, 12}, {1, 1, 14}, {2, 2, 14}, @@ -4753,13 +4761,13 @@ static const u8 gLuckyRoundProbabilities[][3] = { {3, 3, 16} }; -static const u8 gLuckyFlagProbabilities_Top3[][6] = { +static const u8 sLuckyFlagProbabilities_Top3[][6] = { {25, 25, 30, 40, 40, 50}, {25, 25, 30, 30, 35, 35}, {25, 25, 30, 25, 25, 30} }; -static const u8 gLuckyFlagProbabilities_NotTop3[][6] = { +static const u8 sLuckyFlagProbabilities_NotTop3[][6] = { {20, 25, 25, 20, 25, 25}, {12, 15, 15, 18, 19, 22}, {25, 25, 25, 30, 30, 40}, @@ -4767,7 +4775,7 @@ static const u8 gLuckyFlagProbabilities_NotTop3[][6] = { {40, 40, 35, 35, 40, 40} }; -static const u8 gReeltimeProbabilities_UnluckyGame[][17] = { +static const u8 sReeltimeProbabilities_UnluckyGame[][17] = { {243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5}, { 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5}, { 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40}, @@ -4776,7 +4784,7 @@ static const u8 gReeltimeProbabilities_UnluckyGame[][17] = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6} }; -static const u8 gReelTimeProbabilities_LuckyGame[][17] = { +static const u8 sReelTimeProbabilities_LuckyGame[][17] = { { 243, 243, 243, 200, 200, 200, 200, 160, 160, 160, 160, 160, 160, 70, 70, 70, 5}, { 5, 5, 5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 2, 2, 2, 6}, { 4, 4, 4, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 40, 40, 40, 35}, @@ -4785,11 +4793,11 @@ static const u8 gReelTimeProbabilities_LuckyGame[][17] = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60} }; -static const u16 gProbabilityTable_SkipToReeltimeAction14[] = { +static const u16 sProbabilityTable_SkipToReeltimeAction14[] = { 128, 175, 200, 225, 256 }; -static const u16 gReelIncrementTable[][2] = { +static const u16 sReelIncrementTable[][2] = { {10, 5}, {10, 10}, {10, 15}, @@ -4797,85 +4805,93 @@ static const u16 gReelIncrementTable[][2] = { {10, 35} }; -static const u16 gReelTimeBonusIncrementTable[] = { +static const u16 sReelTimeBonusIncrementTable[] = { 0, 5, 10, 15, 20 }; // tentative name -static const u8 gBiasTags[] = { +static const u8 sBiasTags[] = { GFXTAG_REPLAY, GFXTAG_CHERRY, GFXTAG_LOTAD, GFXTAG_AZURILL, GFXTAG_POWER, GFXTAG_7_RED, GFXTAG_7_RED, GFXTAG_7_RED }; -static const u16 gLuckyFlagSettings_Top3[] = { +static const u16 sLuckyFlagSettings_Top3[] = { LUCKY_BIAS_777, LUCKY_BIAS_REELTIME, LUCKY_BIAS_MIXED_777 }; -static const u16 gLuckyFlagSettings_NotTop3[] = { +static const u16 sLuckyFlagSettings_NotTop3[] = { LUCKY_BIAS_POWER, LUCKY_BIAS_AZURILL, LUCKY_BIAS_LOTAD, LUCKY_BIAS_CHERRY, LUCKY_BIAS_REPLAY }; -static const u8 gSym2Match[] = { - SLOT_MACHINE_MATCHED_777_RED, - SLOT_MACHINE_MATCHED_777_BLUE, - SLOT_MACHINE_MATCHED_AZURILL, - SLOT_MACHINE_MATCHED_LOTAD, - SLOT_MACHINE_MATCHED_1CHERRY, - SLOT_MACHINE_MATCHED_POWER, - SLOT_MACHINE_MATCHED_REPLAY +static const u8 sSymToMatch[] = { + [GFXTAG_7_RED] = MATCHED_777_RED, + [GFXTAG_7_BLUE] = MATCHED_777_BLUE, + [GFXTAG_AZURILL] = MATCHED_AZURILL, + [GFXTAG_LOTAD] = MATCHED_LOTAD, + [GFXTAG_CHERRY] = MATCHED_1CHERRY, + [GFXTAG_POWER] = MATCHED_POWER, + [GFXTAG_REPLAY] = MATCHED_REPLAY }; -static const u16 gSlotMatchFlags[] = { - 1 << SLOT_MACHINE_MATCHED_1CHERRY, - 1 << SLOT_MACHINE_MATCHED_2CHERRY, - 1 << SLOT_MACHINE_MATCHED_REPLAY, - 1 << SLOT_MACHINE_MATCHED_LOTAD, - 1 << SLOT_MACHINE_MATCHED_AZURILL, - 1 << SLOT_MACHINE_MATCHED_POWER, - 1 << SLOT_MACHINE_MATCHED_777_MIXED, - 1 << SLOT_MACHINE_MATCHED_777_RED, - 1 << SLOT_MACHINE_MATCHED_777_BLUE +static const u16 sSlotMatchFlags[] = { + [MATCHED_1CHERRY] = 1 << MATCHED_1CHERRY, + [MATCHED_2CHERRY] = 1 << MATCHED_2CHERRY, + [MATCHED_REPLAY] = 1 << MATCHED_REPLAY, + [MATCHED_LOTAD] = 1 << MATCHED_LOTAD, + [MATCHED_AZURILL] = 1 << MATCHED_AZURILL, + [MATCHED_POWER] = 1 << MATCHED_POWER, + [MATCHED_777_MIXED] = 1 << MATCHED_777_MIXED, + [MATCHED_777_RED] = 1 << MATCHED_777_RED, + [MATCHED_777_BLUE] = 1 << MATCHED_777_BLUE }; -static const u16 gSlotPayouts[] = { - 2, 4, 0, 6, 12, 3, 90, 300, 300 +static const u16 sSlotPayouts[] = { + [MATCHED_1CHERRY] = 2, + [MATCHED_2CHERRY] = 4, + [MATCHED_REPLAY] = 0, + [MATCHED_LOTAD] = 6, + [MATCHED_AZURILL] = 12, + [MATCHED_POWER] = 3, + [MATCHED_777_MIXED] = 90, + [MATCHED_777_RED] = 300, + [MATCHED_777_BLUE] = 300 }; static const s16 sDigitalDisplay_SpriteCoords[][2] = { - [DIG_DISPINFO_INSERT] = { 208, 56}, - [DIG_DISPINFO_STOP_S] = { 184, 0}, - [DIG_DISPINFO_STOP_T] = { 200, 8}, - [DIG_DISPINFO_STOP_O] = { 216, 16}, - [DIG_DISPINFO_STOP_P] = { 232, 24}, - [DIG_DISPINFO_A_BUTTON_STOP] = { 208, 72}, - [DIG_DISPINFO_POKE_BALL_ROCKING] = { 208, 8}, - [DIG_DISPINFO_WIN] = { 208, 64}, - [DIG_DISPINFO_LOSE] = { 208, 56}, + [DIG_DISPINFO_INSERT] = { 208, 56}, + [DIG_DISPINFO_STOP_S] = { 184, 0}, + [DIG_DISPINFO_STOP_T] = { 200, 8}, + [DIG_DISPINFO_STOP_O] = { 216, 16}, + [DIG_DISPINFO_STOP_P] = { 232, 24}, + [DIG_DISPINFO_A_BUTTON_STOP] = { 208, 72}, + [DIG_DISPINFO_POKE_BALL_ROCKING] = { 208, 8}, + [DIG_DISPINFO_WIN] = { 208, 64}, + [DIG_DISPINFO_LOSE] = { 208, 56}, [DIG_DISPINFO_SMOKE_NW] = { 192, 88}, [DIG_DISPINFO_SMOKE_NE] = { 224, 88}, [DIG_DISPINFO_SMOKE_SW] = { 192, 120}, [DIG_DISPINFO_SMOKE_SE] = { 224, 120}, - [DIG_DISPINFO_REEL] = { 144, 56}, - [DIG_DISPINFO_TIME] = { 272, 88}, + [DIG_DISPINFO_REEL] = { 144, 56}, + [DIG_DISPINFO_TIME] = { 272, 88}, [DIG_DISPINFO_NUMBER] = { 168, 112}, - [DIG_DISPINFO_DPAD] = { 208, 84}, + [DIG_DISPINFO_DPAD] = { 208, 84}, [DIG_DISPINFO_POKE_BALL_SHINING] = { 208, 112}, - [DIG_DISPINFO_REG_R] = { 188, 52}, - [DIG_DISPINFO_REG_E] = { 208, 52}, - [DIG_DISPINFO_REG_G] = { 228, 52}, - [DIG_DISPINFO_REG_BONUS_B] = { 184, 72}, - [DIG_DISPINFO_REG_BONUS_O] = { 196, 72}, - [DIG_DISPINFO_REG_BONUS_N] = { 208, 72}, - [DIG_DISPINFO_REG_BONUS_U] = { 220, 72}, - [DIG_DISPINFO_REG_BONUS_S] = { 232, 72}, - [DIG_DISPINFO_BIG_B] = { 188, 52}, - [DIG_DISPINFO_BIG_I] = { 208, 52}, - [DIG_DISPINFO_BIG_G] = { 228, 52}, - [DIG_DISPINFO_BIG_BONUS_B] = { 184, 72}, - [DIG_DISPINFO_BIG_BONUS_O] = { 196, 72}, - [DIG_DISPINFO_BIG_BONUS_N] = { 208, 72}, - [DIG_DISPINFO_BIG_BONUS_U] = { 220, 72}, - [DIG_DISPINFO_BIG_BONUS_S] = { 232, 72}, - [DIG_DISPINFO_A_BUTTON_START] = { 0, 0} // Initially offscreen + [DIG_DISPINFO_REG_R] = { 188, 52}, + [DIG_DISPINFO_REG_E] = { 208, 52}, + [DIG_DISPINFO_REG_G] = { 228, 52}, + [DIG_DISPINFO_REG_BONUS_B] = { 184, 72}, + [DIG_DISPINFO_REG_BONUS_O] = { 196, 72}, + [DIG_DISPINFO_REG_BONUS_N] = { 208, 72}, + [DIG_DISPINFO_REG_BONUS_U] = { 220, 72}, + [DIG_DISPINFO_REG_BONUS_S] = { 232, 72}, + [DIG_DISPINFO_BIG_B] = { 188, 52}, + [DIG_DISPINFO_BIG_I] = { 208, 52}, + [DIG_DISPINFO_BIG_G] = { 228, 52}, + [DIG_DISPINFO_BIG_BONUS_B] = { 184, 72}, + [DIG_DISPINFO_BIG_BONUS_O] = { 196, 72}, + [DIG_DISPINFO_BIG_BONUS_N] = { 208, 72}, + [DIG_DISPINFO_BIG_BONUS_U] = { 220, 72}, + [DIG_DISPINFO_BIG_BONUS_S] = { 232, 72}, + [DIG_DISPINFO_A_BUTTON_START] = { 0, 0} // Initially offscreen }; static const SpriteCallback sDigitalDisplay_SpriteCallbacks[] = { @@ -7031,18 +7047,18 @@ static const struct SpriteSheet sSlotMachineSpriteSheets[22] = static const u8 *const sReelBackground_Tilemap = gSlotMachineReelBackground_Tilemap; -static const u8 sUnused2[][2] = +static const u16 sUnused[] = { - {0x7B, 0x6F}, - {0x68, 0x69}, - {0xAB, 0x36}, - {0xFF, 0x7F}, - {0x50, 0x57}, - {0xC0, 0x7E}, - {0xBA, 2}, - {0xBA, 2}, - {0xFD, 1}, - {0xFD, 1} + 0x6F7B, + 0x6968, + 0x36AB, + 0x7FFF, + 0x5750, + 0x7EC0, + 0x02BA, + 0x02BA, + 0x01FD, + 0x01FD, }; // The Bet 2 and 3 match line palettes are duplicated unnecessarily @@ -7077,7 +7093,7 @@ static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES] = { [MATCH_NESW_DIAG] = 77 // Doesn't matter as both are identical }; -static const u8 sBetToMatchLineIds[][2] = +static const u8 sBetToMatchLineIds[MAX_BET][2] = { {MATCH_MIDDLE_ROW, MATCH_MIDDLE_ROW}, // Bet 1 {MATCH_TOP_ROW, MATCH_BOTTOM_ROW}, // Bet 2 @@ -7097,7 +7113,7 @@ static const u16 *const sFlashingLightsPalTable[] = sFlashingLightsOutside_Pal, }; -static const u16 *const gUnknown_083EDDAC = {gSlotMachineMenu_Pal + 16}; +static const u16 *const sSlotMachineMenu_Pal = {gSlotMachineMenu_Pal + 16}; static const u16 sPokeballShining0_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_0.gbapal"); static const u16 sPokeballShining1_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_1.gbapal"); @@ -7111,7 +7127,7 @@ static const u16 *const sPokeballShiningPalTable[] = }; static const u16 *const sDigitalDisplay_Pal = gSlotMachineDigitalDisplay_Pal; -static const u16 gPalette_83EDE24[] = INCBIN_U16("graphics/slot_machine/85A8524.bin"); +static const u16 sUnkPalette[] = INCBIN_U16("graphics/slot_machine/85A8524.bin"); static const struct SpritePalette sSlotMachineSpritePalettes[] = { From 93be3a08ce53fd3364fdb055e86269aa32e7fc4f Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Tue, 28 Jul 2020 15:31:08 -0400 Subject: [PATCH 32/85] Match --- src/event_object_movement.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 4b275a9702..af34829695 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1205,7 +1205,8 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, { struct ObjectEvent *objectEvent; u8 objectEventId; - s16 x, y; + s16 x; + s16 y; if (GetAvailableObjectEventId(template->localId, mapNum, mapGroup, &objectEventId)) return OBJECT_EVENTS_COUNT; @@ -1231,6 +1232,7 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->range.as_nybbles.x = template->movementRangeX; objectEvent->range.as_nybbles.y = template->movementRangeY; objectEvent->trainerType = template->trainerType; + objectEvent->mapNum = mapNum; //redundant, but needed to match objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); From 1f4813bfd2c9774b4bcbb83e6b27c994d7ad478c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 28 Jul 2020 17:34:44 -0400 Subject: [PATCH 33/85] Document slot machine funcs --- include/constants/slot_machine.h | 2 +- src/slot_machine.c | 1033 ++++++++++++++++-------------- 2 files changed, 545 insertions(+), 490 deletions(-) diff --git a/include/constants/slot_machine.h b/include/constants/slot_machine.h index 2b7c68793f..81848f2084 100644 --- a/include/constants/slot_machine.h +++ b/include/constants/slot_machine.h @@ -3,4 +3,4 @@ #define SLOT_MACHINE_COUNT 12 -#endif // GUARD_CONSTANTS_SLOT_MACHINE_H \ No newline at end of file +#endif // GUARD_CONSTANTS_SLOT_MACHINE_H diff --git a/src/slot_machine.c b/src/slot_machine.c index dcbeab736e..3fde76ab0a 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -114,26 +114,26 @@ enum { enum { SLOT_ACTION_UNFADE, - SLOT_ACTION_1, - SLOT_ACTION_2, - SLOT_ACTION_3, - SLOT_ACTION_4, + SLOT_ACTION_WAIT_FADE, + SLOT_ACTION_READY_NEW_SPIN, + SLOT_ACTION_READY_NEW_RT_SPIN, + SLOT_ACTION_ASK_INSERT_BET, SLOT_ACTION_BET_INPUT, - SLOT_ACTION_6, - SLOT_ACTION_7, - SLOT_ACTION_8, - SLOT_ACTION_9, - SLOT_ACTION_10, - SLOT_ACTION_11, - SLOT_ACTION_12, - SLOT_ACTION_13, - SLOT_ACTION_14, - SLOT_ACTION_15, - SLOT_ACTION_16, - SLOT_ACTION_17, - SLOT_ACTION_18, - SLOT_ACTION_19, - SLOT_ACTION_20, + SLOT_ACTION_MSG_NEED_3_COINS, + SLOT_ACTION_WAIT_MSG_NEED_3_COINS, + SLOT_ACTION_WAIT_INFO_BOX, + SLOT_ACTION_START_SPIN, + SLOT_ACTION_START_RT_SPIN, + SLOT_ACTION_SET_LUCKY_SPINS, + SLOT_ACTION_AWAIT_REEL_STOP, + SLOT_ACTION_AWAIT_ALL_REELS_STOP, + SLOT_ACTION_CHECK_MATCHES, + SLOT_ACTION_WAIT_PAYOUT, + SLOT_ACTION_END_PAYOUT, + SLOT_ACTION_MATCHED_POWER, + SLOT_ACTION_WAIT_RT_ANIM, + SLOT_ACTION_RESET_BET_TILES, + SLOT_ACTION_NO_MATCHES, SLOT_ACTION_ASK_QUIT, SLOT_ACTION_HANDLE_QUIT_INPUT, SLOT_ACTION_MSG_MAX_COINS, @@ -144,6 +144,14 @@ enum { SLOT_ACTION_FREE, }; +enum { + REEL_ACTION_STILL, + REEL_ACTION_SPIN, + REEL_ACTION_STOP, + REEL_ACTION_STOP_MOVE, + REEL_ACTION_STOP_SHAKE, +}; + #define DIG_SPRITE_DUMMY {255, 0, 0} // Sprite template IDs for the digital display in the right panel @@ -235,7 +243,7 @@ struct SlotMachine /*0x03*/ u8 luckyGame; /*0x04*/ u8 luckyFlags; /*0x05*/ u8 reelTimeDraw; - /*0x06*/ u8 luckySpinsLeft; // tentative + /*0x06*/ u8 isLuckySpin; /*0x07*/ u8 biasTag; /*0x08*/ u16 matchedSymbols; /*0x0A*/ u8 reelTimeSpinsLeft; @@ -251,7 +259,7 @@ struct SlotMachine /*0x1C*/ s16 reelPixelOffsets[NUM_REELS]; /*0x22*/ u16 reelPixelOffsetsWhileStopping[NUM_REELS]; /*0x28*/ s16 reelPositions[NUM_REELS]; - /*0x2E*/ s16 reelExtraTurns[3]; + /*0x2E*/ s16 reelExtraTurns[NUM_REELS]; /*0x34*/ s16 winnerRows[NUM_REELS]; /*0x3A*/ u8 slotReelTasks[NUM_REELS]; /*0x3D*/ u8 digDisplayTaskId; @@ -284,56 +292,54 @@ struct DigitalDisplaySprite }; static void CB2_SlotMachineSetup(void); -static void CB2_SlotMachineLoop(void); -static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback cb); -static void SlotMachineDummyTask(u8 taskId); -static void SlotMachineSetup_0_0(void); -static void SlotMachineSetup_6_2(void); -static void SlotMachineSetup_1_0(void); -static void SlotMachineSetup_2_0(void); -static void SlotMachineSetup_2_1(void); -static void SlotMachineSetup_0_1(void); -static void SlotMachineSetup_3_0(void); -static void SlotMachineSetup_4_0(void); -static void SlotMachineSetup_5_0(void); -static void SlotMachineSetup_6_0(void); -static void SlotMachineSetup_6_1(void); +static void CB2_SlotMachine(void); +static void PlaySlotMachine_Internal(u8, MainCallback); +static void SlotMachineDummyTask(u8); +static void SlotMachineSetup_InitBgsWindows(void); +static void SlotMachineSetup_InitVRAM(void); +static void SlotMachineSetup_InitOAM(void); +static void SlotMachineSetup_InitGpuRegs(void); +static void SlotMachineSetup_InitSlotMachineStruct(void); +static void SlotMachineSetup_InitPalsSpritesTasks(void); +static void SlotMachineSetup_InitTilemaps(void); +static void SlotMachineSetup_LoadGfxAndTilemaps(void); +static void SlotMachineSetup_InitVBlank(void); static void AllocDigitalDisplayGfx(void); static void SetDigitalDisplayImagePtrs(void); -static void SlotMachineSetup_10_0(void); -static void SlotMachineSetupGameplayTasks(void); -static void GameplayTasks_Slots(void); +static void CreateSlotMachineSprites(void); +static void CreateGameplayTasks(void); +static void CreateSlotMachineTask(void); static void DestroyDigitalDisplayScene(void); -static void RunSlotActions(u8 taskId); -static bool8 SlotAction_UnfadeScreen(struct Task *task); -static bool8 SlotAction_WaitForUnfade(struct Task *task); -static bool8 SlotAction_SetSlotMachineVars(struct Task *task); -static bool8 SlotAction3(struct Task *task); -static bool8 SlotAction4(struct Task *task); -static bool8 SlotAction_HandleBetInput(struct Task *task); -static bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task); -static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task); -static bool8 SlotAction_GivingInformation(struct Task *task); -static bool8 SlotAction9(struct Task *task); -static bool8 SlotAction10(struct Task *task); -static bool8 SlotAction_SetLuckySpins(struct Task *task); -static bool8 SlotAction_AwaitReelStop(struct Task *task); -static bool8 SlotAction_WaitForAllReelsToStop(struct Task *task); -static bool8 SlotAction_CheckMatches(struct Task *task); -static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task); -static bool8 SlotAction_EndOfRoll(struct Task *task); -static bool8 SlotAction_MatchedPower(struct Task *task); -static bool8 SlotAction18(struct Task *task); -static bool8 SlotAction_Loop(struct Task *task); -static bool8 SlotAction_NoMatches(struct Task *task); -static bool8 SlotAction_PrintQuitTheGame(struct Task *task); -static bool8 SlotAction_HandleQuitGameInput(struct Task *task); -static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task); -static bool8 SlotAction_WaitMessage_9999Coins(struct Task *task); -static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task); -static bool8 SlotAction_WaitMessage_NoMoreCoins(struct Task *task); -static bool8 SlotAction_EndGame(struct Task *task); -static bool8 SlotAction_FreeDataStructures(struct Task *task); +static void Task_SlotMachine(u8); +static bool8 SlotAction_UnfadeScreen(struct Task *); +static bool8 SlotAction_WaitForUnfade(struct Task *); +static bool8 SlotAction_ReadyNewSpin(struct Task *); +static bool8 SlotAction_ReadyNewReelTimeSpin(struct Task *); +static bool8 SlotAction_AskInsertBet(struct Task *); +static bool8 SlotAction_HandleBetInput(struct Task *); +static bool8 SlotAction_PrintMsg_Need3Coins(struct Task *); +static bool8 SlotAction_WaitMsg_Need3Coins(struct Task *); +static bool8 SlotAction_WaitForInfoBox(struct Task *); +static bool8 SlotAction_StartSpin(struct Task *); +static bool8 SlotAction_StartReelTimeSpin(struct Task *); +static bool8 SlotAction_SetLuckySpins(struct Task *); +static bool8 SlotAction_AwaitReelStop(struct Task *); +static bool8 SlotAction_WaitForAllReelsToStop(struct Task *); +static bool8 SlotAction_CheckMatches(struct Task *); +static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *); +static bool8 SlotAction_EndPayout(struct Task *); +static bool8 SlotAction_MatchedPower(struct Task *); +static bool8 SlotAction_WaitReelTimeAnim(struct Task *); +static bool8 SlotAction_ResetBetTiles(struct Task *); +static bool8 SlotAction_NoMatches(struct Task *); +static bool8 SlotAction_AskQuit(struct Task *); +static bool8 SlotAction_HandleQuitInput(struct Task *); +static bool8 SlotAction_PrintMsg_9999Coins(struct Task *); +static bool8 SlotAction_WaitMsg_9999Coins(struct Task *); +static bool8 SlotAction_PrintMsg_NoMoreCoins(struct Task *); +static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *); +static bool8 SlotAction_EndGame(struct Task *); +static bool8 SlotAction_FreeDataStructures(struct Task *); static void DrawLuckyFlags(void); static void SetLuckySpins(void); static bool8 IsThisRoundLucky(void); @@ -344,33 +350,33 @@ static void CheckMatch(void); static void CheckMatch_CenterRow(void); static void CheckMatch_TopAndBottom(void); static void CheckMatch_Diagonals(void); -static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3); +static u8 GetMatchFromSymbols(u8, u8, u8); static void AwardPayout(void); -static void RunAwardPayoutActions(u8 taskId); +static void RunAwardPayoutActions(u8); static bool8 IsFinalTask_RunAwardPayoutActions(void); -static bool8 AwardPayoutAction0(struct Task *task); -static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task); -static bool8 AwardPayoutAction_FreeTask(struct Task *task); -static u8 GetTagAtRest(u8 x, s16 y); -static void GameplayTask_StopSlotReel(void); -static void ReelTasks_SetUnkTaskData(u8 a0); -static void sub_8102E1C(u8 a0); -static bool8 IsSlotReelMoving(u8 a0); -static void RunSlotReelActions(u8 taskId); -static bool8 SlotReelAction_StayStill(struct Task *task); -static bool8 SlotReelAction_Spin(struct Task *task); -static bool8 SlotReelAction_DecideWhereToStop(struct Task *task); -static bool8 SlotReelAction_MoveToStop(struct Task *task); -static bool8 SlotReelAction_OscillatingStop(struct Task *task); +static bool8 AwardPayoutAction0(struct Task *); +static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *); +static bool8 AwardPayoutAction_FreeTask(struct Task *); +static u8 GetTagAtRest(u8, s16); +static void CreateSlotReelTasks(void); +static void SpinSlotReel(u8); +static void StopSlotReel(u8); +static bool8 IsSlotReelMoving(u8); +static void Task_RunSlotReelActions(u8); +static bool8 SlotReelAction_StayStill(struct Task *); +static bool8 SlotReelAction_Spin(struct Task *); +static bool8 SlotReelAction_DecideWhereToStop(struct Task *); +static bool8 SlotReelAction_MoveToStop(struct Task *); +static bool8 SlotReelAction_OscillatingStop(struct Task *); static bool8 DecideReelTurns_BiasTag_Reel1(void); -static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8 a0, u8 a1); -static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 a0, u8 a1); +static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8, u8); +static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8, u8); static bool8 DecideReelTurns_BiasTag_Reel2(void); static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void); static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void); static bool8 DecideReelTurns_BiasTag_Reel3(void); -static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 a0); -static bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8 a0); +static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8); +static bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8); static void DecideReelTurns_NoBiasTag_Reel1(void); static void DecideReelTurns_NoBiasTag_Reel2(void); static void DecideReelTurns_NoBiasTag_Reel2_Bet1(void); @@ -380,12 +386,12 @@ static void DecideReelTurns_NoBiasTag_Reel3(void); static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void); static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void); static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void); -static void sub_8103C14(u8); -static void sub_8103C48(u8); +static void PressStopReelButton(u8); +static void Task_PressStopReelButton(u8); static void LightenBetTiles(u8); -static void sub_8103C78(struct Task *, u8); -static void sub_8103CAC(struct Task *, u8); -static void sub_8103CC8(struct Task *, u8); +static void StopReelButton_Press(struct Task *, u8); +static void StopReelButton_Wait(struct Task *, u8); +static void StopReelButton_Unpress(struct Task *, u8); static void DarkenBetTiles(u8); static void CreateInvisibleFlashMatchLineSprites(void); static void FlashMatchLine(u8); @@ -397,58 +403,58 @@ static void FlashSlotMachineLights(void); static bool8 TryStopSlotMachineLights(void); static void Task_FlashSlotMachineLights(u8); static void CreatePikaPowerBoltTask(void); -static void DisplayPikaPower(u8); -static bool8 sub_81040C8(void); +static void AddPikaPowerBolt(u8); +static bool8 IsPikaPowerBoltAnimating(void); static void Task_CreatePikaPowerBolt(u8); -static void nullsub_68(struct Task *); -static void sub_810411C(struct Task *); -static void sub_8104144(struct Task *); -static void sub_81041AC(struct Task *); -static void ClearTaskDataFields_2orHigher(struct Task *); +static void PikaPowerBolt_Idle(struct Task *); +static void PikaPowerBolt_AddBolt(struct Task *); +static void PikaPowerBolt_WaitAnim(struct Task *); +static void PikaPowerBolt_ClearAll(struct Task *); +static void ResetPikaPowerBoltTask(struct Task *); static void LoadPikaPowerMeter(u8 ); -static void BeginReeltime(void); -static bool8 IsFinalTask_RunReelTimeActions(void); -static void RunReeltimeActions(u8 taskId); -static void ReeltimeAction0(struct Task *task); -static void ReeltimeAction1(struct Task *task); -static void ReeltimeAction2(struct Task *task); -static void ReeltimeAction3(struct Task *task); -static void ReeltimeAction4(struct Task *task); -static void ReeltimeAction5(struct Task *task); -static void ReeltimeAction6(struct Task *task); -static void ReelTimeAction_LandOnOutcome(struct Task *task); -static void ReeltimeAction8(struct Task *task); -static void ReeltimeAction9(struct Task *task); -static void ReeltimeAction10(struct Task *task); -static void ReeltimeAction11(struct Task *task); -static void ReeltimeAction12(struct Task *task); -static void ReeltimeAction13(struct Task *); -static void ReeltimeAction14(struct Task *); -static void ReeltimeAction15(struct Task *); -static void ReeltimeAction16(struct Task *); -static void ReeltimeAction17(struct Task *); +static void BeginReelTime(void); +static bool8 IsReelTimeTaskDone(void); +static void Task_ReelTime(u8 ); +static void ReelTime_Init(struct Task *); +static void ReelTime_WindowEnter(struct Task *); +static void ReelTime_WaitStartPikachu(struct Task *); +static void ReelTime_PikachuSpeedUp1(struct Task *); +static void ReelTime_PikachuSpeedUp2(struct Task *); +static void ReelTime_WaitReel(struct Task *); +static void ReelTime_CheckExplode(struct Task *); +static void ReelTime_LandOnOutcome(struct Task *); +static void ReelTime_PikachuReact(struct Task *); +static void ReelTime_WaitClearPikaPower(struct Task *); +static void ReelTime_CloseWindow(struct Task *); +static void ReelTime_DestroySprites(struct Task *); +static void ReelTime_SetReelIncrement(struct Task *); +static void ReelTime_EndSuccess(struct Task *); +static void ReelTime_ExplodeMachine(struct Task *); +static void ReelTime_WaitExplode(struct Task *); +static void ReelTime_WaitSmoke(struct Task *); +static void ReelTime_EndFailure(struct Task *); static void LoadReelTimeWindowTilemap(s16, s16); static void ClearReelTimeWindowTilemap(s16); static void OpenInfoBox(u8); static bool8 IsInfoBoxClosed(void); -static void RunInfoBoxActions(u8 taskId); -static void InfoBox_FadeIn(struct Task *task); -static void InfoBox_WaitForFade(struct Task *task); -static void InfoBox_DrawWindow(struct Task *task); -static void InfoBox_AwaitPlayerInput(struct Task *task); -static void InfoBox_AddText(struct Task *task); -static void InfoBox_LoadPikaPowerMeter(struct Task *task); -static void InfoBox_LoadSlotMachineTilemap(struct Task *task); -static void InfoBox_CreateDigitalDisplay(struct Task *task); -static void InfoBox_FreeTask(struct Task *task); +static void RunInfoBoxActions(u8 ); +static void InfoBox_FadeIn(struct Task *); +static void InfoBox_WaitForFade(struct Task *); +static void InfoBox_DrawWindow(struct Task *); +static void InfoBox_AwaitPlayerInput(struct Task *); +static void InfoBox_AddText(struct Task *); +static void InfoBox_LoadPikaPowerMeter(struct Task *); +static void InfoBox_LoadSlotMachineTilemap(struct Task *); +static void InfoBox_CreateDigitalDisplay(struct Task *); +static void InfoBox_FreeTask(struct Task *); static void CreateDigitalDisplayTask(void); -static void CreateDigitalDisplayScene(u8 arg0); +static void CreateDigitalDisplayScene(u8 ); static bool8 IsDigitalDisplayAnimFinished(void); -static void DigitalDisplay_Idle(struct Task *task); -static void Task_DigitalDisplay(u8 taskId); +static void DigitalDisplay_Idle(struct Task *); +static void Task_DigitalDisplay(u8); static void CreateReelSymbolSprites(void); static void CreateCreditPayoutNumberSprites(void); -static void CreateCoinNumberSprite(s16 x, s16 y, u8 a2, s16 a3); +static void CreateCoinNumberSprite(s16, s16, u8, s16); static void CreateReelBackgroundSprite(void); static void CreateReelTimePikachuSprite(void); static void DestroyReelTimePikachuSprite(void); @@ -461,10 +467,10 @@ static void DestroyReelTimeMachineSprites(void); static void DestroyReelTimeShadowSprites(void); static void DestroyBrokenReelTimeMachineSprite(void); static void CreateReelTimeBoltSprites(void); -static void SetReelTimeBoltDelay(s16 a0); +static void SetReelTimeBoltDelay(s16); static void DestroyReelTimeBoltSprites(void); static void CreateReelTimePikachuAuraSprites(void); -static void SetReelTimePikachuAuraFlashDelay(s16 a0); +static void SetReelTimePikachuAuraFlashDelay(s16); static void DestroyReelTimePikachuAuraSprites(void); static void CreateReelTimeExplosionSprite(void); static void DestroyReelTimeExplosionSprite(void); @@ -473,48 +479,47 @@ static void DestroyReelTimeDuckSprites(void); static void CreateReelTimeSmokeSprite(void); static bool8 IsReelTimeSmokeAnimFinished(void); static void DestroyReelTimeSmokeSprite(void); -static u8 CreatePikaPowerBoltSprite(s16 x, s16 y); -static void DestroyPikaPowerBoltSprite(u8 spriteId); -static u8 CreateDigitalDisplaySprite(u8 templateIdx, void (*callback)(struct Sprite*), s16 x, s16 y, s16 a4); -static void sub_81063C0(void); +static u8 CreatePikaPowerBoltSprite(s16, s16); +static void DestroyPikaPowerBoltSprite(u8); +static u8 CreateDigitalDisplaySprite(u8, void (*callback)(struct Sprite*), s16, s16, s16); +static void LoadSlotMachineGfx(void); static void LoadReelBackground(void); static void LoadMenuGfx(void); -static void sub_81064B8(void); +static void LoadMenuAndReelOverlayTilemaps(void); static void SetReelButtonTilemap(s16, u16, u16, u16, u16); static void LoadInfoBoxTilemap(void); -static void sub_812F958(void); static void LoadSlotMachineMenuTilemap(void); static void LoadSlotMachineReelOverlay(void); -static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2); -static void SpriteCB_DigitalDisplay_Static(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_Stop(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_AButtonStop(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_PokeballRocking(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_Smoke(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_SmokeNE(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_SmokeSW(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_SmokeSE(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_RegBonus(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_BigBonus(struct Sprite *sprite); -static void SpriteCB_DigitalDisplay_AButtonStart(struct Sprite *sprite); +static u8 CreateStdDigitalDisplaySprite(u8, u8, s16); +static void SpriteCB_DigitalDisplay_Static(struct Sprite *); +static void SpriteCB_DigitalDisplay_Stop(struct Sprite *); +static void SpriteCB_DigitalDisplay_AButtonStop(struct Sprite *); +static void SpriteCB_DigitalDisplay_PokeballRocking(struct Sprite *); +static void SpriteCB_DigitalDisplay_Smoke(struct Sprite *); +static void SpriteCB_DigitalDisplay_SmokeNE(struct Sprite *); +static void SpriteCB_DigitalDisplay_SmokeSW(struct Sprite *); +static void SpriteCB_DigitalDisplay_SmokeSE(struct Sprite *); +static void SpriteCB_DigitalDisplay_Reel(struct Sprite *); +static void SpriteCB_DigitalDisplay_Time(struct Sprite *); +static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *); +static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *); +static void SpriteCB_DigitalDisplay_RegBonus(struct Sprite *); +static void SpriteCB_DigitalDisplay_BigBonus(struct Sprite *); +static void SpriteCB_DigitalDisplay_AButtonStart(struct Sprite *); static void EndDigitalDisplayScene_InsertBet(void); static void EndDigitalDisplayScene_StopReel(void); static void EndDigitalDisplayScene_Win(void); static void EndDigitalDisplayScene_Dummy(void); -static void SpriteCB_ReelSymbol(struct Sprite *sprite); -static void SpriteCB_CoinNumber(struct Sprite *sprite); -static void SpriteCB_ReelTimePikachu(struct Sprite *sprite); -static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite); -static void SpriteCB_ReelTimeBolt(struct Sprite *sprite); -static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite); -static void SpriteCB_ReelTimeExplosion(struct Sprite *sprite); -static void SpriteCB_ReelTimeDuck(struct Sprite *sprite); -static void SpriteCB_ReelTimeSmoke(struct Sprite *sprite); -static void SpriteCB_PikaPowerBolt(struct Sprite *sprite); +static void SpriteCB_ReelSymbol(struct Sprite *); +static void SpriteCB_CoinNumber(struct Sprite *); +static void SpriteCB_ReelTimePikachu(struct Sprite *); +static void SpriteCB_ReelTimeNumbers(struct Sprite *); +static void SpriteCB_ReelTimeBolt(struct Sprite *); +static void SpriteCB_ReelTimePikachuAura(struct Sprite *); +static void SpriteCB_ReelTimeExplosion(struct Sprite *); +static void SpriteCB_ReelTimeDuck(struct Sprite *); +static void SpriteCB_ReelTimeSmoke(struct Sprite *); +static void SpriteCB_PikaPowerBolt(struct Sprite *); // Ewram variables static EWRAM_DATA u16 *sMenuGfx = NULL; @@ -565,7 +570,7 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke; static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck; static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion; static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura; -static const u16 sProbabilityTable_SkipToReeltimeAction14[]; +static const u16 sReelTimeExplodeProbability[]; static const u16 *const sPokeballShiningPalTable[]; static const u16 sReelIncrementTable[][2]; static const u16 sReelTimeBonusIncrementTable[]; @@ -584,11 +589,11 @@ static const u8 sReelTimeProbabilities_LuckyGame[][17]; static const u8 sSymToMatch[]; static const u8 sReelTimeTags[]; static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL]; -static const u16 *const sLitMatchLinePalTable[]; -static const u16 *const sDarkMatchLinePalTable[]; -static const u8 sMatchLinePalOffsets[]; -static const u8 sBetToMatchLineIds[][2]; -static const u8 sMatchLinesPerBet[]; +static const u16 *const sLitMatchLinePalTable[NUM_MATCH_LINES]; +static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES]; +static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES]; +static const u8 sBetToMatchLineIds[MAX_BET][2]; +static const u8 sMatchLinesPerBet[MAX_BET]; static const u16 *const sFlashingLightsPalTable[]; static const u16 *const sSlotMachineMenu_Pal; static const u16 sReelTimeWindow_Tilemap[]; @@ -681,35 +686,35 @@ static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHIT static bool8 (*const sSlotActions[])(struct Task *task) = { - [SLOT_ACTION_UNFADE] = SlotAction_UnfadeScreen, - [SLOT_ACTION_1] = SlotAction_WaitForUnfade, - [SLOT_ACTION_2] = SlotAction_SetSlotMachineVars, - [SLOT_ACTION_3] = SlotAction3, - [SLOT_ACTION_4] = SlotAction4, - [SLOT_ACTION_BET_INPUT] = SlotAction_HandleBetInput, - [SLOT_ACTION_6] = SlotAction_PrintYouDontHaveThreeCoins, - [SLOT_ACTION_7] = SlotAction_ExitYouDontHaveThreeCoinsMessage, - [SLOT_ACTION_8] = SlotAction_GivingInformation, - [SLOT_ACTION_9] = SlotAction9, - [SLOT_ACTION_10] = SlotAction10, - [SLOT_ACTION_11] = SlotAction_SetLuckySpins, - [SLOT_ACTION_12] = SlotAction_AwaitReelStop, - [SLOT_ACTION_13] = SlotAction_WaitForAllReelsToStop, - [SLOT_ACTION_14] = SlotAction_CheckMatches, - [SLOT_ACTION_15] = SlotAction_WaitForPayoutToBeAwarded, - [SLOT_ACTION_16] = SlotAction_EndOfRoll, - [SLOT_ACTION_17] = SlotAction_MatchedPower, - [SLOT_ACTION_18] = SlotAction18, - [SLOT_ACTION_19] = SlotAction_Loop, - [SLOT_ACTION_20] = SlotAction_NoMatches, - [SLOT_ACTION_ASK_QUIT] = SlotAction_PrintQuitTheGame, - [SLOT_ACTION_HANDLE_QUIT_INPUT] = SlotAction_HandleQuitGameInput, - [SLOT_ACTION_MSG_MAX_COINS] = SlotAction_PrintMessage_9999Coins, - [SLOT_ACTION_WAIT_MSG_MAX_COINS] = SlotAction_WaitMessage_9999Coins, - [SLOT_ACTION_MSG_NO_MORE_COINS] = SlotAction_PrintMessage_NoMoreCoins, - [SLOT_ACTION_WAIT_MSG_NO_MORE_COINS] = SlotAction_WaitMessage_NoMoreCoins, - [SLOT_ACTION_END] = SlotAction_EndGame, - [SLOT_ACTION_FREE] = SlotAction_FreeDataStructures, + [SLOT_ACTION_UNFADE] = SlotAction_UnfadeScreen, + [SLOT_ACTION_WAIT_FADE] = SlotAction_WaitForUnfade, + [SLOT_ACTION_READY_NEW_SPIN] = SlotAction_ReadyNewSpin, + [SLOT_ACTION_READY_NEW_RT_SPIN] = SlotAction_ReadyNewReelTimeSpin, + [SLOT_ACTION_ASK_INSERT_BET] = SlotAction_AskInsertBet, + [SLOT_ACTION_BET_INPUT] = SlotAction_HandleBetInput, + [SLOT_ACTION_MSG_NEED_3_COINS] = SlotAction_PrintMsg_Need3Coins, + [SLOT_ACTION_WAIT_MSG_NEED_3_COINS] = SlotAction_WaitMsg_Need3Coins, + [SLOT_ACTION_WAIT_INFO_BOX] = SlotAction_WaitForInfoBox, + [SLOT_ACTION_START_SPIN] = SlotAction_StartSpin, + [SLOT_ACTION_START_RT_SPIN] = SlotAction_StartReelTimeSpin, + [SLOT_ACTION_SET_LUCKY_SPINS] = SlotAction_SetLuckySpins, + [SLOT_ACTION_AWAIT_REEL_STOP] = SlotAction_AwaitReelStop, + [SLOT_ACTION_AWAIT_ALL_REELS_STOP] = SlotAction_WaitForAllReelsToStop, + [SLOT_ACTION_CHECK_MATCHES] = SlotAction_CheckMatches, + [SLOT_ACTION_WAIT_PAYOUT] = SlotAction_WaitForPayoutToBeAwarded, + [SLOT_ACTION_END_PAYOUT] = SlotAction_EndPayout, + [SLOT_ACTION_MATCHED_POWER] = SlotAction_MatchedPower, + [SLOT_ACTION_WAIT_RT_ANIM] = SlotAction_WaitReelTimeAnim, + [SLOT_ACTION_RESET_BET_TILES] = SlotAction_ResetBetTiles, + [SLOT_ACTION_NO_MATCHES] = SlotAction_NoMatches, + [SLOT_ACTION_ASK_QUIT] = SlotAction_AskQuit, + [SLOT_ACTION_HANDLE_QUIT_INPUT] = SlotAction_HandleQuitInput, + [SLOT_ACTION_MSG_MAX_COINS] = SlotAction_PrintMsg_9999Coins, + [SLOT_ACTION_WAIT_MSG_MAX_COINS] = SlotAction_WaitMsg_9999Coins, + [SLOT_ACTION_MSG_NO_MORE_COINS] = SlotAction_PrintMsg_NoMoreCoins, + [SLOT_ACTION_WAIT_MSG_NO_MORE_COINS] = SlotAction_WaitMsg_NoMoreCoins, + [SLOT_ACTION_END] = SlotAction_EndGame, + [SLOT_ACTION_FREE] = SlotAction_FreeDataStructures, }; static bool8 (*const sAwardPayoutActions[])(struct Task *task) = @@ -721,11 +726,11 @@ static bool8 (*const sAwardPayoutActions[])(struct Task *task) = static bool8 (*const sSlotReelActions[])(struct Task *task) = { - SlotReelAction_StayStill, - SlotReelAction_Spin, - SlotReelAction_DecideWhereToStop, - SlotReelAction_MoveToStop, - SlotReelAction_OscillatingStop + [REEL_ACTION_STILL] = SlotReelAction_StayStill, + [REEL_ACTION_SPIN] = SlotReelAction_Spin, + [REEL_ACTION_STOP] = SlotReelAction_DecideWhereToStop, + [REEL_ACTION_STOP_MOVE] = SlotReelAction_MoveToStop, + [REEL_ACTION_STOP_SHAKE] = SlotReelAction_OscillatingStop }; // returns True if a match with the biasTag is possible in that reel @@ -783,19 +788,19 @@ static void (*const sDecideReelTurns_NoBiasTag_Reel3_Bets[MAX_BET])(void) = static void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) = { - sub_8103C78, - sub_8103CAC, - sub_8103CC8 + StopReelButton_Press, + StopReelButton_Wait, + StopReelButton_Unpress }; static const s16 sReelButtonOffsets[NUM_REELS] = {5, 10, 15}; static void (*const sPikaPowerBoltFuncs[])(struct Task *task) = { - nullsub_68, - sub_810411C, - sub_8104144, - sub_81041AC + PikaPowerBolt_Idle, + PikaPowerBolt_AddBolt, + PikaPowerBolt_WaitAnim, + PikaPowerBolt_ClearAll }; static const u16 sPikaPowerTileTable[][2] = @@ -805,27 +810,27 @@ static const u16 sPikaPowerTileTable[][2] = {0xaf, 0x7f}, }; -static void (*const sReeltimeActions[])(struct Task *task) = +static void (*const sReelTimeActions[])(struct Task *task) = { - ReeltimeAction0, - ReeltimeAction1, - ReeltimeAction2, - ReeltimeAction3, - ReeltimeAction4, - ReeltimeAction5, - ReeltimeAction6, - ReelTimeAction_LandOnOutcome, - ReeltimeAction8, - ReeltimeAction9, - ReeltimeAction10, - ReeltimeAction11, - ReeltimeAction12, - ReeltimeAction13, - ReeltimeAction14, - ReeltimeAction15, - ReeltimeAction16, - ReeltimeAction10, - ReeltimeAction17 + ReelTime_Init, + ReelTime_WindowEnter, + ReelTime_WaitStartPikachu, + ReelTime_PikachuSpeedUp1, + ReelTime_PikachuSpeedUp2, + ReelTime_WaitReel, + ReelTime_CheckExplode, + ReelTime_LandOnOutcome, + ReelTime_PikachuReact, + ReelTime_WaitClearPikaPower, + ReelTime_CloseWindow, + ReelTime_DestroySprites, + ReelTime_SetReelIncrement, + ReelTime_EndSuccess, + ReelTime_ExplodeMachine, + ReelTime_WaitExplode, + ReelTime_WaitSmoke, + ReelTime_CloseWindow, + ReelTime_EndFailure }; static const u8 sReelTimePikachuAnimIds[] = {1, 1, 2, 2}; @@ -901,33 +906,33 @@ static void CB2_SlotMachineSetup(void) switch (gMain.state) { case 0: - SlotMachineSetup_0_0(); - SlotMachineSetup_0_1(); + SlotMachineSetup_InitBgsWindows(); + SlotMachineSetup_InitSlotMachineStruct(); gMain.state++; break; case 1: - SlotMachineSetup_1_0(); + SlotMachineSetup_InitVRAM(); gMain.state++; break; case 2: - SlotMachineSetup_2_0(); - SlotMachineSetup_2_1(); + SlotMachineSetup_InitOAM(); + SlotMachineSetup_InitGpuRegs(); gMain.state++; break; case 3: - SlotMachineSetup_3_0(); + SlotMachineSetup_InitPalsSpritesTasks(); gMain.state++; break; case 4: - SlotMachineSetup_4_0(); + SlotMachineSetup_InitTilemaps(); gMain.state++; break; case 5: - SlotMachineSetup_5_0(); + SlotMachineSetup_LoadGfxAndTilemaps(); gMain.state++; break; case 6: - SlotMachineSetup_6_0(); + SlotMachineSetup_InitVBlank(); gMain.state++; break; case 7: @@ -947,17 +952,17 @@ static void CB2_SlotMachineSetup(void) gMain.state++; break; case 10: - SlotMachineSetup_10_0(); - SlotMachineSetupGameplayTasks(); + CreateSlotMachineSprites(); + CreateGameplayTasks(); gMain.state++; break; case 11: - SetMainCallback2(CB2_SlotMachineLoop); + SetMainCallback2(CB2_SlotMachine); break; } } -static void CB2_SlotMachineLoop(void) +static void CB2_SlotMachine(void) { RunTasks(); AnimateSprites(); @@ -965,7 +970,7 @@ static void CB2_SlotMachineLoop(void) UpdatePaletteFade(); } -static void SlotMachine_VBlankCallback(void) +static void SlotMachine_VBlankCB(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -980,22 +985,22 @@ static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback exitCallb { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->data[0] = slotMachineIndex; - StoreWordInTwoHalfwords(task->data + 1, (intptr_t)exitCallback); + StoreWordInTwoHalfwords(&task->data[1], (intptr_t)exitCallback); } -static void sub_81019EC(void) +static void SlotMachineInitDummyTask(void) { struct Task *task = &gTasks[FindTaskIdByFunc(SlotMachineDummyTask)]; sSlotMachine->machineId = task->data[0]; - LoadWordFromTwoHalfwords((u16 *)(task->data + 1), (u32 *)&sSlotMachine->prevMainCb); + LoadWordFromTwoHalfwords((u16 *)&task->data[1], (u32 *)&sSlotMachine->prevMainCb); } static void SlotMachineDummyTask(u8 taskId) { } -static void SlotMachineSetup_0_0(void) +static void SlotMachineSetup_InitBgsWindows(void) { SetVBlankCallback(NULL); SetHBlankCallback(NULL); @@ -1006,24 +1011,24 @@ static void SlotMachineSetup_0_0(void) DeactivateAllTextPrinters(); } -static void SlotMachineSetup_6_0(void) +static void SlotMachineSetup_InitVBlank(void) { - SetVBlankCallback(SlotMachine_VBlankCallback); + SetVBlankCallback(SlotMachine_VBlankCB); EnableInterrupts(INTR_FLAG_VBLANK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); } -static void SlotMachineSetup_1_0(void) +static void SlotMachineSetup_InitVRAM(void) { DmaClearLarge16(3, (u16 *)(BG_VRAM), BG_VRAM_SIZE, 0x1000); } -static void SlotMachineSetup_2_0(void) +static void SlotMachineSetup_InitOAM(void) { DmaClear16(3, (u16 *)OAM, OAM_SIZE); } -static void SlotMachineSetup_2_1(void) +static void SlotMachineSetup_InitGpuRegs(void) { SetGpuReg(REG_OFFSET_BG0CNT, 0); SetGpuReg(REG_OFFSET_BG1CNT, 0); @@ -1044,11 +1049,11 @@ static void SlotMachineSetup_2_1(void) } // set up initial state of slot machine -static void SlotMachineSetup_0_1(void) +static void SlotMachineSetup_InitSlotMachineStruct(void) { u8 i; - sub_81019EC(); // assigns sSlotMachine->machineId, etc. + SlotMachineInitDummyTask(); // assigns sSlotMachine->machineId, etc. sSlotMachine->state = 0; sSlotMachine->pikaPower = 0; sSlotMachine->luckyGame = Random() & 1; @@ -1078,7 +1083,7 @@ static void SlotMachineSetup_0_1(void) AlertTVThatPlayerPlayedSlotMachine(GetCoins()); } -static void SlotMachineSetup_3_0(void) +static void SlotMachineSetup_InitPalsSpritesTasks(void) { ResetPaletteFade(); ResetSpriteData(); @@ -1087,7 +1092,7 @@ static void SlotMachineSetup_3_0(void) ResetTasks(); } -static void SlotMachineSetup_4_0(void) +static void SlotMachineSetup_InitTilemaps(void) { sSelectedPikaPowerTile = Alloc(8); sReelOverlay_Tilemap = AllocZeroed(14); @@ -1103,17 +1108,17 @@ static void SlotMachineSetup_4_0(void) sReelOverlay_Tilemap[6] = 0x20BF; } -static void SlotMachineSetup_5_0(void) +static void SlotMachineSetup_LoadGfxAndTilemaps(void) { LoadMenuGfx(); - sub_81064B8(); - sub_81063C0(); + LoadMenuAndReelOverlayTilemaps(); + LoadSlotMachineGfx(); LoadMessageBoxGfx(0, 0x200, 0xF0); LoadUserWindowBorderGfx(0, 0x214, 0xE0); PutWindowTilemap(0); } -static void SlotMachineSetup_10_0(void) +static void CreateSlotMachineSprites(void) { CreateReelSymbolSprites(); CreateCreditPayoutNumberSprites(); @@ -1121,36 +1126,36 @@ static void SlotMachineSetup_10_0(void) CreateReelBackgroundSprite(); } -// create gameplay tasks -static void SlotMachineSetupGameplayTasks(void) +static void CreateGameplayTasks(void) { CreatePikaPowerBoltTask(); - GameplayTask_StopSlotReel(); + CreateSlotReelTasks(); CreateDigitalDisplayTask(); - GameplayTasks_Slots(); + CreateSlotMachineTask(); } -static void GameplayTasks_Slots(void) +static void CreateSlotMachineTask(void) { - RunSlotActions(CreateTask(RunSlotActions, 0)); + Task_SlotMachine(CreateTask(Task_SlotMachine, 0)); } // task->data[0] is a timer -static void RunSlotActions(u8 taskId) +static void Task_SlotMachine(u8 taskId) { while (sSlotActions[sSlotMachine->state](&gTasks[taskId])) ; } +// SLOT_ACTION_UNFADE static bool8 SlotAction_UnfadeScreen(struct Task *task) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); LoadPikaPowerMeter(sSlotMachine->pikaPower); - sSlotMachine->state++; + sSlotMachine->state++; // SLOT_ACTION_WAIT_FADE return FALSE; } -// SLOT_ACTION_1 +// SLOT_ACTION_WAIT_FADE static bool8 SlotAction_WaitForUnfade(struct Task *task) { if (!gPaletteFade.active) @@ -1158,36 +1163,36 @@ static bool8 SlotAction_WaitForUnfade(struct Task *task) return FALSE; } -// SLOT_ACTION_2 -static bool8 SlotAction_SetSlotMachineVars(struct Task *task) +// SLOT_ACTION_READY_NEW_SPIN +static bool8 SlotAction_ReadyNewSpin(struct Task *task) { sSlotMachine->payout = 0; sSlotMachine->bet = 0; sSlotMachine->currReel = 0; sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); - sSlotMachine->state = SLOT_ACTION_4; + sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET; if (sSlotMachine->coins <= 0) { sSlotMachine->state = SLOT_ACTION_MSG_NO_MORE_COINS; } else if (sSlotMachine->reelTimeSpinsLeft) { - sSlotMachine->state = SLOT_ACTION_3; + sSlotMachine->state = SLOT_ACTION_READY_NEW_RT_SPIN; CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); } return TRUE; } -// SLOT_ACTION_3 -static bool8 SlotAction3(struct Task *task) +// SLOT_ACTION_READY_NEW_RT_SPIN +static bool8 SlotAction_ReadyNewReelTimeSpin(struct Task *task) { if (IsDigitalDisplayAnimFinished()) - sSlotMachine->state = SLOT_ACTION_4; + sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET; return FALSE; } -// SLOT_ACTION_4 -static bool8 SlotAction4(struct Task *task) +// SLOT_ACTION_ASK_INSERT_BET +static bool8 SlotAction_AskInsertBet(struct Task *task) { CreateDigitalDisplayScene(DIG_DISPLAY_INSERT_BET); sSlotMachine->state = SLOT_ACTION_BET_INPUT; @@ -1204,7 +1209,7 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) if (JOY_NEW(SELECT_BUTTON)) { OpenInfoBox(DIG_DISPLAY_INSERT_BET); - sSlotMachine->state = SLOT_ACTION_8; + sSlotMachine->state = SLOT_ACTION_WAIT_INFO_BOX; } else if (JOY_NEW(R_BUTTON)) // bet the max amount { @@ -1214,12 +1219,12 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) LightenBetTiles(i); sSlotMachine->coins -= (MAX_BET - sSlotMachine->bet); sSlotMachine->bet = MAX_BET; - sSlotMachine->state = SLOT_ACTION_9; + sSlotMachine->state = SLOT_ACTION_START_SPIN; PlaySE(SE_REGI); } else // you didn't have enough coins to bet the max { - sSlotMachine->state = SLOT_ACTION_6; + sSlotMachine->state = SLOT_ACTION_MSG_NEED_3_COINS; } } else @@ -1235,7 +1240,7 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) // Maxed bet or finished betting if (sSlotMachine->bet >= MAX_BET || (sSlotMachine->bet != 0 && JOY_NEW(A_BUTTON))) - sSlotMachine->state = SLOT_ACTION_9; + sSlotMachine->state = SLOT_ACTION_START_SPIN; // Quit prompt if (JOY_NEW(B_BUTTON)) @@ -1244,16 +1249,18 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) return FALSE; } -static bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task) +// SLOT_ACTION_NEED_3_COINS +static bool8 SlotAction_PrintMsg_Need3Coins(struct Task *task) { DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, 1, gText_YouDontHaveThreeCoins, 0, 1, 0, 0); CopyWindowToVram(0, 3); - sSlotMachine->state = SLOT_ACTION_7; + sSlotMachine->state = SLOT_ACTION_WAIT_MSG_NEED_3_COINS; return FALSE; } -static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task) +// SLOT_ACTION_WAIT_MSG_NEED_3_COINS +static bool8 SlotAction_WaitMsg_Need3Coins(struct Task *task) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { @@ -1263,36 +1270,36 @@ static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task) return FALSE; } -static bool8 SlotAction_GivingInformation(struct Task *task) +// SLOT_ACTION_WAIT_INFO_BOX +static bool8 SlotAction_WaitForInfoBox(struct Task *task) { if (IsInfoBoxClosed()) sSlotMachine->state = SLOT_ACTION_BET_INPUT; return FALSE; } -// probably make all the slots roll -static bool8 SlotAction9(struct Task *task) +// SLOT_ACTION_START_SPIN +static bool8 SlotAction_StartSpin(struct Task *task) { DrawLuckyFlags(); DestroyDigitalDisplayScene(); - // for each reel... - ReelTasks_SetUnkTaskData(LEFT_REEL); - ReelTasks_SetUnkTaskData(MIDDLE_REEL); - ReelTasks_SetUnkTaskData(RIGHT_REEL); + SpinSlotReel(LEFT_REEL); + SpinSlotReel(MIDDLE_REEL); + SpinSlotReel(RIGHT_REEL); IncrementDailySlotsUses(); task->data[0] = 0; if (sSlotMachine->luckyFlags & LUCKY_BIAS_REELTIME) { - BeginReeltime(); - sSlotMachine->state = SLOT_ACTION_10; + BeginReelTime(); + sSlotMachine->state = SLOT_ACTION_START_RT_SPIN; } else { CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); - sSlotMachine->state = SLOT_ACTION_11; + sSlotMachine->state = SLOT_ACTION_SET_LUCKY_SPINS; } sSlotMachine->reelIncrement = 8; if (sSlotMachine->reelTimeSpinsLeft) @@ -1300,55 +1307,59 @@ static bool8 SlotAction9(struct Task *task) return FALSE; } -static bool8 SlotAction10(struct Task *task) +// SLOT_ACTION_START_RT_SPIN +static bool8 SlotAction_StartReelTimeSpin(struct Task *task) { - if (IsFinalTask_RunReelTimeActions()) + if (IsReelTimeTaskDone()) { CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); sSlotMachine->luckyFlags &= ~LUCKY_BIAS_REELTIME; - sSlotMachine->state = SLOT_ACTION_11; + sSlotMachine->state = SLOT_ACTION_SET_LUCKY_SPINS; } return FALSE; } +// SLOT_ACTION_SET_LUCKY_SPINS static bool8 SlotAction_SetLuckySpins(struct Task *task) { if (++task->data[0] >= 30) { SetLuckySpins(); - sSlotMachine->state = SLOT_ACTION_12; + sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP; } return FALSE; } +// SLOT_ACTION_AWAIT_REEL_STOP static bool8 SlotAction_AwaitReelStop(struct Task *task) { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_JYUNI); - sub_8102E1C(sSlotMachine->currReel); - sub_8103C14(sSlotMachine->currReel); - sSlotMachine->state = SLOT_ACTION_13; + StopSlotReel(sSlotMachine->currReel); + PressStopReelButton(sSlotMachine->currReel); + sSlotMachine->state = SLOT_ACTION_AWAIT_ALL_REELS_STOP; } return FALSE; } +// SLOT_ACTION_AWAIT_ALL_REELS_STOP static bool8 SlotAction_WaitForAllReelsToStop(struct Task *task) { if (!IsSlotReelMoving(sSlotMachine->currReel)) { sSlotMachine->currReel++; - sSlotMachine->state = SLOT_ACTION_12; - if (sSlotMachine->currReel > 2) + sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP; + if (sSlotMachine->currReel >= NUM_REELS) { - sSlotMachine->state = SLOT_ACTION_14; + sSlotMachine->state = SLOT_ACTION_CHECK_MATCHES; } return TRUE; } return FALSE; } -// once all reels have stopped +// SLOT_ACTION_CHECK_MATCHES static bool8 SlotAction_CheckMatches(struct Task *task) { sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); @@ -1361,7 +1372,7 @@ static bool8 SlotAction_CheckMatches(struct Task *task) if (sSlotMachine->matchedSymbols) { - sSlotMachine->state = SLOT_ACTION_15; + sSlotMachine->state = SLOT_ACTION_WAIT_PAYOUT; AwardPayout(); FlashSlotMachineLights(); if ((sSlotMachine->netCoinLoss -= sSlotMachine->payout) < 0) @@ -1400,100 +1411,111 @@ static bool8 SlotAction_CheckMatches(struct Task *task) if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER) && sSlotMachine->pikaPower < 16) { sSlotMachine->pikaPower++; - DisplayPikaPower(sSlotMachine->pikaPower); + AddPikaPowerBolt(sSlotMachine->pikaPower); } } else { CreateDigitalDisplayScene(DIG_DISPLAY_LOSE); - sSlotMachine->state = SLOT_ACTION_20; + sSlotMachine->state = SLOT_ACTION_NO_MATCHES; if ((sSlotMachine->netCoinLoss += sSlotMachine->bet) > MAX_COINS) sSlotMachine->netCoinLoss = MAX_COINS; } return FALSE; } +// SLOT_ACTION_WAIT_PAYOUT static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task) { if (IsFinalTask_RunAwardPayoutActions()) - sSlotMachine->state = SLOT_ACTION_16; + sSlotMachine->state = SLOT_ACTION_END_PAYOUT; return FALSE; } -static bool8 SlotAction_EndOfRoll(struct Task *task) +// SLOT_ACTION_END_PAYOUT +static bool8 SlotAction_EndPayout(struct Task *task) { if (TryStopSlotMachineLights()) { - sSlotMachine->state = SLOT_ACTION_19; + sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; + if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_RED) | (1 << MATCHED_777_BLUE))) IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); + if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { sSlotMachine->currReel = 0; - sSlotMachine->state = SLOT_ACTION_9; + sSlotMachine->state = SLOT_ACTION_START_SPIN; } + if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER)) - sSlotMachine->state = SLOT_ACTION_17; + sSlotMachine->state = SLOT_ACTION_MATCHED_POWER; + if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); - sSlotMachine->state = SLOT_ACTION_18; + sSlotMachine->state = SLOT_ACTION_WAIT_RT_ANIM; } } return FALSE; } +// SLOT_ACTION_MATCHED_POWER static bool8 SlotAction_MatchedPower(struct Task *task) { - if (!sub_81040C8()) + if (!IsPikaPowerBoltAnimating()) { - sSlotMachine->state = SLOT_ACTION_19; + sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { - sSlotMachine->state = SLOT_ACTION_9; + sSlotMachine->state = SLOT_ACTION_START_SPIN; if (sSlotMachine->reelTimeSpinsLeft) { CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); - sSlotMachine->state = SLOT_ACTION_18; + sSlotMachine->state = SLOT_ACTION_WAIT_RT_ANIM; } } } return FALSE; } -static bool8 SlotAction18(struct Task *task) +// SLOT_ACTION_WAIT_RT_ANIM +static bool8 SlotAction_WaitReelTimeAnim(struct Task *task) { if (IsDigitalDisplayAnimFinished()) { - sSlotMachine->state = SLOT_ACTION_19; + sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { - sSlotMachine->state = SLOT_ACTION_9; + sSlotMachine->state = SLOT_ACTION_START_SPIN; } } return FALSE; } -static bool8 SlotAction_Loop(struct Task *task) +// SLOT_ACTION_RESET_BET_TILES +static bool8 SlotAction_ResetBetTiles(struct Task *task) { DarkenBetTiles(0); DarkenBetTiles(1); DarkenBetTiles(2); - sSlotMachine->state = SLOT_ACTION_2; + sSlotMachine->state = SLOT_ACTION_READY_NEW_SPIN; return FALSE; } +// SLOT_ACTION_NO_MATCHES static bool8 SlotAction_NoMatches(struct Task *task) { if (++task->data[1] > 64) { task->data[1] = 0; - sSlotMachine->state = SLOT_ACTION_19; + sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; } return FALSE; } -static bool8 SlotAction_PrintQuitTheGame(struct Task *task) +// SLOT_ACTION_ASK_QUIT +static bool8 SlotAction_AskQuit(struct Task *task) { DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, 1, gText_QuitTheGame, 0, 1, 0, 0); @@ -1503,7 +1525,8 @@ static bool8 SlotAction_PrintQuitTheGame(struct Task *task) return FALSE; } -static bool8 SlotAction_HandleQuitGameInput(struct Task *task) +// SLOT_ACTION_HANDLE_QUIT_INPUT +static bool8 SlotAction_HandleQuitInput(struct Task *task) { s8 input = Menu_ProcessInputNoWrapClearOnChoose(); if (input == 0) // player chooses to quit @@ -1523,7 +1546,8 @@ static bool8 SlotAction_HandleQuitGameInput(struct Task *task) return FALSE; } -static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task) +// SLOT_ACTION_MSG_MAX_COINS +static bool8 SlotAction_PrintMsg_9999Coins(struct Task *task) { DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, 1, gText_YouveGot9999Coins, 0, 1, 0, 0); @@ -1532,7 +1556,8 @@ static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task) return FALSE; } -static bool8 SlotAction_WaitMessage_9999Coins(struct Task *task) +// SLOT_ACTION_WAIT_MSG_MAX_COINS +static bool8 SlotAction_WaitMsg_9999Coins(struct Task *task) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { @@ -1542,7 +1567,8 @@ static bool8 SlotAction_WaitMessage_9999Coins(struct Task *task) return FALSE; } -static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task) +// SLOT_ACTION_MSG_NO_MORE_COINS +static bool8 SlotAction_PrintMsg_NoMoreCoins(struct Task *task) { DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, 1, gText_YouveRunOutOfCoins, 0, 1, 0, 0); @@ -1551,7 +1577,8 @@ static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task) return FALSE; } -static bool8 SlotAction_WaitMessage_NoMoreCoins(struct Task *task) +// SLOT_ACTION_WAIT_MSG_NO_MORE_COINS +static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *task) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { @@ -1561,6 +1588,7 @@ static bool8 SlotAction_WaitMessage_NoMoreCoins(struct Task *task) return FALSE; } +// SLOT_ACTION_END static bool8 SlotAction_EndGame(struct Task *task) { SetCoins(sSlotMachine->coins); @@ -1570,6 +1598,7 @@ static bool8 SlotAction_EndGame(struct Task *task) return FALSE; } +// SLOT_ACTION_FREE static bool8 SlotAction_FreeDataStructures(struct Task *task) { if (!gPaletteFade.active) @@ -1606,7 +1635,6 @@ static bool8 SlotAction_FreeDataStructures(struct Task *task) FREE_AND_SET_NULL(sReelBackground_Gfx); FREE_AND_SET_NULL(sReelBackgroundSpriteSheet); FREE_AND_SET_NULL(sSlotMachineSpritesheetsPtr); - FREE_AND_SET_NULL(sSlotMachine); } return FALSE; @@ -1645,9 +1673,9 @@ static void DrawLuckyFlags(void) static void SetLuckySpins(void) { - sSlotMachine->luckySpinsLeft = 0; + sSlotMachine->isLuckySpin = FALSE; if (sSlotMachine->luckyFlags) - sSlotMachine->luckySpinsLeft = 1; + sSlotMachine->isLuckySpin = TRUE; } static u8 GetBiasTag(u8 luckyFlags) @@ -1740,10 +1768,10 @@ static void GetReeltimeDraw(void) sSlotMachine->reelTimeDraw = reelTimeDraw; } -static bool8 SkipToReeltimeAction14(u16 i) +static bool8 ShouldReelTimeMachineExplode(u16 i) { u16 rval = Random() & 0xff; - if (rval < sProbabilityTable_SkipToReeltimeAction14[i]) + if (rval < sReelTimeExplodeProbability[i]) return TRUE; else return FALSE; @@ -1790,7 +1818,7 @@ static void CheckMatch_CenterRow(void) c1 = GetTagAtRest(LEFT_REEL, 2); c2 = GetTagAtRest(MIDDLE_REEL, 2); c3 = GetTagAtRest(RIGHT_REEL, 2); - match = GetMatchFromSymbolsInRow(c1, c2, c3); + match = GetMatchFromSymbols(c1, c2, c3); if (match != MATCHED_NONE) { sSlotMachine->payout += sSlotPayouts[match]; @@ -1806,7 +1834,7 @@ static void CheckMatch_TopAndBottom(void) c1 = GetTagAtRest(LEFT_REEL, 1); c2 = GetTagAtRest(MIDDLE_REEL, 1); c3 = GetTagAtRest(RIGHT_REEL, 1); - match = GetMatchFromSymbolsInRow(c1, c2, c3); + match = GetMatchFromSymbols(c1, c2, c3); if (match != MATCHED_NONE) { if (match == MATCHED_1CHERRY) @@ -1818,7 +1846,7 @@ static void CheckMatch_TopAndBottom(void) c1 = GetTagAtRest(LEFT_REEL, 3); c2 = GetTagAtRest(MIDDLE_REEL, 3); c3 = GetTagAtRest(RIGHT_REEL, 3); - match = GetMatchFromSymbolsInRow(c1, c2, c3); + match = GetMatchFromSymbols(c1, c2, c3); if (match != MATCHED_NONE) { if (match == MATCHED_1CHERRY) @@ -1836,7 +1864,7 @@ static void CheckMatch_Diagonals(void) c1 = GetTagAtRest(LEFT_REEL, 1); c2 = GetTagAtRest(MIDDLE_REEL, 2); c3 = GetTagAtRest(RIGHT_REEL, 3); - match = GetMatchFromSymbolsInRow(c1, c2, c3); + match = GetMatchFromSymbols(c1, c2, c3); if (match != MATCHED_NONE) { if (match != MATCHED_1CHERRY) @@ -1849,7 +1877,7 @@ static void CheckMatch_Diagonals(void) c1 = GetTagAtRest(LEFT_REEL, 3); c2 = GetTagAtRest(MIDDLE_REEL, 2); c3 = GetTagAtRest(RIGHT_REEL, 1); - match = GetMatchFromSymbolsInRow(c1, c2, c3); + match = GetMatchFromSymbols(c1, c2, c3); if (match != MATCHED_NONE) { if (match != MATCHED_1CHERRY) @@ -1861,7 +1889,7 @@ static void CheckMatch_Diagonals(void) } } -static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3) +static u8 GetMatchFromSymbols(u8 c1, u8 c2, u8 c3) { if (c1 == c2 && c1 == c3) return sSymToMatch[c1]; @@ -2018,42 +2046,45 @@ s16 AdvanceReeltimeReelToNextTag(s16 value) return offset; } -static void GameplayTask_StopSlotReel(void) +#define tState data[0] +#define tMoving data[14] +#define tReelId data[15] + +static void CreateSlotReelTasks(void) { u8 i; for (i = 0; i < NUM_REELS; i++) { - u8 taskId = CreateTask(RunSlotReelActions, 2); - gTasks[taskId].data[15] = i; + u8 taskId = CreateTask(Task_RunSlotReelActions, 2); + gTasks[taskId].tReelId = i; sSlotMachine->slotReelTasks[i] = taskId; - RunSlotReelActions(taskId); + Task_RunSlotReelActions(taskId); } } -static void ReelTasks_SetUnkTaskData(u8 reelIndex) +static void SpinSlotReel(u8 reelIndex) { - gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[0] = 1; - gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[14] = 1; + gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_ACTION_SPIN; + gTasks[sSlotMachine->slotReelTasks[reelIndex]].tMoving = TRUE; } -static void sub_8102E1C(u8 reelIndex) +static void StopSlotReel(u8 reelIndex) { - gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[0] = 2; + gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_ACTION_STOP; } static bool8 IsSlotReelMoving(u8 reelIndex) { - return gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[14]; + return gTasks[sSlotMachine->slotReelTasks[reelIndex]].tMoving; } -static void RunSlotReelActions(u8 taskId) +static void Task_RunSlotReelActions(u8 taskId) { - while (sSlotReelActions[gTasks[taskId].data[0]](&gTasks[taskId])) + while (sSlotReelActions[gTasks[taskId].tState](&gTasks[taskId])) ; } // task->data[1] reel turns -// task->data[15] reelIndex static bool8 SlotReelAction_StayStill(struct Task *task) { return FALSE; @@ -2061,24 +2092,24 @@ static bool8 SlotReelAction_StayStill(struct Task *task) static bool8 SlotReelAction_Spin(struct Task *task) { - AdvanceSlotReel(task->data[15], sSlotMachine->reelIncrement); + AdvanceSlotReel(task->tReelId, sSlotMachine->reelIncrement); return FALSE; } // As in previous generations, the slot machine often doesn't stop exactly when you press stop static bool8 SlotReelAction_DecideWhereToStop(struct Task *task) { - task->data[0]++; + task->tState++; // initialize data for that reel --> these will be changed if sBiasTags can be lined up - sSlotMachine->winnerRows[task->data[15]] = 0; - sSlotMachine->reelExtraTurns[task->data[15]] = 0; + sSlotMachine->winnerRows[task->tReelId] = 0; + sSlotMachine->reelExtraTurns[task->tReelId] = 0; - if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->luckySpinsLeft == 0 || !sDecideReelTurns_BiasTag[task->data[15]]())) + if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || !sSlotMachine->isLuckySpin || !sDecideReelTurns_BiasTag[task->tReelId]())) { - sSlotMachine->luckySpinsLeft = 0; - sDecideReelTurns_NoBiasTag[task->data[15]](); + sSlotMachine->isLuckySpin = FALSE; + sDecideReelTurns_NoBiasTag[task->tReelId](); } - task->data[1] = sSlotMachine->reelExtraTurns[task->data[15]]; + task->data[1] = sSlotMachine->reelExtraTurns[task->tReelId]; return TRUE; } @@ -2089,18 +2120,18 @@ static bool8 SlotReelAction_MoveToStop(struct Task *task) s16 reelPixelPos; memcpy(reelStopShocks, sReelStopShocks, sizeof(sReelStopShocks)); - reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % REEL_SYMBOL_HEIGHT; + reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT; if (reelPixelPos != 0) - reelPixelPos = AdvanceSlotReelToNextTag(task->data[15], sSlotMachine->reelIncrement); - else if (sSlotMachine->reelExtraTurns[task->data[15]]) + reelPixelPos = AdvanceSlotReelToNextTag(task->tReelId, sSlotMachine->reelIncrement); + else if (sSlotMachine->reelExtraTurns[task->tReelId]) { - sSlotMachine->reelExtraTurns[task->data[15]]--; - AdvanceSlotReel(task->data[15], sSlotMachine->reelIncrement); - reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % REEL_SYMBOL_HEIGHT; + sSlotMachine->reelExtraTurns[task->tReelId]--; + AdvanceSlotReel(task->tReelId, sSlotMachine->reelIncrement); + reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT; } - if (reelPixelPos == 0 && sSlotMachine->reelExtraTurns[task->data[15]] == 0) + if (reelPixelPos == 0 && sSlotMachine->reelExtraTurns[task->tReelId] == 0) { - task->data[0]++; + task->tState++; task->data[1] = reelStopShocks[task->data[1]]; task->data[2] = 0; } @@ -2110,20 +2141,24 @@ static bool8 SlotReelAction_MoveToStop(struct Task *task) // make selected tag oscillate before it becomes still static bool8 SlotReelAction_OscillatingStop(struct Task *task) { - sSlotMachine->reelPixelOffsetsWhileStopping[task->data[15]] = task->data[1]; + sSlotMachine->reelPixelOffsetsWhileStopping[task->tReelId] = task->data[1]; task->data[1] = -task->data[1]; task->data[2]++; if ((task->data[2] & 0x3) == 0) task->data[1] >>= 1; if (task->data[1] == 0) { - task->data[0] = 0; - task->data[14] = 0; - sSlotMachine->reelPixelOffsetsWhileStopping[task->data[15]] = 0; + task->tState = 0; + task->tMoving = FALSE; + sSlotMachine->reelPixelOffsetsWhileStopping[task->tReelId] = 0; } return FALSE; } +#undef tState +#undef tMoving +#undef tReelId + static bool8 DecideReelTurns_BiasTag_Reel1(void) { u8 tag2 = GetBiasTag(sSlotMachine->luckyFlags); @@ -2680,31 +2715,31 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void) } } -static void sub_8103C14(u8 reelNum) +static void PressStopReelButton(u8 reelNum) { - u8 taskId = CreateTask(sub_8103C48, 5); + u8 taskId = CreateTask(Task_PressStopReelButton, 5); gTasks[taskId].data[15] = reelNum; - sub_8103C48(taskId); + Task_PressStopReelButton(taskId); } -static void sub_8103C48(u8 taskId) +static void Task_PressStopReelButton(u8 taskId) { sReelStopButtonFuncs[gTasks[taskId].data[0]](&gTasks[taskId], taskId); } -static void sub_8103C78(struct Task *task, u8 taskId) +static void StopReelButton_Press(struct Task *task, u8 taskId) { SetReelButtonTilemap(sReelButtonOffsets[task->data[15]], 0x62, 0x63, 0x72, 0x73); task->data[0]++; } -static void sub_8103CAC(struct Task *task, u8 taskId) +static void StopReelButton_Wait(struct Task *task, u8 taskId) { if (++task->data[1] > 11) task->data[0]++; } -static void sub_8103CC8(struct Task *task, u8 taskId) +static void StopReelButton_Unpress(struct Task *task, u8 taskId) { SetReelButtonTilemap(sReelButtonOffsets[task->data[15]], 0x42, 0x43, 0x52, 0x53); DestroyTask(taskId); @@ -2884,92 +2919,100 @@ static void Task_FlashSlotMachineLights(u8 taskId) #undef sFlashState #undef sFlashDir +#define tState data[0] +#define tNumBolts data[1] +#define tSpriteId data[2] +#define tTimer data[2] // re-used +#define tAnimating data[15] + static void CreatePikaPowerBoltTask(void) { sSlotMachine->pikaPowerBoltTaskId = CreateTask(Task_CreatePikaPowerBolt, 8); } -static void DisplayPikaPower(u8 pikaPower) +static void AddPikaPowerBolt(u8 pikaPower) { struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; - ClearTaskDataFields_2orHigher(task); - task->data[0] = 1; - task->data[1]++; - task->data[15] = 1; // points to a reelIndex + ResetPikaPowerBoltTask(task); + task->tState = 1; + task->tNumBolts++; + task->tAnimating = TRUE; } -static void sub_8104098(void) +static void ResetPikaPowerBolts(void) { struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; - ClearTaskDataFields_2orHigher(task); - task->data[0] = 3; - task->data[15] = 1; // points to a reelIndex + ResetPikaPowerBoltTask(task); + task->tState = 3; + task->tAnimating = TRUE; } -static bool8 sub_81040C8(void) +static bool8 IsPikaPowerBoltAnimating(void) { - return gTasks[sSlotMachine->pikaPowerBoltTaskId].data[15]; + return gTasks[sSlotMachine->pikaPowerBoltTaskId].tAnimating; } static void Task_CreatePikaPowerBolt(u8 taskId) { - sPikaPowerBoltFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sPikaPowerBoltFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void nullsub_68(struct Task *task) +static void PikaPowerBolt_Idle(struct Task *task) { } -static void sub_810411C(struct Task *task) +static void PikaPowerBolt_AddBolt(struct Task *task) { - task->data[2] = CreatePikaPowerBoltSprite((task->data[1] << 3) + 20, 20); - task->data[0]++; + task->tSpriteId = CreatePikaPowerBoltSprite((task->tNumBolts << 3) + 20, 20); + task->tState++; } -static void sub_8104144(struct Task *task) +// The bolt sprite spins around as it appears +// Once the anim is done, destroy the sprite and set the bolt in the tilemap instead +static void PikaPowerBolt_WaitAnim(struct Task *task) { - if (gSprites[task->data[2]].data[7]) + if (gSprites[task->tSpriteId].data[7]) { - s16 r5 = task->data[1] + 2; + s16 r5 = task->tNumBolts + 2; s16 r3 = 0; s16 r2 = 0; - if (task->data[1] == 1) + if (task->tNumBolts == 1) r3 = 1, r2 = 1; - else if (task->data[1] == 16) + else if (task->tNumBolts == 16) r3 = 2, r2 = 2; sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][0]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40); - DestroyPikaPowerBoltSprite(task->data[2]); - task->data[0] = 0; - task->data[15] = 0; // points to a reelIndex + DestroyPikaPowerBoltSprite(task->tSpriteId); + task->tState = 0; + task->tAnimating = 0; } } -static void sub_81041AC(struct Task *task) +static void PikaPowerBolt_ClearAll(struct Task *task) { - s16 r5 = task->data[1] + 2; + s16 r5 = task->tNumBolts + 2; s16 r3 = 0; s16 r2 = 3; - if (task->data[1] == 1) + if (task->tNumBolts == 1) r3 = 1, r2 = 1; - else if (task->data[1] == 16) + else if (task->tNumBolts == 16) r3 = 2, r2 = 2; - if (task->data[2] == 0) + if (task->tTimer == 0) { sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][1]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40); - task->data[1]--; + task->tNumBolts--; } - if (++task->data[2] >= 20) - task->data[2] = 0; - if (task->data[1] == 0) + if (++task->tTimer >= 20) + task->tTimer = 0; + if (task->tNumBolts == 0) { - task->data[0] = 0; - task->data[15] = 0; + task->tState = 0; + task->tAnimating = 0; } } -static void ClearTaskDataFields_2orHigher(struct Task *task) +static void ResetPikaPowerBoltTask(struct Task *task) { u8 i; @@ -3005,34 +3048,41 @@ static void LoadPikaPowerMeter(u8 pikaPower) gTasks[sSlotMachine->pikaPowerBoltTaskId].data[1] = pikaPower; } -static void BeginReeltime(void) +#undef tState +#undef tNumBolts +#undef tSpriteId +#undef tTimer +#undef tAnimating + +#define tState data[0] + +static void BeginReelTime(void) { - u8 taskId = CreateTask(RunReeltimeActions, 7); - RunReeltimeActions(taskId); + u8 taskId = CreateTask(Task_ReelTime, 7); + Task_ReelTime(taskId); } -static bool8 IsFinalTask_RunReelTimeActions(void) +static bool8 IsReelTimeTaskDone(void) { - if (FindTaskIdByFunc(RunReeltimeActions) == TAIL_SENTINEL) + if (FindTaskIdByFunc(Task_ReelTime) == TAIL_SENTINEL) return TRUE; return FALSE; } -static void RunReeltimeActions(u8 taskId) +static void Task_ReelTime(u8 taskId) { - // task.data[0] points to which ReelTimeAction to do, and starts at 0 // task.data[1] has something to do with the threshold // task.data[4] says how many pixels to advance the reel // task.data[5] is a timer - sReeltimeActions[gTasks[taskId].data[0]](&gTasks[taskId]); + sReelTimeActions[gTasks[taskId].tState](&gTasks[taskId]); } -static void ReeltimeAction0(struct Task *task) +static void ReelTime_Init(struct Task *task) { sSlotMachine->reelTimeSpinsLeft = 0; sSlotMachine->reeltimePixelOffset = 0; sSlotMachine->reeltimePosition = 0; - task->data[0]++; + task->tState++; task->data[1] = 0; task->data[2] = 30; task->data[4] = 1280; // reel speed @@ -3051,7 +3101,7 @@ static void ReeltimeAction0(struct Task *task) PlayNewMapMusic(MUS_BD_TIME); } -static void ReeltimeAction1(struct Task *task) +static void ReelTime_WindowEnter(struct Task *task) { s16 r3; gSpriteCoordOffsetX -= 8; @@ -3066,24 +3116,24 @@ static void ReeltimeAction1(struct Task *task) } if (task->data[1] >= 200) { - task->data[0]++; + task->tState++; task->data[3] = 0; } AdvanceReeltimeReel(task->data[4] >> 8); } -static void ReeltimeAction2(struct Task *task) +static void ReelTime_WaitStartPikachu(struct Task *task) { AdvanceReeltimeReel(task->data[4] >> 8); if (++task->data[5] >= 60) { - task->data[0]++; + task->tState++; CreateReelTimeBoltSprites(); CreateReelTimePikachuAuraSprites(); } } -static void ReeltimeAction3(struct Task *task) +static void ReelTime_PikachuSpeedUp1(struct Task *task) { int i; u8 pikachuAnimIds[ARRAY_COUNT(sReelTimePikachuAnimIds)]; @@ -3104,36 +3154,36 @@ static void ReeltimeAction3(struct Task *task) // once speed goes below 256, go to next ReelTimeAction and keep the speed level if (task->data[4] <= 0x100) { - task->data[0]++; + task->tState++; task->data[4] = 0x100; task->data[5] = 0; } } -static void ReeltimeAction4(struct Task *task) +static void ReelTime_PikachuSpeedUp2(struct Task *task) { AdvanceReeltimeReel(task->data[4] >> 8); if (++task->data[5] >= 80) { - task->data[0]++; + task->tState++; task->data[5] = 0; SetReelTimePikachuAuraFlashDelay(2); StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 3); } } -static void ReeltimeAction5(struct Task *task) +static void ReelTime_WaitReel(struct Task *task) { AdvanceReeltimeReel(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x80; if (++task->data[5] >= 80) { - task->data[0]++; + task->tState++; task->data[5] = 0; } } -static void ReeltimeAction6(struct Task *task) +static void ReelTime_CheckExplode(struct Task *task) { AdvanceReeltimeReel(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x40; @@ -3143,21 +3193,21 @@ static void ReeltimeAction6(struct Task *task) if (sSlotMachine->reelTimeDraw) { if (sSlotMachine->reelTimeSpinsLeft <= task->data[6]) - task->data[0]++; + task->tState++; } else if (task->data[6] > 3) { - task->data[0]++; + task->tState++; } - else if (SkipToReeltimeAction14(task->data[6])) + else if (ShouldReelTimeMachineExplode(task->data[6])) { - task->data[0] = 14; + task->tState = 14; // ReelTime_ExplodeMachine } task->data[6]++; } } -static void ReelTimeAction_LandOnOutcome(struct Task *task) +static void ReelTime_LandOnOutcome(struct Task *task) { s16 reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20; if (reeltimePixelOffset) @@ -3174,18 +3224,18 @@ static void ReelTimeAction_LandOnOutcome(struct Task *task) if (reeltimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw) { task->data[4] = 0; // stop moving - task->data[0]++; + task->tState++; } } -static void ReeltimeAction8(struct Task *task) +static void ReelTime_PikachuReact(struct Task *task) { if (++task->data[4] >= 60) { StopMapMusic(); DestroyReelTimeBoltSprites(); DestroyReelTimePikachuAuraSprites(); - task->data[0]++; + task->tState++; if(sSlotMachine->reelTimeDraw == 0) { task->data[4] = 0xa0; @@ -3199,7 +3249,7 @@ static void ReeltimeAction8(struct Task *task) gSprites[sSlotMachine->reelTimePikachuSpriteId].animCmdIndex = 0; if (sSlotMachine->pikaPower) { - sub_8104098(); + ResetPikaPowerBolts(); sSlotMachine->pikaPower = 0; } PlayFanfare(MUS_ME_B_SMALL); @@ -3207,13 +3257,13 @@ static void ReeltimeAction8(struct Task *task) } } -static void ReeltimeAction9(struct Task *task) +static void ReelTime_WaitClearPikaPower(struct Task *task) { - if ((task->data[4] == 0 || --task->data[4] == 0) && !sub_81040C8()) - task->data[0]++; + if ((task->data[4] == 0 || --task->data[4] == 0) && !IsPikaPowerBoltAnimating()) + task->tState++; } -static void ReeltimeAction10(struct Task *task) +static void ReelTime_CloseWindow(struct Task *task) { s16 r4; gSpriteCoordOffsetX -= 8; @@ -3224,10 +3274,10 @@ static void ReeltimeAction10(struct Task *task) if (task->data[3] >> 3 <= 25) ClearReelTimeWindowTilemap(r4); else - task->data[0]++; + task->tState++; } -static void ReeltimeAction11(struct Task *task) +static void ReelTime_DestroySprites(struct Task *task) { sSlotMachine->reelTimeSpinsUsed = 0; sSlotMachine->reelTimeSpinsLeft = sSlotMachine->reelTimeDraw; @@ -3240,7 +3290,7 @@ static void ReeltimeAction11(struct Task *task) PlayNewMapMusic(sSlotMachine->backupMapMusic); if (sSlotMachine->reelTimeSpinsLeft == 0) { - DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); + DestroyTask(FindTaskIdByFunc(Task_ReelTime)); } else { @@ -3248,25 +3298,25 @@ static void ReeltimeAction11(struct Task *task) task->data[1] = SlowReelSpeed(); task->data[2] = 0; task->data[3] = 0; - task->data[0]++; + task->tState++; } } -static void ReeltimeAction12(struct Task *task) +static void ReelTime_SetReelIncrement(struct Task *task) { if (sSlotMachine->reelIncrement == task->data[1]) - task->data[0]++; + task->tState++; else if (sSlotMachine->reelPixelOffsets[0] % REEL_SYMBOL_HEIGHT == 0 && (++task->data[2]& 0x07) == 0) sSlotMachine->reelIncrement >>= 1; } -static void ReeltimeAction13(struct Task *task) +static void ReelTime_EndSuccess(struct Task *task) { if (IsDigitalDisplayAnimFinished()) - DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); + DestroyTask(FindTaskIdByFunc(Task_ReelTime)); } -static void ReeltimeAction14(struct Task *task) +static void ReelTime_ExplodeMachine(struct Task *task) { DestroyReelTimeMachineSprites(); DestroyReelTimeBoltSprites(); @@ -3274,7 +3324,7 @@ static void ReeltimeAction14(struct Task *task) CreateReelTimeExplosionSprite(); gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = TRUE; StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5); - task->data[0]++; + task->tState++; task->data[4] = 4; task->data[5] = 0; StopMapMusic(); @@ -3282,7 +3332,7 @@ static void ReeltimeAction14(struct Task *task) PlaySE(SE_W153); } -static void ReeltimeAction15(struct Task *task) +static void ReelTime_WaitExplode(struct Task *task) { gSpriteCoordOffsetY = task->data[4]; SetGpuReg(REG_OFFSET_BG1VOFS, task->data[4]); @@ -3297,23 +3347,23 @@ static void ReeltimeAction15(struct Task *task) CreateBrokenReelTimeMachineSprite(); CreateReelTimeSmokeSprite(); gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = FALSE; - task->data[0]++; + task->tState++; task->data[5] = 0; } } -static void ReeltimeAction16(struct Task *task) +static void ReelTime_WaitSmoke(struct Task *task) { gSpriteCoordOffsetY = 0; SetGpuReg(REG_OFFSET_BG1VOFS, 0); if (IsReelTimeSmokeAnimFinished()) { - task->data[0]++; + task->tState++; DestroyReelTimeSmokeSprite(); } } -static void ReeltimeAction17(struct Task *task) +static void ReelTime_EndFailure(struct Task *task) { gSpriteCoordOffsetX = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); @@ -3322,7 +3372,7 @@ static void ReeltimeAction17(struct Task *task) DestroyBrokenReelTimeMachineSprite(); DestroyReelTimeShadowSprites(); DestroyReelTimeDuckSprites(); - DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); + DestroyTask(FindTaskIdByFunc(Task_ReelTime)); } static void LoadReelTimeWindowTilemap(s16 a0, s16 a1) @@ -3345,6 +3395,10 @@ static void ClearReelTimeWindowTilemap(s16 a0) } } +#undef tState + +#define tState data[0] + // Info Box is the screen shown when Select is pressed static void OpenInfoBox(u8 digDisplayId) { @@ -3363,19 +3417,19 @@ static bool8 IsInfoBoxClosed(void) static void RunInfoBoxActions(u8 taskId) { - sInfoBoxActions[gTasks[taskId].data[0]](&gTasks[taskId]); + sInfoBoxActions[gTasks[taskId].tState](&gTasks[taskId]); } static void InfoBox_FadeIn(struct Task *task) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - task->data[0]++; + task->tState++; } static void InfoBox_WaitForFade(struct Task *task) { if (!gPaletteFade.active) - task->data[0]++; + task->tState++; } static void InfoBox_DrawWindow(struct Task *task) @@ -3385,7 +3439,7 @@ static void InfoBox_DrawWindow(struct Task *task) AddWindow(&sWindowTemplate_InfoBox); PutWindowTilemap(1); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - task->data[0]++; + task->tState++; } static void InfoBox_AddText(struct Task *task) @@ -3393,7 +3447,7 @@ static void InfoBox_AddText(struct Task *task) AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp); CopyWindowToVram(1, 3); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); - task->data[0]++; + task->tState++; } static void InfoBox_AwaitPlayerInput(struct Task *task) @@ -3405,7 +3459,7 @@ static void InfoBox_AwaitPlayerInput(struct Task *task) CopyWindowToVram(1, 1); RemoveWindow(1); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - task->data[0]++; + task->tState++; } } @@ -3413,20 +3467,20 @@ static void InfoBox_LoadSlotMachineTilemap(struct Task *task) { LoadSlotMachineMenuTilemap(); ShowBg(3); - task->data[0]++; + task->tState++; } static void InfoBox_CreateDigitalDisplay(struct Task *task) { CreateDigitalDisplayScene(task->data[1]); - task->data[0]++; + task->tState++; } static void InfoBox_LoadPikaPowerMeter(struct Task *task) { LoadPikaPowerMeter(sSlotMachine->pikaPower); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); - task->data[0]++; + task->tState++; } static void InfoBox_FreeTask(struct Task *task) @@ -3434,6 +3488,7 @@ static void InfoBox_FreeTask(struct Task *task) DestroyTask(FindTaskIdByFunc(RunInfoBoxActions)); } +#undef tState #define sWaitForAnim data[7] @@ -4039,7 +4094,7 @@ static u8 CreatePikaPowerBoltSprite(s16 x, s16 y) static void SpriteCB_PikaPowerBolt(struct Sprite *sprite) { if (sprite->affineAnimEnded) - sprite->data[7] = 1; + sprite->data[7] = TRUE; } static void DestroyPikaPowerBoltSprite(u8 spriteId) @@ -4461,7 +4516,7 @@ static void EndDigitalDisplayScene_InsertBet(void) sSlotMachine->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; } -static void sub_81063C0(void) +static void LoadSlotMachineGfx(void) { u8 i; @@ -4513,7 +4568,7 @@ static void LoadMenuGfx(void) LoadPalette(sUnkPalette, 208, 32); } -static void sub_81064B8(void) +static void LoadMenuAndReelOverlayTilemaps(void) { LoadSlotMachineMenuTilemap(); LoadSlotMachineReelOverlay(); @@ -4793,7 +4848,7 @@ static const u8 sReelTimeProbabilities_LuckyGame[][17] = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60} }; -static const u16 sProbabilityTable_SkipToReeltimeAction14[] = { +static const u16 sReelTimeExplodeProbability[] = { 128, 175, 200, 225, 256 }; @@ -7100,7 +7155,7 @@ static const u8 sBetToMatchLineIds[MAX_BET][2] = {MATCH_NWSE_DIAG, MATCH_NESW_DIAG}, // Bet 3 }; -static const u8 sMatchLinesPerBet[] = { 1, 2, 2 }; +static const u8 sMatchLinesPerBet[MAX_BET] = { 1, 2, 2 }; // Flashing lights at top of slot machine, brightest point inside light goes from toward center of machine, to middle, to toward edges static const u16 sFlashingLightsInside_Pal[] = INCBIN_U16("graphics/slot_machine/flashing_lights_inside.gbapal"); From b39047226b790662ba5e67a113a68db06fdaea24 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Wed, 29 Jul 2020 22:34:10 -0400 Subject: [PATCH 34/85] Match CreateWaterPulseRingBubbles --- src/battle_anim_water.c | 234 ++++++---------------------------------- 1 file changed, 34 insertions(+), 200 deletions(-) diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 88af2cdec9..66f277d859 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -52,7 +52,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8); static void CreateWaterSpoutRainDroplet(struct Task*, u8); static void AnimTask_WaterSport_Step(u8); static void CreateWaterSportDroplet(struct Task*); -static void CreateWaterPulseRingBubbles(struct Sprite*, int, int); +static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32); // Both unused const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp"); @@ -794,7 +794,7 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite) sprite->pos2.x = Sin(sprite->data[0], 4); sprite->data[1] += 48; sprite->pos2.y = -(sprite->data[1] >> 8); - if (--sprite->data[7] == -1) + if (sprite->data[7]-- == 0) DestroyAnimSprite(sprite); } @@ -1931,216 +1931,50 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite) sprite->data[0]++; } -#ifdef NONMATCHING -static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) +static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yDiff) { - s16 something = sprite->data[0] / 2; - s16 combinedX = sprite->pos1.x + sprite->pos2.x; - s16 combinedY = sprite->pos1.y + sprite->pos2.y; - s16 randomSomethingY = yDiff + (Random2() % 10) - 5; - s16 randomSomethingX = -xDiff + (Random2() % 10) - 5; - s16 i; + s16 combinedX, combinedY; + s16 i, something; + s16 unusedVar = 1; //unusedVar is needed to match + s16 somethingRandomX, somethingRandomY; u8 spriteId; - for (i = 0; i <= 0; i++) + something = sprite->data[0] / 2; + combinedX = sprite->pos1.x + sprite->pos2.x; + combinedY = sprite->pos1.y + sprite->pos2.y; + if (yDiff < 0) + unusedVar *= -1; //Needed to Match + somethingRandomY = yDiff + (Random2() % 10) - 5; + somethingRandomX = -xDiff + (Random2() % 10) - 5; + + for (i = 0; i < 1; i++) { spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130); gSprites[spriteId].data[0] = 20; - gSprites[spriteId].data[1] = randomSomethingY; + gSprites[spriteId].data[1] = somethingRandomY; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; - if (randomSomethingX < 0) - gSprites[spriteId].data[2] = -randomSomethingX; + if (somethingRandomX < 0) + { + gSprites[spriteId].data[2] = -somethingRandomX; + } else - gSprites[spriteId].data[2] = randomSomethingX; + { + gSprites[spriteId].data[2] = somethingRandomX; + } } - for (i = 0; i <= 0; i++) + for (i = 0; i < 1; i++) { spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130); gSprites[spriteId].data[0] = 20; - gSprites[spriteId].data[1] = randomSomethingY; + gSprites[spriteId].data[1] = somethingRandomY; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; - if (randomSomethingX > 0) - gSprites[spriteId].data[2] = -randomSomethingX; + if (somethingRandomX > 0) + { + gSprites[spriteId].data[2] = -somethingRandomX; + } else - gSprites[spriteId].data[2] = randomSomethingX; + { + gSprites[spriteId].data[2] = somethingRandomX; + } } -} -#else -NAKED -static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) -{ - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x18\n\ - adds r4, r1, 0\n\ - adds r5, r2, 0\n\ - movs r2, 0x2E\n\ - ldrsh r1, [r0, r2]\n\ - lsrs r2, r1, 31\n\ - adds r1, r2\n\ - lsls r1, 15\n\ - lsrs r1, 16\n\ - str r1, [sp]\n\ - ldrh r1, [r0, 0x24]\n\ - ldrh r3, [r0, 0x20]\n\ - adds r1, r3\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r8, r1\n\ - ldrh r1, [r0, 0x26]\n\ - ldrh r0, [r0, 0x22]\n\ - adds r1, r0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r10, r1\n\ - bl Random2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - adds r0, r5, r0\n\ - subs r0, 0x5\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r9, r0\n\ - bl Random2\n\ - negs r4, r4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - adds r4, r0\n\ - subs r4, 0x5\n\ - lsls r4, 16\n\ - lsrs r7, r4, 16\n\ - movs r6, 0\n\ - mov r0, r8\n\ - lsls r0, 16\n\ - mov r8, r0\n\ - mov r1, r10\n\ - lsls r1, 16\n\ - str r1, [sp, 0xC]\n\ - ldr r2, [sp]\n\ - lsls r2, 16\n\ - str r2, [sp, 0x10]\n\ - asrs r1, 16\n\ - lsls r0, r7, 16\n\ - asrs r5, r0, 16\n\ - str r0, [sp, 0x14]\n\ - negs r3, r5\n\ - str r3, [sp, 0x4]\n\ - asrs r0, r2, 16\n\ - adds r1, r0\n\ - lsls r1, 16\n\ - mov r10, r1\n\ -_08108DE2:\n\ - ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ - mov r2, r8\n\ - asrs r1, r2, 16\n\ - mov r3, r10\n\ - asrs r2, r3, 16\n\ - movs r3, 0x82\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r1, =gSprites\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r4, r0, r1\n\ - movs r0, 0x14\n\ - strh r0, [r4, 0x2E]\n\ - mov r0, r9\n\ - strh r0, [r4, 0x30]\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSpriteSubpriority\n\ - subs r0, 0x1\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - cmp r5, 0\n\ - bge _08108E30\n\ - mov r1, sp\n\ - ldrh r1, [r1, 0x4]\n\ - strh r1, [r4, 0x32]\n\ - b _08108E32\n\ - .pool\n\ -_08108E30:\n\ - strh r7, [r4, 0x32]\n\ -_08108E32:\n\ - lsls r0, r6, 16\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r0, r2\n\ - lsrs r6, r0, 16\n\ - cmp r0, 0\n\ - ble _08108DE2\n\ - movs r6, 0\n\ - ldr r3, [sp, 0xC]\n\ - asrs r1, r3, 16\n\ - ldr r0, [sp, 0x14]\n\ - asrs r5, r0, 16\n\ - negs r2, r5\n\ - str r2, [sp, 0x8]\n\ - ldr r3, [sp, 0x10]\n\ - asrs r0, r3, 16\n\ - subs r1, r0\n\ - lsls r1, 16\n\ - mov r10, r1\n\ -_08108E58:\n\ - ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ - mov r2, r8\n\ - asrs r1, r2, 16\n\ - mov r3, r10\n\ - asrs r2, r3, 16\n\ - movs r3, 0x82\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r1, =gSprites\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r4, r0, r1\n\ - movs r0, 0x14\n\ - strh r0, [r4, 0x2E]\n\ - mov r0, r9\n\ - strh r0, [r4, 0x30]\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSpriteSubpriority\n\ - subs r0, 0x1\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - cmp r5, 0\n\ - ble _08108EA8\n\ - mov r1, sp\n\ - ldrh r1, [r1, 0x8]\n\ - strh r1, [r4, 0x32]\n\ - b _08108EAA\n\ - .pool\n\ -_08108EA8:\n\ - strh r7, [r4, 0x32]\n\ -_08108EAA:\n\ - lsls r0, r6, 16\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r0, r2\n\ - lsrs r6, r0, 16\n\ - cmp r0, 0\n\ - ble _08108E58\n\ - add sp, 0x18\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n"); -} -#endif +} \ No newline at end of file From f39de3f50367eabd287288815449dd8de8aab30a Mon Sep 17 00:00:00 2001 From: pi1024e Date: Wed, 29 Jul 2020 22:47:03 -0400 Subject: [PATCH 35/85] terminal newline --- src/battle_anim_water.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 66f277d859..fa2f38c4bf 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -1977,4 +1977,4 @@ static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yD gSprites[spriteId].data[2] = somethingRandomX; } } -} \ No newline at end of file +} From 22b5b6b0741a5e0831cc78ffaef7c1f6407044f0 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 29 Jul 2020 04:46:58 -0400 Subject: [PATCH 36/85] Start documenting roulette --- data/event_scripts.s | 1 + data/scripts/roulette.inc | 4 +- .../{poke_icons.png => grid_icons.png} | Bin .../roulette/{85B65D0.pal => unused_1.pal} | 0 .../roulette/{85B65F0.pal => unused_2.pal} | 0 .../roulette/{85B6610.pal => unused_3.pal} | 0 .../roulette/{85B6630.pal => unused_4.pal} | 0 graphics_file_rules.mk | 2 +- include/constants/coins.h | 1 + include/constants/roulette.h | 7 + include/graphics.h | 12 +- include/roulette_util.h | 4 +- src/coins.c | 2 +- src/graphics.c | 13 +- src/roulette.c | 3265 +++++++++-------- src/roulette_util.c | 4 +- 16 files changed, 1764 insertions(+), 1551 deletions(-) rename graphics/roulette/{poke_icons.png => grid_icons.png} (100%) rename graphics/roulette/{85B65D0.pal => unused_1.pal} (100%) rename graphics/roulette/{85B65F0.pal => unused_2.pal} (100%) rename graphics/roulette/{85B6610.pal => unused_3.pal} (100%) rename graphics/roulette/{85B6630.pal => unused_4.pal} (100%) create mode 100644 include/constants/roulette.h diff --git a/data/event_scripts.s b/data/event_scripts.s index 7cc5960d47..058de953be 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -40,6 +40,7 @@ #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/pokemon.h" +#include "constants/roulette.h" #include "constants/script_menu.h" #include "constants/secret_bases.h" #include "constants/songs.h" diff --git a/data/scripts/roulette.inc b/data/scripts/roulette.inc index 9aea650542..f590ca3585 100644 --- a/data/scripts/roulette.inc +++ b/data/scripts/roulette.inc @@ -6,7 +6,7 @@ Roulette_EventScript_Table1:: @ 82A5AB1 getpricereduction POKENEWS_GAME_CORNER compare VAR_RESULT, FALSE goto_if_eq Roulette_EventScript_Play - addvar VAR_0x8004, 128 + addvar VAR_0x8004, ROULETTE_SPECIAL_RATE goto Roulette_EventScript_Play end @@ -18,7 +18,7 @@ Roulette_EventScript_Table2:: @ 82A5ADF getpricereduction POKENEWS_GAME_CORNER compare VAR_RESULT, FALSE goto_if_eq Roulette_EventScript_Play - addvar VAR_0x8004, 128 + addvar VAR_0x8004, ROULETTE_SPECIAL_RATE goto Roulette_EventScript_Play end diff --git a/graphics/roulette/poke_icons.png b/graphics/roulette/grid_icons.png similarity index 100% rename from graphics/roulette/poke_icons.png rename to graphics/roulette/grid_icons.png diff --git a/graphics/roulette/85B65D0.pal b/graphics/roulette/unused_1.pal similarity index 100% rename from graphics/roulette/85B65D0.pal rename to graphics/roulette/unused_1.pal diff --git a/graphics/roulette/85B65F0.pal b/graphics/roulette/unused_2.pal similarity index 100% rename from graphics/roulette/85B65F0.pal rename to graphics/roulette/unused_2.pal diff --git a/graphics/roulette/85B6610.pal b/graphics/roulette/unused_3.pal similarity index 100% rename from graphics/roulette/85B6610.pal rename to graphics/roulette/unused_3.pal diff --git a/graphics/roulette/85B6630.pal b/graphics/roulette/unused_4.pal similarity index 100% rename from graphics/roulette/85B6630.pal rename to graphics/roulette/unused_4.pal diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 42fe821559..f2d14ef3c0 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -483,7 +483,7 @@ $(ROULETTEGFXDIR)/roulette_tilt.4bpp: $(ROULETTEGFXDIR)/shroomish.4bpp \ $(ROULETTEGFXDIR)/tailow.4bpp @cat $^ >$@ -$(ROULETTEGFXDIR)/poke_icons2.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \ +$(ROULETTEGFXDIR)/board_icons.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \ $(ROULETTEGFXDIR)/azurill.4bpp \ $(ROULETTEGFXDIR)/skitty.4bpp \ $(ROULETTEGFXDIR)/makuhita.4bpp diff --git a/include/constants/coins.h b/include/constants/coins.h index 3ae3bb23f9..e65e981d6d 100644 --- a/include/constants/coins.h +++ b/include/constants/coins.h @@ -2,5 +2,6 @@ #define GUARD_CONSTANTS_COINS_H #define MAX_COINS 9999 +#define MAX_COIN_DIGITS 4 #endif // GUARD_CONSTANTS_COINS_H diff --git a/include/constants/roulette.h b/include/constants/roulette.h new file mode 100644 index 0000000000..2ab17e4765 --- /dev/null +++ b/include/constants/roulette.h @@ -0,0 +1,7 @@ +#ifndef GUARD_CONSTANTS_ROULETTE_H +#define GUARD_CONSTANTS_ROULETTE_H + +// Flag set in gSpecialVar_0x8004 when playing Roulette on a Game Corner service day +#define ROULETTE_SPECIAL_RATE (1 << 7) + +#endif // GUARD_CONSTANTS_ROULETTE_H diff --git a/include/graphics.h b/include/graphics.h index 8514d49bdf..cf2abb8251 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4919,13 +4919,13 @@ extern const u32 gPartyMenuPokeball_Pal[]; extern const u32 gStatusPal_Icons[]; // Roulette -extern const u32 gRouletteMenuTiles[]; -extern const u32 gRouletteWheelTiles[]; +extern const u32 gRouletteMenu_Gfx[]; +extern const u32 gRouletteWheel_Gfx[]; extern const u32 gRouletteCenter_Gfx[]; -extern const u32 gRouletteHeadersTiles[]; -extern const u32 gRouletteCreditTiles[]; -extern const u32 gRouletteNumbersTiles[]; -extern const u32 gRouletteMultiplierTiles[]; +extern const u32 gRouletteHeaders_Gfx[]; +extern const u32 gRouletteCredit_Gfx[]; +extern const u32 gRouletteNumbers_Gfx[]; +extern const u32 gRouletteMultiplier_Gfx[]; // Contest util extern const u32 gContestResults_Gfx[]; diff --git a/include/roulette_util.h b/include/roulette_util.h index 76752fe749..85b8de1f37 100644 --- a/include/roulette_util.h +++ b/include/roulette_util.h @@ -41,8 +41,8 @@ void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UpdatePulseBlend(struct PulseBlend *); -void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); -void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); +void ClearGridSelectionRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); +void SetGridSelectionRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); void task_tutorial_controls_fadein(struct UnkStruct0 *r0); void sub_8151678(struct UnkStruct0 *r0); u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2); diff --git a/src/coins.c b/src/coins.c index 302817f8db..52c7dd3ece 100644 --- a/src/coins.c +++ b/src/coins.c @@ -14,7 +14,7 @@ void PrintCoinsString(u32 coinAmount) { u32 xAlign; - ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, MAX_COIN_DIGITS); StringExpandPlaceholders(gStringVar4, gText_Coins); xAlign = GetStringRightAlignXOffset(1, gStringVar4, 0x40); diff --git a/src/graphics.c b/src/graphics.c index b774c5ad21..48323467d0 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1227,13 +1227,14 @@ const u32 gCableCar_Gfx[] = INCBIN_U32("graphics/misc/cable_car.4bpp.lz"); const u32 gCableCarDoor_Gfx[] = INCBIN_U32("graphics/misc/cable_car_door.4bpp.lz"); const u32 gCableCarCord_Gfx[] = INCBIN_U32("graphics/misc/cable_car_cord.4bpp.lz"); -const u32 gRouletteMenuTiles[] = INCBIN_U32("graphics/roulette/window.4bpp.lz"); -const u32 gRouletteWheelTiles[] = INCBIN_U32("graphics/roulette/wheel.8bpp.lz"); +// Roulette +const u32 gRouletteMenu_Gfx[] = INCBIN_U32("graphics/roulette/window.4bpp.lz"); +const u32 gRouletteWheel_Gfx[] = INCBIN_U32("graphics/roulette/wheel.8bpp.lz"); const u32 gRouletteCenter_Gfx[] = INCBIN_U32("graphics/roulette/center.4bpp.lz"); -const u32 gRouletteHeadersTiles[] = INCBIN_U32("graphics/roulette/headers.4bpp.lz"); -const u32 gRouletteCreditTiles[] = INCBIN_U32("graphics/roulette/credit.4bpp.lz"); -const u32 gRouletteNumbersTiles[] = INCBIN_U32("graphics/roulette/numbers.4bpp.lz"); -const u32 gRouletteMultiplierTiles[] = INCBIN_U32("graphics/roulette/multiplier.4bpp.lz"); +const u32 gRouletteHeaders_Gfx[] = INCBIN_U32("graphics/roulette/headers.4bpp.lz"); +const u32 gRouletteCredit_Gfx[] = INCBIN_U32("graphics/roulette/credit.4bpp.lz"); +const u32 gRouletteNumbers_Gfx[] = INCBIN_U32("graphics/roulette/numbers.4bpp.lz"); +const u32 gRouletteMultiplier_Gfx[] = INCBIN_U32("graphics/roulette/multiplier.4bpp.lz"); #include "data/graphics/mail.h" diff --git a/src/roulette.c b/src/roulette.c index 1015687af9..983a96e3ff 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -26,10 +26,170 @@ #include "trig.h" #include "tv.h" #include "window.h" +#include "constants/coins.h" #include "constants/rgb.h" +#include "constants/roulette.h" #include "constants/species.h" #include "constants/songs.h" +#define BALLS_PER_ROUND 6 + +#define NUM_BOARD_COLORS 3 // Grid rows +#define NUM_BOARD_POKES 4 // Grid columns +#define NUM_ROULETTE_SLOTS (NUM_BOARD_COLORS * NUM_BOARD_POKES) + +// IDs for grid selections when betting +#define SELECTION_NONE 0 +#define COL_WYNAUT 1 +#define COL_AZURILL 2 +#define COL_SKITTY 3 +#define COL_MAKUHITA 4 +#define ROW_ORANGE (COL_MAKUHITA + 1) +#define SQU_ORANGE_WYNAUT (ROW_ORANGE + COL_WYNAUT) +#define SQU_ORANGE_AZURILL (ROW_ORANGE + COL_AZURILL) +#define SQU_ORANGE_SKITTY (ROW_ORANGE + COL_SKITTY) +#define SQU_ORANGE_MAKUHITA (ROW_ORANGE + COL_MAKUHITA) +#define ROW_GREEN (SQU_ORANGE_MAKUHITA + 1) +#define SQU_GREEN_WYNAUT (ROW_GREEN + COL_WYNAUT) +#define SQU_GREEN_AZURILL (ROW_GREEN + COL_AZURILL) +#define SQU_GREEN_SKITTY (ROW_GREEN + COL_SKITTY) +#define SQU_GREEN_MAKUHITA (ROW_GREEN + COL_MAKUHITA) +#define ROW_PURPLE (SQU_GREEN_MAKUHITA + 1) +#define SQU_PURPLE_WYNAUT (ROW_PURPLE + COL_WYNAUT) +#define SQU_PURPLE_AZURILL (ROW_PURPLE + COL_AZURILL) +#define SQU_PURPLE_SKITTY (ROW_PURPLE + COL_SKITTY) +#define SQU_PURPLE_MAKUHITA (ROW_PURPLE + COL_MAKUHITA) +#define NUM_GRID_SELECTIONS SQU_PURPLE_MAKUHITA + +#define GET_COL(selectionId)((selectionId) % (NUM_BOARD_POKES + 1)) +#define GET_ROW(selectionId)((selectionId) / (NUM_BOARD_POKES + 1) * (NUM_BOARD_POKES + 1)) + +// Flags for the above selections, used to set which spaces have been hit or bet on +#define F_WYNAUT_COL (1 << COL_WYNAUT) +#define F_AZURILL_COL (1 << COL_AZURILL) +#define F_SKITTY_COL (1 << COL_SKITTY) +#define F_MAKUHITA_COL (1 << COL_MAKUHITA) +#define F_ORANGE_ROW (1 << ROW_ORANGE) +#define F_ORANGE_WYNAUT (1 << SQU_ORANGE_WYNAUT) +#define F_ORANGE_AZURILL (1 << SQU_ORANGE_AZURILL) +#define F_ORANGE_SKITTY (1 << SQU_ORANGE_SKITTY) +#define F_ORANGE_MAKUHITA (1 << SQU_ORANGE_MAKUHITA) +#define F_GREEN_ROW (1 << ROW_GREEN) +#define F_GREEN_WYNAUT (1 << SQU_GREEN_WYNAUT) +#define F_GREEN_AZURILL (1 << SQU_GREEN_AZURILL) +#define F_GREEN_SKITTY (1 << SQU_GREEN_SKITTY) +#define F_GREEN_MAKUHITA (1 << SQU_GREEN_MAKUHITA) +#define F_PURPLE_ROW (1 << ROW_PURPLE) +#define F_PURPLE_WYNAUT (1 << SQU_PURPLE_WYNAUT) +#define F_PURPLE_AZURILL (1 << SQU_PURPLE_AZURILL) +#define F_PURPLE_SKITTY (1 << SQU_PURPLE_SKITTY) +#define F_PURPLE_MAKUHITA (1 << SQU_PURPLE_MAKUHITA) + +#define MAX_MULTIPLIER 12 + +#define PALTAG_SHADOW 1 +#define PALTAG_BALL 2 +#define PALTAG_BALL_COUNTER 3 +#define PALTAG_INTERFACE 5 +#define PALTAG_SHROOMISH 6 +#define PALTAG_TAILLOW 7 +#define PALTAG_GRID_ICONS 8 +#define PALTAG_WYNAUT 9 +#define PALTAG_AZURILL 10 +#define PALTAG_SKITTY 11 +#define PALTAG_MAKUHITA 12 + +#define GFXTAG_BOARD_ICONS 0 +#define GFXTAG_HEADERS 4 +#define GFXTAG_GRID_ICONS 5 +#define GFXTAG_BOARD_CENTER 6 +#define GFXTAG_CREDIT 7 +#define GFXTAG_CREDIT_DIGIT 8 +#define GFXTAG_MULTIPLIER 9 +#define GFXTAG_BALL_COUNTER 10 +#define GFXTAG_CURSOR 11 +#define GFXTAG_BALL 12 +#define GFXTAG_SHROOMISH_TAILLOW 13 +#define GFXTAG_SHADOW 14 + +// 2 different Roulette tables with 2 different rates (normal vs service day special) +// & 1 gets which table, >> 7 gets if ROULETTE_SPECIAL_RATE is set +#define GET_TABLE_ID(var)(((var) & 1) + (((var) >> 7) * 2)) + +#define HAS_SHROOMISH (1 << 0) +#define HAS_TAILLOW (1 << 1) + +enum { + SPR_BALL_1, + SPR_BALL_2, + SPR_BALL_3, + SPR_BALL_4, + SPR_BALL_5, + SPR_BALL_6, + SPR_6, + SPR_BOARD_ICON_ORANGE_WYNAUT, + SPR_BOARD_ICON_GREEN_AZURILL, + SPR_BOARD_ICON_PURPLE_SKITTY, + SPR_BOARD_ICON_ORANGE_MAKUHITA, + SPR_BOARD_ICON_GREEN_WYNAUT, + SPR_BOARD_ICON_PURPLE_AZURILL, + SPR_BOARD_ICON_ORANGE_SKITTY, + SPR_BOARD_ICON_GREEN_MAKUHITA, + SPR_BOARD_ICON_PURPLE_WYNAUT, + SPR_BOARD_ICON_ORANGE_AZURILL, + SPR_BOARD_ICON_GREEN_SKITTY, + SPR_BOARD_ICON_PURPLE_MAKUHITA, + SPR_19, + SPR_CREDIT, + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, + SPR_MULTIPLIER, + SPR_BALL_COUNTER_1, + SPR_BALL_COUNTER_2, + SPR_BALL_COUNTER_3, + SPR_GRID_ICON_ORANGE_WYNAUT, + SPR_GRID_ICON_2, + SPR_GRID_ICON_3, + SPR_GRID_ICON_4, + SPR_GRID_ICON_5, + SPR_GRID_ICON_6, + SPR_GRID_ICON_7, + SPR_GRID_ICON_8, + SPR_GRID_ICON_9, + SPR_GRID_ICON_10, + SPR_GRID_ICON_11, + SPR_GRID_ICON_12, + SPR_POKE_HEADER_1, + SPR_POKE_HEADER_2, + SPR_POKE_HEADER_3, + SPR_POKE_HEADER_4, + SPR_COLOR_HEADER_1, + SPR_COLOR_HEADER_2, + SPR_COLOR_HEADER_3, + SPR_WIN_SLOT_CURSOR, + SPR_GRID_BALL_1, + SPR_GRID_BALL_2, + SPR_GRID_BALL_3, + SPR_GRID_BALL_4, + SPR_GRID_BALL_5, + SPR_GRID_BALL_6, + SPR_CLEAR_MON, // Shroomish/Taillow + SPR_CLEAR_MON_SHADOW_1, + SPR_CLEAR_MON_SHADOW_2, + SPR_58, + SPR_59, + SPR_60, + SPR_61, + SPR_62, + SPR_63, +}; + +// Start points for sprite IDs that are looped over +#define SPR_BOARD_ICONS SPR_BOARD_ICON_ORANGE_WYNAUT +#define SPR_GRID_ICONS SPR_GRID_ICON_ORANGE_WYNAUT + struct StructgUnknown_083F8DF4 { u8 var00; @@ -51,49 +211,49 @@ struct StructgUnknown_083F8DF4 float var1C; }; -struct StructgUnknown_085B6154 +struct GridSelection { u8 var00; - u8 var01_0:4; - u8 var01_4:4; - u8 var02; - u8 var03; - u8 var04; - u8 var05; + u8 baseMultiplier:4; + u8 column:4; // Never read + u8 row; // Never read + u8 x; + u8 y; + u8 var05; // Never read u8 var06; - u32 var08; - u32 var0C; + u32 flag; + u32 inSelectionFlags; u16 var10; }; -struct StructgUnknown_083F8D90 +struct RouletteSlot { - u8 var00; - u8 var01; - u8 var02; - u32 var04; + u8 id1; // Never read + u8 id2; // Never read + u8 gridSquare; + u32 flag; }; -EWRAM_DATA struct Roulette +static EWRAM_DATA struct Roulette { u8 var00; u8 var01; - u8 var02; - u8 var03_0:5; - u8 var03_5:1; - u8 var03_6:1; - u8 var03_7:1; - u8 var04_0:2; + u8 partySpeciesFlags; + bool8 useTaillow:5; + bool8 var03_5:1; + bool8 var03_6:1; + bool8 var03_7:1; + u8 tableId:2; u8 var04_2:5; - u8 var04_7:1; - u32 var08; - u8 var0C[6]; - u8 var12[4]; - u8 var16[3]; - u8 var19; - u8 var1A_0:4; - u8 var1A_4:4; - u8 var1B[6]; + bool8 isSpecialRate:1; + u32 hitFlags; + u8 hitSquares[BALLS_PER_ROUND]; + u8 pokeHits[NUM_BOARD_POKES]; + u8 colorHits[NUM_BOARD_COLORS]; + u8 minBet; + u8 curBallNum:4; // Never actually gets incremented + u8 unk:4; // Never read + u8 betSelection[BALLS_PER_ROUND]; // Because curBallNum is used as the only index, only the first element is ever used (prev bet selections are never needed) u8 var21; u8 var22; u8 var23; @@ -104,7 +264,7 @@ EWRAM_DATA struct Roulette struct OamMatrix var2C; u16 var34; struct Sprite *var38; - u8 var3C[MAX_SPRITES]; // Sprite IDs + u8 spriteIds[MAX_SPRITES]; // Sprite IDs u8 var7C; u8 var7D; u8 var7E; @@ -123,70 +283,71 @@ EWRAM_DATA struct Roulette u8 varA4; u8 varA5; u8 v51[2]; - u16 varA8; - u16 varAA; - TaskFunc varAC; + u16 taskWaitDelay; + u16 taskWaitKey; + TaskFunc nextTask; u8 v46[4]; TaskFunc varB4; struct UnkStruct0 varB8; u16 tilemapBuffers[7][0x400]; u16 *unk_397C; -} *gUnknown_0203AB88 = NULL; -EWRAM_DATA u8 gUnknown_0203AB8C = 0; +} *sRoulette = NULL; -static void sub_8140814(u8); -static void sub_81408A8(u8); -static void sub_8140968(u8); -static void sub_8140994(u8); -static void sub_8140BD0(u8); -static void sub_8141040(u8); -static void sub_81410FC(u8); -static void sub_8141344(u8); -static void sub_814155C(u8); -static void sub_81415D4(u8); -static void sub_81416D4(u8); +static EWRAM_DATA u8 sTextWindowId = 0; + +static void Task_SpinBoard(u8); +static void Task_StartPlaying(u8); +static void Task_ContinuePlaying(u8); +static void Task_StopPlaying(u8); +static void Task_SelectFirstEmptySquare(u8); +static void Task_HandleBetGridInput(u8); +static void Task_SlideGridOffscreen(u8); +static void Task_RollBall(u8); +static void Task_EndBallRoll(u8); +static void Task_RecordBallHit(u8); +static void Task_SlideGridOnscreen(u8); static void sub_8141778(u8); -static void sub_814189C(u8); -static void sub_8141A18(u8); -static void sub_8141AC0(u8); -static void sub_8141B58(u8); -static void dp01t_12_3_battle_menu(u8); -static void sub_8141DE4(u8); -static void sub_8141E7C(u8); -static void sub_8141F7C(u8 taskId, TaskFunc r1, u16 r2, u16 r3); +static void Task_PrintSpinResult(u8); +static void Task_PrintPayout(u8); +static void Task_EndTurn(u8); +static void Task_TryPrintEndTurnMsg(u8); +static void Task_ClearBoard(u8); +static void ExitRoulette(u8); +static void Task_ExitRoulette(u8); +static void StartTaskAfterDelayOrInput(u8, TaskFunc, u16, u16); static void sub_8141FF4(u8); -static void sub_8142070(void); -static void sub_8142918(u8); -static void sub_814297C(u8); -static u8 sub_81420D0(u8, u8); -static bool8 sub_81421E8(u8, u8); -static void sub_8142284(u8); -static void sub_81424FC(u8); -static u8 sub_8142758(u8); +static void ResetHits(void); +static void Task_AcceptMinBet(u8); +static void Task_DeclineMinBet(u8); +static u8 RecordHit(u8, u8); +static bool8 IsHitInBetSelection(u8, u8); +static void FlashSelectionOnWheel(u8); +static void DrawGridBackground(u8); +static u8 GetMultiplier(u8); static void sub_8142814(void); -static void sub_8142C0C(u8); -static void sub_8142CD0(void); -static void sub_8142E70(u8, u8); -static void sub_8142F7C(void); -static void sub_8143038(u8, u8); -static void sub_8143150(u8); -static void sub_81431E4(void); -static void sub_8143280(struct Sprite *); -static void sub_8143314(void); -static void sub_8143514(u16); -static void sub_81436D0(u8); -static void sub_814372C(u8); -static void sub_814390C(struct Sprite *); -static void sub_814391C(void); -static void sub_814399C(struct Sprite *); -static void sub_81439C8(void); -static void sub_8143A40(void); +static void LoadOrFreeMiscSpritePalettesAndSheets(u8); +static void CreateGridSprites(void); +static void ShowHideGridIcons(bool8, u8); +static void CreateGridBallSprites(void); +static void ShowHideGridBalls(bool8, u8); +static void ShowHideWinSlotCursor(u8); +static void CreateBoardIconSprites(void); +static void SpriteCB_BoardIcon(struct Sprite *); +static void CreateInterfaceSprites(void); +static void SetCreditDigits(u16); +static void SetMultiplierSprite(u8); +static void SetBallCounterNumLeft(u8); +static void SpriteCB_GridSquare(struct Sprite *); +static void CreateBoardCenterSprite(void); +static void SpriteCB_BoardCenter(struct Sprite *); +static void CreateBoardBallSprites(void); +static void HideBoardBalls(void); static void sub_81446AC(struct Sprite *); -static void sub_81446DC(struct Sprite *); -static void sub_81448B8(struct Sprite *); +static void CreateShroomishSprite(struct Sprite *); +static void CreateTaillowSprite(struct Sprite *); static void sub_8144A24(struct Sprite *); static void sub_8144E60(struct Sprite *); -static void sub_8145294(struct Sprite *); +static void SpriteCB_Taillow(struct Sprite *); extern const u8 Roulette_Text_ControlsInstruction[]; extern const u8 Roulette_Text_KeepPlaying[]; @@ -203,8 +364,8 @@ extern const u8 Roulette_Text_NotEnoughCoins[]; static const u16 gUnknown_085B5BFC[] = INCBIN_U16("graphics/roulette/85B5BFC.gbapal"); static const u32 gUnknown_085B5DFC[] = INCBIN_U32("graphics/roulette/85B5DFC.bin.lz"); -static const u32 gUnknown_085B5FA0[] = INCBIN_U32("graphics/roulette/wheel_map.bin.lz"); -static const struct BgTemplate gUnknown_085B6140[] = +static const u32 sWheel_Tilemap[] = INCBIN_U32("graphics/roulette/wheel_map.bin.lz"); +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, @@ -234,7 +395,7 @@ static const struct BgTemplate gUnknown_085B6140[] = .baseTile = 0 } }; -static const struct WindowTemplate gUnknown_085B614C[] = +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, @@ -248,346 +409,349 @@ static const struct WindowTemplate gUnknown_085B614C[] = // BUG: Array not terminated properly //DUMMY_WIN_TEMPLATE }; -static const struct StructgUnknown_085B6154 gUnknown_085B6154[] = + +// var00, sprite id offset (from 7)? +static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = { - { + [SELECTION_NONE] = { .var00 = 0xFF, - .var01_0 = 0, - .var01_4 = 0, - .var02 = 0, - .var03 = 7, - .var04 = 7, + .baseMultiplier = 0, + .column = 0, + .row = 0, + .x = 7, + .y = 7, .var05 = 0, .var06 = 0, - .var08 = 0x0, - .var0C = 0x0, + .flag = 0, + .inSelectionFlags = 0, .var10 = 0x0, }, - { + [COL_WYNAUT] = { .var00 = 12, - .var01_0 = 4, - .var01_4 = 1, - .var02 = 0, - .var03 = 17, - .var04 = 7, + .baseMultiplier = NUM_BOARD_POKES, + .column = 1, + .row = 0, + .x = 17, + .y = 7, .var05 = 0, .var06 = 0, - .var08 = 0x2, - .var0C = 0x10842, + .flag = F_WYNAUT_COL, + .inSelectionFlags = F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT, .var10 = 0xE000, }, - { + [COL_AZURILL] = { .var00 = 13, - .var01_0 = 4, - .var01_4 = 2, - .var02 = 0, - .var03 = 20, - .var04 = 7, + .baseMultiplier = NUM_BOARD_POKES, + .column = 2, + .row = 0, + .x = 20, + .y = 7, .var05 = 0, .var06 = 0, - .var08 = 0x4, - .var0C = 0x21084, + .flag = F_AZURILL_COL, + .inSelectionFlags = F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL, .var10 = 0xE000, }, - { + [COL_SKITTY] = { .var00 = 14, - .var01_0 = 4, - .var01_4 = 3, - .var02 = 0, - .var03 = 23, - .var04 = 7, + .baseMultiplier = NUM_BOARD_POKES, + .column = 3, + .row = 0, + .x = 23, + .y = 7, .var05 = 0, .var06 = 0, - .var08 = 0x8, - .var0C = 0x42108, + .flag = F_SKITTY_COL, + .inSelectionFlags = F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY, .var10 = 0xE000, }, - { + [COL_MAKUHITA] = { .var00 = 15, - .var01_0 = 4, - .var01_4 = 4, - .var02 = 0, - .var03 = 26, - .var04 = 7, + .baseMultiplier = NUM_BOARD_POKES, + .column = 4, + .row = 0, + .x = 26, + .y = 7, .var05 = 0, .var06 = 0, - .var08 = 0x10, - .var0C = 0x84210, + .flag = F_MAKUHITA_COL, + .inSelectionFlags = F_MAKUHITA_COL | F_ORANGE_MAKUHITA | F_GREEN_MAKUHITA | F_PURPLE_MAKUHITA, .var10 = 0xE000, }, - { + [ROW_ORANGE] = { .var00 = 16, - .var01_0 = 3, - .var01_4 = 0, - .var02 = 1, - .var03 = 14, - .var04 = 10, + .baseMultiplier = NUM_BOARD_COLORS, + .column = 0, + .row = 1, + .x = 14, + .y = 10, .var05 = 0, .var06 = 12, - .var08 = 0x20, - .var0C = 0x3E0, + .flag = F_ORANGE_ROW, + .inSelectionFlags = F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA, .var10 = 0x249, }, - { + [SQU_ORANGE_WYNAUT] = { .var00 = 0, - .var01_0 = 12, - .var01_4 = 1, - .var02 = 1, - .var03 = 17, - .var04 = 10, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 1, + .row = 1, + .x = 17, + .y = 10, .var05 = 3, .var06 = 3, - .var08 = 0x40, - .var0C = 0x40, + .flag = F_ORANGE_WYNAUT, + .inSelectionFlags = F_ORANGE_WYNAUT, .var10 = 0x2001, }, - { + [SQU_ORANGE_AZURILL] = { .var00 = 9, - .var01_0 = 12, - .var01_4 = 2, - .var02 = 1, - .var03 = 20, - .var04 = 10, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 2, + .row = 1, + .x = 20, + .y = 10, .var05 = 3, .var06 = 3, - .var08 = 0x80, - .var0C = 0x80, + .flag = F_ORANGE_AZURILL, + .inSelectionFlags = F_ORANGE_AZURILL, .var10 = 0x2200, }, - { + [SQU_ORANGE_SKITTY] = { .var00 = 6, - .var01_0 = 12, - .var01_4 = 3, - .var02 = 1, - .var03 = 23, - .var04 = 10, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 3, + .row = 1, + .x = 23, + .y = 10, .var05 = 3, .var06 = 3, - .var08 = 0x100, - .var0C = 0x100, + .flag = F_ORANGE_SKITTY, + .inSelectionFlags = F_ORANGE_SKITTY, .var10 = 0x2040, }, - { + [SQU_ORANGE_MAKUHITA] = { .var00 = 3, - .var01_0 = 12, - .var01_4 = 4, - .var02 = 1, - .var03 = 26, - .var04 = 10, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 4, + .row = 1, + .x = 26, + .y = 10, .var05 = 3, .var06 = 3, - .var08 = 0x200, - .var0C = 0x200, + .flag = F_ORANGE_MAKUHITA, + .inSelectionFlags = F_ORANGE_MAKUHITA, .var10 = 0x2008, }, - { + [ROW_GREEN] = { .var00 = 17, - .var01_0 = 3, - .var01_4 = 0, - .var02 = 2, - .var03 = 14, - .var04 = 13, + .baseMultiplier = NUM_BOARD_COLORS, + .column = 0, + .row = 2, + .x = 14, + .y = 13, .var05 = 3, .var06 = 15, - .var08 = 0x400, - .var0C = 0x7C00, + .flag = F_GREEN_ROW, + .inSelectionFlags = F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA, .var10 = 0x492, }, - { + [SQU_GREEN_WYNAUT] = { .var00 = 4, - .var01_0 = 12, - .var01_4 = 1, - .var02 = 2, - .var03 = 17, - .var04 = 13, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 1, + .row = 2, + .x = 17, + .y = 13, .var05 = 6, .var06 = 6, - .var08 = 0x800, - .var0C = 0x800, + .flag = F_GREEN_WYNAUT, + .inSelectionFlags = F_GREEN_WYNAUT, .var10 = 0x2010, }, - { + [SQU_GREEN_AZURILL] = { .var00 = 1, - .var01_0 = 12, - .var01_4 = 2, - .var02 = 2, - .var03 = 20, - .var04 = 13, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 2, + .row = 2, + .x = 20, + .y = 13, .var05 = 6, .var06 = 6, - .var08 = 0x1000, - .var0C = 0x1000, + .flag = F_GREEN_AZURILL, + .inSelectionFlags = F_GREEN_AZURILL, .var10 = 0x2002, }, - { + [SQU_GREEN_SKITTY] = { .var00 = 10, - .var01_0 = 12, - .var01_4 = 3, - .var02 = 2, - .var03 = 23, - .var04 = 13, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 3, + .row = 2, + .x = 23, + .y = 13, .var05 = 6, .var06 = 6, - .var08 = 0x2000, - .var0C = 0x2000, + .flag = F_GREEN_SKITTY, + .inSelectionFlags = F_GREEN_SKITTY, .var10 = 0x2400, }, - { + [SQU_GREEN_MAKUHITA] = { .var00 = 7, - .var01_0 = 12, - .var01_4 = 4, - .var02 = 2, - .var03 = 26, - .var04 = 13, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 4, + .row = 2, + .x = 26, + .y = 13, .var05 = 6, .var06 = 6, - .var08 = 0x4000, - .var0C = 0x4000, + .flag = F_GREEN_MAKUHITA, + .inSelectionFlags = F_GREEN_MAKUHITA, .var10 = 0x2080, }, - { + [ROW_PURPLE] = { .var00 = 18, - .var01_0 = 3, - .var01_4 = 0, - .var02 = 3, - .var03 = 14, - .var04 = 16, + .baseMultiplier = NUM_BOARD_COLORS, + .column = 0, + .row = 3, + .x = 14, + .y = 16, .var05 = 6, .var06 = 18, - .var08 = 0x8000, - .var0C = 0xF8000, + .flag = F_PURPLE_ROW, + .inSelectionFlags = F_PURPLE_ROW | F_PURPLE_WYNAUT | F_PURPLE_AZURILL | F_PURPLE_SKITTY | F_PURPLE_MAKUHITA, .var10 = 0x924, }, - { + [SQU_PURPLE_WYNAUT] = { .var00 = 8, - .var01_0 = 12, - .var01_4 = 1, - .var02 = 3, - .var03 = 17, - .var04 = 16, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 1, + .row = 3, + .x = 17, + .y = 16, .var05 = 9, .var06 = 9, - .var08 = 0x10000, - .var0C = 0x10000, + .flag = F_PURPLE_WYNAUT, + .inSelectionFlags = F_PURPLE_WYNAUT, .var10 = 0x2100, }, - { + [SQU_PURPLE_AZURILL] = { .var00 = 5, - .var01_0 = 12, - .var01_4 = 2, - .var02 = 3, - .var03 = 20, - .var04 = 16, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 2, + .row = 3, + .x = 20, + .y = 16, .var05 = 9, .var06 = 9, - .var08 = 0x20000, - .var0C = 0x20000, + .flag = F_PURPLE_AZURILL, + .inSelectionFlags = F_PURPLE_AZURILL, .var10 = 0x2020, }, - { + [SQU_PURPLE_SKITTY] = { .var00 = 2, - .var01_0 = 12, - .var01_4 = 3, - .var02 = 3, - .var03 = 23, - .var04 = 16, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 3, + .row = 3, + .x = 23, + .y = 16, .var05 = 9, .var06 = 9, - .var08 = 0x40000, - .var0C = 0x40000, + .flag = F_PURPLE_SKITTY, + .inSelectionFlags = F_PURPLE_SKITTY, .var10 = 0x2004, }, - { + [SQU_PURPLE_MAKUHITA] = { .var00 = 11, - .var01_0 = 12, - .var01_4 = 4, - .var02 = 3, - .var03 = 26, - .var04 = 16, + .baseMultiplier = NUM_ROULETTE_SLOTS, + .column = 4, + .row = 3, + .x = 26, + .y = 16, .var05 = 9, .var06 = 9, - .var08 = 0x80000, - .var0C = 0x80000, + .flag = F_PURPLE_MAKUHITA, + .inSelectionFlags = F_PURPLE_MAKUHITA, .var10 = 0x2800, }, }; -static const struct StructgUnknown_083F8D90 gUnknown_085B62E4[] = +static const struct RouletteSlot sRouletteSlots[] = { { - .var00 = 0, - .var01 = 1, - .var02 = 6, - .var04 = 0x40, + .id1 = 0, + .id2 = 1, + .gridSquare = SQU_ORANGE_WYNAUT, + .flag = F_ORANGE_WYNAUT, }, { - .var00 = 1, - .var01 = 3, - .var02 = 12, - .var04 = 0x1000, + .id1 = 1, + .id2 = 3, + .gridSquare = SQU_GREEN_AZURILL, + .flag = F_GREEN_AZURILL, }, { - .var00 = 2, - .var01 = 5, - .var02 = 18, - .var04 = 0x40000, + .id1 = 2, + .id2 = 5, + .gridSquare = SQU_PURPLE_SKITTY, + .flag = F_PURPLE_SKITTY, }, { - .var00 = 3, - .var01 = 7, - .var02 = 9, - .var04 = 0x200, + .id1 = 3, + .id2 = 7, + .gridSquare = SQU_ORANGE_MAKUHITA, + .flag = F_ORANGE_MAKUHITA, }, { - .var00 = 4, - .var01 = 9, - .var02 = 11, - .var04 = 0x800, + .id1 = 4, + .id2 = 9, + .gridSquare = SQU_GREEN_WYNAUT, + .flag = F_GREEN_WYNAUT, }, { - .var00 = 5, - .var01 = 11, - .var02 = 17, - .var04 = 0x20000, + .id1 = 5, + .id2 = 11, + .gridSquare = SQU_PURPLE_AZURILL, + .flag = F_PURPLE_AZURILL, }, { - .var00 = 6, - .var01 = 13, - .var02 = 8, - .var04 = 0x100, + .id1 = 6, + .id2 = 13, + .gridSquare = SQU_ORANGE_SKITTY, + .flag = F_ORANGE_SKITTY, }, { - .var00 = 7, - .var01 = 15, - .var02 = 14, - .var04 = 0x4000, + .id1 = 7, + .id2 = 15, + .gridSquare = SQU_GREEN_MAKUHITA, + .flag = F_GREEN_MAKUHITA, }, { - .var00 = 8, - .var01 = 17, - .var02 = 16, - .var04 = 0x10000, + .id1 = 8, + .id2 = 17, + .gridSquare = SQU_PURPLE_WYNAUT, + .flag = F_PURPLE_WYNAUT, }, { - .var00 = 9, - .var01 = 19, - .var02 = 7, - .var04 = 0x80, + .id1 = 9, + .id2 = 19, + .gridSquare = SQU_ORANGE_AZURILL, + .flag = F_ORANGE_AZURILL, }, { - .var00 = 10, - .var01 = 21, - .var02 = 13, - .var04 = 0x2000, + .id1 = 10, + .id2 = 21, + .gridSquare = SQU_GREEN_SKITTY, + .flag = F_GREEN_SKITTY, }, { - .var00 = 11, - .var01 = 23, - .var02 = 19, - .var04 = 0x80000, + .id1 = 11, + .id2 = 23, + .gridSquare = SQU_PURPLE_MAKUHITA, + .flag = F_PURPLE_MAKUHITA, }, }; -static const u8 gUnknown_085B6344[] = {1, 3, 1, 6}; +static const u8 sTableMinBets[] = {1, 3, 1, 6}; + static const struct StructgUnknown_083F8DF4 gUnknown_085B6348[] = { { @@ -792,88 +956,88 @@ static const struct UnkStruct1 gUnknown_085B63F0[] = } }; -static const struct YesNoFuncTable gUnknown_085B6408 = +static const struct YesNoFuncTable sYesNoTable_AcceptMinBet = { - sub_8142918, - sub_814297C + Task_AcceptMinBet, + Task_DeclineMinBet }; -static const struct YesNoFuncTable gUnknown_085B6410 = +static const struct YesNoFuncTable sYesNoTable_KeepPlaying = { - sub_8140968, - sub_8140994 + Task_ContinuePlaying, + Task_StopPlaying }; -static void sub_8140238(void) +static void CB2_Roulette(void) { RunTasks(); AnimateSprites(); BuildOamBuffer(); - if (gUnknown_0203AB88->varB8.var00) - task_tutorial_controls_fadein(&gUnknown_0203AB88->varB8); + if (sRoulette->varB8.var00) + task_tutorial_controls_fadein(&sRoulette->varB8); } -static void sub_8140264(void) +static void VBlankCB_Roulette(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); sub_8142814(); - SetGpuReg(REG_OFFSET_BG1HOFS, 0x200 - gUnknown_0203AB88->var26); - if (gUnknown_0203AB88->var01) - SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0203AB88->var34); - if (gUnknown_0203AB88->var2A != 0) + SetGpuReg(REG_OFFSET_BG1HOFS, 0x200 - sRoulette->var26); + if (sRoulette->var01) + SetGpuReg(REG_OFFSET_BLDALPHA, sRoulette->var34); + if (sRoulette->var2A != 0) { - DmaCopy16(3, &gUnknown_0203AB88->tilemapBuffers[2][0xE0], (void *)BG_SCREEN_ADDR(4) + 0x1C0, 0x340); - gUnknown_0203AB88->var2A = 0; + DmaCopy16(3, &sRoulette->tilemapBuffers[2][0xE0], (void *)BG_SCREEN_ADDR(4) + 0x1C0, 0x340); + sRoulette->var2A = 0; } - switch (gUnknown_0203AB88->var28) + switch (sRoulette->var28) { case 1: SetBgAttribute(0, BG_ATTR_CHARBASEINDEX, 0); ShowBg(0); - DmaCopy16(3, &gUnknown_0203AB88->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); - gUnknown_0203AB88->var28 = 2; + DmaCopy16(3, &sRoulette->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); + sRoulette->var28 = 2; break; case 2: - DmaCopy16(3, &gUnknown_0203AB88->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); + DmaCopy16(3, &sRoulette->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); break; case 0xFF: SetBgAttribute(0, BG_ATTR_CHARBASEINDEX, 2); ShowBg(0); DmaFill16(3, 0, (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); - gUnknown_0203AB88->var28 = 0; + sRoulette->var28 = 0; case 0: break; } } -static void sub_8140388(void) +static void InitRouletteBgAndWindows(void) { u32 size = 0; - gUnknown_0203AB88 = AllocZeroed(sizeof(*gUnknown_0203AB88)); + sRoulette = AllocZeroed(sizeof(*sRoulette)); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(1, gUnknown_085B6140, ARRAY_COUNT(gUnknown_085B6140)); - SetBgTilemapBuffer(0, gUnknown_0203AB88->tilemapBuffers[0]); - SetBgTilemapBuffer(1, gUnknown_0203AB88->tilemapBuffers[2]); - SetBgTilemapBuffer(2, gUnknown_0203AB88->tilemapBuffers[6]); - InitWindows(gUnknown_085B614C); + InitBgsFromTemplates(1, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + SetBgTilemapBuffer(0, sRoulette->tilemapBuffers[0]); + SetBgTilemapBuffer(1, sRoulette->tilemapBuffers[2]); + SetBgTilemapBuffer(2, sRoulette->tilemapBuffers[6]); + InitWindows(sWindowTemplates); InitTextBoxGfxAndPrinters(); - gUnknown_0203AB8C = 0; - gUnknown_0203AB88->unk_397C = malloc_and_decompress(gUnknown_085B5DFC, &size); + sTextWindowId = 0; + sRoulette->unk_397C = malloc_and_decompress(gUnknown_085B5DFC, &size); } -static void sub_8140418(void) +static void FreeRoulette(void) { - FREE_AND_SET_NULL(gUnknown_0203AB88->unk_397C); + FREE_AND_SET_NULL(sRoulette->unk_397C); FreeAllWindowBuffers(); UnsetBgTilemapBuffer(0); UnsetBgTilemapBuffer(1); UnsetBgTilemapBuffer(2); ResetBgsAndClearDma3BusyFlags(0); - memset(gUnknown_0203AB88, 0, sizeof(*gUnknown_0203AB88)); - FREE_AND_SET_NULL(gUnknown_0203AB88); + memset(sRoulette, 0, sizeof(*sRoulette)); + FREE_AND_SET_NULL(sRoulette); } static void sub_8140470(void) @@ -881,26 +1045,26 @@ static void sub_8140470(void) u8 i; u16 arr[3] = {RGB(24, 4, 10), RGB(10, 19, 6), RGB(24, 4, 10)}; // the third is never used ? - gUnknown_0203AB88->var04_0 = (gSpecialVar_0x8004 & 1); + sRoulette->tableId = (gSpecialVar_0x8004 & 1); - if (gSpecialVar_0x8004 & 0x80) - gUnknown_0203AB88->var04_7 = 1; + if (gSpecialVar_0x8004 & ROULETTE_SPECIAL_RATE) + sRoulette->isSpecialRate = TRUE; - gUnknown_0203AB88->var22 = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var03; - gUnknown_0203AB88->var23 = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var04; - gUnknown_0203AB88->var19 = gUnknown_085B6344[gUnknown_0203AB88->var04_0 + gUnknown_0203AB88->var04_7 * 2]; - gUnknown_0203AB88->var1A_4 = 1; + sRoulette->var22 = gUnknown_085B6348[sRoulette->tableId].var03; + sRoulette->var23 = gUnknown_085B6348[sRoulette->tableId].var04; + sRoulette->minBet = sTableMinBets[sRoulette->tableId + sRoulette->isSpecialRate * 2]; + sRoulette->unk = 1; - if (gUnknown_0203AB88->var19 == 1) + if (sRoulette->minBet == 1) gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = arr[0]; else gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = arr[1]; - sub_8151678(&gUnknown_0203AB88->varB8); + sub_8151678(&sRoulette->varB8); for (i = 0; i < 13; i++) { - sub_815168C(&gUnknown_0203AB88->varB8, i, &gUnknown_085B6388[i]); + sub_815168C(&sRoulette->varB8, i, &gUnknown_085B6388[i]); } for (i = 0; i < PARTY_SIZE; i++) @@ -908,17 +1072,26 @@ static void sub_8140470(void) switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2)) { case SPECIES_SHROOMISH: - gUnknown_0203AB88->var02 |= 0x1; + sRoulette->partySpeciesFlags |= HAS_SHROOMISH; break; case SPECIES_TAILLOW: - gUnknown_0203AB88->var02 |= 0x2; + sRoulette->partySpeciesFlags |= HAS_TAILLOW; break; } } RtcCalcLocalTime(); } -static void sub_81405CC(void) +// Task data for the roulette game tasks, starting with Task_StartPlaying +#define tMultiplier data[2] +#define tSelectionId data[4] +#define tWonBet data[5] +#define tBallNum data[6] +#define tConsecutiveWins data[11] +#define tWinningSquare data[12] +#define tCoins data[13] + +static void CB2_LoadRoulette(void) { u8 taskId; @@ -932,7 +1105,7 @@ static void sub_81405CC(void) ResetAllBgsCoordinates(); break; case 1: - sub_8140388(); + InitRouletteBgAndWindows(); DeactivateAllTextPrinters(); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE | BLDCNT_TGT2_BG2 | @@ -947,35 +1120,35 @@ static void sub_81405CC(void) break; case 3: LoadPalette(&gUnknown_085B5BFC, 0, 0x1C0); - DecompressAndCopyTileDataToVram(1, gRouletteMenuTiles, 0, 0, 0); - DecompressAndCopyTileDataToVram(2, gRouletteWheelTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gRouletteMenu_Gfx, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, gRouletteWheel_Gfx, 0, 0, 0); break; case 4: if (FreeTempTileDataBuffersIfPossible()) return; sub_8140470(); - CopyToBgTilemapBuffer(2, gUnknown_085B5FA0, 0, 0); + CopyToBgTilemapBuffer(2, sWheel_Tilemap, 0, 0); break; case 5: - sub_8142C0C(0); - sub_81439C8(); - sub_814391C(); - sub_8143314(); - sub_8142CD0(); - sub_8142F7C(); - sub_81431E4(); + LoadOrFreeMiscSpritePalettesAndSheets(FALSE); + CreateBoardBallSprites(); + CreateBoardCenterSprite(); + CreateInterfaceSprites(); + CreateGridSprites(); + CreateGridBallSprites(); + CreateBoardIconSprites(); break; case 6: AnimateSprites(); BuildOamBuffer(); - sub_8143514(GetCoins()); - sub_814372C(6); - sub_81436D0(0); - sub_81424FC(0); - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); + SetCreditDigits(GetCoins()); + SetBallCounterNumLeft(BALLS_PER_ROUND); + SetMultiplierSprite(SELECTION_NONE); + DrawGridBackground(SELECTION_NONE); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); gSpriteCoordOffsetX = -60; gSpriteCoordOffsetY = 0; break; @@ -991,39 +1164,39 @@ static void sub_81405CC(void) break; case 8: EnableInterrupts(INTR_FLAG_VBLANK); - SetVBlankCallback(sub_8140264); + SetVBlankCallback(VBlankCB_Roulette); BeginHardwarePaletteFade(0xFF, 0, 16, 0, 1); - taskId = gUnknown_0203AB88->varA4 = CreateTask(sub_81408A8, 0); - gTasks[taskId].data[6] = 6; - gTasks[taskId].data[13] = GetCoins(); + taskId = sRoulette->varA4 = CreateTask(Task_StartPlaying, 0); + gTasks[taskId].tBallNum = BALLS_PER_ROUND; + gTasks[taskId].tCoins = GetCoins(); AlertTVThatPlayerPlayedRoulette(GetCoins()); - gUnknown_0203AB88->varA5 = CreateTask(sub_8140814, 1); - SetMainCallback2(sub_8140238); + sRoulette->varA5 = CreateTask(Task_SpinBoard, 1); + SetMainCallback2(CB2_Roulette); return; } gMain.state++; } -static void sub_8140814(u8 unused) +static void Task_SpinBoard(u8 taskId) { s16 sin; s16 cos; - if (gUnknown_0203AB88->var21++ == gUnknown_0203AB88->var23) + if (sRoulette->var21++ == sRoulette->var23) { - gUnknown_0203AB88->var21 = 0; - if ((gUnknown_0203AB88->var24 -= gUnknown_0203AB88->var22) < 0) - gUnknown_0203AB88->var24 = 360 - gUnknown_0203AB88->var22; + sRoulette->var21 = 0; + if ((sRoulette->var24 -= sRoulette->var22) < 0) + sRoulette->var24 = 360 - sRoulette->var22; } - sin = Sin2(gUnknown_0203AB88->var24); - cos = Cos2(gUnknown_0203AB88->var24); + sin = Sin2(sRoulette->var24); + cos = Cos2(sRoulette->var24); sin = sin / 16; - gUnknown_0203AB88->var2C.a = gUnknown_0203AB88->var2C.d = cos / 16; - gUnknown_0203AB88->var2C.b = sin; - gUnknown_0203AB88->var2C.c = -sin; + sRoulette->var2C.a = sRoulette->var2C.d = cos / 16; + sRoulette->var2C.b = sin; + sRoulette->var2C.c = -sin; } -static void sub_81408A8(u8 taskId) +static void Task_StartPlaying(u8 taskId) { if (UpdatePaletteFade() == 0) { @@ -1031,222 +1204,227 @@ static void sub_81408A8(u8 taskId) BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BD); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8)); - gTasks[taskId].data[6] = 0; + gTasks[taskId].tBallNum = 0; sub_8141FF4(taskId); - sub_8142070(); - sub_8143A40(); - sub_81424FC(0); - sub_814372C(6); - sub_8141F7C(taskId, sub_8140968, 0xFFFF, 0x3); + ResetHits(); + HideBoardBalls(); + DrawGridBackground(SELECTION_NONE); + SetBallCounterNumLeft(BALLS_PER_ROUND); + StartTaskAfterDelayOrInput(taskId, Task_ContinuePlaying, 0xFFFF, A_BUTTON | B_BUTTON); } } -static void sub_8140914(u8 taskId) +static void Task_AskKeepPlaying(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DrawStdWindowFrame(gUnknown_0203AB8C, 0); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_KeepPlaying, 0, 1, TEXT_SPEED_FF, 0); - CopyWindowToVram(gUnknown_0203AB8C, 3); - DoYesNoFuncWithChoice(taskId, &gUnknown_085B6410); + DrawStdWindowFrame(sTextWindowId, 0); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_KeepPlaying, 0, 1, TEXT_SPEED_FF, 0); + CopyWindowToVram(sTextWindowId, 3); + DoYesNoFuncWithChoice(taskId, &sYesNoTable_KeepPlaying); } -static void sub_8140968(u8 taskId) +static void Task_ContinuePlaying(u8 taskId) { ClearStdWindowAndFrame(0, TRUE); - gTasks[taskId].func = sub_8140BD0; + gTasks[taskId].func = Task_SelectFirstEmptySquare; } -static void sub_8140994(u8 taskId) +static void Task_StopPlaying(u8 taskId) { - DestroyTask(gUnknown_0203AB88->varA5); - sub_8141DE4(taskId); + DestroyTask(sRoulette->varA5); + ExitRoulette(taskId); } -static void sub_81409B8(u8 r0) +static void UpdateGridSelectionRect(u8 selectionId) { u8 temp0, temp1; - switch (r0) + switch (selectionId) { - case 0: - sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + case SELECTION_NONE: + ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); break; - case 1: - case 2: - case 3: - case 4: - temp0 = (r0 * 3 + 14); - sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13); - sub_8152058(&gUnknown_0203AB88->tilemapBuffers[0][0], &gUnknown_0203AB88->unk_397C[281], temp0, 7, 3, 13); + case COL_WYNAUT: + case COL_AZURILL: + case COL_SKITTY: + case COL_MAKUHITA: + temp0 = (selectionId * 3 + 14); + ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + SetGridSelectionRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->unk_397C[281], temp0, 7, 3, 13); break; - case 0x5: - case 0xA: - case 0xF: - temp1 = ((r0 - 1) / 5 * 3 + 10); - sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13); - sub_8152058(&gUnknown_0203AB88->tilemapBuffers[0][0], &gUnknown_0203AB88->unk_397C[320], 14, temp1, 16, 3); + case ROW_ORANGE: + case ROW_GREEN: + case ROW_PURPLE: + temp1 = ((selectionId - 1) / 5 * 3 + 10); + ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + SetGridSelectionRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->unk_397C[320], 14, temp1, 16, 3); break; + // Individual square default: - temp0 = ((r0 % 5) * 3 + 14); - temp1 = ((r0 - 1) / 5 * 3 + 7); - sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13); - sub_8152058(&gUnknown_0203AB88->tilemapBuffers[0][0], &gUnknown_0203AB88->unk_397C[272], temp0, temp1, 3, 3); + temp0 = GET_COL(selectionId) * 3 + 14; + temp1 = ((selectionId - 1) / 5 * 3 + 7); + ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + SetGridSelectionRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->unk_397C[272], temp0, temp1, 3, 3); break; } } -static void sub_8140B64(u8 taskId) +static void UpdateGridSelection(u8 taskId) { - sub_81436D0(gTasks[taskId].data[4]); - sub_81409B8(gTasks[taskId].data[4]); + SetMultiplierSprite(gTasks[taskId].tSelectionId); + UpdateGridSelectionRect(gTasks[taskId].tSelectionId); } -static void sub_8140B8C(u8 taskId) +static void Task_StartHandleBetGridInput(u8 taskId) { - gUnknown_0203AB88->var28 = 1; - sub_81409B8(gTasks[taskId].data[4]); - gUnknown_0203AB88->var23 = 2; - gUnknown_0203AB88->var21 = 0; - gTasks[taskId].func = sub_8141040; + sRoulette->var28 = 1; + UpdateGridSelectionRect(gTasks[taskId].tSelectionId); + sRoulette->var23 = 2; + sRoulette->var21 = 0; + gTasks[taskId].func = Task_HandleBetGridInput; } -static void sub_8140BD0(u8 taskId) +static void Task_SelectFirstEmptySquare(u8 taskId) { s16 i; - if (gUnknown_0203AB88->var08 & 0x20) + if (sRoulette->hitFlags & F_ORANGE_ROW) { - for (i = 11; i < 14; i++) + // If the whole orange row is filled, get first in green row + for (i = SQU_GREEN_WYNAUT; i < SQU_GREEN_MAKUHITA; i++) { - if ((gUnknown_0203AB88->var08 & gUnknown_085B6154[i].var08) == 0) + if (!(sRoulette->hitFlags & sGridSelections[i].flag)) break; } } else { - for (i = 6; i < 10; i++) + // Otherwise get first in orange row + // With only 6 balls both rows can't be filled, no need to check purple row + for (i = SQU_ORANGE_WYNAUT; i <= SQU_ORANGE_MAKUHITA; i++) // <= is accidental, but it will never get that far { - if ((gUnknown_0203AB88->var08 & gUnknown_085B6154[i].var08) == 0) + if (!(sRoulette->hitFlags & sGridSelections[i].flag)) break; } } - gTasks[taskId].data[4] = i; + gTasks[taskId].tSelectionId = i; sub_8141FF4(taskId); - sub_81424FC(gTasks[taskId].data[4]); - sub_81436D0(gTasks[taskId].data[4]); - sub_8142284(gTasks[taskId].data[4]); + DrawGridBackground(gTasks[taskId].tSelectionId); + SetMultiplierSprite(gTasks[taskId].tSelectionId); + FlashSelectionOnWheel(gTasks[taskId].tSelectionId); gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_8140B8C; + gTasks[taskId].func = Task_StartHandleBetGridInput; } -static u8 sub_8140CA8(s16 *r0, u8 r1) +static bool8 CanMoveSelectionInDir(s16 *selectionId, u8 dir) { s8 temp1 = 0; s8 temp = 0; - s8 arr[4] = {-5, 5, -1, 1}; - s8 t = *r0; + s8 moveOffsets[4] = {-5, 5, -1, 1}; + s8 originalSelection = *selectionId; - switch (r1) + switch (dir) { - case 0: - case 1: - temp1 = (*r0 % 5); - temp = temp1 + 15; - if (temp1 == 0) + case 0: // UP + case 1: // DOWN + temp1 = GET_COL(*selectionId); + temp = temp1 + ROW_PURPLE; + if (temp1 == SELECTION_NONE) temp1 = 5; break; - case 2: - case 3: - temp1 = (*r0 / 5) * 5; - temp = temp1 + 4; - if (temp1 == 0) + case 2: // LEFT + case 3: // RIGHT + temp1 = GET_ROW(*selectionId); + temp = temp1 + COL_MAKUHITA; + if (temp1 == SELECTION_NONE) temp1 = 1; break; } - *r0 += arr[r1]; + *selectionId += moveOffsets[dir]; - if (*r0 < temp1) - *r0 = temp; + if (*selectionId < temp1) + *selectionId = temp; - if (*r0 > temp) - *r0 = temp1; + if (*selectionId > temp) + *selectionId = temp1; - if (*r0 != t) + if (*selectionId != originalSelection) return TRUE; return FALSE; } -static void sub_8140D6C(u8 r0) +static void ProcessBetGridInput(u8 taskId) { u8 z = 0; - bool8 var0 = FALSE; - if (!(gMain.newKeys & DPAD_UP) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 0))) - if (!(gMain.newKeys & DPAD_DOWN) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 1))) - if (!(gMain.newKeys & DPAD_LEFT) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 2))) - if (!(gMain.newKeys & DPAD_RIGHT) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 3))) - if (var0) - { - u8 i; - sub_81424FC(gTasks[r0].data[4]); - sub_8140B64(r0); - gTasks[r0].data[1] = z; - PlaySE(SE_SELECT); - sub_8151A9C(&gUnknown_0203AB88->varB8, 0xFFFF); - gUnknown_0203AB88->varB8.var04[13].var00_7 = gUnknown_0203AB88->varB8.var04[14].var00_7 = gUnknown_0203AB88->varB8.var04[15].var00_7 = 0; - sub_8142284(gTasks[r0].data[4]); - for (i = 0; i < 4; i++) - { - gSprites[gUnknown_0203AB88->var3C[i + 41]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[i + 41]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[i + 41]].anims)->type; - } - if ((u16)(gTasks[r0].data[4] - 1) < 4 && !(gUnknown_0203AB88->var08 & gUnknown_085B6154[gTasks[r0].data[4]].var08) ) - { - z = gTasks[r0].data[4] - 1; - gSprites[gUnknown_0203AB88->var3C[z + 41]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[z + 41]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[z + 41]].anims + 1)->type; - } - } + bool8 dirPressed = FALSE; + if ((!(JOY_NEW(DPAD_UP)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 0))) + && (!(JOY_NEW(DPAD_DOWN)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 1))) + && (!(JOY_NEW(DPAD_LEFT)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 2))) + && (!(JOY_NEW(DPAD_RIGHT)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 3))) + && (dirPressed)) + { + u8 i; + DrawGridBackground(gTasks[taskId].tSelectionId); + UpdateGridSelection(taskId); + gTasks[taskId].data[1] = z; + PlaySE(SE_SELECT); + sub_8151A9C(&sRoulette->varB8, 0xFFFF); + sRoulette->varB8.var04[13].var00_7 = sRoulette->varB8.var04[14].var00_7 = sRoulette->varB8.var04[15].var00_7 = 0; + FlashSelectionOnWheel(gTasks[taskId].tSelectionId); + for (i = 0; i < NUM_BOARD_POKES; i++) + { + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].anims)->type; + } + if ((u16)(gTasks[taskId].tSelectionId - 1) < 4 && !(sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag) ) + { + z = gTasks[taskId].tSelectionId - 1; + gSprites[sRoulette->spriteIds[z + SPR_POKE_HEADER_1]].oam.tileNum = + gSprites[sRoulette->spriteIds[z + SPR_POKE_HEADER_1]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[z + SPR_POKE_HEADER_1]].anims + 1)->type; + } + } } static void sub_8140F6C(u8 r0) { IncrementDailyRouletteUses(); - gUnknown_0203AB88->var28 = 0xFF; - if (gUnknown_0203AB88->var19 == 1) - gUnknown_0203AB88->var23 = 1; + sRoulette->var28 = 0xFF; + if (sRoulette->minBet == 1) + sRoulette->var23 = 1; else - gUnknown_0203AB88->var23 = 0; - gUnknown_0203AB88->var21 = 0; + sRoulette->var23 = 0; + sRoulette->var21 = 0; gTasks[r0].data[1] = 32; - gTasks[r0].func = sub_81410FC; + gTasks[r0].func = Task_SlideGridOffscreen; } -static void sub_8140FC4(u8 taskId) +static void Task_PlaceBet(u8 taskId) { - gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0] = gTasks[taskId].data[4]; - gTasks[taskId].data[2] = sub_8142758(gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]); - sub_81436D0(gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]); - if ((gTasks[taskId].data[13] -= gUnknown_0203AB88->var19) < 0) - gTasks[taskId].data[13] = 0; - sub_8143514(gTasks[taskId].data[13]); + sRoulette->betSelection[sRoulette->curBallNum] = gTasks[taskId].tSelectionId; + gTasks[taskId].tMultiplier = GetMultiplier(sRoulette->betSelection[sRoulette->curBallNum]); + SetMultiplierSprite(sRoulette->betSelection[sRoulette->curBallNum]); + if ((gTasks[taskId].tCoins -= sRoulette->minBet) < 0) + gTasks[taskId].tCoins = 0; + SetCreditDigits(gTasks[taskId].tCoins); gTasks[taskId].func = sub_8140F6C; } -static void sub_8141040(u8 taskId) +static void Task_HandleBetGridInput(u8 taskId) { - sub_8140D6C(taskId); + ProcessBetGridInput(taskId); + // Flash selection rect switch (gTasks[taskId].data[1]) { case 0: - sub_81409B8(gTasks[taskId].data[4]); + UpdateGridSelectionRect(gTasks[taskId].tSelectionId); gTasks[taskId].data[1]++; break; case 30: - sub_81409B8(0); + UpdateGridSelectionRect(SELECTION_NONE); gTasks[taskId].data[1]++; break; case 59: @@ -1256,83 +1434,78 @@ static void sub_8141040(u8 taskId) gTasks[taskId].data[1]++; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { - if ((gUnknown_0203AB88->var08 & gUnknown_085B6154[gTasks[taskId].data[4]].var08)) + if ((sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag)) + { + // Ball has already landed on this space PlaySE(SE_BOO); + } else { m4aSongNumStart(SE_REGI); - gTasks[taskId].func = sub_8140FC4; + gTasks[taskId].func = Task_PlaceBet; } } } -static void sub_81410FC(u8 taskId) +static void Task_SlideGridOffscreen(u8 taskId) { if (gTasks[taskId].data[1]-- > 0) { if (gTasks[taskId].data[1] > 2) gSpriteCoordOffsetX += 2; - if ((gUnknown_0203AB88->var26 += 4) == 104) - gSprites[gUnknown_0203AB88->var3C[25]].callback = &SpriteCallbackDummy; + if ((sRoulette->var26 += 4) == 104) + gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = &SpriteCallbackDummy; } else { - sub_8142E70(1, -1); - sub_8143038(1, -1); - gTasks[taskId].func = sub_8141344; + ShowHideGridIcons(TRUE, -1); + ShowHideGridBalls(TRUE, -1); + gTasks[taskId].func = Task_RollBall; gTasks[taskId].data[1] = 0; } } static u8 sub_814118C(u16 r0, u16 r1) { - switch (gUnknown_0203AB88->var02) + switch (sRoulette->partySpeciesFlags) { - case 1: // SHROOMISH - case 2: // TAILLOW + case HAS_SHROOMISH: + case HAS_TAILLOW: // one of the two is in party if (gLocalTime.hours > 3 && gLocalTime.hours < 10) { if (r0 < 12 || (r1 & 1)) - { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2; - } + return gUnknown_085B6348[sRoulette->tableId].var02 / 2; else - { return 1; - } } - else if (!(r1 & 0x3)) + else if (!(r1 & 0x3)) { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2; + return gUnknown_085B6348[sRoulette->tableId].var02 / 2; } - else + else { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02; + return gUnknown_085B6348[sRoulette->tableId].var02; } break; - case 3: + case HAS_SHROOMISH | HAS_TAILLOW: // both are in party if (gLocalTime.hours > 3 && gLocalTime.hours < 11) { if (r0 < 6 || (r1 & 1)) - { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2; - } + return gUnknown_085B6348[sRoulette->tableId].var02 / 2; else - { return 1; - } } - else if ((r1 & 1) && r0 > 6) + else if ((r1 & 1) && r0 > 6) { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 4; + return gUnknown_085B6348[sRoulette->tableId].var02 / 4; } - else + else { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2; + return gUnknown_085B6348[sRoulette->tableId].var02 / 2; } break; case 0: @@ -1341,45 +1514,33 @@ static u8 sub_814118C(u16 r0, u16 r1) if (gLocalTime.hours > 3 && gLocalTime.hours < 10) { if (!(r1 & 3)) - { return 1; - } else - { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2; - } + return gUnknown_085B6348[sRoulette->tableId].var02 / 2; } else if (!(r1 & 3)) { if (r0 > 12) - { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2; - } + return gUnknown_085B6348[sRoulette->tableId].var02 / 2; else - { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02; - } + return gUnknown_085B6348[sRoulette->tableId].var02; } else if (r1 & 0x8000) { if (r0 > 12) - { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02; - } + return gUnknown_085B6348[sRoulette->tableId].var02; else - { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01; - } + return gUnknown_085B6348[sRoulette->tableId].var01; } else { - return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01 * 2; + return gUnknown_085B6348[sRoulette->tableId].var01 * 2; } break; } } -static void sub_8141344(u8 taskId) +static void Task_RollBall(u8 taskId) { u8 randf; s8 randfinal; @@ -1391,8 +1552,8 @@ static void sub_8141344(u8 taskId) rand = Random(); randmod = rand % 100; - gUnknown_0203AB88->var7C = gTasks[taskId].data[6]; - gUnknown_0203AB88->var7D = gUnknown_0203AB88->var7E = gUnknown_0203AB88->var7F = g; + sRoulette->var7C = gTasks[taskId].tBallNum; + sRoulette->var7D = sRoulette->var7E = sRoulette->var7F = g; randf = sub_814118C(gTasks[taskId].data[8], rand); randfinal = (rand % randf) - (randf / 2); @@ -1406,88 +1567,88 @@ static void sub_8141344(u8 taskId) else r5 = (1 - r5) * 2; - gUnknown_0203AB88->var80 = g = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var1A + randfinal; + sRoulette->var80 = g = gUnknown_085B6348[sRoulette->tableId].var1A + randfinal; g = S16TOPOSFLOAT(g) / 5.0f; - gUnknown_0203AB88->var82 = g * 3; - gUnknown_0203AB88->var86 = gUnknown_0203AB88->var84 = g; + sRoulette->var82 = g * 3; + sRoulette->var86 = sRoulette->var84 = g; - gUnknown_0203AB88->var88 = S16TOPOSFLOAT(angles[(rand & 1) + r5]); - gUnknown_0203AB88->var8C = S16TOPOSFLOAT(gUnknown_085B6348[gUnknown_0203AB88->var04_0].var18); - gUnknown_0203AB88->var90 = ((gUnknown_0203AB88->var8C * 0.5f) - gUnknown_0203AB88->var8C) / S16TOPOSFLOAT(gUnknown_0203AB88->var82); - gUnknown_0203AB88->var94 = 68.0f; - gUnknown_0203AB88->var9C = 0.0f; - gUnknown_0203AB88->var98 = -(8.0f / S16TOPOSFLOAT(gUnknown_0203AB88->var82)); - gUnknown_0203AB88->varA0 = 36.0f; - gTasks[taskId].func = sub_814155C; + sRoulette->var88 = S16TOPOSFLOAT(angles[(rand & 1) + r5]); + sRoulette->var8C = S16TOPOSFLOAT(gUnknown_085B6348[sRoulette->tableId].var18); + sRoulette->var90 = ((sRoulette->var8C * 0.5f) - sRoulette->var8C) / S16TOPOSFLOAT(sRoulette->var82); + sRoulette->var94 = 68.0f; + sRoulette->var9C = 0.0f; + sRoulette->var98 = -(8.0f / S16TOPOSFLOAT(sRoulette->var82)); + sRoulette->varA0 = 36.0f; + gTasks[taskId].func = Task_EndBallRoll; } -static void sub_814155C(u8 taskId) +static void Task_EndBallRoll(u8 taskId) { u8 index; - gUnknown_0203AB88->var03_7 = 1; - index = gUnknown_0203AB88->var3C[gUnknown_0203AB88->var7C]; - gUnknown_0203AB88->var38 = &gSprites[index]; - gUnknown_0203AB88->var38->callback = sub_81446AC; - gTasks[taskId].data[6]++; - gTasks[taskId].data[0x8]++; - sub_814372C(6 - gTasks[taskId].data[6]); + sRoulette->var03_7 = TRUE; + index = sRoulette->spriteIds[sRoulette->var7C]; + sRoulette->var38 = &gSprites[index]; + sRoulette->var38->callback = sub_81446AC; + gTasks[taskId].tBallNum++; + gTasks[taskId].data[8]++; + SetBallCounterNumLeft(BALLS_PER_ROUND - gTasks[taskId].tBallNum); m4aSongNumStart(SE_TAMAKORO); - gTasks[taskId].func = sub_81415D4; + gTasks[taskId].func = Task_RecordBallHit; } -static void sub_81415D4(u8 taskId) +static void Task_RecordBallHit(u8 taskId) { - if (gUnknown_0203AB88->var7D) + if (sRoulette->var7D) { - if (gUnknown_0203AB88->var03_5) + if (sRoulette->var03_5) { - if (gUnknown_0203AB88->var03_6) + if (sRoulette->var03_6) { - gUnknown_0203AB88->var03_6 = FALSE; - gUnknown_0203AB88->var03_5 = FALSE; + sRoulette->var03_6 = FALSE; + sRoulette->var03_5 = FALSE; } } else { if (!gTasks[taskId].data[1]) { - bool8 temp = sub_81421E8(sub_81420D0(taskId, gUnknown_0203AB88->var7E), gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]); - gTasks[taskId].data[5] = temp; + bool8 temp = IsHitInBetSelection(RecordHit(taskId, sRoulette->var7E), sRoulette->betSelection[sRoulette->curBallNum]); + gTasks[taskId].tWonBet = temp; if (temp == TRUE) - sub_8151A48(&gUnknown_0203AB88->varB8, 0x1000); + sub_8151A48(&sRoulette->varB8, 0x1000); } if (gTasks[taskId].data[1] <= 60) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) gTasks[taskId].data[1] = 60; gTasks[taskId].data[1]++; } else { - sub_81424FC(gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]); - sub_8142E70(0, gTasks[taskId].data[12]); - sub_8143038(0, gTasks[taskId].data[6] - 1); + DrawGridBackground(sRoulette->betSelection[sRoulette->curBallNum]); + ShowHideGridIcons(FALSE, gTasks[taskId].tWinningSquare); + ShowHideGridBalls(FALSE, gTasks[taskId].tBallNum - 1); gTasks[taskId].data[1] = 32; - gTasks[taskId].func = sub_81416D4; + gTasks[taskId].func = Task_SlideGridOnscreen; } } } } -static void sub_81416D4(u8 taskId) +static void Task_SlideGridOnscreen(u8 taskId) { if (gTasks[taskId].data[1]-- > 0) { if (gTasks[taskId].data[1] > 2) gSpriteCoordOffsetX -= 2; - if ((gUnknown_0203AB88->var26 -= 4) == 104) - gSprites[gUnknown_0203AB88->var3C[25]].callback = sub_814390C; + if ((sRoulette->var26 -= 4) == 104) + gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = SpriteCB_GridSquare; } else { - sub_8143150(gTasks[taskId].data[12]); - if (gTasks[taskId].data[5] == 1) + ShowHideWinSlotCursor(gTasks[taskId].tWinningSquare); + if (gTasks[taskId].tWonBet == TRUE) gTasks[taskId].data[1] = 121; else gTasks[taskId].data[1] = 61; @@ -1502,95 +1663,96 @@ static void sub_8141778(u8 taskId) switch (gTasks[taskId].data[1] % 16) { case 8: - sub_8142E70(0, -1); - sub_8143038(0, -1); + ShowHideGridIcons(FALSE, -1); + ShowHideGridBalls(FALSE, -1); break; case 0: - sub_8142E70(0, gTasks[taskId].data[12]); - sub_8143038(0, gTasks[taskId].data[6] - 1); + ShowHideGridIcons(FALSE, gTasks[taskId].tWinningSquare); + ShowHideGridBalls(FALSE, gTasks[taskId].tBallNum - 1); break; } } else { - sub_8141F7C(taskId, sub_814189C, 30, 0); + StartTaskAfterDelayOrInput(taskId, Task_PrintSpinResult, 30, 0); } } -static void sub_8141800(u8 taskId) +static void Task_TryIncrementWins(u8 taskId) { - switch (gTasks[taskId].data[0x5]) + switch (gTasks[taskId].tWonBet) { - case 1: - case 2: + case TRUE: + case 2: // never happens if (IsFanfareTaskInactive()) { u32 wins = GetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS); - if (wins < ++gTasks[taskId].data[11]) - SetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS, gTasks[taskId].data[11]); - sub_8141F7C(taskId, sub_8141A18, 0xFFFF, 3); + if (wins < ++gTasks[taskId].tConsecutiveWins) + SetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS, gTasks[taskId].tConsecutiveWins); + StartTaskAfterDelayOrInput(taskId, Task_PrintPayout, 0xFFFF, A_BUTTON | B_BUTTON); } break; - case 0: + case FALSE: default: if (!IsSEPlaying()) { - gTasks[taskId].data[11] = FALSE; - sub_8141F7C(taskId, sub_8141AC0, 0xFFFF, 3); + gTasks[taskId].tConsecutiveWins = 0; + StartTaskAfterDelayOrInput(taskId, Task_EndTurn, 0xFFFF, A_BUTTON | B_BUTTON); } break; } } -static void sub_814189C(u8 taskId) +static void Task_PrintSpinResult(u8 taskId) { - switch (gTasks[taskId].data[5]) + switch (gTasks[taskId].tWonBet) { - case 1: - case 2: - if (gTasks[taskId].data[2] == 12) + case TRUE: + case 2: // never happens + if (gTasks[taskId].tMultiplier == MAX_MULTIPLIER) { PlayFanfare(MUS_ME_B_BIG); - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_Jackpot, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_Jackpot, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); } else { PlayFanfare(MUS_ME_B_SMALL); - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ItsAHit, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_ItsAHit, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); } break; - case 0: + case FALSE: default: m4aSongNumStart(SE_HAZURE); - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NothingDoing, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_NothingDoing, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); break; } gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_8141800; + gTasks[taskId].func = Task_TryIncrementWins; } -static void sub_8141984(u8 taskId) +#define tPayout data[1] + +static void Task_GivePayout(u8 taskId) { - s32 r0 = gTasks[taskId].data[7]; - switch (r0) + switch (gTasks[taskId].data[7]) { case 0: - gTasks[taskId].data[13]++; + gTasks[taskId].tCoins++; m4aSongNumStart(SE_PIN); - sub_8143514(gTasks[taskId].data[13]); - if (gTasks[taskId].data[13] >= 9999) + SetCreditDigits(gTasks[taskId].tCoins); + if (gTasks[taskId].tCoins >= MAX_COINS) { - gTasks[taskId].data[1] = r0; + gTasks[taskId].tPayout = 0; } else { - gTasks[taskId].data[1]--; + gTasks[taskId].tPayout--; gTasks[taskId].data[7]++; } break; @@ -1602,117 +1764,123 @@ static void sub_8141984(u8 taskId) gTasks[taskId].data[7]++; break; } - if (gTasks[taskId].data[1] == 0) - sub_8141F7C(taskId, sub_8141AC0, 0xFFFF, 3); + if (gTasks[taskId].tPayout == 0) + StartTaskAfterDelayOrInput(taskId, Task_EndTurn, 0xFFFF, A_BUTTON | B_BUTTON); } -static void sub_8141A18(u8 taskId) +static void Task_PrintPayout(u8 taskId) { - ConvertIntToDecimalStringN(gStringVar1, (gUnknown_0203AB88->var19 * gTasks[taskId].data[2]), STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar1, (sRoulette->minBet * gTasks[taskId].tMultiplier), STR_CONV_MODE_LEFT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, Roulette_Text_YouveWonXCoins); - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); - gTasks[taskId].data[1] = (gUnknown_0203AB88->var19 * gTasks[taskId].data[2]); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); + gTasks[taskId].tPayout = (sRoulette->minBet * gTasks[taskId].tMultiplier); gTasks[taskId].data[7] = 0; - gTasks[taskId].func = sub_8141984; + gTasks[taskId].func = Task_GivePayout; } -static void sub_8141AC0(u8 taskId) +#undef tPayout + +static void Task_EndTurn(u8 taskId) { - sub_8151A9C(&gUnknown_0203AB88->varB8, 0xFFFF); - gUnknown_0203AB88->varB8.var04[13].var00_7 = gUnknown_0203AB88->varB8.var04[14].var00_7 = gUnknown_0203AB88->varB8.var04[15].var00_7 = 0; - gSprites[gUnknown_0203AB88->var3C[7 + gUnknown_085B6154[gTasks[taskId].data[12]].var00]].invisible = TRUE; - gTasks[taskId].func = sub_8141B58; + sub_8151A9C(&sRoulette->varB8, 0xFFFF); + sRoulette->varB8.var04[13].var00_7 = sRoulette->varB8.var04[14].var00_7 = sRoulette->varB8.var04[15].var00_7 = 0; + gSprites[sRoulette->spriteIds[SPR_BOARD_ICONS + sGridSelections[gTasks[taskId].tWinningSquare].var00]].invisible = TRUE; + gTasks[taskId].func = Task_TryPrintEndTurnMsg; } -static void sub_8141B58(u8 taskId) +static void Task_TryPrintEndTurnMsg(u8 taskId) { u8 i = 0; - gTasks[taskId].data[4] = i; - gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0] = 0; - sub_81424FC(0); - gSprites[gUnknown_0203AB88->var3C[48]].invisible = TRUE; - for (i = 0; i < 4; i++) + gTasks[taskId].tSelectionId = i; + sRoulette->betSelection[sRoulette->curBallNum] = SELECTION_NONE; + DrawGridBackground(SELECTION_NONE); + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE; + for (i = 0; i < NUM_BOARD_POKES; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 41]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[i + 41]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[i + 41]].anims)->type; + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].anims)->type; } - if (gTasks[taskId].data[13] >= gUnknown_0203AB88->var19) + if (gTasks[taskId].tCoins >= sRoulette->minBet) { - if (gTasks[taskId].data[6] == 6) + if (gTasks[taskId].tBallNum == BALLS_PER_ROUND) { - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); - sub_8141F7C(taskId, dp01t_12_3_battle_menu, 0xFFFF, 3); + // Reached Ball 6, clear board + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); + StartTaskAfterDelayOrInput(taskId, Task_ClearBoard, 0xFFFF, A_BUTTON | B_BUTTON); } - else if (gTasks[taskId].data[13] == 9999) + else if (gTasks[taskId].tCoins == MAX_COINS) { - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); - sub_8141F7C(taskId, sub_8140914, 0xFFFF, 0x3); + // Player maxed out coins + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); + StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, 0xFFFF, A_BUTTON | B_BUTTON); } else { - gTasks[taskId].func = sub_8140914; + // No special msg, ask to continue + gTasks[taskId].func = Task_AskKeepPlaying; } } else { - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); - sub_8141F7C(taskId, sub_8140994, 0x3C, 0x3); + // Player out of coins + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); + StartTaskAfterDelayOrInput(taskId, Task_StopPlaying, 60, A_BUTTON | B_BUTTON); } } -static void dp01t_12_3_battle_menu(u8 taskId) +static void Task_ClearBoard(u8 taskId) { u8 i = 0; - gTasks[taskId].data[6] = 0; + gTasks[taskId].tBallNum = 0; sub_8141FF4(taskId); - sub_8142070(); - sub_8143A40(); - sub_81424FC(0); - sub_814372C(6); + ResetHits(); + HideBoardBalls(); + DrawGridBackground(SELECTION_NONE); + SetBallCounterNumLeft(BALLS_PER_ROUND); - for (i = 0; i < 12; i++) + for (i = 0; i < NUM_ROULETTE_SLOTS; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 7]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_BOARD_ICONS]].invisible = FALSE; } - if (gTasks[taskId].data[13] == 9999) + if (gTasks[taskId].tCoins == MAX_COINS) { - DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(gUnknown_0203AB8C, 3); - sub_8141F7C(taskId, sub_8140914, 0xFFFF, 3); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(sTextWindowId, 3); + StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, 0xFFFF, A_BUTTON | B_BUTTON); } else { - gTasks[taskId].func = sub_8140914; + gTasks[taskId].func = Task_AskKeepPlaying; } } -static void sub_8141DE4(u8 taskId) +static void ExitRoulette(u8 taskId) { - sub_8151A9C(&gUnknown_0203AB88->varB8, 0xFFFF); - sub_8151678(&gUnknown_0203AB88->varB8); - SetCoins(gTasks[taskId].data[13]); - if (GetCoins() < gUnknown_0203AB88->var19) + sub_8151A9C(&sRoulette->varB8, 0xFFFF); + sub_8151678(&sRoulette->varB8); + SetCoins(gTasks[taskId].tCoins); + if (GetCoins() < sRoulette->minBet) gSpecialVar_0x8004 = TRUE; else gSpecialVar_0x8004 = FALSE; AlertTVOfNewCoinTotal(GetCoins()); BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8141E7C; + gTasks[taskId].func = Task_ExitRoulette; } -static void sub_8141E7C(u8 taskId) // end roulette ? +static void Task_ExitRoulette(u8 taskId) { if (UpdatePaletteFade() == 0) { @@ -1726,184 +1894,201 @@ static void sub_8141E7C(u8 taskId) // end roulette ? FreeAllSpritePalettes(); ResetPaletteFade(); ResetSpriteData(); - sub_8140418(); + FreeRoulette(); gFieldCallback = FieldCB_ContinueScriptHandleMusic; SetMainCallback2(CB2_ReturnToField); DestroyTask(taskId); } } -static void sub_8141EF8(u8 taskId) +static void Task_WaitForNextTask(u8 taskId) { - if (gUnknown_0203AB88->varA8 == 0 || gMain.newKeys & gUnknown_0203AB88->varAA) + if (sRoulette->taskWaitDelay == 0 || JOY_NEW(sRoulette->taskWaitKey)) { - gTasks[taskId].func = gUnknown_0203AB88->varAC; - if (gUnknown_0203AB88->varAA > 0) + gTasks[taskId].func = sRoulette->nextTask; + if (sRoulette->taskWaitKey > 0) PlaySE(SE_SELECT); - gUnknown_0203AB88->varAC = NULL; - gUnknown_0203AB88->varAA = 0; - gUnknown_0203AB88->varA8 = 0; + sRoulette->nextTask = NULL; + sRoulette->taskWaitKey = 0; + sRoulette->taskWaitDelay = 0; } - if (gUnknown_0203AB88->varA8 != 0xFFFF) - gUnknown_0203AB88->varA8--; + if (sRoulette->taskWaitDelay != 0xFFFF) + sRoulette->taskWaitDelay--; } -static void sub_8141F7C(u8 taskId, TaskFunc r1, u16 r2, u16 r3) +static void StartTaskAfterDelayOrInput(u8 taskId, TaskFunc task, u16 delay, u16 key) { - gUnknown_0203AB88->varB4 = gTasks[taskId].func; - if (r1 == NULL) - r1 = gUnknown_0203AB88->varB4; - gUnknown_0203AB88->varAC = r1; - gUnknown_0203AB88->varA8 = r2; - if (r2 == 0xFFFF && r3 == 0) - gUnknown_0203AB88->varAA = 0xFFFF; + sRoulette->varB4 = gTasks[taskId].func; + if (task == NULL) + task = sRoulette->varB4; + sRoulette->nextTask = task; + sRoulette->taskWaitDelay = delay; + if (delay == 0xFFFF && key == 0) + sRoulette->taskWaitKey = 0xFFFF; else - gUnknown_0203AB88->varAA = r3; - gTasks[taskId].func = sub_8141EF8; + sRoulette->taskWaitKey = key; + gTasks[taskId].func = Task_WaitForNextTask; } static void sub_8141FF4(u8 taskId) { u8 i = 0; - gUnknown_0203AB88->var00 = i; - gUnknown_0203AB88->var03_7 = 0; - gUnknown_0203AB88->var03_5 = 0; - gUnknown_0203AB88->var03_6 = 0; - gUnknown_0203AB88->var03_0 = 0; - for (i = 0; i < 6; i++) - { - gUnknown_0203AB88->var1B[i] = 0; - } - gUnknown_0203AB88->var1A_0 = 0; + sRoulette->var00 = i; + sRoulette->var03_7 = FALSE; + sRoulette->var03_5 = FALSE; + sRoulette->var03_6 = FALSE; + sRoulette->useTaillow = FALSE; + + for (i = 0; i < BALLS_PER_ROUND; i++) + sRoulette->betSelection[i] = SELECTION_NONE; + + sRoulette->curBallNum = 0; gTasks[taskId].data[1] = 0; } -static void sub_8142070(void) +static void ResetHits(void) { u8 i; - gUnknown_0203AB88->var08 = 0; - for (i = 0; i < 6; i++) - { - gUnknown_0203AB88->var0C[i] = 0; - } - for (i = 0; i < 4; i++) - { - gUnknown_0203AB88->var12[i] = 0; - } - for (i = 0; i < 3; i++) - { - gUnknown_0203AB88->var16[i] = 0; - } - sub_8143038(1, -1); + sRoulette->hitFlags = 0; + + for (i = 0; i < BALLS_PER_ROUND; i++) + sRoulette->hitSquares[i] = 0; + + for (i = 0; i < NUM_BOARD_POKES; i++) + sRoulette->pokeHits[i] = 0; + + for (i = 0; i < NUM_BOARD_COLORS; i++) + sRoulette->colorHits[i] = 0; + + ShowHideGridBalls(TRUE, -1); } -static u8 sub_81420D0(u8 taskId, u8 r1) +static u8 RecordHit(u8 taskId, u8 slotId) { - u8 i; - u8 z; - u32 t0[4] = {0x10842, 0x21084, 0x42108, 0x84210}; - u32 t1[3] = {0x3E0, 0x7C00, 0xF8000}; + u8 i, j; + u32 columnFlags[NUM_BOARD_POKES] = { + F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT, + F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL, + F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY, + F_MAKUHITA_COL | F_ORANGE_MAKUHITA | F_GREEN_MAKUHITA | F_PURPLE_MAKUHITA + }; + u32 rowFlags[NUM_BOARD_COLORS] = { + F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA, + F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA, + F_PURPLE_ROW | F_PURPLE_WYNAUT | F_PURPLE_AZURILL | F_PURPLE_SKITTY | F_PURPLE_MAKUHITA + }; - if (r1 > 11) + if (slotId >= NUM_ROULETTE_SLOTS) return 0; - gUnknown_0203AB88->var0C[gTasks[taskId].data[6] - 1] = gUnknown_085B62E4[r1].var02; - gTasks[taskId].data[12] = gUnknown_085B62E4[r1].var02; - gUnknown_0203AB88->var08 |= gUnknown_085B62E4[r1].var04; - for (i = 0; i < 4; i++) + sRoulette->hitSquares[gTasks[taskId].tBallNum - 1] = sRouletteSlots[slotId].gridSquare; + gTasks[taskId].tWinningSquare = sRouletteSlots[slotId].gridSquare; + sRoulette->hitFlags |= sRouletteSlots[slotId].flag; + for (i = 0; i < NUM_BOARD_POKES; i++) { - if (gUnknown_085B62E4[r1].var04 & t0[i]) - gUnknown_0203AB88->var12[i]++; - if (gUnknown_0203AB88->var12[i] > 2) - gUnknown_0203AB88->var08 |= t0[i]; + if (sRouletteSlots[slotId].flag & columnFlags[i]) + sRoulette->pokeHits[i]++; + // If hit every color of a poke, set column completed + if (sRoulette->pokeHits[i] >= NUM_BOARD_COLORS) + sRoulette->hitFlags |= columnFlags[i]; } - for (z = 0; z < 3; z++) + for (j = 0; j < NUM_BOARD_COLORS; j++) { - if (gUnknown_085B62E4[r1].var04 & t1[z]) - gUnknown_0203AB88->var16[z]++; - if (gUnknown_0203AB88->var16[z] > 3) - gUnknown_0203AB88->var08 |= t1[z]; + if (sRouletteSlots[slotId].flag & rowFlags[j]) + sRoulette->colorHits[j]++; + // If hit every poke of a color, set row completed + if (sRoulette->colorHits[j] >= NUM_BOARD_POKES) + sRoulette->hitFlags |= rowFlags[j]; } - return gUnknown_085B62E4[r1].var02; + return sRouletteSlots[slotId].gridSquare; } -static bool8 sub_81421E8(u8 r0, u8 r1) +static bool8 IsHitInBetSelection(u8 gridSquare, u8 betSelection) { - u8 t = r0; - if (--r0 < 19) + u8 hit = gridSquare; + if (--gridSquare < NUM_GRID_SELECTIONS) { - switch (r1) + switch (betSelection) { - case 0: - return 3; - case 1 ... 4: - if (t == r1 + 5 || t == r1 + 10 || t == r1 + 15) + case SELECTION_NONE: + return 3; // should never happen, player must place bet + case COL_WYNAUT: + case COL_AZURILL: + case COL_SKITTY: + case COL_MAKUHITA: + if (hit == betSelection + ROW_ORANGE + || hit == betSelection + ROW_GREEN + || hit == betSelection + ROW_PURPLE) return TRUE; break; - case 5: - case 10: - case 15: - if (t >= (r1 + 1) && t <= (r1 + 4)) + case ROW_ORANGE: + case ROW_GREEN: + case ROW_PURPLE: + if (hit >= (betSelection + COL_WYNAUT) + && hit <= (betSelection + COL_MAKUHITA)) return TRUE; break; + // Individual square default: - if (t == r1) + if (hit == betSelection) return TRUE; } } return FALSE; } -static void sub_8142284(u8 r0) +static void FlashSelectionOnWheel(u8 selectionId) { - u16 var0 = 0; u8 var2; u16 var3; u8 i; - switch (r0) + switch (selectionId) { - case 5: - case 10: - case 15: - for (i = (r0 + 1); i < (r0 + 5); i++) + case ROW_ORANGE: + case ROW_GREEN: + case ROW_PURPLE: + for (i = (selectionId + 1); i < (selectionId + 5); i++) { - if (!(gUnknown_0203AB88->var08 & gUnknown_085B6154[i].var08)) - var0 |= gUnknown_085B6154[i].var10; + if (!(sRoulette->hitFlags & sGridSelections[i].flag)) + var0 |= sGridSelections[i].var10; } - sub_8151A48(&gUnknown_0203AB88->varB8, var0 &= 0xDFFF); + sub_8151A48(&sRoulette->varB8, var0 &= 0xDFFF); break; default: { struct UnkStruct1 var1[3]; memcpy(var1, gUnknown_085B63F0, sizeof(var1)); - if (r0 > 0 && r0 < 5) + if (selectionId >= COL_WYNAUT && selectionId <= COL_MAKUHITA) var2 = 3; else var2 = 1; - var3 = r0 / 5 - 1; - switch (r0 % 5) + + var3 = selectionId / 5 - 1; + switch (GET_COL(selectionId)) { - case 1: - var3 = gSprites[gUnknown_0203AB88->var3C[7]].oam.paletteNum * 16; - break; - case 2: - var3 = gSprites[gUnknown_0203AB88->var3C[8]].oam.paletteNum * 16; - break; - case 3: - var3 = gSprites[gUnknown_0203AB88->var3C[9]].oam.paletteNum * 16; - break; - case 4: - var3 = gSprites[gUnknown_0203AB88->var3C[10]].oam.paletteNum * 16; - break; + // The specific color of the poke it references doesn't matter, because the icons themelves all share a palette + // So it just uses the first sprite ID of each + case COL_WYNAUT: + var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_ORANGE_WYNAUT]].oam.paletteNum * 16; + break; + case COL_AZURILL: + var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_GREEN_AZURILL]].oam.paletteNum * 16; + break; + case COL_SKITTY: + var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_PURPLE_SKITTY]].oam.paletteNum * 16; + break; + case COL_MAKUHITA: + var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16; + break; } if (var2 == 1) { - if (!(gUnknown_0203AB88->var08 & gUnknown_085B6154[r0].var08)) + if (!(sRoulette->hitFlags & sGridSelections[selectionId].flag)) { - var1[r0 / 5 - 1].var02 += var3; - sub_815168C(&gUnknown_0203AB88->varB8, 13, &var1[r0 / 5 - 1]); + var1[selectionId / 5 - 1].var02 += var3; + sub_815168C(&sRoulette->varB8, 13, &var1[selectionId / 5 - 1]); } else { @@ -1914,26 +2099,26 @@ static void sub_8142284(u8 r0) { for (i = 0; i < 3; i++) { - u8 var4 = i * 5 + r0 + 5; - if (!(gUnknown_0203AB88->var08 & gUnknown_085B6154[var4].var08)) + u8 var4 = i * 5 + selectionId + 5; + if (!(sRoulette->hitFlags & sGridSelections[var4].flag)) { var1[var4 / 5 - 1].var02 += var3; - sub_815168C(&gUnknown_0203AB88->varB8, i + 13, &var1[var4 / 5 - 1]); + sub_815168C(&sRoulette->varB8, i + 13, &var1[var4 / 5 - 1]); if (var2 == 3) - var0 = gUnknown_085B6154[var4].var10; + var0 = sGridSelections[var4].var10; var2--; } } if (var2 != 2) var0 = 0; } - sub_8151A48(&gUnknown_0203AB88->varB8, var0 |= gUnknown_085B6154[r0].var10); + sub_8151A48(&sRoulette->varB8, var0 |= sGridSelections[selectionId].var10); break; } } } -static void sub_81424FC(u8 r0) +static void DrawGridBackground(u8 selectionId) { vu8 i; vu8 z; @@ -1942,69 +2127,77 @@ static void sub_81424FC(u8 r0) vu8 var0; u8 v[5]; u8 l; - gUnknown_0203AB88->var2A = 1; - sub_8142E70(0, 0); - sub_8152058(gUnknown_0203AB88->tilemapBuffers[2], gUnknown_0203AB88->unk_397C, 14, 7, 16, 13); - switch (r0) + sRoulette->var2A = 1; + ShowHideGridIcons(FALSE, 0); + SetGridSelectionRect(sRoulette->tilemapBuffers[2], sRoulette->unk_397C, 14, 7, 16, 13); + switch (selectionId) { - case 0: + case SELECTION_NONE: return; - case 1 ... 4: + case COL_WYNAUT: + case COL_AZURILL: + case COL_SKITTY: + case COL_MAKUHITA: l = 4; for (i = 0; i < l; i++) { - v[i] = i * 5 + r0; + v[i] = i * 5 + selectionId; } break; - case 5: - case 10: - case 15: + case ROW_ORANGE: + case ROW_GREEN: + case ROW_PURPLE: l = 5; for (i = 0; i < l; i++) { - v[i] = i + r0; + v[i] = i + selectionId; } break; + // Individual square default: l = 1; - v[0] = r0; + v[0] = selectionId; } for (i = 0; i < l; i++) { - var0 = gUnknown_085B6154[v[i]].var06; - var1 = gUnknown_085B6154[v[i]].var03; + var0 = sGridSelections[v[i]].var06; + var1 = sGridSelections[v[i]].x; for (z = 0; z < 3; z++) { - var2 = (gUnknown_085B6154[v[i]].var04 + z) * 32; - gUnknown_0203AB88->tilemapBuffers[2][var1 + var2 + 0] = gUnknown_0203AB88->unk_397C[(var0 + z) * 3 + 208]; - gUnknown_0203AB88->tilemapBuffers[2][var1 + var2 + 1] = gUnknown_0203AB88->unk_397C[(var0 + z) * 3 + 209]; - gUnknown_0203AB88->tilemapBuffers[2][var1 + var2 + 2] = gUnknown_0203AB88->unk_397C[(var0 + z) * 3 + 210]; + var2 = (sGridSelections[v[i]].y + z) * 32; + sRoulette->tilemapBuffers[2][var1 + var2 + 0] = sRoulette->unk_397C[(var0 + z) * 3 + 208]; + sRoulette->tilemapBuffers[2][var1 + var2 + 1] = sRoulette->unk_397C[(var0 + z) * 3 + 209]; + sRoulette->tilemapBuffers[2][var1 + var2 + 2] = sRoulette->unk_397C[(var0 + z) * 3 + 210]; } } } -static u8 sub_8142758(u8 r0) +static u8 GetMultiplier(u8 selectionId) { - u8 var0[5] = {0, 3, 4, 6, 12}; + u8 multipliers[5] = {0, 3, 4, 6, 12}; - if (r0 > 19) - r0 = 0; - switch (gUnknown_085B6154[r0].var01_0) + if (selectionId > NUM_GRID_SELECTIONS) + selectionId = 0; + + switch (sGridSelections[selectionId].baseMultiplier) { - case 3: - r0 = r0 / 5 - 1; - if (gUnknown_0203AB88->var16[r0] > 3) + case NUM_BOARD_COLORS: + selectionId = selectionId / 5 - 1; + // If already hit all pokes of this color, multiplier is 0 + if (sRoulette->colorHits[selectionId] >= NUM_BOARD_POKES) return 0; - return var0[gUnknown_0203AB88->var16[r0] + 1]; - case 4: - r0--; - if (gUnknown_0203AB88->var12[r0] > 2) + return multipliers[sRoulette->colorHits[selectionId] + 1]; + case NUM_BOARD_POKES: + selectionId--; + // If already hit all colors of this poke, multiplier is 0 + if (sRoulette->pokeHits[selectionId] >= NUM_BOARD_COLORS) return 0; - return var0[gUnknown_0203AB88->var12[r0] + 2]; - case 12: - if (gUnknown_0203AB88->var08 & gUnknown_085B6154[r0].var08) + return multipliers[sRoulette->pokeHits[selectionId] + 2]; + case NUM_ROULETTE_SLOTS: + // If square has been hit already, multiplier is 0 + if (sRoulette->hitFlags & sGridSelections[selectionId].flag) return 0; - return var0[4]; + return multipliers[4]; } return 0; } @@ -2013,59 +2206,59 @@ static void sub_8142814(void) { s32 x1; s32 x2; - SetGpuReg(REG_OFFSET_BG2PA, gUnknown_0203AB88->var2C.a); - SetGpuReg(REG_OFFSET_BG2PB, gUnknown_0203AB88->var2C.b); - SetGpuReg(REG_OFFSET_BG2PC, gUnknown_0203AB88->var2C.c); - SetGpuReg(REG_OFFSET_BG2PD, gUnknown_0203AB88->var2C.d); - x1 = 0x7400 - gUnknown_0203AB88->var2C.a * (gSpriteCoordOffsetX + 116) - - gUnknown_0203AB88->var2C.b * (gSpriteCoordOffsetY + 80); - x2 = 0x5400 - gUnknown_0203AB88->var2C.c * (gSpriteCoordOffsetX + 116) - - gUnknown_0203AB88->var2C.d * (gSpriteCoordOffsetY + 80); + SetGpuReg(REG_OFFSET_BG2PA, sRoulette->var2C.a); + SetGpuReg(REG_OFFSET_BG2PB, sRoulette->var2C.b); + SetGpuReg(REG_OFFSET_BG2PC, sRoulette->var2C.c); + SetGpuReg(REG_OFFSET_BG2PD, sRoulette->var2C.d); + x1 = 0x7400 - sRoulette->var2C.a * (gSpriteCoordOffsetX + 116) + - sRoulette->var2C.b * (gSpriteCoordOffsetY + 80); + x2 = 0x5400 - sRoulette->var2C.c * (gSpriteCoordOffsetX + 116) + - sRoulette->var2C.d * (gSpriteCoordOffsetY + 80); SetGpuReg(REG_OFFSET_BG2X_L, x1); SetGpuReg(REG_OFFSET_BG2X_H, (x1 & 0x0fff0000) >> 16); SetGpuReg(REG_OFFSET_BG2Y_L, x2); SetGpuReg(REG_OFFSET_BG2Y_H, (x2 & 0x0fff0000) >> 16); } -static const u8 sFiller_085B644D[3] = {}; -static const u16 RouletteSpritePalette_01[] = INCBIN_U16("graphics/roulette/shadow.gbapal"); -static const u16 RouletteSpritePalette_02[] = INCBIN_U16("graphics/roulette/ball.gbapal"); -static const u16 RouletteSpritePalette_03[] = INCBIN_U16("graphics/roulette/ball_counter.gbapal"); -static const u16 RouletteSpritePalette_04[] = INCBIN_U16("graphics/roulette/cursor.gbapal"); -static const u16 RouletteSpritePalette_05[] = INCBIN_U16("graphics/roulette/credit.gbapal"); -static const u16 RouletteSpritePalette_06[] = INCBIN_U16("graphics/roulette/shroomish.gbapal"); -static const u16 RouletteSpritePalette_07[] = INCBIN_U16("graphics/roulette/tailow.gbapal"); -static const u16 RouletteSpritePalette_08[] = INCBIN_U16("graphics/roulette/poke_icons.gbapal"); -static const u16 RouletteSpritePalette_09[] = INCBIN_U16("graphics/roulette/wynaut.gbapal"); -static const u16 RouletteSpritePalette_10[] = INCBIN_U16("graphics/roulette/azurill.gbapal"); -static const u16 RouletteSpritePalette_11[] = INCBIN_U16("graphics/roulette/skitty.gbapal"); -static const u16 RouletteSpritePalette_12[] = INCBIN_U16("graphics/roulette/makuhita.gbapal"); -static const u16 RouletteSpritePalette_13[] = INCBIN_U16("graphics/roulette/85B65D0.gbapal"); -static const u16 RouletteSpritePalette_14[] = INCBIN_U16("graphics/roulette/85B65F0.gbapal"); -static const u16 RouletteSpritePalette_15[] = INCBIN_U16("graphics/roulette/85B6610.gbapal"); -static const u16 RouletteSpritePalette_16[] = INCBIN_U16("graphics/roulette/85B6630.gbapal"); -static const u32 gUnknown_085B6650[] = INCBIN_U32("graphics/roulette/ball.4bpp.lz"); -static const u32 RouletteBallCounterTiles[] = INCBIN_U32("graphics/roulette/ball_counter.4bpp.lz"); -static const u32 gUnknown_085B67FC[] = INCBIN_U32("graphics/roulette/roulette_tilt.4bpp.lz"); -static const u32 RoulettePokeIconsTiles[] = INCBIN_U32("graphics/roulette/poke_icons.4bpp.lz"); -static const u32 RoulettePokeIcons2Tiles[] = INCBIN_U32("graphics/roulette/poke_icons2.4bpp.lz"); -static const u32 gUnknown_085B7290[] = INCBIN_U32("graphics/roulette/shadow.4bpp.lz"); -static const u32 RouletteCursorTiles[] = INCBIN_U32("graphics/roulette/cursor.4bpp.lz"); +static const u8 sFiller[3] = {}; +static const u16 sShadow_Pal[] = INCBIN_U16("graphics/roulette/shadow.gbapal"); +static const u16 sBall_Pal[] = INCBIN_U16("graphics/roulette/ball.gbapal"); +static const u16 sBallCounter_Pal[] = INCBIN_U16("graphics/roulette/ball_counter.gbapal"); +static const u16 sCursor_Pal[] = INCBIN_U16("graphics/roulette/cursor.gbapal"); +static const u16 sCredit_Pal[] = INCBIN_U16("graphics/roulette/credit.gbapal"); +static const u16 sShroomish_Pal[] = INCBIN_U16("graphics/roulette/shroomish.gbapal"); +static const u16 sTaillow_Pal[] = INCBIN_U16("graphics/roulette/tailow.gbapal"); +static const u16 sGridIcons_Pal[] = INCBIN_U16("graphics/roulette/grid_icons.gbapal"); +static const u16 sWynaut_Pal[] = INCBIN_U16("graphics/roulette/wynaut.gbapal"); +static const u16 sAzurill_Pal[] = INCBIN_U16("graphics/roulette/azurill.gbapal"); +static const u16 sSkitty_Pal[] = INCBIN_U16("graphics/roulette/skitty.gbapal"); +static const u16 sMakuhita_Pal[] = INCBIN_U16("graphics/roulette/makuhita.gbapal"); +static const u16 sUnused1_Pal[] = INCBIN_U16("graphics/roulette/unused_1.gbapal"); +static const u16 sUnused2_Pal[] = INCBIN_U16("graphics/roulette/unused_2.gbapal"); +static const u16 sUnused3_Pal[] = INCBIN_U16("graphics/roulette/unused_3.gbapal"); +static const u16 sUnused4_Pal[] = INCBIN_U16("graphics/roulette/unused_4.gbapal"); +static const u32 sBall_Gfx[] = INCBIN_U32("graphics/roulette/ball.4bpp.lz"); +static const u32 sBallCounter_Gfx[] = INCBIN_U32("graphics/roulette/ball_counter.4bpp.lz"); +static const u32 sShroomishTaillow_Gfx[] = INCBIN_U32("graphics/roulette/roulette_tilt.4bpp.lz"); +static const u32 sGridIcons_Gfx[] = INCBIN_U32("graphics/roulette/grid_icons.4bpp.lz"); +static const u32 sBoardIcons_Gfx[] = INCBIN_U32("graphics/roulette/board_icons.4bpp.lz"); +static const u32 sShadow_Gfx[] = INCBIN_U32("graphics/roulette/shadow.4bpp.lz"); +static const u32 sCursor_Gfx[] = INCBIN_U32("graphics/roulette/cursor.4bpp.lz"); -static const struct SpritePalette gUnknown_085B7384[] = +static const struct SpritePalette sSpritePalettes[] = { - { .data = RouletteSpritePalette_01, .tag = 1 }, - { .data = RouletteSpritePalette_02, .tag = 2 }, - { .data = RouletteSpritePalette_03, .tag = 3 }, - { .data = RouletteSpritePalette_04, .tag = 4 }, - { .data = RouletteSpritePalette_05, .tag = 5 }, - { .data = RouletteSpritePalette_06, .tag = 6 }, - { .data = RouletteSpritePalette_07, .tag = 7 }, - { .data = RouletteSpritePalette_08, .tag = 8 }, - { .data = RouletteSpritePalette_09, .tag = 9 }, - { .data = RouletteSpritePalette_10, .tag = 10 }, - { .data = RouletteSpritePalette_11, .tag = 11 }, - { .data = RouletteSpritePalette_12, .tag = 12 }, + { .data = sShadow_Pal, .tag = PALTAG_SHADOW }, + { .data = sBall_Pal, .tag = PALTAG_BALL }, + { .data = sBallCounter_Pal, .tag = PALTAG_BALL_COUNTER }, + { .data = sCursor_Pal, .tag = 4 }, + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + { .data = sShroomish_Pal, .tag = PALTAG_SHROOMISH }, + { .data = sTaillow_Pal, .tag = PALTAG_TAILLOW }, + { .data = sGridIcons_Pal, .tag = PALTAG_GRID_ICONS }, + { .data = sWynaut_Pal, .tag = PALTAG_WYNAUT }, + { .data = sAzurill_Pal, .tag = PALTAG_AZURILL }, + { .data = sSkitty_Pal, .tag = PALTAG_SKITTY }, + { .data = sMakuhita_Pal, .tag = PALTAG_MAKUHITA }, {} }; @@ -2078,7 +2271,7 @@ static const struct OamData gOamData_85B73EC = .priority = 1, }; -static const struct OamData gOamData_85B73F4 = +static const struct OamData sOam_GridIcon = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2087,7 +2280,7 @@ static const struct OamData gOamData_85B73F4 = .priority = 1, }; -static const struct OamData gOamData_85B73FC = +static const struct OamData sOam_BoardIcon = { .y = 60, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -2097,35 +2290,35 @@ static const struct OamData gOamData_85B73FC = .priority = 2, }; -static const union AnimCmd gSpriteAnim_85B7404[] = +static const union AnimCmd sAffineAnim_Unused1[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B740C[] = +static const union AnimCmd *const sAffineAnims_Unused1[] = { - gSpriteAnim_85B7404 + sAffineAnim_Unused1 }; -static const union AffineAnimCmd gSpriteAffineAnim_85B7410[] = +static const union AffineAnimCmd sAffineAnim_Unused2[] = { AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7418[] = +static const union AffineAnimCmd *const sAffineAnims_Unused2[] = { - gSpriteAffineAnim_85B7410 + sAffineAnim_Unused2 }; -static const struct CompressedSpriteSheet gUnknown_085B741C = +static const struct CompressedSpriteSheet sSpriteSheet_BoardIcons = { - .data = RoulettePokeIcons2Tiles, + .data = sBoardIcons_Gfx, .size = 0xC00, - .tag = 0 + .tag = GFXTAG_BOARD_ICONS }; -static const union AnimCmd gSpriteAnim_85B7420[] = +static const union AnimCmd sAnim_BoardIcons[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_FRAME(32, 0), @@ -2142,81 +2335,81 @@ static const union AnimCmd gSpriteAnim_85B7420[] = ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B7458[] = +static const union AnimCmd *const sAnim_BoardIcon_OrangeWynaut[] = { - &gSpriteAnim_85B7420[0] + &sAnim_BoardIcons[0] }; -static const union AnimCmd *const gSpriteAnimTable_85B745C[] = +static const union AnimCmd *const sAnim_BoardIcon_GreenAzurill[] = { - &gSpriteAnim_85B7420[1] + &sAnim_BoardIcons[1] }; -static const union AnimCmd *const gSpriteAnimTable_85B7460[] = +static const union AnimCmd *const sAnim_BoardIcon_PurpleSkitty[] = { - &gSpriteAnim_85B7420[2] + &sAnim_BoardIcons[2] }; -static const union AnimCmd *const gSpriteAnimTable_85B7464[] = +static const union AnimCmd *const sAnim_BoardIcon_OrangeMakuhita[] = { - &gSpriteAnim_85B7420[3] + &sAnim_BoardIcons[3] }; -static const union AnimCmd *const gSpriteAnimTable_85B7468[] = +static const union AnimCmd *const sAnim_BoardIcon_GreenWynaut[] = { - &gSpriteAnim_85B7420[4] + &sAnim_BoardIcons[4] }; -static const union AnimCmd *const gSpriteAnimTable_85B746C[] = +static const union AnimCmd *const sAnim_BoardIcon_PurpleAzurill[] = { - &gSpriteAnim_85B7420[5] + &sAnim_BoardIcons[5] }; -static const union AnimCmd *const gSpriteAnimTable_85B7470[] = +static const union AnimCmd *const sAnim_BoardIcon_OrangeSkitty[] = { - &gSpriteAnim_85B7420[6] + &sAnim_BoardIcons[6] }; -static const union AnimCmd *const gSpriteAnimTable_85B7474[] = +static const union AnimCmd *const sAnim_BoardIcon_GreenMakuhita[] = { - &gSpriteAnim_85B7420[7] + &sAnim_BoardIcons[7] }; -static const union AnimCmd *const gSpriteAnimTable_85B7478[] = +static const union AnimCmd *const sAnim_BoardIcon_PurpleWynaut[] = { - &gSpriteAnim_85B7420[8] + &sAnim_BoardIcons[8] }; -static const union AnimCmd *const gSpriteAnimTable_85B747C[] = +static const union AnimCmd *const sAnim_BoardIcon_OrangeAzurill[] = { - &gSpriteAnim_85B7420[9] + &sAnim_BoardIcons[9] }; -static const union AnimCmd *const gSpriteAnimTable_85B7480[] = +static const union AnimCmd *const sAnim_BoardIcon_GreenSkitty[] = { - &gSpriteAnim_85B7420[10] + &sAnim_BoardIcons[10] }; -static const union AnimCmd *const gSpriteAnimTable_85B7484[] = +static const union AnimCmd *const sAnim_BoardIcon_PurpleMakuhita[] = { - &gSpriteAnim_85B7420[11] + &sAnim_BoardIcons[11] }; -static const struct CompressedSpriteSheet gUnknown_085B7488 = +static const struct CompressedSpriteSheet sSpriteSheet_Headers = { - .data = gRouletteHeadersTiles, + .data = gRouletteHeaders_Gfx, .size = 0x1600, - .tag = 4 + .tag = GFXTAG_HEADERS }; -static const struct CompressedSpriteSheet gUnknown_085B7490 = +static const struct CompressedSpriteSheet sSpriteSheet_PokeIcons = { - .data = RoulettePokeIconsTiles, + .data = sGridIcons_Gfx, .size = 0x400, - .tag = 5 + .tag = GFXTAG_GRID_ICONS }; -static const union AnimCmd gSpriteAnim_85B7498[] = +static const union AnimCmd sAnim_Headers[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_FRAME(16, 0), @@ -2232,7 +2425,7 @@ static const union AnimCmd gSpriteAnim_85B7498[] = ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B74C8[] = +static const union AnimCmd sAnim_GridIcons[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_FRAME(4, 0), @@ -2241,285 +2434,287 @@ static const union AnimCmd gSpriteAnim_85B74C8[] = ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B74DC[] = +static const union AnimCmd *const sAnim_WynautHeader[] = { - &gSpriteAnim_85B7498[0] + &sAnim_Headers[0] }; -static const union AnimCmd *const gSpriteAnimTable_85B74E0[] = +static const union AnimCmd *const sAnim_AzurillHeader[] = { - &gSpriteAnim_85B7498[2] + &sAnim_Headers[2] }; -static const union AnimCmd *const gSpriteAnimTable_85B74E4[] = +static const union AnimCmd *const sAnim_SkittyHeader[] = { - &gSpriteAnim_85B7498[4] + &sAnim_Headers[4] }; -static const union AnimCmd *const gSpriteAnimTable_85B74E8[] = +static const union AnimCmd *const sAnim_MakuhitaHeader[] = { - &gSpriteAnim_85B7498[6] + &sAnim_Headers[6] }; -static const union AnimCmd *const gSpriteAnimTable_85B74EC[] = +static const union AnimCmd *const sAnim_OrangeHeader[] = { - &gSpriteAnim_85B7498[8] + &sAnim_Headers[8] }; -static const union AnimCmd *const gSpriteAnimTable_85B74F0[] = +static const union AnimCmd *const sAnim_GreenHeader[] = { - &gSpriteAnim_85B7498[9] + &sAnim_Headers[9] }; -static const union AnimCmd *const gSpriteAnimTable_85B74F4[] = +static const union AnimCmd *const sAnim_PurpleHeader[] = { - &gSpriteAnim_85B7498[10] + &sAnim_Headers[10] }; -static const union AnimCmd *const gSpriteAnimTable_85B74F8[] = +static const union AnimCmd *const sAnim_GridIcon_Wynaut[] = { - &gSpriteAnim_85B74C8[0] + &sAnim_GridIcons[0] }; -static const union AnimCmd *const gSpriteAnimTable_85B74FC[] = +static const union AnimCmd *const sAnim_GridIcon_Azurill[] = { - &gSpriteAnim_85B74C8[1] + &sAnim_GridIcons[1] }; -static const union AnimCmd *const gSpriteAnimTable_85B7500[] = +static const union AnimCmd *const sAnim_GridIcon_Skitty[] = { - &gSpriteAnim_85B74C8[2] + &sAnim_GridIcons[2] }; -static const union AnimCmd *const gSpriteAnimTable_85B7504[] = +static const union AnimCmd *const sAnim_GridIcon_Makuhita[] = { - &gSpriteAnim_85B74C8[3] + &sAnim_GridIcons[3] }; -static const struct SpriteTemplate gSpriteTemplate_85B7508[] = +static const struct SpriteTemplate sSpriteTemplates_PokeHeaders[NUM_BOARD_POKES] = { { - .tileTag = 4, - .paletteTag = 8, + .tileTag = GFXTAG_HEADERS, + .paletteTag = PALTAG_GRID_ICONS, .oam = &gOamData_85B73EC, - .anims = gSpriteAnimTable_85B74DC, + .anims = sAnim_WynautHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 4, - .paletteTag = 8, + .tileTag = GFXTAG_HEADERS, + .paletteTag = PALTAG_GRID_ICONS, .oam = &gOamData_85B73EC, - .anims = gSpriteAnimTable_85B74E0, + .anims = sAnim_AzurillHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 4, - .paletteTag = 8, + .tileTag = GFXTAG_HEADERS, + .paletteTag = PALTAG_GRID_ICONS, .oam = &gOamData_85B73EC, - .anims = gSpriteAnimTable_85B74E4, + .anims = sAnim_SkittyHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 4, - .paletteTag = 8, + .tileTag = GFXTAG_HEADERS, + .paletteTag = PALTAG_GRID_ICONS, .oam = &gOamData_85B73EC, - .anims = gSpriteAnimTable_85B74E8, + .anims = sAnim_MakuhitaHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare } }; -static const struct SpriteTemplate gSpriteTemplate_85B7568[] = +static const struct SpriteTemplate sSpriteTemplates_ColorHeaders[NUM_BOARD_COLORS] = { { - .tileTag = 4, - .paletteTag = 8, + .tileTag = GFXTAG_HEADERS, + .paletteTag = PALTAG_GRID_ICONS, .oam = &gOamData_85B73EC, - .anims = gSpriteAnimTable_85B74EC, + .anims = sAnim_OrangeHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 4, - .paletteTag = 8, + .tileTag = GFXTAG_HEADERS, + .paletteTag = PALTAG_GRID_ICONS, .oam = &gOamData_85B73EC, - .anims = gSpriteAnimTable_85B74F0, + .anims = sAnim_GreenHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 4, - .paletteTag = 8, + .tileTag = GFXTAG_HEADERS, + .paletteTag = PALTAG_GRID_ICONS, .oam = &gOamData_85B73EC, - .anims = gSpriteAnimTable_85B74F4, + .anims = sAnim_PurpleHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare } }; -static const struct SpriteTemplate gSpriteTemplate_85B75B0[] = +static const struct SpriteTemplate sSpriteTemplate_GridIcons[NUM_BOARD_POKES] = { { - .tileTag = 5, - .paletteTag = 8, - .oam = &gOamData_85B73F4, - .anims = gSpriteAnimTable_85B74F8, + .tileTag = GFXTAG_GRID_ICONS, + .paletteTag = PALTAG_GRID_ICONS, + .oam = &sOam_GridIcon, + .anims = sAnim_GridIcon_Wynaut, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 5, - .paletteTag = 8, - .oam = &gOamData_85B73F4, - .anims = gSpriteAnimTable_85B74FC, + .tileTag = GFXTAG_GRID_ICONS, + .paletteTag = PALTAG_GRID_ICONS, + .oam = &sOam_GridIcon, + .anims = sAnim_GridIcon_Azurill, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 5, - .paletteTag = 8, - .oam = &gOamData_85B73F4, - .anims = gSpriteAnimTable_85B7500, + .tileTag = GFXTAG_GRID_ICONS, + .paletteTag = PALTAG_GRID_ICONS, + .oam = &sOam_GridIcon, + .anims = sAnim_GridIcon_Skitty, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }, { - .tileTag = 5, - .paletteTag = 8, - .oam = &gOamData_85B73F4, - .anims = gSpriteAnimTable_85B7504, + .tileTag = GFXTAG_GRID_ICONS, + .paletteTag = PALTAG_GRID_ICONS, + .oam = &sOam_GridIcon, + .anims = sAnim_GridIcon_Makuhita, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare } }; -static const struct SpriteTemplate gSpriteTemplate_85B7610[] = +// Board icons are listed clockwise starting from 1 oclock on the roulette board (with pokeball upside right) +// They go Wynaut -> Azurill -> Skitty -> Makuhita, and Orange -> Green -> Purple +static const struct SpriteTemplate sSpriteTemplates_BoardIcons[NUM_ROULETTE_SLOTS] = { { - .tileTag = 0, - .paletteTag = 9, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7458, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_WYNAUT, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_OrangeWynaut, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 10, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B745C, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_AZURILL, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_GreenAzurill, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 11, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7460, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_SKITTY, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_PurpleSkitty, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 12, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7464, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_MAKUHITA, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_OrangeMakuhita, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 9, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7468, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_WYNAUT, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_GreenWynaut, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 10, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B746C, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_AZURILL, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_PurpleAzurill, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 11, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7470, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_SKITTY, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_OrangeSkitty, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 12, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7474, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_MAKUHITA, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_GreenMakuhita, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 9, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7478, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_WYNAUT, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_PurpleWynaut, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 10, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B747C, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_AZURILL, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_OrangeAzurill, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 11, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7480, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_SKITTY, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_GreenSkitty, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon }, { - .tileTag = 0, - .paletteTag = 12, - .oam = &gOamData_85B73FC, - .anims = gSpriteAnimTable_85B7484, + .tileTag = GFXTAG_BOARD_ICONS, + .paletteTag = PALTAG_MAKUHITA, + .oam = &sOam_BoardIcon, + .anims = sAnim_BoardIcon_PurpleMakuhita, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8143280 + .callback = SpriteCB_BoardIcon } }; -static const struct OamData gOamData_85B7730 = +static const struct OamData sOam_Credit = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2528,7 +2723,7 @@ static const struct OamData gOamData_85B7730 = .priority = 1, }; -static const struct OamData gOamData_85B7738 = +static const struct OamData sOam_CreditDigit = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2537,7 +2732,7 @@ static const struct OamData gOamData_85B7738 = .priority = 1, }; -static const struct OamData gOamData_85B7740 = +static const struct OamData sOam_Multiplier = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2546,7 +2741,7 @@ static const struct OamData gOamData_85B7740 = .priority = 1, }; -static const struct OamData gOamData_85B7748 = +static const struct OamData sOam_BallCounter = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2555,32 +2750,32 @@ static const struct OamData gOamData_85B7748 = .priority = 1, }; -static const struct CompressedSpriteSheet gUnknown_085B7750[] = +static const struct CompressedSpriteSheet sSpriteSheets_Interface[] = { { - .data = gRouletteCreditTiles, + .data = gRouletteCredit_Gfx, .size = 0x400, - .tag = 7 + .tag = GFXTAG_CREDIT }, { - .data = gRouletteNumbersTiles, + .data = gRouletteNumbers_Gfx, .size = 0x280, - .tag = 8 + .tag = GFXTAG_CREDIT_DIGIT }, { - .data = gRouletteMultiplierTiles, + .data = gRouletteMultiplier_Gfx, .size = 0x500, - .tag = 9 + .tag = GFXTAG_MULTIPLIER }, { - .data = RouletteBallCounterTiles, + .data = sBallCounter_Gfx, .size = 0x140, - .tag = 10 + .tag = GFXTAG_BALL_COUNTER }, { - .data = RouletteCursorTiles, + .data = sCursor_Gfx, .size = 0x200, - .tag = 11 + .tag = GFXTAG_CURSOR }, {} }; @@ -2606,7 +2801,7 @@ static const union AnimCmd *const gSpriteAnimTable_85B77A8[] = gSpriteAnim_85B7780 }; -static const union AnimCmd gSpriteAnim_85B77AC[] = +static const union AnimCmd sAnim_Multiplier[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_FRAME(8, 0), @@ -2616,12 +2811,12 @@ static const union AnimCmd gSpriteAnim_85B77AC[] = ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B77C4[] = +static const union AnimCmd *const sAnims_Multiplier[] = { - gSpriteAnim_85B77AC + sAnim_Multiplier }; -static const union AnimCmd gSpriteAnim_85B77C8[] = +static const union AnimCmd sAnim_BallCounter[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_FRAME(2, 0), @@ -2631,59 +2826,60 @@ static const union AnimCmd gSpriteAnim_85B77C8[] = ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B77E0[] = +static const union AnimCmd *const sAnims_BallCounter[] = { - gSpriteAnim_85B77C8 + sAnim_BallCounter }; -static const struct SpriteTemplate gSpriteTemplate_85B77E4 = +static const struct SpriteTemplate sSpriteTemplate_Credit = { - .tileTag = 7, - .paletteTag = 5, - .oam = &gOamData_85B7730, + .tileTag = GFXTAG_CREDIT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Credit, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085B77FC = +static const struct SpriteTemplate sSpriteTemplate_CreditDigit = { - .tileTag = 8, - .paletteTag = 5, - .oam = &gOamData_85B7738, + .tileTag = GFXTAG_CREDIT_DIGIT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_CreditDigit, .anims = gSpriteAnimTable_85B77A8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085B7814 = +static const struct SpriteTemplate sSpriteTemplate_Multiplier = { - .tileTag = 9, - .paletteTag = 5, - .oam = &gOamData_85B7740, - .anims = gSpriteAnimTable_85B77C4, + .tileTag = GFXTAG_MULTIPLIER, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Multiplier, + .anims = sAnims_Multiplier, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814390C + .callback = SpriteCB_GridSquare }; -static const struct SpriteTemplate gUnknown_085B782C = +static const struct SpriteTemplate sSpriteTemplate_BallCounter = { - .tileTag = 10, - .paletteTag = 3, - .oam = &gOamData_85B7748, - .anims = gSpriteAnimTable_85B77E0, + .tileTag = GFXTAG_BALL_COUNTER, + .paletteTag = PALTAG_BALL_COUNTER, + .oam = &sOam_BallCounter, + .anims = sAnims_BallCounter, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_085B7844 = +// NOTE: This cursor is only used to identify the winning square on the grid +static const struct SpriteTemplate sSpriteTemplate_Cursor = { - .tileTag = 11, - .paletteTag = 5, + .tileTag = GFXTAG_CURSOR, + .paletteTag = PALTAG_INTERFACE, .oam = &gOamData_85B73EC, .anims = gDummySpriteAnimTable, .images = NULL, @@ -2691,7 +2887,7 @@ static const struct SpriteTemplate gUnknown_085B7844 = .callback = SpriteCallbackDummy }; -static const struct OamData gOamData_85B785C = +static const struct OamData sOam_Ball = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2700,10 +2896,10 @@ static const struct OamData gOamData_85B785C = .priority = 2, }; -static const struct CompressedSpriteSheet gUnknown_085B7864 = { - .data = gUnknown_085B6650, +static const struct CompressedSpriteSheet sSpriteSheet_Ball = { + .data = sBall_Gfx, .size = 0x200, - .tag = 12 + .tag = GFXTAG_BALL }; static const union AnimCmd gSpriteAnim_85B786C[] = @@ -2776,7 +2972,7 @@ static const union AnimCmd gSpriteAnim_85B78F0[] = ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B7904[] = +static const union AnimCmd *const sAnims_Ball[] = { gSpriteAnim_85B786C, gSpriteAnim_85B7880, @@ -2789,18 +2985,18 @@ static const union AnimCmd *const gSpriteAnimTable_85B7904[] = gSpriteAnim_85B78E8 }; -static const struct SpriteTemplate gSpriteTemplate_85B7928 = +static const struct SpriteTemplate sSpriteTemplate_Ball = { - .tileTag = 12, - .paletteTag = 2, - .oam = &gOamData_85B785C, - .anims = gSpriteAnimTable_85B7904, + .tileTag = GFXTAG_BALL, + .paletteTag = PALTAG_BALL, + .oam = &sOam_Ball, + .anims = sAnims_Ball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData gOamData_85B7940 = +static const struct OamData sOam_BoardCenter = { .y = 81, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -2810,25 +3006,25 @@ static const struct OamData gOamData_85B7940 = .priority = 2, }; -static const struct CompressedSpriteSheet gUnknown_085B7948 = +static const struct CompressedSpriteSheet sSpriteSheet_BoardCenter = { .data = gRouletteCenter_Gfx, .size = 0x800, - .tag = 6 + .tag = GFXTAG_BOARD_CENTER }; -static const struct SpriteTemplate gSpriteTemplate_85B7950 = +static const struct SpriteTemplate sSpriteTemplate_BoardCenter = { - .tileTag = 6, - .paletteTag = 2, - .oam = &gOamData_85B7940, + .tileTag = GFXTAG_BOARD_CENTER, + .paletteTag = PALTAG_BALL, + .oam = &sOam_BoardCenter, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814399C + .callback = SpriteCB_BoardCenter }; -static const struct OamData gOamData_85B7968 = +static const struct OamData sOam_Shroomish = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2837,7 +3033,7 @@ static const struct OamData gOamData_85B7968 = .priority = 2, }; -static const struct OamData gOamData_85B7970 = +static const struct OamData sOam_Taillow = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2846,14 +3042,14 @@ static const struct OamData gOamData_85B7970 = .priority = 2, }; -static const struct CompressedSpriteSheet gUnknown_085B7978 = +static const struct CompressedSpriteSheet sSpriteSheet_ShroomishTaillow = { - .data = gUnknown_085B67FC, + .data = sShroomishTaillow_Gfx, .size = 0xE00, - .tag = 13 + .tag = GFXTAG_SHROOMISH_TAILLOW }; -static const union AnimCmd gSpriteAnim_85B7980[] = +static const union AnimCmd sAnim_Shroomish[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(16, 6), @@ -2904,12 +3100,12 @@ static const union AnimCmd gSpriteAnim_85B79D0[] = ANIMCMD_JUMP(0) }; -static const union AnimCmd *const gSpriteAnimTable_85B79DC[] = +static const union AnimCmd *const sAnims_Shroomish[] = { - gSpriteAnim_85B7980 + sAnim_Shroomish }; -static const union AnimCmd *const gSpriteAnimTable_85B79E0[] = +static const union AnimCmd *const sAnims_Taillow[] = { gSpriteAnim_85B799C, gSpriteAnim_85B79A4, @@ -2919,26 +3115,26 @@ static const union AnimCmd *const gSpriteAnimTable_85B79E0[] = gSpriteAnim_85B79D0 }; -static const struct SpriteTemplate gSpriteTemplate_85B79F8 = +static const struct SpriteTemplate sSpriteTemplate_Shroomish = { - .tileTag = 13, - .paletteTag = 6, - .oam = &gOamData_85B7968, - .anims = gSpriteAnimTable_85B79DC, + .tileTag = GFXTAG_SHROOMISH_TAILLOW, + .paletteTag = PALTAG_SHROOMISH, + .oam = &sOam_Shroomish, + .anims = sAnims_Shroomish, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gSpriteTemplate_85B7A10 = +static const struct SpriteTemplate sSpriteTemplate_Taillow = { - .tileTag = 13, - .paletteTag = 7, - .oam = &gOamData_85B7970, - .anims = gSpriteAnimTable_85B79E0, + .tileTag = GFXTAG_SHROOMISH_TAILLOW, + .paletteTag = PALTAG_TAILLOW, + .oam = &sOam_Taillow, + .anims = sAnims_Taillow, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8145294 + .callback = SpriteCB_Taillow }; static const struct OamData gOamData_85B7A28 = @@ -2959,7 +3155,7 @@ static const struct OamData gOamData_85B7A30 = .priority = 2, }; -static const struct OamData gOamData_85B7A38 = +static const struct OamData sOam_TaillowShadow = { .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, @@ -2968,11 +3164,11 @@ static const struct OamData gOamData_85B7A38 = .priority = 2, }; -static const struct CompressedSpriteSheet gUnknown_085B7A40 = +static const struct CompressedSpriteSheet sSpriteSheet_Shadow = { - .data = gUnknown_085B7290, + .data = sShadow_Gfx, .size = 0x180, - .tag = 14 + .tag = GFXTAG_SHADOW }; static const union AffineAnimCmd gSpriteAffineAnim_85B7A48[] = @@ -2982,7 +3178,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_85B7A48[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_85B7A60[] = +static const union AffineAnimCmd sAffineAnim_TaillowShadow[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(-2, 0x0, 0, 15), @@ -2996,9 +3192,9 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7A88[] = gSpriteAffineAnim_85B7A48 }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7A8C[] = +static const union AffineAnimCmd *const sAffineAnims_TaillowShadow[] = { - gSpriteAffineAnim_85B7A60 + sAffineAnim_TaillowShadow }; static const union AffineAnimCmd gSpriteAffineAnim_85B7A90[] = @@ -3034,11 +3230,11 @@ static const union AnimCmd *const gSpriteAnimTable_85B7AB8[] = gSpriteAnim_85B7AAC }; -static const struct SpriteTemplate gSpriteTemplate_85B7ABC[] = +static const struct SpriteTemplate sSpriteTemplate_ShroomishShadow[] = { { - .tileTag = 14, - .paletteTag = 1, + .tileTag = GFXTAG_SHADOW, + .paletteTag = PALTAG_SHADOW, .oam = &gOamData_85B7A28, .anims = gSpriteAnimTable_85B7AB4, .images = NULL, @@ -3046,8 +3242,8 @@ static const struct SpriteTemplate gSpriteTemplate_85B7ABC[] = .callback = SpriteCallbackDummy }, { - .tileTag = 14, - .paletteTag = 1, + .tileTag = GFXTAG_SHADOW, + .paletteTag = PALTAG_SHADOW, .oam = &gOamData_85B7A30, .anims = gSpriteAnimTable_85B7AB8, .images = NULL, @@ -3056,34 +3252,34 @@ static const struct SpriteTemplate gSpriteTemplate_85B7ABC[] = } }; -static const struct SpriteTemplate gUnknown_085B7AEC = +static const struct SpriteTemplate sSpriteTemplate_TaillowShadow = { - .tileTag = 14, - .paletteTag = 1, - .oam = &gOamData_85B7A38, + .tileTag = GFXTAG_SHADOW, + .paletteTag = PALTAG_SHADOW, + .oam = &sOam_TaillowShadow, .anims = gSpriteAnimTable_85B7AB8, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_85B7A8C, - .callback = sub_8145294 + .affineAnims = sAffineAnims_TaillowShadow, + .callback = SpriteCB_Taillow }; -static void sub_81428C4(u8 r0) +static void Task_ShowMinBetYesNo(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DoYesNoFuncWithChoice(r0, &gUnknown_085B6408); + DoYesNoFuncWithChoice(taskId, &sYesNoTable_AcceptMinBet); } -static void sub_81428E4(u8 taskId) +static void Task_FadeToRouletteGame(u8 taskId) { if (!gPaletteFade.active) { SetVBlankCallback(NULL); - SetMainCallback2(sub_81405CC); + SetMainCallback2(CB2_LoadRoulette); DestroyTask(taskId); } } -static void sub_8142918(u8 taskId) +static void Task_AcceptMinBet(u8 taskId) { ClearStdWindowAndFrame(0, TRUE); HideCoinsWindow(); @@ -3091,10 +3287,10 @@ static void sub_8142918(u8 taskId) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gPaletteFade.delayCounter = gPaletteFade.multipurpose2; UpdatePaletteFade(); - gTasks[taskId].func = sub_81428E4; + gTasks[taskId].func = Task_FadeToRouletteGame; } -static void sub_814297C(u8 taskId) +static void Task_DeclineMinBet(u8 taskId) { ClearStdWindowAndFrame(0, FALSE); HideCoinsWindow(); @@ -3102,10 +3298,10 @@ static void sub_814297C(u8 taskId) DestroyTask(taskId); } -static void sub_81429A0(u8 taskId) +static void Task_NotEnoughForMinBet(u8 taskId) { gTasks[taskId].data[0]++; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { gSpecialVar_0x8004 = 1; HideCoinsWindow(); @@ -3115,52 +3311,56 @@ static void sub_81429A0(u8 taskId) } } -static void sub_81429F0(u8 taskId) +static void Task_PrintMinBet(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { - u32 temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)]; - ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1); + u32 minBet = sTableMinBets[GET_TABLE_ID(gSpecialVar_0x8004)]; + ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX); DrawStdWindowFrame(0, FALSE); AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); - gTasks[taskId].func = sub_81428C4; + gTasks[taskId].func = Task_ShowMinBetYesNo; } } -static void Task_Roulette_0(u8 taskId) +static void Task_PrintRouletteEntryMsg(u8 taskId) { - s32 temp; - PrintCoinsString(gTasks[taskId].data[13]); - temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)]; - ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1); - if (gTasks[taskId].data[13] >= temp) + s32 minBet; + PrintCoinsString(gTasks[taskId].tCoins); + minBet = sTableMinBets[GET_TABLE_ID(gSpecialVar_0x8004)]; + ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1); + + if (gTasks[taskId].tCoins >= minBet) { - if ((gSpecialVar_0x8004 & 0x80) && (gSpecialVar_0x8004 & 1)) + if ((gSpecialVar_0x8004 & ROULETTE_SPECIAL_RATE) && (gSpecialVar_0x8004 & 1)) { + // Special rate for Game Corner service day (only at second table) DrawStdWindowFrame(0, FALSE); AddTextPrinterParameterized(0, 1, Roulette_Text_SpecialRateTable, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); - gTasks[taskId].func = sub_81429F0; + gTasks[taskId].func = Task_PrintMinBet; } else { + // Print minimum bet StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX); DrawStdWindowFrame(0, FALSE); AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); - gTasks[taskId].func = sub_81428C4; + gTasks[taskId].func = Task_ShowMinBetYesNo; } } else { + // Not enough for minimum bet StringExpandPlaceholders(gStringVar4, Roulette_Text_NotEnoughCoins); DrawStdWindowFrame(0, FALSE); AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); - gTasks[taskId].func = sub_81429A0; - gTasks[taskId].data[13] = 0; + gTasks[taskId].func = Task_NotEnoughForMinBet; + gTasks[taskId].tCoins = 0; gTasks[taskId].data[0] = 0; } } @@ -3171,38 +3371,39 @@ void PlayRoulette(void) ScriptContext2_Enable(); ShowCoinsWindow(GetCoins(), 1, 1); - taskId = CreateTask(Task_Roulette_0, 0); - gTasks[taskId].data[13] = GetCoins(); + taskId = CreateTask(Task_PrintRouletteEntryMsg, 0); + gTasks[taskId].tCoins = GetCoins(); } -static void sub_8142C0C(u8 r0) +static void LoadOrFreeMiscSpritePalettesAndSheets(bool8 free) { - if (!r0) + if (!free) { FreeAllSpritePalettes(); - LoadSpritePalettes(gUnknown_085B7384); - LoadCompressedSpriteSheet(&gUnknown_085B7864); - LoadCompressedSpriteSheet(&gUnknown_085B7978); - LoadCompressedSpriteSheet(&gUnknown_085B7A40); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Ball); + LoadCompressedSpriteSheet(&sSpriteSheet_ShroomishTaillow); + LoadCompressedSpriteSheet(&sSpriteSheet_Shadow); } else { - FreeSpriteTilesByTag(14); - FreeSpriteTilesByTag(13); - FreeSpriteTilesByTag(12); + // Unused + FreeSpriteTilesByTag(GFXTAG_SHADOW); + FreeSpriteTilesByTag(GFXTAG_SHROOMISH_TAILLOW); + FreeSpriteTilesByTag(GFXTAG_BALL); FreeAllSpritePalettes(); } } -static u8 sub_8142C60(const struct SpriteTemplate *r0, u8 r1, u16 *r2) +static u8 CreateBoardIconSprite(const struct SpriteTemplate *r0, u8 r1, u16 *r2) { u16 temp; u8 spriteId = CreateSprite(r0, 116, 80, r0->oam->y); - gSprites[spriteId].data[0] = *r2; - gSprites[spriteId].data[1] = r1; + gSprites[spriteId].data[0] = *r2; + gSprites[spriteId].data[1] = r1; gSprites[spriteId].coordOffsetEnabled = TRUE; - gSprites[spriteId].animPaused = TRUE; - gSprites[spriteId].affineAnimPaused = TRUE; + gSprites[spriteId].animPaused = TRUE; + gSprites[spriteId].affineAnimPaused = TRUE; temp = *r2; *r2 += 30; if (*r2 >= 360) @@ -3210,170 +3411,173 @@ static u8 sub_8142C60(const struct SpriteTemplate *r0, u8 r1, u16 *r2) return spriteId; } -static void sub_8142CD0(void) +static void CreateGridSprites(void) { u8 i, j; u8 spriteId; struct SpriteSheet s; - LZ77UnCompWram(gUnknown_085B7488.data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheet_Headers.data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = gUnknown_085B7488.size; - s.tag = gUnknown_085B7488.tag; + s.size = sSpriteSheet_Headers.size; + s.tag = sSpriteSheet_Headers.tag; LoadSpriteSheet(&s); - LZ77UnCompWram(gUnknown_085B7490.data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheet_PokeIcons.data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = gUnknown_085B7490.size; - s.tag = gUnknown_085B7490.tag; + s.size = sSpriteSheet_PokeIcons.size; + s.tag = sSpriteSheet_PokeIcons.tag; LoadSpriteSheet(&s); - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_BOARD_COLORS; i++) { u8 o = i * 24; - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_BOARD_POKES; j++) { - spriteId = gUnknown_0203AB88->var3C[(i * 4) + 29 + j] = CreateSprite(&gSpriteTemplate_85B75B0[j], (j * 24) + 148, o + 92, 30); + spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_GRID_ICONS + j] = CreateSprite(&sSpriteTemplate_GridIcons[j], (j * 24) + 148, o + 92, 30); gSprites[spriteId].animPaused = TRUE; o += 24; if (o >= 72) o = 0; } } - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_PokeHeaders); i++) { - spriteId = gUnknown_0203AB88->var3C[i + 41] = CreateSprite(&gSpriteTemplate_85B7508[i], (i * 24) + 148, 70, 30); + spriteId = sRoulette->spriteIds[i + SPR_POKE_HEADER_1] = CreateSprite(&sSpriteTemplates_PokeHeaders[i], (i * 24) + 148, 70, 30); gSprites[spriteId].animPaused = TRUE; } - for (i = 0; i < 3; i++) + for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_ColorHeaders); i++) { - spriteId = gUnknown_0203AB88->var3C[i + 45] = CreateSprite(&gSpriteTemplate_85B7568[i], 126, (i * 24) + 92, 30); + spriteId = sRoulette->spriteIds[i + SPR_COLOR_HEADER_1] = CreateSprite(&sSpriteTemplates_ColorHeaders[i], 126, (i * 24) + 92, 30); gSprites[spriteId].animPaused = TRUE; } } -static void unref_sub_8142E3C(void) +// Unused +static void DestroyGridSprites(void) { u8 i; - for (i = 0; i < 12; i++) + for (i = 0; i < NUM_ROULETTE_SLOTS; i++) { - DestroySprite(&gSprites[gUnknown_0203AB88->var3C[i + 29]]); + DestroySprite(&gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]]); } } -static void sub_8142E70(u8 r0, u8 r1) +static void ShowHideGridIcons(bool8 hideAll, u8 hideSquare) { u8 i; - switch (r0) + switch (hideAll) { - case 1: - for (i = 0; i < 19; i++) + case TRUE: + // Hide grid icons and headers + for (i = 0; i < NUM_GRID_SELECTIONS; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = TRUE; } break; - case 0: - for (i = 0; i < 12; i++) + case FALSE: + for (i = 0; i < NUM_ROULETTE_SLOTS; i++) { - if (!(gUnknown_0203AB88->var08 & gUnknown_085B62E4[i].var04)) - gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = FALSE; - else if (gUnknown_085B62E4[i].var02 != r1) - gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = TRUE; + if (!(sRoulette->hitFlags & sRouletteSlots[i].flag)) + gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = FALSE; + else if (sRouletteSlots[i].gridSquare != hideSquare) + gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = TRUE; else - gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = FALSE; } - for (; i < 19; i++) + // Always show grid headers + for (; i < NUM_GRID_SELECTIONS; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = FALSE; } break; } } -static void sub_8142F7C(void) +static void CreateGridBallSprites(void) { u8 i; - for (i = 0; i < 6; i++) + for (i = 0; i < BALLS_PER_ROUND; i++) { - gUnknown_0203AB88->var3C[i + 49] = CreateSprite(&gSpriteTemplate_85B7928, 116, 20, 10); - gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = TRUE; - gSprites[gUnknown_0203AB88->var3C[i + 49]].data[0] = 1; - gSprites[gUnknown_0203AB88->var3C[i + 49]].callback = sub_814390C; - gSprites[gUnknown_0203AB88->var3C[i + 49]].oam.priority = 1; - StartSpriteAnim(&gSprites[gUnknown_0203AB88->var3C[i + 49]], 8); + sRoulette->spriteIds[i + SPR_GRID_BALL_1] = CreateSprite(&sSpriteTemplate_Ball, 116, 20, 10); + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].data[0] = 1; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].callback = SpriteCB_GridSquare; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].oam.priority = 1; + StartSpriteAnim(&gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]], 8); } } -static void sub_8143038(u8 r0, u8 r1) +static void ShowHideGridBalls(bool8 hideAll, u8 hideBallId) { u8 i = 0; - if (r0) + if (hideAll) { - for ( ; i < 6; i++) + for (; i < BALLS_PER_ROUND; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = TRUE; } } else { - for ( ; i < 6; i++) + for (; i < BALLS_PER_ROUND; i++) { - if (!gUnknown_0203AB88->var0C[i] || i == r1) + if (!sRoulette->hitSquares[i] || i == hideBallId) { - gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = TRUE; } else { - gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = FALSE; - gSprites[gUnknown_0203AB88->var3C[i + 49]].pos1.x = (gUnknown_085B6154[gUnknown_0203AB88->var0C[i]].var03 + 1) * 8 + 4; - gSprites[gUnknown_0203AB88->var3C[i + 49]].pos1.y = (gUnknown_085B6154[gUnknown_0203AB88->var0C[i]].var04 + 1) * 8 + 3; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].pos1.x = (sGridSelections[sRoulette->hitSquares[i]].x + 1) * 8 + 4; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].pos1.y = (sGridSelections[sRoulette->hitSquares[i]].y + 1) * 8 + 3; } } } } -static void sub_8143150(u8 r0) +static void ShowHideWinSlotCursor(u8 selectionId) { - if (!r0) + if (selectionId == 0) { - gSprites[gUnknown_0203AB88->var3C[48]].invisible = TRUE; + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE; } else { - gSprites[gUnknown_0203AB88->var3C[48]].invisible = FALSE; - gSprites[gUnknown_0203AB88->var3C[48]].pos1.x = (gUnknown_085B6154[r0].var03 + 2) * 8; - gSprites[gUnknown_0203AB88->var3C[48]].pos1.y = (gUnknown_085B6154[r0].var04 + 2) * 8; + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = FALSE; + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].pos1.x = (sGridSelections[selectionId].x + 2) * 8; + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].pos1.y = (sGridSelections[selectionId].y + 2) * 8; } } -static void sub_81431E4(void) +static void CreateBoardIconSprites(void) { u8 i, j; u16 k; struct SpriteSheet s; - LZ77UnCompWram(gUnknown_085B741C.data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheet_BoardIcons.data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = gUnknown_085B741C.size; - s.tag = gUnknown_085B741C.tag; + s.size = sSpriteSheet_BoardIcons.size; + s.tag = sSpriteSheet_BoardIcons.tag; LoadSpriteSheet(&s); k = 15; - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_BOARD_COLORS; i++) { - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_BOARD_POKES; j++) { u8 spriteId; - spriteId = gUnknown_0203AB88->var3C[(i * 4) + 7 + j] = sub_8142C60(&gSpriteTemplate_85B7610[i * 4 + j], 40, &k); + spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_BOARD_ICONS + j] = CreateBoardIconSprite(&sSpriteTemplates_BoardIcons[i * NUM_BOARD_POKES + j], 40, &k); gSprites[spriteId].animPaused = TRUE; gSprites[spriteId].affineAnimPaused = TRUE; } } } -static void sub_8143280(struct Sprite *sprite) +static void SpriteCB_BoardIcon(struct Sprite *sprite) { s16 cos; s16 sin; u32 matrixNum; - s16 angle = gUnknown_0203AB88->var24 + sprite->data[0]; + s16 angle = sRoulette->var24 + sprite->data[0]; if (angle >= 360) angle -= 360; sin = Sin2(angle); @@ -3388,55 +3592,56 @@ static void sub_8143280(struct Sprite *sprite) gOamMatrices[matrixNum].c = -sin; } -static void sub_8143314(void) +static void CreateInterfaceSprites(void) { u8 i; - for (i = 0; i < 5; i++) + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_Interface) - 1; i++) { struct SpriteSheet s; - LZ77UnCompWram(gUnknown_085B7750[i].data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheets_Interface[i].data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = gUnknown_085B7750[i].size; - s.tag = gUnknown_085B7750[i].tag; + s.size = sSpriteSheets_Interface[i].size; + s.tag = sSpriteSheets_Interface[i].tag; LoadSpriteSheet(&s); } - gUnknown_0203AB88->var3C[20] = CreateSprite(&gSpriteTemplate_85B77E4, 208, 16, 4); - gSprites[gUnknown_0203AB88->var3C[20]].animPaused = TRUE; - for (i = 0; i < 4; i++) + sRoulette->spriteIds[SPR_CREDIT] = CreateSprite(&sSpriteTemplate_Credit, 208, 16, 4); + gSprites[sRoulette->spriteIds[SPR_CREDIT]].animPaused = TRUE; + for (i = 0; i < MAX_COIN_DIGITS; i++) { - gUnknown_0203AB88->var3C[i + 21] = CreateSprite(&gUnknown_085B77FC, i * 8 + 196, 24, 0); - gSprites[gUnknown_0203AB88->var3C[i + 21]].invisible = TRUE; - gSprites[gUnknown_0203AB88->var3C[i + 21]].animPaused = TRUE; + sRoulette->spriteIds[i + SPR_CREDIT_DIG_1] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 8 + 196, 24, 0); + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].animPaused = TRUE; } - gUnknown_0203AB88->var3C[25] = CreateSprite(&gUnknown_085B7814, 120, 68, 4); - gSprites[gUnknown_0203AB88->var3C[25]].animPaused = TRUE; - for (i = 0; i < 3; i++) + sRoulette->spriteIds[SPR_MULTIPLIER] = CreateSprite(&sSpriteTemplate_Multiplier, 120, 68, 4); + gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].animPaused = TRUE; + for (i = 0; i < BALLS_PER_ROUND / 2; i++) { - gUnknown_0203AB88->var3C[i + 26] = CreateSprite(&gUnknown_085B782C, i * 16 + 192, 36, 4); - gSprites[gUnknown_0203AB88->var3C[i + 26]].invisible = TRUE; - gSprites[gUnknown_0203AB88->var3C[i + 26]].animPaused = TRUE; + // Each ball counter sprite has 2 balls + sRoulette->spriteIds[i + SPR_BALL_COUNTER_1] = CreateSprite(&sSpriteTemplate_BallCounter, i * 16 + 192, 36, 4); + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].animPaused = TRUE; } - gUnknown_0203AB88->var3C[48] = CreateSprite(&gUnknown_085B7844, 152, 96, 9); - gSprites[gUnknown_0203AB88->var3C[48]].oam.priority = 1; - gSprites[gUnknown_0203AB88->var3C[48]].animPaused = TRUE; - gSprites[gUnknown_0203AB88->var3C[48]].invisible = TRUE; + sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR] = CreateSprite(&sSpriteTemplate_Cursor, 152, 96, 9); + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].oam.priority = 1; + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].animPaused = TRUE; + gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE; } -static void sub_8143514(u16 r0) +static void SetCreditDigits(u16 r0) { u8 i; u16 d = 1000; bool8 v = FALSE; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_COIN_DIGITS; i++) { u8 t = r0 / d; - gSprites[gUnknown_0203AB88->var3C[i + 21]].invisible = TRUE; - if (t > 0 || v || i == 3) + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].invisible = TRUE; + if (t > 0 || v || i == MAX_COIN_DIGITS - 1) { - gSprites[gUnknown_0203AB88->var3C[i + 21]].invisible = FALSE; - gSprites[gUnknown_0203AB88->var3C[i + 21]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[i + 21]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[i + 21]].anims + t)->type; + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].anims + t)->type; v = TRUE; } r0 = r0 % d; @@ -3444,143 +3649,145 @@ static void sub_8143514(u16 r0) } } -static u8 sub_8143614(u8 r0) +// Identical to GetMultiplier but with different data array +static u8 GetMultiplierAnimId(u8 selectionId) { - u8 t[5] = {0, 1, 2, 3, 4}; + u8 animIds[5] = {0, 1, 2, 3, 4}; - if (r0 >= 20) - r0 = 0; - switch (gUnknown_085B6154[r0].var01_0) + if (selectionId > NUM_GRID_SELECTIONS) + selectionId = 0; + + switch (sGridSelections[selectionId].baseMultiplier) { - case 3: - r0 = r0 / 5 - 1; - if (gUnknown_0203AB88->var16[r0] > 3) + case NUM_BOARD_COLORS: + selectionId = selectionId / 5 - 1; + if (sRoulette->colorHits[selectionId] > 3) return 0; - return t[gUnknown_0203AB88->var16[r0] + 1]; - case 4: - r0--; - if (gUnknown_0203AB88->var12[r0] > 2) + return animIds[sRoulette->colorHits[selectionId] + 1]; + case NUM_BOARD_POKES: + selectionId--; + if (sRoulette->pokeHits[selectionId] > 2) return 0; - return t[gUnknown_0203AB88->var12[r0] + 2]; - case 12: - if (gUnknown_0203AB88->var08 & gUnknown_085B6154[r0].var08) + return animIds[sRoulette->pokeHits[selectionId] + 2]; + case NUM_ROULETTE_SLOTS: + if (sRoulette->hitFlags & sGridSelections[selectionId].flag) return 0; - return t[4]; + return animIds[4]; } return 0; } -static void sub_81436D0(u8 r0) +static void SetMultiplierSprite(u8 selectionId) { - struct Sprite *s = &gSprites[gUnknown_0203AB88->var3C[25]]; - s->animCmdIndex = sub_8143614(r0); + struct Sprite *s = &gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]]; + s->animCmdIndex = GetMultiplierAnimId(selectionId); s->oam.tileNum = s->sheetTileStart + (*s->anims + s->animCmdIndex)->type; } -static void sub_814372C(u8 r0) +static void SetBallCounterNumLeft(u8 numBalls) { u8 i; u8 t = 0; - if (gUnknown_0203AB88->var19 == 1) + if (sRoulette->minBet == 1) t = 2; - switch (r0) + switch (numBalls) { case 6: - for (i = 0; i < 3; i++) + for (i = 0; i < BALLS_PER_ROUND / 2; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 26]].invisible = FALSE; - gSprites[gUnknown_0203AB88->var3C[i + 26]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[i + 26]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[i + 26]].anims)->type; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].anims)->type; } break; case 5: - gSprites[gUnknown_0203AB88->var3C[28]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[28]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[28]].anims + t + 1)->type; + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].oam.tileNum = + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].anims + t + 1)->type; break; case 4: - gSprites[gUnknown_0203AB88->var3C[28]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[28]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[28]].anims + t + 2)->type; + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].oam.tileNum = + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].anims + t + 2)->type; break; case 3: - gSprites[gUnknown_0203AB88->var3C[27]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[27]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[27]].anims + t + 1)->type; + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].oam.tileNum = + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].anims + t + 1)->type; break; case 2: - gSprites[gUnknown_0203AB88->var3C[27]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[27]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[27]].anims + t + 2)->type; + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].oam.tileNum = + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].anims + t + 2)->type; break; case 1: - gSprites[gUnknown_0203AB88->var3C[26]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[26]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[26]].anims + t + 1)->type; + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_1]].oam.tileNum = + gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_1]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_1]].anims + t + 1)->type; break; case 0: default: - for (i = 0; i < 3; i++) + for (i = 0; i < BALLS_PER_ROUND / 2; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 26]].oam.tileNum = - gSprites[gUnknown_0203AB88->var3C[i + 26]].sheetTileStart - + (*gSprites[gUnknown_0203AB88->var3C[i + 26]].anims + t + 2)->type; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].anims + t + 2)->type; } } } -static void sub_814390C(struct Sprite *sprite) +static void SpriteCB_GridSquare(struct Sprite *sprite) { - sprite->pos2.x = gUnknown_0203AB88->var26; + sprite->pos2.x = sRoulette->var26; } -static void sub_814391C(void) +static void CreateBoardCenterSprite(void) { u8 spriteId; struct SpriteSheet s; - LZ77UnCompWram(gUnknown_085B7948.data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheet_BoardCenter.data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = gUnknown_085B7948.size; - s.tag = gUnknown_085B7948.tag; + s.size = sSpriteSheet_BoardCenter.size; + s.tag = sSpriteSheet_BoardCenter.tag; LoadSpriteSheet(&s); - spriteId = CreateSprite(&gSpriteTemplate_85B7950, 116, 80, 81); - gSprites[spriteId].data[0] = gUnknown_0203AB88->var24; + spriteId = CreateSprite(&sSpriteTemplate_BoardCenter, 116, 80, 81); + gSprites[spriteId].data[0] = sRoulette->var24; gSprites[spriteId].data[1] = 0; gSprites[spriteId].animPaused = TRUE; gSprites[spriteId].affineAnimPaused = TRUE; gSprites[spriteId].coordOffsetEnabled = TRUE; } -static void sub_814399C(struct Sprite *sprite) +static void SpriteCB_BoardCenter(struct Sprite *sprite) { u32 t = sprite->oam.matrixNum; struct OamMatrix *m = &gOamMatrices[0]; - m[t].d = gUnknown_0203AB88->var2C.a; - m[t].a = gUnknown_0203AB88->var2C.a; - m[t].b = gUnknown_0203AB88->var2C.b; - m[t].c = gUnknown_0203AB88->var2C.c; + m[t].d = sRoulette->var2C.a; + m[t].a = sRoulette->var2C.a; + m[t].b = sRoulette->var2C.b; + m[t].c = sRoulette->var2C.c; } -static void sub_81439C8(void) +static void CreateBoardBallSprites(void) { u8 i; - for (i = 0; i < 6; i++) + for (i = 0; i < BALLS_PER_ROUND; i++) { - gUnknown_0203AB88->var3C[i] = CreateSprite(&gSpriteTemplate_85B7928, 116, 80, 57 - i); - if (gUnknown_0203AB88->var3C[i] != MAX_SPRITES) + sRoulette->spriteIds[i] = CreateSprite(&sSpriteTemplate_Ball, 116, 80, 57 - i); + if (sRoulette->spriteIds[i] != MAX_SPRITES) { - gSprites[gUnknown_0203AB88->var3C[i]].invisible = TRUE; - gSprites[gUnknown_0203AB88->var3C[i]].coordOffsetEnabled = TRUE; + gSprites[sRoulette->spriteIds[i]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i]].coordOffsetEnabled = TRUE; } } } -static void sub_8143A40(void) +static void HideBoardBalls(void) { - u8 t = gUnknown_0203AB88->var3C[0]; + u8 t = sRoulette->spriteIds[SPR_BALL_1]; u8 i; - for (i = 0; i < 6; i++) + for (i = 0; i < BALLS_PER_ROUND; i++) { u8 j; gSprites[t].invisible = TRUE; @@ -3596,15 +3803,15 @@ static void sub_8143A40(void) static s16 sub_8143AC8(struct Sprite *sprite) { - if (gUnknown_0203AB88->var24 > sprite->data[3]) + if (sRoulette->var24 > sprite->data[3]) { - sprite->data[6] = 360 - gUnknown_0203AB88->var24 + sprite->data[3]; + sprite->data[6] = 360 - sRoulette->var24 + sprite->data[3]; if (sprite->data[6] >= 360) sprite->data[6] -= 360; } else { - sprite->data[6] = sprite->data[3] - gUnknown_0203AB88->var24; + sprite->data[6] = sprite->data[3] - sRoulette->var24; } return sprite->data[6]; @@ -3612,8 +3819,8 @@ static s16 sub_8143AC8(struct Sprite *sprite) static u8 sub_8143B14(struct Sprite *sprite) { - gUnknown_0203AB88->var7E = sub_8143AC8(sprite) / 30.0f; - return gUnknown_0203AB88->var7E; + sRoulette->var7E = sub_8143AC8(sprite) / 30.0f; + return sRoulette->var7E; } static s16 sub_8143B48(struct Sprite *sprite) @@ -3641,18 +3848,18 @@ static void sub_8143B84(struct Sprite *sprite) { s16 sin, cos; - gUnknown_0203AB88->var8C += gUnknown_0203AB88->var90; - gUnknown_0203AB88->var88 += gUnknown_0203AB88->var8C; + sRoulette->var8C += sRoulette->var90; + sRoulette->var88 += sRoulette->var8C; - if (gUnknown_0203AB88->var88 >= 360) - gUnknown_0203AB88->var88 -= 360.0f; - else if (gUnknown_0203AB88->var88 < 0.0f) - gUnknown_0203AB88->var88 += 360.0f; + if (sRoulette->var88 >= 360) + sRoulette->var88 -= 360.0f; + else if (sRoulette->var88 < 0.0f) + sRoulette->var88 += 360.0f; - sprite->data[3] = gUnknown_0203AB88->var88; - gUnknown_0203AB88->var98 += gUnknown_0203AB88->var9C; - gUnknown_0203AB88->var94 += gUnknown_0203AB88->var98; - sprite->data[4] = gUnknown_0203AB88->var94; + sprite->data[3] = sRoulette->var88; + sRoulette->var98 += sRoulette->var9C; + sRoulette->var94 += sRoulette->var98; + sprite->data[4] = sRoulette->var94; sin = Sin2(sprite->data[3]); cos = Cos2(sprite->data[3]); sprite->pos2.x = sin * sprite->data[4] >> 12; @@ -3667,7 +3874,7 @@ static void sub_8143B84(struct Sprite *sprite) static void sub_8143C90(struct Sprite *sprite) { s16 sin, cos; - sprite->data[3] = gUnknown_0203AB88->var24 + sprite->data[6]; + sprite->data[3] = sRoulette->var24 + sprite->data[6]; if (sprite->data[3] >= 360) sprite->data[3] -= 360; sin = Sin2(sprite->data[3]); @@ -3690,10 +3897,10 @@ static void sub_8143CFC(struct Sprite *sprite) { if (!sprite->data[0]) { - if (gUnknown_0203AB88->var94 <= gUnknown_0203AB88->varA0 - 2.0f) + if (sRoulette->var94 <= sRoulette->varA0 - 2.0f) { - gUnknown_0203AB88->var7D = 0xFF; - gUnknown_0203AB88->var03_7 = 0; + sRoulette->var7D = 0xFF; + sRoulette->var03_7 = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -3701,16 +3908,16 @@ static void sub_8143CFC(struct Sprite *sprite) sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; sprite->callback = sub_8143C90; m4aSongNumStartOrChange(SE_HASHI); - gUnknown_0203AB88->var9C = gUnknown_0203AB88->var98 = 0.0f; - gUnknown_0203AB88->var8C = -1.0f; + sRoulette->var9C = sRoulette->var98 = 0.0f; + sRoulette->var8C = -1.0f; } } else { - if (gUnknown_0203AB88->var94 >= gUnknown_0203AB88->varA0 - 2.0f) + if (sRoulette->var94 >= sRoulette->varA0 - 2.0f) { - gUnknown_0203AB88->var7D = 0xFF; - gUnknown_0203AB88->var03_7 = 0; + sRoulette->var7D = 0xFF; + sRoulette->var03_7 = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -3718,14 +3925,14 @@ static void sub_8143CFC(struct Sprite *sprite) sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; sprite->callback = sub_8143C90; m4aSongNumStartOrChange(SE_HASHI); - gUnknown_0203AB88->var9C = gUnknown_0203AB88->var98 = 0.0f; - gUnknown_0203AB88->var8C = -1.0f; + sRoulette->var9C = sRoulette->var98 = 0.0f; + sRoulette->var8C = -1.0f; } } } } -static void sub_8143E14(struct Sprite *sprite) +static void SpriteCB_Shroomish(struct Sprite *sprite) { float f0, f1, f2; sub_8143B84(sprite); @@ -3736,8 +3943,8 @@ static void sub_8143E14(struct Sprite *sprite) if (sprite->data[0] != 1) { f0 = sprite->data[7]; - f1 = (f0 * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01 + (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 - 1)); - f2 = (f0 / gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0C); + f1 = (f0 * gUnknown_085B6348[sRoulette->tableId].var01 + (gUnknown_085B6348[sRoulette->tableId].var02 - 1)); + f2 = (f0 / gUnknown_085B6348[sRoulette->tableId].var0C); } else { @@ -3748,8 +3955,8 @@ static void sub_8143E14(struct Sprite *sprite) if (sprite->data[0] != 0) { f0 = sprite->data[7]; - f1 = (f0 * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01 + (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 - 1)); - f2 = -(f0 / gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0C); + f1 = (f0 * gUnknown_085B6348[sRoulette->tableId].var01 + (gUnknown_085B6348[sRoulette->tableId].var02 - 1)); + f2 = -(f0 / gUnknown_085B6348[sRoulette->tableId].var0C); } else { @@ -3759,10 +3966,10 @@ static void sub_8143E14(struct Sprite *sprite) default: return; } - gUnknown_0203AB88->varA0 = gUnknown_0203AB88->var94; - gUnknown_0203AB88->var98 = f2; - gUnknown_0203AB88->var9C = -((f2 * 2.0f) / f1 + (2.0f / (f1 * f1))); - gUnknown_0203AB88->var8C = 0.0f; + sRoulette->varA0 = sRoulette->var94; + sRoulette->var98 = f2; + sRoulette->var9C = -((f2 * 2.0f) / f1 + (2.0f / (f1 * f1))); + sRoulette->var8C = 0.0f; sprite->animPaused = FALSE; sprite->animNum = 0; sprite->animBeginning = TRUE; @@ -3777,8 +3984,8 @@ static void sub_8143FA4(struct Sprite *sprite) sprite->data[2]++; if (sprite->data[2] > 29 && sprite->pos2.y >= 0) { - gUnknown_0203AB88->var7D = 0xFF; - gUnknown_0203AB88->var03_7 = FALSE; + sRoulette->var7D = 0xFF; + sRoulette->var03_7 = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -3786,7 +3993,7 @@ static void sub_8143FA4(struct Sprite *sprite) sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; sprite->callback = sub_8143C90; m4aSongNumStartOrChange(SE_HASHI); - gUnknown_0203AB88->var03_6 = TRUE; + sRoulette->var03_6 = TRUE; } } @@ -3797,7 +4004,7 @@ static void sub_8144050(struct Sprite *sprite) sprite->pos2.y--; if (sprite->data[2] == 45) { - if (gSprites[gUnknown_0203AB88->var3C[55]].animCmdIndex == 1) + if (gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animCmdIndex == 1) sprite->pos2.y++; } } @@ -3805,9 +4012,9 @@ static void sub_8144050(struct Sprite *sprite) { if (sprite->data[2] < sprite->data[7]) { - if (gSprites[gUnknown_0203AB88->var3C[55]].animDelayCounter == 0) + if (gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animDelayCounter == 0) { - if (gSprites[gUnknown_0203AB88->var3C[55]].animCmdIndex == 1) + if (gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animCmdIndex == 1) sprite->pos2.y++; else sprite->pos2.y--; @@ -3848,18 +4055,18 @@ static void sub_8144128(struct Sprite *sprite) } } -static void sub_8144168(struct Sprite *sprite) +static void CreateClearSpeciesSprite(struct Sprite *sprite) { sub_8143B84(sprite); - switch (gUnknown_0203AB88->var03_0) + switch (sRoulette->useTaillow) { default: - case 0: - sub_81446DC(sprite); - sprite->callback = sub_8143E14; + case FALSE: + CreateShroomishSprite(sprite); + sprite->callback = SpriteCB_Shroomish; break; - case 1: - sub_81448B8(sprite); + case TRUE: + CreateTaillowSprite(sprite); sprite->callback = sub_8144128; break; } @@ -3869,13 +4076,13 @@ static void prev_quest_read_x24_hm_usage(struct Sprite *sprite) { sub_8143B84(sprite); if (sprite->data[2]-- == 16) - gUnknown_0203AB88->var98 *= -1.0f; + sRoulette->var98 *= -1.0f; if (sprite->data[2] == 0) { if (!sprite->data[0]) { - gUnknown_0203AB88->var7D = 0xFF; - gUnknown_0203AB88->var03_7 = 0; + sRoulette->var7D = 0xFF; + sRoulette->var03_7 = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -3898,10 +4105,10 @@ static void sub_8144264(struct Sprite *sprite) sub_8143B84(sprite); sprite->data[2] = 0; sub_8143B14(sprite); - if (!(gUnknown_085B62E4[gUnknown_0203AB88->var7E].var04 & gUnknown_0203AB88->var08)) + if (!(sRouletteSlots[sRoulette->var7E].flag & sRoulette->hitFlags)) { - gUnknown_0203AB88->var7D = 0xFF; - gUnknown_0203AB88->var03_7 = 0; + sRoulette->var7D = 0xFF; + sRoulette->var03_7 = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -3912,48 +4119,44 @@ static void sub_8144264(struct Sprite *sprite) } else { - u8 t; + u8 slotId; u32 z; m4aSongNumStart(SE_KON); z = Random() & 1; if (z) { - gUnknown_0203AB88->var8C = 0.0f; - gUnknown_0203AB88->var7F = t = (gUnknown_0203AB88->var7E + 1) % 12; + sRoulette->var8C = 0.0f; + sRoulette->var7F = slotId = (sRoulette->var7E + 1) % NUM_ROULETTE_SLOTS; } else { float temp; - gUnknown_0203AB88->var8C = (temp = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var1C) * 2.0f; - t = (gUnknown_0203AB88->var7E + 11) % 12; - gUnknown_0203AB88->var7F = gUnknown_0203AB88->var7E; + sRoulette->var8C = (temp = gUnknown_085B6348[sRoulette->tableId].var1C) * 2.0f; + slotId = (sRoulette->var7E + NUM_ROULETTE_SLOTS - 1) % NUM_ROULETTE_SLOTS; + sRoulette->var7F = sRoulette->var7E; } - if (gUnknown_085B62E4[t].var04 & gUnknown_0203AB88->var08) + if (sRouletteSlots[slotId].flag & sRoulette->hitFlags) { sprite->data[0] = 1; - sprite->data[2] = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02; + sprite->data[2] = gUnknown_085B6348[sRoulette->tableId].var02; } else { - sprite->data[0] = gUnknown_085B62E4[t].var04 & gUnknown_0203AB88->var08; - if (gUnknown_0203AB88->var04_0) + sprite->data[0] = sRouletteSlots[slotId].flag & sRoulette->hitFlags; + if (sRoulette->tableId) { - sprite->data[2] = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01; + sprite->data[2] = gUnknown_085B6348[sRoulette->tableId].var01; } else { - sprite->data[2] = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02; + sprite->data[2] = gUnknown_085B6348[sRoulette->tableId].var02; if (z) - { - gUnknown_0203AB88->var8C = 0.5f; - } + sRoulette->var8C = 0.5f; else - { - gUnknown_0203AB88->var8C = -1.5f; - } + sRoulette->var8C = -1.5f; } } - gUnknown_0203AB88->var98 = 0.085f; + sRoulette->var98 = 0.085f; sprite->callback = prev_quest_read_x24_hm_usage; sprite->data[1] = 5; } @@ -3962,27 +4165,27 @@ static void sub_8144264(struct Sprite *sprite) static void sub_8144410(struct Sprite *sprite) { sub_8143B84(sprite); - if (gUnknown_0203AB88->var8C > 0.5f) + if (sRoulette->var8C > 0.5f) return; sub_8143B14(sprite); if (!sub_8143B48(sprite)) { - gUnknown_0203AB88->var90 = 0.0f; - gUnknown_0203AB88->var8C -= (float)(gUnknown_085B6348[gUnknown_0203AB88->var04_0].var03) - / (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var04 + 1); + sRoulette->var90 = 0.0f; + sRoulette->var8C -= (float)(gUnknown_085B6348[sRoulette->tableId].var03) + / (gUnknown_085B6348[sRoulette->tableId].var04 + 1); sprite->data[1] = 4; sprite->callback = sub_8144264; } else { - if (gUnknown_0203AB88->var90 != 0.0f) + if (sRoulette->var90 != 0.0f) { - if (gUnknown_0203AB88->var8C < 0.0f) + if (sRoulette->var8C < 0.0f) { - gUnknown_0203AB88->var90 = 0.0f; - gUnknown_0203AB88->var8C = 0.0f; - gUnknown_0203AB88->var98 /= 1.2; + sRoulette->var90 = 0.0f; + sRoulette->var8C = 0.0f; + sRoulette->var98 /= 1.2; } } } @@ -3991,11 +4194,11 @@ static void sub_8144410(struct Sprite *sprite) static void sub_8144514(struct Sprite *sprite) { sub_8143B84(sprite); - if (gUnknown_0203AB88->var94 > 40.f) + if (sRoulette->var94 > 40.f) return; - gUnknown_0203AB88->var98 = -(4.0f / (float)(gUnknown_0203AB88->var86)); - gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)(gUnknown_0203AB88->var86)); + sRoulette->var98 = -(4.0f / (float)(sRoulette->var86)); + sRoulette->var90 = -(sRoulette->var8C / (float)(sRoulette->var86)); sprite->animNum = 2; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; @@ -4006,12 +4209,12 @@ static void sub_8144514(struct Sprite *sprite) static void sub_81445D8(struct Sprite *sprite) { sub_8143B84(sprite); - if (gUnknown_0203AB88->var94 > 60.0f) + if (sRoulette->var94 > 60.0f) return; m4aSongNumStartOrChange(SE_TAMAKORO_E); - gUnknown_0203AB88->var98 = -(20.0f / (float)(gUnknown_0203AB88->var84)); - gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)(gUnknown_0203AB88->var84)); + sRoulette->var98 = -(20.0f / (float)(sRoulette->var84)); + sRoulette->var90 = ((1.0f - sRoulette->var8C) / (float)(sRoulette->var84)); sprite->animNum = 1; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; @@ -4028,7 +4231,7 @@ static void sub_81446AC(struct Sprite *sprite) sprite->callback = sub_81445D8; } -static void sub_81446DC(struct Sprite *sprite) +static void CreateShroomishSprite(struct Sprite *sprite) { u16 t; u8 i; @@ -4039,29 +4242,29 @@ static void sub_81446DC(struct Sprite *sprite) struct Roulette *p; t = sprite->data[7] - 2; - p = gUnknown_0203AB88; // why??? - gUnknown_0203AB88->var3C[55] = CreateSprite(&gSpriteTemplate_85B79F8, 36, -12, 50); - gUnknown_0203AB88->var3C[56] = CreateSprite(&gSpriteTemplate_85B7ABC[0], s[sprite->data[0]][0], s[sprite->data[0]][1], 59); - gUnknown_0203AB88->var3C[57] = CreateSprite(&gSpriteTemplate_85B7ABC[1], 36, 140, 51); - gSprites[gUnknown_0203AB88->var3C[57]].oam.objMode = ST_OAM_OBJ_BLEND; + p = sRoulette; // why??? + sRoulette->spriteIds[SPR_CLEAR_MON] = CreateSprite(&sSpriteTemplate_Shroomish, 36, -12, 50); + sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_ShroomishShadow[0], s[sprite->data[0]][0], s[sprite->data[0]][1], 59); + sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2] = CreateSprite(&sSpriteTemplate_ShroomishShadow[1], 36, 140, 51); + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2]].oam.objMode = ST_OAM_OBJ_BLEND; for (i = 0; i < 3; i++) { - gSprites[gUnknown_0203AB88->var3C[i + 55]].coordOffsetEnabled = FALSE; - gSprites[gUnknown_0203AB88->var3C[i + 55]].invisible = TRUE; - gSprites[gUnknown_0203AB88->var3C[i + 55]].animPaused = TRUE; - gSprites[gUnknown_0203AB88->var3C[i + 55]].affineAnimPaused = TRUE; - gSprites[gUnknown_0203AB88->var3C[i + 55]].data[4] = gUnknown_0203AB88->var3C[55]; - gSprites[gUnknown_0203AB88->var3C[i + 55]].data[5] = gUnknown_0203AB88->var3C[56]; - gSprites[gUnknown_0203AB88->var3C[i + 55]].data[6] = gUnknown_0203AB88->var3C[57]; - gSprites[gUnknown_0203AB88->var3C[i + 55]].data[2] = t; - gSprites[gUnknown_0203AB88->var3C[i + 55]].data[3] = (sprite->data[7] * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01) + - (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 + 0xFFFF); + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].coordOffsetEnabled = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].animPaused = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].affineAnimPaused = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[4] = sRoulette->spriteIds[SPR_CLEAR_MON]; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[5] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[6] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2]; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[2] = t; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[3] = (sprite->data[7] * gUnknown_085B6348[sRoulette->tableId].var01) + + (gUnknown_085B6348[sRoulette->tableId].var02 + 0xFFFF); } - gSprites[gUnknown_0203AB88->var3C[56]].coordOffsetEnabled = TRUE; - gUnknown_0203AB88->var38 = sprite; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].coordOffsetEnabled = TRUE; + sRoulette->var38 = sprite; } -static void sub_81448B8(struct Sprite *sprite) +static void CreateTaillowSprite(struct Sprite *sprite) { u8 i = 0; s16 t; @@ -4071,21 +4274,21 @@ static void sub_81448B8(struct Sprite *sprite) }; t = sprite->data[7] - 2; - gUnknown_0203AB88->var3C[55] = CreateSprite(&gSpriteTemplate_85B7A10, s[sprite->data[0]][0], s[sprite->data[0]][1], 50); - StartSpriteAnim(&gSprites[gUnknown_0203AB88->var3C[55]], sprite->data[0]); - gUnknown_0203AB88->var3C[56] = CreateSprite(&gUnknown_085B7AEC, s[sprite->data[0]][0], s[sprite->data[0]][1], 51); - gSprites[gUnknown_0203AB88->var3C[56]].affineAnimPaused = TRUE; - gSprites[gUnknown_0203AB88->var3C[56]].animPaused = TRUE; - sprite->data[7] = (t * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01) + (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var10 + 45); + sRoulette->spriteIds[SPR_CLEAR_MON] = CreateSprite(&sSpriteTemplate_Taillow, s[sprite->data[0]][0], s[sprite->data[0]][1], 50); + StartSpriteAnim(&gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]], sprite->data[0]); + sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_TaillowShadow, s[sprite->data[0]][0], s[sprite->data[0]][1], 51); + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].affineAnimPaused = TRUE; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].animPaused = TRUE; + sprite->data[7] = (t * gUnknown_085B6348[sRoulette->tableId].var01) + (gUnknown_085B6348[sRoulette->tableId].var10 + 45); for (; i < 2; i++) { - gSprites[gUnknown_0203AB88->var3C[55 + i]].data[4] = gUnknown_0203AB88->var3C[55]; - gSprites[gUnknown_0203AB88->var3C[55 + i]].data[5] = gUnknown_0203AB88->var3C[56]; - gSprites[gUnknown_0203AB88->var3C[55 + i]].data[6] = gUnknown_0203AB88->var3C[56]; - gSprites[gUnknown_0203AB88->var3C[55 + i]].data[2] = t; - gSprites[gUnknown_0203AB88->var3C[55 + i]].data[3] = sprite->data[7] - 45; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[4] = sRoulette->spriteIds[SPR_CLEAR_MON]; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[5] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[6] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[2] = t; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[3] = sprite->data[7] - 45; } - gUnknown_0203AB88->var38 = sprite; + sRoulette->var38 = sprite; } static void sub_8144A24(struct Sprite *sprite) @@ -4100,33 +4303,33 @@ static void sub_8144A24(struct Sprite *sprite) u8 s[10] = {}; u16 rand = Random(); - gUnknown_0203AB88->var7D = 1; - gUnknown_0203AB88->var03_5 = TRUE; - gUnknown_0203AB88->var03_6 = FALSE; - gUnknown_0203AB88->var7E = 0xFF; - gUnknown_0203AB88->var88 = sprite->data[3]; - gUnknown_0203AB88->var98 = 0.0f; - gUnknown_0203AB88->var8C = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var1C; + sRoulette->var7D = 1; + sRoulette->var03_5 = TRUE; + sRoulette->var03_6 = FALSE; + sRoulette->var7E = 0xFF; + sRoulette->var88 = sprite->data[3]; + sRoulette->var98 = 0.0f; + sRoulette->var8C = gUnknown_085B6348[sRoulette->tableId].var1C; - o = (gUnknown_0203AB88->var04_0 * 30 + 33) + (0x1 - gUnknown_0203AB88->var03_0) * 15; + o = (sRoulette->tableId * 30 + 33) + (1 - sRoulette->useTaillow) * 15; for (i = 0; i < 4; i++) { if (o < sprite->data[3] && sprite->data[3] <= o + 90) { sprite->data[0] = i / 2; - gUnknown_0203AB88->var03_0 = i % 2; + sRoulette->useTaillow = i % 2; break; } if (i == 3) { sprite->data[0] = 1; - gUnknown_0203AB88->var03_0 = 1; + sRoulette->useTaillow = TRUE; break; } o += 90; } - if (gUnknown_0203AB88->var03_0) + if (sRoulette->useTaillow) { if (sprite->data[0]) PlayCry1(SPECIES_TAILLOW, -63); @@ -4139,25 +4342,25 @@ static void sub_8144A24(struct Sprite *sprite) } val = 2; - z = (gUnknown_0203AB88->var7F + 2) % 12; + z = (sRoulette->var7F + 2) % 12; - if (gUnknown_0203AB88->var03_0 == 1 && gUnknown_0203AB88->var04_0 == 1) + if (sRoulette->useTaillow == TRUE && sRoulette->tableId == 1) j += 6; else j += val; for (i = val; i < j; i++) { - if (!(gUnknown_0203AB88->var08 & gUnknown_085B62E4[z].var04)) + if (!(sRoulette->hitFlags & sRouletteSlots[z].flag)) { s[h++] = i; - if (p == 0 && (gUnknown_085B62E4[z].var04 & gUnknown_085B6154[gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]].var0C)) + if (p == 0 && (sRouletteSlots[z].flag & sGridSelections[sRoulette->betSelection[sRoulette->curBallNum]].inSelectionFlags)) p = i; } - z = (z + 1) % 0xC; + z = (z + 1) % 12; } - if ((gUnknown_0203AB88->var03_0 + 1) & gUnknown_0203AB88->var02) + if ((sRoulette->useTaillow + 1) & sRoulette->partySpeciesFlags) { if (p && (rand & 0xFF) < 0xc0) sprite->data[7] = p; @@ -4169,7 +4372,7 @@ static void sub_8144A24(struct Sprite *sprite) sprite->data[7] = s[rand % h]; } - sprite->callback = sub_8144168; + sprite->callback = CreateClearSpeciesSprite; } static const u16 gUnknown_085B7B1A[] = { @@ -4192,11 +4395,11 @@ static void sub_8144C70(struct Sprite *sprite) sprite->pos1.x -= 2; if (sprite->pos1.x < -16) { - if (!gUnknown_0203AB88->var03_6) - gUnknown_0203AB88->var03_6 = TRUE; + if (!sRoulette->var03_6) + sRoulette->var03_6 = TRUE; DestroySprite(sprite); - gUnknown_0203AB88->var01 = 0; - gUnknown_0203AB88->var34 = gUnknown_085B7B1A[0]; + sRoulette->var01 = 0; + sRoulette->var34 = gUnknown_085B7B1A[0]; } } } @@ -4223,7 +4426,7 @@ static void sub_8144CD0(struct Sprite *sprite) else { gSpriteCoordOffsetY = 0; - gSprites[gUnknown_0203AB88->var3C[55]].animPaused = FALSE; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animPaused = FALSE; DestroySprite(sprite); } } @@ -4234,9 +4437,9 @@ static void sub_8144D94(struct Sprite *sprite) sprite->data[1]++; t = sprite->data[1]; sprite->pos2.y = t * 0.039f * t; - gUnknown_0203AB88->var34 = gUnknown_085B7B1A[(gUnknown_0203AB88->var01 - 1) / 2]; - if (gUnknown_0203AB88->var01 < 19) - gUnknown_0203AB88->var01++; + sRoulette->var34 = gUnknown_085B7B1A[(sRoulette->var01 - 1) / 2]; + if (sRoulette->var01 < 19) + sRoulette->var01++; if (sprite->data[1] > 60) { sprite->data[1] = 0; @@ -4253,37 +4456,37 @@ static void sub_8144E60(struct Sprite *sprite) { if (sprite->data[7] == 0) { - if (gUnknown_0203AB88->var38->data[0] == 0) + if (sRoulette->var38->data[0] == 0) { - if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var08) + if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var08) return; } else { - if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var08 + 180) + if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var08 + 180) return; } sprite->invisible = FALSE; sprite->data[7]++; m4aSongNumStart(SE_RU_HYUU); - gUnknown_0203AB88->var01 = 1; - gUnknown_0203AB88->var34 = gUnknown_085B7B1A[0]; + sRoulette->var01 = 1; + sRoulette->var34 = gUnknown_085B7B1A[0]; } else { - gUnknown_0203AB88->var34 = gUnknown_085B7B1A[(gUnknown_0203AB88->var01 - 1) / 2]; - if (gUnknown_0203AB88->var01 < 19) - gUnknown_0203AB88->var01++; + sRoulette->var34 = gUnknown_085B7B1A[(sRoulette->var01 - 1) / 2]; + if (sRoulette->var01 < 19) + sRoulette->var01++; - if (gUnknown_0203AB88->var38->data[0] == 0) + if (sRoulette->var38->data[0] == 0) { - if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0A) + if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var0A) return; } else { - if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0A + 180) + if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var0A + 180) return; } @@ -4312,8 +4515,8 @@ static void sub_8144FB0(struct Sprite *sprite) sprite->animPaused = TRUE; m4aSongNumStop(SE_BASABASA); DestroySprite(sprite); - FreeOamMatrix(gSprites[gUnknown_0203AB88->var3C[56]].oam.matrixNum); - DestroySprite(&gSprites[gUnknown_0203AB88->var3C[56]]); + FreeOamMatrix(gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].oam.matrixNum); + DestroySprite(&gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]]); } } @@ -4342,7 +4545,7 @@ static void sub_8145030(struct Sprite *sprite) else { m4aSongNumStart(SE_RU_HYUU); - StartSpriteAnim(sprite, gUnknown_0203AB88->var38->data[0] + 4); + StartSpriteAnim(sprite, sRoulette->var38->data[0] + 4); sprite->callback = sub_8144FB0; gSprites[sprite->data[6]].affineAnimPaused = FALSE; } @@ -4365,7 +4568,7 @@ static void sub_81450D8(struct Sprite *sprite) if (sprite->data[1]-- > 7) { - sprite->pos1.x += t[gUnknown_0203AB88->var38->data[0]] * 2; + sprite->pos1.x += t[sRoulette->var38->data[0]] * 2; if (IsSEPlaying()) { s8 pan = -((116 - sprite->pos1.x) / 2); @@ -4377,17 +4580,17 @@ static void sub_81450D8(struct Sprite *sprite) { if (sprite->data[1] >= 0) { - sprite->pos1.x += t[gUnknown_0203AB88->var38->data[0]] * z[7 - sprite->data[1]][0]; + sprite->pos1.x += t[sRoulette->var38->data[0]] * z[7 - sprite->data[1]][0]; sprite->pos1.y += z[7 - sprite->data[1]][1]; } else { m4aSongNumStartOrChange(SE_BASABASA); - if (gUnknown_0203AB88->var38->data[0] == 0) + if (sRoulette->var38->data[0] == 0) PlayCry1(SPECIES_TAILLOW, 63); else PlayCry1(SPECIES_TAILLOW, -63); - StartSpriteAnim(sprite, gUnknown_0203AB88->var38->data[0] + 2); + StartSpriteAnim(sprite, sRoulette->var38->data[0] + 2); sprite->data[1] = 45; sprite->callback = sub_8145030; } @@ -4400,7 +4603,7 @@ static void sub_8145218(struct Sprite *sprite) if (sprite->data[1]-- >= 0) { - sprite->pos1.x += t[gUnknown_0203AB88->var38->data[0]] * 2; + sprite->pos1.x += t[sRoulette->var38->data[0]] * 2; gSprites[sprite->data[6]].invisible ^= 1; } else @@ -4409,11 +4612,11 @@ static void sub_8145218(struct Sprite *sprite) } } -static void sub_8145294(struct Sprite *sprite) +static void SpriteCB_Taillow(struct Sprite *sprite) { - if (gUnknown_0203AB88->var38->data[0] == 0) + if (sRoulette->var38->data[0] == 0) { - if (gUnknown_0203AB88->var38->data[3] == gUnknown_085B6348[gUnknown_0203AB88->var04_0].var12 + 90) + if (sRoulette->var38->data[3] == gUnknown_085B6348[sRoulette->tableId].var12 + 90) { gSprites[sprite->data[6]].data[1] = 52; gSprites[sprite->data[4]].data[1] = 52; @@ -4425,7 +4628,7 @@ static void sub_8145294(struct Sprite *sprite) } else { - if (gUnknown_0203AB88->var38->data[3] == gUnknown_085B6348[gUnknown_0203AB88->var04_0].var14 + 270) + if (sRoulette->var38->data[3] == gUnknown_085B6348[sRoulette->tableId].var14 + 270) { gSprites[sprite->data[6]].data[1] = 46; gSprites[sprite->data[4]].data[1] = 46; diff --git a/src/roulette_util.c b/src/roulette_util.c index f1f04a73a5..c51330f21a 100755 --- a/src/roulette_util.c +++ b/src/roulette_util.c @@ -429,7 +429,7 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend) } } -void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) +void ClearGridSelectionRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) { u16 *_dest; u8 i; @@ -446,7 +446,7 @@ void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) } } -void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height) +void SetGridSelectionRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height) { u16 *_dest; u16 *_src = src; From 412f341588bbb1077cb670535b710c9e6d9f25c7 Mon Sep 17 00:00:00 2001 From: PokeCodec <67983839+PokeCodec@users.noreply.github.com> Date: Fri, 31 Jul 2020 20:20:00 -0400 Subject: [PATCH 37/85] Match function signatures To make them consistent with the declarations --- src/field_player_avatar.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 88385896c7..6ad92c2fb2 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -101,9 +101,9 @@ static void sub_808C280(struct ObjectEvent *); static void StartStrengthAnim(u8, u8); static void Task_PushBoulder(u8 taskId); -static u8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static u8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static u8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static void DoPlayerMatJump(void); static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); From 7890a16d275a84910733962bf6a5c10be67a4893 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Aug 2020 15:04:55 +0200 Subject: [PATCH 38/85] Fix UB in event_object_movement.c --- src/event_object_movement.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 6c49b91151..ab2f4749f2 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2340,7 +2340,13 @@ const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId) static u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->flagId; + struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); +#if UBFIX + // BUG: The function may return NULL, and attempting to read from NULL may freeze the game using modern compilers. + if (obj == NULL) + return 0; +#endif // UBFIX + return obj->flagId; } static u16 GetObjectEventFlagIdByObjectEventId(u8 objectEventId) From d072897354b1b2dd8619329dd965a87c2eaf52af Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Aug 2020 15:37:04 +0200 Subject: [PATCH 39/85] Update event_object_movement.c --- src/event_object_movement.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index ab2f4749f2..a076a2a222 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2341,7 +2341,7 @@ const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId) static u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); -#if UBFIX +#ifdef UBFIX // BUG: The function may return NULL, and attempting to read from NULL may freeze the game using modern compilers. if (obj == NULL) return 0; From b40cee540e6e4268dcae990c6a08ebba50b3cec9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Jul 2020 14:55:42 -0400 Subject: [PATCH 40/85] Continue documenting roulette --- graphics/roulette/85B5BFC.pal | 259 ------- graphics/roulette/{85B5DFC.bin => grid.bin} | Bin .../roulette/{wheel_map.bin => wheel.bin} | Bin include/roulette_util.h | 4 +- include/strings.h | 13 + src/roulette.c | 701 +++++++++--------- src/roulette_util.c | 9 +- 7 files changed, 389 insertions(+), 597 deletions(-) delete mode 100644 graphics/roulette/85B5BFC.pal rename graphics/roulette/{85B5DFC.bin => grid.bin} (100%) rename graphics/roulette/{wheel_map.bin => wheel.bin} (100%) diff --git a/graphics/roulette/85B5BFC.pal b/graphics/roulette/85B5BFC.pal deleted file mode 100644 index ed68618ff0..0000000000 --- a/graphics/roulette/85B5BFC.pal +++ /dev/null @@ -1,259 +0,0 @@ -JASC-PAL -0100 -256 -82 156 49 -41 41 41 -98 98 115 -172 180 197 -255 255 255 -255 205 41 -255 172 0 -213 164 65 -205 164 82 -139 106 65 -131 222 189 -74 189 156 -115 189 148 -123 180 172 -74 115 115 -255 255 0 -74 106 156 -41 41 41 -98 98 115 -156 156 164 -255 255 255 -205 156 205 -164 106 164 -172 131 164 -156 123 156 -90 57 106 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -74 106 156 -41 41 41 -123 123 131 -172 180 197 -255 255 255 -238 238 156 -189 180 106 -131 90 32 -255 131 90 -189 106 98 -230 222 255 -74 189 156 -255 255 255 -123 180 172 -255 255 255 -255 255 255 -74 106 156 -57 57 65 -98 98 115 -156 156 164 -255 255 255 -106 205 205 -246 98 90 -106 156 255 -255 255 255 -156 255 106 -246 230 74 -255 230 123 -255 255 255 -255 255 156 -156 255 148 -205 156 255 -74 106 156 -41 41 41 -98 98 115 -205 205 213 -255 255 255 -123 238 139 -255 172 139 -16 156 74 -197 164 255 -49 106 32 -115 197 131 -197 139 189 -255 82 57 -255 238 82 -205 180 8 -255 205 8 -74 106 156 -106 139 230 -82 115 205 -255 255 255 -255 255 255 -255 205 41 -255 172 0 -213 164 65 -205 164 82 -139 106 65 -131 222 189 -74 189 156 -115 189 148 -123 180 172 -74 115 115 -255 255 255 -74 106 156 -255 246 65 -255 255 164 -255 246 65 -255 255 255 -205 156 205 -164 106 164 -172 131 164 -156 123 156 -90 57 106 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -65 65 57 -74 106 156 -172 255 238 -222 255 255 -148 255 238 -255 255 255 -255 205 41 -255 172 0 -213 164 65 -205 164 82 -139 106 65 -131 222 189 -74 189 156 -115 189 148 -123 180 172 -74 115 115 -65 65 57 -74 106 156 -255 205 255 -255 222 255 -255 197 255 -255 255 255 -205 156 205 -164 106 164 -172 131 164 -156 123 156 -90 57 106 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -65 65 57 -74 106 156 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 205 41 -255 172 0 -213 164 65 -205 164 82 -139 106 65 -131 222 189 -74 189 156 -115 189 148 -123 180 172 -74 115 115 -255 255 255 -74 106 156 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -205 156 205 -164 106 164 -172 131 164 -156 123 156 -90 57 106 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -74 106 156 -255 246 82 -164 255 222 -172 180 197 -255 255 255 -255 246 65 -246 205 24 -238 197 98 -205 172 90 -164 131 90 -156 246 222 -90 213 180 -131 222 172 -115 189 156 -98 148 148 -65 65 57 -74 106 156 -238 189 238 -156 148 148 -172 180 197 -255 255 255 -255 205 255 -222 156 230 -197 156 197 -172 139 172 -139 106 148 -205 205 230 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -65 65 57 -74 106 156 -238 230 246 -205 205 230 -172 180 197 -255 255 255 -255 255 230 -255 255 164 -255 255 255 -222 255 255 -255 246 255 -255 222 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -65 65 57 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 -255 255 255 diff --git a/graphics/roulette/85B5DFC.bin b/graphics/roulette/grid.bin similarity index 100% rename from graphics/roulette/85B5DFC.bin rename to graphics/roulette/grid.bin diff --git a/graphics/roulette/wheel_map.bin b/graphics/roulette/wheel.bin similarity index 100% rename from graphics/roulette/wheel_map.bin rename to graphics/roulette/wheel.bin diff --git a/include/roulette_util.h b/include/roulette_util.h index 85b8de1f37..2153b19f66 100644 --- a/include/roulette_util.h +++ b/include/roulette_util.h @@ -41,8 +41,8 @@ void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UpdatePulseBlend(struct PulseBlend *); -void ClearGridSelectionRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); -void SetGridSelectionRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); +void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); +void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); void task_tutorial_controls_fadein(struct UnkStruct0 *r0); void sub_8151678(struct UnkStruct0 *r0); u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2); diff --git a/include/strings.h b/include/strings.h index 702392efa2..31ab2023e3 100644 --- a/include/strings.h +++ b/include/strings.h @@ -84,6 +84,19 @@ extern const u8 gText_SoSo[]; extern const u8 gText_Bad[]; extern const u8 gText_TheWorst[]; +extern const u8 Roulette_Text_ControlsInstruction[]; +extern const u8 Roulette_Text_KeepPlaying[]; +extern const u8 Roulette_Text_Jackpot[]; +extern const u8 Roulette_Text_ItsAHit[]; +extern const u8 Roulette_Text_NothingDoing[]; +extern const u8 Roulette_Text_YouveWonXCoins[]; +extern const u8 Roulette_Text_BoardWillBeCleared[]; +extern const u8 Roulette_Text_CoinCaseIsFull[]; +extern const u8 Roulette_Text_NoCoinsLeft[]; +extern const u8 Roulette_Text_PlayMinimumWagerIsX[]; +extern const u8 Roulette_Text_SpecialRateTable[]; +extern const u8 Roulette_Text_NotEnoughCoins[]; + extern const u8 gText_Slots[]; extern const u8 gText_Roulette[]; extern const u8 gText_Jackpot[]; diff --git a/src/roulette.c b/src/roulette.c index 983a96e3ff..20868f4ba8 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -22,6 +22,7 @@ #include "sound.h" #include "sprite.h" #include "string_util.h" +#include "strings.h" #include "task.h" #include "trig.h" #include "tv.h" @@ -61,9 +62,16 @@ #define SQU_PURPLE_MAKUHITA (ROW_PURPLE + COL_MAKUHITA) #define NUM_GRID_SELECTIONS SQU_PURPLE_MAKUHITA +// Get the id of the col/row from the selection ID +// e.g. GET_ROW(SQU_PURPLE_SKITTY) is ROW_PURPLE #define GET_COL(selectionId)((selectionId) % (NUM_BOARD_POKES + 1)) #define GET_ROW(selectionId)((selectionId) / (NUM_BOARD_POKES + 1) * (NUM_BOARD_POKES + 1)) +// Get the col/row index from the selection ID +// e.g. GET_ROW_IDX(SQU_PURPLE_SKITTY) is 2 +#define GET_COL_IDX(selectionId)(selectionId - 1) +#define GET_ROW_IDX(selectionId)(selectionId / 5 - 1) + // Flags for the above selections, used to set which spaces have been hit or bet on #define F_WYNAUT_COL (1 << COL_WYNAUT) #define F_AZURILL_COL (1 << COL_AZURILL) @@ -119,6 +127,19 @@ #define HAS_SHROOMISH (1 << 0) #define HAS_TAILLOW (1 << 1) +enum { + BALL_STATE_ROLLING, + BALL_STATE_STUCK, + BALL_STATE_LANDED = 0xFF, +}; + +enum { + SELECT_STATE_WAIT, + SELECT_STATE_DRAW, + SELECT_STATE_UPDATE, + SELECT_STATE_ERASE = 0xFF, +}; + enum { SPR_BALL_1, SPR_BALL_2, @@ -150,17 +171,17 @@ enum { SPR_BALL_COUNTER_2, SPR_BALL_COUNTER_3, SPR_GRID_ICON_ORANGE_WYNAUT, - SPR_GRID_ICON_2, - SPR_GRID_ICON_3, - SPR_GRID_ICON_4, - SPR_GRID_ICON_5, - SPR_GRID_ICON_6, - SPR_GRID_ICON_7, - SPR_GRID_ICON_8, - SPR_GRID_ICON_9, - SPR_GRID_ICON_10, - SPR_GRID_ICON_11, - SPR_GRID_ICON_12, + SPR_GRID_ICON_GREEN_AZURILL, + SPR_GRID_ICON_PURPLE_SKITTY, + SPR_GRID_ICON_ORANGE_MAKUHITA, + SPR_GRID_ICON_GREEN_WYNAUT, + SPR_GRID_ICON_PURPLE_AZURILL, + SPR_GRID_ICON_ORANGE_SKITTY, + SPR_GRID_ICON_GREEN_MAKUHITA, + SPR_GRID_ICON_PURPLE_WYNAUT, + SPR_GRID_ICON_ORANGE_AZURILL, + SPR_GRID_ICON_GREEN_SKITTY, + SPR_GRID_ICON_PURPLE_MAKUHITA, SPR_POKE_HEADER_1, SPR_POKE_HEADER_2, SPR_POKE_HEADER_3, @@ -188,15 +209,18 @@ enum { // Start points for sprite IDs that are looped over #define SPR_BOARD_ICONS SPR_BOARD_ICON_ORANGE_WYNAUT +#define SPR_BALL_COUNTER SPR_BALL_COUNTER_1 +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 #define SPR_GRID_ICONS SPR_GRID_ICON_ORANGE_WYNAUT +#define SPR_POKE_HEADERS SPR_POKE_HEADER_1 -struct StructgUnknown_083F8DF4 +struct RouletteTable { - u8 var00; + u8 minBet; // Never read u8 var01; u8 var02; - u8 var03; - u8 var04; + u8 wheelSpeed; + u8 wheelDelay; u8 filler_05[3]; u16 var08; u16 var0A; @@ -236,15 +260,15 @@ struct RouletteSlot static EWRAM_DATA struct Roulette { - u8 var00; + u8 unk0; // Never read u8 var01; u8 partySpeciesFlags; bool8 useTaillow:5; - bool8 var03_5:1; - bool8 var03_6:1; - bool8 var03_7:1; + bool8 ballStuck:1; + bool8 ballUnstuck:1; + bool8 ballRolling:1; // Never read u8 tableId:2; - u8 var04_2:5; + u8 unused:5; bool8 isSpecialRate:1; u32 hitFlags; u8 hitSquares[BALLS_PER_ROUND]; @@ -254,22 +278,22 @@ static EWRAM_DATA struct Roulette u8 curBallNum:4; // Never actually gets incremented u8 unk:4; // Never read u8 betSelection[BALLS_PER_ROUND]; // Because curBallNum is used as the only index, only the first element is ever used (prev bet selections are never needed) - u8 var21; - u8 var22; - u8 var23; - s16 var24; - s16 var26; - s16 var28; - s16 var2A; - struct OamMatrix var2C; + u8 wheelDelayTimer; + u8 wheelSpeed; + u8 wheelDelay; + s16 wheelAngle; + s16 gridX; + s16 selectionRectDrawState; + s16 updateGridHighlight; + struct OamMatrix wheelRotation; u16 var34; struct Sprite *var38; - u8 spriteIds[MAX_SPRITES]; // Sprite IDs - u8 var7C; - u8 var7D; - u8 var7E; + u8 spriteIds[MAX_SPRITES]; + u8 curBallSpriteId; + u8 ballState; + u8 hitSlot; u8 var7F; - s16 var80; + s16 var80; // Never read s16 var82; u16 var84; u16 var86; @@ -280,33 +304,33 @@ static EWRAM_DATA struct Roulette float var98; float var9C; float varA0; - u8 varA4; - u8 varA5; - u8 v51[2]; + u8 playTaskId; + u8 spinTaskId; + u8 filler_1[2]; u16 taskWaitDelay; u16 taskWaitKey; TaskFunc nextTask; - u8 v46[4]; - TaskFunc varB4; - struct UnkStruct0 varB8; + u8 filler_2[4]; + TaskFunc prevTask; + struct UnkStruct0 flashUtil; u16 tilemapBuffers[7][0x400]; - u16 *unk_397C; + u16 *gridTilemap; } *sRoulette = NULL; static EWRAM_DATA u8 sTextWindowId = 0; -static void Task_SpinBoard(u8); +static void Task_SpinWheel(u8); static void Task_StartPlaying(u8); static void Task_ContinuePlaying(u8); static void Task_StopPlaying(u8); static void Task_SelectFirstEmptySquare(u8); static void Task_HandleBetGridInput(u8); static void Task_SlideGridOffscreen(u8); +static void Task_InitBallRoll(u8); static void Task_RollBall(u8); -static void Task_EndBallRoll(u8); static void Task_RecordBallHit(u8); static void Task_SlideGridOnscreen(u8); -static void sub_8141778(u8); +static void Task_FlashBallOnWinningSquare(u8); static void Task_PrintSpinResult(u8); static void Task_PrintPayout(u8); static void Task_EndTurn(u8); @@ -324,7 +348,7 @@ static bool8 IsHitInBetSelection(u8, u8); static void FlashSelectionOnWheel(u8); static void DrawGridBackground(u8); static u8 GetMultiplier(u8); -static void sub_8142814(void); +static void UpdateWheelPosition(void); static void LoadOrFreeMiscSpritePalettesAndSheets(u8); static void CreateGridSprites(void); static void ShowHideGridIcons(bool8, u8); @@ -349,24 +373,12 @@ static void sub_8144A24(struct Sprite *); static void sub_8144E60(struct Sprite *); static void SpriteCB_Taillow(struct Sprite *); -extern const u8 Roulette_Text_ControlsInstruction[]; -extern const u8 Roulette_Text_KeepPlaying[]; -extern const u8 Roulette_Text_Jackpot[]; -extern const u8 Roulette_Text_ItsAHit[]; -extern const u8 Roulette_Text_NothingDoing[]; -extern const u8 Roulette_Text_YouveWonXCoins[]; -extern const u8 Roulette_Text_BoardWillBeCleared[]; -extern const u8 Roulette_Text_CoinCaseIsFull[]; -extern const u8 Roulette_Text_NoCoinsLeft[]; -extern const u8 Roulette_Text_PlayMinimumWagerIsX[]; -extern const u8 Roulette_Text_SpecialRateTable[]; -extern const u8 Roulette_Text_NotEnoughCoins[]; - -static const u16 gUnknown_085B5BFC[] = INCBIN_U16("graphics/roulette/85B5BFC.gbapal"); -static const u32 gUnknown_085B5DFC[] = INCBIN_U32("graphics/roulette/85B5DFC.bin.lz"); -static const u32 sWheel_Tilemap[] = INCBIN_U32("graphics/roulette/wheel_map.bin.lz"); +static const u16 sWheel_Pal[] = INCBIN_U16("graphics/roulette/wheel.gbapal"); // also palette for grid +static const u32 sGrid_Tilemap[] = INCBIN_U32("graphics/roulette/grid.bin.lz"); +static const u32 sWheel_Tilemap[] = INCBIN_U32("graphics/roulette/wheel.bin.lz"); static const struct BgTemplate sBgTemplates[] = { + // Text box { .bg = 0, .charBaseIndex = 2, @@ -376,6 +388,7 @@ static const struct BgTemplate sBgTemplates[] = .priority = 0, .baseTile = 0 }, + // Selection grid { .bg = 1, .charBaseIndex = 0, @@ -385,6 +398,7 @@ static const struct BgTemplate sBgTemplates[] = .priority = 1, .baseTile = 0 }, + // Wheel { .bg = 2, .charBaseIndex = 1, @@ -752,14 +766,15 @@ static const struct RouletteSlot sRouletteSlots[] = }; static const u8 sTableMinBets[] = {1, 3, 1, 6}; -static const struct StructgUnknown_083F8DF4 gUnknown_085B6348[] = +static const struct RouletteTable sRouletteTables[] = { + // Left table { - .var00 = 1, + .minBet = 1, .var01 = 60, .var02 = 30, - .var03 = 1, - .var04 = 1, + .wheelSpeed = 1, + .wheelDelay = 1, .var08 = 45, .var0A = 30, .var0C = 1, @@ -770,12 +785,13 @@ static const struct StructgUnknown_083F8DF4 gUnknown_085B6348[] = .var1A = 360, .var1C = -0.5f }, + // Right table { - .var00 = 3, + .minBet = 3, .var01 = 30, .var02 = 15, - .var03 = 1, - .var04 = 0, + .wheelSpeed = 1, + .wheelDelay = 0, .var08 = 75, .var0A = 60, .var0C = 2, @@ -788,7 +804,7 @@ static const struct StructgUnknown_083F8DF4 gUnknown_085B6348[] = } }; -static const struct UnkStruct1 gUnknown_085B6388[] = +static const struct UnkStruct1 gUnknown_085B6388[NUM_ROULETTE_SLOTS + 1] = { { .var00 = 0x8000, @@ -973,8 +989,8 @@ static void CB2_Roulette(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - if (sRoulette->varB8.var00) - task_tutorial_controls_fadein(&sRoulette->varB8); + if (sRoulette->flashUtil.var00) + task_tutorial_controls_fadein(&sRoulette->flashUtil); } static void VBlankCB_Roulette(void) @@ -982,32 +998,34 @@ static void VBlankCB_Roulette(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_8142814(); - SetGpuReg(REG_OFFSET_BG1HOFS, 0x200 - sRoulette->var26); + UpdateWheelPosition(); + SetGpuReg(REG_OFFSET_BG1HOFS, 0x200 - sRoulette->gridX); + if (sRoulette->var01) SetGpuReg(REG_OFFSET_BLDALPHA, sRoulette->var34); - if (sRoulette->var2A != 0) + + if (sRoulette->updateGridHighlight) { DmaCopy16(3, &sRoulette->tilemapBuffers[2][0xE0], (void *)BG_SCREEN_ADDR(4) + 0x1C0, 0x340); - sRoulette->var2A = 0; + sRoulette->updateGridHighlight = FALSE; } - switch (sRoulette->var28) + switch (sRoulette->selectionRectDrawState) { - case 1: + case SELECT_STATE_DRAW: SetBgAttribute(0, BG_ATTR_CHARBASEINDEX, 0); ShowBg(0); DmaCopy16(3, &sRoulette->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); - sRoulette->var28 = 2; + sRoulette->selectionRectDrawState = SELECT_STATE_UPDATE; break; - case 2: + case SELECT_STATE_UPDATE: DmaCopy16(3, &sRoulette->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); break; - case 0xFF: + case SELECT_STATE_ERASE: SetBgAttribute(0, BG_ATTR_CHARBASEINDEX, 2); ShowBg(0); DmaFill16(3, 0, (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340); - sRoulette->var28 = 0; - case 0: + sRoulette->selectionRectDrawState = SELECT_STATE_WAIT; + case SELECT_STATE_WAIT: break; } } @@ -1025,12 +1043,12 @@ static void InitRouletteBgAndWindows(void) InitWindows(sWindowTemplates); InitTextBoxGfxAndPrinters(); sTextWindowId = 0; - sRoulette->unk_397C = malloc_and_decompress(gUnknown_085B5DFC, &size); + sRoulette->gridTilemap = malloc_and_decompress(sGrid_Tilemap, &size); } static void FreeRoulette(void) { - FREE_AND_SET_NULL(sRoulette->unk_397C); + FREE_AND_SET_NULL(sRoulette->gridTilemap); FreeAllWindowBuffers(); UnsetBgTilemapBuffer(0); UnsetBgTilemapBuffer(1); @@ -1043,28 +1061,30 @@ static void FreeRoulette(void) static void sub_8140470(void) { u8 i; - u16 arr[3] = {RGB(24, 4, 10), RGB(10, 19, 6), RGB(24, 4, 10)}; // the third is never used ? + u16 bgColors[3] = {RGB(24, 4, 10), RGB(10, 19, 6), RGB(24, 4, 10)}; // 3rd is never used, same as 1st sRoulette->tableId = (gSpecialVar_0x8004 & 1); if (gSpecialVar_0x8004 & ROULETTE_SPECIAL_RATE) sRoulette->isSpecialRate = TRUE; - sRoulette->var22 = gUnknown_085B6348[sRoulette->tableId].var03; - sRoulette->var23 = gUnknown_085B6348[sRoulette->tableId].var04; + sRoulette->wheelSpeed = sRouletteTables[sRoulette->tableId].wheelSpeed; + sRoulette->wheelDelay = sRouletteTables[sRoulette->tableId].wheelDelay; sRoulette->minBet = sTableMinBets[sRoulette->tableId + sRoulette->isSpecialRate * 2]; sRoulette->unk = 1; + // Left table (with min bet of 1) has red background, other table has green if (sRoulette->minBet == 1) - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = arr[0]; + gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[0]; else - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = arr[1]; + gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[1]; - sub_8151678(&sRoulette->varB8); + sub_8151678(&sRoulette->flashUtil); - for (i = 0; i < 13; i++) + // Init flash util for flashing the selected colors on the wheel + for (i = 0; i < NUM_ROULETTE_SLOTS + 1; i++) { - sub_815168C(&sRoulette->varB8, i, &gUnknown_085B6388[i]); + sub_815168C(&sRoulette->flashUtil, i, &gUnknown_085B6388[i]); } for (i = 0; i < PARTY_SIZE; i++) @@ -1119,7 +1139,7 @@ static void CB2_LoadRoulette(void) ResetTempTileDataBuffers(); break; case 3: - LoadPalette(&gUnknown_085B5BFC, 0, 0x1C0); + LoadPalette(&sWheel_Pal, 0, 0x1C0); DecompressAndCopyTileDataToVram(1, gRouletteMenu_Gfx, 0, 0, 0); DecompressAndCopyTileDataToVram(2, gRouletteWheel_Gfx, 0, 0, 0); break; @@ -1166,34 +1186,34 @@ static void CB2_LoadRoulette(void) EnableInterrupts(INTR_FLAG_VBLANK); SetVBlankCallback(VBlankCB_Roulette); BeginHardwarePaletteFade(0xFF, 0, 16, 0, 1); - taskId = sRoulette->varA4 = CreateTask(Task_StartPlaying, 0); + taskId = sRoulette->playTaskId = CreateTask(Task_StartPlaying, 0); gTasks[taskId].tBallNum = BALLS_PER_ROUND; gTasks[taskId].tCoins = GetCoins(); AlertTVThatPlayerPlayedRoulette(GetCoins()); - sRoulette->varA5 = CreateTask(Task_SpinBoard, 1); + sRoulette->spinTaskId = CreateTask(Task_SpinWheel, 1); SetMainCallback2(CB2_Roulette); return; } gMain.state++; } -static void Task_SpinBoard(u8 taskId) +static void Task_SpinWheel(u8 taskId) { s16 sin; s16 cos; - if (sRoulette->var21++ == sRoulette->var23) + if (sRoulette->wheelDelayTimer++ == sRoulette->wheelDelay) { - sRoulette->var21 = 0; - if ((sRoulette->var24 -= sRoulette->var22) < 0) - sRoulette->var24 = 360 - sRoulette->var22; + sRoulette->wheelDelayTimer = 0; + if ((sRoulette->wheelAngle -= sRoulette->wheelSpeed) < 0) + sRoulette->wheelAngle = 360 - sRoulette->wheelSpeed; } - sin = Sin2(sRoulette->var24); - cos = Cos2(sRoulette->var24); + sin = Sin2(sRoulette->wheelAngle); + cos = Cos2(sRoulette->wheelAngle); sin = sin / 16; - sRoulette->var2C.a = sRoulette->var2C.d = cos / 16; - sRoulette->var2C.b = sin; - sRoulette->var2C.c = -sin; + sRoulette->wheelRotation.a = sRoulette->wheelRotation.d = cos / 16; + sRoulette->wheelRotation.b = sin; + sRoulette->wheelRotation.c = -sin; } static void Task_StartPlaying(u8 taskId) @@ -1231,7 +1251,7 @@ static void Task_ContinuePlaying(u8 taskId) static void Task_StopPlaying(u8 taskId) { - DestroyTask(sRoulette->varA5); + DestroyTask(sRoulette->spinTaskId); ExitRoulette(taskId); } @@ -1241,29 +1261,29 @@ static void UpdateGridSelectionRect(u8 selectionId) switch (selectionId) { case SELECTION_NONE: - ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); break; case COL_WYNAUT: case COL_AZURILL: case COL_SKITTY: case COL_MAKUHITA: temp0 = (selectionId * 3 + 14); - ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); - SetGridSelectionRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->unk_397C[281], temp0, 7, 3, 13); + ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[281], temp0, 7, 3, 13); break; case ROW_ORANGE: case ROW_GREEN: case ROW_PURPLE: temp1 = ((selectionId - 1) / 5 * 3 + 10); - ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); - SetGridSelectionRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->unk_397C[320], 14, temp1, 16, 3); + ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[320], 14, temp1, 16, 3); break; // Individual square default: temp0 = GET_COL(selectionId) * 3 + 14; temp1 = ((selectionId - 1) / 5 * 3 + 7); - ClearGridSelectionRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); - SetGridSelectionRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->unk_397C[272], temp0, temp1, 3, 3); + ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[272], temp0, temp1, 3, 3); break; } } @@ -1276,10 +1296,10 @@ static void UpdateGridSelection(u8 taskId) static void Task_StartHandleBetGridInput(u8 taskId) { - sRoulette->var28 = 1; + sRoulette->selectionRectDrawState = SELECT_STATE_DRAW; UpdateGridSelectionRect(gTasks[taskId].tSelectionId); - sRoulette->var23 = 2; - sRoulette->var21 = 0; + sRoulette->wheelDelay = 2; + sRoulette->wheelDelayTimer = 0; gTasks[taskId].func = Task_HandleBetGridInput; } @@ -1356,49 +1376,52 @@ static bool8 CanMoveSelectionInDir(s16 *selectionId, u8 dir) static void ProcessBetGridInput(u8 taskId) { - u8 z = 0; + u8 headerOffset = 0; bool8 dirPressed = FALSE; - if ((!(JOY_NEW(DPAD_UP)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 0))) - && (!(JOY_NEW(DPAD_DOWN)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 1))) - && (!(JOY_NEW(DPAD_LEFT)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 2))) - && (!(JOY_NEW(DPAD_RIGHT)) || ((dirPressed = TRUE), CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 3))) + if ((!(JOY_NEW(DPAD_UP)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 0))) + && (!(JOY_NEW(DPAD_DOWN)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 1))) + && (!(JOY_NEW(DPAD_LEFT)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 2))) + && (!(JOY_NEW(DPAD_RIGHT)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 3))) && (dirPressed)) { u8 i; DrawGridBackground(gTasks[taskId].tSelectionId); UpdateGridSelection(taskId); - gTasks[taskId].data[1] = z; + gTasks[taskId].data[1] = 0; PlaySE(SE_SELECT); - sub_8151A9C(&sRoulette->varB8, 0xFFFF); - sRoulette->varB8.var04[13].var00_7 = sRoulette->varB8.var04[14].var00_7 = sRoulette->varB8.var04[15].var00_7 = 0; + sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); // Reset previous flashing wheel selections + sRoulette->flashUtil.var04[13].var00_7 = sRoulette->flashUtil.var04[14].var00_7 = sRoulette->flashUtil.var04[15].var00_7 = 0; FlashSelectionOnWheel(gTasks[taskId].tSelectionId); + + // Switch all the poke (column) headers to gray outlines for (i = 0; i < NUM_BOARD_POKES; i++) { - gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].oam.tileNum = - gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].sheetTileStart - + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].anims)->type; + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].anims)->type; } - if ((u16)(gTasks[taskId].tSelectionId - 1) < 4 && !(sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag) ) + // If the current selection is a column with at least 1 unhit space, fill in the header + if ((u16)(gTasks[taskId].tSelectionId - 1) < COL_MAKUHITA && !(sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag) ) { - z = gTasks[taskId].tSelectionId - 1; - gSprites[sRoulette->spriteIds[z + SPR_POKE_HEADER_1]].oam.tileNum = - gSprites[sRoulette->spriteIds[z + SPR_POKE_HEADER_1]].sheetTileStart - + (*gSprites[sRoulette->spriteIds[z + SPR_POKE_HEADER_1]].anims + 1)->type; + headerOffset = gTasks[taskId].tSelectionId - 1; + gSprites[sRoulette->spriteIds[headerOffset + SPR_POKE_HEADERS]].oam.tileNum = + gSprites[sRoulette->spriteIds[headerOffset + SPR_POKE_HEADERS]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[headerOffset + SPR_POKE_HEADERS]].anims + 1)->type; } } } -static void sub_8140F6C(u8 r0) +static void Task_StartRound(u8 taskId) { IncrementDailyRouletteUses(); - sRoulette->var28 = 0xFF; + sRoulette->selectionRectDrawState = SELECT_STATE_ERASE; if (sRoulette->minBet == 1) - sRoulette->var23 = 1; + sRoulette->wheelDelay = 1; else - sRoulette->var23 = 0; - sRoulette->var21 = 0; - gTasks[r0].data[1] = 32; - gTasks[r0].func = Task_SlideGridOffscreen; + sRoulette->wheelDelay = 0; + sRoulette->wheelDelayTimer = 0; + gTasks[taskId].data[1] = 32; + gTasks[taskId].func = Task_SlideGridOffscreen; } static void Task_PlaceBet(u8 taskId) @@ -1409,7 +1432,7 @@ static void Task_PlaceBet(u8 taskId) if ((gTasks[taskId].tCoins -= sRoulette->minBet) < 0) gTasks[taskId].tCoins = 0; SetCreditDigits(gTasks[taskId].tCoins); - gTasks[taskId].func = sub_8140F6C; + gTasks[taskId].func = Task_StartRound; } static void Task_HandleBetGridInput(u8 taskId) @@ -1455,14 +1478,14 @@ static void Task_SlideGridOffscreen(u8 taskId) { if (gTasks[taskId].data[1] > 2) gSpriteCoordOffsetX += 2; - if ((sRoulette->var26 += 4) == 104) + if ((sRoulette->gridX += 4) == 104) gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = &SpriteCallbackDummy; } else { ShowHideGridIcons(TRUE, -1); ShowHideGridBalls(TRUE, -1); - gTasks[taskId].func = Task_RollBall; + gTasks[taskId].func = Task_InitBallRoll; gTasks[taskId].data[1] = 0; } } @@ -1477,17 +1500,17 @@ static u8 sub_814118C(u16 r0, u16 r1) if (gLocalTime.hours > 3 && gLocalTime.hours < 10) { if (r0 < 12 || (r1 & 1)) - return gUnknown_085B6348[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].var02 / 2; else return 1; } - else if (!(r1 & 0x3)) + else if (!(r1 & 3)) { - return gUnknown_085B6348[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].var02 / 2; } else { - return gUnknown_085B6348[sRoulette->tableId].var02; + return sRouletteTables[sRoulette->tableId].var02; } break; case HAS_SHROOMISH | HAS_TAILLOW: @@ -1495,17 +1518,17 @@ static u8 sub_814118C(u16 r0, u16 r1) if (gLocalTime.hours > 3 && gLocalTime.hours < 11) { if (r0 < 6 || (r1 & 1)) - return gUnknown_085B6348[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].var02 / 2; else return 1; } else if ((r1 & 1) && r0 > 6) { - return gUnknown_085B6348[sRoulette->tableId].var02 / 4; + return sRouletteTables[sRoulette->tableId].var02 / 4; } else { - return gUnknown_085B6348[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].var02 / 2; } break; case 0: @@ -1516,31 +1539,31 @@ static u8 sub_814118C(u16 r0, u16 r1) if (!(r1 & 3)) return 1; else - return gUnknown_085B6348[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].var02 / 2; } else if (!(r1 & 3)) { if (r0 > 12) - return gUnknown_085B6348[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].var02 / 2; else - return gUnknown_085B6348[sRoulette->tableId].var02; + return sRouletteTables[sRoulette->tableId].var02; } else if (r1 & 0x8000) { if (r0 > 12) - return gUnknown_085B6348[sRoulette->tableId].var02; + return sRouletteTables[sRoulette->tableId].var02; else - return gUnknown_085B6348[sRoulette->tableId].var01; + return sRouletteTables[sRoulette->tableId].var01; } else { - return gUnknown_085B6348[sRoulette->tableId].var01 * 2; + return sRouletteTables[sRoulette->tableId].var01 * 2; } break; } } -static void Task_RollBall(u8 taskId) +static void Task_InitBallRoll(u8 taskId) { u8 randf; s8 randfinal; @@ -1552,8 +1575,8 @@ static void Task_RollBall(u8 taskId) rand = Random(); randmod = rand % 100; - sRoulette->var7C = gTasks[taskId].tBallNum; - sRoulette->var7D = sRoulette->var7E = sRoulette->var7F = g; + sRoulette->curBallSpriteId = gTasks[taskId].tBallNum; + sRoulette->ballState = sRoulette->hitSlot = sRoulette->var7F = BALL_STATE_ROLLING; randf = sub_814118C(gTasks[taskId].data[8], rand); randfinal = (rand % randf) - (randf / 2); @@ -1567,28 +1590,26 @@ static void Task_RollBall(u8 taskId) else r5 = (1 - r5) * 2; - sRoulette->var80 = g = gUnknown_085B6348[sRoulette->tableId].var1A + randfinal; + sRoulette->var80 = g = sRouletteTables[sRoulette->tableId].var1A + randfinal; g = S16TOPOSFLOAT(g) / 5.0f; sRoulette->var82 = g * 3; sRoulette->var86 = sRoulette->var84 = g; sRoulette->var88 = S16TOPOSFLOAT(angles[(rand & 1) + r5]); - sRoulette->var8C = S16TOPOSFLOAT(gUnknown_085B6348[sRoulette->tableId].var18); + sRoulette->var8C = S16TOPOSFLOAT(sRouletteTables[sRoulette->tableId].var18); sRoulette->var90 = ((sRoulette->var8C * 0.5f) - sRoulette->var8C) / S16TOPOSFLOAT(sRoulette->var82); sRoulette->var94 = 68.0f; sRoulette->var9C = 0.0f; sRoulette->var98 = -(8.0f / S16TOPOSFLOAT(sRoulette->var82)); sRoulette->varA0 = 36.0f; - gTasks[taskId].func = Task_EndBallRoll; + gTasks[taskId].func = Task_RollBall; } -static void Task_EndBallRoll(u8 taskId) +static void Task_RollBall(u8 taskId) { - u8 index; - sRoulette->var03_7 = TRUE; - index = sRoulette->spriteIds[sRoulette->var7C]; - sRoulette->var38 = &gSprites[index]; + sRoulette->ballRolling = TRUE; + sRoulette->var38 = &gSprites[sRoulette->spriteIds[sRoulette->curBallSpriteId]]; sRoulette->var38->callback = sub_81446AC; gTasks[taskId].tBallNum++; gTasks[taskId].data[8]++; @@ -1599,24 +1620,26 @@ static void Task_EndBallRoll(u8 taskId) static void Task_RecordBallHit(u8 taskId) { - if (sRoulette->var7D) + // Wait for ball to finish rolling + if (sRoulette->ballState != BALL_STATE_ROLLING) { - if (sRoulette->var03_5) + // If the ball got stuck, wait for it to be unstuck + if (sRoulette->ballStuck) { - if (sRoulette->var03_6) + if (sRoulette->ballUnstuck) { - sRoulette->var03_6 = FALSE; - sRoulette->var03_5 = FALSE; + sRoulette->ballUnstuck = FALSE; + sRoulette->ballStuck = FALSE; } } else { - if (!gTasks[taskId].data[1]) + if (gTasks[taskId].data[1] == 0) { - bool8 temp = IsHitInBetSelection(RecordHit(taskId, sRoulette->var7E), sRoulette->betSelection[sRoulette->curBallNum]); - gTasks[taskId].tWonBet = temp; - if (temp == TRUE) - sub_8151A48(&sRoulette->varB8, 0x1000); + bool8 won = IsHitInBetSelection(RecordHit(taskId, sRoulette->hitSlot), sRoulette->betSelection[sRoulette->curBallNum]); + gTasks[taskId].tWonBet = won; + if (won == TRUE) + sub_8151A48(&sRoulette->flashUtil, 0x1000); // Flash outer edges of wheel } if (gTasks[taskId].data[1] <= 60) { @@ -1642,7 +1665,7 @@ static void Task_SlideGridOnscreen(u8 taskId) { if (gTasks[taskId].data[1] > 2) gSpriteCoordOffsetX -= 2; - if ((sRoulette->var26 -= 4) == 104) + if ((sRoulette->gridX -= 4) == 104) gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = SpriteCB_GridSquare; } else @@ -1652,21 +1675,23 @@ static void Task_SlideGridOnscreen(u8 taskId) gTasks[taskId].data[1] = 121; else gTasks[taskId].data[1] = 61; - gTasks[taskId].func = sub_8141778; + gTasks[taskId].func = Task_FlashBallOnWinningSquare; } } -static void sub_8141778(u8 taskId) +static void Task_FlashBallOnWinningSquare(u8 taskId) { if (gTasks[taskId].data[1]-- > 1) { switch (gTasks[taskId].data[1] % 16) { case 8: + // Winning square uncovered ShowHideGridIcons(FALSE, -1); ShowHideGridBalls(FALSE, -1); break; case 0: + // Winning square occluded by ball ShowHideGridIcons(FALSE, gTasks[taskId].tWinningSquare); ShowHideGridBalls(FALSE, gTasks[taskId].tBallNum - 1); break; @@ -1784,8 +1809,8 @@ static void Task_PrintPayout(u8 taskId) static void Task_EndTurn(u8 taskId) { - sub_8151A9C(&sRoulette->varB8, 0xFFFF); - sRoulette->varB8.var04[13].var00_7 = sRoulette->varB8.var04[14].var00_7 = sRoulette->varB8.var04[15].var00_7 = 0; + sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); + sRoulette->flashUtil.var04[13].var00_7 = sRoulette->flashUtil.var04[14].var00_7 = sRoulette->flashUtil.var04[15].var00_7 = 0; gSprites[sRoulette->spriteIds[SPR_BOARD_ICONS + sGridSelections[gTasks[taskId].tWinningSquare].var00]].invisible = TRUE; gTasks[taskId].func = Task_TryPrintEndTurnMsg; } @@ -1799,9 +1824,9 @@ static void Task_TryPrintEndTurnMsg(u8 taskId) gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE; for (i = 0; i < NUM_BOARD_POKES; i++) { - gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].oam.tileNum = - gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].sheetTileStart - + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADER_1]].anims)->type; + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].anims)->type; } if (gTasks[taskId].tCoins >= sRoulette->minBet) { @@ -1868,8 +1893,8 @@ static void Task_ClearBoard(u8 taskId) static void ExitRoulette(u8 taskId) { - sub_8151A9C(&sRoulette->varB8, 0xFFFF); - sub_8151678(&sRoulette->varB8); + sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); + sub_8151678(&sRoulette->flashUtil); SetCoins(gTasks[taskId].tCoins); if (GetCoins() < sRoulette->minBet) gSpecialVar_0x8004 = TRUE; @@ -1918,9 +1943,9 @@ static void Task_WaitForNextTask(u8 taskId) static void StartTaskAfterDelayOrInput(u8 taskId, TaskFunc task, u16 delay, u16 key) { - sRoulette->varB4 = gTasks[taskId].func; + sRoulette->prevTask = gTasks[taskId].func; if (task == NULL) - task = sRoulette->varB4; + task = sRoulette->prevTask; sRoulette->nextTask = task; sRoulette->taskWaitDelay = delay; if (delay == 0xFFFF && key == 0) @@ -1933,10 +1958,10 @@ static void StartTaskAfterDelayOrInput(u8 taskId, TaskFunc task, u16 delay, u16 static void sub_8141FF4(u8 taskId) { u8 i = 0; - sRoulette->var00 = i; - sRoulette->var03_7 = FALSE; - sRoulette->var03_5 = FALSE; - sRoulette->var03_6 = FALSE; + sRoulette->unk0 = FALSE; + sRoulette->ballRolling = FALSE; + sRoulette->ballStuck = FALSE; + sRoulette->ballUnstuck = FALSE; sRoulette->useTaillow = FALSE; for (i = 0; i < BALLS_PER_ROUND; i++) @@ -2040,7 +2065,7 @@ static bool8 IsHitInBetSelection(u8 gridSquare, u8 betSelection) static void FlashSelectionOnWheel(u8 selectionId) { u16 var0 = 0; - u8 var2; + u8 numSelected; u16 var3; u8 i; @@ -2049,23 +2074,26 @@ static void FlashSelectionOnWheel(u8 selectionId) case ROW_ORANGE: case ROW_GREEN: case ROW_PURPLE: + // Flash colors of row selection for (i = (selectionId + 1); i < (selectionId + 5); i++) { if (!(sRoulette->hitFlags & sGridSelections[i].flag)) var0 |= sGridSelections[i].var10; } - sub_8151A48(&sRoulette->varB8, var0 &= 0xDFFF); + sub_8151A48(&sRoulette->flashUtil, var0 &= 0xDFFF); break; default: { - struct UnkStruct1 var1[3]; + // Selection is either a column or individual square + struct UnkStruct1 var1[NUM_BOARD_COLORS]; memcpy(var1, gUnknown_085B63F0, sizeof(var1)); - if (selectionId >= COL_WYNAUT && selectionId <= COL_MAKUHITA) - var2 = 3; - else - var2 = 1; - var3 = selectionId / 5 - 1; + if (selectionId >= COL_WYNAUT && selectionId <= COL_MAKUHITA) + numSelected = NUM_BOARD_COLORS; // Selection is full column + else + numSelected = 1; + + var3 = GET_ROW_IDX(selectionId); switch (GET_COL(selectionId)) { // The specific color of the poke it references doesn't matter, because the icons themelves all share a palette @@ -2083,36 +2111,42 @@ static void FlashSelectionOnWheel(u8 selectionId) var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16; break; } - if (var2 == 1) + if (numSelected == 1) { + // Selection is individual square if (!(sRoulette->hitFlags & sGridSelections[selectionId].flag)) { - var1[selectionId / 5 - 1].var02 += var3; - sub_815168C(&sRoulette->varB8, 13, &var1[selectionId / 5 - 1]); + // Set poke icon of selected square to flash + var1[GET_ROW_IDX(selectionId)].var02 += var3; + sub_815168C(&sRoulette->flashUtil, 13, &var1[GET_ROW_IDX(selectionId)]); } else { + // Square was already hit, don't flash it break; } } else { - for (i = 0; i < 3; i++) + // Selection is full column + for (i = 0; i < NUM_BOARD_COLORS; i++) { u8 var4 = i * 5 + selectionId + 5; if (!(sRoulette->hitFlags & sGridSelections[var4].flag)) { - var1[var4 / 5 - 1].var02 += var3; - sub_815168C(&sRoulette->varB8, i + 13, &var1[var4 / 5 - 1]); - if (var2 == 3) + // Set poke icons of selected squares to flash + var1[GET_ROW_IDX(var4)].var02 += var3; + sub_815168C(&sRoulette->flashUtil, i + 13, &var1[GET_ROW_IDX(var4)]); + if (numSelected == 3) var0 = sGridSelections[var4].var10; - var2--; + numSelected--; } } - if (var2 != 2) + if (numSelected != 2) var0 = 0; } - sub_8151A48(&sRoulette->varB8, var0 |= sGridSelections[selectionId].var10); + // Do flash + sub_8151A48(&sRoulette->flashUtil, var0 |= sGridSelections[selectionId].var10); break; } } @@ -2127,9 +2161,9 @@ static void DrawGridBackground(u8 selectionId) vu8 var0; u8 v[5]; u8 l; - sRoulette->var2A = 1; + sRoulette->updateGridHighlight = TRUE; ShowHideGridIcons(FALSE, 0); - SetGridSelectionRect(sRoulette->tilemapBuffers[2], sRoulette->unk_397C, 14, 7, 16, 13); + SetTilemapRect(sRoulette->tilemapBuffers[2], sRoulette->gridTilemap, 14, 7, 16, 13); switch (selectionId) { case SELECTION_NONE: @@ -2141,7 +2175,7 @@ static void DrawGridBackground(u8 selectionId) l = 4; for (i = 0; i < l; i++) { - v[i] = i * 5 + selectionId; + v[i] = i * ROW_ORANGE + selectionId; } break; case ROW_ORANGE: @@ -2165,16 +2199,16 @@ static void DrawGridBackground(u8 selectionId) for (z = 0; z < 3; z++) { var2 = (sGridSelections[v[i]].y + z) * 32; - sRoulette->tilemapBuffers[2][var1 + var2 + 0] = sRoulette->unk_397C[(var0 + z) * 3 + 208]; - sRoulette->tilemapBuffers[2][var1 + var2 + 1] = sRoulette->unk_397C[(var0 + z) * 3 + 209]; - sRoulette->tilemapBuffers[2][var1 + var2 + 2] = sRoulette->unk_397C[(var0 + z) * 3 + 210]; + sRoulette->tilemapBuffers[2][var1 + var2 + 0] = sRoulette->gridTilemap[(var0 + z) * 3 + 208]; + sRoulette->tilemapBuffers[2][var1 + var2 + 1] = sRoulette->gridTilemap[(var0 + z) * 3 + 209]; + sRoulette->tilemapBuffers[2][var1 + var2 + 2] = sRoulette->gridTilemap[(var0 + z) * 3 + 210]; } } } static u8 GetMultiplier(u8 selectionId) { - u8 multipliers[5] = {0, 3, 4, 6, 12}; + u8 multipliers[5] = {0, 3, 4, 6, MAX_MULTIPLIER}; if (selectionId > NUM_GRID_SELECTIONS) selectionId = 0; @@ -2182,13 +2216,13 @@ static u8 GetMultiplier(u8 selectionId) switch (sGridSelections[selectionId].baseMultiplier) { case NUM_BOARD_COLORS: - selectionId = selectionId / 5 - 1; + selectionId = GET_ROW_IDX(selectionId); // If already hit all pokes of this color, multiplier is 0 if (sRoulette->colorHits[selectionId] >= NUM_BOARD_POKES) return 0; return multipliers[sRoulette->colorHits[selectionId] + 1]; case NUM_BOARD_POKES: - selectionId--; + selectionId = GET_COL_IDX(selectionId); // If already hit all colors of this poke, multiplier is 0 if (sRoulette->pokeHits[selectionId] >= NUM_BOARD_COLORS) return 0; @@ -2197,27 +2231,27 @@ static u8 GetMultiplier(u8 selectionId) // If square has been hit already, multiplier is 0 if (sRoulette->hitFlags & sGridSelections[selectionId].flag) return 0; - return multipliers[4]; + return multipliers[ARRAY_COUNT(multipliers) - 1]; } return 0; } -static void sub_8142814(void) +static void UpdateWheelPosition(void) { - s32 x1; - s32 x2; - SetGpuReg(REG_OFFSET_BG2PA, sRoulette->var2C.a); - SetGpuReg(REG_OFFSET_BG2PB, sRoulette->var2C.b); - SetGpuReg(REG_OFFSET_BG2PC, sRoulette->var2C.c); - SetGpuReg(REG_OFFSET_BG2PD, sRoulette->var2C.d); - x1 = 0x7400 - sRoulette->var2C.a * (gSpriteCoordOffsetX + 116) - - sRoulette->var2C.b * (gSpriteCoordOffsetY + 80); - x2 = 0x5400 - sRoulette->var2C.c * (gSpriteCoordOffsetX + 116) - - sRoulette->var2C.d * (gSpriteCoordOffsetY + 80); - SetGpuReg(REG_OFFSET_BG2X_L, x1); - SetGpuReg(REG_OFFSET_BG2X_H, (x1 & 0x0fff0000) >> 16); - SetGpuReg(REG_OFFSET_BG2Y_L, x2); - SetGpuReg(REG_OFFSET_BG2Y_H, (x2 & 0x0fff0000) >> 16); + s32 bg2x; + s32 bg2y; + SetGpuReg(REG_OFFSET_BG2PA, sRoulette->wheelRotation.a); + SetGpuReg(REG_OFFSET_BG2PB, sRoulette->wheelRotation.b); + SetGpuReg(REG_OFFSET_BG2PC, sRoulette->wheelRotation.c); + SetGpuReg(REG_OFFSET_BG2PD, sRoulette->wheelRotation.d); + bg2x = 0x7400 - sRoulette->wheelRotation.a * (gSpriteCoordOffsetX + 116) + - sRoulette->wheelRotation.b * (gSpriteCoordOffsetY + 80); + bg2y = 0x5400 - sRoulette->wheelRotation.c * (gSpriteCoordOffsetX + 116) + - sRoulette->wheelRotation.d * (gSpriteCoordOffsetY + 80); + SetGpuReg(REG_OFFSET_BG2X_L, bg2x); + SetGpuReg(REG_OFFSET_BG2X_H, (bg2x & 0x0fff0000) >> 16); + SetGpuReg(REG_OFFSET_BG2Y_L, bg2y); + SetGpuReg(REG_OFFSET_BG2Y_H, (bg2y & 0x0fff0000) >> 16); } static const u8 sFiller[3] = {}; @@ -2262,7 +2296,7 @@ static const struct SpritePalette sSpritePalettes[] = {} }; -static const struct OamData gOamData_85B73EC = +static const struct OamData sOam_GridHeader = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -2494,7 +2528,7 @@ static const struct SpriteTemplate sSpriteTemplates_PokeHeaders[NUM_BOARD_POKES] { .tileTag = GFXTAG_HEADERS, .paletteTag = PALTAG_GRID_ICONS, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = sAnim_WynautHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2503,7 +2537,7 @@ static const struct SpriteTemplate sSpriteTemplates_PokeHeaders[NUM_BOARD_POKES] { .tileTag = GFXTAG_HEADERS, .paletteTag = PALTAG_GRID_ICONS, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = sAnim_AzurillHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2512,7 +2546,7 @@ static const struct SpriteTemplate sSpriteTemplates_PokeHeaders[NUM_BOARD_POKES] { .tileTag = GFXTAG_HEADERS, .paletteTag = PALTAG_GRID_ICONS, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = sAnim_SkittyHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2521,7 +2555,7 @@ static const struct SpriteTemplate sSpriteTemplates_PokeHeaders[NUM_BOARD_POKES] { .tileTag = GFXTAG_HEADERS, .paletteTag = PALTAG_GRID_ICONS, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = sAnim_MakuhitaHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2534,7 +2568,7 @@ static const struct SpriteTemplate sSpriteTemplates_ColorHeaders[NUM_BOARD_COLOR { .tileTag = GFXTAG_HEADERS, .paletteTag = PALTAG_GRID_ICONS, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = sAnim_OrangeHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2543,7 +2577,7 @@ static const struct SpriteTemplate sSpriteTemplates_ColorHeaders[NUM_BOARD_COLOR { .tileTag = GFXTAG_HEADERS, .paletteTag = PALTAG_GRID_ICONS, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = sAnim_GreenHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2552,7 +2586,7 @@ static const struct SpriteTemplate sSpriteTemplates_ColorHeaders[NUM_BOARD_COLOR { .tileTag = GFXTAG_HEADERS, .paletteTag = PALTAG_GRID_ICONS, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = sAnim_PurpleHeader, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2880,7 +2914,7 @@ static const struct SpriteTemplate sSpriteTemplate_Cursor = { .tileTag = GFXTAG_CURSOR, .paletteTag = PALTAG_INTERFACE, - .oam = &gOamData_85B73EC, + .oam = &sOam_GridHeader, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -3440,7 +3474,7 @@ static void CreateGridSprites(void) } for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_PokeHeaders); i++) { - spriteId = sRoulette->spriteIds[i + SPR_POKE_HEADER_1] = CreateSprite(&sSpriteTemplates_PokeHeaders[i], (i * 24) + 148, 70, 30); + spriteId = sRoulette->spriteIds[i + SPR_POKE_HEADERS] = CreateSprite(&sSpriteTemplates_PokeHeaders[i], (i * 24) + 148, 70, 30); gSprites[spriteId].animPaused = TRUE; } for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_ColorHeaders); i++) @@ -3577,7 +3611,7 @@ static void SpriteCB_BoardIcon(struct Sprite *sprite) s16 cos; s16 sin; u32 matrixNum; - s16 angle = sRoulette->var24 + sprite->data[0]; + s16 angle = sRoulette->wheelAngle + sprite->data[0]; if (angle >= 360) angle -= 360; sin = Sin2(angle); @@ -3608,18 +3642,18 @@ static void CreateInterfaceSprites(void) gSprites[sRoulette->spriteIds[SPR_CREDIT]].animPaused = TRUE; for (i = 0; i < MAX_COIN_DIGITS; i++) { - sRoulette->spriteIds[i + SPR_CREDIT_DIG_1] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 8 + 196, 24, 0); - gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].invisible = TRUE; - gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].animPaused = TRUE; + sRoulette->spriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 8 + 196, 24, 0); + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].animPaused = TRUE; } sRoulette->spriteIds[SPR_MULTIPLIER] = CreateSprite(&sSpriteTemplate_Multiplier, 120, 68, 4); gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].animPaused = TRUE; for (i = 0; i < BALLS_PER_ROUND / 2; i++) { // Each ball counter sprite has 2 balls - sRoulette->spriteIds[i + SPR_BALL_COUNTER_1] = CreateSprite(&sSpriteTemplate_BallCounter, i * 16 + 192, 36, 4); - gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].invisible = TRUE; - gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].animPaused = TRUE; + sRoulette->spriteIds[i + SPR_BALL_COUNTER] = CreateSprite(&sSpriteTemplate_BallCounter, i * 16 + 192, 36, 4); + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].animPaused = TRUE; } sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR] = CreateSprite(&sSpriteTemplate_Cursor, 152, 96, 9); gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].oam.priority = 1; @@ -3627,24 +3661,24 @@ static void CreateInterfaceSprites(void) gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE; } -static void SetCreditDigits(u16 r0) +static void SetCreditDigits(u16 num) { u8 i; u16 d = 1000; - bool8 v = FALSE; + bool8 printZero = FALSE; for (i = 0; i < MAX_COIN_DIGITS; i++) { - u8 t = r0 / d; - gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].invisible = TRUE; - if (t > 0 || v || i == MAX_COIN_DIGITS - 1) + u8 digit = num / d; + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].invisible = TRUE; + if (digit > 0 || printZero || i == MAX_COIN_DIGITS - 1) { - gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].invisible = FALSE; - gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].oam.tileNum = - gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].sheetTileStart - + (*gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIG_1]].anims + t)->type; - v = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].anims + digit)->type; + printZero = TRUE; } - r0 = r0 % d; + num = num % d; d = d / 10; } } @@ -3660,12 +3694,12 @@ static u8 GetMultiplierAnimId(u8 selectionId) switch (sGridSelections[selectionId].baseMultiplier) { case NUM_BOARD_COLORS: - selectionId = selectionId / 5 - 1; + selectionId = GET_ROW_IDX(selectionId); if (sRoulette->colorHits[selectionId] > 3) return 0; return animIds[sRoulette->colorHits[selectionId] + 1]; case NUM_BOARD_POKES: - selectionId--; + selectionId = GET_COL_IDX(selectionId); if (sRoulette->pokeHits[selectionId] > 2) return 0; return animIds[sRoulette->pokeHits[selectionId] + 2]; @@ -3695,10 +3729,10 @@ static void SetBallCounterNumLeft(u8 numBalls) case 6: for (i = 0; i < BALLS_PER_ROUND / 2; i++) { - gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].invisible = FALSE; - gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].oam.tileNum = - gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].sheetTileStart - + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].anims)->type; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].anims)->type; } break; case 5: @@ -3730,16 +3764,16 @@ static void SetBallCounterNumLeft(u8 numBalls) default: for (i = 0; i < BALLS_PER_ROUND / 2; i++) { - gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].oam.tileNum = - gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].sheetTileStart - + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER_1]].anims + t + 2)->type; + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].oam.tileNum = + gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].sheetTileStart + + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].anims + t + 2)->type; } } } static void SpriteCB_GridSquare(struct Sprite *sprite) { - sprite->pos2.x = sRoulette->var26; + sprite->pos2.x = sRoulette->gridX; } static void CreateBoardCenterSprite(void) @@ -3752,7 +3786,7 @@ static void CreateBoardCenterSprite(void) s.tag = sSpriteSheet_BoardCenter.tag; LoadSpriteSheet(&s); spriteId = CreateSprite(&sSpriteTemplate_BoardCenter, 116, 80, 81); - gSprites[spriteId].data[0] = sRoulette->var24; + gSprites[spriteId].data[0] = sRoulette->wheelAngle; gSprites[spriteId].data[1] = 0; gSprites[spriteId].animPaused = TRUE; gSprites[spriteId].affineAnimPaused = TRUE; @@ -3763,10 +3797,10 @@ static void SpriteCB_BoardCenter(struct Sprite *sprite) { u32 t = sprite->oam.matrixNum; struct OamMatrix *m = &gOamMatrices[0]; - m[t].d = sRoulette->var2C.a; - m[t].a = sRoulette->var2C.a; - m[t].b = sRoulette->var2C.b; - m[t].c = sRoulette->var2C.c; + m[t].d = sRoulette->wheelRotation.a; + m[t].a = sRoulette->wheelRotation.a; + m[t].b = sRoulette->wheelRotation.b; + m[t].c = sRoulette->wheelRotation.c; } static void CreateBoardBallSprites(void) @@ -3785,33 +3819,32 @@ static void CreateBoardBallSprites(void) static void HideBoardBalls(void) { - u8 t = sRoulette->spriteIds[SPR_BALL_1]; + u8 spriteId = sRoulette->spriteIds[SPR_BALL_1]; u8 i; for (i = 0; i < BALLS_PER_ROUND; i++) { u8 j; - gSprites[t].invisible = TRUE; - gSprites[t].callback = &SpriteCallbackDummy; - StartSpriteAnim(&gSprites[t], 0); + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].callback = &SpriteCallbackDummy; + StartSpriteAnim(&gSprites[spriteId], 0); for (j = 0; j < 8; j++) - { - gSprites[t].data[j] = 0; - } - t++; + gSprites[spriteId].data[j] = 0; + + spriteId++; } } static s16 sub_8143AC8(struct Sprite *sprite) { - if (sRoulette->var24 > sprite->data[3]) + if (sRoulette->wheelAngle > sprite->data[3]) { - sprite->data[6] = 360 - sRoulette->var24 + sprite->data[3]; + sprite->data[6] = 360 - sRoulette->wheelAngle + sprite->data[3]; if (sprite->data[6] >= 360) sprite->data[6] -= 360; } else { - sprite->data[6] = sprite->data[3] - sRoulette->var24; + sprite->data[6] = sprite->data[3] - sRoulette->wheelAngle; } return sprite->data[6]; @@ -3819,8 +3852,8 @@ static s16 sub_8143AC8(struct Sprite *sprite) static u8 sub_8143B14(struct Sprite *sprite) { - sRoulette->var7E = sub_8143AC8(sprite) / 30.0f; - return sRoulette->var7E; + sRoulette->hitSlot = sub_8143AC8(sprite) / 30.0f; + return sRoulette->hitSlot; } static s16 sub_8143B48(struct Sprite *sprite) @@ -3874,7 +3907,7 @@ static void sub_8143B84(struct Sprite *sprite) static void sub_8143C90(struct Sprite *sprite) { s16 sin, cos; - sprite->data[3] = sRoulette->var24 + sprite->data[6]; + sprite->data[3] = sRoulette->wheelAngle + sprite->data[6]; if (sprite->data[3] >= 360) sprite->data[3] -= 360; sin = Sin2(sprite->data[3]); @@ -3899,9 +3932,9 @@ static void sub_8143CFC(struct Sprite *sprite) { if (sRoulette->var94 <= sRoulette->varA0 - 2.0f) { - sRoulette->var7D = 0xFF; - sRoulette->var03_7 = FALSE; - StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sRoulette->ballState = BALL_STATE_LANDED; + sRoulette->ballRolling = FALSE; + StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; sub_8143AC8(sprite); @@ -3916,8 +3949,8 @@ static void sub_8143CFC(struct Sprite *sprite) { if (sRoulette->var94 >= sRoulette->varA0 - 2.0f) { - sRoulette->var7D = 0xFF; - sRoulette->var03_7 = FALSE; + sRoulette->ballState = BALL_STATE_LANDED; + sRoulette->ballRolling = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -3943,8 +3976,8 @@ static void SpriteCB_Shroomish(struct Sprite *sprite) if (sprite->data[0] != 1) { f0 = sprite->data[7]; - f1 = (f0 * gUnknown_085B6348[sRoulette->tableId].var01 + (gUnknown_085B6348[sRoulette->tableId].var02 - 1)); - f2 = (f0 / gUnknown_085B6348[sRoulette->tableId].var0C); + f1 = (f0 * sRouletteTables[sRoulette->tableId].var01 + (sRouletteTables[sRoulette->tableId].var02 - 1)); + f2 = (f0 / sRouletteTables[sRoulette->tableId].var0C); } else { @@ -3955,8 +3988,8 @@ static void SpriteCB_Shroomish(struct Sprite *sprite) if (sprite->data[0] != 0) { f0 = sprite->data[7]; - f1 = (f0 * gUnknown_085B6348[sRoulette->tableId].var01 + (gUnknown_085B6348[sRoulette->tableId].var02 - 1)); - f2 = -(f0 / gUnknown_085B6348[sRoulette->tableId].var0C); + f1 = (f0 * sRouletteTables[sRoulette->tableId].var01 + (sRouletteTables[sRoulette->tableId].var02 - 1)); + f2 = -(f0 / sRouletteTables[sRoulette->tableId].var0C); } else { @@ -3984,8 +4017,8 @@ static void sub_8143FA4(struct Sprite *sprite) sprite->data[2]++; if (sprite->data[2] > 29 && sprite->pos2.y >= 0) { - sRoulette->var7D = 0xFF; - sRoulette->var03_7 = FALSE; + sRoulette->ballState = BALL_STATE_LANDED; + sRoulette->ballRolling = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -3993,7 +4026,7 @@ static void sub_8143FA4(struct Sprite *sprite) sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; sprite->callback = sub_8143C90; m4aSongNumStartOrChange(SE_HASHI); - sRoulette->var03_6 = TRUE; + sRoulette->ballUnstuck = TRUE; } } @@ -4081,8 +4114,8 @@ static void prev_quest_read_x24_hm_usage(struct Sprite *sprite) { if (!sprite->data[0]) { - sRoulette->var7D = 0xFF; - sRoulette->var03_7 = FALSE; + sRoulette->ballState = BALL_STATE_LANDED; + sRoulette->ballRolling = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -4105,10 +4138,10 @@ static void sub_8144264(struct Sprite *sprite) sub_8143B84(sprite); sprite->data[2] = 0; sub_8143B14(sprite); - if (!(sRouletteSlots[sRoulette->var7E].flag & sRoulette->hitFlags)) + if (!(sRouletteSlots[sRoulette->hitSlot].flag & sRoulette->hitFlags)) { - sRoulette->var7D = 0xFF; - sRoulette->var03_7 = FALSE; + sRoulette->ballState = BALL_STATE_LANDED; + sRoulette->ballRolling = FALSE; StartSpriteAnim(sprite, sprite->animCmdIndex + 3); sub_8143B14(sprite); sprite->data[4] = 30; @@ -4126,30 +4159,30 @@ static void sub_8144264(struct Sprite *sprite) if (z) { sRoulette->var8C = 0.0f; - sRoulette->var7F = slotId = (sRoulette->var7E + 1) % NUM_ROULETTE_SLOTS; + sRoulette->var7F = slotId = (sRoulette->hitSlot + 1) % NUM_ROULETTE_SLOTS; } else { float temp; - sRoulette->var8C = (temp = gUnknown_085B6348[sRoulette->tableId].var1C) * 2.0f; - slotId = (sRoulette->var7E + NUM_ROULETTE_SLOTS - 1) % NUM_ROULETTE_SLOTS; - sRoulette->var7F = sRoulette->var7E; + sRoulette->var8C = (temp = sRouletteTables[sRoulette->tableId].var1C) * 2.0f; + slotId = (sRoulette->hitSlot + NUM_ROULETTE_SLOTS - 1) % NUM_ROULETTE_SLOTS; + sRoulette->var7F = sRoulette->hitSlot; } if (sRouletteSlots[slotId].flag & sRoulette->hitFlags) { sprite->data[0] = 1; - sprite->data[2] = gUnknown_085B6348[sRoulette->tableId].var02; + sprite->data[2] = sRouletteTables[sRoulette->tableId].var02; } else { sprite->data[0] = sRouletteSlots[slotId].flag & sRoulette->hitFlags; if (sRoulette->tableId) { - sprite->data[2] = gUnknown_085B6348[sRoulette->tableId].var01; + sprite->data[2] = sRouletteTables[sRoulette->tableId].var01; } else { - sprite->data[2] = gUnknown_085B6348[sRoulette->tableId].var02; + sprite->data[2] = sRouletteTables[sRoulette->tableId].var02; if (z) sRoulette->var8C = 0.5f; else @@ -4172,8 +4205,8 @@ static void sub_8144410(struct Sprite *sprite) if (!sub_8143B48(sprite)) { sRoulette->var90 = 0.0f; - sRoulette->var8C -= (float)(gUnknown_085B6348[sRoulette->tableId].var03) - / (gUnknown_085B6348[sRoulette->tableId].var04 + 1); + sRoulette->var8C -= (float)(sRouletteTables[sRoulette->tableId].wheelSpeed) + / (sRouletteTables[sRoulette->tableId].wheelDelay + 1); sprite->data[1] = 4; sprite->callback = sub_8144264; } @@ -4257,8 +4290,8 @@ static void CreateShroomishSprite(struct Sprite *sprite) gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[5] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[6] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2]; gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[2] = t; - gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[3] = (sprite->data[7] * gUnknown_085B6348[sRoulette->tableId].var01) + - (gUnknown_085B6348[sRoulette->tableId].var02 + 0xFFFF); + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[3] = (sprite->data[7] * sRouletteTables[sRoulette->tableId].var01) + + (sRouletteTables[sRoulette->tableId].var02 + 0xFFFF); } gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].coordOffsetEnabled = TRUE; sRoulette->var38 = sprite; @@ -4279,7 +4312,7 @@ static void CreateTaillowSprite(struct Sprite *sprite) sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_TaillowShadow, s[sprite->data[0]][0], s[sprite->data[0]][1], 51); gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].affineAnimPaused = TRUE; gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].animPaused = TRUE; - sprite->data[7] = (t * gUnknown_085B6348[sRoulette->tableId].var01) + (gUnknown_085B6348[sRoulette->tableId].var10 + 45); + sprite->data[7] = (t * sRouletteTables[sRoulette->tableId].var01) + (sRouletteTables[sRoulette->tableId].var10 + 45); for (; i < 2; i++) { gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[4] = sRoulette->spriteIds[SPR_CLEAR_MON]; @@ -4303,13 +4336,13 @@ static void sub_8144A24(struct Sprite *sprite) u8 s[10] = {}; u16 rand = Random(); - sRoulette->var7D = 1; - sRoulette->var03_5 = TRUE; - sRoulette->var03_6 = FALSE; - sRoulette->var7E = 0xFF; + sRoulette->ballState = BALL_STATE_STUCK; + sRoulette->ballStuck = TRUE; + sRoulette->ballUnstuck = FALSE; + sRoulette->hitSlot = 0xFF; sRoulette->var88 = sprite->data[3]; sRoulette->var98 = 0.0f; - sRoulette->var8C = gUnknown_085B6348[sRoulette->tableId].var1C; + sRoulette->var8C = sRouletteTables[sRoulette->tableId].var1C; o = (sRoulette->tableId * 30 + 33) + (1 - sRoulette->useTaillow) * 15; for (i = 0; i < 4; i++) @@ -4342,7 +4375,7 @@ static void sub_8144A24(struct Sprite *sprite) } val = 2; - z = (sRoulette->var7F + 2) % 12; + z = (sRoulette->var7F + 2) % NUM_ROULETTE_SLOTS; if (sRoulette->useTaillow == TRUE && sRoulette->tableId == 1) j += 6; @@ -4395,8 +4428,8 @@ static void sub_8144C70(struct Sprite *sprite) sprite->pos1.x -= 2; if (sprite->pos1.x < -16) { - if (!sRoulette->var03_6) - sRoulette->var03_6 = TRUE; + if (!sRoulette->ballUnstuck) + sRoulette->ballUnstuck = TRUE; DestroySprite(sprite); sRoulette->var01 = 0; sRoulette->var34 = gUnknown_085B7B1A[0]; @@ -4458,12 +4491,12 @@ static void sub_8144E60(struct Sprite *sprite) { if (sRoulette->var38->data[0] == 0) { - if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var08) + if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var08) return; } else { - if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var08 + 180) + if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var08 + 180) return; } @@ -4481,12 +4514,12 @@ static void sub_8144E60(struct Sprite *sprite) if (sRoulette->var38->data[0] == 0) { - if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var0A) + if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var0A) return; } else { - if (sRoulette->var38->data[3] != gUnknown_085B6348[sRoulette->tableId].var0A + 180) + if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var0A + 180) return; } @@ -4616,7 +4649,7 @@ static void SpriteCB_Taillow(struct Sprite *sprite) { if (sRoulette->var38->data[0] == 0) { - if (sRoulette->var38->data[3] == gUnknown_085B6348[sRoulette->tableId].var12 + 90) + if (sRoulette->var38->data[3] == sRouletteTables[sRoulette->tableId].var12 + 90) { gSprites[sprite->data[6]].data[1] = 52; gSprites[sprite->data[4]].data[1] = 52; @@ -4628,7 +4661,7 @@ static void SpriteCB_Taillow(struct Sprite *sprite) } else { - if (sRoulette->var38->data[3] == gUnknown_085B6348[sRoulette->tableId].var14 + 270) + if (sRoulette->var38->data[3] == sRouletteTables[sRoulette->tableId].var14 + 270) { gSprites[sprite->data[6]].data[1] = 46; gSprites[sprite->data[4]].data[1] = 46; diff --git a/src/roulette_util.c b/src/roulette_util.c index c51330f21a..4e6977675d 100755 --- a/src/roulette_util.c +++ b/src/roulette_util.c @@ -4,6 +4,10 @@ #include "roulette_util.h" #include "util.h" +// "Roulette Util" is perhaps more accurately a general flashing util +// e.g. it handles fading the palettes for the color selections on the Roulette wheel +// but it also handles the "pulse blend" effect of Mirage Tower + void sub_8151678(struct UnkStruct0 *r0) { r0->var00 = 0; @@ -429,7 +433,8 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend) } } -void ClearGridSelectionRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) +// Below used for the Roulette grid +void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) { u16 *_dest; u8 i; @@ -446,7 +451,7 @@ void ClearGridSelectionRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 he } } -void SetGridSelectionRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height) +void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height) { u16 *_dest; u16 *_src = src; From 868f831167cc20d47cd26292cf55f58dd862d4ae Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 3 Aug 2020 17:31:34 -0400 Subject: [PATCH 41/85] More roulette doc --- graphics_file_rules.mk | 2 +- include/roulette.h | 30 +- include/roulette_util.h | 32 +- src/roulette.c | 1597 ++++++++++++++++++++------------------- src/roulette_util.c | 22 +- 5 files changed, 878 insertions(+), 805 deletions(-) diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index f2d14ef3c0..019f382eb8 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -483,7 +483,7 @@ $(ROULETTEGFXDIR)/roulette_tilt.4bpp: $(ROULETTEGFXDIR)/shroomish.4bpp \ $(ROULETTEGFXDIR)/tailow.4bpp @cat $^ >$@ -$(ROULETTEGFXDIR)/board_icons.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \ +$(ROULETTEGFXDIR)/wheel_icons.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \ $(ROULETTEGFXDIR)/azurill.4bpp \ $(ROULETTEGFXDIR)/skitty.4bpp \ $(ROULETTEGFXDIR)/makuhita.4bpp diff --git a/include/roulette.h b/include/roulette.h index 71100d0d3e..c753f671c7 100755 --- a/include/roulette.h +++ b/include/roulette.h @@ -1,34 +1,6 @@ #ifndef GUARD_ROULETTE_H #define GUARD_ROULETTE_H -struct UnkStruct1 -{ - u16 var00; - u16 var02; - u8 var04; - u8 var05; - u8 var06; - s8 var07_0:5; - s8 var07_5:2; - s8 var07_7:1; -}; - -struct UnkStruct3 -{ - u8 var00_0:7; - u8 var00_7:1; - u8 var01; - s8 var02; - s8 var03; - struct UnkStruct1 var04; -}; - -struct UnkStruct0 -{ - u8 var00; - u8 var01; - u16 var02; //flag for each UnkStruct3 - struct UnkStruct3 var04[0x10]; -}; +void PlayRoulette(void); #endif // GUARD_ROULETTE_H diff --git a/include/roulette_util.h b/include/roulette_util.h index 2153b19f66..d18d22d0ff 100644 --- a/include/roulette_util.h +++ b/include/roulette_util.h @@ -1,8 +1,6 @@ #ifndef GUARD_ROULETTE_UTIL_H #define GUARD_ROULETTE_UTIL_H -#include "roulette.h" - struct PulseBlendSettings { u16 blendColor; @@ -35,6 +33,36 @@ struct PulseBlend struct PulseBlendPalette pulseBlendPalettes[16]; }; +struct UnkStruct1 +{ + u16 var00; + u16 var02; + u8 var04; + u8 var05; + u8 var06; + s8 var07_0:5; + s8 var07_5:2; + s8 var07_7:1; +}; + +struct UnkStruct3 +{ + u8 var00_0:7; + bool8 active:1; + u8 var01; + s8 var02; + s8 var03; + struct UnkStruct1 var04; +}; + +struct UnkStruct0 +{ + u8 var00; + u8 var01; + u16 var02; //flag for each UnkStruct3 + struct UnkStruct3 var04[0x10]; +}; + int InitPulseBlendPaletteSettings(struct PulseBlend *, const struct PulseBlendSettings *); void InitPulseBlend(struct PulseBlend *); void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); diff --git a/src/roulette.c b/src/roulette.c index 20868f4ba8..cc14a67cd1 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -35,10 +35,17 @@ #define BALLS_PER_ROUND 6 -#define NUM_BOARD_COLORS 3 // Grid rows -#define NUM_BOARD_POKES 4 // Grid columns +// "Board" is used in this file to refer to both the wheel and the bet selection grid +#define NUM_BOARD_COLORS 3 // Rows on grid +#define NUM_BOARD_POKES 4 // Columns on grid #define NUM_ROULETTE_SLOTS (NUM_BOARD_COLORS * NUM_BOARD_POKES) +// The degree change between each slot on the roulette wheel +#define DEGREES_PER_SLOT (360 / NUM_ROULETTE_SLOTS) + +// Where in the slot the ball will drop when landing +#define SLOT_MIDPOINT (DEGREES_PER_SLOT / 2 - 1) + // IDs for grid selections when betting #define SELECTION_NONE 0 #define COL_WYNAUT 1 @@ -68,7 +75,7 @@ #define GET_ROW(selectionId)((selectionId) / (NUM_BOARD_POKES + 1) * (NUM_BOARD_POKES + 1)) // Get the col/row index from the selection ID -// e.g. GET_ROW_IDX(SQU_PURPLE_SKITTY) is 2 +// e.g. GET_ROW_IDX(SQU_PURPLE_SKITTY) is 2 (purple being the 3rd row) #define GET_COL_IDX(selectionId)(selectionId - 1) #define GET_ROW_IDX(selectionId)(selectionId / 5 - 1) @@ -98,6 +105,7 @@ #define PALTAG_SHADOW 1 #define PALTAG_BALL 2 #define PALTAG_BALL_COUNTER 3 +#define PALTAG_CURSOR 4 #define PALTAG_INTERFACE 5 #define PALTAG_SHROOMISH 6 #define PALTAG_TAILLOW 7 @@ -107,10 +115,10 @@ #define PALTAG_SKITTY 11 #define PALTAG_MAKUHITA 12 -#define GFXTAG_BOARD_ICONS 0 +#define GFXTAG_WHEEL_ICONS 0 #define GFXTAG_HEADERS 4 #define GFXTAG_GRID_ICONS 5 -#define GFXTAG_BOARD_CENTER 6 +#define GFXTAG_WHEEL_CENTER 6 #define GFXTAG_CREDIT 7 #define GFXTAG_CREDIT_DIGIT 8 #define GFXTAG_MULTIPLIER 9 @@ -122,11 +130,15 @@ // 2 different Roulette tables with 2 different rates (normal vs service day special) // & 1 gets which table, >> 7 gets if ROULETTE_SPECIAL_RATE is set -#define GET_TABLE_ID(var)(((var) & 1) + (((var) >> 7) * 2)) +#define GET_MIN_BET_ID(var)(((var) & 1) + (((var) >> 7) * 2)) +// Having Shroomish or Taillow in the party can make rolls more consistent in length +// It also increases the likelihood that, if they appear to unstick a ball, they'll move it to a slot the player bet on #define HAS_SHROOMISH (1 << 0) #define HAS_TAILLOW (1 << 1) +#define NO_DELAY 0xFFFF + enum { BALL_STATE_ROLLING, BALL_STATE_STUCK, @@ -140,27 +152,29 @@ enum { SELECT_STATE_ERASE = 0xFF, }; +// Roulette uses a large amount of sprites, and stores ids for these in a single array +// Many are looped over rather than referenced directly enum { - SPR_BALL_1, - SPR_BALL_2, - SPR_BALL_3, - SPR_BALL_4, - SPR_BALL_5, - SPR_BALL_6, - SPR_6, - SPR_BOARD_ICON_ORANGE_WYNAUT, - SPR_BOARD_ICON_GREEN_AZURILL, - SPR_BOARD_ICON_PURPLE_SKITTY, - SPR_BOARD_ICON_ORANGE_MAKUHITA, - SPR_BOARD_ICON_GREEN_WYNAUT, - SPR_BOARD_ICON_PURPLE_AZURILL, - SPR_BOARD_ICON_ORANGE_SKITTY, - SPR_BOARD_ICON_GREEN_MAKUHITA, - SPR_BOARD_ICON_PURPLE_WYNAUT, - SPR_BOARD_ICON_ORANGE_AZURILL, - SPR_BOARD_ICON_GREEN_SKITTY, - SPR_BOARD_ICON_PURPLE_MAKUHITA, - SPR_19, + SPR_WHEEL_BALL_1, + SPR_WHEEL_BALL_2, + SPR_WHEEL_BALL_3, + SPR_WHEEL_BALL_4, + SPR_WHEEL_BALL_5, + SPR_WHEEL_BALL_6, + SPR_WHEEL_CENTER, + SPR_WHEEL_ICON_ORANGE_WYNAUT, + SPR_WHEEL_ICON_GREEN_AZURILL, + SPR_WHEEL_ICON_PURPLE_SKITTY, + SPR_WHEEL_ICON_ORANGE_MAKUHITA, + SPR_WHEEL_ICON_GREEN_WYNAUT, + SPR_WHEEL_ICON_PURPLE_AZURILL, + SPR_WHEEL_ICON_ORANGE_SKITTY, + SPR_WHEEL_ICON_GREEN_MAKUHITA, + SPR_WHEEL_ICON_PURPLE_WYNAUT, + SPR_WHEEL_ICON_ORANGE_AZURILL, + SPR_WHEEL_ICON_GREEN_SKITTY, + SPR_WHEEL_ICON_PURPLE_MAKUHITA, + SPR_19, // Unused SPR_CREDIT, SPR_CREDIT_DIG_1, SPR_CREDIT_DIG_10, @@ -199,7 +213,7 @@ enum { SPR_CLEAR_MON, // Shroomish/Taillow SPR_CLEAR_MON_SHADOW_1, SPR_CLEAR_MON_SHADOW_2, - SPR_58, + SPR_58, // Here below unused SPR_59, SPR_60, SPR_61, @@ -208,43 +222,53 @@ enum { }; // Start points for sprite IDs that are looped over -#define SPR_BOARD_ICONS SPR_BOARD_ICON_ORANGE_WYNAUT +#define SPR_WHEEL_BALLS SPR_WHEEL_BALL_1 +#define SPR_WHEEL_ICONS SPR_WHEEL_ICON_ORANGE_WYNAUT #define SPR_BALL_COUNTER SPR_BALL_COUNTER_1 #define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 #define SPR_GRID_ICONS SPR_GRID_ICON_ORANGE_WYNAUT #define SPR_POKE_HEADERS SPR_POKE_HEADER_1 +#define SPR_COLOR_HEADERS SPR_COLOR_HEADER_1 +#define SPR_GRID_BALLS SPR_GRID_BALL_1 + +struct Shroomish +{ + u16 startAngle; + u16 dropAngle; + u16 fallSlowdown; +}; + +struct Taillow +{ + u16 baseDropDelay; + u16 rightStartAngle; + u16 leftStartAngle; +}; struct RouletteTable { u8 minBet; // Never read - u8 var01; - u8 var02; + u8 randDistanceHigh; + u8 randDistanceLow; u8 wheelSpeed; u8 wheelDelay; - u8 filler_05[3]; - u16 var08; - u16 var0A; - u16 var0C; - u8 filler_0E[2]; - u16 var10; - u16 var12; - u16 var14; - u8 filler_16[2]; - u16 var18; - u16 var1A; + struct Shroomish shroomish; + struct Taillow taillow; + u16 ballSpeed; + u16 baseTravelDist; float var1C; }; struct GridSelection { - u8 var00; + u8 spriteIdOffset; u8 baseMultiplier:4; u8 column:4; // Never read u8 row; // Never read u8 x; u8 y; u8 var05; // Never read - u8 var06; + u8 tilemapOffset; u32 flag; u32 inSelectionFlags; u16 var10; @@ -261,7 +285,7 @@ struct RouletteSlot static EWRAM_DATA struct Roulette { u8 unk0; // Never read - u8 var01; + u8 shroomishShadowTimer; u8 partySpeciesFlags; bool8 useTaillow:5; bool8 ballStuck:1; @@ -275,8 +299,8 @@ static EWRAM_DATA struct Roulette u8 pokeHits[NUM_BOARD_POKES]; u8 colorHits[NUM_BOARD_COLORS]; u8 minBet; - u8 curBallNum:4; // Never actually gets incremented - u8 unk:4; // Never read + u8 curBallNum:4; // Never actually gets incremented, tracked with tBallNum instead + u8 unk1:4; // Never read u8 betSelection[BALLS_PER_ROUND]; // Because curBallNum is used as the only index, only the first element is ever used (prev bet selections are never needed) u8 wheelDelayTimer; u8 wheelSpeed; @@ -286,23 +310,23 @@ static EWRAM_DATA struct Roulette s16 selectionRectDrawState; s16 updateGridHighlight; struct OamMatrix wheelRotation; - u16 var34; - struct Sprite *var38; + u16 shroomishShadowAlpha; + struct Sprite *ball; u8 spriteIds[MAX_SPRITES]; u8 curBallSpriteId; u8 ballState; u8 hitSlot; - u8 var7F; - s16 var80; // Never read - s16 var82; - u16 var84; - u16 var86; - float var88; - float var8C; - float var90; - float var94; - float var98; - float var9C; + u8 stuckHitSlot; + s16 ballTravelDist; // Never read + s16 ballTravelDistFast; + u16 ballTravelDistMed; + u16 ballTravelDistSlow; + float ballAngle; + float ballAngleSpeed; + float ballAngleAccel; + float ballDistToCenter; + float ballFallSpeed; + float ballFallAccel; float varA0; u8 playTaskId; u8 spinTaskId; @@ -339,7 +363,7 @@ static void Task_ClearBoard(u8); static void ExitRoulette(u8); static void Task_ExitRoulette(u8); static void StartTaskAfterDelayOrInput(u8, TaskFunc, u16, u16); -static void sub_8141FF4(u8); +static void ResetBallDataForNewSpin(u8); static void ResetHits(void); static void Task_AcceptMinBet(u8); static void Task_DeclineMinBet(u8); @@ -355,22 +379,22 @@ static void ShowHideGridIcons(bool8, u8); static void CreateGridBallSprites(void); static void ShowHideGridBalls(bool8, u8); static void ShowHideWinSlotCursor(u8); -static void CreateBoardIconSprites(void); -static void SpriteCB_BoardIcon(struct Sprite *); +static void CreateWheelIconSprites(void); +static void SpriteCB_WheelIcon(struct Sprite *); static void CreateInterfaceSprites(void); static void SetCreditDigits(u16); static void SetMultiplierSprite(u8); static void SetBallCounterNumLeft(u8); static void SpriteCB_GridSquare(struct Sprite *); -static void CreateBoardCenterSprite(void); -static void SpriteCB_BoardCenter(struct Sprite *); -static void CreateBoardBallSprites(void); -static void HideBoardBalls(void); -static void sub_81446AC(struct Sprite *); +static void CreateWheelCenterSprite(void); +static void SpriteCB_WheelCenter(struct Sprite *); +static void CreateWheelBallSprites(void); +static void HideWheelBalls(void); +static void SpriteCB_RollBall_Start(struct Sprite *); static void CreateShroomishSprite(struct Sprite *); static void CreateTaillowSprite(struct Sprite *); -static void sub_8144A24(struct Sprite *); -static void sub_8144E60(struct Sprite *); +static void SetBallStuck(struct Sprite *); +static void SpriteCB_Shroomish(struct Sprite *); static void SpriteCB_Taillow(struct Sprite *); static const u16 sWheel_Pal[] = INCBIN_U16("graphics/roulette/wheel.gbapal"); // also palette for grid @@ -424,265 +448,264 @@ static const struct WindowTemplate sWindowTemplates[] = //DUMMY_WIN_TEMPLATE }; -// var00, sprite id offset (from 7)? static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = { [SELECTION_NONE] = { - .var00 = 0xFF, + .spriteIdOffset = 0xFF, .baseMultiplier = 0, .column = 0, .row = 0, .x = 7, .y = 7, .var05 = 0, - .var06 = 0, + .tilemapOffset = 0, .flag = 0, .inSelectionFlags = 0, .var10 = 0x0, }, [COL_WYNAUT] = { - .var00 = 12, + .spriteIdOffset = 12, .baseMultiplier = NUM_BOARD_POKES, .column = 1, .row = 0, .x = 17, .y = 7, .var05 = 0, - .var06 = 0, + .tilemapOffset = 0, .flag = F_WYNAUT_COL, .inSelectionFlags = F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT, .var10 = 0xE000, }, [COL_AZURILL] = { - .var00 = 13, + .spriteIdOffset = 13, .baseMultiplier = NUM_BOARD_POKES, .column = 2, .row = 0, .x = 20, .y = 7, .var05 = 0, - .var06 = 0, + .tilemapOffset = 0, .flag = F_AZURILL_COL, .inSelectionFlags = F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL, .var10 = 0xE000, }, [COL_SKITTY] = { - .var00 = 14, + .spriteIdOffset = 14, .baseMultiplier = NUM_BOARD_POKES, .column = 3, .row = 0, .x = 23, .y = 7, .var05 = 0, - .var06 = 0, + .tilemapOffset = 0, .flag = F_SKITTY_COL, .inSelectionFlags = F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY, .var10 = 0xE000, }, [COL_MAKUHITA] = { - .var00 = 15, + .spriteIdOffset = 15, .baseMultiplier = NUM_BOARD_POKES, .column = 4, .row = 0, .x = 26, .y = 7, .var05 = 0, - .var06 = 0, + .tilemapOffset = 0, .flag = F_MAKUHITA_COL, .inSelectionFlags = F_MAKUHITA_COL | F_ORANGE_MAKUHITA | F_GREEN_MAKUHITA | F_PURPLE_MAKUHITA, .var10 = 0xE000, }, [ROW_ORANGE] = { - .var00 = 16, + .spriteIdOffset = 16, .baseMultiplier = NUM_BOARD_COLORS, .column = 0, .row = 1, .x = 14, .y = 10, .var05 = 0, - .var06 = 12, + .tilemapOffset = 12, .flag = F_ORANGE_ROW, .inSelectionFlags = F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA, .var10 = 0x249, }, [SQU_ORANGE_WYNAUT] = { - .var00 = 0, + .spriteIdOffset = 0, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 1, .row = 1, .x = 17, .y = 10, .var05 = 3, - .var06 = 3, + .tilemapOffset = 3, .flag = F_ORANGE_WYNAUT, .inSelectionFlags = F_ORANGE_WYNAUT, .var10 = 0x2001, }, [SQU_ORANGE_AZURILL] = { - .var00 = 9, + .spriteIdOffset = 9, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 2, .row = 1, .x = 20, .y = 10, .var05 = 3, - .var06 = 3, + .tilemapOffset = 3, .flag = F_ORANGE_AZURILL, .inSelectionFlags = F_ORANGE_AZURILL, .var10 = 0x2200, }, [SQU_ORANGE_SKITTY] = { - .var00 = 6, + .spriteIdOffset = 6, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 3, .row = 1, .x = 23, .y = 10, .var05 = 3, - .var06 = 3, + .tilemapOffset = 3, .flag = F_ORANGE_SKITTY, .inSelectionFlags = F_ORANGE_SKITTY, .var10 = 0x2040, }, [SQU_ORANGE_MAKUHITA] = { - .var00 = 3, + .spriteIdOffset = 3, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 4, .row = 1, .x = 26, .y = 10, .var05 = 3, - .var06 = 3, + .tilemapOffset = 3, .flag = F_ORANGE_MAKUHITA, .inSelectionFlags = F_ORANGE_MAKUHITA, .var10 = 0x2008, }, [ROW_GREEN] = { - .var00 = 17, + .spriteIdOffset = 17, .baseMultiplier = NUM_BOARD_COLORS, .column = 0, .row = 2, .x = 14, .y = 13, .var05 = 3, - .var06 = 15, + .tilemapOffset = 15, .flag = F_GREEN_ROW, .inSelectionFlags = F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA, .var10 = 0x492, }, [SQU_GREEN_WYNAUT] = { - .var00 = 4, + .spriteIdOffset = 4, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 1, .row = 2, .x = 17, .y = 13, .var05 = 6, - .var06 = 6, + .tilemapOffset = 6, .flag = F_GREEN_WYNAUT, .inSelectionFlags = F_GREEN_WYNAUT, .var10 = 0x2010, }, [SQU_GREEN_AZURILL] = { - .var00 = 1, + .spriteIdOffset = 1, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 2, .row = 2, .x = 20, .y = 13, .var05 = 6, - .var06 = 6, + .tilemapOffset = 6, .flag = F_GREEN_AZURILL, .inSelectionFlags = F_GREEN_AZURILL, .var10 = 0x2002, }, [SQU_GREEN_SKITTY] = { - .var00 = 10, + .spriteIdOffset = 10, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 3, .row = 2, .x = 23, .y = 13, .var05 = 6, - .var06 = 6, + .tilemapOffset = 6, .flag = F_GREEN_SKITTY, .inSelectionFlags = F_GREEN_SKITTY, .var10 = 0x2400, }, [SQU_GREEN_MAKUHITA] = { - .var00 = 7, + .spriteIdOffset = 7, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 4, .row = 2, .x = 26, .y = 13, .var05 = 6, - .var06 = 6, + .tilemapOffset = 6, .flag = F_GREEN_MAKUHITA, .inSelectionFlags = F_GREEN_MAKUHITA, .var10 = 0x2080, }, [ROW_PURPLE] = { - .var00 = 18, + .spriteIdOffset = 18, .baseMultiplier = NUM_BOARD_COLORS, .column = 0, .row = 3, .x = 14, .y = 16, .var05 = 6, - .var06 = 18, + .tilemapOffset = 18, .flag = F_PURPLE_ROW, .inSelectionFlags = F_PURPLE_ROW | F_PURPLE_WYNAUT | F_PURPLE_AZURILL | F_PURPLE_SKITTY | F_PURPLE_MAKUHITA, .var10 = 0x924, }, [SQU_PURPLE_WYNAUT] = { - .var00 = 8, + .spriteIdOffset = 8, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 1, .row = 3, .x = 17, .y = 16, .var05 = 9, - .var06 = 9, + .tilemapOffset = 9, .flag = F_PURPLE_WYNAUT, .inSelectionFlags = F_PURPLE_WYNAUT, .var10 = 0x2100, }, [SQU_PURPLE_AZURILL] = { - .var00 = 5, + .spriteIdOffset = 5, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 2, .row = 3, .x = 20, .y = 16, .var05 = 9, - .var06 = 9, + .tilemapOffset = 9, .flag = F_PURPLE_AZURILL, .inSelectionFlags = F_PURPLE_AZURILL, .var10 = 0x2020, }, [SQU_PURPLE_SKITTY] = { - .var00 = 2, + .spriteIdOffset = 2, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 3, .row = 3, .x = 23, .y = 16, .var05 = 9, - .var06 = 9, + .tilemapOffset = 9, .flag = F_PURPLE_SKITTY, .inSelectionFlags = F_PURPLE_SKITTY, .var10 = 0x2004, }, [SQU_PURPLE_MAKUHITA] = { - .var00 = 11, + .spriteIdOffset = 11, .baseMultiplier = NUM_ROULETTE_SLOTS, .column = 4, .row = 3, .x = 26, .y = 16, .var05 = 9, - .var06 = 9, + .tilemapOffset = 9, .flag = F_PURPLE_MAKUHITA, .inSelectionFlags = F_PURPLE_MAKUHITA, .var10 = 0x2800, @@ -771,35 +794,43 @@ static const struct RouletteTable sRouletteTables[] = // Left table { .minBet = 1, - .var01 = 60, - .var02 = 30, + .randDistanceHigh = DEGREES_PER_SLOT * 2, + .randDistanceLow = DEGREES_PER_SLOT, .wheelSpeed = 1, .wheelDelay = 1, - .var08 = 45, - .var0A = 30, - .var0C = 1, - .var10 = 75, - .var12 = 27, - .var14 = 24, - .var18 = 10, - .var1A = 360, + .shroomish = { + .startAngle = 45, + .dropAngle = 30, + .fallSlowdown = 1, + }, + .taillow = { + .baseDropDelay = 75, + .rightStartAngle = 27, + .leftStartAngle = 24, + }, + .ballSpeed = 10, + .baseTravelDist = 360, .var1C = -0.5f }, // Right table { .minBet = 3, - .var01 = 30, - .var02 = 15, + .randDistanceHigh = DEGREES_PER_SLOT, + .randDistanceLow = DEGREES_PER_SLOT / 2, .wheelSpeed = 1, .wheelDelay = 0, - .var08 = 75, - .var0A = 60, - .var0C = 2, - .var10 = 0, - .var12 = 54, - .var14 = 48, - .var18 = 10, - .var1A = 270, + .shroomish = { + .startAngle = 75, + .dropAngle = 60, + .fallSlowdown = 2, + }, + .taillow = { + .baseDropDelay = 0, + .rightStartAngle = 54, + .leftStartAngle = 48, + }, + .ballSpeed = 10, + .baseTravelDist = 270, .var1C = -1.0f } }; @@ -938,7 +969,7 @@ static const struct UnkStruct1 gUnknown_085B6388[NUM_ROULETTE_SLOTS + 1] = }, }; -static const struct UnkStruct1 gUnknown_085B63F0[] = +static const struct UnkStruct1 gUnknown_085B63F0[NUM_BOARD_COLORS] = { { .var00 = 0x53FF, @@ -1001,8 +1032,8 @@ static void VBlankCB_Roulette(void) UpdateWheelPosition(); SetGpuReg(REG_OFFSET_BG1HOFS, 0x200 - sRoulette->gridX); - if (sRoulette->var01) - SetGpuReg(REG_OFFSET_BLDALPHA, sRoulette->var34); + if (sRoulette->shroomishShadowTimer) + SetGpuReg(REG_OFFSET_BLDALPHA, sRoulette->shroomishShadowAlpha); if (sRoulette->updateGridHighlight) { @@ -1058,7 +1089,7 @@ static void FreeRoulette(void) FREE_AND_SET_NULL(sRoulette); } -static void sub_8140470(void) +static void InitRouletteTableData(void) { u8 i; u16 bgColors[3] = {RGB(24, 4, 10), RGB(10, 19, 6), RGB(24, 4, 10)}; // 3rd is never used, same as 1st @@ -1071,7 +1102,7 @@ static void sub_8140470(void) sRoulette->wheelSpeed = sRouletteTables[sRoulette->tableId].wheelSpeed; sRoulette->wheelDelay = sRouletteTables[sRoulette->tableId].wheelDelay; sRoulette->minBet = sTableMinBets[sRoulette->tableId + sRoulette->isSpecialRate * 2]; - sRoulette->unk = 1; + sRoulette->unk1 = 1; // Left table (with min bet of 1) has red background, other table has green if (sRoulette->minBet == 1) @@ -1107,6 +1138,7 @@ static void sub_8140470(void) #define tSelectionId data[4] #define tWonBet data[5] #define tBallNum data[6] +#define tTotalBallNum data[8] // Same as tBallNum but isn't cleared every 6 balls #define tConsecutiveWins data[11] #define tWinningSquare data[12] #define tCoins data[13] @@ -1147,17 +1179,17 @@ static void CB2_LoadRoulette(void) if (FreeTempTileDataBuffersIfPossible()) return; - sub_8140470(); + InitRouletteTableData(); CopyToBgTilemapBuffer(2, sWheel_Tilemap, 0, 0); break; case 5: LoadOrFreeMiscSpritePalettesAndSheets(FALSE); - CreateBoardBallSprites(); - CreateBoardCenterSprite(); + CreateWheelBallSprites(); + CreateWheelCenterSprite(); CreateInterfaceSprites(); CreateGridSprites(); CreateGridBallSprites(); - CreateBoardIconSprites(); + CreateWheelIconSprites(); break; case 6: AnimateSprites(); @@ -1225,12 +1257,12 @@ static void Task_StartPlaying(u8 taskId) BLDCNT_TGT2_BD); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8)); gTasks[taskId].tBallNum = 0; - sub_8141FF4(taskId); + ResetBallDataForNewSpin(taskId); ResetHits(); - HideBoardBalls(); + HideWheelBalls(); DrawGridBackground(SELECTION_NONE); SetBallCounterNumLeft(BALLS_PER_ROUND); - StartTaskAfterDelayOrInput(taskId, Task_ContinuePlaying, 0xFFFF, A_BUTTON | B_BUTTON); + StartTaskAfterDelayOrInput(taskId, Task_ContinuePlaying, NO_DELAY, A_BUTTON | B_BUTTON); } } @@ -1327,7 +1359,7 @@ static void Task_SelectFirstEmptySquare(u8 taskId) } } gTasks[taskId].tSelectionId = i; - sub_8141FF4(taskId); + ResetBallDataForNewSpin(taskId); DrawGridBackground(gTasks[taskId].tSelectionId); SetMultiplierSprite(gTasks[taskId].tSelectionId); FlashSelectionOnWheel(gTasks[taskId].tSelectionId); @@ -1389,8 +1421,8 @@ static void ProcessBetGridInput(u8 taskId) UpdateGridSelection(taskId); gTasks[taskId].data[1] = 0; PlaySE(SE_SELECT); - sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); // Reset previous flashing wheel selections - sRoulette->flashUtil.var04[13].var00_7 = sRoulette->flashUtil.var04[14].var00_7 = sRoulette->flashUtil.var04[15].var00_7 = 0; + sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); // Reset previous flashing wheel color selection + sRoulette->flashUtil.var04[13].active = sRoulette->flashUtil.var04[14].active = sRoulette->flashUtil.var04[15].active = FALSE; // Same as above, but for icon FlashSelectionOnWheel(gTasks[taskId].tSelectionId); // Switch all the poke (column) headers to gray outlines @@ -1401,7 +1433,7 @@ static void ProcessBetGridInput(u8 taskId) + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].anims)->type; } // If the current selection is a column with at least 1 unhit space, fill in the header - if ((u16)(gTasks[taskId].tSelectionId - 1) < COL_MAKUHITA && !(sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag) ) + if ((u16)(gTasks[taskId].tSelectionId - 1) < COL_MAKUHITA && !(sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag)) { headerOffset = gTasks[taskId].tSelectionId - 1; gSprites[sRoulette->spriteIds[headerOffset + SPR_POKE_HEADERS]].oam.tileNum = @@ -1411,7 +1443,7 @@ static void ProcessBetGridInput(u8 taskId) } } -static void Task_StartRound(u8 taskId) +static void Task_StartSpin(u8 taskId) { IncrementDailyRouletteUses(); sRoulette->selectionRectDrawState = SELECT_STATE_ERASE; @@ -1432,7 +1464,7 @@ static void Task_PlaceBet(u8 taskId) if ((gTasks[taskId].tCoins -= sRoulette->minBet) < 0) gTasks[taskId].tCoins = 0; SetCreditDigits(gTasks[taskId].tCoins); - gTasks[taskId].func = Task_StartRound; + gTasks[taskId].func = Task_StartSpin; } static void Task_HandleBetGridInput(u8 taskId) @@ -1476,8 +1508,11 @@ static void Task_SlideGridOffscreen(u8 taskId) { if (gTasks[taskId].data[1]-- > 0) { + // Slide wheel over if (gTasks[taskId].data[1] > 2) gSpriteCoordOffsetX += 2; + + // Slide grid over if ((sRoulette->gridX += 4) == 104) gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = &SpriteCallbackDummy; } @@ -1490,7 +1525,12 @@ static void Task_SlideGridOffscreen(u8 taskId) } } -static u8 sub_814118C(u16 r0, u16 r1) +// Each table has a set base distance used to determine how far the ball will travel +// Each roll a random value is generated to add onto this distance +// Half the value returned by this function is the max distance that can be added on per roll +// i.e. the lower this value is, the closer the roll will be to a consistent distance +// Odds of a lower value increase as play continues, if the player has Shroomish and/or Taillow in the party, and dependent on the time +static u8 GetRandomForBallTravelDistance(u16 ballNum, u16 rand) { switch (sRoulette->partySpeciesFlags) { @@ -1499,36 +1539,36 @@ static u8 sub_814118C(u16 r0, u16 r1) // one of the two is in party if (gLocalTime.hours > 3 && gLocalTime.hours < 10) { - if (r0 < 12 || (r1 & 1)) - return sRouletteTables[sRoulette->tableId].var02 / 2; + if (ballNum < BALLS_PER_ROUND * 2 || (rand & 1)) + return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; else return 1; } - else if (!(r1 & 3)) + else if (!(rand & 3)) { - return sRouletteTables[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; } else { - return sRouletteTables[sRoulette->tableId].var02; + return sRouletteTables[sRoulette->tableId].randDistanceLow; } break; case HAS_SHROOMISH | HAS_TAILLOW: // both are in party if (gLocalTime.hours > 3 && gLocalTime.hours < 11) { - if (r0 < 6 || (r1 & 1)) - return sRouletteTables[sRoulette->tableId].var02 / 2; + if (ballNum < BALLS_PER_ROUND || (rand & 1)) + return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; else return 1; } - else if ((r1 & 1) && r0 > 6) + else if ((rand & 1) && ballNum > BALLS_PER_ROUND) { - return sRouletteTables[sRoulette->tableId].var02 / 4; + return sRouletteTables[sRoulette->tableId].randDistanceLow / 4; } else { - return sRouletteTables[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; } break; case 0: @@ -1536,28 +1576,28 @@ static u8 sub_814118C(u16 r0, u16 r1) // neither is in party if (gLocalTime.hours > 3 && gLocalTime.hours < 10) { - if (!(r1 & 3)) + if (!(rand & 3)) return 1; else - return sRouletteTables[sRoulette->tableId].var02 / 2; + return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; } - else if (!(r1 & 3)) + else if (!(rand & 3)) { - if (r0 > 12) - return sRouletteTables[sRoulette->tableId].var02 / 2; + if (ballNum > BALLS_PER_ROUND * 2) + return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; else - return sRouletteTables[sRoulette->tableId].var02; + return sRouletteTables[sRoulette->tableId].randDistanceLow; } - else if (r1 & 0x8000) + else if (rand & (1 << 15)) { - if (r0 > 12) - return sRouletteTables[sRoulette->tableId].var02; + if (ballNum > BALLS_PER_ROUND * 2) + return sRouletteTables[sRoulette->tableId].randDistanceLow; else - return sRouletteTables[sRoulette->tableId].var01; + return sRouletteTables[sRoulette->tableId].randDistanceHigh; } else { - return sRouletteTables[sRoulette->tableId].var01 * 2; + return sRouletteTables[sRoulette->tableId].randDistanceHigh * 2; } break; } @@ -1565,43 +1605,44 @@ static u8 sub_814118C(u16 r0, u16 r1) static void Task_InitBallRoll(u8 taskId) { - u8 randf; - s8 randfinal; - s8 r5; - u16 g = 0; + u8 randTravelMod; + s8 randTravelDist; + s8 startAngleId; + u16 travelDist = 0; u16 rand; u16 randmod; - u16 angles[4] = {0, 180, 90, 270}; // angles in 90 degree steps + u16 startAngles[4] = {0, 180, 90, 270}; // possible angles to start ball from rand = Random(); randmod = rand % 100; sRoulette->curBallSpriteId = gTasks[taskId].tBallNum; - sRoulette->ballState = sRoulette->hitSlot = sRoulette->var7F = BALL_STATE_ROLLING; - randf = sub_814118C(gTasks[taskId].data[8], rand); - randfinal = (rand % randf) - (randf / 2); + // BALL_STATE_ROLLING set below + sRoulette->ballState = sRoulette->hitSlot = sRoulette->stuckHitSlot = 0; + randTravelMod = GetRandomForBallTravelDistance(gTasks[taskId].tTotalBallNum, rand); + randTravelDist = (rand % randTravelMod) - (randTravelMod / 2); if (gLocalTime.hours < 13) - r5 = 0; + startAngleId = 0; else - r5 = 1; + startAngleId = 1; if (randmod < 80) - r5 *= 2; + startAngleId *= 2; else - r5 = (1 - r5) * 2; + startAngleId = (1 - startAngleId) * 2; - sRoulette->var80 = g = sRouletteTables[sRoulette->tableId].var1A + randfinal; + sRoulette->ballTravelDist = travelDist = sRouletteTables[sRoulette->tableId].baseTravelDist + randTravelDist; - g = S16TOPOSFLOAT(g) / 5.0f; - sRoulette->var82 = g * 3; - sRoulette->var86 = sRoulette->var84 = g; + travelDist = S16TOPOSFLOAT(travelDist) / 5.0f; + sRoulette->ballTravelDistFast = travelDist * 3; + sRoulette->ballTravelDistSlow = sRoulette->ballTravelDistMed = travelDist; - sRoulette->var88 = S16TOPOSFLOAT(angles[(rand & 1) + r5]); - sRoulette->var8C = S16TOPOSFLOAT(sRouletteTables[sRoulette->tableId].var18); - sRoulette->var90 = ((sRoulette->var8C * 0.5f) - sRoulette->var8C) / S16TOPOSFLOAT(sRoulette->var82); - sRoulette->var94 = 68.0f; - sRoulette->var9C = 0.0f; - sRoulette->var98 = -(8.0f / S16TOPOSFLOAT(sRoulette->var82)); + sRoulette->ballAngle = S16TOPOSFLOAT(startAngles[(rand & 1) + startAngleId]); + sRoulette->ballAngleSpeed = S16TOPOSFLOAT(sRouletteTables[sRoulette->tableId].ballSpeed); + sRoulette->ballAngleAccel = ((sRoulette->ballAngleSpeed * 0.5f) - sRoulette->ballAngleSpeed) / S16TOPOSFLOAT(sRoulette->ballTravelDistFast); + sRoulette->ballDistToCenter = 68.0f; + sRoulette->ballFallAccel = 0.0f; + sRoulette->ballFallSpeed = -(8.0f / S16TOPOSFLOAT(sRoulette->ballTravelDistFast)); sRoulette->varA0 = 36.0f; gTasks[taskId].func = Task_RollBall; } @@ -1609,10 +1650,10 @@ static void Task_InitBallRoll(u8 taskId) static void Task_RollBall(u8 taskId) { sRoulette->ballRolling = TRUE; - sRoulette->var38 = &gSprites[sRoulette->spriteIds[sRoulette->curBallSpriteId]]; - sRoulette->var38->callback = sub_81446AC; + sRoulette->ball = &gSprites[sRoulette->spriteIds[sRoulette->curBallSpriteId]]; + sRoulette->ball->callback = SpriteCB_RollBall_Start; gTasks[taskId].tBallNum++; - gTasks[taskId].data[8]++; + gTasks[taskId].tTotalBallNum++; SetBallCounterNumLeft(BALLS_PER_ROUND - gTasks[taskId].tBallNum); m4aSongNumStart(SE_TAMAKORO); gTasks[taskId].func = Task_RecordBallHit; @@ -1663,8 +1704,11 @@ static void Task_SlideGridOnscreen(u8 taskId) { if (gTasks[taskId].data[1]-- > 0) { + // Slide wheel over if (gTasks[taskId].data[1] > 2) gSpriteCoordOffsetX -= 2; + + // Slide grid over if ((sRoulette->gridX -= 4) == 104) gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = SpriteCB_GridSquare; } @@ -1714,7 +1758,7 @@ static void Task_TryIncrementWins(u8 taskId) u32 wins = GetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS); if (wins < ++gTasks[taskId].tConsecutiveWins) SetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS, gTasks[taskId].tConsecutiveWins); - StartTaskAfterDelayOrInput(taskId, Task_PrintPayout, 0xFFFF, A_BUTTON | B_BUTTON); + StartTaskAfterDelayOrInput(taskId, Task_PrintPayout, NO_DELAY, A_BUTTON | B_BUTTON); } break; case FALSE: @@ -1722,7 +1766,7 @@ static void Task_TryIncrementWins(u8 taskId) if (!IsSEPlaying()) { gTasks[taskId].tConsecutiveWins = 0; - StartTaskAfterDelayOrInput(taskId, Task_EndTurn, 0xFFFF, A_BUTTON | B_BUTTON); + StartTaskAfterDelayOrInput(taskId, Task_EndTurn, NO_DELAY, A_BUTTON | B_BUTTON); } break; } @@ -1790,7 +1834,7 @@ static void Task_GivePayout(u8 taskId) break; } if (gTasks[taskId].tPayout == 0) - StartTaskAfterDelayOrInput(taskId, Task_EndTurn, 0xFFFF, A_BUTTON | B_BUTTON); + StartTaskAfterDelayOrInput(taskId, Task_EndTurn, NO_DELAY, A_BUTTON | B_BUTTON); } static void Task_PrintPayout(u8 taskId) @@ -1810,8 +1854,8 @@ static void Task_PrintPayout(u8 taskId) static void Task_EndTurn(u8 taskId) { sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); - sRoulette->flashUtil.var04[13].var00_7 = sRoulette->flashUtil.var04[14].var00_7 = sRoulette->flashUtil.var04[15].var00_7 = 0; - gSprites[sRoulette->spriteIds[SPR_BOARD_ICONS + sGridSelections[gTasks[taskId].tWinningSquare].var00]].invisible = TRUE; + sRoulette->flashUtil.var04[13].active = sRoulette->flashUtil.var04[14].active = sRoulette->flashUtil.var04[15].active = FALSE; + gSprites[sRoulette->spriteIds[SPR_WHEEL_ICONS + sGridSelections[gTasks[taskId].tWinningSquare].spriteIdOffset]].invisible = TRUE; gTasks[taskId].func = Task_TryPrintEndTurnMsg; } @@ -1836,7 +1880,7 @@ static void Task_TryPrintEndTurnMsg(u8 taskId) DrawStdWindowFrame(sTextWindowId, FALSE); AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(sTextWindowId, 3); - StartTaskAfterDelayOrInput(taskId, Task_ClearBoard, 0xFFFF, A_BUTTON | B_BUTTON); + StartTaskAfterDelayOrInput(taskId, Task_ClearBoard, NO_DELAY, A_BUTTON | B_BUTTON); } else if (gTasks[taskId].tCoins == MAX_COINS) { @@ -1844,7 +1888,7 @@ static void Task_TryPrintEndTurnMsg(u8 taskId) DrawStdWindowFrame(sTextWindowId, FALSE); AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(sTextWindowId, 3); - StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, 0xFFFF, A_BUTTON | B_BUTTON); + StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, NO_DELAY, A_BUTTON | B_BUTTON); } else { @@ -1867,15 +1911,15 @@ static void Task_ClearBoard(u8 taskId) u8 i = 0; gTasks[taskId].tBallNum = 0; - sub_8141FF4(taskId); + ResetBallDataForNewSpin(taskId); ResetHits(); - HideBoardBalls(); + HideWheelBalls(); DrawGridBackground(SELECTION_NONE); SetBallCounterNumLeft(BALLS_PER_ROUND); for (i = 0; i < NUM_ROULETTE_SLOTS; i++) { - gSprites[sRoulette->spriteIds[i + SPR_BOARD_ICONS]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_WHEEL_ICONS]].invisible = FALSE; } if (gTasks[taskId].tCoins == MAX_COINS) @@ -1883,7 +1927,7 @@ static void Task_ClearBoard(u8 taskId) DrawStdWindowFrame(sTextWindowId, FALSE); AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(sTextWindowId, 3); - StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, 0xFFFF, A_BUTTON | B_BUTTON); + StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, NO_DELAY, A_BUTTON | B_BUTTON); } else { @@ -1937,7 +1981,7 @@ static void Task_WaitForNextTask(u8 taskId) sRoulette->taskWaitKey = 0; sRoulette->taskWaitDelay = 0; } - if (sRoulette->taskWaitDelay != 0xFFFF) + if (sRoulette->taskWaitDelay != NO_DELAY) sRoulette->taskWaitDelay--; } @@ -1948,14 +1992,14 @@ static void StartTaskAfterDelayOrInput(u8 taskId, TaskFunc task, u16 delay, u16 task = sRoulette->prevTask; sRoulette->nextTask = task; sRoulette->taskWaitDelay = delay; - if (delay == 0xFFFF && key == 0) + if (delay == NO_DELAY && key == 0) sRoulette->taskWaitKey = 0xFFFF; else sRoulette->taskWaitKey = key; gTasks[taskId].func = Task_WaitForNextTask; } -static void sub_8141FF4(u8 taskId) +static void ResetBallDataForNewSpin(u8 taskId) { u8 i = 0; sRoulette->unk0 = FALSE; @@ -2099,16 +2143,16 @@ static void FlashSelectionOnWheel(u8 selectionId) // The specific color of the poke it references doesn't matter, because the icons themelves all share a palette // So it just uses the first sprite ID of each case COL_WYNAUT: - var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_ORANGE_WYNAUT]].oam.paletteNum * 16; + var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_WYNAUT]].oam.paletteNum * 16; break; case COL_AZURILL: - var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_GREEN_AZURILL]].oam.paletteNum * 16; + var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_GREEN_AZURILL]].oam.paletteNum * 16; break; case COL_SKITTY: - var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_PURPLE_SKITTY]].oam.paletteNum * 16; + var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_PURPLE_SKITTY]].oam.paletteNum * 16; break; case COL_MAKUHITA: - var3 = gSprites[sRoulette->spriteIds[SPR_BOARD_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16; + var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16; break; } if (numSelected == 1) @@ -2154,16 +2198,17 @@ static void FlashSelectionOnWheel(u8 selectionId) static void DrawGridBackground(u8 selectionId) { - vu8 i; - vu8 z; - vu16 var1; - vu16 var2; - vu8 var0; - u8 v[5]; - u8 l; + vu8 i, j; + vu16 x, y; + vu8 tilemapOffset; + u8 selectionIds[NUM_BOARD_POKES >= NUM_BOARD_COLORS ? NUM_BOARD_POKES + 1 : NUM_BOARD_COLORS + 1]; + u8 numSquares; sRoulette->updateGridHighlight = TRUE; ShowHideGridIcons(FALSE, 0); SetTilemapRect(sRoulette->tilemapBuffers[2], sRoulette->gridTilemap, 14, 7, 16, 13); + + // Highlight selected square + // (just buffers the highlight, it's actually drawn in VBlankCB_Roulette) switch (selectionId) { case SELECTION_NONE: @@ -2172,36 +2217,35 @@ static void DrawGridBackground(u8 selectionId) case COL_AZURILL: case COL_SKITTY: case COL_MAKUHITA: - l = 4; - for (i = 0; i < l; i++) - { - v[i] = i * ROW_ORANGE + selectionId; - } + numSquares = NUM_BOARD_COLORS + 1; // For each poke column, 3 colors and a header + for (i = 0; i < numSquares; i++) + selectionIds[i] = i * ROW_ORANGE + selectionId; break; case ROW_ORANGE: case ROW_GREEN: case ROW_PURPLE: - l = 5; - for (i = 0; i < l; i++) - { - v[i] = i + selectionId; - } + numSquares = NUM_BOARD_POKES + 1; // For each color row, 4 pokes and a header + for (i = 0; i < numSquares; i++) + selectionIds[i] = i + selectionId; break; // Individual square default: - l = 1; - v[0] = selectionId; + numSquares = 1; + selectionIds[0] = selectionId; } - for (i = 0; i < l; i++) + for (i = 0; i < numSquares; i++) { - var0 = sGridSelections[v[i]].var06; - var1 = sGridSelections[v[i]].x; - for (z = 0; z < 3; z++) + tilemapOffset = sGridSelections[selectionIds[i]].tilemapOffset; + x = sGridSelections[selectionIds[i]].x; + + // Grid square highlight is drawn in 9 segments, starting from the top left of the square + // Each iteration of this loop draws 3 segments to form a single horizontal segment + for (j = 0; j < 3; j++) { - var2 = (sGridSelections[v[i]].y + z) * 32; - sRoulette->tilemapBuffers[2][var1 + var2 + 0] = sRoulette->gridTilemap[(var0 + z) * 3 + 208]; - sRoulette->tilemapBuffers[2][var1 + var2 + 1] = sRoulette->gridTilemap[(var0 + z) * 3 + 209]; - sRoulette->tilemapBuffers[2][var1 + var2 + 2] = sRoulette->gridTilemap[(var0 + z) * 3 + 210]; + y = (sGridSelections[selectionIds[i]].y + j) * 32; + sRoulette->tilemapBuffers[2][x + y + 0] = sRoulette->gridTilemap[(tilemapOffset + j) * 3 + 208 + 0]; + sRoulette->tilemapBuffers[2][x + y + 1] = sRoulette->gridTilemap[(tilemapOffset + j) * 3 + 208 + 1]; + sRoulette->tilemapBuffers[2][x + y + 2] = sRoulette->gridTilemap[(tilemapOffset + j) * 3 + 208 + 2]; } } } @@ -2275,7 +2319,7 @@ static const u32 sBall_Gfx[] = INCBIN_U32("graphics/roulette/ball.4bpp.lz"); static const u32 sBallCounter_Gfx[] = INCBIN_U32("graphics/roulette/ball_counter.4bpp.lz"); static const u32 sShroomishTaillow_Gfx[] = INCBIN_U32("graphics/roulette/roulette_tilt.4bpp.lz"); static const u32 sGridIcons_Gfx[] = INCBIN_U32("graphics/roulette/grid_icons.4bpp.lz"); -static const u32 sBoardIcons_Gfx[] = INCBIN_U32("graphics/roulette/board_icons.4bpp.lz"); +static const u32 sWheelIcons_Gfx[] = INCBIN_U32("graphics/roulette/wheel_icons.4bpp.lz"); static const u32 sShadow_Gfx[] = INCBIN_U32("graphics/roulette/shadow.4bpp.lz"); static const u32 sCursor_Gfx[] = INCBIN_U32("graphics/roulette/cursor.4bpp.lz"); @@ -2284,7 +2328,7 @@ static const struct SpritePalette sSpritePalettes[] = { .data = sShadow_Pal, .tag = PALTAG_SHADOW }, { .data = sBall_Pal, .tag = PALTAG_BALL }, { .data = sBallCounter_Pal, .tag = PALTAG_BALL_COUNTER }, - { .data = sCursor_Pal, .tag = 4 }, + { .data = sCursor_Pal, .tag = PALTAG_CURSOR }, { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, { .data = sShroomish_Pal, .tag = PALTAG_SHROOMISH }, { .data = sTaillow_Pal, .tag = PALTAG_TAILLOW }, @@ -2314,7 +2358,7 @@ static const struct OamData sOam_GridIcon = .priority = 1, }; -static const struct OamData sOam_BoardIcon = +static const struct OamData sOam_WheelIcon = { .y = 60, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -2345,14 +2389,14 @@ static const union AffineAnimCmd *const sAffineAnims_Unused2[] = sAffineAnim_Unused2 }; -static const struct CompressedSpriteSheet sSpriteSheet_BoardIcons = +static const struct CompressedSpriteSheet sSpriteSheet_WheelIcons = { - .data = sBoardIcons_Gfx, + .data = sWheelIcons_Gfx, .size = 0xC00, - .tag = GFXTAG_BOARD_ICONS + .tag = GFXTAG_WHEEL_ICONS }; -static const union AnimCmd sAnim_BoardIcons[] = +static const union AnimCmd sAnim_WheelIcons[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_FRAME(32, 0), @@ -2369,64 +2413,64 @@ static const union AnimCmd sAnim_BoardIcons[] = ANIMCMD_END }; -static const union AnimCmd *const sAnim_BoardIcon_OrangeWynaut[] = +static const union AnimCmd *const sAnim_WheelIcon_OrangeWynaut[] = { - &sAnim_BoardIcons[0] + &sAnim_WheelIcons[0] }; -static const union AnimCmd *const sAnim_BoardIcon_GreenAzurill[] = +static const union AnimCmd *const sAnim_WheelIcon_GreenAzurill[] = { - &sAnim_BoardIcons[1] + &sAnim_WheelIcons[1] }; -static const union AnimCmd *const sAnim_BoardIcon_PurpleSkitty[] = +static const union AnimCmd *const sAnim_WheelIcon_PurpleSkitty[] = { - &sAnim_BoardIcons[2] + &sAnim_WheelIcons[2] }; -static const union AnimCmd *const sAnim_BoardIcon_OrangeMakuhita[] = +static const union AnimCmd *const sAnim_WheelIcon_OrangeMakuhita[] = { - &sAnim_BoardIcons[3] + &sAnim_WheelIcons[3] }; -static const union AnimCmd *const sAnim_BoardIcon_GreenWynaut[] = +static const union AnimCmd *const sAnim_WheelIcon_GreenWynaut[] = { - &sAnim_BoardIcons[4] + &sAnim_WheelIcons[4] }; -static const union AnimCmd *const sAnim_BoardIcon_PurpleAzurill[] = +static const union AnimCmd *const sAnim_WheelIcon_PurpleAzurill[] = { - &sAnim_BoardIcons[5] + &sAnim_WheelIcons[5] }; -static const union AnimCmd *const sAnim_BoardIcon_OrangeSkitty[] = +static const union AnimCmd *const sAnim_WheelIcon_OrangeSkitty[] = { - &sAnim_BoardIcons[6] + &sAnim_WheelIcons[6] }; -static const union AnimCmd *const sAnim_BoardIcon_GreenMakuhita[] = +static const union AnimCmd *const sAnim_WheelIcon_GreenMakuhita[] = { - &sAnim_BoardIcons[7] + &sAnim_WheelIcons[7] }; -static const union AnimCmd *const sAnim_BoardIcon_PurpleWynaut[] = +static const union AnimCmd *const sAnim_WheelIcon_PurpleWynaut[] = { - &sAnim_BoardIcons[8] + &sAnim_WheelIcons[8] }; -static const union AnimCmd *const sAnim_BoardIcon_OrangeAzurill[] = +static const union AnimCmd *const sAnim_WheelIcon_OrangeAzurill[] = { - &sAnim_BoardIcons[9] + &sAnim_WheelIcons[9] }; -static const union AnimCmd *const sAnim_BoardIcon_GreenSkitty[] = +static const union AnimCmd *const sAnim_WheelIcon_GreenSkitty[] = { - &sAnim_BoardIcons[10] + &sAnim_WheelIcons[10] }; -static const union AnimCmd *const sAnim_BoardIcon_PurpleMakuhita[] = +static const union AnimCmd *const sAnim_WheelIcon_PurpleMakuhita[] = { - &sAnim_BoardIcons[11] + &sAnim_WheelIcons[11] }; static const struct CompressedSpriteSheet sSpriteSheet_Headers = @@ -2436,7 +2480,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_Headers = .tag = GFXTAG_HEADERS }; -static const struct CompressedSpriteSheet sSpriteSheet_PokeIcons = +static const struct CompressedSpriteSheet sSpriteSheet_GridIcons = { .data = sGridIcons_Gfx, .size = 0x400, @@ -2634,117 +2678,117 @@ static const struct SpriteTemplate sSpriteTemplate_GridIcons[NUM_BOARD_POKES] = } }; -// Board icons are listed clockwise starting from 1 oclock on the roulette board (with pokeball upside right) +// Wheel icons are listed clockwise starting from 1 oclock on the roulette wheel (with pokeball upside right) // They go Wynaut -> Azurill -> Skitty -> Makuhita, and Orange -> Green -> Purple -static const struct SpriteTemplate sSpriteTemplates_BoardIcons[NUM_ROULETTE_SLOTS] = +static const struct SpriteTemplate sSpriteTemplates_WheelIcons[NUM_ROULETTE_SLOTS] = { { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_WYNAUT, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_OrangeWynaut, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_OrangeWynaut, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_AZURILL, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_GreenAzurill, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_GreenAzurill, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_SKITTY, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_PurpleSkitty, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_PurpleSkitty, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_MAKUHITA, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_OrangeMakuhita, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_OrangeMakuhita, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_WYNAUT, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_GreenWynaut, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_GreenWynaut, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_AZURILL, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_PurpleAzurill, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_PurpleAzurill, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_SKITTY, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_OrangeSkitty, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_OrangeSkitty, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_MAKUHITA, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_GreenMakuhita, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_GreenMakuhita, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_WYNAUT, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_PurpleWynaut, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_PurpleWynaut, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_AZURILL, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_OrangeAzurill, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_OrangeAzurill, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_SKITTY, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_GreenSkitty, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_GreenSkitty, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon }, { - .tileTag = GFXTAG_BOARD_ICONS, + .tileTag = GFXTAG_WHEEL_ICONS, .paletteTag = PALTAG_MAKUHITA, - .oam = &sOam_BoardIcon, - .anims = sAnim_BoardIcon_PurpleMakuhita, + .oam = &sOam_WheelIcon, + .anims = sAnim_WheelIcon_PurpleMakuhita, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardIcon + .callback = SpriteCB_WheelIcon } }; @@ -2814,25 +2858,26 @@ static const struct CompressedSpriteSheet sSpriteSheets_Interface[] = {} }; -static const union AnimCmd gSpriteAnim_85B7780[] = +static const union AnimCmd sAnim_CreditDigit[] = { - ANIMCMD_FRAME(0, 0), - ANIMCMD_FRAME(2, 0), - ANIMCMD_FRAME(4, 0), - ANIMCMD_FRAME(6, 0), - ANIMCMD_FRAME(8, 0), - ANIMCMD_FRAME(10, 0), - ANIMCMD_FRAME(12, 0), - ANIMCMD_FRAME(14, 0), - ANIMCMD_FRAME(16, 0), - ANIMCMD_FRAME(18, 0), + ANIMCMD_FRAME(0, 0), // 0 + ANIMCMD_FRAME(2, 0), // 1 + ANIMCMD_FRAME(4, 0), // 2 + ANIMCMD_FRAME(6, 0), // 3 + ANIMCMD_FRAME(8, 0), // 4 + ANIMCMD_FRAME(10, 0), // 5 + ANIMCMD_FRAME(12, 0), // 6 + ANIMCMD_FRAME(14, 0), // 7 + ANIMCMD_FRAME(16, 0), // 8 + ANIMCMD_FRAME(18, 0), // 9 // BUG: Animation not terminated properly + // Doesn't matter in practice, the frames are set directly and not looped //ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B77A8[] = +static const union AnimCmd *const sAnims_CreditDigit[] = { - gSpriteAnim_85B7780 + sAnim_CreditDigit }; static const union AnimCmd sAnim_Multiplier[] = @@ -2881,7 +2926,7 @@ static const struct SpriteTemplate sSpriteTemplate_CreditDigit = .tileTag = GFXTAG_CREDIT_DIGIT, .paletteTag = PALTAG_INTERFACE, .oam = &sOam_CreditDigit, - .anims = gSpriteAnimTable_85B77A8, + .anims = sAnims_CreditDigit, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -2936,7 +2981,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_Ball = { .tag = GFXTAG_BALL }; -static const union AnimCmd gSpriteAnim_85B786C[] = +static const union AnimCmd sAnim_Ball_RollFast[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(4, 5), @@ -2945,7 +2990,7 @@ static const union AnimCmd gSpriteAnim_85B786C[] = ANIMCMD_JUMP(0) }; -static const union AnimCmd gSpriteAnim_85B7880[] = +static const union AnimCmd sAnim_Ball_RollMedium[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(4, 10), @@ -2954,7 +2999,7 @@ static const union AnimCmd gSpriteAnim_85B7880[] = ANIMCMD_JUMP(0) }; -static const union AnimCmd gSpriteAnim_85B7894[] = +static const union AnimCmd sAnim_Ball_RollSlow[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(4, 15), @@ -2963,7 +3008,7 @@ static const union AnimCmd gSpriteAnim_85B7894[] = ANIMCMD_JUMP(0) }; -static const union AnimCmd gSpriteAnim_85B78A8[] = +static const union AnimCmd sAnim_Ball_StopOnFrame1[] = { ANIMCMD_FRAME(4, 2), ANIMCMD_FRAME(8, 5), @@ -2972,7 +3017,7 @@ static const union AnimCmd gSpriteAnim_85B78A8[] = ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B78BC[] = +static const union AnimCmd sAnim_Ball_StopOnFrame3[] = { ANIMCMD_FRAME(4, 2), ANIMCMD_FRAME(0, 4), @@ -2982,7 +3027,7 @@ static const union AnimCmd gSpriteAnim_85B78BC[] = ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B78D4[] = +static const union AnimCmd sAnim_Ball_StopOnFrame4[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(4, 5), @@ -2991,13 +3036,13 @@ static const union AnimCmd gSpriteAnim_85B78D4[] = ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B78E8[] = +static const union AnimCmd sAnim_Ball_Still[] = { ANIMCMD_FRAME(12, 0), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B78F0[] = +static const union AnimCmd sAnim_Ball_StopOnFrame2[] = { ANIMCMD_FRAME(8, 2), ANIMCMD_FRAME(4, 5), @@ -3008,15 +3053,15 @@ static const union AnimCmd gSpriteAnim_85B78F0[] = static const union AnimCmd *const sAnims_Ball[] = { - gSpriteAnim_85B786C, - gSpriteAnim_85B7880, - gSpriteAnim_85B7894, - gSpriteAnim_85B78A8, - gSpriteAnim_85B78F0, - gSpriteAnim_85B78BC, - gSpriteAnim_85B78D4, - gSpriteAnim_85B78D4, - gSpriteAnim_85B78E8 + sAnim_Ball_RollFast, + sAnim_Ball_RollMedium, + sAnim_Ball_RollSlow, + sAnim_Ball_StopOnFrame1, + sAnim_Ball_StopOnFrame2, + sAnim_Ball_StopOnFrame3, + sAnim_Ball_StopOnFrame4, + sAnim_Ball_StopOnFrame4, + sAnim_Ball_Still }; static const struct SpriteTemplate sSpriteTemplate_Ball = @@ -3030,7 +3075,7 @@ static const struct SpriteTemplate sSpriteTemplate_Ball = .callback = SpriteCallbackDummy }; -static const struct OamData sOam_BoardCenter = +static const struct OamData sOam_WheelCenter = { .y = 81, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -3040,22 +3085,22 @@ static const struct OamData sOam_BoardCenter = .priority = 2, }; -static const struct CompressedSpriteSheet sSpriteSheet_BoardCenter = +static const struct CompressedSpriteSheet sSpriteSheet_WheelCenter = { .data = gRouletteCenter_Gfx, .size = 0x800, - .tag = GFXTAG_BOARD_CENTER + .tag = GFXTAG_WHEEL_CENTER }; -static const struct SpriteTemplate sSpriteTemplate_BoardCenter = +static const struct SpriteTemplate sSpriteTemplate_WheelCenter = { - .tileTag = GFXTAG_BOARD_CENTER, + .tileTag = GFXTAG_WHEEL_CENTER, .paletteTag = PALTAG_BALL, - .oam = &sOam_BoardCenter, + .oam = &sOam_WheelCenter, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BoardCenter + .callback = SpriteCB_WheelCenter }; static const struct OamData sOam_Shroomish = @@ -3094,40 +3139,40 @@ static const union AnimCmd sAnim_Shroomish[] = ANIMCMD_JUMP(2) }; -static const union AnimCmd gSpriteAnim_85B799C[] = +static const union AnimCmd sAnim_Taillow_WingDown_Left[] = { ANIMCMD_FRAME(80, 10), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B79A4[] = +static const union AnimCmd sAnim_Taillow_WingDown_Right[] = { ANIMCMD_FRAME(80, 10, .hFlip = TRUE), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B79AC[] = +static const union AnimCmd sAnim_Taillow_FlapSlow_Left[] = { ANIMCMD_FRAME(80, 20), ANIMCMD_FRAME(96, 20), ANIMCMD_JUMP(0) }; -static const union AnimCmd gSpriteAnim_85B79B8[] = +static const union AnimCmd sAnim_Taillow_FlapSlow_Right[] = { ANIMCMD_FRAME(80, 20, .hFlip = TRUE), ANIMCMD_FRAME(96, 20, .hFlip = TRUE), ANIMCMD_JUMP(0) }; -static const union AnimCmd gSpriteAnim_85B79C4[] = +static const union AnimCmd sAnim_Taillow_FlapFast_Left[] = { ANIMCMD_FRAME(80, 10), ANIMCMD_FRAME(96, 10), ANIMCMD_JUMP(0) }; -static const union AnimCmd gSpriteAnim_85B79D0[] = +static const union AnimCmd sAnim_Taillow_FlapFast_Right[] = { ANIMCMD_FRAME(80, 10, .hFlip = TRUE), ANIMCMD_FRAME(96, 10, .hFlip = TRUE), @@ -3141,12 +3186,12 @@ static const union AnimCmd *const sAnims_Shroomish[] = static const union AnimCmd *const sAnims_Taillow[] = { - gSpriteAnim_85B799C, - gSpriteAnim_85B79A4, - gSpriteAnim_85B79AC, - gSpriteAnim_85B79B8, - gSpriteAnim_85B79C4, - gSpriteAnim_85B79D0 + sAnim_Taillow_WingDown_Left, // While gliding in + sAnim_Taillow_WingDown_Right, + sAnim_Taillow_FlapSlow_Left, // While carrying ball + sAnim_Taillow_FlapSlow_Right, + sAnim_Taillow_FlapFast_Left, // While flying off + sAnim_Taillow_FlapFast_Right }; static const struct SpriteTemplate sSpriteTemplate_Shroomish = @@ -3171,7 +3216,7 @@ static const struct SpriteTemplate sSpriteTemplate_Taillow = .callback = SpriteCB_Taillow }; -static const struct OamData gOamData_85B7A28 = +static const struct OamData sOam_ShroomishBallShadow = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -3180,7 +3225,7 @@ static const struct OamData gOamData_85B7A28 = .priority = 2, }; -static const struct OamData gOamData_85B7A30 = +static const struct OamData sOam_ShroomishShadow = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -3205,7 +3250,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_Shadow = .tag = GFXTAG_SHADOW }; -static const union AffineAnimCmd gSpriteAffineAnim_85B7A48[] = +static const union AffineAnimCmd sAffineAnim_Unused3[] = { AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), AFFINEANIMCMD_FRAME(2, 2, 0, 60), @@ -3221,9 +3266,9 @@ static const union AffineAnimCmd sAffineAnim_TaillowShadow[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7A88[] = +static const union AffineAnimCmd *const sAffineAnims_Unused3[] = { - gSpriteAffineAnim_85B7A48 + sAffineAnim_Unused3 }; static const union AffineAnimCmd *const sAffineAnims_TaillowShadow[] = @@ -3231,58 +3276,60 @@ static const union AffineAnimCmd *const sAffineAnims_TaillowShadow[] = sAffineAnim_TaillowShadow }; -static const union AffineAnimCmd gSpriteAffineAnim_85B7A90[] = +static const union AffineAnimCmd sAffineAnim_Unused4[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7AA0[] = +static const union AffineAnimCmd *const sAffineAnims_Unused4[] = { - gSpriteAffineAnim_85B7A90 + sAffineAnim_Unused4 }; -static const union AnimCmd gSpriteAnim_85B7AA4[] = +static const union AnimCmd sAnim_ShroomishBallShadow[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_85B7AAC[] = +static const union AnimCmd sAnim_UnstickMonShadow[] = { ANIMCMD_FRAME(4, 0), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_85B7AB4[] = +static const union AnimCmd *const sAnims_ShroomishBallShadow[] = { - gSpriteAnim_85B7AA4 + sAnim_ShroomishBallShadow }; -static const union AnimCmd *const gSpriteAnimTable_85B7AB8[] = +static const union AnimCmd *const sAnims_UnstickMonShadow[] = { - gSpriteAnim_85B7AAC + sAnim_UnstickMonShadow }; static const struct SpriteTemplate sSpriteTemplate_ShroomishShadow[] = { + // Ball's shadow as it flies up { .tileTag = GFXTAG_SHADOW, .paletteTag = PALTAG_SHADOW, - .oam = &gOamData_85B7A28, - .anims = gSpriteAnimTable_85B7AB4, + .oam = &sOam_ShroomishBallShadow, + .anims = sAnims_ShroomishBallShadow, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, + // Shroomish's Shadow { .tileTag = GFXTAG_SHADOW, .paletteTag = PALTAG_SHADOW, - .oam = &gOamData_85B7A30, - .anims = gSpriteAnimTable_85B7AB8, + .oam = &sOam_ShroomishShadow, + .anims = sAnims_UnstickMonShadow, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8144E60 + .callback = SpriteCB_Shroomish } }; @@ -3291,7 +3338,7 @@ static const struct SpriteTemplate sSpriteTemplate_TaillowShadow = .tileTag = GFXTAG_SHADOW, .paletteTag = PALTAG_SHADOW, .oam = &sOam_TaillowShadow, - .anims = gSpriteAnimTable_85B7AB8, + .anims = sAnims_UnstickMonShadow, .images = NULL, .affineAnims = sAffineAnims_TaillowShadow, .callback = SpriteCB_Taillow @@ -3349,7 +3396,7 @@ static void Task_PrintMinBet(u8 taskId) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { - u32 minBet = sTableMinBets[GET_TABLE_ID(gSpecialVar_0x8004)]; + u32 minBet = sTableMinBets[GET_MIN_BET_ID(gSpecialVar_0x8004)]; ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX); DrawStdWindowFrame(0, FALSE); @@ -3363,7 +3410,7 @@ static void Task_PrintRouletteEntryMsg(u8 taskId) { s32 minBet; PrintCoinsString(gTasks[taskId].tCoins); - minBet = sTableMinBets[GET_TABLE_ID(gSpecialVar_0x8004)]; + minBet = sTableMinBets[GET_MIN_BET_ID(gSpecialVar_0x8004)]; ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1); if (gTasks[taskId].tCoins >= minBet) @@ -3402,7 +3449,6 @@ static void Task_PrintRouletteEntryMsg(u8 taskId) void PlayRoulette(void) { u8 taskId; - ScriptContext2_Enable(); ShowCoinsWindow(GetCoins(), 1, 1); taskId = CreateTask(Task_PrintRouletteEntryMsg, 0); @@ -3429,19 +3475,19 @@ static void LoadOrFreeMiscSpritePalettesAndSheets(bool8 free) } } -static u8 CreateBoardIconSprite(const struct SpriteTemplate *r0, u8 r1, u16 *r2) +static u8 CreateWheelIconSprite(const struct SpriteTemplate *template, u8 r1, u16 *angle) { u16 temp; - u8 spriteId = CreateSprite(r0, 116, 80, r0->oam->y); - gSprites[spriteId].data[0] = *r2; + u8 spriteId = CreateSprite(template, 116, 80, template->oam->y); + gSprites[spriteId].data[0] = *angle; gSprites[spriteId].data[1] = r1; gSprites[spriteId].coordOffsetEnabled = TRUE; gSprites[spriteId].animPaused = TRUE; gSprites[spriteId].affineAnimPaused = TRUE; - temp = *r2; - *r2 += 30; - if (*r2 >= 360) - *r2 = temp - 330; + temp = *angle; + *angle += DEGREES_PER_SLOT; + if (*angle >= 360) + *angle = temp - (360 - DEGREES_PER_SLOT); return spriteId; } @@ -3455,21 +3501,21 @@ static void CreateGridSprites(void) s.size = sSpriteSheet_Headers.size; s.tag = sSpriteSheet_Headers.tag; LoadSpriteSheet(&s); - LZ77UnCompWram(sSpriteSheet_PokeIcons.data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheet_GridIcons.data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = sSpriteSheet_PokeIcons.size; - s.tag = sSpriteSheet_PokeIcons.tag; + s.size = sSpriteSheet_GridIcons.size; + s.tag = sSpriteSheet_GridIcons.tag; LoadSpriteSheet(&s); for (i = 0; i < NUM_BOARD_COLORS; i++) { - u8 o = i * 24; + u8 y = i * 24; for (j = 0; j < NUM_BOARD_POKES; j++) { - spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_GRID_ICONS + j] = CreateSprite(&sSpriteTemplate_GridIcons[j], (j * 24) + 148, o + 92, 30); + spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_GRID_ICONS + j] = CreateSprite(&sSpriteTemplate_GridIcons[j], (j * 24) + 148, y + 92, 30); gSprites[spriteId].animPaused = TRUE; - o += 24; - if (o >= 72) - o = 0; + y += 24; + if (y >= 72) + y = 0; } } for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_PokeHeaders); i++) @@ -3479,7 +3525,7 @@ static void CreateGridSprites(void) } for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_ColorHeaders); i++) { - spriteId = sRoulette->spriteIds[i + SPR_COLOR_HEADER_1] = CreateSprite(&sSpriteTemplates_ColorHeaders[i], 126, (i * 24) + 92, 30); + spriteId = sRoulette->spriteIds[i + SPR_COLOR_HEADERS] = CreateSprite(&sSpriteTemplates_ColorHeaders[i], 126, (i * 24) + 92, 30); gSprites[spriteId].animPaused = TRUE; } } @@ -3530,12 +3576,12 @@ static void CreateGridBallSprites(void) u8 i; for (i = 0; i < BALLS_PER_ROUND; i++) { - sRoulette->spriteIds[i + SPR_GRID_BALL_1] = CreateSprite(&sSpriteTemplate_Ball, 116, 20, 10); - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = TRUE; - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].data[0] = 1; - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].callback = SpriteCB_GridSquare; - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].oam.priority = 1; - StartSpriteAnim(&gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]], 8); + sRoulette->spriteIds[i + SPR_GRID_BALLS] = CreateSprite(&sSpriteTemplate_Ball, 116, 20, 10); + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].data[0] = 1; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].callback = SpriteCB_GridSquare; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].oam.priority = 1; + StartSpriteAnim(&gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]], 8); } } @@ -3546,7 +3592,7 @@ static void ShowHideGridBalls(bool8 hideAll, u8 hideBallId) { for (; i < BALLS_PER_ROUND; i++) { - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = TRUE; } } else @@ -3555,13 +3601,13 @@ static void ShowHideGridBalls(bool8 hideAll, u8 hideBallId) { if (!sRoulette->hitSquares[i] || i == hideBallId) { - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = TRUE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = TRUE; } else { - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].invisible = FALSE; - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].pos1.x = (sGridSelections[sRoulette->hitSquares[i]].x + 1) * 8 + 4; - gSprites[sRoulette->spriteIds[i + SPR_GRID_BALL_1]].pos1.y = (sGridSelections[sRoulette->hitSquares[i]].y + 1) * 8 + 3; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = FALSE; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].pos1.x = (sGridSelections[sRoulette->hitSquares[i]].x + 1) * 8 + 4; + gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].pos1.y = (sGridSelections[sRoulette->hitSquares[i]].y + 1) * 8 + 3; } } } @@ -3581,32 +3627,32 @@ static void ShowHideWinSlotCursor(u8 selectionId) } } -static void CreateBoardIconSprites(void) +static void CreateWheelIconSprites(void) { u8 i, j; - u16 k; + u16 angle; struct SpriteSheet s; - LZ77UnCompWram(sSpriteSheet_BoardIcons.data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheet_WheelIcons.data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = sSpriteSheet_BoardIcons.size; - s.tag = sSpriteSheet_BoardIcons.tag; + s.size = sSpriteSheet_WheelIcons.size; + s.tag = sSpriteSheet_WheelIcons.tag; LoadSpriteSheet(&s); - k = 15; + angle = 15; for (i = 0; i < NUM_BOARD_COLORS; i++) { for (j = 0; j < NUM_BOARD_POKES; j++) { u8 spriteId; - spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_BOARD_ICONS + j] = CreateBoardIconSprite(&sSpriteTemplates_BoardIcons[i * NUM_BOARD_POKES + j], 40, &k); + spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_WHEEL_ICONS + j] = CreateWheelIconSprite(&sSpriteTemplates_WheelIcons[i * NUM_BOARD_POKES + j], 40, &angle); gSprites[spriteId].animPaused = TRUE; gSprites[spriteId].affineAnimPaused = TRUE; } } } -static void SpriteCB_BoardIcon(struct Sprite *sprite) +static void SpriteCB_WheelIcon(struct Sprite *sprite) { s16 cos; s16 sin; @@ -3713,9 +3759,9 @@ static u8 GetMultiplierAnimId(u8 selectionId) static void SetMultiplierSprite(u8 selectionId) { - struct Sprite *s = &gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]]; - s->animCmdIndex = GetMultiplierAnimId(selectionId); - s->oam.tileNum = s->sheetTileStart + (*s->anims + s->animCmdIndex)->type; + struct Sprite *sprite = &gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]]; + sprite->animCmdIndex = GetMultiplierAnimId(selectionId); + sprite->oam.tileNum = sprite->sheetTileStart + (*sprite->anims + sprite->animCmdIndex)->type; } static void SetBallCounterNumLeft(u8 numBalls) @@ -3776,16 +3822,18 @@ static void SpriteCB_GridSquare(struct Sprite *sprite) sprite->pos2.x = sRoulette->gridX; } -static void CreateBoardCenterSprite(void) +static void CreateWheelCenterSprite(void) { u8 spriteId; struct SpriteSheet s; - LZ77UnCompWram(sSpriteSheet_BoardCenter.data, gDecompressionBuffer); + LZ77UnCompWram(sSpriteSheet_WheelCenter.data, gDecompressionBuffer); s.data = gDecompressionBuffer; - s.size = sSpriteSheet_BoardCenter.size; - s.tag = sSpriteSheet_BoardCenter.tag; + s.size = sSpriteSheet_WheelCenter.size; + s.tag = sSpriteSheet_WheelCenter.tag; LoadSpriteSheet(&s); - spriteId = CreateSprite(&sSpriteTemplate_BoardCenter, 116, 80, 81); + // This sprite id isn't saved because it doesn't need to be referenced again + // but by virtue of creation order it's SPR_WHEEL_CENTER + spriteId = CreateSprite(&sSpriteTemplate_WheelCenter, 116, 80, 81); gSprites[spriteId].data[0] = sRoulette->wheelAngle; gSprites[spriteId].data[1] = 0; gSprites[spriteId].animPaused = TRUE; @@ -3793,17 +3841,17 @@ static void CreateBoardCenterSprite(void) gSprites[spriteId].coordOffsetEnabled = TRUE; } -static void SpriteCB_BoardCenter(struct Sprite *sprite) +static void SpriteCB_WheelCenter(struct Sprite *sprite) { - u32 t = sprite->oam.matrixNum; - struct OamMatrix *m = &gOamMatrices[0]; - m[t].d = sRoulette->wheelRotation.a; - m[t].a = sRoulette->wheelRotation.a; - m[t].b = sRoulette->wheelRotation.b; - m[t].c = sRoulette->wheelRotation.c; + u32 matrixNum = sprite->oam.matrixNum; + struct OamMatrix *matrix = &gOamMatrices[0]; + matrix[matrixNum].d = sRoulette->wheelRotation.a; + matrix[matrixNum].a = sRoulette->wheelRotation.a; + matrix[matrixNum].b = sRoulette->wheelRotation.b; + matrix[matrixNum].c = sRoulette->wheelRotation.c; } -static void CreateBoardBallSprites(void) +static void CreateWheelBallSprites(void) { u8 i; for (i = 0; i < BALLS_PER_ROUND; i++) @@ -3817,9 +3865,9 @@ static void CreateBoardBallSprites(void) } } -static void HideBoardBalls(void) +static void HideWheelBalls(void) { - u8 spriteId = sRoulette->spriteIds[SPR_BALL_1]; + u8 spriteId = sRoulette->spriteIds[SPR_WHEEL_BALLS]; u8 i; for (i = 0; i < BALLS_PER_ROUND; i++) { @@ -3834,69 +3882,95 @@ static void HideBoardBalls(void) } } -static s16 sub_8143AC8(struct Sprite *sprite) +// Sprite data for the roulette ball +#define sStuckOnWheelLeft data[0] // if true, ball got stuck in left half of wheel, else got stuck in right half +#define sState data[1] +#define sSlotMidpointDist data[2] +#define sBallAngle data[3] +#define sBallDistToCenter data[4] +#define sBallWheelAngle data[6] + +#define LandBall() \ +{ \ + sRoulette->ballState = BALL_STATE_LANDED; \ + sRoulette->ballRolling = FALSE; \ + StartSpriteAnim(sprite, sprite->animCmdIndex + 3); \ + UpdateSlotBelowBall(sprite); \ + sprite->sBallDistToCenter = 30; \ + UpdateBallRelativeWheelAngle(sprite); \ + sprite->sBallWheelAngle = (sprite->sBallWheelAngle / DEGREES_PER_SLOT) * DEGREES_PER_SLOT + 15; \ + sprite->callback = SpriteCB_BallLandInSlot; \ + m4aSongNumStartOrChange(SE_HASHI); \ +} + +// "wheelAngle" and "sBallAngle" are relative to the screen (e.g. 180 degrees for either is always screen bottom) +// "sBallWheelAngle" is the ball's angle relative to the wheel +// e.g. if the ball is screen right (90), but wheel is upside down (180), sBallWheelAngle is 270 (because the ball is wheel left) +static s16 UpdateBallRelativeWheelAngle(struct Sprite *sprite) { - if (sRoulette->wheelAngle > sprite->data[3]) + if (sRoulette->wheelAngle > sprite->sBallAngle) { - sprite->data[6] = 360 - sRoulette->wheelAngle + sprite->data[3]; - if (sprite->data[6] >= 360) - sprite->data[6] -= 360; + sprite->sBallWheelAngle = 360 - sRoulette->wheelAngle + sprite->sBallAngle; + if (sprite->sBallWheelAngle >= 360) + sprite->sBallWheelAngle -= 360; } else { - sprite->data[6] = sprite->data[3] - sRoulette->wheelAngle; + sprite->sBallWheelAngle = sprite->sBallAngle - sRoulette->wheelAngle; } - return sprite->data[6]; + return sprite->sBallWheelAngle; } -static u8 sub_8143B14(struct Sprite *sprite) +static u8 UpdateSlotBelowBall(struct Sprite *sprite) { - sRoulette->hitSlot = sub_8143AC8(sprite) / 30.0f; + sRoulette->hitSlot = UpdateBallRelativeWheelAngle(sprite) / (float) DEGREES_PER_SLOT; return sRoulette->hitSlot; } -static s16 sub_8143B48(struct Sprite *sprite) +static s16 GetBallDistanceToSlotMidpoint(struct Sprite *sprite) { - s16 t = sub_8143AC8(sprite) % 30; - u16 z; - if (t == 14) + s16 angleIntoSlot = UpdateBallRelativeWheelAngle(sprite) % DEGREES_PER_SLOT; + u16 distanceToMidpoint; + if (angleIntoSlot == SLOT_MIDPOINT) { - z = 0; - return sprite->data[2] = z; + // Ball is at midpoint, ok to drop into slot + distanceToMidpoint = 0; + return sprite->sSlotMidpointDist = distanceToMidpoint; } - else if (t > 13) + else if (angleIntoSlot >= SLOT_MIDPOINT) { - z = 43 - t; - return sprite->data[2] = z; + // Ball has passed midpoint, travel to midpoint of next slot + distanceToMidpoint = (DEGREES_PER_SLOT - 1) + SLOT_MIDPOINT - angleIntoSlot; + return sprite->sSlotMidpointDist = distanceToMidpoint; } else { - z = 14 - t; - return sprite->data[2] = z; + // Ball hasn't reached midpoint of this slot yet + distanceToMidpoint = SLOT_MIDPOINT - angleIntoSlot; + return sprite->sSlotMidpointDist = distanceToMidpoint; } } -static void sub_8143B84(struct Sprite *sprite) +static void UpdateBallPos(struct Sprite *sprite) { s16 sin, cos; + sRoulette->ballAngleSpeed += sRoulette->ballAngleAccel; + sRoulette->ballAngle += sRoulette->ballAngleSpeed; - sRoulette->var8C += sRoulette->var90; - sRoulette->var88 += sRoulette->var8C; + if (sRoulette->ballAngle >= 360) + sRoulette->ballAngle -= 360.0f; + else if (sRoulette->ballAngle < 0.0f) + sRoulette->ballAngle += 360.0f; - if (sRoulette->var88 >= 360) - sRoulette->var88 -= 360.0f; - else if (sRoulette->var88 < 0.0f) - sRoulette->var88 += 360.0f; - - sprite->data[3] = sRoulette->var88; - sRoulette->var98 += sRoulette->var9C; - sRoulette->var94 += sRoulette->var98; - sprite->data[4] = sRoulette->var94; - sin = Sin2(sprite->data[3]); - cos = Cos2(sprite->data[3]); - sprite->pos2.x = sin * sprite->data[4] >> 12; - sprite->pos2.y = -cos * sprite->data[4] >> 12; + sprite->sBallAngle = sRoulette->ballAngle; + sRoulette->ballFallSpeed += sRoulette->ballFallAccel; + sRoulette->ballDistToCenter += sRoulette->ballFallSpeed; + sprite->sBallDistToCenter = sRoulette->ballDistToCenter; + sin = Sin2(sprite->sBallAngle); + cos = Cos2(sprite->sBallAngle); + sprite->pos2.x = sin * sprite->sBallDistToCenter >> 12; + sprite->pos2.y = -cos * sprite->sBallDistToCenter >> 12; if (IsSEPlaying()) { m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, sprite->pos2.x); @@ -3904,80 +3978,65 @@ static void sub_8143B84(struct Sprite *sprite) } } -static void sub_8143C90(struct Sprite *sprite) +// Snap to the bottom of the slot and continue to spin with the wheel +static void SpriteCB_BallLandInSlot(struct Sprite *sprite) { s16 sin, cos; - sprite->data[3] = sRoulette->wheelAngle + sprite->data[6]; - if (sprite->data[3] >= 360) - sprite->data[3] -= 360; - sin = Sin2(sprite->data[3]); - cos = Cos2(sprite->data[3]); - sprite->pos2.x = sin * sprite->data[4] >> 12; - sprite->pos2.y = -cos * sprite->data[4] >> 12; + sprite->sBallAngle = sRoulette->wheelAngle + sprite->sBallWheelAngle; + if (sprite->sBallAngle >= 360) + sprite->sBallAngle -= 360; + sin = Sin2(sprite->sBallAngle); + cos = Cos2(sprite->sBallAngle); + sprite->pos2.x = sin * sprite->sBallDistToCenter >> 12; + sprite->pos2.y = -cos * sprite->sBallDistToCenter >> 12; sprite->pos2.y += gSpriteCoordOffsetY; } -static void sub_8143CFC(struct Sprite *sprite) +static void SpriteCB_UnstickBall_ShroomishBallFall(struct Sprite *sprite) { - sub_8143B84(sprite); + UpdateBallPos(sprite); sprite->data[2]++; - if (sprite->data[4] < -132 || sprite->data[4] > 80) + if (sprite->sBallDistToCenter < -132 || sprite->sBallDistToCenter > 80) sprite->invisible = TRUE; else sprite->invisible = FALSE; - if (sprite->data[2] >= 30) + if (sprite->data[2] >= DEGREES_PER_SLOT) { - if (!sprite->data[0]) + if (!sprite->sStuckOnWheelLeft) { - if (sRoulette->var94 <= sRoulette->varA0 - 2.0f) + if (sRoulette->ballDistToCenter <= sRoulette->varA0 - 2.0f) { - sRoulette->ballState = BALL_STATE_LANDED; - sRoulette->ballRolling = FALSE; - StartSpriteAnim(sprite, sprite->animCmdIndex + 3); - sub_8143B14(sprite); - sprite->data[4] = 30; - sub_8143AC8(sprite); - sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; - sprite->callback = sub_8143C90; - m4aSongNumStartOrChange(SE_HASHI); - sRoulette->var9C = sRoulette->var98 = 0.0f; - sRoulette->var8C = -1.0f; + LandBall() + sRoulette->ballFallAccel = sRoulette->ballFallSpeed = 0.0f; + sRoulette->ballAngleSpeed = -1.0f; } } else { - if (sRoulette->var94 >= sRoulette->varA0 - 2.0f) + if (sRoulette->ballDistToCenter >= sRoulette->varA0 - 2.0f) { - sRoulette->ballState = BALL_STATE_LANDED; - sRoulette->ballRolling = FALSE; - StartSpriteAnim(sprite, sprite->animCmdIndex + 3); - sub_8143B14(sprite); - sprite->data[4] = 30; - sub_8143AC8(sprite); - sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; - sprite->callback = sub_8143C90; - m4aSongNumStartOrChange(SE_HASHI); - sRoulette->var9C = sRoulette->var98 = 0.0f; - sRoulette->var8C = -1.0f; + LandBall() + sRoulette->ballFallAccel = sRoulette->ballFallSpeed = 0.0f; + sRoulette->ballAngleSpeed = -1.0f; } } } } -static void SpriteCB_Shroomish(struct Sprite *sprite) +static void SpriteCB_UnstickBall_Shroomish(struct Sprite *sprite) { - float f0, f1, f2; - sub_8143B84(sprite); + float slotOffset, ballFallDist, ballFallSpeed; + UpdateBallPos(sprite); - switch (sprite->data[3]) + switch (sprite->sBallAngle) { case 0: - if (sprite->data[0] != 1) + if (sprite->sStuckOnWheelLeft != TRUE) { - f0 = sprite->data[7]; - f1 = (f0 * sRouletteTables[sRoulette->tableId].var01 + (sRouletteTables[sRoulette->tableId].var02 - 1)); - f2 = (f0 / sRouletteTables[sRoulette->tableId].var0C); + slotOffset = sprite->data[7]; + ballFallDist = (slotOffset * sRouletteTables[sRoulette->tableId].randDistanceHigh + (sRouletteTables[sRoulette->tableId].randDistanceLow - 1)); + ballFallSpeed = (slotOffset / sRouletteTables[sRoulette->tableId].shroomish.fallSlowdown); } else { @@ -3985,11 +4044,11 @@ static void SpriteCB_Shroomish(struct Sprite *sprite) } break; case 180: - if (sprite->data[0] != 0) + if (sprite->sStuckOnWheelLeft) { - f0 = sprite->data[7]; - f1 = (f0 * sRouletteTables[sRoulette->tableId].var01 + (sRouletteTables[sRoulette->tableId].var02 - 1)); - f2 = -(f0 / sRouletteTables[sRoulette->tableId].var0C); + slotOffset = sprite->data[7]; + ballFallDist = (slotOffset * sRouletteTables[sRoulette->tableId].randDistanceHigh + (sRouletteTables[sRoulette->tableId].randDistanceLow - 1)); + ballFallSpeed = -(slotOffset / sRouletteTables[sRoulette->tableId].shroomish.fallSlowdown); } else { @@ -3999,38 +4058,30 @@ static void SpriteCB_Shroomish(struct Sprite *sprite) default: return; } - sRoulette->varA0 = sRoulette->var94; - sRoulette->var98 = f2; - sRoulette->var9C = -((f2 * 2.0f) / f1 + (2.0f / (f1 * f1))); - sRoulette->var8C = 0.0f; + sRoulette->varA0 = sRoulette->ballDistToCenter; + sRoulette->ballFallSpeed = ballFallSpeed; + sRoulette->ballFallAccel = -((ballFallSpeed * 2.0f) / ballFallDist + (2.0f / (ballFallDist * ballFallDist))); + sRoulette->ballAngleSpeed = 0.0f; sprite->animPaused = FALSE; sprite->animNum = 0; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; - sprite->callback = sub_8143CFC; + sprite->callback = SpriteCB_UnstickBall_ShroomishBallFall; sprite->data[2] = 0; } -static void sub_8143FA4(struct Sprite *sprite) +static void SpriteCB_UnstickBall_TaillowDrop(struct Sprite *sprite) { sprite->pos2.y = (s16)(sprite->data[2] * 0.05f * sprite->data[2]) - 45; sprite->data[2]++; - if (sprite->data[2] > 29 && sprite->pos2.y >= 0) + if (sprite->data[2] >= DEGREES_PER_SLOT && sprite->pos2.y >= 0) { - sRoulette->ballState = BALL_STATE_LANDED; - sRoulette->ballRolling = FALSE; - StartSpriteAnim(sprite, sprite->animCmdIndex + 3); - sub_8143B14(sprite); - sprite->data[4] = 30; - sub_8143AC8(sprite); - sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; - sprite->callback = sub_8143C90; - m4aSongNumStartOrChange(SE_HASHI); + LandBall() sRoulette->ballUnstuck = TRUE; } } -static void sub_8144050(struct Sprite *sprite) +static void SpriteCB_UnstickBall_TaillowPickUp(struct Sprite *sprite) { if (sprite->data[2]++ < 45) { @@ -4060,224 +4111,228 @@ static void sub_8144050(struct Sprite *sprite) sprite->animBeginning = TRUE; sprite->animEnded = FALSE; sprite->data[2] = 0; - sprite->callback = sub_8143FA4; + sprite->callback = SpriteCB_UnstickBall_TaillowDrop; m4aSongNumStart(SE_NAGERU); } } } -static void sub_8144128(struct Sprite *sprite) +static void SpriteCB_UnstickBall_Taillow(struct Sprite *sprite) { - sub_8143B84(sprite); - switch (sprite->data[3]) + UpdateBallPos(sprite); + + switch (sprite->sBallAngle) { case 90: - if (sprite->data[0] != 1) + if (sprite->sStuckOnWheelLeft != TRUE) { - sprite->callback = &sub_8144050; + sprite->callback = &SpriteCB_UnstickBall_TaillowPickUp; sprite->data[2] = 0; } break; case 270: - if (sprite->data[0] != 0) + if (sprite->sStuckOnWheelLeft) { - sprite->callback = &sub_8144050; + sprite->callback = &SpriteCB_UnstickBall_TaillowPickUp; sprite->data[2] = 0; } break; } } -static void CreateClearSpeciesSprite(struct Sprite *sprite) +// The below SpriteCB_UnstickBall_* callbacks handle the ball while its being cleared by Shroomish/Taillow +// For what Shroomish/Taillow do during this sequence, see SpriteCB_Shroomish / SpriteCB_Taillow +static void SpriteCB_UnstickBall(struct Sprite *sprite) { - sub_8143B84(sprite); + UpdateBallPos(sprite); switch (sRoulette->useTaillow) { default: case FALSE: CreateShroomishSprite(sprite); - sprite->callback = SpriteCB_Shroomish; + sprite->callback = SpriteCB_UnstickBall_Shroomish; break; case TRUE: CreateTaillowSprite(sprite); - sprite->callback = sub_8144128; + sprite->callback = SpriteCB_UnstickBall_Taillow; break; } } -static void prev_quest_read_x24_hm_usage(struct Sprite *sprite) +#define sStillStuck data[0] + +static void SpriteCB_RollBall_TryLandAdjacent(struct Sprite *sprite) { - sub_8143B84(sprite); + UpdateBallPos(sprite); + if (sprite->data[2]-- == 16) - sRoulette->var98 *= -1.0f; + sRoulette->ballFallSpeed *= -1.0f; + if (sprite->data[2] == 0) { - if (!sprite->data[0]) + if (!sprite->sStillStuck) { - sRoulette->ballState = BALL_STATE_LANDED; - sRoulette->ballRolling = FALSE; - StartSpriteAnim(sprite, sprite->animCmdIndex + 3); - sub_8143B14(sprite); - sprite->data[4] = 30; - sub_8143AC8(sprite); - sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; - sprite->callback = sub_8143C90; - m4aSongNumStartOrChange(SE_HASHI); + // Ball can successfully fall into adjacent space + LandBall() } else { + // Ball is stuck, need Shroomish/Taillow to clear ball sprite->animPaused = TRUE; m4aSongNumStart(SE_KON); - sub_8144A24(sprite); + SetBallStuck(sprite); } } } -static void sub_8144264(struct Sprite *sprite) +static void SpriteCB_RollBall_TryLand(struct Sprite *sprite) { - sub_8143B84(sprite); + UpdateBallPos(sprite); sprite->data[2] = 0; - sub_8143B14(sprite); + UpdateSlotBelowBall(sprite); if (!(sRouletteSlots[sRoulette->hitSlot].flag & sRoulette->hitFlags)) { - sRoulette->ballState = BALL_STATE_LANDED; - sRoulette->ballRolling = FALSE; - StartSpriteAnim(sprite, sprite->animCmdIndex + 3); - sub_8143B14(sprite); - sprite->data[4] = 30; - sub_8143AC8(sprite); - sprite->data[6] = (sprite->data[6] / 30) * 30 + 15; - sprite->callback = sub_8143C90; - m4aSongNumStartOrChange(SE_HASHI); + // Space is empty, land successfully + LandBall() } else { + // Space has already been landed on, try to fall into adjacent space u8 slotId; - u32 z; + u32 fallRight; m4aSongNumStart(SE_KON); - z = Random() & 1; - if (z) + fallRight = Random() & 1; + if (fallRight) { - sRoulette->var8C = 0.0f; - sRoulette->var7F = slotId = (sRoulette->hitSlot + 1) % NUM_ROULETTE_SLOTS; + sRoulette->ballAngleSpeed = 0.0f; + sRoulette->stuckHitSlot = slotId = (sRoulette->hitSlot + 1) % NUM_ROULETTE_SLOTS; } - else + else // fall left { float temp; - sRoulette->var8C = (temp = sRouletteTables[sRoulette->tableId].var1C) * 2.0f; + sRoulette->ballAngleSpeed = (temp = sRouletteTables[sRoulette->tableId].var1C) * 2.0f; slotId = (sRoulette->hitSlot + NUM_ROULETTE_SLOTS - 1) % NUM_ROULETTE_SLOTS; - sRoulette->var7F = sRoulette->hitSlot; + sRoulette->stuckHitSlot = sRoulette->hitSlot; } if (sRouletteSlots[slotId].flag & sRoulette->hitFlags) { - sprite->data[0] = 1; - sprite->data[2] = sRouletteTables[sRoulette->tableId].var02; + // Attempted adjacent space has also been landed on + sprite->sStillStuck = TRUE; + sprite->data[2] = sRouletteTables[sRoulette->tableId].randDistanceLow; } else { - sprite->data[0] = sRouletteSlots[slotId].flag & sRoulette->hitFlags; + sprite->sStillStuck = FALSE; if (sRoulette->tableId) { - sprite->data[2] = sRouletteTables[sRoulette->tableId].var01; + sprite->data[2] = sRouletteTables[sRoulette->tableId].randDistanceHigh; } else { - sprite->data[2] = sRouletteTables[sRoulette->tableId].var02; - if (z) - sRoulette->var8C = 0.5f; + sprite->data[2] = sRouletteTables[sRoulette->tableId].randDistanceLow; + if (fallRight) + sRoulette->ballAngleSpeed = 0.5f; else - sRoulette->var8C = -1.5f; + sRoulette->ballAngleSpeed = -1.5f; } } - sRoulette->var98 = 0.085f; - sprite->callback = prev_quest_read_x24_hm_usage; - sprite->data[1] = 5; + sRoulette->ballFallSpeed = 0.085f; + sprite->callback = SpriteCB_RollBall_TryLandAdjacent; + sprite->sState = 5; } } -static void sub_8144410(struct Sprite *sprite) +#undef sStillStuck + +static void SpriteCB_RollBall_Slow(struct Sprite *sprite) { - sub_8143B84(sprite); - if (sRoulette->var8C > 0.5f) + UpdateBallPos(sprite); + if (sRoulette->ballAngleSpeed > 0.5f) return; - sub_8143B14(sprite); - if (!sub_8143B48(sprite)) + UpdateSlotBelowBall(sprite); + if (GetBallDistanceToSlotMidpoint(sprite) == 0) { - sRoulette->var90 = 0.0f; - sRoulette->var8C -= (float)(sRouletteTables[sRoulette->tableId].wheelSpeed) + // Reached slot to land in + sRoulette->ballAngleAccel = 0.0f; + sRoulette->ballAngleSpeed -= (float)(sRouletteTables[sRoulette->tableId].wheelSpeed) / (sRouletteTables[sRoulette->tableId].wheelDelay + 1); - sprite->data[1] = 4; - sprite->callback = sub_8144264; + sprite->sState = 4; + sprite->callback = SpriteCB_RollBall_TryLand; } else { - if (sRoulette->var90 != 0.0f) + if (sRoulette->ballAngleAccel != 0.0f) { - if (sRoulette->var8C < 0.0f) + if (sRoulette->ballAngleSpeed < 0.0f) { - sRoulette->var90 = 0.0f; - sRoulette->var8C = 0.0f; - sRoulette->var98 /= 1.2; + sRoulette->ballAngleAccel = 0.0f; + sRoulette->ballAngleSpeed = 0.0f; + sRoulette->ballFallSpeed /= 1.2; } } } } -static void sub_8144514(struct Sprite *sprite) +static void SpriteCB_RollBall_Medium(struct Sprite *sprite) { - sub_8143B84(sprite); - if (sRoulette->var94 > 40.f) + UpdateBallPos(sprite); + if (sRoulette->ballDistToCenter > 40.0f) return; - sRoulette->var98 = -(4.0f / (float)(sRoulette->var86)); - sRoulette->var90 = -(sRoulette->var8C / (float)(sRoulette->var86)); + sRoulette->ballFallSpeed = -(4.0f / (float)(sRoulette->ballTravelDistSlow)); + sRoulette->ballAngleAccel = -(sRoulette->ballAngleSpeed / (float)(sRoulette->ballTravelDistSlow)); sprite->animNum = 2; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; - sprite->data[1] = 3; - sprite->callback = sub_8144410; + sprite->sState = 3; + sprite->callback = SpriteCB_RollBall_Slow; } -static void sub_81445D8(struct Sprite *sprite) +static void SpriteCB_RollBall_Fast(struct Sprite *sprite) { - sub_8143B84(sprite); - if (sRoulette->var94 > 60.0f) + UpdateBallPos(sprite); + if (sRoulette->ballDistToCenter > 60.0f) return; m4aSongNumStartOrChange(SE_TAMAKORO_E); - sRoulette->var98 = -(20.0f / (float)(sRoulette->var84)); - sRoulette->var90 = ((1.0f - sRoulette->var8C) / (float)(sRoulette->var84)); + sRoulette->ballFallSpeed = -(20.0f / (float)(sRoulette->ballTravelDistMed)); + sRoulette->ballAngleAccel = ((1.0f - sRoulette->ballAngleSpeed) / (float)(sRoulette->ballTravelDistMed)); sprite->animNum = 1; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; - sprite->data[1] = 2; - sprite->callback = sub_8144514; + sprite->sState = 2; + sprite->callback = SpriteCB_RollBall_Medium; } -static void sub_81446AC(struct Sprite *sprite) +static void SpriteCB_RollBall_Start(struct Sprite *sprite) { - sprite->data[1] = 1; + sprite->sState = 1; sprite->data[2] = 0; - sub_8143B84(sprite); + UpdateBallPos(sprite); sprite->invisible = FALSE; - sprite->callback = sub_81445D8; + sprite->callback = SpriteCB_RollBall_Fast; } -static void CreateShroomishSprite(struct Sprite *sprite) +// Sprite data for Shroomish / its shadows +#define sMonSpriteId data[4] +#define sBallShadowSpriteId data[5] +#define sMonShadowSpriteId data[6] + +static void CreateShroomishSprite(struct Sprite *ball) { u16 t; u8 i; - s16 s[2][2] = { + s16 coords[2][2] = { {116, 44}, {116, 112} }; - struct Roulette *p; + struct Roulette *roulette; - t = sprite->data[7] - 2; - p = sRoulette; // why??? + t = ball->data[7] - 2; + roulette = sRoulette; // Unnecessary, needed to match sRoulette->spriteIds[SPR_CLEAR_MON] = CreateSprite(&sSpriteTemplate_Shroomish, 36, -12, 50); - sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_ShroomishShadow[0], s[sprite->data[0]][0], s[sprite->data[0]][1], 59); + sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_ShroomishShadow[0], coords[ball->sStuckOnWheelLeft][0], coords[ball->sStuckOnWheelLeft][1], 59); sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2] = CreateSprite(&sSpriteTemplate_ShroomishShadow[1], 36, 140, 51); gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2]].oam.objMode = ST_OAM_OBJ_BLEND; for (i = 0; i < 3; i++) @@ -4286,85 +4341,88 @@ static void CreateShroomishSprite(struct Sprite *sprite) gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].invisible = TRUE; gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].animPaused = TRUE; gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].affineAnimPaused = TRUE; - gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[4] = sRoulette->spriteIds[SPR_CLEAR_MON]; - gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[5] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; - gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[6] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2]; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].sMonSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON]; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].sBallShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].sMonShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2]; gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[2] = t; - gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[3] = (sprite->data[7] * sRouletteTables[sRoulette->tableId].var01) + - (sRouletteTables[sRoulette->tableId].var02 + 0xFFFF); + gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[3] = (ball->data[7] * sRouletteTables[sRoulette->tableId].randDistanceHigh) + + (sRouletteTables[sRoulette->tableId].randDistanceLow + 0xFFFF); } gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].coordOffsetEnabled = TRUE; - sRoulette->var38 = sprite; + sRoulette->ball = ball; } -static void CreateTaillowSprite(struct Sprite *sprite) +static void CreateTaillowSprite(struct Sprite *ball) { u8 i = 0; s16 t; - s16 s[2][2] = { - {256, 84}, - {-16, 84} + s16 coords[2][2] = { + {256, 84}, // Right approach + {-16, 84} // Left approach }; - t = sprite->data[7] - 2; - sRoulette->spriteIds[SPR_CLEAR_MON] = CreateSprite(&sSpriteTemplate_Taillow, s[sprite->data[0]][0], s[sprite->data[0]][1], 50); - StartSpriteAnim(&gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]], sprite->data[0]); - sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_TaillowShadow, s[sprite->data[0]][0], s[sprite->data[0]][1], 51); + t = ball->data[7] - 2; + sRoulette->spriteIds[SPR_CLEAR_MON] = CreateSprite(&sSpriteTemplate_Taillow, coords[ball->sStuckOnWheelLeft][0], coords[ball->sStuckOnWheelLeft][1], 50); + StartSpriteAnim(&gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]], ball->sStuckOnWheelLeft); + sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_TaillowShadow, coords[ball->sStuckOnWheelLeft][0], coords[ball->sStuckOnWheelLeft][1], 51); gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].affineAnimPaused = TRUE; gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].animPaused = TRUE; - sprite->data[7] = (t * sRouletteTables[sRoulette->tableId].var01) + (sRouletteTables[sRoulette->tableId].var10 + 45); + ball->data[7] = (t * sRouletteTables[sRoulette->tableId].randDistanceHigh) + (sRouletteTables[sRoulette->tableId].taillow.baseDropDelay + 45); for (; i < 2; i++) { - gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[4] = sRoulette->spriteIds[SPR_CLEAR_MON]; - gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[5] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; - gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[6] = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].sMonSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON]; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].sBallShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].sMonShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]; gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[2] = t; - gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[3] = sprite->data[7] - 45; + gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[3] = ball->data[7] - 45; } - sRoulette->var38 = sprite; + sRoulette->ball = ball; } -static void sub_8144A24(struct Sprite *sprite) +static void SetBallStuck(struct Sprite *sprite) { - u8 z; - u16 o; - u8 h = 0; - u8 j = 5; - u8 p = 0; + u8 slotId; + u16 angle; + u8 numCandidates = 0; + u8 maxSlotToCheck = 5; + u8 betSlotId = 0; u8 i = 0; - u8 val; - u8 s[10] = {}; + u8 slotsToSkip; + u8 slotCandidates[NUM_ROULETTE_SLOTS - 2] = {}; // - 2 because we know at least 2 are already occupied u16 rand = Random(); sRoulette->ballState = BALL_STATE_STUCK; sRoulette->ballStuck = TRUE; sRoulette->ballUnstuck = FALSE; sRoulette->hitSlot = 0xFF; - sRoulette->var88 = sprite->data[3]; - sRoulette->var98 = 0.0f; - sRoulette->var8C = sRouletteTables[sRoulette->tableId].var1C; + sRoulette->ballAngle = sprite->sBallAngle; + sRoulette->ballFallSpeed = 0.0f; + sRoulette->ballAngleSpeed = sRouletteTables[sRoulette->tableId].var1C; - o = (sRoulette->tableId * 30 + 33) + (1 - sRoulette->useTaillow) * 15; + angle = (sRoulette->tableId * DEGREES_PER_SLOT + 33) + (1 - sRoulette->useTaillow) * 15; + + // Determine which quadrant the ball got stuck in + // Use either Shroomish or Taillow to clear the ball depending on where it's stuck for (i = 0; i < 4; i++) { - if (o < sprite->data[3] && sprite->data[3] <= o + 90) + if (angle < sprite->sBallAngle && sprite->sBallAngle <= angle + 90) { - sprite->data[0] = i / 2; + sprite->sStuckOnWheelLeft = i / 2; sRoulette->useTaillow = i % 2; break; } if (i == 3) { - sprite->data[0] = 1; + sprite->sStuckOnWheelLeft = TRUE; sRoulette->useTaillow = TRUE; break; } - o += 90; + angle += 90; } if (sRoulette->useTaillow) { - if (sprite->data[0]) + if (sprite->sStuckOnWheelLeft) PlayCry1(SPECIES_TAILLOW, -63); else PlayCry1(SPECIES_TAILLOW, 63); @@ -4374,41 +4432,47 @@ static void sub_8144A24(struct Sprite *sprite) PlayCry1(SPECIES_SHROOMISH, -63); } - val = 2; - z = (sRoulette->var7F + 2) % NUM_ROULETTE_SLOTS; + slotsToSkip = 2; + slotId = (sRoulette->stuckHitSlot + 2) % NUM_ROULETTE_SLOTS; if (sRoulette->useTaillow == TRUE && sRoulette->tableId == 1) - j += 6; + maxSlotToCheck += 6; // Check all remaining slots else - j += val; + maxSlotToCheck += slotsToSkip; // Check enough slots to guarantee an empty will be found - for (i = val; i < j; i++) + // Identify open slots on the wheel that the stuck ball could be moved to + for (i = slotsToSkip; i < maxSlotToCheck; i++) { - if (!(sRoulette->hitFlags & sRouletteSlots[z].flag)) + if (!(sRoulette->hitFlags & sRouletteSlots[slotId].flag)) { - s[h++] = i; - if (p == 0 && (sRouletteSlots[z].flag & sGridSelections[sRoulette->betSelection[sRoulette->curBallNum]].inSelectionFlags)) - p = i; + slotCandidates[numCandidates++] = i; + if (betSlotId == 0 && (sRouletteSlots[slotId].flag & sGridSelections[sRoulette->betSelection[sRoulette->curBallNum]].inSelectionFlags)) + betSlotId = i; } - z = (z + 1) % 12; + slotId = (slotId + 1) % NUM_ROULETTE_SLOTS; } + // Determine which identified slot the ball should be moved to + // The below slot ids are relative to the slot the ball got stuck on if ((sRoulette->useTaillow + 1) & sRoulette->partySpeciesFlags) { - if (p && (rand & 0xFF) < 0xc0) - sprite->data[7] = p; + // If the player has the corresponding pokemon in their party (HAS_SHROOMISH or HAS_TAILLOW), + // there's a 75% chance that the ball will be moved to a spot they bet on + // assuming it was one of the slots identified as a candidate + if (betSlotId && (rand % 256) < 192) + sprite->data[7] = betSlotId; else - sprite->data[7] = s[rand % h]; + sprite->data[7] = slotCandidates[rand % numCandidates]; } else { - sprite->data[7] = s[rand % h]; + sprite->data[7] = slotCandidates[rand % numCandidates]; } - sprite->callback = CreateClearSpeciesSprite; + sprite->callback = SpriteCB_UnstickBall; } -static const u16 gUnknown_085B7B1A[] = { +static const u16 sShroomishShadowAlphas[] = { 0x907, 0x808, 0x709, @@ -4421,8 +4485,9 @@ static const u16 gUnknown_085B7B1A[] = { 0x010, }; -static void sub_8144C70(struct Sprite *sprite) +static void SpriteCB_ShroomishExit(struct Sprite *sprite) { + // Delay for screen shaking, then exit left if (sprite->data[1]++ >= sprite->data[3]) { sprite->pos1.x -= 2; @@ -4431,16 +4496,17 @@ static void sub_8144C70(struct Sprite *sprite) if (!sRoulette->ballUnstuck) sRoulette->ballUnstuck = TRUE; DestroySprite(sprite); - sRoulette->var01 = 0; - sRoulette->var34 = gUnknown_085B7B1A[0]; + sRoulette->shroomishShadowTimer = 0; + sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[0]; } } } -static void sub_8144CD0(struct Sprite *sprite) +// Handles both the screen shake and ball shadow effect for when Shroomish unsticks the ball +static void SpriteCB_ShroomishShakeScreen(struct Sprite *sprite) { - int p; - u16 t[][4] = { + int screenShakeIdx; + u16 screenShakeOffsets[][4] = { {-1, 0, 1, 0}, {-2, 0, 2, 0}, {-3, 0, 3, 0}, @@ -4450,10 +4516,12 @@ static void sub_8144CD0(struct Sprite *sprite) { if (sprite->data[1] & 1) { - gSpriteCoordOffsetY = t[sprite->data[2] / 2][sprite->data[7]]; - p = sprite->data[7] + 1; - sprite->data[7] = p - ((p / 4) * 4); + // Shake screen + gSpriteCoordOffsetY = screenShakeOffsets[sprite->data[2] / 2][sprite->data[7]]; + screenShakeIdx = sprite->data[7] + 1; + sprite->data[7] = screenShakeIdx - ((screenShakeIdx / 4) * 4); } + // Flicker shadow sprite->invisible ^= 1; } else @@ -4464,78 +4532,83 @@ static void sub_8144CD0(struct Sprite *sprite) } } -static void sub_8144D94(struct Sprite *sprite) +static void SpriteCB_ShroomishFall(struct Sprite *sprite) { - float t; + float timer; sprite->data[1]++; - t = sprite->data[1]; - sprite->pos2.y = t * 0.039f * t; - sRoulette->var34 = gUnknown_085B7B1A[(sRoulette->var01 - 1) / 2]; - if (sRoulette->var01 < 19) - sRoulette->var01++; + timer = sprite->data[1]; + sprite->pos2.y = timer * 0.039f * timer; + sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[(sRoulette->shroomishShadowTimer - 1) / 2]; + if (sRoulette->shroomishShadowTimer < ARRAY_COUNT(sShroomishShadowAlphas) * 2 - 1) + sRoulette->shroomishShadowTimer++; if (sprite->data[1] > 60) { sprite->data[1] = 0; - sprite->callback = sub_8144C70; - gSprites[sprite->data[6]].callback = sub_8144C70; - gSprites[sprite->data[6]].data[1] = -2; - gSprites[sprite->data[5]].invisible = FALSE; - gSprites[sprite->data[5]].callback = sub_8144CD0; + sprite->callback = SpriteCB_ShroomishExit; + gSprites[sprite->sMonShadowSpriteId].callback = SpriteCB_ShroomishExit; + gSprites[sprite->sMonShadowSpriteId].data[1] = -2; + gSprites[sprite->sBallShadowSpriteId].invisible = FALSE; + gSprites[sprite->sBallShadowSpriteId].callback = SpriteCB_ShroomishShakeScreen; m4aSongNumStart(SE_W070); } } -static void sub_8144E60(struct Sprite *sprite) +static void SpriteCB_Shroomish(struct Sprite *sprite) { if (sprite->data[7] == 0) { - if (sRoulette->var38->data[0] == 0) + // Wait for the ball to be a specific angle (or its 180 degree opposite) specified by the table + // Once it is, reveal the shadow for Shroomish falling in + if (!sRoulette->ball->sStuckOnWheelLeft) { - if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var08) + if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.startAngle) return; } else { - if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var08 + 180) + if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.startAngle + 180) return; } sprite->invisible = FALSE; sprite->data[7]++; m4aSongNumStart(SE_RU_HYUU); - sRoulette->var01 = 1; - sRoulette->var34 = gUnknown_085B7B1A[0]; + sRoulette->shroomishShadowTimer = 1; + sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[0]; } else { - sRoulette->var34 = gUnknown_085B7B1A[(sRoulette->var01 - 1) / 2]; - if (sRoulette->var01 < 19) - sRoulette->var01++; + sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[(sRoulette->shroomishShadowTimer - 1) / 2]; + if (sRoulette->shroomishShadowTimer < 19) + sRoulette->shroomishShadowTimer++; - if (sRoulette->var38->data[0] == 0) + // Wait for the ball to be a specific angle (or its 180 degree opposite) specified by the table + // Once it is, have Shroomish begin to fall in + // On both tables this angle is 15 degrees off the "start" angle + if (!sRoulette->ball->sStuckOnWheelLeft) { - if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var0A) + if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.dropAngle) return; } else { - if (sRoulette->var38->data[3] != sRouletteTables[sRoulette->tableId].var0A + 180) + if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.dropAngle + 180) return; } - gSprites[sprite->data[4]].callback = sub_8144D94; - gSprites[sprite->data[4]].invisible = FALSE; + gSprites[sprite->sMonSpriteId].callback = SpriteCB_ShroomishFall; + gSprites[sprite->sMonSpriteId].invisible = FALSE; sprite->callback = &SpriteCallbackDummy; sprite->data[7] = 0; } } -static void sub_8144F94(struct Sprite *sprite) +static void SpriteCB_TaillowShadow_Flash(struct Sprite *sprite) { sprite->invisible ^= 1; } -static void sub_8144FB0(struct Sprite *sprite) +static void SpriteCB_Taillow_FlyAway(struct Sprite *sprite) { if (sprite->pos1.y > -16) { @@ -4553,7 +4626,7 @@ static void sub_8144FB0(struct Sprite *sprite) } } -static void sub_8145030(struct Sprite *sprite) +static void SpriteCB_Taillow_PickUpBall(struct Sprite *sprite) { if (sprite->data[1] >= 0) { @@ -4578,17 +4651,17 @@ static void sub_8145030(struct Sprite *sprite) else { m4aSongNumStart(SE_RU_HYUU); - StartSpriteAnim(sprite, sRoulette->var38->data[0] + 4); - sprite->callback = sub_8144FB0; - gSprites[sprite->data[6]].affineAnimPaused = FALSE; + StartSpriteAnim(sprite, sRoulette->ball->sStuckOnWheelLeft + 4); + sprite->callback = SpriteCB_Taillow_FlyAway; + gSprites[sprite->sMonShadowSpriteId].affineAnimPaused = FALSE; } } } -static void sub_81450D8(struct Sprite *sprite) +static void SpriteCB_Taillow_FlyIn(struct Sprite *sprite) { - s8 t[2] = {-1, 1}; - s8 z[][2] = { + s8 xMoveOffsets[2] = {-1, 1}; + s8 yMoveOffsets[][2] = { {2, 0}, {2, 0}, {2, -1}, @@ -4601,7 +4674,7 @@ static void sub_81450D8(struct Sprite *sprite) if (sprite->data[1]-- > 7) { - sprite->pos1.x += t[sRoulette->var38->data[0]] * 2; + sprite->pos1.x += xMoveOffsets[sRoulette->ball->sStuckOnWheelLeft] * 2; if (IsSEPlaying()) { s8 pan = -((116 - sprite->pos1.x) / 2); @@ -4613,46 +4686,46 @@ static void sub_81450D8(struct Sprite *sprite) { if (sprite->data[1] >= 0) { - sprite->pos1.x += t[sRoulette->var38->data[0]] * z[7 - sprite->data[1]][0]; - sprite->pos1.y += z[7 - sprite->data[1]][1]; + sprite->pos1.x += xMoveOffsets[sRoulette->ball->sStuckOnWheelLeft] * yMoveOffsets[7 - sprite->data[1]][0]; + sprite->pos1.y += yMoveOffsets[7 - sprite->data[1]][1]; } else { m4aSongNumStartOrChange(SE_BASABASA); - if (sRoulette->var38->data[0] == 0) + if (sRoulette->ball->sStuckOnWheelLeft == 0) PlayCry1(SPECIES_TAILLOW, 63); else PlayCry1(SPECIES_TAILLOW, -63); - StartSpriteAnim(sprite, sRoulette->var38->data[0] + 2); + StartSpriteAnim(sprite, sRoulette->ball->sStuckOnWheelLeft + 2); sprite->data[1] = 45; - sprite->callback = sub_8145030; + sprite->callback = SpriteCB_Taillow_PickUpBall; } } } -static void sub_8145218(struct Sprite *sprite) +static void SpriteCB_TaillowShadow_FlyIn(struct Sprite *sprite) { - s8 t[2] = {-1, 1}; + s8 moveDir[2] = {-1, 1}; if (sprite->data[1]-- >= 0) { - sprite->pos1.x += t[sRoulette->var38->data[0]] * 2; - gSprites[sprite->data[6]].invisible ^= 1; + sprite->pos1.x += moveDir[sRoulette->ball->sStuckOnWheelLeft] * 2; + gSprites[sprite->sMonShadowSpriteId].invisible ^= 1; } else { - sprite->callback = sub_8144F94; + sprite->callback = SpriteCB_TaillowShadow_Flash; } } static void SpriteCB_Taillow(struct Sprite *sprite) { - if (sRoulette->var38->data[0] == 0) + if (sRoulette->ball->sStuckOnWheelLeft == FALSE) { - if (sRoulette->var38->data[3] == sRouletteTables[sRoulette->tableId].var12 + 90) + if (sRoulette->ball->sBallAngle == sRouletteTables[sRoulette->tableId].taillow.rightStartAngle + 90) { - gSprites[sprite->data[6]].data[1] = 52; - gSprites[sprite->data[4]].data[1] = 52; + gSprites[sprite->sMonShadowSpriteId].data[1] = 52; + gSprites[sprite->sMonSpriteId].data[1] = 52; } else { @@ -4661,17 +4734,17 @@ static void SpriteCB_Taillow(struct Sprite *sprite) } else { - if (sRoulette->var38->data[3] == sRouletteTables[sRoulette->tableId].var14 + 270) + if (sRoulette->ball->sBallAngle == sRouletteTables[sRoulette->tableId].taillow.leftStartAngle + 270) { - gSprites[sprite->data[6]].data[1] = 46; - gSprites[sprite->data[4]].data[1] = 46; + gSprites[sprite->sMonShadowSpriteId].data[1] = 46; + gSprites[sprite->sMonSpriteId].data[1] = 46; } else { return; } } - gSprites[sprite->data[6]].callback = sub_8145218; - gSprites[sprite->data[4]].callback = sub_81450D8; + gSprites[sprite->sMonShadowSpriteId].callback = SpriteCB_TaillowShadow_FlyIn; + gSprites[sprite->sMonSpriteId].callback = SpriteCB_Taillow_FlyIn; m4aSongNumStart(SE_RU_HYUU); } diff --git a/src/roulette_util.c b/src/roulette_util.c index 4e6977675d..ab20e55839 100755 --- a/src/roulette_util.c +++ b/src/roulette_util.c @@ -17,7 +17,7 @@ void sub_8151678(struct UnkStruct0 *r0) u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2) { - if (!(r1 < 16) || (r0->var04[r1].var00_7)) + if (!(r1 < 16) || (r0->var04[r1].active)) return 0xFF; r0->var04[r1].var04.var00 = r2->var00; @@ -29,7 +29,7 @@ u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2) r0->var04[r1].var04.var07_5 = r2->var07_5; r0->var04[r1].var04.var07_7 = r2->var07_7; r0->var04[r1].var00_0 = 0; - r0->var04[r1].var00_7 = 1; + r0->var04[r1].active = TRUE; r0->var04[r1].var02 = 0; r0->var04[r1].var01 = 0; if (r0->var04[r1].var04.var07_7 < 0) @@ -44,7 +44,7 @@ u8 sub_8151710(struct UnkStruct0 *r0, u8 r1) { if (r1 >= 16) return 0xFF; - if (!r0->var04[r1].var00_7) + if (!r0->var04[r1].active) return 0xFF; memset(&r0->var04[r1], 0, sizeof(r0->var04[r1])); @@ -154,16 +154,16 @@ void task_tutorial_controls_fadein(struct UnkStruct0 *r0) } } -void sub_8151A48(struct UnkStruct0 *r0, u16 r1) +void sub_8151A48(struct UnkStruct0 *r0, u16 flags) { u8 i = 0; r0->var00++; for (i = 0; i < 16; i++) { - if ((r1 >> i) & 1) + if ((flags >> i) & 1) { - if (r0->var04[i].var00_7) + if (r0->var04[i].active) { r0->var02 |= 1 << i; r0->var04[i].var00_0 = 1; @@ -172,7 +172,7 @@ void sub_8151A48(struct UnkStruct0 *r0, u16 r1) } } -void sub_8151A9C(struct UnkStruct0 *r0, u16 r1) +void sub_8151A9C(struct UnkStruct0 *r0, u16 flags) { u8 i; @@ -180,9 +180,9 @@ void sub_8151A9C(struct UnkStruct0 *r0, u16 r1) { if ((r0->var02 >> i) & 1) { - if (r0->var04[i].var00_7) + if (r0->var04[i].active) { - if ((r1 >> i) & 1) + if ((flags >> i) & 1) { u32 offset = r0->var04[i].var04.var02; u16 *faded = &gPlttBufferFaded[offset]; @@ -199,14 +199,14 @@ void sub_8151A9C(struct UnkStruct0 *r0, u16 r1) } } } - if (r1 == 0xFFFF) + if (flags == 0xFFFF) { r0->var00 = 0; r0->var02 = 0; } else { - r0->var02 = r0->var02 & ~r1; + r0->var02 = r0->var02 & ~flags; } } From 8e800e206138d00220c44af8acf69ce79103dc9c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 4 Aug 2020 19:19:36 -0400 Subject: [PATCH 42/85] Document roulette flash util --- include/roulette_util.h | 55 ++--- src/roulette.c | 432 +++++++++++++++++++++------------------- src/roulette_util.c | 205 +++++++++---------- 3 files changed, 362 insertions(+), 330 deletions(-) diff --git a/include/roulette_util.h b/include/roulette_util.h index d18d22d0ff..2864ee4644 100644 --- a/include/roulette_util.h +++ b/include/roulette_util.h @@ -33,34 +33,37 @@ struct PulseBlend struct PulseBlendPalette pulseBlendPalettes[16]; }; -struct UnkStruct1 + +#define FLASHUTIL_USE_EXISTING_COLOR (1 << 15) + +struct RouletteFlashSettings { - u16 var00; - u16 var02; - u8 var04; - u8 var05; - u8 var06; - s8 var07_0:5; - s8 var07_5:2; - s8 var07_7:1; + u16 color; + u16 paletteOffset; + u8 numColors; + u8 delay; + s8 unk6; // Set but never used + s8 numFadeCycles:5; + s8 unk7_5:2; // Set but never used + s8 colorDeltaDir:1; }; -struct UnkStruct3 +struct RouletteFlashPalette { - u8 var00_0:7; - bool8 active:1; - u8 var01; - s8 var02; - s8 var03; - struct UnkStruct1 var04; + u8 state:7; + bool8 available:1; + u8 delayCounter; + s8 fadeCycleCounter; + s8 colorDelta; + struct RouletteFlashSettings settings; }; -struct UnkStruct0 +struct RouletteFlashUtil { - u8 var00; - u8 var01; - u16 var02; //flag for each UnkStruct3 - struct UnkStruct3 var04[0x10]; + u8 enabled; + u8 unused; + u16 flags; + struct RouletteFlashPalette palettes[16]; }; int InitPulseBlendPaletteSettings(struct PulseBlend *, const struct PulseBlendSettings *); @@ -71,10 +74,10 @@ void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UpdatePulseBlend(struct PulseBlend *); void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); -void task_tutorial_controls_fadein(struct UnkStruct0 *r0); -void sub_8151678(struct UnkStruct0 *r0); -u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2); -void sub_8151A9C(struct UnkStruct0 *r0, u16 r1); -void sub_8151A48(struct UnkStruct0 *r0, u16 r1); +void RouletteFlash_Run(struct RouletteFlashUtil *r0); +void RouletteFlash_Reset(struct RouletteFlashUtil *r0); +u8 RouletteFlash_Add(struct RouletteFlashUtil *r0, u8 r1, const struct RouletteFlashSettings *r2); +void RouletteFlash_Stop(struct RouletteFlashUtil *r0, u16 r1); +void RouletteFlash_Enable(struct RouletteFlashUtil *r0, u16 r1); #endif // GUARD_ROULETTE_UTIL_H diff --git a/src/roulette.c b/src/roulette.c index cc14a67cd1..0923ea2d3c 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -100,6 +100,26 @@ #define F_PURPLE_SKITTY (1 << SQU_PURPLE_SKITTY) #define F_PURPLE_MAKUHITA (1 << SQU_PURPLE_MAKUHITA) +// Flags for flashing selections on the roulette wheel +#define F_FLASH_COLOR_O_WYNAUT (1 << 0) +#define F_FLASH_COLOR_G_AZURILL (1 << 1) +#define F_FLASH_COLOR_P_SKITTY (1 << 2) +#define F_FLASH_COLOR_O_MAKUHITA (1 << 3) +#define F_FLASH_COLOR_G_WYNAUT (1 << 4) +#define F_FLASH_COLOR_P_AZURILL (1 << 5) +#define F_FLASH_COLOR_O_SKITTY (1 << 6) +#define F_FLASH_COLOR_G_MAKUHITA (1 << 7) +#define F_FLASH_COLOR_P_WYNAUT (1 << 8) +#define F_FLASH_COLOR_O_AZURILL (1 << 9) +#define F_FLASH_COLOR_G_SKITTY (1 << 10) +#define F_FLASH_COLOR_P_MAKUHITA (1 << 11) +#define F_FLASH_OUTER_EDGES (1 << 12) // when the player wins +#define FLASH_ICON (NUM_ROULETTE_SLOTS + 1) +#define FLASH_ICON_2 (FLASH_ICON + 1) +#define FLASH_ICON_3 (FLASH_ICON + 2) +#define F_FLASH_ICON (1 << FLASH_ICON) +#define F_FLASH_COLUMN (1 << FLASH_ICON | 1 << FLASH_ICON_2 | 1 << FLASH_ICON_3) + #define MAX_MULTIPLIER 12 #define PALTAG_SHADOW 1 @@ -271,7 +291,7 @@ struct GridSelection u8 tilemapOffset; u32 flag; u32 inSelectionFlags; - u16 var10; + u16 flashFlags; }; struct RouletteSlot @@ -336,7 +356,7 @@ static EWRAM_DATA struct Roulette TaskFunc nextTask; u8 filler_2[4]; TaskFunc prevTask; - struct UnkStruct0 flashUtil; + struct RouletteFlashUtil flashUtil; u16 tilemapBuffers[7][0x400]; u16 *gridTilemap; } *sRoulette = NULL; @@ -461,7 +481,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 0, .flag = 0, .inSelectionFlags = 0, - .var10 = 0x0, + .flashFlags = 0, }, [COL_WYNAUT] = { .spriteIdOffset = 12, @@ -474,7 +494,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 0, .flag = F_WYNAUT_COL, .inSelectionFlags = F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT, - .var10 = 0xE000, + .flashFlags = F_FLASH_COLUMN, }, [COL_AZURILL] = { .spriteIdOffset = 13, @@ -487,7 +507,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 0, .flag = F_AZURILL_COL, .inSelectionFlags = F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL, - .var10 = 0xE000, + .flashFlags = F_FLASH_COLUMN, }, [COL_SKITTY] = { .spriteIdOffset = 14, @@ -500,7 +520,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 0, .flag = F_SKITTY_COL, .inSelectionFlags = F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY, - .var10 = 0xE000, + .flashFlags = F_FLASH_COLUMN, }, [COL_MAKUHITA] = { .spriteIdOffset = 15, @@ -513,7 +533,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 0, .flag = F_MAKUHITA_COL, .inSelectionFlags = F_MAKUHITA_COL | F_ORANGE_MAKUHITA | F_GREEN_MAKUHITA | F_PURPLE_MAKUHITA, - .var10 = 0xE000, + .flashFlags = F_FLASH_COLUMN, }, [ROW_ORANGE] = { .spriteIdOffset = 16, @@ -526,7 +546,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 12, .flag = F_ORANGE_ROW, .inSelectionFlags = F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA, - .var10 = 0x249, + .flashFlags = F_FLASH_COLOR_O_WYNAUT | F_FLASH_COLOR_O_AZURILL | F_FLASH_COLOR_O_SKITTY | F_FLASH_COLOR_O_MAKUHITA, }, [SQU_ORANGE_WYNAUT] = { .spriteIdOffset = 0, @@ -539,7 +559,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 3, .flag = F_ORANGE_WYNAUT, .inSelectionFlags = F_ORANGE_WYNAUT, - .var10 = 0x2001, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_WYNAUT, }, [SQU_ORANGE_AZURILL] = { .spriteIdOffset = 9, @@ -552,7 +572,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 3, .flag = F_ORANGE_AZURILL, .inSelectionFlags = F_ORANGE_AZURILL, - .var10 = 0x2200, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_AZURILL, }, [SQU_ORANGE_SKITTY] = { .spriteIdOffset = 6, @@ -565,7 +585,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 3, .flag = F_ORANGE_SKITTY, .inSelectionFlags = F_ORANGE_SKITTY, - .var10 = 0x2040, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_SKITTY, }, [SQU_ORANGE_MAKUHITA] = { .spriteIdOffset = 3, @@ -578,7 +598,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 3, .flag = F_ORANGE_MAKUHITA, .inSelectionFlags = F_ORANGE_MAKUHITA, - .var10 = 0x2008, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_MAKUHITA, }, [ROW_GREEN] = { .spriteIdOffset = 17, @@ -591,7 +611,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 15, .flag = F_GREEN_ROW, .inSelectionFlags = F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA, - .var10 = 0x492, + .flashFlags = F_FLASH_COLOR_G_WYNAUT | F_FLASH_COLOR_G_AZURILL | F_FLASH_COLOR_G_SKITTY | F_FLASH_COLOR_G_MAKUHITA, }, [SQU_GREEN_WYNAUT] = { .spriteIdOffset = 4, @@ -604,7 +624,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 6, .flag = F_GREEN_WYNAUT, .inSelectionFlags = F_GREEN_WYNAUT, - .var10 = 0x2010, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_WYNAUT, }, [SQU_GREEN_AZURILL] = { .spriteIdOffset = 1, @@ -617,7 +637,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 6, .flag = F_GREEN_AZURILL, .inSelectionFlags = F_GREEN_AZURILL, - .var10 = 0x2002, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_AZURILL, }, [SQU_GREEN_SKITTY] = { .spriteIdOffset = 10, @@ -630,7 +650,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 6, .flag = F_GREEN_SKITTY, .inSelectionFlags = F_GREEN_SKITTY, - .var10 = 0x2400, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_SKITTY, }, [SQU_GREEN_MAKUHITA] = { .spriteIdOffset = 7, @@ -643,7 +663,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 6, .flag = F_GREEN_MAKUHITA, .inSelectionFlags = F_GREEN_MAKUHITA, - .var10 = 0x2080, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_MAKUHITA, }, [ROW_PURPLE] = { .spriteIdOffset = 18, @@ -656,7 +676,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 18, .flag = F_PURPLE_ROW, .inSelectionFlags = F_PURPLE_ROW | F_PURPLE_WYNAUT | F_PURPLE_AZURILL | F_PURPLE_SKITTY | F_PURPLE_MAKUHITA, - .var10 = 0x924, + .flashFlags = F_FLASH_COLOR_P_WYNAUT | F_FLASH_COLOR_P_AZURILL | F_FLASH_COLOR_P_SKITTY | F_FLASH_COLOR_P_MAKUHITA, }, [SQU_PURPLE_WYNAUT] = { .spriteIdOffset = 8, @@ -669,7 +689,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 9, .flag = F_PURPLE_WYNAUT, .inSelectionFlags = F_PURPLE_WYNAUT, - .var10 = 0x2100, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_WYNAUT, }, [SQU_PURPLE_AZURILL] = { .spriteIdOffset = 5, @@ -682,7 +702,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 9, .flag = F_PURPLE_AZURILL, .inSelectionFlags = F_PURPLE_AZURILL, - .var10 = 0x2020, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_AZURILL, }, [SQU_PURPLE_SKITTY] = { .spriteIdOffset = 2, @@ -695,7 +715,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 9, .flag = F_PURPLE_SKITTY, .inSelectionFlags = F_PURPLE_SKITTY, - .var10 = 0x2004, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_SKITTY, }, [SQU_PURPLE_MAKUHITA] = { .spriteIdOffset = 11, @@ -708,7 +728,7 @@ static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = .tilemapOffset = 9, .flag = F_PURPLE_MAKUHITA, .inSelectionFlags = F_PURPLE_MAKUHITA, - .var10 = 0x2800, + .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_MAKUHITA, }, }; @@ -835,171 +855,174 @@ static const struct RouletteTable sRouletteTables[] = } }; -static const struct UnkStruct1 gUnknown_085B6388[NUM_ROULETTE_SLOTS + 1] = +// Data to flash the color indicator for each slot on the roulette wheel +static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + 1] = { - { - .var00 = 0x8000, - .var02 = 0x0005, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_O_WYNAUT + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x5, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x000A, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_G_AZURILL + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0xA, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x0015, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_P_SKITTY + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x15, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x0055, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_O_MAKUHITA + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x55, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x005A, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_G_WYNAUT + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x5A, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x0065, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_P_AZURILL + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x65, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x0075, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_O_SKITTY + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x75, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x007A, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_G_MAKUHITA + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x7A, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x0085, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_P_WYNAUT + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x85, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x0095, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_O_AZURILL + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x95, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x009A, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_G_SKITTY + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0x9A, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x8000, - .var02 = 0x00A5, - .var04 = 1, - .var05 = 1, - .var06 = 0xFF, - .var07_0 = 8, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_COLOR_P_MAKUHITA + .color = FLASHUTIL_USE_EXISTING_COLOR, + .paletteOffset = 0xA5, + .numColors = 1, + .delay = 1, + .unk6 = -1, + .numFadeCycles = 8, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x77D6, - .var02 = 0x0028, - .var04 = 2, - .var05 = 10, - .var06 = 0xFF, - .var07_0 = 14, - .var07_5 = -2, - .var07_7 = 0 + { // F_FLASH_OUTER_EDGES + .color = RGB(22, 30, 29), + .paletteOffset = 0x28, + .numColors = 2, + .delay = 10, + .unk6 = -1, + .numFadeCycles = 14, + .unk7_5 = -2, + .colorDeltaDir = 0, }, }; -static const struct UnkStruct1 gUnknown_085B63F0[NUM_BOARD_COLORS] = +// Data to flash any pokemon icon (F_FLASH_ICON) on the roulette wheel. One entry for each color row +// Each poke icon flashes with the tint of the row color it belongs to, so the pokemon itself is irrelevant +static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] = { - { - .var00 = 0x53FF, - .var02 = 0x0101, - .var04 = 5, - .var05 = 30, - .var06 = 0xFF, - .var07_0 = 14, - .var07_5 = -2, - .var07_7 = 0 + [GET_ROW_IDX(ROW_ORANGE)] = { + .color = RGB(31, 31, 20), + .paletteOffset = 0x101, + .numColors = 5, + .delay = 30, + .unk6 = -1, + .numFadeCycles = 14, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x7FFB, - .var02 = 0x0106, - .var04 = 5, - .var05 = 30, - .var06 = 0xFF, - .var07_0 = 14, - .var07_5 = -2, - .var07_7 = 0 + [GET_ROW_IDX(ROW_GREEN)] = { + .color = RGB(27, 31, 31), + .paletteOffset = 0x106, + .numColors = 5, + .delay = 30, + .unk6 = -1, + .numFadeCycles = 14, + .unk7_5 = -2, + .colorDeltaDir = 0, }, - { - .var00 = 0x7F7F, - .var02 = 0x010B, - .var04 = 5, - .var05 = 30, - .var06 = 0xFF, - .var07_0 = 14, - .var07_5 = -2, - .var07_7 = 0 + [GET_ROW_IDX(ROW_PURPLE)] = { + .color = RGB(31, 27, 31), + .paletteOffset = 0x10B, + .numColors = 5, + .delay = 30, + .unk6 = -1, + .numFadeCycles = 14, + .unk7_5 = -2, + .colorDeltaDir = 0, } }; @@ -1020,8 +1043,8 @@ static void CB2_Roulette(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - if (sRoulette->flashUtil.var00) - task_tutorial_controls_fadein(&sRoulette->flashUtil); + if (sRoulette->flashUtil.enabled) + RouletteFlash_Run(&sRoulette->flashUtil); } static void VBlankCB_Roulette(void) @@ -1110,12 +1133,13 @@ static void InitRouletteTableData(void) else gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[1]; - sub_8151678(&sRoulette->flashUtil); + RouletteFlash_Reset(&sRoulette->flashUtil); // Init flash util for flashing the selected colors on the wheel + // + 1 for the additional entry to flash the outer edges on a win for (i = 0; i < NUM_ROULETTE_SLOTS + 1; i++) { - sub_815168C(&sRoulette->flashUtil, i, &gUnknown_085B6388[i]); + RouletteFlash_Add(&sRoulette->flashUtil, i, &sFlashData_Colors[i]); } for (i = 0; i < PARTY_SIZE; i++) @@ -1421,8 +1445,8 @@ static void ProcessBetGridInput(u8 taskId) UpdateGridSelection(taskId); gTasks[taskId].data[1] = 0; PlaySE(SE_SELECT); - sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); // Reset previous flashing wheel color selection - sRoulette->flashUtil.var04[13].active = sRoulette->flashUtil.var04[14].active = sRoulette->flashUtil.var04[15].active = FALSE; // Same as above, but for icon + RouletteFlash_Stop(&sRoulette->flashUtil, 0xFFFF); + sRoulette->flashUtil.palettes[FLASH_ICON].available = sRoulette->flashUtil.palettes[FLASH_ICON_2].available = sRoulette->flashUtil.palettes[FLASH_ICON_3].available = FALSE; FlashSelectionOnWheel(gTasks[taskId].tSelectionId); // Switch all the poke (column) headers to gray outlines @@ -1680,7 +1704,7 @@ static void Task_RecordBallHit(u8 taskId) bool8 won = IsHitInBetSelection(RecordHit(taskId, sRoulette->hitSlot), sRoulette->betSelection[sRoulette->curBallNum]); gTasks[taskId].tWonBet = won; if (won == TRUE) - sub_8151A48(&sRoulette->flashUtil, 0x1000); // Flash outer edges of wheel + RouletteFlash_Enable(&sRoulette->flashUtil, F_FLASH_OUTER_EDGES); } if (gTasks[taskId].data[1] <= 60) { @@ -1853,8 +1877,8 @@ static void Task_PrintPayout(u8 taskId) static void Task_EndTurn(u8 taskId) { - sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); - sRoulette->flashUtil.var04[13].active = sRoulette->flashUtil.var04[14].active = sRoulette->flashUtil.var04[15].active = FALSE; + RouletteFlash_Stop(&sRoulette->flashUtil, 0xFFFF); + sRoulette->flashUtil.palettes[FLASH_ICON].available = sRoulette->flashUtil.palettes[FLASH_ICON_2].available = sRoulette->flashUtil.palettes[FLASH_ICON_3].available = FALSE; gSprites[sRoulette->spriteIds[SPR_WHEEL_ICONS + sGridSelections[gTasks[taskId].tWinningSquare].spriteIdOffset]].invisible = TRUE; gTasks[taskId].func = Task_TryPrintEndTurnMsg; } @@ -1937,8 +1961,8 @@ static void Task_ClearBoard(u8 taskId) static void ExitRoulette(u8 taskId) { - sub_8151A9C(&sRoulette->flashUtil, 0xFFFF); - sub_8151678(&sRoulette->flashUtil); + RouletteFlash_Stop(&sRoulette->flashUtil, 0xFFFF); + RouletteFlash_Reset(&sRoulette->flashUtil); SetCoins(gTasks[taskId].tCoins); if (GetCoins() < sRoulette->minBet) gSpecialVar_0x8004 = TRUE; @@ -2108,9 +2132,9 @@ static bool8 IsHitInBetSelection(u8 gridSquare, u8 betSelection) static void FlashSelectionOnWheel(u8 selectionId) { - u16 var0 = 0; + u16 flashFlags = 0; u8 numSelected; - u16 var3; + u16 palOffset; u8 i; switch (selectionId) @@ -2122,47 +2146,46 @@ static void FlashSelectionOnWheel(u8 selectionId) for (i = (selectionId + 1); i < (selectionId + 5); i++) { if (!(sRoulette->hitFlags & sGridSelections[i].flag)) - var0 |= sGridSelections[i].var10; + flashFlags |= sGridSelections[i].flashFlags; } - sub_8151A48(&sRoulette->flashUtil, var0 &= 0xDFFF); + RouletteFlash_Enable(&sRoulette->flashUtil, flashFlags &= ~(F_FLASH_ICON)); break; default: { // Selection is either a column or individual square - struct UnkStruct1 var1[NUM_BOARD_COLORS]; - memcpy(var1, gUnknown_085B63F0, sizeof(var1)); + struct RouletteFlashSettings iconFlash[NUM_BOARD_COLORS]; + memcpy(iconFlash, sFlashData_PokeIcons, sizeof(iconFlash)); if (selectionId >= COL_WYNAUT && selectionId <= COL_MAKUHITA) numSelected = NUM_BOARD_COLORS; // Selection is full column else numSelected = 1; - var3 = GET_ROW_IDX(selectionId); + palOffset = GET_ROW_IDX(selectionId); switch (GET_COL(selectionId)) { - // The specific color of the poke it references doesn't matter, because the icons themelves all share a palette + // The specific color of the poke it references doesn't matter, because the icons of a poke share a palette // So it just uses the first sprite ID of each case COL_WYNAUT: - var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_WYNAUT]].oam.paletteNum * 16; + palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_WYNAUT]].oam.paletteNum * 16; break; case COL_AZURILL: - var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_GREEN_AZURILL]].oam.paletteNum * 16; + palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_GREEN_AZURILL]].oam.paletteNum * 16; break; case COL_SKITTY: - var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_PURPLE_SKITTY]].oam.paletteNum * 16; + palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_PURPLE_SKITTY]].oam.paletteNum * 16; break; case COL_MAKUHITA: - var3 = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16; + palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16; break; } if (numSelected == 1) { - // Selection is individual square + // Selection is individual square, add entry in flash util for its icon if (!(sRoulette->hitFlags & sGridSelections[selectionId].flag)) { - // Set poke icon of selected square to flash - var1[GET_ROW_IDX(selectionId)].var02 += var3; - sub_815168C(&sRoulette->flashUtil, 13, &var1[GET_ROW_IDX(selectionId)]); + iconFlash[GET_ROW_IDX(selectionId)].paletteOffset += palOffset; + RouletteFlash_Add(&sRoulette->flashUtil, NUM_ROULETTE_SLOTS + 1, &iconFlash[GET_ROW_IDX(selectionId)]); } else { @@ -2172,25 +2195,26 @@ static void FlashSelectionOnWheel(u8 selectionId) } else { - // Selection is full column + // Selection is full column, add entry in flash util for each unhit space's icon + // If there is only 1 unhit space, also add its flags so its color will flash as well for (i = 0; i < NUM_BOARD_COLORS; i++) { - u8 var4 = i * 5 + selectionId + 5; - if (!(sRoulette->hitFlags & sGridSelections[var4].flag)) + u8 columnSlotId = i * 5 + selectionId + 5; + if (!(sRoulette->hitFlags & sGridSelections[columnSlotId].flag)) { - // Set poke icons of selected squares to flash - var1[GET_ROW_IDX(var4)].var02 += var3; - sub_815168C(&sRoulette->flashUtil, i + 13, &var1[GET_ROW_IDX(var4)]); + iconFlash[GET_ROW_IDX(columnSlotId)].paletteOffset += palOffset; + RouletteFlash_Add(&sRoulette->flashUtil, i + NUM_ROULETTE_SLOTS + 1, &iconFlash[GET_ROW_IDX(columnSlotId)]); if (numSelected == 3) - var0 = sGridSelections[var4].var10; + flashFlags = sGridSelections[columnSlotId].flashFlags; numSelected--; } } + // If there was more than 1 space in the column, reset flags; only icons will flash if (numSelected != 2) - var0 = 0; + flashFlags = 0; } // Do flash - sub_8151A48(&sRoulette->flashUtil, var0 |= sGridSelections[selectionId].var10); + RouletteFlash_Enable(&sRoulette->flashUtil, flashFlags |= sGridSelections[selectionId].flashFlags); break; } } diff --git a/src/roulette_util.c b/src/roulette_util.c index ab20e55839..15a0c5bba1 100755 --- a/src/roulette_util.c +++ b/src/roulette_util.c @@ -1,212 +1,217 @@ #include "global.h" #include "palette.h" -#include "roulette.h" #include "roulette_util.h" #include "util.h" -// "Roulette Util" is perhaps more accurately a general flashing util -// e.g. it handles fading the palettes for the color selections on the Roulette wheel +// "RouletteFlash" is more accurately a general flashing/fading util +// this file handles fading the palettes for the color/icon selections on the Roulette wheel // but it also handles the "pulse blend" effect of Mirage Tower -void sub_8151678(struct UnkStruct0 *r0) +void RouletteFlash_Reset(struct RouletteFlashUtil *flash) { - r0->var00 = 0; - r0->var02 = 0; - memset(&r0->var04, 0, sizeof(r0->var04)); + flash->enabled = 0; + flash->flags = 0; + memset(&flash->palettes, 0, sizeof(flash->palettes)); } -u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2) +u8 RouletteFlash_Add(struct RouletteFlashUtil *flash, u8 id, const struct RouletteFlashSettings *settings) { - if (!(r1 < 16) || (r0->var04[r1].active)) + if (id >= ARRAY_COUNT(flash->palettes) || flash->palettes[id].available) return 0xFF; - r0->var04[r1].var04.var00 = r2->var00; - r0->var04[r1].var04.var02 = r2->var02; - r0->var04[r1].var04.var04 = r2->var04; - r0->var04[r1].var04.var05 = r2->var05; - r0->var04[r1].var04.var06 = r2->var06; - r0->var04[r1].var04.var07_0 = r2->var07_0; - r0->var04[r1].var04.var07_5 = r2->var07_5; - r0->var04[r1].var04.var07_7 = r2->var07_7; - r0->var04[r1].var00_0 = 0; - r0->var04[r1].active = TRUE; - r0->var04[r1].var02 = 0; - r0->var04[r1].var01 = 0; - if (r0->var04[r1].var04.var07_7 < 0) - r0->var04[r1].var03 = 0xFF; + flash->palettes[id].settings.color = settings->color; + flash->palettes[id].settings.paletteOffset = settings->paletteOffset; + flash->palettes[id].settings.numColors = settings->numColors; + flash->palettes[id].settings.delay = settings->delay; + flash->palettes[id].settings.unk6 = settings->unk6; + flash->palettes[id].settings.numFadeCycles = settings->numFadeCycles; + flash->palettes[id].settings.unk7_5 = settings->unk7_5; + flash->palettes[id].settings.colorDeltaDir = settings->colorDeltaDir; + flash->palettes[id].state = 0; + flash->palettes[id].available = TRUE; + flash->palettes[id].fadeCycleCounter = 0; + flash->palettes[id].delayCounter = 0; + if (flash->palettes[id].settings.colorDeltaDir < 0) + flash->palettes[id].colorDelta = -1; else - r0->var04[r1].var03 = 1; + flash->palettes[id].colorDelta = 1; - return r1; + return id; } -u8 sub_8151710(struct UnkStruct0 *r0, u8 r1) +// Unused +static u8 RouletteFlash_Remove(struct RouletteFlashUtil *flash, u8 id) { - if (r1 >= 16) + if (id >= ARRAY_COUNT(flash->palettes)) return 0xFF; - if (!r0->var04[r1].active) + if (!flash->palettes[id].available) return 0xFF; - memset(&r0->var04[r1], 0, sizeof(r0->var04[r1])); - return r1; + memset(&flash->palettes[id], 0, sizeof(flash->palettes[id])); + return id; } -u8 sub_8151744(struct UnkStruct3 *r0) +static u8 RouletteFlash_FadePalette(struct RouletteFlashPalette *pal) { u8 i; u8 returnval; - for (i = 0; i < r0->var04.var04; i++) + for (i = 0; i < pal->settings.numColors; i++) { - struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[r0->var04.var02 + i]; - struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[r0->var04.var02 + i]; + struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[pal->settings.paletteOffset + i]; + struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[pal->settings.paletteOffset + i]; - switch (r0->var00_0) + switch (pal->state) { case 1: - if (faded->r + r0->var03 >= 0 && faded->r + r0->var03 < 32) - faded->r += r0->var03; - if (faded->g + r0->var03 >= 0 && faded->g + r0->var03 < 32) - faded->g += r0->var03; - if (faded->b + r0->var03 >= 0 && faded->b + r0->var03 < 32) - faded->b += r0->var03; + // Fade color + if (faded->r + pal->colorDelta >= 0 && faded->r + pal->colorDelta < 32) + faded->r += pal->colorDelta; + if (faded->g + pal->colorDelta >= 0 && faded->g + pal->colorDelta < 32) + faded->g += pal->colorDelta; + if (faded->b + pal->colorDelta >= 0 && faded->b + pal->colorDelta < 32) + faded->b += pal->colorDelta; break; case 2: - if (r0->var03 < 0) + // Fade back to original color + if (pal->colorDelta < 0) { - if (faded->r + r0->var03 >= unfaded->r) - faded->r += r0->var03; - if (faded->g + r0->var03 >= unfaded->g) - faded->g += r0->var03; - if (faded->b + r0->var03 >= unfaded->b) - faded->b += r0->var03; + if (faded->r + pal->colorDelta >= unfaded->r) + faded->r += pal->colorDelta; + if (faded->g + pal->colorDelta >= unfaded->g) + faded->g += pal->colorDelta; + if (faded->b + pal->colorDelta >= unfaded->b) + faded->b += pal->colorDelta; } else { - if (faded->r + r0->var03 <= unfaded->r) - faded->r += r0->var03; - if (faded->g + r0->var03 <= unfaded->g) - faded->g += r0->var03; - if (faded->b + r0->var03 <= unfaded->b) - faded->b += r0->var03; + if (faded->r + pal->colorDelta <= unfaded->r) + faded->r += pal->colorDelta; + if (faded->g + pal->colorDelta <= unfaded->g) + faded->g += pal->colorDelta; + if (faded->b + pal->colorDelta <= unfaded->b) + faded->b += pal->colorDelta; } break; } } - if ((u32)r0->var02++ != r0->var04.var07_0) + if ((u32)pal->fadeCycleCounter++ != pal->settings.numFadeCycles) { returnval = 0; } else { - r0->var02 = 0; - r0->var03 *= -1; - if (r0->var00_0 == 1) - r0->var00_0++; + pal->fadeCycleCounter = 0; + pal->colorDelta *= -1; + if (pal->state == 1) + pal->state++; else - r0->var00_0--; + pal->state--; returnval = 1; } return returnval; } -u8 sub_815194C(struct UnkStruct3 *r0) +static u8 RouletteFlash_FlashPalette(struct RouletteFlashPalette *pal) { - u8 rg2 = 0; - - switch (r0->var00_0) + u8 i = 0; + switch (pal->state) { case 1: - for (rg2 = 0; rg2 < r0->var04.var04; rg2++) - gPlttBufferFaded[r0->var04.var02 + rg2] = r0->var04.var00; - r0->var00_0++; + // Flash to color + for (; i < pal->settings.numColors; i++) + gPlttBufferFaded[pal->settings.paletteOffset + i] = pal->settings.color; + pal->state++; break; case 2: - for (rg2 = 0; rg2 < r0->var04.var04; rg2++) - gPlttBufferFaded[r0->var04.var02 + rg2] = gPlttBufferUnfaded[r0->var04.var02 + rg2]; - r0->var00_0--; + // Restore to original color + for (; i < pal->settings.numColors; i++) + gPlttBufferFaded[pal->settings.paletteOffset + i] = gPlttBufferUnfaded[pal->settings.paletteOffset + i]; + pal->state--; break; } return 1; } -void task_tutorial_controls_fadein(struct UnkStruct0 *r0) +void RouletteFlash_Run(struct RouletteFlashUtil *flash) { u8 i = 0; - if (r0->var00) + if (flash->enabled) { - for (i = 0; i < 16; i++) + for (i = 0; i < ARRAY_COUNT(flash->palettes); i++) { - if ((r0->var02 >> i) & 1) + if ((flash->flags >> i) & 1) { - if (--r0->var04[i].var01 == 0xFF) // if underflow ? + if (--flash->palettes[i].delayCounter == (u8)-1) { - if (r0->var04[i].var04.var00 & 0x8000) // PlttData->unused_15 ? - sub_8151744(&r0->var04[i]); + if (flash->palettes[i].settings.color & FLASHUTIL_USE_EXISTING_COLOR) + RouletteFlash_FadePalette(&flash->palettes[i]); else - sub_815194C(&r0->var04[i]); + RouletteFlash_FlashPalette(&flash->palettes[i]); - r0->var04[i].var01 = r0->var04[i].var04.var05; + flash->palettes[i].delayCounter = flash->palettes[i].settings.delay; } } } } } -void sub_8151A48(struct UnkStruct0 *r0, u16 flags) +void RouletteFlash_Enable(struct RouletteFlashUtil *flash, u16 flags) { u8 i = 0; - r0->var00++; - for (i = 0; i < 16; i++) + flash->enabled++; + for (i = 0; i < ARRAY_COUNT(flash->palettes); i++) { if ((flags >> i) & 1) { - if (r0->var04[i].active) + if (flash->palettes[i].available) { - r0->var02 |= 1 << i; - r0->var04[i].var00_0 = 1; + flash->flags |= 1 << i; + flash->palettes[i].state = 1; } } } } -void sub_8151A9C(struct UnkStruct0 *r0, u16 flags) +void RouletteFlash_Stop(struct RouletteFlashUtil *flash, u16 flags) { u8 i; - for (i = 0; i < 16; i++) + for (i = 0; i < ARRAY_COUNT(flash->palettes); i++) { - if ((r0->var02 >> i) & 1) + if ((flash->flags >> i) & 1) { - if (r0->var04[i].active) + if (flash->palettes[i].available) { if ((flags >> i) & 1) { - u32 offset = r0->var04[i].var04.var02; + u32 offset = flash->palettes[i].settings.paletteOffset; u16 *faded = &gPlttBufferFaded[offset]; u16 *unfaded = &gPlttBufferUnfaded[offset]; - memcpy(faded, unfaded, r0->var04[i].var04.var04 * 2); - r0->var04[i].var00_0 = 0; - r0->var04[i].var02 = 0; - r0->var04[i].var01 = 0; - if (r0->var04[i].var04.var07_7 < 0) - r0->var04[i].var03 = 0xFF; + memcpy(faded, unfaded, flash->palettes[i].settings.numColors * 2); + flash->palettes[i].state = 0; + flash->palettes[i].fadeCycleCounter = 0; + flash->palettes[i].delayCounter = 0; + if (flash->palettes[i].settings.colorDeltaDir < 0) + flash->palettes[i].colorDelta = -1; else - r0->var04[i].var03 = 0x1; + flash->palettes[i].colorDelta = 1; } } } } + if (flags == 0xFFFF) { - r0->var00 = 0; - r0->var02 = 0; + // Stopped all + flash->enabled = 0; + flash->flags = 0; } else { - r0->var02 = r0->var02 & ~flags; + flash->flags &= ~flags; } } From f8f6575360e6ef4c27a5b65dcbda342ec9665f32 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 4 Aug 2020 19:24:36 -0400 Subject: [PATCH 43/85] Rename roulette_util to palette_util --- include/{roulette_util.h => palette_util.h} | 6 +++--- ld_script.txt | 2 +- src/mirage_tower.c | 2 +- src/{roulette_util.c => palette_util.c} | 2 +- src/roulette.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) rename include/{roulette_util.h => palette_util.h} (95%) rename src/{roulette_util.c => palette_util.c} (99%) diff --git a/include/roulette_util.h b/include/palette_util.h similarity index 95% rename from include/roulette_util.h rename to include/palette_util.h index 2864ee4644..46468c0a6a 100644 --- a/include/roulette_util.h +++ b/include/palette_util.h @@ -1,5 +1,5 @@ -#ifndef GUARD_ROULETTE_UTIL_H -#define GUARD_ROULETTE_UTIL_H +#ifndef GUARD_PALETTE_UTIL_H +#define GUARD_PALETTE_UTIL_H struct PulseBlendSettings { @@ -80,4 +80,4 @@ u8 RouletteFlash_Add(struct RouletteFlashUtil *r0, u8 r1, const struct RouletteF void RouletteFlash_Stop(struct RouletteFlashUtil *r0, u16 r1); void RouletteFlash_Enable(struct RouletteFlashUtil *r0, u16 r1); -#endif // GUARD_ROULETTE_UTIL_H +#endif // GUARD_PALETTE_UTIL_H diff --git a/ld_script.txt b/ld_script.txt index f3e418c080..724f01328d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -237,7 +237,7 @@ SECTIONS { src/battle_message.o(.text); src/cable_car.o(.text); src/math_util.o(.text); - src/roulette_util.o(.text); + src/palette_util.o(.text); src/confetti_util.o(.text); src/save.o(.text); src/mystery_event_script.o(.text); diff --git a/src/mirage_tower.c b/src/mirage_tower.c index c1323c7840..02cccf2a5b 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -8,7 +8,7 @@ #include "gpu_regs.h" #include "menu.h" #include "random.h" -#include "roulette_util.h" +#include "palette_util.h" #include "script.h" #include "sound.h" #include "sprite.h" diff --git a/src/roulette_util.c b/src/palette_util.c similarity index 99% rename from src/roulette_util.c rename to src/palette_util.c index 15a0c5bba1..5364ff6d98 100755 --- a/src/roulette_util.c +++ b/src/palette_util.c @@ -1,6 +1,6 @@ #include "global.h" #include "palette.h" -#include "roulette_util.h" +#include "palette_util.h" #include "util.h" // "RouletteFlash" is more accurately a general flashing/fading util diff --git a/src/roulette.c b/src/roulette.c index 0923ea2d3c..b3e07233a7 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -13,9 +13,9 @@ #include "menu_helpers.h" #include "overworld.h" #include "palette.h" +#include "palette_util.h" #include "random.h" #include "roulette.h" -#include "roulette_util.h" #include "rtc.h" #include "scanline_effect.h" #include "script.h" From 5e8ffff62f6d4c7e4e2b62852eec14c086dc488e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 4 Aug 2020 20:33:05 -0400 Subject: [PATCH 44/85] Add stat stage constants --- data/battle_ai_scripts.s | 108 +++++++++++++++++------------------ data/battle_scripts_1.s | 56 +++++++++--------- include/constants/pokemon.h | 4 ++ include/pokemon.h | 2 +- src/battle_ai_switch_items.c | 4 +- src/battle_main.c | 6 +- src/battle_message.c | 16 +++--- src/battle_script_commands.c | 44 +++++++------- src/battle_tv.c | 4 +- src/battle_util.c | 36 +++++++----- src/pokemon.c | 50 ++++++++-------- 11 files changed, 170 insertions(+), 160 deletions(-) diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index e33ba431da..1c7bff51c8 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -249,64 +249,64 @@ AI_CBM_BellyDrum: @ 82DC341 if_hp_less_than AI_USER, 51, Score_Minus10 AI_CBM_AttackUp: @ 82DC348 - if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 + if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 end AI_CBM_DefenseUp: @ 82DC351 - if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10 + if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus10 end AI_CBM_SpeedUp: @ 82DC35A - if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus10 + if_stat_level_equal AI_USER, STAT_SPEED, MAX_STAT_STAGE, Score_Minus10 end AI_CBM_SpAtkUp: @ 82DC363 - if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10 + if_stat_level_equal AI_USER, STAT_SPATK, MAX_STAT_STAGE, Score_Minus10 end AI_CBM_SpDefUp: @ 82DC36C - if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus10 + if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus10 end AI_CBM_AccUp: @ 82DC375 - if_stat_level_equal AI_USER, STAT_ACC, 12, Score_Minus10 + if_stat_level_equal AI_USER, STAT_ACC, MAX_STAT_STAGE, Score_Minus10 end AI_CBM_EvasionUp: @ 82DC37E - if_stat_level_equal AI_USER, STAT_EVASION, 12, Score_Minus10 + if_stat_level_equal AI_USER, STAT_EVASION, MAX_STAT_STAGE, Score_Minus10 end AI_CBM_AttackDown: @ 82DC387 - if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_HYPER_CUTTER, Score_Minus10 goto CheckIfAbilityBlocksStatChange AI_CBM_DefenseDown: @ 82DC39C - if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_DEF, MIN_STAT_STAGE, Score_Minus10 goto CheckIfAbilityBlocksStatChange AI_CBM_SpeedDown: @ 82DC3A9 - if_stat_level_equal AI_TARGET, STAT_SPEED, 0, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_SPEED, MIN_STAT_STAGE, Score_Minus10 if_ability AI_TARGET, ABILITY_SPEED_BOOST, Score_Minus10 goto CheckIfAbilityBlocksStatChange AI_CBM_SpAtkDown: @ 82DC3BF - if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_SPATK, MIN_STAT_STAGE, Score_Minus10 goto CheckIfAbilityBlocksStatChange AI_CBM_SpDefDown: @ 82DC3CC - if_stat_level_equal AI_TARGET, STAT_SPDEF, 0, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_SPDEF, MIN_STAT_STAGE, Score_Minus10 goto CheckIfAbilityBlocksStatChange AI_CBM_AccDown: @ 82DC3D9 - if_stat_level_equal AI_TARGET, STAT_ACC, 0, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_ACC, MIN_STAT_STAGE, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_KEEN_EYE, Score_Minus10 goto CheckIfAbilityBlocksStatChange AI_CBM_EvasionDown: @ 82DC3EE - if_stat_level_equal AI_TARGET, STAT_EVASION, 0, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_EVASION, MIN_STAT_STAGE, Score_Minus10 CheckIfAbilityBlocksStatChange: @ 82DC3F6 get_ability AI_TARGET @@ -315,20 +315,20 @@ CheckIfAbilityBlocksStatChange: @ 82DC3F6 end AI_CBM_Haze: @ 82DC405 - if_stat_level_less_than AI_USER, STAT_ATK, 6, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_DEF, 6, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_SPEED, 6, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_SPATK, 6, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_SPDEF, 6, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_ACC, 6, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_EVASION, 6, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_ATK, 6, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_DEF, 6, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_SPEED, 6, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_SPATK, 6, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 6, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_ACC, 6, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_EVASION, 6, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_DEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_SPEED, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_SPDEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_ACC, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_DEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_SPEED, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_SPATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_SPDEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_ACC, DEFAULT_STAT_STAGE, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CBM_Haze_End goto Score_Minus10 AI_CBM_Haze_End: @ 82DC47A @@ -436,8 +436,8 @@ AI_CBM_CantEscape: @ 82DC5B0 end AI_CBM_Curse: @ 82DC5BB - if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 - if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8 + if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 + if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus8 end AI_CBM_Spikes: @ 82DC5CC @@ -484,8 +484,8 @@ AI_CBM_Safeguard: @ 82DC635 end AI_CBM_Memento: @ 82DC640 - if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10 - if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus8 + if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_SPATK, MIN_STAT_STAGE, Score_Minus8 AI_CBM_BatonPass: @ 82DC650 count_usable_party_mons AI_USER @@ -574,18 +574,18 @@ AI_CBM_MudSport: @ 82DC71E end AI_CBM_Tickle: @ 82DC729 - if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10 - if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus8 + if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10 + if_stat_level_equal AI_TARGET, STAT_DEF, MIN_STAT_STAGE, Score_Minus8 end AI_CBM_CosmicPower: @ 82DC73A - if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10 - if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8 + if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus10 + if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus8 end AI_CBM_BulkUp: @ 82DC74B - if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 - if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8 + if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 + if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus8 end AI_CBM_WaterSport: @ 82DC75C @@ -593,13 +593,13 @@ AI_CBM_WaterSport: @ 82DC75C end AI_CBM_CalmMind: @ 82DC767 - if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10 - if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8 + if_stat_level_equal AI_USER, STAT_SPATK, MAX_STAT_STAGE, Score_Minus10 + if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus8 end AI_CBM_DragonDance: @ 82DC778 - if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 - if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus8 + if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 + if_stat_level_equal AI_USER, STAT_SPEED, MAX_STAT_STAGE, Score_Minus8 end Score_Minus1: @@ -1101,7 +1101,7 @@ AI_CV_EvasionUp7: AI_CV_EvasionUp8: if_hp_more_than AI_USER, 70, AI_CV_EvasionUp_End - if_stat_level_equal AI_USER, STAT_EVASION, 6, AI_CV_EvasionUp_End + if_stat_level_equal AI_USER, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CV_EvasionUp_End if_hp_less_than AI_USER, 40, AI_CV_EvasionUp_ScoreDown2 if_hp_less_than AI_TARGET, 40, AI_CV_EvasionUp_ScoreDown2 if_random_less_than 70, AI_CV_EvasionUp_End @@ -1130,7 +1130,7 @@ AI_CV_AlwaysHit_End: end AI_CV_AttackDown: @ 82DCDF8 - if_stat_level_equal AI_TARGET, STAT_ATK, 6, AI_CV_AttackDown3 + if_stat_level_equal AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_AttackDown3 score -1 if_hp_more_than AI_USER, 90, AI_CV_AttackDown2 score -1 @@ -1198,7 +1198,7 @@ AI_CV_SpeedDown_End: @ 82DCE96 end AI_CV_SpAtkDown: - if_stat_level_equal AI_TARGET, STAT_ATK, 6, AI_CV_SpAtkDown3 + if_stat_level_equal AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_SpAtkDown3 score -1 if_hp_more_than AI_USER, 90, AI_CV_SpAtkDown2 score -1 @@ -1284,7 +1284,7 @@ AI_CV_AccuracyDown7: AI_CV_AccuracyDown8: if_hp_more_than AI_USER, 70, AI_CV_AccuracyDown_End - if_stat_level_equal AI_TARGET, STAT_ACC, 6, AI_CV_AccuracyDown_End + if_stat_level_equal AI_TARGET, STAT_ACC, DEFAULT_STAT_STAGE, AI_CV_AccuracyDown_End if_hp_less_than AI_USER, 40, AI_CV_AccuracyDown_ScoreDown2 if_hp_less_than AI_TARGET, 40, AI_CV_AccuracyDown_ScoreDown2 if_random_less_than 70, AI_CV_AccuracyDown_End @@ -1997,7 +1997,7 @@ AI_CV_Curse2: score +1 AI_CV_Curse3: - if_stat_level_more_than AI_USER, STAT_DEF, 6, AI_CV_Curse_End + if_stat_level_more_than AI_USER, STAT_DEF, DEFAULT_STAT_STAGE, AI_CV_Curse_End if_random_less_than 128, AI_CV_Curse_End score +1 goto AI_CV_Curse_End @@ -2518,7 +2518,7 @@ AI_CV_ChangeSelfAbility_AbilitiesToEncourage: AI_CV_Superpower: if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Superpower_ScoreDown1 if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Superpower_ScoreDown1 - if_stat_level_less_than AI_USER, STAT_ATK, 6, AI_CV_Superpower_ScoreDown1 + if_stat_level_less_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_Superpower_ScoreDown1 if_target_faster AI_CV_Superpower2 if_hp_more_than AI_USER, 40, AI_CV_Superpower_ScoreDown1 goto AI_CV_Superpower_End @@ -2933,12 +2933,12 @@ sMovesTable_ProtectMoves: AI_PreferBatonPass_EncourageIfHighStats: get_turn_count if_equal 0, Score_Minus2 - if_stat_level_more_than AI_USER, STAT_ATK, 8, Score_Plus3 - if_stat_level_more_than AI_USER, STAT_ATK, 7, Score_Plus2 - if_stat_level_more_than AI_USER, STAT_ATK, 6, Score_Plus1 - if_stat_level_more_than AI_USER, STAT_SPATK, 8, Score_Plus3 - if_stat_level_more_than AI_USER, STAT_SPATK, 7, Score_Plus2 - if_stat_level_more_than AI_USER, STAT_SPATK, 6, Score_Plus1 + if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE + 2, Score_Plus3 + if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE + 1, Score_Plus2 + if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, Score_Plus1 + if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE + 2, Score_Plus3 + if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE + 1, Score_Plus2 + if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE, Score_Plus1 end AI_PreferBatonPassEnd: diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 273b3d028f..f0c0a7ea85 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1504,9 +1504,9 @@ BattleScript_EffectCurse:: attackcanceler attackstring ppreduce - jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, 0x0, BattleScript_CurseTrySpeed - jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, 0xC, BattleScript_CurseTrySpeed - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, 0xC, BattleScript_ButItFailed + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, MIN_STAT_STAGE, BattleScript_CurseTrySpeed + jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CurseTrySpeed + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_ButItFailed BattleScript_CurseTrySpeed:: copybyte gBattlerTarget, gBattlerAttacker setbyte sB_ANIM_TURN, 0x1 @@ -2670,8 +2670,8 @@ BattleScript_EffectTickle:: attackcanceler attackstring ppreduce - jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, 0x0, BattleScript_TickleDoMoveAnim - jumpifstat BS_TARGET, CMP_EQUAL, STAT_DEF, 0x0, BattleScript_CantLowerMultipleStats + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_TickleDoMoveAnim + jumpifstat BS_TARGET, CMP_EQUAL, STAT_DEF, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats BattleScript_TickleDoMoveAnim:: accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE attackanimation @@ -2705,8 +2705,8 @@ BattleScript_EffectCosmicPower:: attackcanceler attackstring ppreduce - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, 0xC, BattleScript_CosmicPowerDoMoveAnim - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0xC, BattleScript_CantRaiseMultipleStats + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_CosmicPowerDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_CosmicPowerDoMoveAnim:: attackanimation waitanimation @@ -2734,8 +2734,8 @@ BattleScript_EffectBulkUp:: attackcanceler attackstring ppreduce - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_BulkUpDoMoveAnim - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, 0xC, BattleScript_CantRaiseMultipleStats + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_BulkUpDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_BulkUpDoMoveAnim:: attackanimation waitanimation @@ -2759,8 +2759,8 @@ BattleScript_EffectCalmMind:: attackcanceler attackstring ppreduce - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, 0xC, BattleScript_CalmMindDoMoveAnim - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0xC, BattleScript_CantRaiseMultipleStats + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CalmMindDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_CalmMindDoMoveAnim:: attackanimation waitanimation @@ -2791,8 +2791,8 @@ BattleScript_EffectDragonDance:: attackcanceler attackstring ppreduce - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_DragonDanceDoMoveAnim - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, 0xC, BattleScript_CantRaiseMultipleStats + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_DragonDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_DragonDanceDoMoveAnim:: attackanimation waitanimation @@ -3047,13 +3047,13 @@ BattleScript_FrontierTrainerBattleWon_LoseTexts: trainerslidein BS_ATTACKER waitstate printstring STRINGID_TRAINER1LOSETEXT - jumpifnotbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_82DAACB + jumpifnotbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_TryPickUpItems trainerslideout B_POSITION_OPPONENT_LEFT waitstate trainerslidein BS_FAINTED waitstate printstring STRINGID_TRAINER2LOSETEXT -BattleScript_82DAACB: +BattleScript_TryPickUpItems: jumpifnotbattletype BATTLE_TYPE_PYRAMID, BattleScript_FrontierTrainerBattleWon_End pickup BattleScript_FrontierTrainerBattleWon_End: @@ -3462,11 +3462,11 @@ BattleScript_PerishSongCountGoesDown:: end2 BattleScript_AllStatsUp:: - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_AllStatsUpAtk - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, 0xC, BattleScript_AllStatsUpAtk - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, 0xC, BattleScript_AllStatsUpAtk - jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, 0xC, BattleScript_AllStatsUpAtk - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0xC, BattleScript_AllStatsUpRet + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_AllStatsUpRet BattleScript_AllStatsUpAtk:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0 @@ -3638,18 +3638,18 @@ BattleScript_AtkDefDown:: playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS playstatchangeanimation BS_ATTACKER, BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_82DB144 - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB144 + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_AtkDefDown_TryDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AtkDefDown_TryDef printfromtable gStatDownStringIds waitmessage 0x40 -BattleScript_82DB144:: +BattleScript_AtkDefDown_TryDef:: playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_82DB167 - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB167 + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_AtkDefDown_End + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AtkDefDown_End printfromtable gStatDownStringIds waitmessage 0x40 -BattleScript_82DB167:: +BattleScript_AtkDefDown_End:: return BattleScript_KnockedOff:: @@ -4017,10 +4017,10 @@ BattleScript_WeatherFormChangesLoop:: return BattleScript_CastformChange:: - call BattleScript_82DB4AF + call BattleScript_DoCastformChange end3 -BattleScript_82DB4AF:: +BattleScript_DoCastformChange:: docastformchangeanimation waitstate printstring STRINGID_PKMNTRANSFORMED diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 0d8fc6a571..286726838b 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -84,6 +84,10 @@ #define NUM_NATURE_STATS NUM_STATS - 1 // excludes HP #define NUM_BATTLE_STATS NUM_STATS + 2 // includes Accuracy and Evasion +#define MIN_STAT_STAGE 0 +#define DEFAULT_STAT_STAGE 6 +#define MAX_STAT_STAGE 12 + // Shiny odds #define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536 diff --git a/include/pokemon.h b/include/pokemon.h index 69ef7a142b..d75ec94f30 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -254,7 +254,7 @@ extern const u16 *const gLevelUpLearnsets[]; extern const u8 gPPUpGetMask[]; extern const u8 gPPUpSetMask[]; extern const u8 gPPUpAddMask[]; -extern const u8 gStatStageRatios[][2]; +extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2]; extern const u16 gLinkPlayerFacilityClasses[]; extern const struct SpriteTemplate gUnknown_08329D98[]; extern const s8 gNatureStatTable[][5]; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 32f9620b7d..2a5a83e0d7 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -314,8 +314,8 @@ static bool8 AreStatsRaised(void) for (i = 0; i < NUM_BATTLE_STATS; i++) { - if (gBattleMons[gActiveBattler].statStages[i] > 6) - buffedStatsValue += gBattleMons[gActiveBattler].statStages[i] - 6; + if (gBattleMons[gActiveBattler].statStages[i] > DEFAULT_STAT_STAGE) + buffedStatsValue += gBattleMons[gActiveBattler].statStages[i] - DEFAULT_STAT_STAGE; } return (buffedStatsValue > 3); diff --git a/src/battle_main.c b/src/battle_main.c index 1d8aeab539..b8ebda9e47 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3135,7 +3135,7 @@ void SwitchInClearSetData(void) if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS) { for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; for (i = 0; i < gBattlersCount; i++) { if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == gActiveBattler) @@ -3244,7 +3244,7 @@ void FaintClearSetData(void) u8 *ptr; for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[gActiveBattler].status2 = 0; gStatuses3[gActiveBattler] = 0; @@ -3398,7 +3398,7 @@ static void BattleIntroDrawTrainersOrMonsSprites(void) hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)]; *hpOnSwitchout = gBattleMons[gActiveBattler].hp; for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[gActiveBattler].status2 = 0; } diff --git a/src/battle_message.c b/src/battle_message.c index cc43d1656e..2fba578dc0 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -438,14 +438,14 @@ static const u8 sText_Evasiveness[] = _("evasiveness"); const u8 * const gStatNamesTable[NUM_BATTLE_STATS] = { - [STAT_HP] = sText_HP2, - [STAT_ATK] = sText_Attack2, + [STAT_HP] = sText_HP2, + [STAT_ATK] = sText_Attack2, [STAT_DEF] = sText_Defense2, - [STAT_SPEED] = sText_Speed, - [STAT_SPATK] = sText_SpAtk2, + [STAT_SPEED] = sText_Speed, + [STAT_SPATK] = sText_SpAtk2, [STAT_SPDEF] = sText_SpDef2, - [STAT_ACC] = sText_Accuracy, - [STAT_EVASION] = sText_Evasiveness + [STAT_ACC] = sText_Accuracy, + [STAT_EVASION] = sText_Evasiveness, }; static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); @@ -456,9 +456,9 @@ static const u8 sText_PokeblockWasTooSour[] = _("was too sour!"); const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = { - [FLAVOR_SPICY] = sText_PokeblockWasTooSpicy, + [FLAVOR_SPICY] = sText_PokeblockWasTooSpicy, [FLAVOR_DRY] = sText_PokeblockWasTooDry, - [FLAVOR_SWEET] = sText_PokeblockWasTooSweet, + [FLAVOR_SWEET] = sText_PokeblockWasTooSweet, [FLAVOR_BITTER] = sText_PokeblockWasTooBitter, [FLAVOR_SOUR] = sText_PokeblockWasTooSour }; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4e0e087b60..c9c7857733 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1128,13 +1128,13 @@ static void Cmd_accuracycheck(void) else { u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC]; - buff = acc + 6 - gBattleMons[gBattlerTarget].statStages[STAT_EVASION]; + buff = acc + DEFAULT_STAT_STAGE - gBattleMons[gBattlerTarget].statStages[STAT_EVASION]; } - if (buff < 0) - buff = 0; - if (buff > 0xC) - buff = 0xC; + if (buff < MIN_STAT_STAGE) + buff = MIN_STAT_STAGE; + if (buff > MAX_STAT_STAGE) + buff = MAX_STAT_STAGE; moveAcc = gBattleMoves[move].accuracy; // check Thunder on sunny weather @@ -3500,7 +3500,7 @@ static void Cmd_unknown_24(void) if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER) { - for (i = 0; i < 3; i++) + for (i = 0; i < MULTI_PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); @@ -4385,7 +4385,7 @@ static void Cmd_playstatchangeanimation(void) { if (gBattlescriptCurrInstr[3] & STAT_CHANGE_CANT_PREVENT) { - if (gBattleMons[gActiveBattler].statStages[currStat] > 0) + if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE) { statAnimId = startingStatAnimId + currStat; changeableStatsCount++; @@ -4397,7 +4397,7 @@ static void Cmd_playstatchangeanimation(void) && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC) && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK)) { - if (gBattleMons[gActiveBattler].statStages[currStat] > 0) + if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE) { statAnimId = startingStatAnimId + currStat; changeableStatsCount++; @@ -4425,7 +4425,7 @@ static void Cmd_playstatchangeanimation(void) while (statsToCheck != 0) { - if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC) + if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < MAX_STAT_STAGE) { statAnimId = startingStatAnimId + currStat; changeableStatsCount++; @@ -4495,7 +4495,7 @@ static void Cmd_moveend(void) && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED - && gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] <= 0xB) + && gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] < MAX_STAT_STAGE) { gBattleMons[gBattlerTarget].statStages[STAT_ATK]++; BattleScriptPushCursor(); @@ -7288,7 +7288,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) index++; gBattleTextBuff2[index] = B_BUFF_EOS; - if (gBattleMons[gActiveBattler].statStages[statId] == 0) + if (gBattleMons[gActiveBattler].statStages[statId] == MIN_STAT_STAGE) gBattleCommunication[MULTISTRING_CHOOSER] = 2; else gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); @@ -7315,17 +7315,17 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) index++; gBattleTextBuff2[index] = B_BUFF_EOS; - if (gBattleMons[gActiveBattler].statStages[statId] == 0xC) + if (gBattleMons[gActiveBattler].statStages[statId] == MAX_STAT_STAGE) gBattleCommunication[MULTISTRING_CHOOSER] = 2; else gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); } gBattleMons[gActiveBattler].statStages[statId] += statValue; - if (gBattleMons[gActiveBattler].statStages[statId] < 0) - gBattleMons[gActiveBattler].statStages[statId] = 0; - if (gBattleMons[gActiveBattler].statStages[statId] > 0xC) - gBattleMons[gActiveBattler].statStages[statId] = 0xC; + if (gBattleMons[gActiveBattler].statStages[statId] < MIN_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[statId] = MIN_STAT_STAGE; + if (gBattleMons[gActiveBattler].statStages[statId] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[statId] = MAX_STAT_STAGE; if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_BUFF_ALLOW_PTR) gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -7350,7 +7350,7 @@ static void Cmd_normalisebuffs(void) // haze for (i = 0; i < gBattlersCount; i++) { for (j = 0; j < NUM_BATTLE_STATS; j++) - gBattleMons[i].statStages[j] = 6; + gBattleMons[i].statStages[j] = DEFAULT_STAT_STAGE; } gBattlescriptCurrInstr++; @@ -8750,7 +8750,7 @@ static void Cmd_rolloutdamagecalculation(void) static void Cmd_jumpifconfusedandstatmaxed(void) { if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION - && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 0xC) + && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == MAX_STAT_STAGE) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; @@ -8957,10 +8957,10 @@ static void Cmd_maxattackhalvehp(void) // belly drum if (!(gBattleMons[gBattlerAttacker].maxHP / 2)) halfHp = 1; - if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < 12 + if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < MAX_STAT_STAGE && gBattleMons[gBattlerAttacker].hp > halfHp) { - gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = 12; + gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = MAX_STAT_STAGE; gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -9234,8 +9234,8 @@ static void Cmd_sethail(void) static void Cmd_jumpifattackandspecialattackcannotfall(void) // memento { - if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == 0 - && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0 + if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE + && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE && gBattleCommunication[6] != 1) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); diff --git a/src/battle_tv.c b/src/battle_tv.c index 26df087864..c84ae827b0 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -1398,9 +1398,9 @@ static void TrySetBattleSeminarShow(void) return; else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) return; - else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] <= 5) + else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] < DEFAULT_STAT_STAGE) return; - else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > 6) + else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE) return; else if (gCurrentMove == MOVE_HIDDEN_POWER || gCurrentMove == MOVE_WEATHER_BALL) return; diff --git a/src/battle_util.c b/src/battle_util.c index 9cc2252b68..38d6fb18a9 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1978,7 +1978,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA } break; case ABILITY_SPEED_BOOST: - if (gBattleMons[battler].statStages[STAT_SPEED] < 0xC && gDisableStructs[battler].isFirstTurn != 2) + if (gBattleMons[battler].statStages[STAT_SPEED] < MAX_STAT_STAGE && gDisableStructs[battler].isFirstTurn != 2) { gBattleMons[battler].statStages[STAT_SPEED]++; gBattleScripting.animArg1 = 0x11; @@ -2619,9 +2619,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) case HOLD_EFFECT_RESTORE_STATS: for (i = 0; i < NUM_BATTLE_STATS; i++) { - if (gBattleMons[battlerId].statStages[i] < 6) + if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE) { - gBattleMons[battlerId].statStages[i] = 6; + gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; effect = ITEM_STATS_CHANGE; } } @@ -2690,9 +2690,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) case HOLD_EFFECT_RESTORE_STATS: for (i = 0; i < NUM_BATTLE_STATS; i++) { - if (gBattleMons[battlerId].statStages[i] < 6) + if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE) { - gBattleMons[battlerId].statStages[i] = 6; + gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; effect = ITEM_STATS_CHANGE; } } @@ -2811,7 +2811,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) break; // copy/paste again, smh case HOLD_EFFECT_ATTACK_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC) + if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam + && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < MAX_STAT_STAGE) { PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE); @@ -2825,7 +2826,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_DEFENSE_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC) + if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn + && gBattleMons[battlerId].statStages[STAT_DEF] < MAX_STAT_STAGE) { PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF); @@ -2838,7 +2840,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_SPEED_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC) + if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn + && gBattleMons[battlerId].statStages[STAT_SPEED] < MAX_STAT_STAGE) { PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED); @@ -2851,7 +2854,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_SP_ATTACK_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC) + if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn + && gBattleMons[battlerId].statStages[STAT_SPATK] < MAX_STAT_STAGE) { PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); @@ -2864,7 +2868,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_SP_DEFENSE_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC) + if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn + && gBattleMons[battlerId].statStages[STAT_SPDEF] < MAX_STAT_STAGE) { PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF); @@ -2877,7 +2882,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_CRITICAL_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY)) + if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn + && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY)) { gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); @@ -2889,7 +2895,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) { for (i = 0; i < 5; i++) { - if (gBattleMons[battlerId].statStages[STAT_ATK + i] < 0xC) + if (gBattleMons[battlerId].statStages[STAT_ATK + i] < MAX_STAT_STAGE) break; } if (i != 5) @@ -2897,7 +2903,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) do { i = Random() % 5; - } while (gBattleMons[battlerId].statStages[STAT_ATK + i] == 0xC); + } while (gBattleMons[battlerId].statStages[STAT_ATK + i] == MAX_STAT_STAGE); PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1); @@ -3166,9 +3172,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) case HOLD_EFFECT_RESTORE_STATS: for (i = 0; i < NUM_BATTLE_STATS; i++) { - if (gBattleMons[battlerId].statStages[i] < 6) + if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE) { - gBattleMons[battlerId].statStages[i] = 6; + gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; effect = ITEM_STATS_CHANGE; } } diff --git a/src/pokemon.c b/src/pokemon.c index 80e93c5685..6561e653b0 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1868,21 +1868,21 @@ const u8 gPPUpGetMask[] = {0x03, 0x0c, 0x30, 0xc0}; // Masks for getting PP Up c const u8 gPPUpSetMask[] = {0xfc, 0xf3, 0xcf, 0x3f}; // Masks for setting PP Up count const u8 gPPUpAddMask[] = {0x01, 0x04, 0x10, 0x40}; // Values added to PP Up count -const u8 gStatStageRatios[][2] = +const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2] = { - {10, 40}, // -6 + {10, 40}, // -6, MIN_STAT_STAGE {10, 35}, // -5 {10, 30}, // -4 {10, 25}, // -3 {10, 20}, // -2 {10, 15}, // -1 - {10, 10}, // 0 + {10, 10}, // 0, DEFAULT_STAT_STAGE {15, 10}, // +1 {20, 10}, // +2 {25, 10}, // +3 {30, 10}, // +4 {35, 10}, // +5 - {40, 10}, // +6 + {40, 10}, // +6, MAX_STAT_STAGE }; static const u16 sDeoxysBaseStats[] = @@ -3199,7 +3199,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if (gCritMultiplier == 2) { - if (attacker->statStages[STAT_ATK] > 6) + if (attacker->statStages[STAT_ATK] > DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK) else damage = attack; @@ -3212,7 +3212,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (gCritMultiplier == 2) { - if (defender->statStages[STAT_DEF] < 6) + if (defender->statStages[STAT_DEF] < DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF) else damageHelper = defense; @@ -3249,7 +3249,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if (gCritMultiplier == 2) { - if (attacker->statStages[STAT_SPATK] > 6) + if (attacker->statStages[STAT_SPATK] > DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK) else damage = spAttack; @@ -3262,7 +3262,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (gCritMultiplier == 2) { - if (defender->statStages[STAT_SPDEF] < 6) + if (defender->statStages[STAT_SPDEF] < DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF) else damageHelper = spDefense; @@ -4624,8 +4624,8 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)]; *hpSwitchout = gBattleMons[battlerId].hp; - for (i = 0; i < 8; i++) - gBattleMons[battlerId].statStages[i] = 6; + for (i = 0; i < NUM_BATTLE_STATS; i++) + gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[battlerId].status2 = 0; sub_803FA70(battlerId); @@ -4728,49 +4728,49 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; } if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK) - && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & ITEM0_X_ATTACK; - if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > 12) - gBattleMons[gActiveBattler].statStages[STAT_ATK] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE; retVal = FALSE; } break; // in-battle stat boosting effects case 1: if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND) - && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & ITEM1_X_DEFEND) >> 4; - if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > 12) - gBattleMons[gActiveBattler].statStages[STAT_DEF] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE; retVal = FALSE; } if ((itemEffect[cmdIndex] & ITEM1_X_SPEED) - && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & ITEM1_X_SPEED; - if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > 12) - gBattleMons[gActiveBattler].statStages[STAT_SPEED] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE; retVal = FALSE; } break; // more stat boosting effects case 2: if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY) - && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & ITEM2_X_ACCURACY) >> 4; - if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > 12) - gBattleMons[gActiveBattler].statStages[STAT_ACC] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE; retVal = FALSE; } if ((itemEffect[cmdIndex] & ITEM2_X_SPATK) - && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & ITEM2_X_SPATK; - if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > 12) - gBattleMons[gActiveBattler].statStages[STAT_SPATK] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE; retVal = FALSE; } break; From 463d79c7c1b945db53b1d4278e3e05a65bbe1ee1 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 7 Aug 2020 02:00:41 -0400 Subject: [PATCH 45/85] Start documenting naming screen --- .../naming_screen/{0.pal => keyboard.pal} | 0 .../{keyboard_button.png => page_button.png} | Bin graphics/naming_screen/{1.pal => unused.pal} | 0 include/global.h | 1 + include/graphics.h | 6 +- include/naming_screen.h | 81 +- include/text_window.h | 2 +- src/battle_records.c | 2 +- src/dodrio_berry_picking.c | 2 +- src/egg_hatch.c | 2 +- src/frontier_pass.c | 4 +- src/graphics.c | 7 +- src/hall_of_fame.c | 2 +- src/main_menu.c | 2 +- src/mevent_801BAAC.c | 4 +- src/mystery_gift.c | 2 +- src/naming_screen.c | 1442 +++++++++-------- src/pokemon_storage_system.c | 4 +- src/text_window.c | 6 +- src/tv.c | 4 +- 20 files changed, 832 insertions(+), 741 deletions(-) rename graphics/naming_screen/{0.pal => keyboard.pal} (100%) rename graphics/naming_screen/{keyboard_button.png => page_button.png} (100%) rename graphics/naming_screen/{1.pal => unused.pal} (100%) diff --git a/graphics/naming_screen/0.pal b/graphics/naming_screen/keyboard.pal similarity index 100% rename from graphics/naming_screen/0.pal rename to graphics/naming_screen/keyboard.pal diff --git a/graphics/naming_screen/keyboard_button.png b/graphics/naming_screen/page_button.png similarity index 100% rename from graphics/naming_screen/keyboard_button.png rename to graphics/naming_screen/page_button.png diff --git a/graphics/naming_screen/1.pal b/graphics/naming_screen/unused.pal similarity index 100% rename from graphics/naming_screen/1.pal rename to graphics/naming_screen/unused.pal diff --git a/include/global.h b/include/global.h index 9612a25f02..478c9f69a7 100644 --- a/include/global.h +++ b/include/global.h @@ -102,6 +102,7 @@ #define TEST_BUTTON(field, button) ({(field) & (button);}) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) #define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button) +#define JOY_REPEAT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button) #define S16TOPOSFLOAT(val) \ ({ \ diff --git a/include/graphics.h b/include/graphics.h index 106798892f..7675df2673 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4074,11 +4074,11 @@ extern const u8 gUnknown_08DD4620[]; extern const u8 gUnknown_08DD46E0[]; extern const u8 gUnknown_08DD47A0[]; extern const u8 gNamingScreenRWindow_Gfx[]; -extern const u8 gNamingScreenKeyboardButton_Gfx[]; +extern const u8 gNamingScreenPageButton_Gfx[]; extern const u8 gNamingScreenROptions_Gfx[]; extern const u8 gNamingScreenCursor_Gfx[]; -extern const u8 gNamingScreenRightPointingTriangleTiles[]; -extern const u8 gNamingScreenUnderscoreTiles[]; +extern const u8 gNamingScreenInputArrow_Gfx[]; +extern const u8 gNamingScreenUnderscore_Gfx[]; extern const u32 gUnknown_08D9BA44[]; diff --git a/include/naming_screen.h b/include/naming_screen.h index 7d32abcd31..93527640e5 100644 --- a/include/naming_screen.h +++ b/include/naming_screen.h @@ -3,91 +3,14 @@ #include "main.h" -#define KBEVENT_NONE 0 -#define KBEVENT_PRESSED_A 5 -#define KBEVENT_PRESSED_B 6 -#define KBEVENT_PRESSED_SELECT 8 -#define KBEVENT_PRESSED_START 9 - -#define KBROW_COUNT 4 - -enum -{ - KBPAGE_LETTERS_LOWER, - KBPAGE_LETTERS_UPPER, - KBPAGE_SYMBOLS, - KBPAGE_COUNT, -}; - -enum -{ +enum { NAMING_SCREEN_PLAYER, NAMING_SCREEN_BOX, NAMING_SCREEN_CAUGHT_MON, - NAMING_SCREEN_3, + NAMING_SCREEN_NICKNAME, NAMING_SCREEN_WALDA, }; -struct NamingScreenTemplate -{ - u8 copyExistingString; - u8 maxChars; - u8 iconFunction; - u8 addGenderIcon; - u8 initialPage; - u8 unused; - const u8 *title; -}; - -struct NamingScreenData { - /*0x0*/ u8 tilemapBuffer1[0x800]; - /*0x800*/ u8 tilemapBuffer2[0x800]; - /*0x800*/ u8 tilemapBuffer3[0x800]; - /*0x1800*/ u8 textBuffer[0x10]; - /*0x1810*/ u8 tileBuffer[0x600]; - /*0x1E10*/ u8 state; - /*0x1E11*/ u8 windows[5]; - /*0x1E16*/ u16 inputCharBaseXPos; - /*0x1E18*/ u16 bg1vOffset; - /*0x1E1A*/ u16 bg2vOffset; - /*0x1E1C*/ u16 bg1Priority; - /*0x1E1E*/ u16 bg2Priority; - /*0x1E20*/ u8 bgToReveal; - /*0x1E21*/ u8 bgToHide; - /*0x1E22*/ u8 currentPage; - /*0x1E23*/ u8 cursorSpriteId; - /*0x1E24*/ u8 selectBtnFrameSpriteId; - /*0x1E25*/ u8 keyRepeatStartDelayCopy; - /*0x1E28*/ const struct NamingScreenTemplate *template; - /*0x1E2C*/ u8 templateNum; - /*0x1E30*/ u8 *destBuffer; - /*0x1E34*/ u16 monSpecies; - /*0x1E36*/ u16 monGender; - /*0x1E38*/ u32 monPersonality; - /*0x1E3C*/ MainCallback returnCallback; -}; - - -enum -{ - MAIN_STATE_BEGIN_FADE_IN, - MAIN_STATE_WAIT_FADE_IN, - MAIN_STATE_HANDLE_INPUT, - MAIN_STATE_MOVE_TO_OK_BUTTON, - MAIN_STATE_START_PAGE_SWAP, - MAIN_STATE_WAIT_PAGE_SWAP, - MAIN_STATE_6, - MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE, - MAIN_STATE_BEGIN_FADE_OUT, -}; - -enum -{ - INPUT_STATE_DISABLED, - INPUT_STATE_ENABLED, - INPUT_STATE_2, -}; - void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback); #endif // GUARD_NAMING_SCREEN_H diff --git a/include/text_window.h b/include/text_window.h index 501597aa23..7bdcacd17c 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -20,7 +20,7 @@ void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset); void DrawTextBorderOuter(u8 windowId, u16 tileNum, u8 palNum); void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum); void rbox_fill_rectangle(u8 windowId); -const u16 *stdpal_get(u8 id); +const u16 *GetTextWindowPalette(u8 id); const u16 *GetOverworldTextboxPalettePtr(void); void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset); diff --git a/src/battle_records.c b/src/battle_records.c index ccd16e2193..c6363a6eda 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -494,7 +494,7 @@ static void CB2_ShowTrainerHillRecords(void) break; case 3: LoadTrainerHillRecordsWindowGfx(3); - LoadPalette(stdpal_get(0), 0xF0, 0x20); + LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20); gMain.state++; break; case 4: diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 5f249abad2..f3963ca278 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -4657,7 +4657,7 @@ static bool32 sub_802A8E8(void) return FALSE; break; case 5: - LoadPalette(stdpal_get(3), 0xD0, 0x20); + LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20); break; default: gUnknown_02022CF8->unk3018 = 0; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index db25dbbb85..3ccc7ebf84 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -672,7 +672,7 @@ static void CB2_EggHatch_1(void) species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]); personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); - DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); + DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar3, species, gender, personality, EggHatchSetMonNickname); break; case 1: case -1: diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 757205656b..024a954d18 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -735,7 +735,7 @@ static bool32 InitFrontierPass(void) case 8: LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0); LoadPalette(gUnknown_08DE07C8[1 + sPassData->trainerStars], 0x10, 0x20); - LoadPalette(stdpal_get(0), 0xF0, 0x20); + LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20); sub_80C629C(); sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea); if (sPassData->unkE == 1 || sPassData->unkE == 2) @@ -1378,7 +1378,7 @@ static bool32 InitFrontierMap(void) if (FreeTempTileDataBuffersIfPossible()) return FALSE; LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0); - LoadPalette(stdpal_get(0), 0xF0, 0x20); + LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20); CopyToBgTilemapBuffer(2, gUnknown_08570E00, 0, 0); CopyBgTilemapBufferToVram(2); break; diff --git a/src/graphics.c b/src/graphics.c index b774c5ad21..b857b8d70a 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1435,10 +1435,9 @@ const u32 gNamingScreenMenu_Gfx[] = INCBIN_U32("graphics/naming_screen/menu.4bpp const u8 gNamingScreenRWindow_Gfx[] = INCBIN_U8("graphics/naming_screen/rwindow.4bpp"); const u8 gNamingScreenROptions_Gfx[] = INCBIN_U8("graphics/naming_screen/roptions.4bpp"); const u8 gNamingScreenCursor_Gfx[] = INCBIN_U8("graphics/naming_screen/cursor.4bpp"); -const u8 gNamingScreenKeyboardButton_Gfx[] = INCBIN_U8("graphics/naming_screen/keyboard_button.4bpp"); - -const u8 gNamingScreenRightPointingTriangleTiles[] = INCBIN_U8("graphics/naming_screen/right_pointing_triangle.4bpp"); -const u8 gNamingScreenUnderscoreTiles[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp"); +const u8 gNamingScreenPageButton_Gfx[] = INCBIN_U8("graphics/naming_screen/page_button.4bpp"); +const u8 gNamingScreenInputArrow_Gfx[] = INCBIN_U8("graphics/naming_screen/right_pointing_triangle.4bpp"); +const u8 gNamingScreenUnderscore_Gfx[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp"); const u32 gUnknown_08DD4544[] = INCBIN_U32("graphics/unknown/unknown_DD4544.bin.lz"); const u32 gUnknown_08DD4620[] = INCBIN_U32("graphics/unknown/unknown_DD4620.bin.lz"); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index f4c971b0b8..19217ae85f 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -702,7 +702,7 @@ static void Task_Hof_DisplayPlayer(u8 taskId) gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 120, 72, 6, 0xFFFF); AddWindow(&sHof_WindowTemplate); LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0); - LoadPalette(stdpal_get(1), 0xE0, 0x20); + LoadPalette(GetTextWindowPalette(1), 0xE0, 0x20); gTasks[taskId].tFrameCount = 120; gTasks[taskId].func = Task_Hof_WaitAndPrintPlayerInfo; } diff --git a/src/main_menu.c b/src/main_menu.c index 781d7f85ca..a4de99207b 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1609,7 +1609,7 @@ static void Task_NewGameBirchSpeech_StartNamingScreen(u8 taskId) FreeAndDestroyMonPicSprite(gTasks[taskId].tLotadSpriteId); NewGameBirchSpeech_SetDefaultPlayerName(Random() % 20); DestroyTask(taskId); - DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen); + DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen); } } diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index 1bfac23d14..847449c450 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -208,7 +208,7 @@ s32 FadeToWonderCardMenu(void) case 3: if (FreeTempTileDataBuffersIfPossible()) return 0; - LoadPalette(stdpal_get(1), 0x20, 0x20); + LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); gPaletteFade.bufferTransferDisabled = TRUE; LoadPalette(sWonderCardData->unk_0170->pal, 0x10, 0x20); LZ77UnCompWram(sWonderCardData->unk_0170->map, sWonderCardData->buffer_045C); @@ -607,7 +607,7 @@ s32 FadeToWonderNewsMenu(void) case 3: if (FreeTempTileDataBuffersIfPossible()) return 0; - LoadPalette(stdpal_get(1), 0x20, 0x20); + LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); gPaletteFade.bufferTransferDisabled = TRUE; LoadPalette(sWonderNewsData->unk_01BC->pal, 0x10, 0x20); LZ77UnCompWram(sWonderNewsData->unk_01BC->map, sWonderNewsData->buffer_03A4); diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 9672fe0ec6..e6b311f0ae 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -410,7 +410,7 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) break; case 1: LoadPalette(gUnkTextboxBorderPal, 0, 0x20); - LoadPalette(stdpal_get(2), 0xd0, 0x20); + LoadPalette(GetTextWindowPalette(2), 0xd0, 0x20); Menu_LoadStdPalAt(0xC0); LoadUserWindowBorderGfx(0, 0xA, 0xE0); LoadUserWindowBorderGfx_(0, 0x1, 0xF0); diff --git a/src/naming_screen.c b/src/naming_screen.c index ab38db7453..da5a7f1211 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -28,7 +28,142 @@ #include "constants/event_objects.h" #include "constants/rgb.h" -EWRAM_DATA static struct NamingScreenData *gNamingScreenData = NULL; +enum { + INPUT_NONE, + INPUT_DPAD_UP, + INPUT_DPAD_DOWN, + INPUT_DPAD_LEFT, + INPUT_DPAD_RIGHT, + INPUT_A_BUTTON, + INPUT_B_BUTTON, + INPUT_LR_BUTTON, + INPUT_SELECT, + INPUT_START, +}; + +#define KBROW_COUNT 4 +#define KBCOL_COUNT 8 + +enum { + GFXTAG_BACK_BUTTON, + GFXTAG_OK_BUTTON, + GFXTAG_PAGE_SWITCH_BG, + GFXTAG_PAGE_SWITCH_BUTTON, + GFXTAG_PAGE_SWITCH_UPPER, + GFXTAG_PAGE_SWITCH_LOWER, + GFXTAG_PAGE_SWITCH_OTHERS, + GFXTAG_CURSOR, + GFXTAG_CURSOR_SQUISHED, + GFXTAG_CURSOR_FILLED, + GFXTAG_INPUT_ARROW, + GFXTAG_UNDERSCORE, +}; + +enum { + PALTAG_PC_ICON, + PALTAG_1, + PALTAG_2, + PALTAG_3, + PALTAG_PAGE_SWITCH, + PALTAG_CURSOR, + PALTAG_BACK_BUTTON, + PALTAG_OK_BUTTON, +}; + +enum { + WIN_KB_PAGE_1, // Which of these two windows is in front is cycled as the player swaps + WIN_KB_PAGE_2, // Initiall WIN_KB_PAGE_1 is in front, with WIN_KB_PAGE_2 on deck + WIN_TEXT_ENTRY, + WIN_TEXT_ENTRY_BOX, + WIN_BANNER, + WIN_COUNT, +}; + +enum +{ + KBPAGE_LETTERS_LOWER, + KBPAGE_LETTERS_UPPER, + KBPAGE_SYMBOLS, + KBPAGE_COUNT, +}; + +enum +{ + KEY_ROLE_CHAR, + KEY_ROLE_PAGE, + KEY_ROLE_BACKSPACE, + KEY_ROLE_OK, +}; + +enum +{ + BUTTON_PAGE, + BUTTON_BACK, + BUTTON_OK, + BUTTON_COUNT, +}; + +enum +{ + STATE_BEGIN_FADE_IN, + STATE_WAIT_FADE_IN, + STATE_HANDLE_INPUT, + STATE_MOVE_TO_OK_BUTTON, + STATE_START_PAGE_SWAP, + STATE_WAIT_PAGE_SWAP, + STATE_6, + STATE_UPDATE_SENT_TO_PC_MESSAGE, + STATE_BEGIN_FADE_OUT, +}; + +enum +{ + INPUT_STATE_DISABLED, + INPUT_STATE_ENABLED, + INPUT_STATE_2, +}; + +struct NamingScreenTemplate +{ + u8 copyExistingString; + u8 maxChars; + u8 iconFunction; + u8 addGenderIcon; + u8 initialPage; + u8 unused; + const u8 *title; +}; + +struct NamingScreenData +{ + u8 tilemapBuffer1[0x800]; + u8 tilemapBuffer2[0x800]; + u8 tilemapBuffer3[0x800]; + u8 textBuffer[16]; + u8 tileBuffer[0x600]; + u8 state; + u8 windows[WIN_COUNT]; + u16 inputCharBaseXPos; + u16 bg1vOffset; + u16 bg2vOffset; + u16 bg1Priority; + u16 bg2Priority; + u8 bgToReveal; + u8 bgToHide; + u8 currentPage; + u8 cursorSpriteId; + u8 selectBtnFrameSpriteId; + u8 keyRepeatStartDelayCopy; + const struct NamingScreenTemplate *template; + u8 templateNum; + u8 *destBuffer; + u16 monSpecies; + u16 monGender; + u32 monPersonality; + MainCallback returnCallback; +}; + +EWRAM_DATA static struct NamingScreenData *sNamingScreen = NULL; extern u16 gKeyRepeatStartDelay; // extern text @@ -40,10 +175,10 @@ extern const u8 gText_TellHimTheWords[]; // start of .rodata -static const u8 gSpriteImage_858BBF8[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); -static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp"); -static const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal"); -static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal"); +static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); +static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp"); +static const u16 sKeyboard_Pal[] = INCBIN_U16("graphics/naming_screen/keyboard.gbapal"); +static const u16 sUnused_Pal[] = INCBIN_U16("graphics/naming_screen/unused.gbapal"); static const u8 *const sTransferredToPCMessages[] = { @@ -55,7 +190,7 @@ static const u8 *const sTransferredToPCMessages[] = static const u8 sText_AlphabetUpperLower[] = _("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"); -static const struct BgTemplate gUnknown_0858BE00[] = +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, @@ -83,9 +218,9 @@ static const struct BgTemplate gUnknown_0858BE00[] = } }; -static const struct WindowTemplate gUnknown_0858BE10[] = +static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] = { - { + [WIN_KB_PAGE_1] = { .bg = 1, .tilemapLeft = 3, .tilemapTop = 10, @@ -94,7 +229,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] = .paletteNum = 10, .baseBlock = 0x030 }, - { + [WIN_KB_PAGE_2] = { .bg = 2, .tilemapLeft = 3, .tilemapTop = 10, @@ -103,7 +238,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] = .paletteNum = 10, .baseBlock = 0x0C8 }, - { + [WIN_TEXT_ENTRY] = { .bg = 3, .tilemapLeft = 8, .tilemapTop = 6, @@ -112,7 +247,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] = .paletteNum = 10, .baseBlock = 0x030 }, - { + [WIN_TEXT_ENTRY_BOX] = { .bg = 3, .tilemapLeft = 8, .tilemapTop = 4, @@ -121,7 +256,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] = .paletteNum = 10, .baseBlock = 0x052 }, - { + [WIN_BANNER] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -133,124 +268,146 @@ static const struct WindowTemplate gUnknown_0858BE10[] = DUMMY_WIN_TEMPLATE }; -static const u8 gUnknown_0858BE40[] = __("abcdef .ghijkl ,mnopqrs tuvwxyz ABCDEF .GHIJKL ,MNOPQRS TUVWXYZ 01234 56789 !?♂♀/- …“”‘' "); +// This handles what characters get inserted when a key is pressed +// The keys shown on the keyboard are handled separately by sNamingScreenKeyboardText +static const u8 sKeyboardChars[KBPAGE_COUNT * KBROW_COUNT * KBCOL_COUNT] = __( + "abcdef ." + "ghijkl ," + "mnopqrs " + "tuvwxyz " + "ABCDEF ." + "GHIJKL ," + "MNOPQRS " + "TUVWXYZ " + "01234 " + "56789 " + "!?♂♀/- " + "…“”‘' "); -static const u8 gUnknown_0858BEA0[] = { 8, 8, 6 }; -static const u8 gUnknown_0858BEA3[] = { 0, 12, 24, 56, 68, 80, 92, 123, 0, 12, 24, 56, 68, 80, 92, 123, 0, 22, 44, 66, 88, 110, 0, 0 }; +static const u8 sPageColumnCounts[KBPAGE_COUNT] = { + [KBPAGE_LETTERS_LOWER] = KBCOL_COUNT, + [KBPAGE_LETTERS_UPPER] = KBCOL_COUNT, + [KBPAGE_SYMBOLS] = 6 +}; +static const u8 sPageColumnXPos[KBPAGE_COUNT * KBCOL_COUNT] = { + 0, 12, 24, 56, 68, 80, 92, 123, // KBPAGE_LETTERS_LOWER + 0, 12, 24, 56, 68, 80, 92, 123, // KBPAGE_LETTERS_UPPER + 0, 22, 44, 66, 88, 110 // KBPAGE_SYMBOLS +}; // forward declarations static const struct NamingScreenTemplate *const sNamingScreenTemplates[]; -static const struct SubspriteTable gUnknown_0858C050[]; -static const struct SubspriteTable gUnknown_0858C058[]; -static const struct SubspriteTable gUnknown_0858C070[]; -static const struct SubspriteTable gUnknown_0858C078[]; -static const struct SpriteTemplate gUnknown_0858C0C0; -static const struct SpriteTemplate gUnknown_0858C0D8; -static const struct SpriteTemplate gUnknown_0858C0F0; -static const struct SpriteTemplate gUnknown_0858C108; -static const struct SpriteTemplate gUnknown_0858C120; -static const struct SpriteTemplate gUnknown_0858C138; +static const struct SubspriteTable sSubspriteTable_PageSwitchBg[]; +static const struct SubspriteTable sSubspriteTable_PageSwitchText[]; +static const struct SubspriteTable sSubspriteTable_Button[]; +static const struct SubspriteTable sSubspriteTable_PCIcon[]; +static const struct SpriteTemplate sSpriteTemplate_PageSwitchBg; +static const struct SpriteTemplate sSpriteTemplate_PageSwitchButton; +static const struct SpriteTemplate sSpriteTemplate_PageSwitchText; +static const struct SpriteTemplate sSpriteTemplate_BackButton; +static const struct SpriteTemplate sSpriteTemplate_OkButton; +static const struct SpriteTemplate sSpriteTemplate_Cursor; static const struct SpriteTemplate sSpriteTemplate_InputArrow; static const struct SpriteTemplate sSpriteTemplate_Underscore; -static const struct SpriteTemplate gUnknown_0858C180; +static const struct SpriteTemplate sSpriteTemplate_PCIcon; static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT]; -static const struct SpriteSheet gUnknown_0858C1C8[]; -static const struct SpritePalette gUnknown_0858C230[]; +static const struct SpriteSheet sSpriteSheets[]; +static const struct SpritePalette sSpritePalettes[]; -static void C2_NamingScreen(void); +static void CB2_LoadNamingScreen(void); static void NamingScreen_Init(void); static void NamingScreen_InitBGs(void); -static void sub_80E3194(void); -static void sub_80E31B0(u8 taskId); -static bool8 MainState_BeginFadeIn(void); +static void CreateNamingScreenTask(void); +static void Task_NamingScreen(u8 taskId); +static bool8 MainState_FadeIn(void); static bool8 MainState_WaitFadeIn(void); static bool8 MainState_HandleInput(void); static bool8 MainState_MoveToOKButton(void); static bool8 MainState_6(void); -static bool8 MainState_BeginFadeInOut(void); -static bool8 MainState_WaitFadeOutAndExit(void); +static bool8 MainState_FadeOut(void); +static bool8 MainState_Exit(void); static void DisplaySentToPCMessage(void); -static bool8 sub_80E3604(void); +static bool8 MainState_7(void); static bool8 MainState_StartPageSwap(void); static bool8 MainState_WaitPageSwap(void); static void StartPageSwapAnim(void); static void Task_HandlePageSwapAnim(u8); static bool8 IsPageSwapAnimNotInProgress(void); -static void sub_80E3948(u8, u8, u8); -static void Task_80E39BC(u8); -static u16 sub_80E3A74(u8); -static void sub_80E3AE8(u8); -static void sub_80E3B10(struct Task *, u8, u8); -static void sub_80E3CC8(void); -static void CursorInit(void); +static void TryStartButtonFlash(u8, bool8, bool8); +static void Task_UpdateButtonFlash(u8); +static u16 GetButtonPalOffset(u8); +static void RestoreButtonColor(u8); +static void StartButtonFlash(struct Task *, u8, bool8); +static void CreateSprites(void); +static void CreateCursorSprite(void); static void SetCursorPos(s16, s16); static void GetCursorPos(s16 *x, s16 *y); static void MoveCursorToOKButton(void); -static void sub_80E3E3C(u8); -static void sub_80E3E94(u8); +static void SetCursorInvisibility(u8); +static void SetCursorFlashing(bool8); static u8 IsCursorAnimFinished(void); static u8 GetCurrentPageColumnCount(void); static void CreatePageSwitcherSprites(void); static void sub_80E4050(void); static void sub_80E41B8(u8, struct Sprite *, struct Sprite *); static void CreateBackOkSprites(void); -static void CreateUnderscoreSprites(void); +static void CreateTextEntrySprites(void); static void CreateInputTargetIcon(void); static u8 HandleKeyboardEvent(void); -static u8 sub_80E45E0(void); +static u8 SwitchKeyboardPage(void); static u8 GetInputEvent(void); static void SetInputState(u8); -static void sub_80E4964(void); -static u8 GetTextCaretPosition(void); +static void DrawTextEntryBox(void); +static u8 GetTextEntryPosition(void); static void DeleteTextCharacter(void); -static bool8 sub_80E4B54(void); -static void AddTextCharacter(u8); -static void sub_80E4BE4(void); -static void choose_name_or_words_screen_load_bg_tile_patterns(void); -static void sub_80E4CB8(void); -static void choose_name_or_words_screen_apply_bg_pals(void); -static void sub_80E4CF8(u8, const void *); -static void nullsub_10(u8, u8); -static void sub_80E4D10(void); -static void sub_80E4DE4(u8, u8); -static void sub_80E4E5C(void); -static void sub_80E4EF0(void); -static void sub_80E4F58(void); -static void NamingScreen_TurnOffScreen(void); -static void NamingScreen_InitDisplayMode(void); +static bool8 AddTextCharacter(void); +static void BufferCharacter(u8); +static void SaveInputText(void); +static void LoadGfx(void); +static void CreateHelperTasks(void); +static void LoadPalettes(void); +static void DrawBgTilemap(u8, const void *); +static void NamingScreen_Dummy(u8, u8); +static void DrawTextEntry(void); +static void PrintKeyboardKeys(u8, u8); +static void DrawKeyboardPageOnDeck(void); +static void PrintControls(void); +static void CB2_NamingScreen(void); +static void NamingScreen_ResetVHBlank(void); +static void NamingScreen_SetVBlank(void); static void VBlankCB_NamingScreen(void); -static void sub_80E501C(void); -static bool8 IsLetter(u8); +static void NamingScreen_ShowBgs(void); +static bool8 IsWideLetter(u8); void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback) { - gNamingScreenData = Alloc(sizeof(struct NamingScreenData)); - if (!gNamingScreenData) + sNamingScreen = Alloc(sizeof(struct NamingScreenData)); + if (!sNamingScreen) { SetMainCallback2(returnCallback); } else { - gNamingScreenData->templateNum = templateNum; - gNamingScreenData->monSpecies = monSpecies; - gNamingScreenData->monGender = monGender; - gNamingScreenData->monPersonality = monPersonality; - gNamingScreenData->destBuffer = destBuffer; - gNamingScreenData->returnCallback = returnCallback; + sNamingScreen->templateNum = templateNum; + sNamingScreen->monSpecies = monSpecies; + sNamingScreen->monGender = monGender; + sNamingScreen->monPersonality = monPersonality; + sNamingScreen->destBuffer = destBuffer; + sNamingScreen->returnCallback = returnCallback; - if (templateNum == 0) + if (templateNum == NAMING_SCREEN_PLAYER) StartTimer1(); - SetMainCallback2(C2_NamingScreen); + SetMainCallback2(CB2_LoadNamingScreen); } } -static void C2_NamingScreen(void) +static void CB2_LoadNamingScreen(void) { switch (gMain.state) { case 0: - NamingScreen_TurnOffScreen(); + NamingScreen_ResetVHBlank(); NamingScreen_Init(); gMain.state++; break; @@ -272,44 +429,44 @@ static void C2_NamingScreen(void) gMain.state++; break; case 5: - choose_name_or_words_screen_apply_bg_pals(); + LoadPalettes(); gMain.state++; break; case 6: - choose_name_or_words_screen_load_bg_tile_patterns(); + LoadGfx(); gMain.state++; break; case 7: - sub_80E3CC8(); + CreateSprites(); UpdatePaletteFade(); - sub_80E501C(); + NamingScreen_ShowBgs(); gMain.state++; break; default: - sub_80E4CB8(); - sub_80E3194(); + CreateHelperTasks(); + CreateNamingScreenTask(); break; } } static void NamingScreen_Init(void) { - gNamingScreenData->state = 0; - gNamingScreenData->bg1vOffset = 0; - gNamingScreenData->bg2vOffset = 0; - gNamingScreenData->bg1Priority = BGCNT_PRIORITY(1); - gNamingScreenData->bg2Priority = BGCNT_PRIORITY(2); - gNamingScreenData->bgToReveal = 0; - gNamingScreenData->bgToHide = 1; - gNamingScreenData->template = sNamingScreenTemplates[gNamingScreenData->templateNum]; - gNamingScreenData->currentPage = gNamingScreenData->template->initialPage; - gNamingScreenData->inputCharBaseXPos = (240 - gNamingScreenData->template->maxChars * 8) / 2 + 6; - if (gNamingScreenData->templateNum == 4) - gNamingScreenData->inputCharBaseXPos += 11; - gNamingScreenData->keyRepeatStartDelayCopy = gKeyRepeatStartDelay; - memset(gNamingScreenData->textBuffer, 0xFF, sizeof(gNamingScreenData->textBuffer)); - if (gNamingScreenData->template->copyExistingString != 0) - StringCopy(gNamingScreenData->textBuffer, gNamingScreenData->destBuffer); + sNamingScreen->state = 0; + sNamingScreen->bg1vOffset = 0; + sNamingScreen->bg2vOffset = 0; + sNamingScreen->bg1Priority = BGCNT_PRIORITY(1); + sNamingScreen->bg2Priority = BGCNT_PRIORITY(2); + sNamingScreen->bgToReveal = 0; + sNamingScreen->bgToHide = 1; + sNamingScreen->template = sNamingScreenTemplates[sNamingScreen->templateNum]; + sNamingScreen->currentPage = sNamingScreen->template->initialPage; + sNamingScreen->inputCharBaseXPos = (240 - sNamingScreen->template->maxChars * 8) / 2 + 6; + if (sNamingScreen->templateNum == NAMING_SCREEN_WALDA) + sNamingScreen->inputCharBaseXPos += 11; + sNamingScreen->keyRepeatStartDelayCopy = gKeyRepeatStartDelay; + memset(sNamingScreen->textBuffer, 0xFF, sizeof(sNamingScreen->textBuffer)); + if (sNamingScreen->template->copyExistingString) + StringCopy(sNamingScreen->textBuffer, sNamingScreen->destBuffer); gKeyRepeatStartDelay = 16; } @@ -321,7 +478,7 @@ static void sub_80E2FA4(void) if (gSprites[i].inUse) gSprites[i].invisible = FALSE; } - sub_80E3E3C(0); + SetCursorInvisibility(FALSE); } static void NamingScreen_InitBGs(void) @@ -334,7 +491,7 @@ static void NamingScreen_InitBGs(void) SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_0858BE00, 4); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -348,36 +505,36 @@ static void NamingScreen_InitBGs(void) InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); - for (i = 0; i < 5; i++) - gNamingScreenData->windows[i] = AddWindow(&gUnknown_0858BE10[i]); + for (i = 0; i < WIN_COUNT; i++) + sNamingScreen->windows[i] = AddWindow(&sWindowTemplates[i]); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0xC, 0x8)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8)); - SetBgTilemapBuffer(1, gNamingScreenData->tilemapBuffer1); - SetBgTilemapBuffer(2, gNamingScreenData->tilemapBuffer2); - SetBgTilemapBuffer(3, gNamingScreenData->tilemapBuffer3); + SetBgTilemapBuffer(1, sNamingScreen->tilemapBuffer1); + SetBgTilemapBuffer(2, sNamingScreen->tilemapBuffer2); + SetBgTilemapBuffer(3, sNamingScreen->tilemapBuffer3); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); } -static void sub_80E3194(void) +static void CreateNamingScreenTask(void) { - CreateTask(sub_80E31B0, 2); - SetMainCallback2(sub_80E4F58); + CreateTask(Task_NamingScreen, 2); + SetMainCallback2(CB2_NamingScreen); } -static void sub_80E31B0(u8 taskId) +static void Task_NamingScreen(u8 taskId) { - switch (gNamingScreenData->state) + switch (sNamingScreen->state) { case 0: - MainState_BeginFadeIn(); + MainState_FadeIn(); sub_80E2FA4(); - NamingScreen_InitDisplayMode(); + NamingScreen_SetVBlank(); break; case 1: MainState_WaitFadeIn(); @@ -399,13 +556,13 @@ static void sub_80E31B0(u8 taskId) MainState_6(); break; case 7: - sub_80E3604(); + MainState_7(); break; case 8: - MainState_BeginFadeInOut(); + MainState_FadeOut(); break; case 9: - MainState_WaitFadeOutAndExit(); + MainState_Exit(); break; } } @@ -438,33 +595,33 @@ static u8 sub_80E3244(u8 a1) static u8 sub_80E3254(void) { - return sPageOrderUpperFirst[gNamingScreenData->currentPage]; + return sPageOrderUpperFirst[sNamingScreen->currentPage]; } static u8 sub_80E3274(void) { - return sPageOrderSymbolsFirst[gNamingScreenData->currentPage]; + return sPageOrderSymbolsFirst[sNamingScreen->currentPage]; } -static bool8 MainState_BeginFadeIn(void) +static bool8 MainState_FadeIn(void) { - sub_80E4CF8(3, gUnknown_08DD4544); - gNamingScreenData->currentPage = KBPAGE_LETTERS_UPPER; - sub_80E4CF8(2, gUnknown_08DD46E0); - sub_80E4CF8(1, gUnknown_08DD4620); - sub_80E4DE4(gNamingScreenData->windows[1], KBPAGE_LETTERS_LOWER); - sub_80E4DE4(gNamingScreenData->windows[0], KBPAGE_LETTERS_UPPER); - nullsub_10(2, KBPAGE_LETTERS_LOWER); - nullsub_10(1, KBPAGE_LETTERS_UPPER); - sub_80E4D10(); - sub_80E4964(); - sub_80E4EF0(); + DrawBgTilemap(3, gUnknown_08DD4544); + sNamingScreen->currentPage = KBPAGE_LETTERS_UPPER; + DrawBgTilemap(2, gUnknown_08DD46E0); + DrawBgTilemap(1, gUnknown_08DD4620); + PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_2], KBPAGE_LETTERS_LOWER); + PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_1], KBPAGE_LETTERS_UPPER); + NamingScreen_Dummy(2, KBPAGE_LETTERS_LOWER); + NamingScreen_Dummy(1, KBPAGE_LETTERS_UPPER); + DrawTextEntry(); + DrawTextEntryBox(); + PrintControls(); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); BlendPalettes(-1, 16, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - gNamingScreenData->state++; + sNamingScreen->state++; return FALSE; } @@ -473,8 +630,8 @@ static bool8 MainState_WaitFadeIn(void) if (!gPaletteFade.active) { SetInputState(INPUT_STATE_ENABLED); - sub_80E3E94(1); - gNamingScreenData->state++; + SetCursorFlashing(TRUE); + sNamingScreen->state++; } return FALSE; } @@ -490,48 +647,48 @@ static bool8 MainState_MoveToOKButton(void) { SetInputState(INPUT_STATE_ENABLED); MoveCursorToOKButton(); - gNamingScreenData->state = MAIN_STATE_HANDLE_INPUT; + sNamingScreen->state = STATE_HANDLE_INPUT; } return FALSE; } static bool8 MainState_6(void) { - sub_80E4BE4(); + SaveInputText(); SetInputState(INPUT_STATE_DISABLED); - sub_80E3E94(0); - sub_80E3948(3, 0, 1); - if (gNamingScreenData->templateNum == NAMING_SCREEN_CAUGHT_MON && - CalculatePlayerPartyCount() >= 6) + SetCursorFlashing(FALSE); + TryStartButtonFlash(BUTTON_COUNT, FALSE, TRUE); + if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON && + CalculatePlayerPartyCount() >= PARTY_SIZE) { DisplaySentToPCMessage(); - gNamingScreenData->state = MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE; + sNamingScreen->state = STATE_UPDATE_SENT_TO_PC_MESSAGE; return FALSE; } else { - gNamingScreenData->state = MAIN_STATE_BEGIN_FADE_OUT; + sNamingScreen->state = STATE_BEGIN_FADE_OUT; return TRUE; //Exit the naming screen } } -static bool8 MainState_BeginFadeInOut(void) +static bool8 MainState_FadeOut(void) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gNamingScreenData->state++; + sNamingScreen->state++; return FALSE; } -static bool8 MainState_WaitFadeOutAndExit(void) +static bool8 MainState_Exit(void) { if (!gPaletteFade.active) { - if (gNamingScreenData->templateNum == NAMING_SCREEN_PLAYER) + if (sNamingScreen->templateNum == NAMING_SCREEN_PLAYER) SeedRngAndSetTrainerId(); - SetMainCallback2(gNamingScreenData->returnCallback); - DestroyTask(FindTaskIdByFunc(sub_80E31B0)); + SetMainCallback2(sNamingScreen->returnCallback); + DestroyTask(FindTaskIdByFunc(Task_NamingScreen)); FreeAllWindowBuffers(); - FREE_AND_SET_NULL(gNamingScreenData); + FREE_AND_SET_NULL(sNamingScreen); } return FALSE; } @@ -543,12 +700,12 @@ static void DisplaySentToPCMessage(void) if (!IsDestinationBoxFull()) { StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); - StringCopy(gStringVar2, gNamingScreenData->destBuffer); + StringCopy(gStringVar2, sNamingScreen->destBuffer); } else { StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); - StringCopy(gStringVar2, gNamingScreenData->destBuffer); + StringCopy(gStringVar2, sNamingScreen->destBuffer); StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); stringToDisplay = 2; } @@ -563,12 +720,12 @@ static void DisplaySentToPCMessage(void) CopyWindowToVram(0, 3); } -static bool8 sub_80E3604(void) +static bool8 MainState_7(void) { RunTextPrinters(); - if (!IsTextPrinterActive(0) && (gMain.newKeys & A_BUTTON)) - gNamingScreenData->state = MAIN_STATE_BEGIN_FADE_OUT; + if (!IsTextPrinterActive(0) && JOY_NEW(A_BUTTON)) + sNamingScreen->state = STATE_BEGIN_FADE_OUT; return FALSE; } @@ -578,10 +735,10 @@ static bool8 MainState_StartPageSwap(void) SetInputState(INPUT_STATE_DISABLED); sub_80E4050(); StartPageSwapAnim(); - sub_80E3E3C(1); - sub_80E3948(0, 0, 1); + SetCursorInvisibility(TRUE); + TryStartButtonFlash(BUTTON_PAGE, FALSE, TRUE); PlaySE(SE_WIN_OPEN); - gNamingScreenData->state = MAIN_STATE_WAIT_PAGE_SWAP; + sNamingScreen->state = STATE_WAIT_PAGE_SWAP; return FALSE; } @@ -597,9 +754,9 @@ static bool8 MainState_WaitPageSwap(void) GetCursorPos(&cursorX, &cursorY); var3 = (cursorX == GetCurrentPageColumnCount()); - gNamingScreenData->state = MAIN_STATE_HANDLE_INPUT; - gNamingScreenData->currentPage++; - gNamingScreenData->currentPage %= 3; + sNamingScreen->state = STATE_HANDLE_INPUT; + sNamingScreen->currentPage++; + sNamingScreen->currentPage %= 3; if (var3) { @@ -612,9 +769,9 @@ static bool8 MainState_WaitPageSwap(void) } SetCursorPos(cursorX, cursorY); - sub_80E4E5C(); + DrawKeyboardPageOnDeck(); SetInputState(INPUT_STATE_ENABLED); - sub_80E3E3C(0); + SetCursorInvisibility(FALSE); } return FALSE; } @@ -662,8 +819,8 @@ static bool8 IsPageSwapAnimNotInProgress(void) static bool8 PageSwapAnimState_Init(struct Task *task) { - gNamingScreenData->bg1vOffset = 0; - gNamingScreenData->bg2vOffset = 0; + sNamingScreen->bg1vOffset = 0; + sNamingScreen->bg2vOffset = 0; task->tState++; return 0; } @@ -672,19 +829,19 @@ static bool8 PageSwapAnimState_1(struct Task *task) { u16 *const arr[] = { - &gNamingScreenData->bg2vOffset, - &gNamingScreenData->bg1vOffset + &sNamingScreen->bg2vOffset, + &sNamingScreen->bg1vOffset }; task->tFrameCount += 4; - *arr[gNamingScreenData->bgToReveal] = Sin(task->tFrameCount, 40); - *arr[gNamingScreenData->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); + *arr[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40); + *arr[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); if (task->tFrameCount >= 64) { - u8 temp = gNamingScreenData->bg1Priority; //Why u8 and not u16? + u8 temp = sNamingScreen->bg1Priority; //Why u8 and not u16? - gNamingScreenData->bg1Priority = gNamingScreenData->bg2Priority; - gNamingScreenData->bg2Priority = temp; + sNamingScreen->bg1Priority = sNamingScreen->bg2Priority; + sNamingScreen->bg2Priority = temp; task->tState++; } return 0; @@ -694,19 +851,19 @@ static bool8 PageSwapAnimState_2(struct Task *task) { u16 *const arr[] = { - &gNamingScreenData->bg2vOffset, - &gNamingScreenData->bg1vOffset + &sNamingScreen->bg2vOffset, + &sNamingScreen->bg1vOffset }; task->tFrameCount += 4; - *arr[gNamingScreenData->bgToReveal] = Sin(task->tFrameCount, 40); - *arr[gNamingScreenData->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); + *arr[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40); + *arr[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); if (task->tFrameCount >= 128) { - u8 temp = gNamingScreenData->bgToReveal; + u8 temp = sNamingScreen->bgToReveal; - gNamingScreenData->bgToReveal = gNamingScreenData->bgToHide; - gNamingScreenData->bgToHide = temp; + sNamingScreen->bgToReveal = sNamingScreen->bgToHide; + sNamingScreen->bgToHide = temp; task->tState++; } return 0; @@ -725,69 +882,73 @@ static bool8 PageSwapAnimState_Done(struct Task *task) // //-------------------------------------------------- -static void sub_80E3920(void) +#define tButtonId data[0] +#define tColor data[3] + +static void CreateButtonFlashTask(void) { u8 taskId; - taskId = CreateTask(Task_80E39BC, 3); - gTasks[taskId].data[0] = 3; + taskId = CreateTask(Task_UpdateButtonFlash, 3); + gTasks[taskId].tButtonId = BUTTON_COUNT; } -static void sub_80E3948(u8 a, u8 b, u8 c) +static void TryStartButtonFlash(u8 button, bool8 b, bool8 c) { - struct Task *task = &gTasks[FindTaskIdByFunc(Task_80E39BC)]; + struct Task *task = &gTasks[FindTaskIdByFunc(Task_UpdateButtonFlash)]; - if (a == task->data[0] && c == 0) + if (button == task->tButtonId && !c) { task->data[1] = b; - task->data[2] = 1; + task->data[2] = TRUE; return; } - if (a == 3 && task->data[1] == 0 && c == 0) + if (button == BUTTON_COUNT && !task->data[1] && !c) return; - if (task->data[0] != 3) - sub_80E3AE8(task->data[0]); - sub_80E3B10(task, a, b); + + if (task->tButtonId != BUTTON_COUNT) + RestoreButtonColor(task->tButtonId); + + StartButtonFlash(task, button, b); } -static void Task_80E39BC(u8 taskId) +static void Task_UpdateButtonFlash(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->data[0] == 3 || task->data[2] == 0) + if (task->tButtonId == BUTTON_COUNT || !task->data[2]) return; - MultiplyInvertedPaletteRGBComponents(sub_80E3A74(task->data[0]), task->data[3], task->data[3], task->data[3]); - if (task->data[5] != 0) - { - task->data[5]--; - if (task->data[5] != 0) - return; - } + + MultiplyInvertedPaletteRGBComponents(GetButtonPalOffset(task->tButtonId), task->tColor, task->tColor, task->tColor); + + if (task->data[5] && --task->data[5]) + return; + task->data[5] = 2; if (task->data[4] >= 0) { - if (task->data[3] < 14) + if (task->tColor < 14) { - task->data[3] += task->data[4]; + task->tColor += task->data[4]; task->data[6] += task->data[4]; } else { - task->data[3] = 16; + task->tColor = 16; task->data[6]++; } } else { - task->data[3] += task->data[4]; + task->tColor += task->data[4]; task->data[6] += task->data[4]; } - if (task->data[3] == 16 && task->data[6] == 22) + if (task->tColor == 16 && task->data[6] == 22) { task->data[4] = -4; } - else if (task->data[3] == 0) + else if (task->tColor == 0) { task->data[2] = task->data[1]; task->data[4] = 2; @@ -795,45 +956,50 @@ static void Task_80E39BC(u8 taskId) } } -static u16 sub_80E3A74(u8 a) +static u16 GetButtonPalOffset(u8 button) { - const u16 arr[] = + const u16 palOffsets[] = { - IndexOfSpritePaletteTag(4) * 16 + 0x10E, - IndexOfSpritePaletteTag(6) * 16 + 0x10E, - IndexOfSpritePaletteTag(7) * 16 + 0x10E, - IndexOfSpritePaletteTag(7) * 16 + 0x101, + [BUTTON_PAGE] = IndexOfSpritePaletteTag(PALTAG_PAGE_SWITCH) * 16 + 0x10E, + [BUTTON_BACK] = IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON) * 16 + 0x10E, + [BUTTON_OK] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x10E, + [BUTTON_COUNT] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x101, }; - return arr[a]; + return palOffsets[button]; } -static void sub_80E3AE8(u8 a) +static void RestoreButtonColor(u8 button) { - u16 index = sub_80E3A74(a); - + u16 index = GetButtonPalOffset(button); gPlttBufferFaded[index] = gPlttBufferUnfaded[index]; } -static void sub_80E3B10(struct Task *task, u8 b, u8 c) +static void StartButtonFlash(struct Task *task, u8 button, bool8 c) { - task->data[0] = b; + task->tButtonId = button; task->data[1] = c; - task->data[2] = 1; - task->data[3] = 4; + task->data[2] = TRUE; + task->tColor = 4; task->data[4] = 2; task->data[5] = 0; task->data[6] = 4; } -static void sub_80E3B30(struct Sprite *sprite) +#undef tButtonId +#undef tColor + +#define tInvisible data[4] & 0x00FF +#define tFlashing data[4] & 0xFF00 + +static void SpriteCB_Cursor(struct Sprite *sprite) { if (sprite->animEnded) StartSpriteAnim(sprite, 0); - sprite->invisible = (sprite->data[4] & 0xFF); + sprite->invisible = sprite->tInvisible; if (sprite->data[0] == GetCurrentPageColumnCount()) sprite->invisible = TRUE; - if (sprite->invisible || (sprite->data[4] & 0xFF00) == 0 + if (sprite->invisible || !(sprite->tFlashing) || sprite->data[0] != sprite->data[2] || sprite->data[1] != sprite->data[3]) { sprite->data[5] = 0; @@ -848,34 +1014,40 @@ static void sub_80E3B30(struct Sprite *sprite) sprite->data[6] = -sprite->data[6]; sprite->data[7] = 2; } - if ((sprite->data[4] & 0xFF00) != 0) + if (sprite->tFlashing) { s8 gb = sprite->data[5]; s8 r = sprite->data[5] >> 1; - u16 index = IndexOfSpritePaletteTag(5) * 16 + 0x0101; + u16 index = IndexOfSpritePaletteTag(PALTAG_CURSOR) * 16 + 0x0101; MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); } } -static void sub_80E3C20(struct Sprite *sprite) -{ - const s16 arr[] = {0, -4, -2, -1}; +#define sDelay data[0] +#define sXPosId data[1] - if (sprite->data[0] == 0 || --sprite->data[0] == 0) +static void SpriteCB_InputArrow(struct Sprite *sprite) +{ + const s16 x[] = {0, -4, -2, -1}; + + if (sprite->sDelay == 0 || --sprite->sDelay == 0) { - sprite->data[0] = 8; - sprite->data[1] = (sprite->data[1] + 1) & 3; + sprite->sDelay = 8; + sprite->sXPosId = (sprite->sXPosId + 1) & (ARRAY_COUNT(x) - 1); } - sprite->pos2.x = arr[sprite->data[1]]; + sprite->pos2.x = x[sprite->sXPosId]; } -static void sub_80E3C6C(struct Sprite *sprite) +#undef sDelay +#undef sXPosId + +static void SpriteCB_Underscore(struct Sprite *sprite) { const s16 arr[] = {2, 3, 2, 1}; u8 var; - var = GetTextCaretPosition(); + var = GetTextEntryPosition(); if (var != (u8)sprite->data[0]) { sprite->pos2.y = 0; @@ -894,36 +1066,32 @@ static void sub_80E3C6C(struct Sprite *sprite) } } -//-------------------------------------------------- -// Cursor -//-------------------------------------------------- - -static void sub_80E3CC8(void) +static void CreateSprites(void) { - CursorInit(); + CreateCursorSprite(); CreatePageSwitcherSprites(); CreateBackOkSprites(); - CreateUnderscoreSprites(); + CreateTextEntrySprites(); CreateInputTargetIcon(); } -static void CursorInit(void) +static void CreateCursorSprite(void) { - gNamingScreenData->cursorSpriteId = CreateSprite(&gUnknown_0858C138, 38, 88, 1); - sub_80E3E3C(1); - gSprites[gNamingScreenData->cursorSpriteId].oam.priority = 1; - gSprites[gNamingScreenData->cursorSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; - gSprites[gNamingScreenData->cursorSpriteId].data[6] = 1; - gSprites[gNamingScreenData->cursorSpriteId].data[6] = 2; + sNamingScreen->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 38, 88, 1); + SetCursorInvisibility(TRUE); + gSprites[sNamingScreen->cursorSpriteId].oam.priority = 1; + gSprites[sNamingScreen->cursorSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[sNamingScreen->cursorSpriteId].data[6] = 1; + gSprites[sNamingScreen->cursorSpriteId].data[6] = 2; SetCursorPos(0, 0); } static void SetCursorPos(s16 x, s16 y) { - struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId]; + struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId]; - if (x < gUnknown_0858BEA0[sub_80E3274()]) - cursorSprite->pos1.x = gUnknown_0858BEA3[x + sub_80E3274() * 8] + 38; + if (x < sPageColumnCounts[sub_80E3274()]) + cursorSprite->pos1.x = sPageColumnXPos[x + sub_80E3274() * KBCOL_COUNT] + 38; else cursorSprite->pos1.x = 0; @@ -936,7 +1104,7 @@ static void SetCursorPos(s16 x, s16 y) static void GetCursorPos(s16 *x, s16 *y) { - struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId]; + struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId]; *x = cursorSprite->data[0]; *y = cursorSprite->data[1]; @@ -947,38 +1115,30 @@ static void MoveCursorToOKButton(void) SetCursorPos(GetCurrentPageColumnCount(), 2); } -static void sub_80E3E3C(u8 a) +static void SetCursorInvisibility(bool8 invisible) { - gSprites[gNamingScreenData->cursorSpriteId].data[4] &= -256; - gSprites[gNamingScreenData->cursorSpriteId].data[4] |= a; - StartSpriteAnim(&gSprites[gNamingScreenData->cursorSpriteId], 0); + gSprites[sNamingScreen->cursorSpriteId].data[4] &= 0xFF00; + gSprites[sNamingScreen->cursorSpriteId].data[4] |= invisible; + StartSpriteAnim(&gSprites[sNamingScreen->cursorSpriteId], 0); } -static void sub_80E3E94(u8 a) +static void SetCursorFlashing(bool8 flashing) { - gSprites[gNamingScreenData->cursorSpriteId].data[4] &= 0xFF; - gSprites[gNamingScreenData->cursorSpriteId].data[4] |= a << 8; + gSprites[sNamingScreen->cursorSpriteId].data[4] &= 0xFF; + gSprites[sNamingScreen->cursorSpriteId].data[4] |= flashing << 8; } -static void sub_80E3ED8(void) +static void SquishCursor(void) { - StartSpriteAnim(&gSprites[gNamingScreenData->cursorSpriteId], 1); + StartSpriteAnim(&gSprites[sNamingScreen->cursorSpriteId], 1); } static bool8 IsCursorAnimFinished(void) { - return gSprites[gNamingScreenData->cursorSpriteId].animEnded; + return gSprites[sNamingScreen->cursorSpriteId].animEnded; } -enum -{ - KEY_ROLE_CHAR, - KEY_ROLE_PAGE, - KEY_ROLE_BACKSPACE, - KEY_ROLE_OK, -}; - -static const u8 sKeyRoles[] = {KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK}; +static const u8 sButtonKeyRoles[] = {KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK}; static u8 GetKeyRoleAtCursorPos(void) { @@ -989,42 +1149,43 @@ static u8 GetKeyRoleAtCursorPos(void) if (cursorX < GetCurrentPageColumnCount()) return KEY_ROLE_CHAR; else - return sKeyRoles[cursorY]; + return sButtonKeyRoles[cursorY]; } +// If the cursor's x is equal to the column count, cursor is in the button column static u8 GetCurrentPageColumnCount(void) { - return gUnknown_0858BEA0[sub_80E3274()]; + return sPageColumnCounts[sub_80E3274()]; } static void CreatePageSwitcherSprites(void) { - u8 spriteId1; - u8 spriteId2; - u8 spriteId3; + u8 bgSpriteId; + u8 textSpriteId; + u8 buttonSpriteId; - spriteId1 = CreateSprite(&gUnknown_0858C0C0, 0xCC, 0x58, 0); - gNamingScreenData->selectBtnFrameSpriteId = spriteId1; - SetSubspriteTables(&gSprites[spriteId1], gUnknown_0858C050); - gSprites[spriteId1].invisible = TRUE; + bgSpriteId = CreateSprite(&sSpriteTemplate_PageSwitchBg, 204, 88, 0); + sNamingScreen->selectBtnFrameSpriteId = bgSpriteId; + SetSubspriteTables(&gSprites[bgSpriteId], sSubspriteTable_PageSwitchBg); + gSprites[bgSpriteId].invisible = TRUE; - spriteId2 = CreateSprite(&gUnknown_0858C0F0, 0xCC, 0x54, 1); - gSprites[spriteId1].data[6] = spriteId2; - SetSubspriteTables(&gSprites[spriteId2], gUnknown_0858C058); - gSprites[spriteId2].invisible = TRUE; + textSpriteId = CreateSprite(&sSpriteTemplate_PageSwitchText, 204, 84, 1); + gSprites[bgSpriteId].data[6] = textSpriteId; + SetSubspriteTables(&gSprites[textSpriteId], sSubspriteTable_PageSwitchText); + gSprites[textSpriteId].invisible = TRUE; - spriteId3 = CreateSprite(&gUnknown_0858C0D8, 0xCC, 0x53, 2); - gSprites[spriteId3].oam.priority = 1; - gSprites[spriteId1].data[7] = spriteId3; - gSprites[spriteId3].invisible = TRUE; + buttonSpriteId = CreateSprite(&sSpriteTemplate_PageSwitchButton, 204, 83, 2); + gSprites[buttonSpriteId].oam.priority = 1; + gSprites[bgSpriteId].data[7] = buttonSpriteId; + gSprites[buttonSpriteId].invisible = TRUE; } static void sub_80E4050(void) { - struct Sprite *sprite = &gSprites[gNamingScreenData->selectBtnFrameSpriteId]; + struct Sprite *sprite = &gSprites[sNamingScreen->selectBtnFrameSpriteId]; sprite->data[0] = 2; - sprite->data[1] = gNamingScreenData->currentPage; + sprite->data[1] = sNamingScreen->currentPage; } static u8 sub_80E40AC(struct Sprite *); @@ -1032,7 +1193,7 @@ static u8 sub_80E4100(struct Sprite *); static u8 sub_80E4104(struct Sprite *); static u8 sub_80E4178(struct Sprite *); -static u8 (*const gUnknown_0858BEE8[])(struct Sprite *) = +static u8 (*const sPageSwitchSpriteFuncs[])(struct Sprite *) = { sub_80E40AC, sub_80E4100, @@ -1040,9 +1201,9 @@ static u8 (*const gUnknown_0858BEE8[])(struct Sprite *) = sub_80E4178, }; -static void sub_80E4084(struct Sprite *sprite) +static void SpriteCB_PageSwitch(struct Sprite *sprite) { - while (gUnknown_0858BEE8[sprite->data[0]](sprite) != 0); + while (sPageSwitchSpriteFuncs[sprite->data[0]](sprite) != 0); } static u8 sub_80E40AC(struct Sprite *sprite) @@ -1050,7 +1211,7 @@ static u8 sub_80E40AC(struct Sprite *sprite) struct Sprite *sprite1 = &gSprites[sprite->data[6]]; struct Sprite *sprite2 = &gSprites[sprite->data[7]]; - sub_80E41B8(sub_80E3244(gNamingScreenData->currentPage), sprite1, sprite2); + sub_80E41B8(sub_80E3244(sNamingScreen->currentPage), sprite1, sprite2); sprite->data[0]++; return 0; } @@ -1090,8 +1251,17 @@ static u8 sub_80E4178(struct Sprite *sprite) return 0; } -static const u16 gUnknown_0858BEF8[] = {1, 3, 2}; -static const u16 gUnknown_0858BEFE[] = {4, 6, 5}; +static const u16 gUnknown_0858BEF8[] = { + PALTAG_1, + PALTAG_3, + PALTAG_2 +}; + +static const u16 gUnknown_0858BEFE[] = { + GFXTAG_PAGE_SWITCH_UPPER, + GFXTAG_PAGE_SWITCH_OTHERS, + GFXTAG_PAGE_SWITCH_LOWER +}; static void sub_80E41B8(u8 a, struct Sprite *b, struct Sprite *c) { @@ -1106,29 +1276,29 @@ static void CreateBackOkSprites(void) { u8 spriteId; - spriteId = CreateSprite(&gUnknown_0858C108, 0xCC, 0x74, 0); - SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C070); + spriteId = CreateSprite(&sSpriteTemplate_BackButton, 204, 116, 0); + SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_Button); gSprites[spriteId].invisible = TRUE; - spriteId = CreateSprite(&gUnknown_0858C120, 0xCC, 0x8C, 0); - SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C070); + spriteId = CreateSprite(&sSpriteTemplate_OkButton, 204, 140, 0); + SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_Button); gSprites[spriteId].invisible = TRUE; } -static void CreateUnderscoreSprites(void) +static void CreateTextEntrySprites(void) { u8 spriteId; s16 xPos; u8 i; - xPos = gNamingScreenData->inputCharBaseXPos - 5; - spriteId = CreateSprite(&sSpriteTemplate_InputArrow, xPos, 0x38, 0); + xPos = sNamingScreen->inputCharBaseXPos - 5; + spriteId = CreateSprite(&sSpriteTemplate_InputArrow, xPos, 56, 0); gSprites[spriteId].oam.priority = 3; gSprites[spriteId].invisible = TRUE; - xPos = gNamingScreenData->inputCharBaseXPos; - for (i = 0; i < gNamingScreenData->template->maxChars; i++, xPos += 8) + xPos = sNamingScreen->inputCharBaseXPos; + for (i = 0; i < sNamingScreen->template->maxChars; i++, xPos += 8) { - spriteId = CreateSprite(&sSpriteTemplate_Underscore, xPos + 3, 0x3C, 0); + spriteId = CreateSprite(&sSpriteTemplate_Underscore, xPos + 3, 60, 0); gSprites[spriteId].oam.priority = 3; gSprites[spriteId].data[0] = i; gSprites[spriteId].invisible = TRUE; @@ -1139,27 +1309,27 @@ static void CreateUnderscoreSprites(void) // Icon creation (the thing you're naming or giving input to) //-------------------------------------------------- -static void TaskDummy2(void); +static void NamingScreen_NoIcon(void); static void NamingScreen_CreatePlayerIcon(void); static void NamingScreen_CreatePCIcon(void); static void NamingScreen_CreateMonIcon(void); -static void NamingScreen_CreateWandaDadIcon(void); +static void NamingScreen_CreateWaldaDadIcon(void); static void (*const sIconFunctions[])(void) = { - TaskDummy2, + NamingScreen_NoIcon, NamingScreen_CreatePlayerIcon, NamingScreen_CreatePCIcon, NamingScreen_CreateMonIcon, - NamingScreen_CreateWandaDadIcon, + NamingScreen_CreateWaldaDadIcon, }; static void CreateInputTargetIcon(void) { - sIconFunctions[gNamingScreenData->template->iconFunction](); + sIconFunctions[sNamingScreen->template->iconFunction](); } -static void TaskDummy2(void) +static void NamingScreen_NoIcon(void) { } @@ -1169,8 +1339,8 @@ static void NamingScreen_CreatePlayerIcon(void) u8 rivalGfxId; u8 spriteId; - rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, gNamingScreenData->monSpecies); - spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0); + rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, sNamingScreen->monSpecies); + spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 56, 37, 0); gSprites[spriteId].oam.priority = 3; StartSpriteAnim(&gSprites[spriteId], 4); } @@ -1179,8 +1349,8 @@ static void NamingScreen_CreatePCIcon(void) { u8 spriteId; - spriteId = CreateSprite(&gUnknown_0858C180, 0x38, 0x29, 0); - SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C078); + spriteId = CreateSprite(&sSpriteTemplate_PCIcon, 56, 41, 0); + SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_PCIcon); gSprites[spriteId].oam.priority = 3; } @@ -1189,15 +1359,15 @@ static void NamingScreen_CreateMonIcon(void) u8 spriteId; LoadMonIconPalettes(); - spriteId = CreateMonIcon(gNamingScreenData->monSpecies, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->monPersonality, 1); + spriteId = CreateMonIcon(sNamingScreen->monSpecies, SpriteCallbackDummy, 56, 40, 0, sNamingScreen->monPersonality, 1); gSprites[spriteId].oam.priority = 3; } -static void NamingScreen_CreateWandaDadIcon(void) +static void NamingScreen_CreateWaldaDadIcon(void) { u8 spriteId; - spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 0x38, 0x25, 0); + spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 56, 37, 0); gSprites[spriteId].oam.priority = 3; StartSpriteAnim(&gSprites[spriteId], 4); } @@ -1213,10 +1383,10 @@ static bool8 KeyboardKeyHandler_OK(u8); static bool8 (*const sKeyboardKeyHandlers[])(u8) = { - KeyboardKeyHandler_Character, - KeyboardKeyHandler_Page, - KeyboardKeyHandler_Backspace, - KeyboardKeyHandler_OK, + [KEY_ROLE_CHAR] = KeyboardKeyHandler_Character, + [KEY_ROLE_PAGE] = KeyboardKeyHandler_Page, + [KEY_ROLE_BACKSPACE] = KeyboardKeyHandler_Backspace, + [KEY_ROLE_OK] = KeyboardKeyHandler_OK, }; static bool8 HandleKeyboardEvent(void) @@ -1224,16 +1394,16 @@ static bool8 HandleKeyboardEvent(void) u8 event = GetInputEvent(); u8 keyRole = GetKeyRoleAtCursorPos(); - if (event == KBEVENT_PRESSED_SELECT) + if (event == INPUT_SELECT) { - return sub_80E45E0(); + return SwitchKeyboardPage(); } - else if (event == KBEVENT_PRESSED_B) + else if (event == INPUT_B_BUTTON) { DeleteTextCharacter(); return FALSE; } - else if (event == KBEVENT_PRESSED_START) + else if (event == INPUT_START) { MoveCursorToOKButton(); return FALSE; @@ -1246,16 +1416,16 @@ static bool8 HandleKeyboardEvent(void) static bool8 KeyboardKeyHandler_Character(u8 event) { - sub_80E3948(3, 0, 0); - if (event == KBEVENT_PRESSED_A) + TryStartButtonFlash(BUTTON_COUNT, FALSE, FALSE); + if (event == INPUT_A_BUTTON) { - bool8 var = sub_80E4B54(); + bool8 textFull = AddTextCharacter(); - sub_80E3ED8(); - if (var) + SquishCursor(); + if (textFull) { SetInputState(INPUT_STATE_2); - gNamingScreenData->state = MAIN_STATE_MOVE_TO_OK_BUTTON; + sNamingScreen->state = STATE_MOVE_TO_OK_BUTTON; } } return FALSE; @@ -1263,37 +1433,37 @@ static bool8 KeyboardKeyHandler_Character(u8 event) static bool8 KeyboardKeyHandler_Page(u8 event) { - sub_80E3948(0, 1, 0); - if (event == KBEVENT_PRESSED_A) - return sub_80E45E0(); + TryStartButtonFlash(BUTTON_PAGE, TRUE, FALSE); + if (event == INPUT_A_BUTTON) + return SwitchKeyboardPage(); else return FALSE; } static bool8 KeyboardKeyHandler_Backspace(u8 event) { - sub_80E3948(1, 1, 0); - if (event == KBEVENT_PRESSED_A) + TryStartButtonFlash(BUTTON_BACK, TRUE, FALSE); + if (event == INPUT_A_BUTTON) DeleteTextCharacter(); return FALSE; } static bool8 KeyboardKeyHandler_OK(u8 event) { - sub_80E3948(2, 1, 0); - if (event == KBEVENT_PRESSED_A) + TryStartButtonFlash(BUTTON_OK, TRUE, FALSE); + if (event == INPUT_A_BUTTON) { PlaySE(SE_SELECT); - gNamingScreenData->state = MAIN_STATE_6; + sNamingScreen->state = STATE_6; return TRUE; } else return FALSE; } -static bool8 sub_80E45E0(void) +static bool8 SwitchKeyboardPage(void) { - gNamingScreenData->state = MAIN_STATE_START_PAGE_SWAP; + sNamingScreen->state = STATE_START_PAGE_SWAP; return TRUE; } @@ -1301,16 +1471,9 @@ static bool8 sub_80E45E0(void) // Input handling //-------------------------------------------------- -enum -{ - FNKEY_CASE, - FNKEY_BACK, - FNKEY_OK, -}; - #define tState data[0] #define tKeyboardEvent data[1] -#define tKbFunctionKey data[2] +#define tButtonId data[2] static void InputState_Disabled(struct Task *); @@ -1327,7 +1490,7 @@ static void (*const sInputStateFuncs[])(struct Task *) = static void Task_HandleInput(u8); static void HandleDpadMovement(struct Task *); -static void InputInit(void) +static void CreateInputHandlerTask(void) { CreateTask(Task_HandleInput, 1); } @@ -1353,116 +1516,120 @@ static void Task_HandleInput(u8 taskId) static void InputState_Disabled(struct Task *task) { - task->tKeyboardEvent = 0; + task->tKeyboardEvent = INPUT_NONE; } static void InputState_Enabled(struct Task *task) { - task->tKeyboardEvent = 0; + task->tKeyboardEvent = INPUT_NONE; - if (gMain.newKeys & A_BUTTON) - task->tKeyboardEvent = KBEVENT_PRESSED_A; - else if (gMain.newKeys & B_BUTTON) - task->tKeyboardEvent = KBEVENT_PRESSED_B; - else if (gMain.newKeys & SELECT_BUTTON) - task->tKeyboardEvent = KBEVENT_PRESSED_SELECT; - else if (gMain.newKeys & START_BUTTON) - task->tKeyboardEvent = KBEVENT_PRESSED_START; + if (JOY_NEW(A_BUTTON)) + task->tKeyboardEvent = INPUT_A_BUTTON; + else if (JOY_NEW(B_BUTTON)) + task->tKeyboardEvent = INPUT_B_BUTTON; + else if (JOY_NEW(SELECT_BUTTON)) + task->tKeyboardEvent = INPUT_SELECT; + else if (JOY_NEW(START_BUTTON)) + task->tKeyboardEvent = INPUT_START; else HandleDpadMovement(task); } static void InputState_2(struct Task *task) { - task->tKeyboardEvent = 0; + task->tKeyboardEvent = INPUT_NONE; } static void HandleDpadMovement(struct Task *task) { const s16 sDpadDeltaX[] = { - 0, //none - 0, //up - 0, //down - -1, //left - 1 //right + [INPUT_NONE] = 0, + [INPUT_DPAD_UP] = 0, + [INPUT_DPAD_DOWN] = 0, + [INPUT_DPAD_LEFT] = -1, + [INPUT_DPAD_RIGHT] = 1 }; const s16 sDpadDeltaY[] = { - 0, //none - -1, //up - 1, //down - 0, //left - 0 //right + [INPUT_NONE] = 0, + [INPUT_DPAD_UP] = -1, + [INPUT_DPAD_DOWN] = 1, + [INPUT_DPAD_LEFT] = 0, + [INPUT_DPAD_RIGHT] = 0 }; - const s16 s4RowTo3RowTableY[] = {0, 1, 1, 2}; + const s16 sKeyRowToButtonRow[KBROW_COUNT] = {0, 1, 1, 2}; const s16 gUnknown_0858BF50[] = {0, 0, 3}; s16 cursorX; s16 cursorY; - u16 dpadDir; + u16 input; s16 prevCursorX; GetCursorPos(&cursorX, &cursorY); - dpadDir = 0; - if (gMain.newAndRepeatedKeys & DPAD_UP) - dpadDir = 1; - if (gMain.newAndRepeatedKeys & DPAD_DOWN) - dpadDir = 2; - if (gMain.newAndRepeatedKeys & DPAD_LEFT) - dpadDir = 3; - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - dpadDir = 4; + input = INPUT_NONE; + if (JOY_REPEAT(DPAD_UP)) + input = INPUT_DPAD_UP; + if (JOY_REPEAT(DPAD_DOWN)) + input = INPUT_DPAD_DOWN; + if (JOY_REPEAT(DPAD_LEFT)) + input = INPUT_DPAD_LEFT; + if (JOY_REPEAT(DPAD_RIGHT)) + input = INPUT_DPAD_RIGHT; - //Get new cursor position + // Get new cursor position prevCursorX = cursorX; - cursorX += sDpadDeltaX[dpadDir]; - cursorY += sDpadDeltaY[dpadDir]; + cursorX += sDpadDeltaX[input]; + cursorY += sDpadDeltaY[input]; - //Wrap cursor position in the X direction + // Wrap cursor position in the X direction if (cursorX < 0) cursorX = GetCurrentPageColumnCount(); if (cursorX > GetCurrentPageColumnCount()) cursorX = 0; - //Handle cursor movement in X direction - if (sDpadDeltaX[dpadDir] != 0) + + // Handle moving on/off the button column + if (sDpadDeltaX[input] != 0) { if (cursorX == GetCurrentPageColumnCount()) { - //We are now on the last column - task->tKbFunctionKey = cursorY; - cursorY = s4RowTo3RowTableY[cursorY]; + // Moved onto button column + task->tButtonId = cursorY; + cursorY = sKeyRowToButtonRow[cursorY]; } else if (prevCursorX == GetCurrentPageColumnCount()) { + // Moved off button column if (cursorY == 1) - cursorY = task->tKbFunctionKey; + cursorY = task->tButtonId; else cursorY = gUnknown_0858BF50[cursorY]; } } + // Wrap cursor position in the y direction if (cursorX == GetCurrentPageColumnCount()) { - //There are only 3 keys on the last column, unlike the others, - //so wrap Y accordingly + // There are only 3 keys in the button column + // so wrap Y accordingly if (cursorY < 0) - cursorY = 2; - if (cursorY > 2) + cursorY = BUTTON_COUNT - 1; + if (cursorY >= BUTTON_COUNT) cursorY = 0; + if (cursorY == 0) - task->tKbFunctionKey = FNKEY_BACK; - else if (cursorY == 2) - task->tKbFunctionKey = FNKEY_OK; + task->tButtonId = BUTTON_BACK; + else if (cursorY == BUTTON_COUNT - 1) + task->tButtonId = BUTTON_OK; } else { if (cursorY < 0) - cursorY = 3; - if (cursorY > 3) + cursorY = KBROW_COUNT - 1; + if (cursorY > KBROW_COUNT - 1) cursorY = 0; } SetCursorPos(cursorX, cursorY); @@ -1470,55 +1637,55 @@ static void HandleDpadMovement(struct Task *task) #undef tState #undef tKeyboardEvent -#undef tKbFunctionKey +#undef tButtonId -static void sub_80E4894(void) +static void DrawNormalTextEntryBox(void) { - FillWindowPixelBuffer(gNamingScreenData->windows[3], PIXEL_FILL(1)); - AddTextPrinterParameterized(gNamingScreenData->windows[3], 1, gNamingScreenData->template->title, 8, 1, 0, 0); - PutWindowTilemap(gNamingScreenData->windows[3]); + FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1)); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], 1, sNamingScreen->template->title, 8, 1, 0, 0); + PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]); } -static void sub_80E48E8(void) +static void DrawMonTextEntryBox(void) { - u8 buffer[0x20]; + u8 buffer[32]; - StringCopy(buffer, gSpeciesNames[gNamingScreenData->monSpecies]); - StringAppendN(buffer, gNamingScreenData->template->title, 15); - FillWindowPixelBuffer(gNamingScreenData->windows[3], PIXEL_FILL(1)); - AddTextPrinterParameterized(gNamingScreenData->windows[3], 1, buffer, 8, 1, 0, 0); - PutWindowTilemap(gNamingScreenData->windows[3]); + StringCopy(buffer, gSpeciesNames[sNamingScreen->monSpecies]); + StringAppendN(buffer, sNamingScreen->template->title, 15); + FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1)); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], 1, buffer, 8, 1, 0, 0); + PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]); } -static void (*const gUnknown_0858BF58[])(void) = +static void (*const sDrawTextEntryBoxFuncs[])(void) = { - sub_80E4894, - sub_80E4894, - sub_80E48E8, - sub_80E48E8, - sub_80E4894, + [NAMING_SCREEN_PLAYER] = DrawNormalTextEntryBox, + [NAMING_SCREEN_BOX] = DrawNormalTextEntryBox, + [NAMING_SCREEN_CAUGHT_MON] = DrawMonTextEntryBox, + [NAMING_SCREEN_NICKNAME] = DrawMonTextEntryBox, + [NAMING_SCREEN_WALDA] = DrawNormalTextEntryBox, }; -static void sub_80E4964(void) +static void DrawTextEntryBox(void) { - gUnknown_0858BF58[gNamingScreenData->templateNum](); + sDrawTextEntryBoxFuncs[sNamingScreen->templateNum](); } -static void TaskDummy3(void); -static void sub_80E49BC(void); +static void DummyGenderIcon(void); +static void DrawGenderIcon(void); -static void (*const gUnknown_0858BF6C[])(void) = +static void (*const sDrawGenderIconFuncs[])(void) = { - TaskDummy3, - sub_80E49BC, + [FALSE] = DummyGenderIcon, + [TRUE] = DrawGenderIcon, }; -static void sub_80E498C(void) +static void TryDrawGenderIcon(void) { - gUnknown_0858BF6C[gNamingScreenData->template->addGenderIcon](); + sDrawGenderIconFuncs[sNamingScreen->template->addGenderIcon](); } -static void TaskDummy3(void) +static void DummyGenderIcon(void) { } @@ -1529,49 +1696,48 @@ static const u8 sGenderColors[2][3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED} }; -static void sub_80E49BC(void) +static void DrawGenderIcon(void) { - u8 genderSymbol[2]; + u8 text[2]; bool8 isFemale = FALSE; - StringCopy(genderSymbol, gText_MaleSymbol); - - if (gNamingScreenData->monGender != MON_GENDERLESS) + StringCopy(text, gText_MaleSymbol); + if (sNamingScreen->monGender != MON_GENDERLESS) { - if (gNamingScreenData->monGender == MON_FEMALE) + if (sNamingScreen->monGender == MON_FEMALE) { - StringCopy(genderSymbol, gText_FemaleSymbol); + StringCopy(text, gText_FemaleSymbol); isFemale = TRUE; } - AddTextPrinterParameterized3(gNamingScreenData->windows[2], 1, 0x68, 1, sGenderColors[isFemale], -1, genderSymbol); + AddTextPrinterParameterized3(sNamingScreen->windows[WIN_TEXT_ENTRY], 1, 0x68, 1, sGenderColors[isFemale], -1, text); } } -static u8 GetCharAtKeyboardPos(s16 a, s16 b) +static u8 GetCharAtKeyboardPos(s16 x, s16 y) { - return gUnknown_0858BE40[a + b * 8 + sub_80E3274() * 32]; + return sKeyboardChars[x + y * KBCOL_COUNT + sub_80E3274() * KBCOL_COUNT * KBROW_COUNT]; } -static u8 GetTextCaretPosition(void) +static u8 GetTextEntryPosition(void) { u8 i; - for (i = 0; i < gNamingScreenData->template->maxChars; i++) + for (i = 0; i < sNamingScreen->template->maxChars; i++) { - if (gNamingScreenData->textBuffer[i] == EOS) + if (sNamingScreen->textBuffer[i] == EOS) return i; } - return gNamingScreenData->template->maxChars - 1; + return sNamingScreen->template->maxChars - 1; } static u8 GetPreviousTextCaretPosition(void) { s8 i; - for (i = gNamingScreenData->template->maxChars - 1; i > 0; i--) + for (i = sNamingScreen->template->maxChars - 1; i > 0; i--) { - if (gNamingScreenData->textBuffer[i] != EOS) + if (sNamingScreen->textBuffer[i] != EOS) return i; } return 0; @@ -1583,109 +1749,109 @@ static void DeleteTextCharacter(void) u8 var2; index = GetPreviousTextCaretPosition(); - gNamingScreenData->textBuffer[index] = 0; - sub_80E4D10(); + sNamingScreen->textBuffer[index] = 0; + DrawTextEntry(); CopyBgTilemapBufferToVram(3); - gNamingScreenData->textBuffer[index] = EOS; + sNamingScreen->textBuffer[index] = EOS; var2 = GetKeyRoleAtCursorPos(); if (var2 == 0 || var2 == 2) - sub_80E3948(1, 0, 1); + TryStartButtonFlash(BUTTON_BACK, FALSE, TRUE); PlaySE(SE_BOWA); } -static bool8 sub_80E4B54(void) +// Returns TRUE if the text entry is now full +static bool8 AddTextCharacter(void) { s16 x; s16 y; GetCursorPos(&x, &y); - AddTextCharacter(GetCharAtKeyboardPos(x, y)); - sub_80E4D10(); + BufferCharacter(GetCharAtKeyboardPos(x, y)); + DrawTextEntry(); CopyBgTilemapBufferToVram(3); PlaySE(SE_SELECT); - if (GetPreviousTextCaretPosition() != gNamingScreenData->template->maxChars - 1) + if (GetPreviousTextCaretPosition() != sNamingScreen->template->maxChars - 1) return FALSE; else return TRUE; } -static void AddTextCharacter(u8 ch) +static void BufferCharacter(u8 ch) { - u8 index = GetTextCaretPosition(); - - gNamingScreenData->textBuffer[index] = ch; + u8 index = GetTextEntryPosition(); + sNamingScreen->textBuffer[index] = ch; } -static void sub_80E4BE4(void) +static void SaveInputText(void) { u8 i; - for (i = 0; i < gNamingScreenData->template->maxChars; i++) + for (i = 0; i < sNamingScreen->template->maxChars; i++) { - if (gNamingScreenData->textBuffer[i] != CHAR_SPACE && gNamingScreenData->textBuffer[i] != EOS) + if (sNamingScreen->textBuffer[i] != CHAR_SPACE && sNamingScreen->textBuffer[i] != EOS) { - StringCopyN(gNamingScreenData->destBuffer, gNamingScreenData->textBuffer, gNamingScreenData->template->maxChars + 1); + StringCopyN(sNamingScreen->destBuffer, sNamingScreen->textBuffer, sNamingScreen->template->maxChars + 1); break; } } } -static void choose_name_or_words_screen_load_bg_tile_patterns(void) +static void LoadGfx(void) { - LZ77UnCompWram(gNamingScreenMenu_Gfx, gNamingScreenData->tileBuffer); - LoadBgTiles(1, gNamingScreenData->tileBuffer, 0x600, 0); - LoadBgTiles(2, gNamingScreenData->tileBuffer, 0x600, 0); - LoadBgTiles(3, gNamingScreenData->tileBuffer, 0x600, 0); - LoadSpriteSheets(gUnknown_0858C1C8); - LoadSpritePalettes(gUnknown_0858C230); + LZ77UnCompWram(gNamingScreenMenu_Gfx, sNamingScreen->tileBuffer); + LoadBgTiles(1, sNamingScreen->tileBuffer, sizeof(sNamingScreen->tileBuffer), 0); + LoadBgTiles(2, sNamingScreen->tileBuffer, sizeof(sNamingScreen->tileBuffer), 0); + LoadBgTiles(3, sNamingScreen->tileBuffer, sizeof(sNamingScreen->tileBuffer), 0); + LoadSpriteSheets(sSpriteSheets); + LoadSpritePalettes(sSpritePalettes); } -static void sub_80E4CB8(void) +static void CreateHelperTasks(void) { - InputInit(); - sub_80E3920(); + CreateInputHandlerTask(); + CreateButtonFlashTask(); } -static void choose_name_or_words_screen_apply_bg_pals(void) +static void LoadPalettes(void) { LoadPalette(gNamingScreenMenu_Pal, 0, 0xC0); - LoadPalette(gUnknown_0858BD78, 0xA0, sizeof(gUnknown_0858BD78)); - LoadPalette(stdpal_get(2), 0xB0, 0x20); + LoadPalette(sKeyboard_Pal, 0xA0, sizeof(sKeyboard_Pal)); + LoadPalette(GetTextWindowPalette(2), 0xB0, 0x20); } -static void sub_80E4CF8(u8 bg, const void *src) +static void DrawBgTilemap(u8 bg, const void *src) { CopyToBgTilemapBuffer(bg, src, 0, 0); } -static void nullsub_10(u8 a1, u8 page) +static void NamingScreen_Dummy(u8 bg, u8 page) { } -static void sub_80E4D10(void) +static void DrawTextEntry(void) { u8 i; u8 temp[2]; - u16 unk2; - u8 maxChars = gNamingScreenData->template->maxChars; - u16 unk = gNamingScreenData->inputCharBaseXPos - 0x40; + u16 extraWidth; + u8 maxChars = sNamingScreen->template->maxChars; + u16 x = sNamingScreen->inputCharBaseXPos - 0x40; - FillWindowPixelBuffer(gNamingScreenData->windows[2], PIXEL_FILL(1)); + FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY], PIXEL_FILL(1)); for (i = 0; i < maxChars; i++) { - temp[0] = gNamingScreenData->textBuffer[i]; + temp[0] = sNamingScreen->textBuffer[i]; temp[1] = gText_ExpandedPlaceholder_Empty[0]; - unk2 = (IsLetter(temp[0]) == TRUE) ? 2 : 0; + extraWidth = (IsWideLetter(temp[0]) == TRUE) ? 2 : 0; - AddTextPrinterParameterized(gNamingScreenData->windows[2], 1, temp, i * 8 + unk + unk2, 1, 0xFF, NULL); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], 1, temp, i * 8 + x + extraWidth, 1, 0xFF, NULL); } - sub_80E498C(); - CopyWindowToVram(gNamingScreenData->windows[2], 2); - PutWindowTilemap(gNamingScreenData->windows[2]); + TryDrawGenderIcon(); + CopyWindowToVram(sNamingScreen->windows[WIN_TEXT_ENTRY], 2); + PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY]); } struct TextColor // Needed because of alignment @@ -1704,77 +1870,77 @@ static const struct TextColor sTextColorStruct = static const u8 sFillValues[KBPAGE_COUNT] = { - [KBPAGE_LETTERS_LOWER] = PIXEL_FILL(0xE), - [KBPAGE_LETTERS_UPPER] = PIXEL_FILL(0xD), - [KBPAGE_SYMBOLS] = PIXEL_FILL(0xF) + [KBPAGE_LETTERS_LOWER] = PIXEL_FILL(14), + [KBPAGE_LETTERS_UPPER] = PIXEL_FILL(13), + [KBPAGE_SYMBOLS] = PIXEL_FILL(15) }; static const u8 *const sKeyboardTextColors[KBPAGE_COUNT] = { [KBPAGE_LETTERS_LOWER] = sTextColorStruct.colors[1], [KBPAGE_LETTERS_UPPER] = sTextColorStruct.colors[0], - [KBPAGE_SYMBOLS] = sTextColorStruct.colors[2] + [KBPAGE_SYMBOLS] = sTextColorStruct.colors[2] }; -static void sub_80E4DE4(u8 window, u8 page) +static void PrintKeyboardKeys(u8 window, u8 page) { u8 i; FillWindowPixelBuffer(window, sFillValues[page]); for (i = 0; i < KBROW_COUNT; i++) - { AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]); - } PutWindowTilemap(window); } -static const u8 *const gUnknown_0858BF98[] = +static const u8 *const sKeyboardPageTilemaps[] = { - gUnknown_08DD4620, - gUnknown_08DD46E0, - gUnknown_08DD47A0 + [KBPAGE_LETTERS_LOWER] = gUnknown_08DD4620, // upper + [KBPAGE_LETTERS_UPPER] = gUnknown_08DD46E0, // lower + [KBPAGE_SYMBOLS] = gUnknown_08DD47A0 // symbols }; -static void sub_80E4E5C(void) +// There are always 2 keyboard pages drawn, the current page and the one that will shown next if the player switches +// When the page switch is complete this function invisibly replaces the old page with the new next one +static void DrawKeyboardPageOnDeck(void) { - u8 unk1; - u8 unk2; - u8 unk3; + u8 bg; + u8 bg_; + u8 windowId; u8 bg1Priority = GetGpuReg(REG_OFFSET_BG1CNT) & 3; u8 bg2Priority = GetGpuReg(REG_OFFSET_BG2CNT) & 3; if (bg1Priority > bg2Priority) { - unk1 = 1; - unk2 = 1; - unk3 = gNamingScreenData->windows[0]; + bg = 1; + bg_ = 1; + windowId = sNamingScreen->windows[WIN_KB_PAGE_1]; } else { - unk1 = 2; - unk2 = 2; - unk3 = gNamingScreenData->windows[1]; + bg = 2; + bg_ = 2; + windowId = sNamingScreen->windows[WIN_KB_PAGE_2]; } - sub_80E4CF8(unk1, gUnknown_0858BF98[gNamingScreenData->currentPage]); - sub_80E4DE4(unk3, sub_80E3254()); - nullsub_10(unk1, sub_80E3254()); - CopyBgTilemapBufferToVram(unk2); + DrawBgTilemap(bg, sKeyboardPageTilemaps[sNamingScreen->currentPage]); + PrintKeyboardKeys(windowId, sub_80E3254()); + NamingScreen_Dummy(bg, sub_80E3254()); + CopyBgTilemapBufferToVram(bg_); } -static void sub_80E4EF0(void) +static void PrintControls(void) { const u8 color[3] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; - FillWindowPixelBuffer(gNamingScreenData->windows[4], PIXEL_FILL(15)); - AddTextPrinterParameterized3(gNamingScreenData->windows[4], 0, 2, 1, color, 0, gText_MoveOkBack); - PutWindowTilemap(gNamingScreenData->windows[4]); - CopyWindowToVram(gNamingScreenData->windows[4], 3); + FillWindowPixelBuffer(sNamingScreen->windows[WIN_BANNER], PIXEL_FILL(15)); + AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], 0, 2, 1, color, 0, gText_MoveOkBack); + PutWindowTilemap(sNamingScreen->windows[WIN_BANNER]); + CopyWindowToVram(sNamingScreen->windows[WIN_BANNER], 3); } -static void sub_80E4F58(void) +static void CB2_NamingScreen(void) { RunTasks(); AnimateSprites(); @@ -1782,13 +1948,13 @@ static void sub_80E4F58(void) UpdatePaletteFade(); } -static void NamingScreen_TurnOffScreen(void) +static void NamingScreen_ResetVHBlank(void) { SetVBlankCallback(NULL); SetHBlankCallback(NULL); } -static void NamingScreen_InitDisplayMode(void) +static void NamingScreen_SetVBlank(void) { SetVBlankCallback(VBlankCB_NamingScreen); } @@ -1798,15 +1964,15 @@ static void VBlankCB_NamingScreen(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - SetGpuReg(REG_OFFSET_BG1VOFS, gNamingScreenData->bg1vOffset); - SetGpuReg(REG_OFFSET_BG2VOFS, gNamingScreenData->bg2vOffset); + SetGpuReg(REG_OFFSET_BG1VOFS, sNamingScreen->bg1vOffset); + SetGpuReg(REG_OFFSET_BG2VOFS, sNamingScreen->bg2vOffset); SetGpuReg(REG_OFFSET_BG1CNT, GetGpuReg(REG_OFFSET_BG1CNT) & 0xFFFC); - SetGpuRegBits(REG_OFFSET_BG1CNT, gNamingScreenData->bg1Priority); + SetGpuRegBits(REG_OFFSET_BG1CNT, sNamingScreen->bg1Priority); SetGpuReg(REG_OFFSET_BG2CNT, GetGpuReg(REG_OFFSET_BG2CNT) & 0xFFFC); - SetGpuRegBits(REG_OFFSET_BG2CNT, gNamingScreenData->bg2Priority); + SetGpuRegBits(REG_OFFSET_BG2CNT, sNamingScreen->bg2Priority); } -static void sub_80E501C(void) +static void NamingScreen_ShowBgs(void) { ShowBg(0); ShowBg(1); @@ -1814,7 +1980,8 @@ static void sub_80E501C(void) ShowBg(3); } -static bool8 IsLetter(u8 character) +// Always false (presumably for non-latin languages) +static bool8 IsWideLetter(u8 character) { u8 i; @@ -1826,69 +1993,70 @@ static bool8 IsLetter(u8 character) return FALSE; } -static void sub_80E5074(void) +// Debug? Unused, and arguments aren't sensible for non-player screens. +static void Debug_NamingScreenPlayer(void) { - DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); + DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } -static void sub_80E509C(void) +static void Debug_NamingScreenBox(void) { - DoNamingScreen(1, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); + DoNamingScreen(NAMING_SCREEN_BOX, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } -static void sub_80E50C4(void) +static void Debug_NamingScreenCaughtMon(void) { - DoNamingScreen(2, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); + DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } -static void sub_80E50EC(void) +static void Debug_NamingScreenNickname(void) { - DoNamingScreen(3, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); + DoNamingScreen(NAMING_SCREEN_NICKNAME, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } //-------------------------------------------------- // Forward-declared variables //-------------------------------------------------- -static const struct NamingScreenTemplate playerNamingScreenTemplate = +static const struct NamingScreenTemplate sPlayerNamingScreenTemplate = { - .copyExistingString = 0, + .copyExistingString = FALSE, .maxChars = 7, .iconFunction = 1, - .addGenderIcon = 0, + .addGenderIcon = FALSE, .initialPage = KBPAGE_LETTERS_UPPER, .unused = 35, .title = gText_YourName, }; -static const struct NamingScreenTemplate pcBoxNamingTemplate = +static const struct NamingScreenTemplate sPCBoxNamingTemplate = { - .copyExistingString = 0, + .copyExistingString = FALSE, .maxChars = 8, .iconFunction = 2, - .addGenderIcon = 0, + .addGenderIcon = FALSE, .initialPage = KBPAGE_LETTERS_UPPER, .unused = 19, .title = gText_BoxName, }; -static const struct NamingScreenTemplate monNamingScreenTemplate = +static const struct NamingScreenTemplate sMonNamingScreenTemplate = { - .copyExistingString = 0, + .copyExistingString = FALSE, .maxChars = 10, .iconFunction = 3, - .addGenderIcon = 1, + .addGenderIcon = TRUE, .initialPage = KBPAGE_LETTERS_UPPER, .unused = 35, .title = gText_PkmnsNickname, }; -static const struct NamingScreenTemplate wandaWordsScreenTemplate = +static const struct NamingScreenTemplate sWaldaWordsScreenTemplate = { - .copyExistingString = 1, + .copyExistingString = TRUE, .maxChars = 15, .iconFunction = 4, - .addGenderIcon = 0, + .addGenderIcon = FALSE, .initialPage = KBPAGE_LETTERS_UPPER, .unused = 11, .title = gText_TellHimTheWords, @@ -1896,14 +2064,14 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate = static const struct NamingScreenTemplate *const sNamingScreenTemplates[] = { - &playerNamingScreenTemplate, - &pcBoxNamingTemplate, - &monNamingScreenTemplate, - &monNamingScreenTemplate, - &wandaWordsScreenTemplate, + [NAMING_SCREEN_PLAYER] = &sPlayerNamingScreenTemplate, + [NAMING_SCREEN_BOX] = &sPCBoxNamingTemplate, + [NAMING_SCREEN_CAUGHT_MON] = &sMonNamingScreenTemplate, + [NAMING_SCREEN_NICKNAME] = &sMonNamingScreenTemplate, + [NAMING_SCREEN_WALDA] = &sWaldaWordsScreenTemplate, }; -const struct OamData gOamData_858BFEC = +static const struct OamData sOam_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -1917,7 +2085,7 @@ const struct OamData gOamData_858BFEC = .paletteNum = 0, }; -const struct OamData gOamData_858BFF4 = +static const struct OamData sOam_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -1931,7 +2099,7 @@ const struct OamData gOamData_858BFF4 = .paletteNum = 0, }; -const struct OamData gOamData_858BFFC = +static const struct OamData sOam_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -1945,7 +2113,7 @@ const struct OamData gOamData_858BFFC = .paletteNum = 0, }; -static const struct Subsprite gUnknown_0858C004[] = +static const struct Subsprite sSubsprites_PageSwitchBg[] = { { .x = -20, @@ -2013,7 +2181,7 @@ static const struct Subsprite gUnknown_0858C004[] = } }; -static const struct Subsprite gUnknown_0858C024[] = +static const struct Subsprite sSubsprites_PageSwitchText[] = { { .x = -12, @@ -2033,7 +2201,7 @@ static const struct Subsprite gUnknown_0858C024[] = } }; -static const struct Subsprite gUnknown_0858C02C[] = +static const struct Subsprite sSubsprites_Button[] = { { .x = -20, @@ -2085,7 +2253,7 @@ static const struct Subsprite gUnknown_0858C02C[] = } }; -static const struct Subsprite gUnknown_0858C044[] = +static const struct Subsprite sSubsprites_PCIcon[] = { { .x = -8, @@ -2113,32 +2281,32 @@ static const struct Subsprite gUnknown_0858C044[] = } }; -static const struct SubspriteTable gUnknown_0858C050[] = +static const struct SubspriteTable sSubspriteTable_PageSwitchBg[] = { - {ARRAY_COUNT(gUnknown_0858C004), gUnknown_0858C004} + {ARRAY_COUNT(sSubsprites_PageSwitchBg), sSubsprites_PageSwitchBg} }; -static const struct SubspriteTable gUnknown_0858C058[] = +static const struct SubspriteTable sSubspriteTable_PageSwitchText[] = { - {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024}, - {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024}, - {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024} + {ARRAY_COUNT(sSubsprites_PageSwitchText), sSubsprites_PageSwitchText}, + {ARRAY_COUNT(sSubsprites_PageSwitchText), sSubsprites_PageSwitchText}, + {ARRAY_COUNT(sSubsprites_PageSwitchText), sSubsprites_PageSwitchText} }; -static const struct SubspriteTable gUnknown_0858C070[] = +static const struct SubspriteTable sSubspriteTable_Button[] = { - {ARRAY_COUNT(gUnknown_0858C02C), gUnknown_0858C02C} + {ARRAY_COUNT(sSubsprites_Button), sSubsprites_Button} }; -static const struct SubspriteTable gUnknown_0858C078[] = +static const struct SubspriteTable sSubspriteTable_PCIcon[] = { - {ARRAY_COUNT(gUnknown_0858C044), gUnknown_0858C044} + {ARRAY_COUNT(sSubsprites_PCIcon), sSubsprites_PCIcon} }; -static const struct SpriteFrameImage gUnknown_0858C080[] = +static const struct SpriteFrameImage sImageTable_PCIcon[] = { - {gSpriteImage_858BBF8, sizeof(gSpriteImage_858BBF8)}, - {gSpriteImage_858BCB8, sizeof(gSpriteImage_858BCB8)}, + {sPCIconOn_Gfx, sizeof(sPCIconOn_Gfx)}, + {sPCIconOff_Gfx, sizeof(sPCIconOff_Gfx)}, }; static const union AnimCmd gSpriteAnim_858C090[] = @@ -2154,7 +2322,7 @@ static const union AnimCmd gSpriteAnim_858C098[] = ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_858C0A4[] = +static const union AnimCmd sAnim_PCIcon[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 2), @@ -2172,106 +2340,106 @@ static const union AnimCmd *const gSpriteAnimTable_858C0B4[] = gSpriteAnim_858C098 }; -static const union AnimCmd *const gSpriteAnimTable_858C0BC[] = +static const union AnimCmd *const sAnims_PCIcon[] = { - gSpriteAnim_858C0A4 + sAnim_PCIcon }; -static const struct SpriteTemplate gUnknown_0858C0C0 = +static const struct SpriteTemplate sSpriteTemplate_PageSwitchBg = { - .tileTag = 0x0002, - .paletteTag = 0x0004, - .oam = &gOamData_858BFEC, + .tileTag = GFXTAG_PAGE_SWITCH_BG, + .paletteTag = PALTAG_PAGE_SWITCH, + .oam = &sOam_8x8, .anims = gSpriteAnimTable_858C0B0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E4084 + .callback = SpriteCB_PageSwitch }; -static const struct SpriteTemplate gUnknown_0858C0D8 = +static const struct SpriteTemplate sSpriteTemplate_PageSwitchButton = { - .tileTag = 0x0003, - .paletteTag = 0x0001, - .oam = &gOamData_858BFFC, + .tileTag = GFXTAG_PAGE_SWITCH_BUTTON, + .paletteTag = PALTAG_1, + .oam = &sOam_32x16, .anims = gSpriteAnimTable_858C0B0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_0858C0F0 = +static const struct SpriteTemplate sSpriteTemplate_PageSwitchText = { - .tileTag = 0x0004, - .paletteTag = 0x0004, - .oam = &gOamData_858BFEC, + .tileTag = GFXTAG_PAGE_SWITCH_UPPER, + .paletteTag = PALTAG_PAGE_SWITCH, + .oam = &sOam_8x8, .anims = gSpriteAnimTable_858C0B0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_0858C108 = +static const struct SpriteTemplate sSpriteTemplate_BackButton = { - .tileTag = 0x0000, - .paletteTag = 0x0006, - .oam = &gOamData_858BFEC, + .tileTag = GFXTAG_BACK_BUTTON, + .paletteTag = PALTAG_BACK_BUTTON, + .oam = &sOam_8x8, .anims = gSpriteAnimTable_858C0B0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_0858C120 = +static const struct SpriteTemplate sSpriteTemplate_OkButton = { - .tileTag = 0x0001, - .paletteTag = 0x0007, - .oam = &gOamData_858BFEC, + .tileTag = GFXTAG_OK_BUTTON, + .paletteTag = PALTAG_OK_BUTTON, + .oam = &sOam_8x8, .anims = gSpriteAnimTable_858C0B0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_0858C138 = +static const struct SpriteTemplate sSpriteTemplate_Cursor = { - .tileTag = 0x0007, - .paletteTag = 0x0005, - .oam = &gOamData_858BFF4, + .tileTag = GFXTAG_CURSOR, + .paletteTag = PALTAG_CURSOR, + .oam = &sOam_16x16, .anims = gSpriteAnimTable_858C0B4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E3B30 + .callback = SpriteCB_Cursor }; static const struct SpriteTemplate sSpriteTemplate_InputArrow = { - .tileTag = 0x000A, - .paletteTag = 0x0003, - .oam = &gOamData_858BFEC, + .tileTag = GFXTAG_INPUT_ARROW, + .paletteTag = PALTAG_3, + .oam = &sOam_8x8, .anims = gSpriteAnimTable_858C0B0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E3C20 + .callback = SpriteCB_InputArrow }; static const struct SpriteTemplate sSpriteTemplate_Underscore = { - .tileTag = 0x000B, - .paletteTag = 0x0003, - .oam = &gOamData_858BFEC, + .tileTag = GFXTAG_UNDERSCORE, + .paletteTag = PALTAG_3, + .oam = &sOam_8x8, .anims = gSpriteAnimTable_858C0B0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E3C6C + .callback = SpriteCB_Underscore }; -static const struct SpriteTemplate gUnknown_0858C180 = +static const struct SpriteTemplate sSpriteTemplate_PCIcon = { .tileTag = 0xFFFF, - .paletteTag = 0x0000, - .oam = &gOamData_858BFEC, - .anims = gSpriteAnimTable_858C0BC, - .images = gUnknown_0858C080, + .paletteTag = PALTAG_PC_ICON, + .oam = &sOam_8x8, + .anims = sAnims_PCIcon, + .images = sImageTable_PCIcon, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; @@ -2301,34 +2469,34 @@ static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] = }, }; -static const struct SpriteSheet gUnknown_0858C1C8[] = +static const struct SpriteSheet sSpriteSheets[] = { - {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, 0x0000}, - {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, 0x0001}, - {gNamingScreenRWindow_Gfx, 0x280, 0x0002}, - {gNamingScreenKeyboardButton_Gfx + 0x20, 0x100, 0x0003}, - {gNamingScreenROptions_Gfx, 0x060, 0x0004}, - {gNamingScreenROptions_Gfx + 0xA0, 0x060, 0x0005}, - {gNamingScreenROptions_Gfx + 0x140, 0x060, 0x0006}, - {gNamingScreenCursor_Gfx, 0x080, 0x0007}, - {gNamingScreenCursor_Gfx + 0xA0, 0x080, 0x0008}, - {gNamingScreenCursor_Gfx + 0x140, 0x080, 0x0009}, - {gNamingScreenRightPointingTriangleTiles, 0x020, 0x000A}, - {gNamingScreenUnderscoreTiles, 0x020, 0x000B}, - {NULL} + {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, GFXTAG_BACK_BUTTON}, + {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, GFXTAG_OK_BUTTON}, + {gNamingScreenRWindow_Gfx, 0x280, GFXTAG_PAGE_SWITCH_BG}, + {gNamingScreenPageButton_Gfx + 0x20, 0x100, GFXTAG_PAGE_SWITCH_BUTTON}, + {gNamingScreenROptions_Gfx, 0x060, GFXTAG_PAGE_SWITCH_UPPER}, + {gNamingScreenROptions_Gfx + 0xA0, 0x060, GFXTAG_PAGE_SWITCH_LOWER}, + {gNamingScreenROptions_Gfx + 0x140, 0x060, GFXTAG_PAGE_SWITCH_OTHERS}, + {gNamingScreenCursor_Gfx, 0x080, GFXTAG_CURSOR}, + {gNamingScreenCursor_Gfx + 0xA0, 0x080, GFXTAG_CURSOR_SQUISHED}, + {gNamingScreenCursor_Gfx + 0x140, 0x080, GFXTAG_CURSOR_FILLED}, + {gNamingScreenInputArrow_Gfx, 0x020, GFXTAG_INPUT_ARROW}, + {gNamingScreenUnderscore_Gfx, 0x020, GFXTAG_UNDERSCORE}, + {} }; -static const struct SpritePalette gUnknown_0858C230[] = +static const struct SpritePalette sSpritePalettes[] = { - {gNamingScreenMenu_Pal, 0x0000}, - {gNamingScreenMenu_Pal + 0x10, 0x0001}, - {gNamingScreenMenu_Pal + 0x20, 0x0002}, - {gNamingScreenMenu_Pal + 0x30, 0x0003}, - {gNamingScreenMenu_Pal + 0x40, 0x0004}, - {gNamingScreenMenu_Pal + 0x50, 0x0005}, - {gNamingScreenMenu_Pal + 0x40, 0x0006}, - {gNamingScreenMenu_Pal + 0x40, 0x0007}, - {NULL} + {gNamingScreenMenu_Pal, PALTAG_PC_ICON}, + {gNamingScreenMenu_Pal + 0x10, PALTAG_1}, // upper switch button + {gNamingScreenMenu_Pal + 0x20, PALTAG_2}, // lower switch button + {gNamingScreenMenu_Pal + 0x30, PALTAG_3}, // symbols switch button + {gNamingScreenMenu_Pal + 0x40, PALTAG_PAGE_SWITCH}, + {gNamingScreenMenu_Pal + 0x50, PALTAG_CURSOR}, + {gNamingScreenMenu_Pal + 0x40, PALTAG_BACK_BUTTON}, + {gNamingScreenMenu_Pal + 0x40, PALTAG_OK_BUTTON}, + {} }; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 59dc0acced..2efac0b8c7 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -8097,7 +8097,7 @@ static bool8 sub_80D0344(void) if (!IsDma3ManagerBusyWithBgCopy()) { sub_80CFE84(); - LoadPalette(stdpal_get(3), 0xD0, 0x20); + LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20); ShowBg(0); return FALSE; } @@ -8203,7 +8203,7 @@ static bool8 sub_80D04C8(void) case 3: if (!IsDma3ManagerBusyWithBgCopy()) { - LoadPalette(stdpal_get(3), 0xD0, 0x20); + LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20); sub_80CFE84(); ShowBg(0); return FALSE; diff --git a/src/text_window.c b/src/text_window.c index 98fc09e877..864bd08316 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -49,7 +49,7 @@ static const u16 sTextWindowFrame18_Pal[] = INCBIN_U16("graphics/text_window/18. static const u16 sTextWindowFrame19_Pal[] = INCBIN_U16("graphics/text_window/19.gbapal"); static const u16 sTextWindowFrame20_Pal[] = INCBIN_U16("graphics/text_window/20.gbapal"); -static const u16 sUnknown_0851017C[][16] = +static const u16 sTextWindowPalettes[][16] = { INCBIN_U16("graphics/text_window/message_box.gbapal"), INCBIN_U16("graphics/text_window/text_pal1.gbapal"), @@ -160,7 +160,7 @@ void rbox_fill_rectangle(u8 windowId) FillBgTilemapBufferRect(bgLayer, 0, tilemapLeft - 1, tilemapTop - 1, width + 2, height + 2, 0x11); } -const u16 *stdpal_get(u8 id) +const u16 *GetTextWindowPalette(u8 id) { switch (id) { @@ -182,7 +182,7 @@ const u16 *stdpal_get(u8 id) break; } - return (const u16 *)(sUnknown_0851017C) + id; + return (const u16 *)(sTextWindowPalettes) + id; } const u16 *GetOverworldTextboxPalettePtr(void) diff --git a/src/tv.c b/src/tv.c index 0e419a99f3..0444912f0c 100644 --- a/src/tv.c +++ b/src/tv.c @@ -3442,7 +3442,7 @@ void ChangePokemonNickname(void) GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar2); - DoNamingScreen(3, gStringVar2, GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL), GetMonGender(&gPlayerParty[gSpecialVar_0x8004]), GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL), ChangePokemonNickname_CB); + DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar2, GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL), GetMonGender(&gPlayerParty[gSpecialVar_0x8004]), GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL), ChangePokemonNickname_CB); } void ChangePokemonNickname_CB(void) @@ -3458,7 +3458,7 @@ void ChangeBoxPokemonNickname(void) boxMon = GetBoxedMonPtr(gSpecialVar_MonBoxId, gSpecialVar_MonBoxPos); GetBoxMonData(boxMon, MON_DATA_NICKNAME, gStringVar3); GetBoxMonData(boxMon, MON_DATA_NICKNAME, gStringVar2); - DoNamingScreen(3, gStringVar2, GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL), GetBoxMonGender(boxMon), GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL), ChangeBoxPokemonNickname_CB); + DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar2, GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL), GetBoxMonGender(boxMon), GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL), ChangeBoxPokemonNickname_CB); } void ChangeBoxPokemonNickname_CB(void) From 82e322bb96e4f7ecd59d536bdb8315edab61f9b6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 7 Aug 2020 20:09:57 -0400 Subject: [PATCH 46/85] Finish documenting naming screen --- .../background.bin} | Bin ..._pointing_triangle.png => input_arrow.png} | Bin .../keyboard_lower.bin} | Bin .../keyboard_symbols.bin} | Bin .../keyboard_upper.bin} | Bin .../naming_screen/pc_icon/{0.png => off.png} | Bin .../naming_screen/pc_icon/{1.png => on.png} | Bin include/graphics.h | 8 +- src/graphics.c | 11 +- src/naming_screen.c | 770 ++++++++++-------- 10 files changed, 428 insertions(+), 361 deletions(-) rename graphics/{unknown/unknown_DD4544.bin => naming_screen/background.bin} (100%) rename graphics/naming_screen/{right_pointing_triangle.png => input_arrow.png} (100%) rename graphics/{unknown/unknown_DD46E0.bin => naming_screen/keyboard_lower.bin} (100%) rename graphics/{unknown/unknown_DD47A0.bin => naming_screen/keyboard_symbols.bin} (100%) rename graphics/{unknown/unknown_DD4620.bin => naming_screen/keyboard_upper.bin} (100%) rename graphics/naming_screen/pc_icon/{0.png => off.png} (100%) rename graphics/naming_screen/pc_icon/{1.png => on.png} (100%) diff --git a/graphics/unknown/unknown_DD4544.bin b/graphics/naming_screen/background.bin similarity index 100% rename from graphics/unknown/unknown_DD4544.bin rename to graphics/naming_screen/background.bin diff --git a/graphics/naming_screen/right_pointing_triangle.png b/graphics/naming_screen/input_arrow.png similarity index 100% rename from graphics/naming_screen/right_pointing_triangle.png rename to graphics/naming_screen/input_arrow.png diff --git a/graphics/unknown/unknown_DD46E0.bin b/graphics/naming_screen/keyboard_lower.bin similarity index 100% rename from graphics/unknown/unknown_DD46E0.bin rename to graphics/naming_screen/keyboard_lower.bin diff --git a/graphics/unknown/unknown_DD47A0.bin b/graphics/naming_screen/keyboard_symbols.bin similarity index 100% rename from graphics/unknown/unknown_DD47A0.bin rename to graphics/naming_screen/keyboard_symbols.bin diff --git a/graphics/unknown/unknown_DD4620.bin b/graphics/naming_screen/keyboard_upper.bin similarity index 100% rename from graphics/unknown/unknown_DD4620.bin rename to graphics/naming_screen/keyboard_upper.bin diff --git a/graphics/naming_screen/pc_icon/0.png b/graphics/naming_screen/pc_icon/off.png similarity index 100% rename from graphics/naming_screen/pc_icon/0.png rename to graphics/naming_screen/pc_icon/off.png diff --git a/graphics/naming_screen/pc_icon/1.png b/graphics/naming_screen/pc_icon/on.png similarity index 100% rename from graphics/naming_screen/pc_icon/1.png rename to graphics/naming_screen/pc_icon/on.png diff --git a/include/graphics.h b/include/graphics.h index 7675df2673..1aa24d0524 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4069,10 +4069,10 @@ extern const u8 gHealthboxElementsGfxTable[][32]; extern const u16 gNamingScreenMenu_Pal[]; extern const u32 gNamingScreenMenu_Gfx[]; -extern const u32 gUnknown_08DD4544[]; -extern const u8 gUnknown_08DD4620[]; -extern const u8 gUnknown_08DD46E0[]; -extern const u8 gUnknown_08DD47A0[]; +extern const u32 gNamingScreenBackground_Tilemap[]; +extern const u8 gNamingScreenKeyboardUpper_Tilemap[]; +extern const u8 gNamingScreenKeyboardLower_Tilemap[]; +extern const u8 gNamingScreenKeyboardSymbols_Tilemap[]; extern const u8 gNamingScreenRWindow_Gfx[]; extern const u8 gNamingScreenPageButton_Gfx[]; extern const u8 gNamingScreenROptions_Gfx[]; diff --git a/src/graphics.c b/src/graphics.c index b857b8d70a..50bf3e0887 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1436,13 +1436,12 @@ const u8 gNamingScreenRWindow_Gfx[] = INCBIN_U8("graphics/naming_screen/rwindow. const u8 gNamingScreenROptions_Gfx[] = INCBIN_U8("graphics/naming_screen/roptions.4bpp"); const u8 gNamingScreenCursor_Gfx[] = INCBIN_U8("graphics/naming_screen/cursor.4bpp"); const u8 gNamingScreenPageButton_Gfx[] = INCBIN_U8("graphics/naming_screen/page_button.4bpp"); -const u8 gNamingScreenInputArrow_Gfx[] = INCBIN_U8("graphics/naming_screen/right_pointing_triangle.4bpp"); +const u8 gNamingScreenInputArrow_Gfx[] = INCBIN_U8("graphics/naming_screen/input_arrow.4bpp"); const u8 gNamingScreenUnderscore_Gfx[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp"); - -const u32 gUnknown_08DD4544[] = INCBIN_U32("graphics/unknown/unknown_DD4544.bin.lz"); -const u32 gUnknown_08DD4620[] = INCBIN_U32("graphics/unknown/unknown_DD4620.bin.lz"); -const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz"); -const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz"); +const u32 gNamingScreenBackground_Tilemap[] = INCBIN_U32("graphics/naming_screen/background.bin.lz"); +const u32 gNamingScreenKeyboardUpper_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_upper.bin.lz"); +const u32 gNamingScreenKeyboardLower_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_lower.bin.lz"); +const u32 gNamingScreenKeyboardSymbols_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_symbols.bin.lz"); // union room chat const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal"); diff --git a/src/naming_screen.c b/src/naming_screen.c index da5a7f1211..4ed9d78d0c 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -47,11 +47,11 @@ enum { enum { GFXTAG_BACK_BUTTON, GFXTAG_OK_BUTTON, - GFXTAG_PAGE_SWITCH_BG, - GFXTAG_PAGE_SWITCH_BUTTON, - GFXTAG_PAGE_SWITCH_UPPER, - GFXTAG_PAGE_SWITCH_LOWER, - GFXTAG_PAGE_SWITCH_OTHERS, + GFXTAG_PAGE_SWAP_FRAME, + GFXTAG_PAGE_SWAP_BUTTON, + GFXTAG_PAGE_SWAP_UPPER, + GFXTAG_PAGE_SWAP_LOWER, + GFXTAG_PAGE_SWAP_OTHERS, GFXTAG_CURSOR, GFXTAG_CURSOR_SQUISHED, GFXTAG_CURSOR_FILLED, @@ -61,10 +61,10 @@ enum { enum { PALTAG_PC_ICON, - PALTAG_1, - PALTAG_2, - PALTAG_3, - PALTAG_PAGE_SWITCH, + PALTAG_PAGE_SWAP_UPPER, + PALTAG_PAGE_SWAP_LOWER, + PALTAG_PAGE_SWAP_OTHERS, + PALTAG_PAGE_SWAP, PALTAG_CURSOR, PALTAG_BACK_BUTTON, PALTAG_OK_BUTTON, @@ -72,55 +72,70 @@ enum { enum { WIN_KB_PAGE_1, // Which of these two windows is in front is cycled as the player swaps - WIN_KB_PAGE_2, // Initiall WIN_KB_PAGE_1 is in front, with WIN_KB_PAGE_2 on deck + WIN_KB_PAGE_2, // Initially WIN_KB_PAGE_1 is in front, with WIN_KB_PAGE_2 on deck WIN_TEXT_ENTRY, WIN_TEXT_ENTRY_BOX, WIN_BANNER, WIN_COUNT, }; -enum -{ - KBPAGE_LETTERS_LOWER, - KBPAGE_LETTERS_UPPER, +// The constants for the pages are needlessly complicated because GF didn't keep the indexing order consistent +// This set is used for sNamingScreen->currentPage. It uses the order that the pages are cycled in +enum { KBPAGE_SYMBOLS, - KBPAGE_COUNT, + KBPAGE_LETTERS_UPPER, + KBPAGE_LETTERS_LOWER, + KBPAGE_COUNT, }; -enum -{ +// This set is used for initializing a page's keyboard text and getting its number of columns +enum { + KEYBOARD_LETTERS_LOWER, + KEYBOARD_LETTERS_UPPER, + KEYBOARD_SYMBOLS, +}; + +// This set is used for getting the gfx/pal tags of the page's swap button +enum { + PAGE_SWAP_UPPER, + PAGE_SWAP_OTHERS, + PAGE_SWAP_LOWER, +}; + +enum { KEY_ROLE_CHAR, KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK, }; -enum -{ +enum { BUTTON_PAGE, BUTTON_BACK, BUTTON_OK, BUTTON_COUNT, }; -enum -{ - STATE_BEGIN_FADE_IN, +// states for Task_NamingScreen +enum { + STATE_FADE_IN, STATE_WAIT_FADE_IN, STATE_HANDLE_INPUT, STATE_MOVE_TO_OK_BUTTON, STATE_START_PAGE_SWAP, STATE_WAIT_PAGE_SWAP, - STATE_6, - STATE_UPDATE_SENT_TO_PC_MESSAGE, - STATE_BEGIN_FADE_OUT, + STATE_PRESSED_OK, + STATE_WAIT_SENT_TO_PC_MESSAGE, + STATE_FADE_OUT, + STATE_EXIT, }; +// sates for Task_HandleInput enum { INPUT_STATE_DISABLED, INPUT_STATE_ENABLED, - INPUT_STATE_2, + INPUT_STATE_OVERRIDE, }; struct NamingScreenTemplate @@ -152,7 +167,7 @@ struct NamingScreenData u8 bgToHide; u8 currentPage; u8 cursorSpriteId; - u8 selectBtnFrameSpriteId; + u8 swapBtnFrameSpriteId; u8 keyRepeatStartDelayCopy; const struct NamingScreenTemplate *template; u8 templateNum; @@ -175,8 +190,8 @@ extern const u8 gText_TellHimTheWords[]; // start of .rodata -static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); -static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp"); +static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/off.4bpp"); +static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/on.4bpp"); static const u16 sKeyboard_Pal[] = INCBIN_U16("graphics/naming_screen/keyboard.gbapal"); static const u16 sUnused_Pal[] = INCBIN_U16("graphics/naming_screen/unused.gbapal"); @@ -285,25 +300,25 @@ static const u8 sKeyboardChars[KBPAGE_COUNT * KBROW_COUNT * KBCOL_COUNT] = __( "…“”‘' "); static const u8 sPageColumnCounts[KBPAGE_COUNT] = { - [KBPAGE_LETTERS_LOWER] = KBCOL_COUNT, - [KBPAGE_LETTERS_UPPER] = KBCOL_COUNT, - [KBPAGE_SYMBOLS] = 6 + [KEYBOARD_LETTERS_LOWER] = KBCOL_COUNT, + [KEYBOARD_LETTERS_UPPER] = KBCOL_COUNT, + [KEYBOARD_SYMBOLS] = 6 }; static const u8 sPageColumnXPos[KBPAGE_COUNT * KBCOL_COUNT] = { - 0, 12, 24, 56, 68, 80, 92, 123, // KBPAGE_LETTERS_LOWER - 0, 12, 24, 56, 68, 80, 92, 123, // KBPAGE_LETTERS_UPPER - 0, 22, 44, 66, 88, 110 // KBPAGE_SYMBOLS + 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_LOWER + 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_UPPER + 0, 22, 44, 66, 88, 110 // KEYBOARD_SYMBOLS }; // forward declarations static const struct NamingScreenTemplate *const sNamingScreenTemplates[]; -static const struct SubspriteTable sSubspriteTable_PageSwitchBg[]; -static const struct SubspriteTable sSubspriteTable_PageSwitchText[]; +static const struct SubspriteTable sSubspriteTable_PageSwapFrame[]; +static const struct SubspriteTable sSubspriteTable_PageSwapText[]; static const struct SubspriteTable sSubspriteTable_Button[]; static const struct SubspriteTable sSubspriteTable_PCIcon[]; -static const struct SpriteTemplate sSpriteTemplate_PageSwitchBg; -static const struct SpriteTemplate sSpriteTemplate_PageSwitchButton; -static const struct SpriteTemplate sSpriteTemplate_PageSwitchText; +static const struct SpriteTemplate sSpriteTemplate_PageSwapFrame; +static const struct SpriteTemplate sSpriteTemplate_PageSwapButton; +static const struct SpriteTemplate sSpriteTemplate_PageSwapText; static const struct SpriteTemplate sSpriteTemplate_BackButton; static const struct SpriteTemplate sSpriteTemplate_OkButton; static const struct SpriteTemplate sSpriteTemplate_Cursor; @@ -323,11 +338,11 @@ static bool8 MainState_FadeIn(void); static bool8 MainState_WaitFadeIn(void); static bool8 MainState_HandleInput(void); static bool8 MainState_MoveToOKButton(void); -static bool8 MainState_6(void); +static bool8 MainState_PressedOKButton(void); static bool8 MainState_FadeOut(void); static bool8 MainState_Exit(void); static void DisplaySentToPCMessage(void); -static bool8 MainState_7(void); +static bool8 MainState_WaitSentToPCMessage(void); static bool8 MainState_StartPageSwap(void); static bool8 MainState_WaitPageSwap(void); static void StartPageSwapAnim(void); @@ -347,14 +362,14 @@ static void SetCursorInvisibility(u8); static void SetCursorFlashing(bool8); static u8 IsCursorAnimFinished(void); static u8 GetCurrentPageColumnCount(void); -static void CreatePageSwitcherSprites(void); -static void sub_80E4050(void); -static void sub_80E41B8(u8, struct Sprite *, struct Sprite *); +static void CreatePageSwapButtonSprites(void); +static void StartPageSwapButtonAnim(void); +static void SetPageSwapButtonGfx(u8, struct Sprite *, struct Sprite *); static void CreateBackOkSprites(void); static void CreateTextEntrySprites(void); static void CreateInputTargetIcon(void); static u8 HandleKeyboardEvent(void); -static u8 SwitchKeyboardPage(void); +static u8 SwapKeyboardPage(void); static u8 GetInputEvent(void); static void SetInputState(u8); static void DrawTextEntryBox(void); @@ -373,8 +388,8 @@ static void PrintKeyboardKeys(u8, u8); static void DrawKeyboardPageOnDeck(void); static void PrintControls(void); static void CB2_NamingScreen(void); -static void NamingScreen_ResetVHBlank(void); -static void NamingScreen_SetVBlank(void); +static void ResetVHBlank(void); +static void SetVBlank(void); static void VBlankCB_NamingScreen(void); static void NamingScreen_ShowBgs(void); static bool8 IsWideLetter(u8); @@ -407,7 +422,7 @@ static void CB2_LoadNamingScreen(void) switch (gMain.state) { case 0: - NamingScreen_ResetVHBlank(); + ResetVHBlank(); NamingScreen_Init(); gMain.state++; break; @@ -451,7 +466,7 @@ static void CB2_LoadNamingScreen(void) static void NamingScreen_Init(void) { - sNamingScreen->state = 0; + sNamingScreen->state = STATE_FADE_IN; sNamingScreen->bg1vOffset = 0; sNamingScreen->bg2vOffset = 0; sNamingScreen->bg1Priority = BGCNT_PRIORITY(1); @@ -464,13 +479,13 @@ static void NamingScreen_Init(void) if (sNamingScreen->templateNum == NAMING_SCREEN_WALDA) sNamingScreen->inputCharBaseXPos += 11; sNamingScreen->keyRepeatStartDelayCopy = gKeyRepeatStartDelay; - memset(sNamingScreen->textBuffer, 0xFF, sizeof(sNamingScreen->textBuffer)); + memset(sNamingScreen->textBuffer, EOS, sizeof(sNamingScreen->textBuffer)); if (sNamingScreen->template->copyExistingString) StringCopy(sNamingScreen->textBuffer, sNamingScreen->destBuffer); gKeyRepeatStartDelay = 16; } -static void sub_80E2FA4(void) +static void SetSpritesVisible(void) { u8 i; for (i = 0; i < MAX_SPRITES; i++) @@ -531,88 +546,89 @@ static void Task_NamingScreen(u8 taskId) { switch (sNamingScreen->state) { - case 0: + case STATE_FADE_IN: MainState_FadeIn(); - sub_80E2FA4(); - NamingScreen_SetVBlank(); + SetSpritesVisible(); + SetVBlank(); break; - case 1: + case STATE_WAIT_FADE_IN: MainState_WaitFadeIn(); break; - case 2: + case STATE_HANDLE_INPUT: MainState_HandleInput(); break; - case 3: + case STATE_MOVE_TO_OK_BUTTON: MainState_MoveToOKButton(); MainState_HandleInput(); break; - case 4: + case STATE_START_PAGE_SWAP: MainState_StartPageSwap(); break; - case 5: + case STATE_WAIT_PAGE_SWAP: MainState_WaitPageSwap(); break; - case 6: - MainState_6(); + case STATE_PRESSED_OK: + MainState_PressedOKButton(); break; - case 7: - MainState_7(); + case STATE_WAIT_SENT_TO_PC_MESSAGE: + MainState_WaitSentToPCMessage(); break; - case 8: + case STATE_FADE_OUT: MainState_FadeOut(); break; - case 9: + case STATE_EXIT: MainState_Exit(); break; } } -static const u8 sPageOrderLowerFirst[] = +// Which gfx/pal to load for the swap page button +static const u8 sPageToNextGfxId[KBPAGE_COUNT] = { - KBPAGE_LETTERS_LOWER, - KBPAGE_SYMBOLS, - KBPAGE_LETTERS_UPPER + [KBPAGE_SYMBOLS] = PAGE_SWAP_UPPER, + [KBPAGE_LETTERS_UPPER] = PAGE_SWAP_LOWER, + [KBPAGE_LETTERS_LOWER] = PAGE_SWAP_OTHERS }; -static const u8 sPageOrderUpperFirst[] = +static const u8 sPageToNextKeyboardId[KBPAGE_COUNT] = { - KBPAGE_LETTERS_UPPER, - KBPAGE_LETTERS_LOWER, - KBPAGE_SYMBOLS + [KBPAGE_SYMBOLS] = KEYBOARD_LETTERS_UPPER, + [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_LOWER, + [KBPAGE_LETTERS_LOWER] = KEYBOARD_SYMBOLS }; -static const u8 sPageOrderSymbolsFirst[] = +static const u8 sPageToKeyboardId[KBPAGE_COUNT] = { - KBPAGE_SYMBOLS, - KBPAGE_LETTERS_UPPER, - KBPAGE_LETTERS_LOWER + [KBPAGE_SYMBOLS] = KEYBOARD_SYMBOLS, + [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_UPPER, + [KBPAGE_LETTERS_LOWER] = KEYBOARD_LETTERS_LOWER }; -static u8 sub_80E3244(u8 a1) +static u8 PageToNextGfxId(u8 page) { - return sPageOrderLowerFirst[a1]; + return sPageToNextGfxId[page]; } -static u8 sub_80E3254(void) +static u8 CurrentPageToNextKeyboardId(void) { - return sPageOrderUpperFirst[sNamingScreen->currentPage]; + return sPageToNextKeyboardId[sNamingScreen->currentPage]; } -static u8 sub_80E3274(void) +static u8 CurrentPageToKeyboardId(void) { - return sPageOrderSymbolsFirst[sNamingScreen->currentPage]; + return sPageToKeyboardId[sNamingScreen->currentPage]; } static bool8 MainState_FadeIn(void) { - DrawBgTilemap(3, gUnknown_08DD4544); + DrawBgTilemap(3, gNamingScreenBackground_Tilemap); sNamingScreen->currentPage = KBPAGE_LETTERS_UPPER; - DrawBgTilemap(2, gUnknown_08DD46E0); - DrawBgTilemap(1, gUnknown_08DD4620); - PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_2], KBPAGE_LETTERS_LOWER); - PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_1], KBPAGE_LETTERS_UPPER); - NamingScreen_Dummy(2, KBPAGE_LETTERS_LOWER); - NamingScreen_Dummy(1, KBPAGE_LETTERS_UPPER); + DrawBgTilemap(2, gNamingScreenKeyboardLower_Tilemap); + DrawBgTilemap(1, gNamingScreenKeyboardUpper_Tilemap); + PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_2], KEYBOARD_LETTERS_LOWER); + PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_1], KEYBOARD_LETTERS_UPPER); + NamingScreen_Dummy(2, KEYBOARD_LETTERS_LOWER); + NamingScreen_Dummy(1, KEYBOARD_LETTERS_UPPER); DrawTextEntry(); DrawTextEntryBox(); PrintControls(); @@ -652,23 +668,23 @@ static bool8 MainState_MoveToOKButton(void) return FALSE; } -static bool8 MainState_6(void) +static bool8 MainState_PressedOKButton(void) { SaveInputText(); SetInputState(INPUT_STATE_DISABLED); SetCursorFlashing(FALSE); TryStartButtonFlash(BUTTON_COUNT, FALSE, TRUE); - if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON && - CalculatePlayerPartyCount() >= PARTY_SIZE) + if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON + && CalculatePlayerPartyCount() >= PARTY_SIZE) { DisplaySentToPCMessage(); - sNamingScreen->state = STATE_UPDATE_SENT_TO_PC_MESSAGE; + sNamingScreen->state = STATE_WAIT_SENT_TO_PC_MESSAGE; return FALSE; } else { - sNamingScreen->state = STATE_BEGIN_FADE_OUT; - return TRUE; //Exit the naming screen + sNamingScreen->state = STATE_FADE_OUT; + return TRUE; } } @@ -720,12 +736,11 @@ static void DisplaySentToPCMessage(void) CopyWindowToVram(0, 3); } -static bool8 MainState_7(void) +static bool8 MainState_WaitSentToPCMessage(void) { RunTextPrinters(); - if (!IsTextPrinterActive(0) && JOY_NEW(A_BUTTON)) - sNamingScreen->state = STATE_BEGIN_FADE_OUT; + sNamingScreen->state = STATE_FADE_OUT; return FALSE; } @@ -733,7 +748,7 @@ static bool8 MainState_7(void) static bool8 MainState_StartPageSwap(void) { SetInputState(INPUT_STATE_DISABLED); - sub_80E4050(); + StartPageSwapButtonAnim(); StartPageSwapAnim(); SetCursorInvisibility(TRUE); TryStartButtonFlash(BUTTON_PAGE, FALSE, TRUE); @@ -746,19 +761,19 @@ static bool8 MainState_WaitPageSwap(void) { s16 cursorX; s16 cursorY; - bool32 var3; + bool32 onLastColumn; if (IsPageSwapAnimNotInProgress()) { GetCursorPos(&cursorX, &cursorY); - var3 = (cursorX == GetCurrentPageColumnCount()); + onLastColumn = (cursorX == GetCurrentPageColumnCount()); sNamingScreen->state = STATE_HANDLE_INPUT; sNamingScreen->currentPage++; - sNamingScreen->currentPage %= 3; + sNamingScreen->currentPage %= KBPAGE_COUNT; - if (var3) + if (onLastColumn) { cursorX = GetCurrentPageColumnCount(); } @@ -827,15 +842,15 @@ static bool8 PageSwapAnimState_Init(struct Task *task) static bool8 PageSwapAnimState_1(struct Task *task) { - u16 *const arr[] = + u16 *const vOffsets[] = { &sNamingScreen->bg2vOffset, &sNamingScreen->bg1vOffset }; task->tFrameCount += 4; - *arr[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40); - *arr[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); + *vOffsets[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40); + *vOffsets[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); if (task->tFrameCount >= 64) { u8 temp = sNamingScreen->bg1Priority; //Why u8 and not u16? @@ -849,15 +864,15 @@ static bool8 PageSwapAnimState_1(struct Task *task) static bool8 PageSwapAnimState_2(struct Task *task) { - u16 *const arr[] = + u16 *const vOffsets[] = { &sNamingScreen->bg2vOffset, &sNamingScreen->bg1vOffset }; task->tFrameCount += 4; - *arr[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40); - *arr[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); + *vOffsets[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40); + *vOffsets[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40); if (task->tFrameCount >= 128) { u8 temp = sNamingScreen->bgToReveal; @@ -882,8 +897,13 @@ static bool8 PageSwapAnimState_Done(struct Task *task) // //-------------------------------------------------- -#define tButtonId data[0] -#define tColor data[3] +#define tButtonId data[0] +#define tKeepFlashing data[1] +#define tAllowFlash data[2] +#define tColor data[3] +#define tColorIncr data[4] +#define tColorDelay data[5] +#define tColorDelta data[6] static void CreateButtonFlashTask(void) { @@ -893,74 +913,74 @@ static void CreateButtonFlashTask(void) gTasks[taskId].tButtonId = BUTTON_COUNT; } -static void TryStartButtonFlash(u8 button, bool8 b, bool8 c) +static void TryStartButtonFlash(u8 button, bool8 keepFlashing, bool8 interruptCurFlash) { struct Task *task = &gTasks[FindTaskIdByFunc(Task_UpdateButtonFlash)]; - if (button == task->tButtonId && !c) + if (button == task->tButtonId && !interruptCurFlash) { - task->data[1] = b; - task->data[2] = TRUE; + task->tKeepFlashing = keepFlashing; + task->tAllowFlash = TRUE; return; } - if (button == BUTTON_COUNT && !task->data[1] && !c) + if (button == BUTTON_COUNT && !task->tKeepFlashing && !interruptCurFlash) return; if (task->tButtonId != BUTTON_COUNT) RestoreButtonColor(task->tButtonId); - StartButtonFlash(task, button, b); + StartButtonFlash(task, button, keepFlashing); } static void Task_UpdateButtonFlash(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->tButtonId == BUTTON_COUNT || !task->data[2]) + if (task->tButtonId == BUTTON_COUNT || !task->tAllowFlash) return; MultiplyInvertedPaletteRGBComponents(GetButtonPalOffset(task->tButtonId), task->tColor, task->tColor, task->tColor); - if (task->data[5] && --task->data[5]) + if (task->tColorDelay && --task->tColorDelay) return; - task->data[5] = 2; - if (task->data[4] >= 0) + task->tColorDelay = 2; + if (task->tColorIncr >= 0) { if (task->tColor < 14) { - task->tColor += task->data[4]; - task->data[6] += task->data[4]; + task->tColor += task->tColorIncr; + task->tColorDelta += task->tColorIncr; } else { task->tColor = 16; - task->data[6]++; + task->tColorDelta++; } } else { - task->tColor += task->data[4]; - task->data[6] += task->data[4]; + task->tColor += task->tColorIncr; + task->tColorDelta += task->tColorIncr; } - if (task->tColor == 16 && task->data[6] == 22) + if (task->tColor == 16 && task->tColorDelta == 22) { - task->data[4] = -4; + task->tColorIncr = -4; } else if (task->tColor == 0) { - task->data[2] = task->data[1]; - task->data[4] = 2; - task->data[6] = 0; + task->tAllowFlash = task->tKeepFlashing; + task->tColorIncr = 2; + task->tColorDelta = 0; } } static u16 GetButtonPalOffset(u8 button) { - const u16 palOffsets[] = + const u16 palOffsets[BUTTON_COUNT + 1] = { - [BUTTON_PAGE] = IndexOfSpritePaletteTag(PALTAG_PAGE_SWITCH) * 16 + 0x10E, + [BUTTON_PAGE] = IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP) * 16 + 0x10E, [BUTTON_BACK] = IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON) * 16 + 0x10E, [BUTTON_OK] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x10E, [BUTTON_COUNT] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x101, @@ -975,49 +995,64 @@ static void RestoreButtonColor(u8 button) gPlttBufferFaded[index] = gPlttBufferUnfaded[index]; } -static void StartButtonFlash(struct Task *task, u8 button, bool8 c) +static void StartButtonFlash(struct Task *task, u8 button, bool8 keepFlashing) { task->tButtonId = button; - task->data[1] = c; - task->data[2] = TRUE; + task->tKeepFlashing = keepFlashing; + task->tAllowFlash = TRUE; task->tColor = 4; - task->data[4] = 2; - task->data[5] = 0; - task->data[6] = 4; + task->tColorIncr = 2; + task->tColorDelay = 0; + task->tColorDelta = 4; } #undef tButtonId #undef tColor -#define tInvisible data[4] & 0x00FF -#define tFlashing data[4] & 0xFF00 +// Sprite data for the the cursor +#define sX data[0] +#define sY data[1] +#define sPrevX data[2] +#define sPrevY data[3] +#define sInvisible data[4] & 0x00FF +#define sFlashing data[4] & 0xFF00 +#define sColor data[5] +#define sColorIncr data[6] +#define sColorDelay data[7] static void SpriteCB_Cursor(struct Sprite *sprite) { if (sprite->animEnded) StartSpriteAnim(sprite, 0); - sprite->invisible = sprite->tInvisible; - if (sprite->data[0] == GetCurrentPageColumnCount()) + + // Hide cursor when on button column + sprite->invisible = sprite->sInvisible; + if (sprite->sX == GetCurrentPageColumnCount()) sprite->invisible = TRUE; - if (sprite->invisible || !(sprite->tFlashing) - || sprite->data[0] != sprite->data[2] || sprite->data[1] != sprite->data[3]) + + if (sprite->invisible + || !(sprite->sFlashing) + || sprite->sX != sprite->sPrevX + || sprite->sY != sprite->sPrevY) { - sprite->data[5] = 0; - sprite->data[6] = 2; - sprite->data[7] = 2; + sprite->sColor = 0; + sprite->sColorIncr = 2; + sprite->sColorDelay = 2; } - sprite->data[7]--; - if (sprite->data[7] == 0) + + sprite->sColorDelay--; + if (sprite->sColorDelay == 0) { - sprite->data[5] += sprite->data[6]; - if (sprite->data[5] == 16 || sprite->data[5] == 0) - sprite->data[6] = -sprite->data[6]; - sprite->data[7] = 2; + sprite->sColor += sprite->sColorIncr; + if (sprite->sColor == 16 || sprite->sColor == 0) + sprite->sColorIncr = -sprite->sColorIncr; + sprite->sColorDelay = 2; } - if (sprite->tFlashing) + + if (sprite->sFlashing) { - s8 gb = sprite->data[5]; - s8 r = sprite->data[5] >> 1; + s8 gb = sprite->sColor; + s8 r = sprite->sColor >> 1; u16 index = IndexOfSpritePaletteTag(PALTAG_CURSOR) * 16 + 0x0101; MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); @@ -1042,34 +1077,42 @@ static void SpriteCB_InputArrow(struct Sprite *sprite) #undef sDelay #undef sXPosId +#define sId data[0] // set in CreateTextEntrySprites +#define sYPosId data[1] +#define sDelay data[2] + static void SpriteCB_Underscore(struct Sprite *sprite) { - const s16 arr[] = {2, 3, 2, 1}; - u8 var; + const s16 y[] = {2, 3, 2, 1}; + u8 pos; - var = GetTextEntryPosition(); - if (var != (u8)sprite->data[0]) + pos = GetTextEntryPosition(); + if (pos != (u8)sprite->sId) { sprite->pos2.y = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; + sprite->sYPosId = 0; + sprite->sDelay = 0; } else { - sprite->pos2.y = arr[sprite->data[1]]; - sprite->data[2]++; - if (sprite->data[2] > 8) + sprite->pos2.y = y[sprite->sYPosId]; + sprite->sDelay++; + if (sprite->sDelay > 8) { - sprite->data[1] = (sprite->data[1] + 1) & 3; - sprite->data[2] = 0; + sprite->sYPosId = (sprite->sYPosId + 1) & (ARRAY_COUNT(y) - 1); + sprite->sDelay = 0; } } } +#undef sId +#undef sYPosId +#undef sDelay + static void CreateSprites(void) { CreateCursorSprite(); - CreatePageSwitcherSprites(); + CreatePageSwapButtonSprites(); CreateBackOkSprites(); CreateTextEntrySprites(); CreateInputTargetIcon(); @@ -1081,8 +1124,8 @@ static void CreateCursorSprite(void) SetCursorInvisibility(TRUE); gSprites[sNamingScreen->cursorSpriteId].oam.priority = 1; gSprites[sNamingScreen->cursorSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; - gSprites[sNamingScreen->cursorSpriteId].data[6] = 1; - gSprites[sNamingScreen->cursorSpriteId].data[6] = 2; + gSprites[sNamingScreen->cursorSpriteId].sColorIncr = 1; // ? immediately overwritten + gSprites[sNamingScreen->cursorSpriteId].sColorIncr = 2; SetCursorPos(0, 0); } @@ -1090,24 +1133,24 @@ static void SetCursorPos(s16 x, s16 y) { struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId]; - if (x < sPageColumnCounts[sub_80E3274()]) - cursorSprite->pos1.x = sPageColumnXPos[x + sub_80E3274() * KBCOL_COUNT] + 38; + if (x < sPageColumnCounts[CurrentPageToKeyboardId()]) + cursorSprite->pos1.x = sPageColumnXPos[x + CurrentPageToKeyboardId() * KBCOL_COUNT] + 38; else cursorSprite->pos1.x = 0; cursorSprite->pos1.y = y * 16 + 88; - cursorSprite->data[2] = cursorSprite->data[0]; - cursorSprite->data[3] = cursorSprite->data[1]; - cursorSprite->data[0] = x; - cursorSprite->data[1] = y; + cursorSprite->sPrevX = cursorSprite->sX; + cursorSprite->sPrevY = cursorSprite->sY; + cursorSprite->sX = x; + cursorSprite->sY = y; } static void GetCursorPos(s16 *x, s16 *y) { struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId]; - *x = cursorSprite->data[0]; - *y = cursorSprite->data[1]; + *x = cursorSprite->sX; + *y = cursorSprite->sY; } static void MoveCursorToOKButton(void) @@ -1118,14 +1161,14 @@ static void MoveCursorToOKButton(void) static void SetCursorInvisibility(bool8 invisible) { gSprites[sNamingScreen->cursorSpriteId].data[4] &= 0xFF00; - gSprites[sNamingScreen->cursorSpriteId].data[4] |= invisible; + gSprites[sNamingScreen->cursorSpriteId].data[4] |= invisible; // sInvisible StartSpriteAnim(&gSprites[sNamingScreen->cursorSpriteId], 0); } static void SetCursorFlashing(bool8 flashing) { gSprites[sNamingScreen->cursorSpriteId].data[4] &= 0xFF; - gSprites[sNamingScreen->cursorSpriteId].data[4] |= flashing << 8; + gSprites[sNamingScreen->cursorSpriteId].data[4] |= flashing << 8; // sFlashing } static void SquishCursor(void) @@ -1155,122 +1198,140 @@ static u8 GetKeyRoleAtCursorPos(void) // If the cursor's x is equal to the column count, cursor is in the button column static u8 GetCurrentPageColumnCount(void) { - return sPageColumnCounts[sub_80E3274()]; + return sPageColumnCounts[CurrentPageToKeyboardId()]; } -static void CreatePageSwitcherSprites(void) +#undef sX +#undef sY +#undef sPrevX +#undef sPrevY +#undef sInvisible +#undef sFlashing +#undef sColor +#undef sColorIncr +#undef sColorDelay + +static bool8 PageSwapSprite_Init(struct Sprite *); +static bool8 PageSwapSprite_Idle(struct Sprite *); +static bool8 PageSwapSprite_SlideOff(struct Sprite *); +static bool8 PageSwapSprite_SlideOn(struct Sprite *); + +#define sState data[0] +#define sPage data[1] +#define sTextSpriteId data[6] +#define sButtonSpriteId data[7] + +static void CreatePageSwapButtonSprites(void) { - u8 bgSpriteId; + u8 frameSpriteId; u8 textSpriteId; u8 buttonSpriteId; - bgSpriteId = CreateSprite(&sSpriteTemplate_PageSwitchBg, 204, 88, 0); - sNamingScreen->selectBtnFrameSpriteId = bgSpriteId; - SetSubspriteTables(&gSprites[bgSpriteId], sSubspriteTable_PageSwitchBg); - gSprites[bgSpriteId].invisible = TRUE; + frameSpriteId = CreateSprite(&sSpriteTemplate_PageSwapFrame, 204, 88, 0); + sNamingScreen->swapBtnFrameSpriteId = frameSpriteId; + SetSubspriteTables(&gSprites[frameSpriteId], sSubspriteTable_PageSwapFrame); + gSprites[frameSpriteId].invisible = TRUE; - textSpriteId = CreateSprite(&sSpriteTemplate_PageSwitchText, 204, 84, 1); - gSprites[bgSpriteId].data[6] = textSpriteId; - SetSubspriteTables(&gSprites[textSpriteId], sSubspriteTable_PageSwitchText); + textSpriteId = CreateSprite(&sSpriteTemplate_PageSwapText, 204, 84, 1); + gSprites[frameSpriteId].sTextSpriteId = textSpriteId; + SetSubspriteTables(&gSprites[textSpriteId], sSubspriteTable_PageSwapText); gSprites[textSpriteId].invisible = TRUE; - buttonSpriteId = CreateSprite(&sSpriteTemplate_PageSwitchButton, 204, 83, 2); + buttonSpriteId = CreateSprite(&sSpriteTemplate_PageSwapButton, 204, 83, 2); gSprites[buttonSpriteId].oam.priority = 1; - gSprites[bgSpriteId].data[7] = buttonSpriteId; + gSprites[frameSpriteId].sButtonSpriteId = buttonSpriteId; gSprites[buttonSpriteId].invisible = TRUE; } -static void sub_80E4050(void) +static void StartPageSwapButtonAnim(void) { - struct Sprite *sprite = &gSprites[sNamingScreen->selectBtnFrameSpriteId]; + struct Sprite *sprite = &gSprites[sNamingScreen->swapBtnFrameSpriteId]; - sprite->data[0] = 2; - sprite->data[1] = sNamingScreen->currentPage; + sprite->sState = 2; // go to PageSwapSprite_SlideOff + sprite->sPage = sNamingScreen->currentPage; } -static u8 sub_80E40AC(struct Sprite *); -static u8 sub_80E4100(struct Sprite *); -static u8 sub_80E4104(struct Sprite *); -static u8 sub_80E4178(struct Sprite *); - -static u8 (*const sPageSwitchSpriteFuncs[])(struct Sprite *) = +static u8 (*const sPageSwapSpriteFuncs[])(struct Sprite *) = { - sub_80E40AC, - sub_80E4100, - sub_80E4104, - sub_80E4178, + PageSwapSprite_Init, + PageSwapSprite_Idle, + PageSwapSprite_SlideOff, + PageSwapSprite_SlideOn, }; -static void SpriteCB_PageSwitch(struct Sprite *sprite) +static void SpriteCB_PageSwap(struct Sprite *sprite) { - while (sPageSwitchSpriteFuncs[sprite->data[0]](sprite) != 0); + while (sPageSwapSpriteFuncs[sprite->sState](sprite)); } -static u8 sub_80E40AC(struct Sprite *sprite) +static bool8 PageSwapSprite_Init(struct Sprite *sprite) { - struct Sprite *sprite1 = &gSprites[sprite->data[6]]; - struct Sprite *sprite2 = &gSprites[sprite->data[7]]; + struct Sprite *text = &gSprites[sprite->sTextSpriteId]; + struct Sprite *button = &gSprites[sprite->sButtonSpriteId]; - sub_80E41B8(sub_80E3244(sNamingScreen->currentPage), sprite1, sprite2); - sprite->data[0]++; - return 0; + SetPageSwapButtonGfx(PageToNextGfxId(sNamingScreen->currentPage), text, button); + sprite->sState++; + return FALSE; } -static u8 sub_80E4100(struct Sprite *sprite) +static bool8 PageSwapSprite_Idle(struct Sprite *sprite) { - return 0; + return FALSE; } -static u8 sub_80E4104(struct Sprite *sprite) +static bool8 PageSwapSprite_SlideOff(struct Sprite *sprite) { - struct Sprite *r4 = &gSprites[sprite->data[6]]; - struct Sprite *r5 = &gSprites[sprite->data[7]]; + struct Sprite *text = &gSprites[sprite->sTextSpriteId]; + struct Sprite *button = &gSprites[sprite->sButtonSpriteId]; - r4->pos2.y++; - if (r4->pos2.y > 7) + text->pos2.y++; + if (text->pos2.y > 7) { - sprite->data[0]++; - r4->pos2.y = -4; - r4->invisible = TRUE; - sub_80E41B8(sub_80E3244(((u8)sprite->data[1] + 1) % 3), r4, r5); + sprite->sState++; + text->pos2.y = -4; + text->invisible = TRUE; + SetPageSwapButtonGfx(PageToNextGfxId(((u8)sprite->sPage + 1) % KBPAGE_COUNT), text, button); } - return 0; + return FALSE; } -static u8 sub_80E4178(struct Sprite *sprite) +static bool8 PageSwapSprite_SlideOn(struct Sprite *sprite) { - struct Sprite *r2 = &gSprites[sprite->data[6]]; + struct Sprite *text = &gSprites[sprite->sTextSpriteId]; - r2->invisible = FALSE; - r2->pos2.y++; - if (r2->pos2.y >= 0) + text->invisible = FALSE; + text->pos2.y++; + if (text->pos2.y >= 0) { - r2->pos2.y = 0; - sprite->data[0] = 1; + text->pos2.y = 0; + sprite->sState = 1; // go to PageSwapSprite_Idle } - return 0; + return FALSE; } -static const u16 gUnknown_0858BEF8[] = { - PALTAG_1, - PALTAG_3, - PALTAG_2 +static const u16 sPageSwapPalTags[] = { + [PAGE_SWAP_UPPER] = PALTAG_PAGE_SWAP_UPPER, + [PAGE_SWAP_OTHERS] = PALTAG_PAGE_SWAP_OTHERS, + [PAGE_SWAP_LOWER] = PALTAG_PAGE_SWAP_LOWER }; -static const u16 gUnknown_0858BEFE[] = { - GFXTAG_PAGE_SWITCH_UPPER, - GFXTAG_PAGE_SWITCH_OTHERS, - GFXTAG_PAGE_SWITCH_LOWER +static const u16 sPageSwapGfxTags[] = { + [PAGE_SWAP_UPPER] = GFXTAG_PAGE_SWAP_UPPER, + [PAGE_SWAP_OTHERS] = GFXTAG_PAGE_SWAP_OTHERS, + [PAGE_SWAP_LOWER] = GFXTAG_PAGE_SWAP_LOWER }; -static void sub_80E41B8(u8 a, struct Sprite *b, struct Sprite *c) +static void SetPageSwapButtonGfx(u8 page, struct Sprite *text, struct Sprite *button) { - c->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_0858BEF8[a]); - b->sheetTileStart = GetSpriteTileStartByTag(gUnknown_0858BEFE[a]); - b->subspriteTableNum = a; + button->oam.paletteNum = IndexOfSpritePaletteTag(sPageSwapPalTags[page]); + text->sheetTileStart = GetSpriteTileStartByTag(sPageSwapGfxTags[page]); + text->subspriteTableNum = page; } -// +#undef sState +#undef sPage +#undef sTextSpriteId +#undef sButtonSpriteId static void CreateBackOkSprites(void) { @@ -1391,77 +1452,77 @@ static bool8 (*const sKeyboardKeyHandlers[])(u8) = static bool8 HandleKeyboardEvent(void) { - u8 event = GetInputEvent(); + u8 input = GetInputEvent(); u8 keyRole = GetKeyRoleAtCursorPos(); - if (event == INPUT_SELECT) + if (input == INPUT_SELECT) { - return SwitchKeyboardPage(); + return SwapKeyboardPage(); } - else if (event == INPUT_B_BUTTON) + else if (input == INPUT_B_BUTTON) { DeleteTextCharacter(); return FALSE; } - else if (event == INPUT_START) + else if (input == INPUT_START) { MoveCursorToOKButton(); return FALSE; } else { - return sKeyboardKeyHandlers[keyRole](event); + return sKeyboardKeyHandlers[keyRole](input); } } -static bool8 KeyboardKeyHandler_Character(u8 event) +static bool8 KeyboardKeyHandler_Character(u8 input) { TryStartButtonFlash(BUTTON_COUNT, FALSE, FALSE); - if (event == INPUT_A_BUTTON) + if (input == INPUT_A_BUTTON) { bool8 textFull = AddTextCharacter(); SquishCursor(); if (textFull) { - SetInputState(INPUT_STATE_2); + SetInputState(INPUT_STATE_OVERRIDE); sNamingScreen->state = STATE_MOVE_TO_OK_BUTTON; } } return FALSE; } -static bool8 KeyboardKeyHandler_Page(u8 event) +static bool8 KeyboardKeyHandler_Page(u8 input) { TryStartButtonFlash(BUTTON_PAGE, TRUE, FALSE); - if (event == INPUT_A_BUTTON) - return SwitchKeyboardPage(); + if (input == INPUT_A_BUTTON) + return SwapKeyboardPage(); else return FALSE; } -static bool8 KeyboardKeyHandler_Backspace(u8 event) +static bool8 KeyboardKeyHandler_Backspace(u8 input) { TryStartButtonFlash(BUTTON_BACK, TRUE, FALSE); - if (event == INPUT_A_BUTTON) + if (input == INPUT_A_BUTTON) DeleteTextCharacter(); return FALSE; } -static bool8 KeyboardKeyHandler_OK(u8 event) +static bool8 KeyboardKeyHandler_OK(u8 input) { TryStartButtonFlash(BUTTON_OK, TRUE, FALSE); - if (event == INPUT_A_BUTTON) + if (input == INPUT_A_BUTTON) { PlaySE(SE_SELECT); - sNamingScreen->state = STATE_6; + sNamingScreen->state = STATE_PRESSED_OK; return TRUE; } else return FALSE; } -static bool8 SwitchKeyboardPage(void) +static bool8 SwapKeyboardPage(void) { sNamingScreen->state = STATE_START_PAGE_SWAP; return TRUE; @@ -1476,15 +1537,15 @@ static bool8 SwitchKeyboardPage(void) #define tButtonId data[2] -static void InputState_Disabled(struct Task *); -static void InputState_Enabled(struct Task *); -static void InputState_2(struct Task *); +static void Input_Disabled(struct Task *); +static void Input_Enabled(struct Task *); +static void Input_Override(struct Task *); -static void (*const sInputStateFuncs[])(struct Task *) = +static void (*const sInputFuncs[])(struct Task *) = { - InputState_Disabled, - InputState_Enabled, - InputState_2, + [INPUT_STATE_DISABLED] = Input_Disabled, + [INPUT_STATE_ENABLED] = Input_Enabled, + [INPUT_STATE_OVERRIDE] = Input_Override, }; static void Task_HandleInput(u8); @@ -1511,15 +1572,15 @@ static void SetInputState(u8 state) static void Task_HandleInput(u8 taskId) { - sInputStateFuncs[gTasks[taskId].tState](&gTasks[taskId]); + sInputFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void InputState_Disabled(struct Task *task) +static void Input_Disabled(struct Task *task) { task->tKeyboardEvent = INPUT_NONE; } -static void InputState_Enabled(struct Task *task) +static void Input_Enabled(struct Task *task) { task->tKeyboardEvent = INPUT_NONE; @@ -1535,7 +1596,7 @@ static void InputState_Enabled(struct Task *task) HandleDpadMovement(task); } -static void InputState_2(struct Task *task) +static void Input_Override(struct Task *task) { task->tKeyboardEvent = INPUT_NONE; } @@ -1561,7 +1622,7 @@ static void HandleDpadMovement(struct Task *task) }; const s16 sKeyRowToButtonRow[KBROW_COUNT] = {0, 1, 1, 2}; - const s16 gUnknown_0858BF50[] = {0, 0, 3}; + const s16 sButtonRowToKeyRow[BUTTON_COUNT] = {0, 0, 3}; s16 cursorX; s16 cursorY; @@ -1597,16 +1658,19 @@ static void HandleDpadMovement(struct Task *task) if (cursorX == GetCurrentPageColumnCount()) { // Moved onto button column + // Save cursor pos in tButtonId for moving back onto keys task->tButtonId = cursorY; cursorY = sKeyRowToButtonRow[cursorY]; } else if (prevCursorX == GetCurrentPageColumnCount()) { // Moved off button column - if (cursorY == 1) + // If you're on the middle button, go to the row that + // the cursor was on previously (saved in tButtonId above) + if (cursorY == BUTTON_COUNT / 2) cursorY = task->tButtonId; else - cursorY = gUnknown_0858BF50[cursorY]; + cursorY = sButtonRowToKeyRow[cursorY]; } } @@ -1715,7 +1779,7 @@ static void DrawGenderIcon(void) static u8 GetCharAtKeyboardPos(s16 x, s16 y) { - return sKeyboardChars[x + y * KBCOL_COUNT + sub_80E3274() * KBCOL_COUNT * KBROW_COUNT]; + return sKeyboardChars[x + y * KBCOL_COUNT + CurrentPageToKeyboardId() * KBCOL_COUNT * KBROW_COUNT]; } @@ -1746,15 +1810,18 @@ static u8 GetPreviousTextCaretPosition(void) static void DeleteTextCharacter(void) { u8 index; - u8 var2; + u8 keyRole; index = GetPreviousTextCaretPosition(); sNamingScreen->textBuffer[index] = 0; DrawTextEntry(); CopyBgTilemapBufferToVram(3); sNamingScreen->textBuffer[index] = EOS; - var2 = GetKeyRoleAtCursorPos(); - if (var2 == 0 || var2 == 2) + keyRole = GetKeyRoleAtCursorPos(); + + // The below flashes the Back key once on delete + // It incorrectly leaves the Back key 1 shade lighter than its default + if (keyRole == KEY_ROLE_CHAR || keyRole == KEY_ROLE_BACKSPACE) TryStartButtonFlash(BUTTON_BACK, FALSE, TRUE); PlaySE(SE_BOWA); } @@ -1870,16 +1937,16 @@ static const struct TextColor sTextColorStruct = static const u8 sFillValues[KBPAGE_COUNT] = { - [KBPAGE_LETTERS_LOWER] = PIXEL_FILL(14), - [KBPAGE_LETTERS_UPPER] = PIXEL_FILL(13), - [KBPAGE_SYMBOLS] = PIXEL_FILL(15) + [KEYBOARD_LETTERS_LOWER] = PIXEL_FILL(14), + [KEYBOARD_LETTERS_UPPER] = PIXEL_FILL(13), + [KEYBOARD_SYMBOLS] = PIXEL_FILL(15) }; static const u8 *const sKeyboardTextColors[KBPAGE_COUNT] = { - [KBPAGE_LETTERS_LOWER] = sTextColorStruct.colors[1], - [KBPAGE_LETTERS_UPPER] = sTextColorStruct.colors[0], - [KBPAGE_SYMBOLS] = sTextColorStruct.colors[2] + [KEYBOARD_LETTERS_LOWER] = sTextColorStruct.colors[1], + [KEYBOARD_LETTERS_UPPER] = sTextColorStruct.colors[0], + [KEYBOARD_SYMBOLS] = sTextColorStruct.colors[2] }; static void PrintKeyboardKeys(u8 window, u8 page) @@ -1894,15 +1961,15 @@ static void PrintKeyboardKeys(u8 window, u8 page) PutWindowTilemap(window); } -static const u8 *const sKeyboardPageTilemaps[] = +static const u8 *const sNextKeyboardPageTilemaps[] = { - [KBPAGE_LETTERS_LOWER] = gUnknown_08DD4620, // upper - [KBPAGE_LETTERS_UPPER] = gUnknown_08DD46E0, // lower - [KBPAGE_SYMBOLS] = gUnknown_08DD47A0 // symbols + [KBPAGE_SYMBOLS] = gNamingScreenKeyboardUpper_Tilemap, + [KBPAGE_LETTERS_UPPER] = gNamingScreenKeyboardLower_Tilemap, // lower + [KBPAGE_LETTERS_LOWER] = gNamingScreenKeyboardSymbols_Tilemap // symbols }; -// There are always 2 keyboard pages drawn, the current page and the one that will shown next if the player switches -// When the page switch is complete this function invisibly replaces the old page with the new next one +// There are always 2 keyboard pages drawn, the current page and the one that will shown next if the player swaps +// When the page swap is complete this function invisibly replaces the old page with the new next one static void DrawKeyboardPageOnDeck(void) { u8 bg; @@ -1924,9 +1991,9 @@ static void DrawKeyboardPageOnDeck(void) windowId = sNamingScreen->windows[WIN_KB_PAGE_2]; } - DrawBgTilemap(bg, sKeyboardPageTilemaps[sNamingScreen->currentPage]); - PrintKeyboardKeys(windowId, sub_80E3254()); - NamingScreen_Dummy(bg, sub_80E3254()); + DrawBgTilemap(bg, sNextKeyboardPageTilemaps[sNamingScreen->currentPage]); + PrintKeyboardKeys(windowId, CurrentPageToNextKeyboardId()); + NamingScreen_Dummy(bg, CurrentPageToNextKeyboardId()); CopyBgTilemapBufferToVram(bg_); } @@ -1948,13 +2015,13 @@ static void CB2_NamingScreen(void) UpdatePaletteFade(); } -static void NamingScreen_ResetVHBlank(void) +static void ResetVHBlank(void) { SetVBlankCallback(NULL); SetHBlankCallback(NULL); } -static void NamingScreen_SetVBlank(void) +static void SetVBlank(void) { SetVBlankCallback(VBlankCB_NamingScreen); } @@ -2018,6 +2085,7 @@ static void Debug_NamingScreenNickname(void) // Forward-declared variables //-------------------------------------------------- +// Initial pages below are pointless, they're overwritten with KBPAGE_LETTERS_UPPER in MainState_FadeIn() static const struct NamingScreenTemplate sPlayerNamingScreenTemplate = { .copyExistingString = FALSE, @@ -2113,7 +2181,7 @@ static const struct OamData sOam_32x16 = .paletteNum = 0, }; -static const struct Subsprite sSubsprites_PageSwitchBg[] = +static const struct Subsprite sSubsprites_PageSwapFrame[] = { { .x = -20, @@ -2181,7 +2249,7 @@ static const struct Subsprite sSubsprites_PageSwitchBg[] = } }; -static const struct Subsprite sSubsprites_PageSwitchText[] = +static const struct Subsprite sSubsprites_PageSwapText[] = { { .x = -12, @@ -2281,16 +2349,16 @@ static const struct Subsprite sSubsprites_PCIcon[] = } }; -static const struct SubspriteTable sSubspriteTable_PageSwitchBg[] = +static const struct SubspriteTable sSubspriteTable_PageSwapFrame[] = { - {ARRAY_COUNT(sSubsprites_PageSwitchBg), sSubsprites_PageSwitchBg} + {ARRAY_COUNT(sSubsprites_PageSwapFrame), sSubsprites_PageSwapFrame} }; -static const struct SubspriteTable sSubspriteTable_PageSwitchText[] = +static const struct SubspriteTable sSubspriteTable_PageSwapText[] = { - {ARRAY_COUNT(sSubsprites_PageSwitchText), sSubsprites_PageSwitchText}, - {ARRAY_COUNT(sSubsprites_PageSwitchText), sSubsprites_PageSwitchText}, - {ARRAY_COUNT(sSubsprites_PageSwitchText), sSubsprites_PageSwitchText} + {ARRAY_COUNT(sSubsprites_PageSwapText), sSubsprites_PageSwapText}, + {ARRAY_COUNT(sSubsprites_PageSwapText), sSubsprites_PageSwapText}, + {ARRAY_COUNT(sSubsprites_PageSwapText), sSubsprites_PageSwapText} }; static const struct SubspriteTable sSubspriteTable_Button[] = @@ -2305,17 +2373,17 @@ static const struct SubspriteTable sSubspriteTable_PCIcon[] = static const struct SpriteFrameImage sImageTable_PCIcon[] = { - {sPCIconOn_Gfx, sizeof(sPCIconOn_Gfx)}, {sPCIconOff_Gfx, sizeof(sPCIconOff_Gfx)}, + {sPCIconOn_Gfx, sizeof(sPCIconOn_Gfx)}, }; -static const union AnimCmd gSpriteAnim_858C090[] = +static const union AnimCmd sAnim_Loop[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_JUMP(0) }; -static const union AnimCmd gSpriteAnim_858C098[] = +static const union AnimCmd sAnim_CursorSquish[] = { ANIMCMD_FRAME(4, 8), ANIMCMD_FRAME(8, 8), @@ -2329,15 +2397,15 @@ static const union AnimCmd sAnim_PCIcon[] = ANIMCMD_JUMP(0) }; -static const union AnimCmd *const gSpriteAnimTable_858C0B0[] = +static const union AnimCmd *const sAnims_Loop[] = { - gSpriteAnim_858C090 + sAnim_Loop }; -static const union AnimCmd *const gSpriteAnimTable_858C0B4[] = +static const union AnimCmd *const sAnims_Cursor[] = { - gSpriteAnim_858C090, - gSpriteAnim_858C098 + sAnim_Loop, + sAnim_CursorSquish }; static const union AnimCmd *const sAnims_PCIcon[] = @@ -2345,34 +2413,34 @@ static const union AnimCmd *const sAnims_PCIcon[] = sAnim_PCIcon }; -static const struct SpriteTemplate sSpriteTemplate_PageSwitchBg = +static const struct SpriteTemplate sSpriteTemplate_PageSwapFrame = { - .tileTag = GFXTAG_PAGE_SWITCH_BG, - .paletteTag = PALTAG_PAGE_SWITCH, + .tileTag = GFXTAG_PAGE_SWAP_FRAME, + .paletteTag = PALTAG_PAGE_SWAP, .oam = &sOam_8x8, - .anims = gSpriteAnimTable_858C0B0, + .anims = sAnims_Loop, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_PageSwitch + .callback = SpriteCB_PageSwap }; -static const struct SpriteTemplate sSpriteTemplate_PageSwitchButton = +static const struct SpriteTemplate sSpriteTemplate_PageSwapButton = { - .tileTag = GFXTAG_PAGE_SWITCH_BUTTON, - .paletteTag = PALTAG_1, + .tileTag = GFXTAG_PAGE_SWAP_BUTTON, + .paletteTag = PALTAG_PAGE_SWAP_UPPER, .oam = &sOam_32x16, - .anims = gSpriteAnimTable_858C0B0, + .anims = sAnims_Loop, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate sSpriteTemplate_PageSwitchText = +static const struct SpriteTemplate sSpriteTemplate_PageSwapText = { - .tileTag = GFXTAG_PAGE_SWITCH_UPPER, - .paletteTag = PALTAG_PAGE_SWITCH, + .tileTag = GFXTAG_PAGE_SWAP_UPPER, + .paletteTag = PALTAG_PAGE_SWAP, .oam = &sOam_8x8, - .anims = gSpriteAnimTable_858C0B0, + .anims = sAnims_Loop, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -2383,7 +2451,7 @@ static const struct SpriteTemplate sSpriteTemplate_BackButton = .tileTag = GFXTAG_BACK_BUTTON, .paletteTag = PALTAG_BACK_BUTTON, .oam = &sOam_8x8, - .anims = gSpriteAnimTable_858C0B0, + .anims = sAnims_Loop, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -2394,7 +2462,7 @@ static const struct SpriteTemplate sSpriteTemplate_OkButton = .tileTag = GFXTAG_OK_BUTTON, .paletteTag = PALTAG_OK_BUTTON, .oam = &sOam_8x8, - .anims = gSpriteAnimTable_858C0B0, + .anims = sAnims_Loop, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -2405,7 +2473,7 @@ static const struct SpriteTemplate sSpriteTemplate_Cursor = .tileTag = GFXTAG_CURSOR, .paletteTag = PALTAG_CURSOR, .oam = &sOam_16x16, - .anims = gSpriteAnimTable_858C0B4, + .anims = sAnims_Cursor, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_Cursor @@ -2414,9 +2482,9 @@ static const struct SpriteTemplate sSpriteTemplate_Cursor = static const struct SpriteTemplate sSpriteTemplate_InputArrow = { .tileTag = GFXTAG_INPUT_ARROW, - .paletteTag = PALTAG_3, + .paletteTag = PALTAG_PAGE_SWAP_OTHERS, .oam = &sOam_8x8, - .anims = gSpriteAnimTable_858C0B0, + .anims = sAnims_Loop, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_InputArrow @@ -2425,9 +2493,9 @@ static const struct SpriteTemplate sSpriteTemplate_InputArrow = static const struct SpriteTemplate sSpriteTemplate_Underscore = { .tileTag = GFXTAG_UNDERSCORE, - .paletteTag = PALTAG_3, + .paletteTag = PALTAG_PAGE_SWAP_OTHERS, .oam = &sOam_8x8, - .anims = gSpriteAnimTable_858C0B0, + .anims = sAnims_Loop, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_Underscore @@ -2446,21 +2514,21 @@ static const struct SpriteTemplate sSpriteTemplate_PCIcon = static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] = { - [KBPAGE_LETTERS_LOWER] = + [KEYBOARD_LETTERS_LOWER] = { gText_NamingScreenKeyboard_abcdef, gText_NamingScreenKeyboard_ghijkl, gText_NamingScreenKeyboard_mnopqrs, gText_NamingScreenKeyboard_tuvwxyz }, - [KBPAGE_LETTERS_UPPER] = + [KEYBOARD_LETTERS_UPPER] = { gText_NamingScreenKeyboard_ABCDEF, gText_NamingScreenKeyboard_GHIJKL, gText_NamingScreenKeyboard_MNOPQRS, gText_NamingScreenKeyboard_TUVWXYZ }, - [KBPAGE_SYMBOLS] = + [KEYBOARD_SYMBOLS] = { gText_NamingScreenKeyboard_01234, gText_NamingScreenKeyboard_56789, @@ -2473,11 +2541,11 @@ static const struct SpriteSheet sSpriteSheets[] = { {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, GFXTAG_BACK_BUTTON}, {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, GFXTAG_OK_BUTTON}, - {gNamingScreenRWindow_Gfx, 0x280, GFXTAG_PAGE_SWITCH_BG}, - {gNamingScreenPageButton_Gfx + 0x20, 0x100, GFXTAG_PAGE_SWITCH_BUTTON}, - {gNamingScreenROptions_Gfx, 0x060, GFXTAG_PAGE_SWITCH_UPPER}, - {gNamingScreenROptions_Gfx + 0xA0, 0x060, GFXTAG_PAGE_SWITCH_LOWER}, - {gNamingScreenROptions_Gfx + 0x140, 0x060, GFXTAG_PAGE_SWITCH_OTHERS}, + {gNamingScreenRWindow_Gfx, 0x280, GFXTAG_PAGE_SWAP_FRAME}, + {gNamingScreenPageButton_Gfx + 0x20, 0x100, GFXTAG_PAGE_SWAP_BUTTON}, + {gNamingScreenROptions_Gfx, 0x060, GFXTAG_PAGE_SWAP_UPPER}, + {gNamingScreenROptions_Gfx + 0xA0, 0x060, GFXTAG_PAGE_SWAP_LOWER}, + {gNamingScreenROptions_Gfx + 0x140, 0x060, GFXTAG_PAGE_SWAP_OTHERS}, {gNamingScreenCursor_Gfx, 0x080, GFXTAG_CURSOR}, {gNamingScreenCursor_Gfx + 0xA0, 0x080, GFXTAG_CURSOR_SQUISHED}, {gNamingScreenCursor_Gfx + 0x140, 0x080, GFXTAG_CURSOR_FILLED}, @@ -2489,10 +2557,10 @@ static const struct SpriteSheet sSpriteSheets[] = static const struct SpritePalette sSpritePalettes[] = { {gNamingScreenMenu_Pal, PALTAG_PC_ICON}, - {gNamingScreenMenu_Pal + 0x10, PALTAG_1}, // upper switch button - {gNamingScreenMenu_Pal + 0x20, PALTAG_2}, // lower switch button - {gNamingScreenMenu_Pal + 0x30, PALTAG_3}, // symbols switch button - {gNamingScreenMenu_Pal + 0x40, PALTAG_PAGE_SWITCH}, + {gNamingScreenMenu_Pal + 0x10, PALTAG_PAGE_SWAP_UPPER}, + {gNamingScreenMenu_Pal + 0x20, PALTAG_PAGE_SWAP_LOWER}, + {gNamingScreenMenu_Pal + 0x30, PALTAG_PAGE_SWAP_OTHERS}, + {gNamingScreenMenu_Pal + 0x40, PALTAG_PAGE_SWAP}, {gNamingScreenMenu_Pal + 0x50, PALTAG_CURSOR}, {gNamingScreenMenu_Pal + 0x40, PALTAG_BACK_BUTTON}, {gNamingScreenMenu_Pal + 0x40, PALTAG_OK_BUTTON}, From e947729d650e3ce7f675c667d8e7e45b47d58922 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 10 Aug 2020 13:48:16 -0400 Subject: [PATCH 47/85] Start documenting use_pokeblock --- .../use_screen/graph_data.bin} | Bin .../use_screen/mon_frame.bin} | Bin .../use_screen/mon_frame.png} | Bin .../use_screen/mon_frame_pal.bin} | Bin .../{86231E8.pal => condition/graph_data.pal} | 0 graphics/pokenav/{ => condition}/pokeball.png | Bin .../{ => condition}/pokeball_placeholder.png | Bin graphics/pokenav/{ => condition}/sparkle.png | Bin include/menu_specialized.h | 12 +- src/graphics.c | 1 - src/menu_specialized.c | 82 +- src/pokenav_conditions_2.c | 28 +- src/use_pokeblock.c | 1173 +++++++++-------- 13 files changed, 662 insertions(+), 634 deletions(-) rename graphics/{interface/85DFC0C.bin => pokeblock/use_screen/graph_data.bin} (100%) rename graphics/{interface/85DFB60.bin => pokeblock/use_screen/mon_frame.bin} (100%) rename graphics/{interface/85DFA80.png => pokeblock/use_screen/mon_frame.png} (100%) rename graphics/{interface/85DFA60.bin => pokeblock/use_screen/mon_frame_pal.bin} (100%) rename graphics/pokenav/{86231E8.pal => condition/graph_data.pal} (100%) rename graphics/pokenav/{ => condition}/pokeball.png (100%) rename graphics/pokenav/{ => condition}/pokeball_placeholder.png (100%) rename graphics/pokenav/{ => condition}/sparkle.png (100%) diff --git a/graphics/interface/85DFC0C.bin b/graphics/pokeblock/use_screen/graph_data.bin similarity index 100% rename from graphics/interface/85DFC0C.bin rename to graphics/pokeblock/use_screen/graph_data.bin diff --git a/graphics/interface/85DFB60.bin b/graphics/pokeblock/use_screen/mon_frame.bin similarity index 100% rename from graphics/interface/85DFB60.bin rename to graphics/pokeblock/use_screen/mon_frame.bin diff --git a/graphics/interface/85DFA80.png b/graphics/pokeblock/use_screen/mon_frame.png similarity index 100% rename from graphics/interface/85DFA80.png rename to graphics/pokeblock/use_screen/mon_frame.png diff --git a/graphics/interface/85DFA60.bin b/graphics/pokeblock/use_screen/mon_frame_pal.bin similarity index 100% rename from graphics/interface/85DFA60.bin rename to graphics/pokeblock/use_screen/mon_frame_pal.bin diff --git a/graphics/pokenav/86231E8.pal b/graphics/pokenav/condition/graph_data.pal similarity index 100% rename from graphics/pokenav/86231E8.pal rename to graphics/pokenav/condition/graph_data.pal diff --git a/graphics/pokenav/pokeball.png b/graphics/pokenav/condition/pokeball.png similarity index 100% rename from graphics/pokenav/pokeball.png rename to graphics/pokenav/condition/pokeball.png diff --git a/graphics/pokenav/pokeball_placeholder.png b/graphics/pokenav/condition/pokeball_placeholder.png similarity index 100% rename from graphics/pokenav/pokeball_placeholder.png rename to graphics/pokenav/condition/pokeball_placeholder.png diff --git a/graphics/pokenav/sparkle.png b/graphics/pokenav/condition/sparkle.png similarity index 100% rename from graphics/pokenav/sparkle.png rename to graphics/pokenav/condition/sparkle.png diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 14a2464680..8b78c17346 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -55,12 +55,12 @@ bool8 sub_81D3150(s16 *var); bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); -void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); -void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal); -void sub_81D3464(struct Sprite **sprites); -void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2); -void sub_81D3520(struct Sprite **sprites); -void sub_81D354C(struct Sprite **sprites); +void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); +void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal); +void ResetConditionSparkleSprites(struct Sprite **sprites); +void CreateConditionSparkleSprites(struct Sprite **sprites, u8 arg1, u8 arg2); +void DestroyConditionSparkleSprites(struct Sprite **sprites); +void FreeConditionSparkles(struct Sprite **sprites); void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); diff --git a/src/graphics.c b/src/graphics.c index b774c5ad21..242d327eb0 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1313,7 +1313,6 @@ const u16 gContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_scree // pokenav const u16 gPokenavCondition_Pal[] = INCBIN_U16("graphics/pokenav/condition.gbapal"); - const u32 gPokenavCondition_Gfx[] = INCBIN_U32("graphics/pokenav/condition.4bpp.lz"); const u32 gPokenavCondition_Tilemap[] = INCBIN_U32("graphics/pokenav/condition.bin.lz"); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index b7dd1f33af..b623bada3c 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -27,6 +27,8 @@ #include "constants/species.h" #include "gba/io_reg.h" +#define TAG_CONDITION_SPARKLE 104 + extern const struct CompressedSpriteSheet gMonFrontPicTable[]; EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0}; @@ -38,7 +40,7 @@ static void sub_81D2634(struct UnknownStruct_81D1ED4 *a0); static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list); static void nullsub_79(void); static void sub_81D3408(struct Sprite *sprite); -static void sub_81D3564(struct Sprite *sprite); +static void SpriteCB_ConditionSparkle(struct Sprite *sprite); static void sub_81D35E8(struct Sprite *sprite); static const struct WindowTemplate sUnknown_086253E8[] = @@ -1096,10 +1098,10 @@ bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1) return ((var1 != 0) || (var2 != 0)); } -static const u32 gUnknown_08625560[] = INCBIN_U32("graphics/pokenav/pokeball.4bpp"); -static const u32 gUnknown_08625660[] = INCBIN_U32("graphics/pokenav/pokeball_placeholder.4bpp"); -static const u16 gUnknown_08625680[] = INCBIN_U16("graphics/pokenav/sparkle.gbapal"); -static const u32 gUnknown_086256A0[] = INCBIN_U32("graphics/pokenav/sparkle.4bpp"); +static const u32 sConditionPokeball_Gfx[] = INCBIN_U32("graphics/pokenav/condition/pokeball.4bpp"); +static const u32 sConditionPokeballPlaceholder_Gfx[] = INCBIN_U32("graphics/pokenav/condition/pokeball_placeholder.4bpp"); +static const u16 sConditionSparkle_Gfx[] = INCBIN_U16("graphics/pokenav/condition/sparkle.gbapal"); +static const u32 sConditionSparkle_Pal[] = INCBIN_U32("graphics/pokenav/condition/sparkle.4bpp"); static const struct OamData sOamData_8625A20 = { @@ -1175,14 +1177,14 @@ void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, str *pal = dataPal; } -void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals) +void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals) { u8 i; struct SpriteSheet dataSheets[] = { - {gUnknown_08625560, 0x100, 101}, - {gUnknown_08625660, 0x20, 103}, + {sConditionPokeball_Gfx, 0x100, 101}, + {sConditionPokeballPlaceholder_Gfx, 0x20, 103}, {gPokenavConditionCancel_Gfx, 0x100, 102}, {}, }; @@ -1214,10 +1216,10 @@ void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, s *(pals++) = dataPals[i]; } -void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal) +void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal) { - struct SpriteSheet dataSheet = {gUnknown_086256A0, 0x380, 104}; - struct SpritePalette dataPal = {gUnknown_08625680, 104}; + struct SpriteSheet dataSheet = {sConditionSparkle_Pal, 0x380, TAG_CONDITION_SPARKLE}; + struct SpritePalette dataPal = {sConditionSparkle_Gfx, TAG_CONDITION_SPARKLE}; *sheet = dataSheet; *pal = dataPal; @@ -1241,7 +1243,7 @@ static void sub_81D32F4(struct Sprite *sprite) } } -static const struct OamData sOamData_8625AD0 = +static const struct OamData sOam_ConditionSparkle = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -1253,7 +1255,7 @@ static const struct OamData sOamData_8625AD0 = .priority = 0, }; -static const union AnimCmd sSpriteAnim_8625AD8[] = +static const union AnimCmd sAnim_ConditionSparkle[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(4, 5), @@ -1265,38 +1267,38 @@ static const union AnimCmd sSpriteAnim_8625AD8[] = ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_8625AF8[] = +static const union AnimCmd *const sAnims_ConditionSparkle[] = { - sSpriteAnim_8625AD8, - sSpriteAnim_8625AD8 + 2, + sAnim_ConditionSparkle, + sAnim_ConditionSparkle + 2, }; // unused static const union AnimCmd *const sSpriteAnimTable_8625B00[] = { - sSpriteAnim_8625AD8 + 4, - sSpriteAnim_8625AD8 + 6, + sAnim_ConditionSparkle + 4, + sAnim_ConditionSparkle + 6, }; // unused static const union AnimCmd *const sSpriteAnimTable_8625B08[] = { - sSpriteAnim_8625AD8 + 8, - sSpriteAnim_8625AD8 + 10, + sAnim_ConditionSparkle + 8, + sAnim_ConditionSparkle + 10, }; // unused static const union AnimCmd *const *const sUnknown_08625B10 = sSpriteAnimTable_8625B08; -const struct SpriteTemplate gUnknown_08625B14 = +static const struct SpriteTemplate sSpriteTemplate_ConditionSparkle = { - .tileTag = 104, - .paletteTag = 104, - .oam = &sOamData_8625AD0, - .anims = sSpriteAnimTable_8625AF8, + .tileTag = TAG_CONDITION_SPARKLE, + .paletteTag = TAG_CONDITION_SPARKLE, + .oam = &sOam_ConditionSparkle, + .anims = sAnims_ConditionSparkle, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81D3564, + .callback = SpriteCB_ConditionSparkle, }; static const s16 gUnknown_08625B2C[][2] = @@ -1313,7 +1315,7 @@ static const s16 gUnknown_08625B2C[][2] = {-20, -28}, }; -void sub_81D3314(struct Sprite *sprite) +static void sub_81D3314(struct Sprite *sprite) { struct Sprite *sprite2 = &gSprites[sprite->data[4]]; @@ -1329,7 +1331,7 @@ void sub_81D3314(struct Sprite *sprite) } } -void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites) +static void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites) { u16 i; @@ -1343,7 +1345,7 @@ void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites) sprites[i]->data[3] = i; if (arg1 == 0 || arg0 != 9) { - sprites[i]->callback = sub_81D3564; + sprites[i]->callback = SpriteCB_ConditionSparkle; } else { @@ -1364,12 +1366,12 @@ static void sub_81D3408(struct Sprite *sprite) for (i = 0; i < sprite->data[2] + 1; i++) { gSprites[id].data[1] = (gSprites[id].data[0] * 16) + 1; - gSprites[id].callback = sub_81D3564; + gSprites[id].callback = SpriteCB_ConditionSparkle; id = gSprites[id].data[5]; } } -void sub_81D3464(struct Sprite **sprites) +void ResetConditionSparkleSprites(struct Sprite **sprites) { u8 i; @@ -1377,14 +1379,14 @@ void sub_81D3464(struct Sprite **sprites) sprites[i] = NULL; } -void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2) +void CreateConditionSparkleSprites(struct Sprite **sprites, u8 arg1, u8 _count) { u16 i, spriteId, firstSpriteId = 0; - u8 count = arg2; + u8 count = _count; for (i = 0; i < count + 1; i++) { - spriteId = CreateSprite(&gUnknown_08625B14, 0, 0, 0); + spriteId = CreateSprite(&sSpriteTemplate_ConditionSparkle, 0, 0, 0); if (spriteId != MAX_SPRITES) { sprites[i] = &gSprites[spriteId]; @@ -1405,7 +1407,7 @@ void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2) sub_81D338C(count, 1, sprites); } -void sub_81D3520(struct Sprite **sprites) +void DestroyConditionSparkleSprites(struct Sprite **sprites) { u16 i; @@ -1423,14 +1425,14 @@ void sub_81D3520(struct Sprite **sprites) } } -void sub_81D354C(struct Sprite **sprites) +void FreeConditionSparkles(struct Sprite **sprites) { - sub_81D3520(sprites); - FreeSpriteTilesByTag(104); - FreeSpritePaletteByTag(104); + DestroyConditionSparkleSprites(sprites); + FreeSpriteTilesByTag(TAG_CONDITION_SPARKLE); + FreeSpritePaletteByTag(TAG_CONDITION_SPARKLE); } -static void sub_81D3564(struct Sprite *sprite) +static void SpriteCB_ConditionSparkle(struct Sprite *sprite) { if (sprite->data[1] != 0) { diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c index 65a85aa7ec..ad769adcf5 100644 --- a/src/pokenav_conditions_2.c +++ b/src/pokenav_conditions_2.c @@ -24,7 +24,7 @@ u32 sub_81CE700(s32); BSS_DATA u8 gUnknown_030012BC; -const u16 gUnknown_086231E8[] = INCBIN_U16("graphics/pokenav/86231E8.gbapal"); +const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); const u16 gUnknown_08623208[] = INCBIN_U16("graphics/pokenav/8623208.gbapal"); const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); const u32 gUnknown_0862323C[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); @@ -236,7 +236,7 @@ u32 sub_81CDE94(s32 state) LZ77UnCompVram(gUnknown_0862323C, structPtr->tilemapBuffers[2]); SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]); CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(gUnknown_086231E8, 0x30, 0x20); + CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); sub_81D21DC(2); return LT_INC_AND_PAUSE; case 5: @@ -325,9 +325,9 @@ u32 sub_81CDE94(s32 state) case 20: if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) { - sub_81D3464(structPtr->unk28e0); + ResetConditionSparkleSprites(structPtr->unk28e0); if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50()) - sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); return LT_FINISH; } @@ -345,7 +345,7 @@ u32 sub_81CE2D0(s32 state) { case 0: sub_81CEEC8(); - sub_81D3520(structPtr->unk28e0); + DestroyConditionSparkleSprites(structPtr->unk28e0); return 1; case 1: if (sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) @@ -360,7 +360,7 @@ u32 sub_81CE2D0(s32 state) case 3: if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) return 2; - sub_81D354C(structPtr->unk28e0); + FreeConditionSparkles(structPtr->unk28e0); HideBg(1); HideBg(2); HideBg(3); @@ -385,7 +385,7 @@ u32 sub_81CE37C(s32 state) return 1; case 2: sub_81CD548(2); - sub_81D3520(structPtr->unk28e0); + DestroyConditionSparkleSprites(structPtr->unk28e0); return 1; case 3: sub_81D2074(unkPtr); @@ -414,11 +414,11 @@ u32 sub_81CE37C(s32 state) unkPtr = sub_81CDC70(); if (!sub_81D3178(unkPtr, &structPtr->unk1814)) { - sub_81D3464(structPtr->unk28e0); + ResetConditionSparkleSprites(structPtr->unk28e0); if (sub_81CDD5C() != TRUE && sub_81CDC60() == sub_81CDC50()) return 1; - sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); return 1; } return 2; @@ -461,8 +461,8 @@ u32 sub_81CE4D8(s32 state) case 8: if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) { - sub_81D3464(structPtr->unk28e0); - sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + ResetConditionSparkleSprites(structPtr->unk28e0); + CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); return 1; } return 2; @@ -485,7 +485,7 @@ u32 sub_81CE5E4(s32 state) return 1; case 2: sub_81CD548(2); - sub_81D3520(structPtr->unk28e0); + DestroyConditionSparkleSprites(structPtr->unk28e0); return 1; case 3: if (!sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) @@ -663,7 +663,7 @@ void sub_81CE9E4(void) u16 i, spriteId; struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - sub_81D321C(sprSheets, &sprTemplate, sprPals); + LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals); if (sub_81CDD5C() == TRUE) { structPtr->monMarks.baseTileTag = 0x6A; @@ -728,7 +728,7 @@ void sub_81CE9E4(void) } } - sub_81D32B0(&sprSheet, &sprPals[0]); + LoadConditionSparkle(&sprSheet, &sprPals[0]); LoadSpriteSheet(&sprSheet); sprPals[1].data = NULL; Pokenav_AllocAndLoadPalettes(sprPals); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 5079edb379..72490bde2f 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -24,54 +24,73 @@ #include "pokemon_summary_screen.h" #include "item_menu.h" -struct UsePokeblockSubStruct +/* + This file handles the pokeblock screen where the player + chooses which pokemon to give a pokeblock to. The subsequent + scene of feeding the pokeblock to the pokemon is handled by + pokeblock_feed.c, and the rest of the pokeblock menu (and + other pokeblock-related functions) are in pokeblock.c +*/ + +enum { + WIN_NAME, + WIN_NATURE, + WIN_TEXT, + WIN_COUNT +}; + +struct UsePokeblockSession { - /*0x00*/ void (*field_0)(void); - /*0x04*/ void (*callback)(void); + /*0x00*/ void (*callback)(void); + /*0x04*/ void (*exitCallback)(void); /*0x08*/ struct Pokeblock *pokeblock; /*0x0C*/ struct Pokemon *mon; /*0x10*/ u8 stringBuffer[0x40]; - /*0x50*/ u8 field_50; - /*0x51*/ u8 field_51; + /*0x50*/ u8 mainState; + /*0x51*/ u8 field_51; // unused /*0x52*/ u8 field_52; /*0x53*/ u8 field_53; - /*0x54*/ u8 field_54; - /*0x55*/ u8 field_55; + /*0x54*/ u8 numEnhancements; + /*0x55*/ u8 field_55; // unused /*0x56*/ u8 field_56; - /*0x57*/ u8 field_57[5]; - /*0x5C*/ u8 field_5c[5]; - /*0x61*/ u8 field_61[5]; - /*0x66*/ s16 field_66[5]; - /*0x70*/ u8 field_70; - /*0x71*/ u8 field_71; - /*0x74*/ u8 (*unk74)(void); - /*0x78*/ u8 unk78; - /*0x79*/ u8 filler79[0x1]; - /*0x7A*/ u8 field_7A[0x22]; + /*0x57*/ u8 field_57[FLAVOR_COUNT]; + /*0x5C*/ u8 field_5c[FLAVOR_COUNT]; + /*0x61*/ u8 field_61[FLAVOR_COUNT]; + /*0x66*/ s16 field_66[FLAVOR_COUNT]; + /*0x70*/ u8 field_70; // mon id + 1 + /*0x71*/ u8 field_71; // mon id + /*0x74*/ u8 (*unk74)(void); // selection handler + /*0x78*/ u8 helperState; + /*0x79*/ u8 filler79[1]; // unused + /*0x7A*/ u8 field_7A[0x22]; // nature text buffer }; -struct Unk7FB8 +// This struct is identical to PokenavMonList, the struct used for managing lists of pokemon in the pokenav +// Given that this screen is essentially duplicated in the poknav, this struct was probably the same one with +// a more general name/purpose +// TODO: Once the pokenav conditions screens are documented, resolve the above +struct UsePokeblockMenuPokemon { - u8 unk0; - u8 unk1; - u16 unk2; + u8 boxId; // Because this screen is never used for the PC this is always set to TOTAL_BOXES_COUNT to refer to party + u8 monId; + u16 data; // never read }; -struct UsePokeblockStruct +struct UsePokeblockMenu { - /*0x0000*/ u8 filler0[4]; - /*0x0000*/ u16 field_4[6][0x40]; - /*0x0304*/ u8 field_304[3][0x2000]; - /*0x6304*/ u8 filler_6304[0x1000]; + /*0x0000*/ u8 filler0[4]; // unused + /*0x0000*/ u16 field_4[6][0x40]; // pal buffer + /*0x0304*/ u8 field_304[3][0x2000]; // sheet buffer + /*0x6304*/ u8 filler_6304[0x1000]; // unused? /*0x7304*/ u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; - /*0x7B06*/ u8 field_7B06[7]; - /*0x7B0E*/ s16 field_7B0E; - /*0x7B10*/ u8 field_7B10; - /*0x7B12*/ u16 field_7B12; - /*0x7B12*/ u16 field_7B14; + /*0x7B06*/ u8 field_7B06[7]; // sprite ids + /*0x7B0E*/ s16 field_7B0E; // x pos? + /*0x7B10*/ u8 field_7B10; // sprite id? + /*0x7B12*/ u16 field_7B12; // pal + /*0x7B12*/ u16 field_7B14; // sheet /*0x7B12*/ u8 *field_7B18; - /*0x7B1C*/ struct Sprite *field_7B1C[10]; - /*0x7B44*/ struct Sprite *field_7B44[2]; + /*0x7B1C*/ struct Sprite *sparkles[10]; + /*0x7B44*/ struct Sprite *condition[2]; /*0x7B4C*/ u8 field_7B4C; /*0x7B4D*/ u8 field_7B4D[3][24]; /*0x7B95*/ u8 field_7B95[3][64]; @@ -81,86 +100,78 @@ struct UsePokeblockStruct /*0x7FB4*/ s8 field_7FB4; /*0x7FB5*/ s8 field_7FB5; /*0x7FB6*/ s8 field_7FB6; - /*0x7FB8*/ struct Unk7FB8 field_7FB8[6]; - /*0x7FD0*/ struct UsePokeblockSubStruct info; + /*0x7FB8*/ struct UsePokeblockMenuPokemon party[PARTY_SIZE]; + /*0x7FD0*/ struct UsePokeblockSession info; }; -#define TAG_TILE_CONDITION_UP_DOWN 0 -#define TAG_PAL_CONDITION_UP_DOWN 0 -#define TAG_PAL_POKEBLOCK_CONDITION 1 +#define TAG_UP_DOWN 0 +#define TAG_CONDITION 1 -extern void sub_81D21DC(u8); - -// this file's functions -void sub_816636C(void (*func)(void)); -void sub_8166380(void); -void sub_816631C(void); -void sub_81662C0(void); -void sub_8166564(void); -void sub_8166304(void); -void sub_81668F8(void); -void sub_8167420(void); -void sub_8167760(void); -u8 sub_81672E4(u8 arg0); +static void SetUsePokeblockCallback(void (*func)(void)); +static void LoadUsePokeblockMenu(void); +static void sub_816631C(void); +static void sub_81662C0(void); +static void ShowUsePokeblockMenu(void); +static void sub_8166304(void); +static void sub_81668F8(void); +static void sub_8167420(void); +static void sub_8167760(void); +static u8 GetNumNonEggPartyMons(u8); static bool8 sub_8168328(void); -bool8 sub_8167930(void); -void sub_8167608(u8 arg0); -void sub_8167BA0(u16 arg0, u8 copyToVramMode); -void sub_8166634(void); +static bool8 LoadUsePokeblockGfx(void); +static void sub_8167608(u8); +static void UpdateMonInfoText(u16, bool8); +static void UsePokeblockMenu(void); static void sub_8167CA0(bool8); -void sub_8166BEC(void); -void sub_8166D44(void); -s8 sub_8166DE4(void); -bool8 IsSheenMaxed(void); -void sub_8166F50(void); -void sub_816681C(void); -void sub_8166F94(void); -u8 sub_81672A4(u8 a0); -void sub_8166A34(void); -void sub_8167104(void); -void sub_8167338(void); -void sub_81681F4(u8); -void sub_8166E24(void); -bool8 sub_8166EDC(void); -void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2); -void Pokeblock_MenuWindowTextPrint(const u8 *message); -void sub_8167184(struct Pokeblock *, struct Pokemon *); -void sub_81673DC(struct Sprite *sprite); -void sub_81674BC(void); -void sub_816753C(s16, u8); +static void CloseUsePokeblockMenu(void); +static void AskUsePokeblock(void); +static s8 HandleAskUsePokeblockInput(void); +static bool8 IsSheenMaxed(void); +static void PrintWontEatAnymore(void); +static void FeedPokeblockToMon(void); +static void EraseMenuWindow(void); +static u8 sub_81672A4(u8); +static void sub_8166A34(void); +static void sub_8167104(void); +static void sub_8167338(void); +static void sub_81681F4(u8); +static void sub_8166E24(void); +static bool8 sub_8166EDC(void); +static void BufferEnhancedStatText(u8 *, u8, s16); +static void PrintMenuWindowText(const u8 *); +static void sub_8167184(struct Pokeblock *, struct Pokemon *); +static void sub_81673DC(struct Sprite *); +static void sub_81674BC(void); +static void sub_816753C(s16, u8); static u8 sub_8167EA4(void); static u8 sub_8167FA4(void); static u8 sub_8168048(void); -void sub_8168180(struct Sprite *sprite); -void sub_81681B4(struct Sprite *sprite); -void sub_8168168(struct Sprite *sprite); -void sub_8168374(struct Sprite *sprite); +static void sub_8168180(struct Sprite *); +static void sub_81681B4(struct Sprite *); +static void sub_8168168(struct Sprite *); +static void sub_8168374(struct Sprite *); -extern const u16 gUnknown_086231E8[]; +extern const u16 gConditionGraphData_Pal[]; extern const u16 gUnknown_08623208[]; -extern const struct SpritePalette gSpritePalette_085DFDB8; -extern const struct SpriteTemplate gSpriteTemplate_085DFDA0; -// ram variables -EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL; -EWRAM_DATA void (*gUnknown_0203BC94)(void) = NULL; -EWRAM_DATA struct Pokeblock *gUnknown_0203BC98 = NULL; +// The below 3 are saved for returning to the screen after feeding a pokeblock to a mon +// so that the rest of the data can be freed +static EWRAM_DATA struct UsePokeblockSession *sInfo = NULL; +static EWRAM_DATA void (*sExitCallback)(void) = NULL; +static EWRAM_DATA struct Pokeblock *sPokeblock = NULL; EWRAM_DATA u8 gPokeblockMonId = 0; EWRAM_DATA s16 gPokeblockGain = 0; -EWRAM_DATA u8 *gUnknown_0203BCA0 = NULL; -EWRAM_DATA u8 *gUnknown_0203BCA4 = NULL; -EWRAM_DATA u8 *gUnknown_0203BCA8 = NULL; -EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; +static EWRAM_DATA u8 *sGraph_Tilemap = NULL; +static EWRAM_DATA u8 *sGraph_Gfx = NULL; +static EWRAM_DATA u8 *sMonFrame_TilemapPtr = NULL; +static EWRAM_DATA struct UsePokeblockMenu *sMenu = NULL; -// const rom data -// todo: make it static once the file is decompiled +static const u32 sMonFrame_Pal[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame_pal.bin"); // TODO: convert to .pal +static const u32 sMonFrame_Gfx[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.4bpp"); +static const u32 sMonFrame_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.bin"); +static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/graph_data.bin"); -const u32 gUnknown_085DFA60[] = INCBIN_U32("graphics/interface/85DFA60.bin"); -const u32 gUnknown_085DFA80[] = INCBIN_U32("graphics/interface/85DFA80.4bpp"); -const u32 gUnknown_085DFB60[] = INCBIN_U32("graphics/interface/85DFB60.bin"); -const u32 gUnknown_085DFC0C[] = INCBIN_U32("graphics/interface/85DFC0C.bin"); - -const u32 gUnknown_085DFCB0[] = +static const u32 gUnknown_085DFCB0[] = { MON_DATA_COOL, MON_DATA_TOUGH, @@ -169,13 +180,13 @@ const u32 gUnknown_085DFCB0[] = MON_DATA_BEAUTY }; -const u8 gUnknown_085DFCC4[] = +static const u8 sFlavors[FLAVOR_COUNT] = { - 0, // Spicy/Cool - 4, // Dry/Beauty - 3, // Sweet/Cute - 2, // Bitter/Smart - 1 // Sour/Tough + FLAVOR_SPICY, + FLAVOR_SOUR, + FLAVOR_BITTER, + FLAVOR_SWEET, + FLAVOR_DRY }; static const u8 sNatureTextColors[] = @@ -185,7 +196,7 @@ static const u8 sNatureTextColors[] = TEXT_COLOR_WHITE }; -const struct BgTemplate gUnknown_085DFCCC[4] = +static const struct BgTemplate sBgTemplates[4] = { { .bg = 0, @@ -225,50 +236,50 @@ const struct BgTemplate gUnknown_085DFCCC[4] = } }; -const struct WindowTemplate gUnknown_085DFCDC[] = +static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] = { - { + [WIN_NAME] = { .bg = 0, - .tilemapLeft = 0xD, + .tilemapLeft = 13, .tilemapTop = 1, - .width = 0xD, + .width = 13, .height = 4, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 1 }, - { + [WIN_NATURE] = { .bg = 0, .tilemapLeft = 0, - .tilemapTop = 0xE, - .width = 0xB, + .tilemapTop = 14, + .width = 11, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x35 }, - { + [WIN_TEXT] = { .bg = 0, .tilemapLeft = 1, - .tilemapTop = 0x11, - .width = 0x1C, + .tilemapTop = 17, + .width = 28, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x4B }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate sUsePokeblockYesNoWinTemplate = +static const struct WindowTemplate sUsePokeblockYesNoWinTemplate = { .bg = 0, - .tilemapLeft = 0x18, - .tilemapTop = 0xB, + .tilemapLeft = 24, + .tilemapTop = 11, .width = 5, .height = 4, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x83 }; -const u8 *const sContestStatNames[] = +static const u8 *const sContestStatNames[] = { gText_Coolness, gText_Toughness, @@ -277,17 +288,17 @@ const u8 *const sContestStatNames[] = gText_Beauty3 }; -const struct SpriteSheet gSpriteSheet_ConditionUpDown = +static const struct SpriteSheet sSpriteSheet_UpDown = { - gUsePokeblockUpDown_Gfx, 0x200, TAG_TILE_CONDITION_UP_DOWN + gUsePokeblockUpDown_Gfx, 0x200, TAG_UP_DOWN }; -const struct SpritePalette gSpritePalette_ConditionUpDown = +static const struct SpritePalette sSpritePalette_UpDown = { - gUsePokeblockUpDown_Pal, TAG_PAL_CONDITION_UP_DOWN + gUsePokeblockUpDown_Pal, TAG_UP_DOWN }; -const s16 gUnknown_085DFD28[][2] = +static const s16 gUnknown_085DFD28[][2] = { {0x9C, 0x24}, {0x75, 0x3B}, @@ -296,7 +307,7 @@ const s16 gUnknown_085DFD28[][2] = {0xC5, 0x3B} }; -const struct OamData gOamData_085DFD3C = +static const struct OamData sOam_UpDown = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -310,36 +321,36 @@ const struct OamData gOamData_085DFD3C = .paletteNum = 0, }; -const union AnimCmd gSpriteAnim_085DFD44[] = +static const union AnimCmd sAnim_Up[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_085DFD4C[] = +static const union AnimCmd sAnim_Down[] = { ANIMCMD_FRAME(8, 5), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_085DFD54[] = +static const union AnimCmd *const sAnims_UpDown[] = { - gSpriteAnim_085DFD44, - gSpriteAnim_085DFD4C + sAnim_Up, + sAnim_Down }; -const struct SpriteTemplate gSpriteTemplate_085DFD5C = +static const struct SpriteTemplate sSpriteTemplate_UpDown = { - .tileTag = 0, - .paletteTag = 0, - .oam = &gOamData_085DFD3C, - .anims = gSpriteAnimTable_085DFD54, + .tileTag = TAG_UP_DOWN, + .paletteTag = TAG_UP_DOWN, + .oam = &sOam_UpDown, + .anims = sAnims_UpDown, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -const struct OamData gOamData_085DFD74 = +static const struct OamData sOam_Condition = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -353,84 +364,85 @@ const struct OamData gOamData_085DFD74 = .paletteNum = 0, }; -const union AnimCmd gSpriteAnim_085DFD7C[] = +static const union AnimCmd gSpriteAnim_085DFD7C[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_085DFD84[] = +static const union AnimCmd gSpriteAnim_085DFD84[] = { ANIMCMD_FRAME(32, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_085DFD8C[] = +static const union AnimCmd gSpriteAnim_085DFD8C[] = { ANIMCMD_FRAME(64, 5), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_085DFD94[] = +static const union AnimCmd *const sAnims_Condition[] = { gSpriteAnim_085DFD7C, gSpriteAnim_085DFD84, gSpriteAnim_085DFD8C }; -const struct SpriteTemplate gSpriteTemplate_085DFDA0 = +static const struct SpriteTemplate sSpriteTemplate_Condition = { - .tileTag = 1, - .paletteTag = 1, - .oam = &gOamData_085DFD74, - .anims = gSpriteAnimTable_085DFD94, + .tileTag = TAG_CONDITION, + .paletteTag = TAG_CONDITION, + .oam = &sOam_Condition, + .anims = sAnims_Condition, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = sub_8168374, }; -const struct SpritePalette gSpritePalette_085DFDB8 = +static const struct SpritePalette sSpritePalette_Condition = { - gUsePokeblockCondition_Pal, TAG_PAL_POKEBLOCK_CONDITION + gUsePokeblockCondition_Pal, TAG_CONDITION }; -// code +// When first opening the selection screen void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { - gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC)); - gUnknown_0203BC90 = &gUnknown_0203BCAC->info; - gUnknown_0203BC90->pokeblock = pokeblock; - gUnknown_0203BC90->callback = callback; - sub_816636C(sub_8166380); + sMenu = AllocZeroed(sizeof(*sMenu)); + sInfo = &sMenu->info; + sInfo->pokeblock = pokeblock; + sInfo->exitCallback = callback; + SetUsePokeblockCallback(LoadUsePokeblockMenu); SetMainCallback2(sub_816631C); } -void CB2_ReturnAndChooseMonToGivePokeblock(void) +// When returning to the selection screen after feeding a pokeblock to a mon +static void CB2_ReturnAndChooseMonToGivePokeblock(void) { - gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC)); - gUnknown_0203BC90 = &gUnknown_0203BCAC->info; - gUnknown_0203BC90->pokeblock = gUnknown_0203BC98; - gUnknown_0203BC90->callback = gUnknown_0203BC94; - gPokeblockMonId = sub_81672E4(gPokeblockMonId); - gUnknown_0203BC90->field_56 = gPokeblockMonId < 4 ? 0 : 1; - sub_816636C(sub_8166380); + sMenu = AllocZeroed(sizeof(*sMenu)); + sInfo = &sMenu->info; + sInfo->pokeblock = sPokeblock; + sInfo->exitCallback = sExitCallback; + gPokeblockMonId = GetNumNonEggPartyMons(gPokeblockMonId); + sInfo->field_56 = gPokeblockMonId < 4 ? 0 : 1; + SetUsePokeblockCallback(LoadUsePokeblockMenu); SetMainCallback2(sub_81662C0); } -void sub_81662C0(void) +static void sub_81662C0(void) { - gUnknown_0203BC90->field_0(); + sInfo->callback(); AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - if (gUnknown_0203BC90->field_0 == sub_8166564) + if (sInfo->callback == ShowUsePokeblockMenu) { - gUnknown_0203BC90->field_50 = 0; + sInfo->mainState = 0; SetMainCallback2(sub_8166304); } } -void sub_8166304(void) +static void sub_8166304(void) { sub_81668F8(); AnimateSprites(); @@ -438,242 +450,255 @@ void sub_8166304(void) UpdatePaletteFade(); } -void sub_816631C(void) +static void sub_816631C(void) { - gUnknown_0203BC90->field_0(); + sInfo->callback(); AnimateSprites(); BuildOamBuffer(); RunTextPrinters(); UpdatePaletteFade(); } -void sub_8166340(void) +static void VBlankCB_UsePokeblock(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_81D2108(&gUnknown_0203BCAC->field_7C58); + sub_81D2108(&sMenu->field_7C58); ScanlineEffect_InitHBlankDmaTransfer(); } -void sub_816636C(void (*func)(void)) +static void SetUsePokeblockCallback(void (*func)(void)) { - gUnknown_0203BC90->field_0 = func; - gUnknown_0203BC90->field_50 = 0; + sInfo->callback = func; + sInfo->mainState = 0; } -void sub_8166380(void) +static void LoadUsePokeblockMenu(void) { - switch (gUnknown_0203BC90->field_50) + switch (sInfo->mainState) { case 0: - gUnknown_0203BCAC->field_7B10 = 0xFF; - sub_81D1ED4(&gUnknown_0203BCAC->field_7C58); - gUnknown_0203BC90->field_50++; + sMenu->field_7B10 = 0xFF; + sub_81D1ED4(&sMenu->field_7C58); + sInfo->mainState++; break; case 1: ResetSpriteData(); FreeAllSpritePalettes(); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 2: SetVBlankCallback(NULL); CpuFill32(0, (void*)(VRAM), VRAM_SIZE); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 3: ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_085DFCCC, ARRAY_COUNT(gUnknown_085DFCCC)); - InitWindows(gUnknown_085DFCDC); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 0x97, 0xE0); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 4: - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 5: if (!sub_8168328()) - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 6: gKeyRepeatStartDelay = 20; sub_8167420(); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 7: - if (!sub_8167930()) - gUnknown_0203BC90->field_50++; + if (!LoadUsePokeblockGfx()) + sInfo->mainState++; break; case 8: sub_8167608(0); sub_8167760(); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 9: - if (!sub_81D312C(&gUnknown_0203BCAC->field_7B0E)) - gUnknown_0203BC90->field_50++; + if (!sub_81D312C(&sMenu->field_7B0E)) + sInfo->mainState++; break; case 10: - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 11: - sub_81D2754(gUnknown_0203BCAC->field_7C58.unk0[0], gUnknown_0203BCAC->field_7C58.unk14[0]); - sub_81D20AC(&gUnknown_0203BCAC->field_7C58); - gUnknown_0203BC90->field_50++; + sub_81D2754(sMenu->field_7C58.unk0[0], sMenu->field_7C58.unk14[0]); + sub_81D20AC(&sMenu->field_7C58); + sInfo->mainState++; break; case 12: - if (!sub_81D20BC(&gUnknown_0203BCAC->field_7C58)) + if (!sub_81D20BC(&sMenu->field_7C58)) { - sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[0], gUnknown_0203BCAC->field_7C58.unk14[0]); - gUnknown_0203BC90->field_50++; + sub_81D1F84(&sMenu->field_7C58, sMenu->field_7C58.unk14[0], sMenu->field_7C58.unk14[0]); + sInfo->mainState++; } break; case 13: - sub_81D2230(&gUnknown_0203BCAC->field_7C58); - gUnknown_0203BC90->field_50++; + sub_81D2230(&sMenu->field_7C58); + sInfo->mainState++; break; case 14: - PutWindowTilemap(0); - PutWindowTilemap(1); - sub_8167BA0(0, 1); - gUnknown_0203BC90->field_50++; + PutWindowTilemap(WIN_NAME); + PutWindowTilemap(WIN_NATURE); + UpdateMonInfoText(0, TRUE); + sInfo->mainState++; break; case 15: - sub_816636C(sub_8166564); + SetUsePokeblockCallback(ShowUsePokeblockMenu); break; } } -void sub_8166564(void) +static void ShowUsePokeblockMenu(void) { - switch (gUnknown_0203BC90->field_50) + switch (sInfo->mainState) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - SetVBlankCallback(sub_8166340); + SetVBlankCallback(VBlankCB_UsePokeblock); ShowBg(0); ShowBg(1); ShowBg(3); ShowBg(2); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 1: if (!gPaletteFade.active) { - sub_81D3464(gUnknown_0203BCAC->field_7B1C); - if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + ResetConditionSparkleSprites(sMenu->sparkles); + if (sMenu->info.field_71 != sMenu->info.field_70 - 1) { - u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; - sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); + u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); } - sub_816636C(sub_8166634); + SetUsePokeblockCallback(UsePokeblockMenu); } break; } } -void sub_8166634(void) +enum { + STATE_HANDLE_INPUT, + STATE_UPDATE_SELECTION, + STATE_2, // unused state + STATE_CLOSE, + STATE_4, // unused state + STATE_CONFIRM_SELECTION, + STATE_HANDLE_CONFIRMATION, + STATE_WAIT_MSG, +}; + +static void UsePokeblockMenu(void) { u8 var; - switch (gUnknown_0203BC90->field_50) + switch (sInfo->mainState) { - case 0: - if (gMain.heldKeys & DPAD_UP) + case STATE_HANDLE_INPUT: + if (JOY_HELD(DPAD_UP)) { PlaySE(SE_SELECT); sub_8167CA0(TRUE); - sub_81D3520(gUnknown_0203BCAC->field_7B1C); - gUnknown_0203BC90->field_50 = 1; + DestroyConditionSparkleSprites(sMenu->sparkles); + sInfo->mainState = STATE_UPDATE_SELECTION; } - else if (gMain.heldKeys & DPAD_DOWN) + else if (JOY_HELD(DPAD_DOWN)) { PlaySE(SE_SELECT); sub_8167CA0(FALSE); - sub_81D3520(gUnknown_0203BCAC->field_7B1C); - gUnknown_0203BC90->field_50 = 1; + DestroyConditionSparkleSprites(sMenu->sparkles); + sInfo->mainState = STATE_UPDATE_SELECTION; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gUnknown_0203BC90->field_50 = 3; + sInfo->mainState = STATE_CLOSE; } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - if (gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1) - gUnknown_0203BC90->field_50 = 3; + + // If last item, selected Cancel. Otherwise selected mon + if (sMenu->info.field_71 == sMenu->info.field_70 - 1) + sInfo->mainState = STATE_CLOSE; else - gUnknown_0203BC90->field_50 = 5; + sInfo->mainState = STATE_CONFIRM_SELECTION; } break; - case 1: - var = gUnknown_0203BCAC->info.unk74(); + case STATE_UPDATE_SELECTION: + var = sMenu->info.unk74(); if (!var) - gUnknown_0203BC90->field_50 = var; + sInfo->mainState = STATE_HANDLE_INPUT; break; - case 2: + case STATE_2: break; - case 3: - sub_816636C(sub_8166BEC); + case STATE_CLOSE: + SetUsePokeblockCallback(CloseUsePokeblockMenu); break; - case 4: + case STATE_4: break; - case 5: - sub_8166D44(); - gUnknown_0203BC90->field_50++; + case STATE_CONFIRM_SELECTION: + AskUsePokeblock(); + sInfo->mainState++; break; - case 6: - switch (sub_8166DE4()) + case STATE_HANDLE_CONFIRMATION: + switch (HandleAskUsePokeblockInput()) { - case 1: - case -1: - gUnknown_0203BC90->field_50 = 0; + case 1: // NO + case MENU_B_PRESSED: + sInfo->mainState = STATE_HANDLE_INPUT; break; - case 0: + case 0: // YES if (IsSheenMaxed()) { - sub_8166F50(); - gUnknown_0203BC90->field_50 = 7; + PrintWontEatAnymore(); + sInfo->mainState = STATE_WAIT_MSG; } else { - sub_816636C(sub_816681C); + SetUsePokeblockCallback(FeedPokeblockToMon); } break; } break; - case 7: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + case STATE_WAIT_MSG: + if (JOY_NEW(A_BUTTON | B_BUTTON)) { - sub_8166F94(); - gUnknown_0203BC90->field_50 = 0; + EraseMenuWindow(); + sInfo->mainState = STATE_HANDLE_INPUT; } break; } } -void sub_816681C(void) +static void FeedPokeblockToMon(void) { - switch (gUnknown_0203BC90->field_50) + switch (sInfo->mainState) { case 0: - gPokeblockMonId = sub_81672A4(gUnknown_0203BCAC->info.field_71); - gUnknown_0203BC94 = gUnknown_0203BC90->callback; - gUnknown_0203BC98 = gUnknown_0203BC90->pokeblock; + gPokeblockMonId = sub_81672A4(sMenu->info.field_71); + sExitCallback = sInfo->exitCallback; + sPokeblock = sInfo->pokeblock; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 1: if (!gPaletteFade.active) { SetVBlankCallback(NULL); - FREE_AND_SET_NULL(gUnknown_0203BCA0); - FREE_AND_SET_NULL(gUnknown_0203BCA4); - FREE_AND_SET_NULL(gUnknown_0203BCA8); - FREE_AND_SET_NULL(gUnknown_0203BCAC); + FREE_AND_SET_NULL(sGraph_Tilemap); + FREE_AND_SET_NULL(sGraph_Gfx); + FREE_AND_SET_NULL(sMonFrame_TilemapPtr); + FREE_AND_SET_NULL(sMenu); FreeAllWindowBuffers(); gMain.savedCallback = CB2_ReturnAndChooseMonToGivePokeblock; CB2_PreparePokeblockFeedScene(); @@ -682,184 +707,184 @@ void sub_816681C(void) } } -void sub_81668F8(void) +static void sub_81668F8(void) { u16 var; - switch (gUnknown_0203BC90->field_50) + switch (sInfo->mainState) { case 0: - if (gUnknown_0203BCAC->info.field_71 != gPokeblockMonId) + if (sMenu->info.field_71 != gPokeblockMonId) { - sub_8167CA0(gUnknown_0203BC90->field_56); - gUnknown_0203BC90->field_50++; + sub_8167CA0(sInfo->field_56); + sInfo->mainState++; } else { - gUnknown_0203BC90->field_50 = 3; + sInfo->mainState = 3; } break; case 1: - var = gUnknown_0203BCAC->info.unk74(); + var = sMenu->info.unk74(); if (!var) - gUnknown_0203BC90->field_50 = var; + sInfo->mainState = var; break; case 2: break; case 3: BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 4: ShowBg(0); ShowBg(1); ShowBg(3); ShowBg(2); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 5: - SetVBlankCallback(sub_8166340); + SetVBlankCallback(VBlankCB_UsePokeblock); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 6: if (!gPaletteFade.active) { - sub_81D3464(gUnknown_0203BCAC->field_7B1C); - sub_816636C(sub_8166A34); + ResetConditionSparkleSprites(sMenu->sparkles); + SetUsePokeblockCallback(sub_8166A34); SetMainCallback2(sub_816631C); } break; } } -void sub_8166A34(void) +static void sub_8166A34(void) { u8 var; - switch (gUnknown_0203BC90->field_50) + switch (sInfo->mainState) { case 0: - gUnknown_0203BC90->mon = gPlayerParty; - gUnknown_0203BC90->mon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1; - sub_81D3520(gUnknown_0203BCAC->field_7B1C); - gUnknown_0203BC90->field_50++; + sInfo->mon = gPlayerParty; + sInfo->mon += sMenu->party[sMenu->info.field_71].monId; + DestroyConditionSparkleSprites(sMenu->sparkles); + sInfo->mainState++; break; case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - gUnknown_0203BC90->field_50++; + if (JOY_NEW(A_BUTTON | B_BUTTON)) + sInfo->mainState++; break; case 2: sub_8167104(); - sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]); - sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]); + sub_81D2754(sInfo->field_5c, sMenu->field_7C58.unk14[3]); + sub_81D1F84(&sMenu->field_7C58, sMenu->field_7C58.unk14[sMenu->field_7FB3], sMenu->field_7C58.unk14[3]); sub_8167338(); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 3: - var = sub_81D2074(&gUnknown_0203BCAC->field_7C58); + var = sub_81D2074(&sMenu->field_7C58); if (!var) { - sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71)); - if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + sub_81681F4(sub_81672A4(sMenu->info.field_71)); + if (sMenu->info.field_71 != sMenu->info.field_70 - 1) { - u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; - sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); + u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); } - gUnknown_0203BC90->field_52 = 0; - gUnknown_0203BC90->field_50++; + sInfo->field_52 = 0; + sInfo->mainState++; } break; case 4: - if (++gUnknown_0203BC90->field_52 > 16) + if (++sInfo->field_52 > 16) { sub_8166E24(); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; } break; case 5: - if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8166EDC()) + if (JOY_NEW(A_BUTTON | B_BUTTON) && !sub_8166EDC()) { TryClearPokeblock((u8)gSpecialVar_ItemId); - sub_816636C(sub_8166BEC); + SetUsePokeblockCallback(CloseUsePokeblockMenu); } break; } } -void sub_8166BEC(void) +static void CloseUsePokeblockMenu(void) { u8 i, var; - switch (gUnknown_0203BC90->field_50) + switch (sInfo->mainState) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 1: if (!gPaletteFade.active) - gUnknown_0203BC90->field_50 = 2; + sInfo->mainState = 2; break; case 2: gScanlineEffect.state = 3; ScanlineEffect_InitHBlankDmaTransfer(); - gUnknown_0203BC90->field_50++; + sInfo->mainState++; break; case 3: - SetMainCallback2(gUnknown_0203BC90->callback); - sub_81D354C(gUnknown_0203BCAC->field_7B1C); - for (i = 0; i < 7; i++) - DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B06[i]]); + SetMainCallback2(sInfo->exitCallback); + FreeConditionSparkles(sMenu->sparkles); + for (i = 0; i < ARRAY_COUNT(sMenu->field_7B06); i++) + DestroySprite(&gSprites[sMenu->field_7B06[i]]); - FreeSpriteTilesByTag(0); - FreeSpriteTilesByTag(1); - FreeSpritePaletteByTag(0); - FreeSpritePaletteByTag(1); + FreeSpriteTilesByTag(TAG_UP_DOWN); + FreeSpriteTilesByTag(TAG_CONDITION); + FreeSpritePaletteByTag(TAG_UP_DOWN); + FreeSpritePaletteByTag(TAG_CONDITION); - for (i = 0; i < 2; i++) - DestroySprite(gUnknown_0203BCAC->field_7B44[i]); + for (i = 0; i < ARRAY_COUNT(sMenu->condition); i++) + DestroySprite(sMenu->condition[i]); - if (gUnknown_0203BCAC->field_7B10 != 0xFF) - DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B10]); + if (sMenu->field_7B10 != 0xFF) + DestroySprite(&gSprites[sMenu->field_7B10]); SetVBlankCallback(NULL); - FREE_AND_SET_NULL(gUnknown_0203BCA0); - FREE_AND_SET_NULL(gUnknown_0203BCA4); - FREE_AND_SET_NULL(gUnknown_0203BCA8); - FREE_AND_SET_NULL(gUnknown_0203BCAC); + FREE_AND_SET_NULL(sGraph_Tilemap); + FREE_AND_SET_NULL(sGraph_Gfx); + FREE_AND_SET_NULL(sMonFrame_TilemapPtr); + FREE_AND_SET_NULL(sMenu); FreeAllWindowBuffers(); break; } } -void sub_8166D44(void) +static void AskUsePokeblock(void) { u8 stringBuffer[0x40]; - GetMonData(&gPlayerParty[sub_81672A4(gUnknown_0203BCAC->info.field_71)], MON_DATA_NICKNAME, stringBuffer); + GetMonData(&gPlayerParty[sub_81672A4(sMenu->info.field_71)], MON_DATA_NICKNAME, stringBuffer); StringGetEnd10(stringBuffer); StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion); StringCopy(gStringVar4, stringBuffer); - FillWindowPixelBuffer(2, 17); - DrawTextBorderOuter(2, 151, 14); - AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); - PutWindowTilemap(2); - CopyWindowToVram(2, 3); + FillWindowPixelBuffer(WIN_TEXT, 17); + DrawTextBorderOuter(WIN_TEXT, 151, 14); + AddTextPrinterParameterized(WIN_TEXT, 1, gStringVar4, 0, 1, 0, NULL); + PutWindowTilemap(WIN_TEXT); + CopyWindowToVram(WIN_TEXT, 3); CreateYesNoMenu(&sUsePokeblockYesNoWinTemplate, 151, 14, 0); } -s8 sub_8166DE4(void) +static s8 HandleAskUsePokeblockInput(void) { s8 menuItem = Menu_ProcessInputNoWrapClearOnChoose(); switch (menuItem) { - case 0: + case 0: // YES break; case MENU_B_PRESSED: - case 1: + case 1: // NO PlaySE(SE_SELECT); rbox_fill_rectangle(2); ClearWindowTilemap(2); @@ -869,84 +894,84 @@ s8 sub_8166DE4(void) return menuItem; } -void sub_8166E24(void) +static void sub_8166E24(void) { - DrawTextBorderOuter(2, 151, 14); - FillWindowPixelBuffer(2, 17); + DrawTextBorderOuter(WIN_TEXT, 151, 14); + FillWindowPixelBuffer(WIN_TEXT, 17); - for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5; gUnknown_0203BC90->field_53++) + for (sInfo->field_53 = 0; sInfo->field_53 < FLAVOR_COUNT; sInfo->field_53++) { - if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0) + if (sInfo->field_61[sInfo->field_53] != 0) break; } - if (gUnknown_0203BC90->field_53 < 5) - Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]); + if (sInfo->field_53 < FLAVOR_COUNT) + BufferEnhancedStatText(gStringVar4, sInfo->field_53, sInfo->field_61[sInfo->field_53]); else - Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, 0); + BufferEnhancedStatText(gStringVar4, sInfo->field_53, 0); - Pokeblock_MenuWindowTextPrint(gStringVar4); - PutWindowTilemap(2); - CopyWindowToVram(2, 3); + PrintMenuWindowText(gStringVar4); + PutWindowTilemap(WIN_TEXT); + CopyWindowToVram(WIN_TEXT, 3); } -bool8 sub_8166EDC(void) +static bool8 sub_8166EDC(void) { - FillWindowPixelBuffer(2, 17); + FillWindowPixelBuffer(WIN_TEXT, 17); while (1) { - gUnknown_0203BC90->field_53++; - if (gUnknown_0203BC90->field_53 < 5) + sInfo->field_53++; + if (sInfo->field_53 < FLAVOR_COUNT) { - if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0) + if (sInfo->field_61[sInfo->field_53] != 0) break; } else { - gUnknown_0203BC90->field_53 = 5; + sInfo->field_53 = FLAVOR_COUNT; return FALSE; } } - Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]); - Pokeblock_MenuWindowTextPrint(gStringVar4); - CopyWindowToVram(2, 2); + BufferEnhancedStatText(gStringVar4, sInfo->field_53, sInfo->field_61[sInfo->field_53]); + PrintMenuWindowText(gStringVar4); + CopyWindowToVram(WIN_TEXT, 2); return TRUE; } -void sub_8166F50(void) +static void PrintWontEatAnymore(void) { - FillWindowPixelBuffer(2, 17); - DrawTextBorderOuter(2, 151, 14); - AddTextPrinterParameterized(2, 1, gText_WontEatAnymore, 0, 1, 0, NULL); - PutWindowTilemap(2); - CopyWindowToVram(2, 3); + FillWindowPixelBuffer(WIN_TEXT, 17); + DrawTextBorderOuter(WIN_TEXT, 151, 14); + AddTextPrinterParameterized(WIN_TEXT, 1, gText_WontEatAnymore, 0, 1, 0, NULL); + PutWindowTilemap(WIN_TEXT); + CopyWindowToVram(WIN_TEXT, 3); } -void sub_8166F94(void) +static void EraseMenuWindow(void) { - rbox_fill_rectangle(2); - ClearWindowTilemap(2); - CopyWindowToVram(2, 3); + rbox_fill_rectangle(WIN_TEXT); + ClearWindowTilemap(WIN_TEXT); + CopyWindowToVram(WIN_TEXT, 3); } -void Pokeblock_MenuWindowTextPrint(const u8 *message) +static void PrintMenuWindowText(const u8 *message) { - AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_TEXT, 1, gStringVar4, 0, 1, 0, NULL); } -void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2) +static void BufferEnhancedStatText(u8 *dest, u8 statId, s16 enhancement) { - switch (a2) + switch (enhancement) { - case 1 ... 32767: - a2 = 0; + case 1 ... 32767: // if > 0 + enhancement = 0; // fallthrough - case -32768 ... -1: - if (a2) - dest[(u16)a2] += 0; // something you can't imagine + case -32768 ... -1: // if < 0 + if (enhancement) + dest[(u16)enhancement] += 0; // something you can't imagine StringCopy(dest, sContestStatNames[statId]); StringAppend(dest, gText_WasEnhanced); break; @@ -956,7 +981,7 @@ void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2) } } -void Pokeblock_GetMonContestStats(struct Pokemon *mon, u8 *data) +static void GetMonConditions(struct Pokemon *mon, u8 *data) { u16 i; @@ -964,7 +989,7 @@ void Pokeblock_GetMonContestStats(struct Pokemon *mon, u8 *data) data[i] = GetMonData(mon, gUnknown_085DFCB0[i]); } -void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) +static void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) { u16 i; s16 cstat; @@ -973,10 +998,10 @@ void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) if (GetMonData(mon, MON_DATA_SHEEN) != 255) { sub_8167184(pokeblock, mon); - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { data = GetMonData(mon, gUnknown_085DFCB0[i]); - cstat = data + gUnknown_0203BC90->field_66[i]; + cstat = data + sInfo->field_66[i]; if (cstat < 0) cstat = 0; if (cstat > 255) @@ -994,28 +1019,28 @@ void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) } } -void sub_8167104(void) +static void sub_8167104(void) { u16 i; struct Pokemon *mon = gPlayerParty; - mon += gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->info.field_71 * 4 + 9]; + mon += sMenu->unk7FB0[sMenu->info.field_71 * 4 + 9]; - Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_57); - sub_8167054(gUnknown_0203BC90->pokeblock, mon); - Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_5c); - for (i = 0; i < 5; i++) - gUnknown_0203BC90->field_61[i] = gUnknown_0203BC90->field_5c[i] - gUnknown_0203BC90->field_57[i]; + GetMonConditions(mon, sInfo->field_57); + sub_8167054(sInfo->pokeblock, mon); + GetMonConditions(mon, sInfo->field_5c); + for (i = 0; i < FLAVOR_COUNT; i++) + sInfo->field_61[i] = sInfo->field_5c[i] - sInfo->field_57[i]; } -void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) +static void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) { s8 i, direction, taste; - gUnknown_0203BC90->field_66[0] = pokeblock->spicy; - gUnknown_0203BC90->field_66[1] = pokeblock->sour; - gUnknown_0203BC90->field_66[2] = pokeblock->bitter; - gUnknown_0203BC90->field_66[3] = pokeblock->sweet; - gUnknown_0203BC90->field_66[4] = pokeblock->dry; + sInfo->field_66[0] = pokeblock->spicy; + sInfo->field_66[1] = pokeblock->sour; + sInfo->field_66[2] = pokeblock->bitter; + sInfo->field_66[3] = pokeblock->sweet; + sInfo->field_66[4] = pokeblock->dry; if (gPokeblockGain > 0) direction = 1; @@ -1024,24 +1049,24 @@ void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) else return; - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { - s16 amount = gUnknown_0203BC90->field_66[i]; + s16 amount = sInfo->field_66[i]; s8 boost = amount / 10; if (amount % 10 >= 5) // round to the nearest boost++; - taste = GetMonFlavorRelation(mon, gUnknown_085DFCC4[i]); + taste = GetMonFlavorRelation(mon, sFlavors[i]); if (taste == direction) - gUnknown_0203BC90->field_66[i] += boost * taste; + sInfo->field_66[i] += boost * taste; } } -bool8 IsSheenMaxed(void) +static bool8 IsSheenMaxed(void) { - if (GetBoxOrPartyMonData(gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk0, - gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1, + if (GetBoxOrPartyMonData(sMenu->party[sMenu->info.field_71].boxId, + sMenu->party[sMenu->info.field_71].monId, MON_DATA_SHEEN, NULL) == 255) return TRUE; @@ -1049,7 +1074,7 @@ bool8 IsSheenMaxed(void) return FALSE; } -u8 sub_81672A4(u8 a0) +static u8 sub_81672A4(u8 a0) { u8 i; @@ -1066,7 +1091,8 @@ u8 sub_81672A4(u8 a0) return 0; } -u8 sub_81672E4(u8 partyCount) +// TODO: Update +static u8 GetNumNonEggPartyMons(u8 partyCount) { u8 i, numEggs; @@ -1079,36 +1105,37 @@ u8 sub_81672E4(u8 partyCount) return partyCount - numEggs; } -u8 sub_8167324(u8 a0) +// Unused +static u8 sub_8167324(u8 a0) { return sub_81672A4(a0); } -void sub_8167338(void) +static void sub_8167338(void) { u16 i, spriteId; - LoadSpriteSheet(&gSpriteSheet_ConditionUpDown); - LoadSpritePalette(&gSpritePalette_ConditionUpDown); - gUnknown_0203BC90->field_54 = 0; + LoadSpriteSheet(&sSpriteSheet_UpDown); + LoadSpritePalette(&sSpritePalette_UpDown); + sInfo->numEnhancements = 0; - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { - if (gUnknown_0203BC90->field_61[i] != 0) + if (sInfo->field_61[i] != 0) { - spriteId = CreateSprite(&gSpriteTemplate_085DFD5C, gUnknown_085DFD28[i][0], gUnknown_085DFD28[i][1], 0); + spriteId = CreateSprite(&sSpriteTemplate_UpDown, gUnknown_085DFD28[i][0], gUnknown_085DFD28[i][1], 0); if (spriteId != MAX_SPRITES) { - if (gUnknown_0203BC90->field_61[i] != 0) + if (sInfo->field_61[i] != 0) gSprites[spriteId].callback = sub_81673DC; - gUnknown_0203BC90->field_54++; + sInfo->numEnhancements++; } } } } -void sub_81673DC(struct Sprite *sprite) +static void sub_81673DC(struct Sprite *sprite) { if (sprite->data[0] < 6) sprite->pos2.y -= 2; @@ -1118,11 +1145,11 @@ void sub_81673DC(struct Sprite *sprite) if (++sprite->data[0] > 60) { DestroySprite(sprite); - gUnknown_0203BC90->field_54--; + sInfo->numEnhancements--; } } -void sub_8167420(void) +static void sub_8167420(void) { u16 i; u16 numMons; @@ -1131,91 +1158,91 @@ void sub_8167420(void) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { - gUnknown_0203BCAC->field_7FB8[numMons].unk0 = 14; - gUnknown_0203BCAC->field_7FB8[numMons].unk1 = i; - gUnknown_0203BCAC->field_7FB8[numMons].unk2 = 0; + sMenu->party[numMons].boxId = TOTAL_BOXES_COUNT; + sMenu->party[numMons].monId = i; + sMenu->party[numMons].data = 0; numMons++; } } - gUnknown_0203BCAC->info.field_71 = 0; - gUnknown_0203BCAC->info.field_70 = numMons + 1; + sMenu->info.field_71 = 0; + sMenu->info.field_70 = numMons + 1; sub_81674BC(); } -void sub_81674BC(void) +static void sub_81674BC(void) { s16 var, var2; - sub_816753C(gUnknown_0203BCAC->info.field_71, 0); - gUnknown_0203BCAC->field_7FB3 = 0; - gUnknown_0203BCAC->field_7FB4 = 1; - gUnknown_0203BCAC->field_7FB5 = 2; + sub_816753C(sMenu->info.field_71, 0); + sMenu->field_7FB3 = 0; + sMenu->field_7FB4 = 1; + sMenu->field_7FB5 = 2; - var = gUnknown_0203BCAC->info.field_71 + 1; - if (var >= gUnknown_0203BCAC->info.field_70) + var = sMenu->info.field_71 + 1; + if (var >= sMenu->info.field_70) var = 0; - var2 = gUnknown_0203BCAC->info.field_71 - 1; + var2 = sMenu->info.field_71 - 1; if (var2 < 0) - var2 = gUnknown_0203BCAC->info.field_70 - 1; + var2 = sMenu->info.field_70 - 1; sub_816753C(var, 1); sub_816753C(var2, 2); } -void sub_816753C(s16 id1, u8 id2) +static void sub_816753C(s16 id1, u8 id2) { - u8 boxId = gUnknown_0203BCAC->field_7FB8[id1].unk0; - u8 monId = gUnknown_0203BCAC->field_7FB8[id1].unk1; - u8 r6 = gUnknown_0203BCAC->info.field_70; + u8 boxId = sMenu->party[id1].boxId; + u8 monId = sMenu->party[id1].monId; + u8 r6 = sMenu->info.field_70; bool8 r8 = FALSE; - sub_81D2ED4(gUnknown_0203BCAC->field_7B4D[id2], gUnknown_0203BCAC->field_7B95[id2], boxId, monId, id1, r6, r8); - sub_81D2F78(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->unk7FB0, boxId, monId, id1, id2, r6, r8); - sub_81D3094(gUnknown_0203BCAC->field_304[id2], gUnknown_0203BCAC->field_4[id2], boxId, monId, id1, r6, r8); + sub_81D2ED4(sMenu->field_7B4D[id2], sMenu->field_7B95[id2], boxId, monId, id1, r6, r8); + sub_81D2F78(&sMenu->field_7C58, sMenu->unk7FB0, boxId, monId, id1, id2, r6, r8); + sub_81D3094(sMenu->field_304[id2], sMenu->field_4[id2], boxId, monId, id1, r6, r8); } -void sub_8167608(u8 arg0) +static void sub_8167608(u8 arg0) { u8 spriteId; struct SpriteTemplate spriteTemplate; struct SpriteSheet spriteSheet; struct SpritePalette spritePal; - if (gUnknown_0203BCAC->field_7B10 == 0xFF) + if (sMenu->field_7B10 == 0xFF) { sub_81D31D0(&spriteSheet, &spriteTemplate, &spritePal); - spriteSheet.data = gUnknown_0203BCAC->field_304[arg0]; - spritePal.data = gUnknown_0203BCAC->field_4[arg0]; - gUnknown_0203BCAC->field_7B12 = LoadSpritePalette(&spritePal); - gUnknown_0203BCAC->field_7B14 = LoadSpriteSheet(&spriteSheet); + spriteSheet.data = sMenu->field_304[arg0]; + spritePal.data = sMenu->field_4[arg0]; + sMenu->field_7B12 = LoadSpritePalette(&spritePal); + sMenu->field_7B14 = LoadSpriteSheet(&spriteSheet); spriteId = CreateSprite(&spriteTemplate, 38, 104, 0); - gUnknown_0203BCAC->field_7B10 = spriteId; + sMenu->field_7B10 = spriteId; if (spriteId == MAX_SPRITES) { FreeSpriteTilesByTag(100); FreeSpritePaletteByTag(100); - gUnknown_0203BCAC->field_7B10 = 0xFF; + sMenu->field_7B10 = 0xFF; } else { - gUnknown_0203BCAC->field_7B10 = spriteId; - gSprites[gUnknown_0203BCAC->field_7B10].callback = sub_8168168; - gSprites[gUnknown_0203BCAC->field_7B10].pos2.y -= 34; - gUnknown_0203BCAC->field_7B18 = (void*)(OBJ_VRAM0 + (gUnknown_0203BCAC->field_7B14 * 32)); - gUnknown_0203BCAC->field_7B12 = (gUnknown_0203BCAC->field_7B12 * 16) + 0x100; + sMenu->field_7B10 = spriteId; + gSprites[sMenu->field_7B10].callback = sub_8168168; + gSprites[sMenu->field_7B10].pos2.y -= 34; + sMenu->field_7B18 = (void*)(OBJ_VRAM0 + (sMenu->field_7B14 * 32)); + sMenu->field_7B12 = (sMenu->field_7B12 * 16) + 0x100; } } else { - do {} while(0); // Surprised to see something like this? It's a very neat trick for generating the same assembly. It has no practical purpose, feel free to remove it. - DmaCopy16Defvars(3, gUnknown_0203BCAC->field_304[arg0], gUnknown_0203BCAC->field_7B18, 0x800); - LoadPalette(gUnknown_0203BCAC->field_4[arg0], gUnknown_0203BCAC->field_7B12, 32); + do {} while(0); // Only needed to match, feel free to remove. + DmaCopy16Defvars(3, sMenu->field_304[arg0], sMenu->field_7B18, 0x800); + LoadPalette(sMenu->field_4[arg0], sMenu->field_7B12, 32); } } -void sub_8167760(void) +static void sub_8167760(void) { u16 i, spriteId; struct SpriteSheet spriteSheets[4]; @@ -1224,22 +1251,22 @@ void sub_8167760(void) struct SpriteSheet spriteSheet2; struct SpritePalette spritePal2; - sub_81D321C(spriteSheets, &spriteTemplate, spritePals); + LoadConditionSelectionIcons(spriteSheets, &spriteTemplate, spritePals); LoadSpriteSheets(spriteSheets); LoadSpritePalettes(spritePals); - for (i = 0; i < gUnknown_0203BCAC->info.field_70 - 1; i++) + for (i = 0; i < sMenu->info.field_70 - 1; i++) { spriteId = CreateSprite(&spriteTemplate, 226, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - gUnknown_0203BCAC->field_7B06[i] = spriteId; + sMenu->field_7B06[i] = spriteId; gSprites[spriteId].data[0] = i; gSprites[spriteId].callback = sub_8168180; } else { - gUnknown_0203BCAC->field_7B06[i] = -1; + sMenu->field_7B06[i] = -1; } } @@ -1249,12 +1276,12 @@ void sub_8167760(void) spriteId = CreateSprite(&spriteTemplate, 230, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - gUnknown_0203BCAC->field_7B06[i] = spriteId; + sMenu->field_7B06[i] = spriteId; gSprites[spriteId].oam.size = 0; } else { - gUnknown_0203BCAC->field_7B06[i] = -1; + sMenu->field_7B06[i] = -1; } } @@ -1263,23 +1290,23 @@ void sub_8167760(void) spriteId = CreateSprite(&spriteTemplate, 222, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - gUnknown_0203BCAC->field_7B06[i] = spriteId; + sMenu->field_7B06[i] = spriteId; gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); } else { - gUnknown_0203BCAC->field_7B06[i] = -1; + sMenu->field_7B06[i] = -1; } - sub_81D32B0(&spriteSheet2, &spritePal2); + LoadConditionSparkle(&spriteSheet2, &spritePal2); LoadSpriteSheet(&spriteSheet2); LoadSpritePalette(&spritePal2); } -bool8 sub_8167930(void) +static bool8 LoadUsePokeblockGfx(void) { - switch (gUnknown_0203BCAC->info.unk78) + switch (sMenu->info.helperState) { case 0: ChangeBgX(0, 0, 0); @@ -1290,88 +1317,88 @@ bool8 sub_8167930(void) ChangeBgY(2, 0, 0); ChangeBgX(3, 0, 0); ChangeBgY(3, 136 << 6, 0); - SetGpuReg(REG_OFFSET_DISPCNT, 28736); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2|BLDCNT_EFFECT_BLEND|BLDCNT_TGT2_BG1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); break; case 1: - gUnknown_0203BCA4 = Alloc(6656); - gUnknown_0203BCA0 = Alloc(1280); - gUnknown_0203BCA8 = Alloc(1280); + sGraph_Gfx = Alloc(6656); + sGraph_Tilemap = Alloc(1280); + sMonFrame_TilemapPtr = Alloc(1280); break; case 2: - LZ77UnCompVram(gUnknown_085DFB60, gUnknown_0203BCA8); + LZ77UnCompVram(sMonFrame_Tilemap, sMonFrame_TilemapPtr); break; case 3: - LoadBgTiles(3, gUnknown_085DFA80, 224, 0); + LoadBgTiles(3, sMonFrame_Gfx, 224, 0); break; case 4: - LoadBgTilemap(3, gUnknown_0203BCA8, 1280, 0); + LoadBgTilemap(3, sMonFrame_TilemapPtr, 1280, 0); break; case 5: - LoadPalette(gUnknown_085DFA60, 208, 32); - gUnknown_0203BCAC->field_7B0E = 0xFFB0; + LoadPalette(sMonFrame_Pal, 208, 32); + sMenu->field_7B0E = -80; break; case 6: - LZ77UnCompVram(gUsePokeblockGraph_Gfx, gUnknown_0203BCA4); + LZ77UnCompVram(gUsePokeblockGraph_Gfx, sGraph_Gfx); break; case 7: - LZ77UnCompVram(gUsePokeblockGraph_Tilemap, gUnknown_0203BCA0); + LZ77UnCompVram(gUsePokeblockGraph_Tilemap, sGraph_Tilemap); LoadPalette(gUsePokeblockGraph_Pal, 32, 32); break; case 8: - LoadBgTiles(1, gUnknown_0203BCA4, 6656, 160 << 2); + LoadBgTiles(1, sGraph_Gfx, 6656, 160 << 2); break; case 9: - SetBgTilemapBuffer(1, gUnknown_0203BCA0); + SetBgTilemapBuffer(1, sGraph_Tilemap); CopyToBgTilemapBufferRect(1, gUsePokeblockNatureWin_Pal, 0, 13, 12, 4); CopyBgTilemapBufferToVram(1); break; case 10: - LZ77UnCompVram(gUnknown_085DFC0C, gUnknown_0203BCAC->tilemapBuffer); + LZ77UnCompVram(sGraphData_Tilemap, sMenu->tilemapBuffer); break; case 11: - LoadBgTilemap(2, gUnknown_0203BCAC->tilemapBuffer, 1280, 0); - LoadPalette(gUnknown_086231E8, 48, 32); + LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0); + LoadPalette(gConditionGraphData_Pal, 48, 32); LoadPalette(gUnknown_08623208, 240, 32); sub_81D21DC(2); break; default: - gUnknown_0203BCAC->info.unk78 = 0; + sMenu->info.helperState = 0; return FALSE; } - gUnknown_0203BCAC->info.unk78++; + sMenu->info.helperState++; return TRUE; } -void sub_8167BA0(u16 arg0, u8 copyToVramMode) +static void UpdateMonInfoText(u16 arg0, bool8 firstPrint) { u8 partyIndex; u8 nature; u8 *str; - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + FillWindowPixelBuffer(WIN_NAME, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_NATURE, PIXEL_FILL(0)); + if (sMenu->info.field_71 != sMenu->info.field_70 - 1) { - AddTextPrinterParameterized(0, 1, gUnknown_0203BCAC->field_7B95[arg0], 0, 1, 0, NULL); - partyIndex = sub_81672A4(gUnknown_0203BCAC->info.field_71); + AddTextPrinterParameterized(WIN_NAME, 1, sMenu->field_7B95[arg0], 0, 1, 0, NULL); + partyIndex = sub_81672A4(sMenu->info.field_71); nature = GetNature(&gPlayerParty[partyIndex]); - str = StringCopy(gUnknown_0203BCAC->info.field_7A, gText_NatureSlash); + str = StringCopy(sMenu->info.field_7A, gText_NatureSlash); str = StringCopy(str, gNatureNamePointers[nature]); - AddTextPrinterParameterized3(1, 1, 2, 1, sNatureTextColors, 0, gUnknown_0203BCAC->info.field_7A); + AddTextPrinterParameterized3(WIN_NATURE, 1, 2, 1, sNatureTextColors, 0, sMenu->info.field_7A); } - if (copyToVramMode) + if (firstPrint) { - CopyWindowToVram(0, 3); - CopyWindowToVram(1, 3); + CopyWindowToVram(WIN_NAME, 3); + CopyWindowToVram(WIN_NATURE, 3); } else { - CopyWindowToVram(0, 2); - CopyWindowToVram(1, 2); + CopyWindowToVram(WIN_NAME, 2); + CopyWindowToVram(WIN_NATURE, 2); } } @@ -1381,86 +1408,86 @@ static void sub_8167CA0(bool8 arg0) bool32 r8, r4; if (arg0) - var0 = gUnknown_0203BCAC->field_7FB5; + var0 = sMenu->field_7FB5; else - var0 = gUnknown_0203BCAC->field_7FB4; + var0 = sMenu->field_7FB4; sub_81D1F84( - &gUnknown_0203BCAC->field_7C58, - gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], - gUnknown_0203BCAC->field_7C58.unk14[var0]); + &sMenu->field_7C58, + sMenu->field_7C58.unk14[sMenu->field_7FB3], + sMenu->field_7C58.unk14[var0]); - r8 = (gUnknown_0203BCAC->info.field_71 ^ (gUnknown_0203BCAC->info.field_70 - 1)) ? 1 : 0; + r8 = (sMenu->info.field_71 ^ (sMenu->info.field_70 - 1)) ? 1 : 0; if (arg0) { - gUnknown_0203BCAC->field_7FB5 = gUnknown_0203BCAC->field_7FB4; - gUnknown_0203BCAC->field_7FB4 = gUnknown_0203BCAC->field_7FB3; - gUnknown_0203BCAC->field_7FB3 = var0; - gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB5; + sMenu->field_7FB5 = sMenu->field_7FB4; + sMenu->field_7FB4 = sMenu->field_7FB3; + sMenu->field_7FB3 = var0; + sMenu->field_7FB6 = sMenu->field_7FB5; - gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 == 0) - ? gUnknown_0203BCAC->info.field_70 - 1 - : gUnknown_0203BCAC->info.field_71 - 1; + sMenu->info.field_71 = (sMenu->info.field_71 == 0) + ? sMenu->info.field_70 - 1 + : sMenu->info.field_71 - 1; - gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 == 0) - ? gUnknown_0203BCAC->info.field_70 - 1 - : gUnknown_0203BCAC->info.field_71 - 1; + sMenu->field_7B4C = (sMenu->info.field_71 == 0) + ? sMenu->info.field_70 - 1 + : sMenu->info.field_71 - 1; } else { - gUnknown_0203BCAC->field_7FB4 = gUnknown_0203BCAC->field_7FB5; - gUnknown_0203BCAC->field_7FB5 = gUnknown_0203BCAC->field_7FB3; - gUnknown_0203BCAC->field_7FB3 = var0; - gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB4; + sMenu->field_7FB4 = sMenu->field_7FB5; + sMenu->field_7FB5 = sMenu->field_7FB3; + sMenu->field_7FB3 = var0; + sMenu->field_7FB6 = sMenu->field_7FB4; - gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1) - ? gUnknown_0203BCAC->info.field_71 + 1 + sMenu->info.field_71 = (sMenu->info.field_71 < sMenu->info.field_70 - 1) + ? sMenu->info.field_71 + 1 : 0; - gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1) - ? gUnknown_0203BCAC->info.field_71 + 1 + sMenu->field_7B4C = (sMenu->info.field_71 < sMenu->info.field_70 - 1) + ? sMenu->info.field_71 + 1 : 0; } - r4 = (gUnknown_0203BCAC->info.field_71 ^ (gUnknown_0203BCAC->info.field_70 - 1)) ? 1 : 0; - sub_81D3520(gUnknown_0203BCAC->field_7B1C); + r4 = (sMenu->info.field_71 ^ (sMenu->info.field_70 - 1)) ? 1 : 0; + DestroyConditionSparkleSprites(sMenu->sparkles); if (!r8) - gUnknown_0203BCAC->info.unk74 = sub_8167EA4; + sMenu->info.unk74 = sub_8167EA4; else if (!r4) - gUnknown_0203BCAC->info.unk74 = sub_8167FA4; + sMenu->info.unk74 = sub_8167FA4; else - gUnknown_0203BCAC->info.unk74 = sub_8168048; + sMenu->info.unk74 = sub_8168048; } static u8 sub_8167EA4(void) { - switch (gUnknown_0203BCAC->info.unk78) + switch (sMenu->info.helperState) { case 0: - sub_8167608(gUnknown_0203BCAC->field_7FB3); - gUnknown_0203BCAC->info.unk78++; + sub_8167608(sMenu->field_7FB3); + sMenu->info.helperState++; break; case 1: - sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0); - gUnknown_0203BCAC->info.unk78++; + UpdateMonInfoText(sMenu->field_7FB3, FALSE); + sMenu->info.helperState++; break; case 2: - if (!sub_81D3178(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E)) + if (!sub_81D3178(&sMenu->field_7C58, &sMenu->field_7B0E)) { - sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6); - gUnknown_0203BCAC->info.unk78++; + sub_816753C(sMenu->field_7B4C, sMenu->field_7FB6); + sMenu->info.helperState++; } break; case 3: - sub_81D3464(gUnknown_0203BCAC->field_7B1C); - if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + ResetConditionSparkleSprites(sMenu->sparkles); + if (sMenu->info.field_71 != sMenu->info.field_70 - 1) { - u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; - sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); + u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); } - gUnknown_0203BCAC->info.unk78 = 0; + sMenu->info.helperState = 0; return FALSE; } @@ -1469,22 +1496,22 @@ static u8 sub_8167EA4(void) static u8 sub_8167FA4(void) { - switch (gUnknown_0203BCAC->info.unk78) + switch (sMenu->info.helperState) { case 0: - if (!sub_81D31A4(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E)) - gUnknown_0203BCAC->info.unk78++; + if (!sub_81D31A4(&sMenu->field_7C58, &sMenu->field_7B0E)) + sMenu->info.helperState++; break; case 1: - sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0); - gUnknown_0203BCAC->info.unk78++; + UpdateMonInfoText(sMenu->field_7FB3, FALSE); + sMenu->info.helperState++; break; case 2: - sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6); - gUnknown_0203BCAC->info.unk78++; + sub_816753C(sMenu->field_7B4C, sMenu->field_7FB6); + sMenu->info.helperState++; break; case 3: - gUnknown_0203BCAC->info.unk78 = 0; + sMenu->info.helperState = 0; return FALSE; } @@ -1493,68 +1520,68 @@ static u8 sub_8167FA4(void) static u8 sub_8168048(void) { - switch (gUnknown_0203BCAC->info.unk78) + switch (sMenu->info.helperState) { case 0: - sub_81D2074(&gUnknown_0203BCAC->field_7C58); - if (!sub_81D3150(&gUnknown_0203BCAC->field_7B0E)) + sub_81D2074(&sMenu->field_7C58); + if (!sub_81D3150(&sMenu->field_7B0E)) { - sub_8167608(gUnknown_0203BCAC->field_7FB3); - gUnknown_0203BCAC->info.unk78++; + sub_8167608(sMenu->field_7FB3); + sMenu->info.helperState++; } break; case 1: - sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0); - gUnknown_0203BCAC->info.unk78++; + UpdateMonInfoText(sMenu->field_7FB3, FALSE); + sMenu->info.helperState++; break; case 2: - if (!sub_81D3178(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E)) + if (!sub_81D3178(&sMenu->field_7C58, &sMenu->field_7B0E)) { - sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6); - gUnknown_0203BCAC->info.unk78++; + sub_816753C(sMenu->field_7B4C, sMenu->field_7FB6); + sMenu->info.helperState++; } break; case 3: - sub_81D3464(gUnknown_0203BCAC->field_7B1C); - if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + ResetConditionSparkleSprites(sMenu->sparkles); + if (sMenu->info.field_71 != sMenu->info.field_70 - 1) { - u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; - sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); + u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); } - gUnknown_0203BCAC->info.unk78 = 0; + sMenu->info.helperState = 0; return FALSE; } return TRUE; } -void sub_8168168(struct Sprite *sprite) +static void sub_8168168(struct Sprite *sprite) { - sprite->pos1.x = gUnknown_0203BCAC->field_7B0E + 38; + sprite->pos1.x = sMenu->field_7B0E + 38; } -void sub_8168180(struct Sprite *sprite) +static void sub_8168180(struct Sprite *sprite) { - if (sprite->data[0] == gUnknown_0203BCAC->info.field_71) + if (sprite->data[0] == sMenu->info.field_71) StartSpriteAnim(sprite, 0); else StartSpriteAnim(sprite, 1); } -void sub_81681B4(struct Sprite *sprite) +static void sub_81681B4(struct Sprite *sprite) { - if (gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1) + if (sMenu->info.field_71 == sMenu->info.field_70 - 1) sprite->oam.paletteNum = IndexOfSpritePaletteTag(101); else sprite->oam.paletteNum = IndexOfSpritePaletteTag(102); } -void sub_81681F4(u8 monIndex) +static void sub_81681F4(u8 monIndex) { u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN); - gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3] = (sheen != 255) + sMenu->unk7FB0[sMenu->field_7FB3] = (sheen != 255) ? sheen / 29 : 9; } @@ -1564,10 +1591,10 @@ static void sub_8168248(void) struct CompressedSpriteSheet spriteSheet; struct SpritePalette spritePalette; - spritePalette = gSpritePalette_085DFDB8; + spritePalette = sSpritePalette_Condition; spriteSheet.data = gUsePokeblockCondition_Gfx; spriteSheet.size = 0x800; - spriteSheet.tag = 1; + spriteSheet.tag = TAG_CONDITION; LoadCompressedSpriteSheet(&spriteSheet); LoadSpritePalette(&spritePalette); } @@ -1578,8 +1605,8 @@ static void sub_8168294(void) s16 xDiff, xStart; int yStart = 17; int var = 8; - struct Sprite **sprites = gUnknown_0203BCAC->field_7B44; - const struct SpriteTemplate *template = &gSpriteTemplate_085DFDA0; + struct Sprite **sprites = sMenu->condition; + const struct SpriteTemplate *template = &sSpriteTemplate_Condition; for (i = 0, xDiff = 64, xStart = -96; i < 2; i++) { @@ -1597,22 +1624,22 @@ static void sub_8168294(void) static bool8 sub_8168328(void) { - switch (gUnknown_0203BCAC->info.unk78) + switch (sMenu->info.helperState) { case 0: sub_8168248(); - gUnknown_0203BCAC->info.unk78++; + sMenu->info.helperState++; return TRUE; case 1: sub_8168294(); - gUnknown_0203BCAC->info.unk78 = 0; + sMenu->info.helperState = 0; return FALSE; } return FALSE; } -void sub_8168374(struct Sprite *sprite) +static void sub_8168374(struct Sprite *sprite) { s16 prevX = sprite->pos1.x; From 4bf43311f0b2cf78cb69b71485fce61ed8c21786 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 10 Aug 2020 17:09:17 -0400 Subject: [PATCH 48/85] Remove redundant parens --- src/roulette.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/roulette.c b/src/roulette.c index b3e07233a7..4ca892912a 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1515,7 +1515,7 @@ static void Task_HandleBetGridInput(u8 taskId) if (JOY_NEW(A_BUTTON)) { - if ((sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag)) + if (sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag) { // Ball has already landed on this space PlaySE(SE_BOO); From ceac2d547c1b2fb8b0129ced38dbad3c3dfce970 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Sun, 9 Aug 2020 17:09:55 -0400 Subject: [PATCH 49/85] Remove fakematch --- src/battle_anim_flying.c | 544 +++++++++++++++++++-------------------- 1 file changed, 263 insertions(+), 281 deletions(-) diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 5179c13648..f188f2c8f7 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -536,17 +536,16 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite) void DestroyAnimSpriteAfterTimer(struct Sprite *sprite) { - if (sprite->data[0]-- <= 0) + if (sprite->data[0]-- > 0) + return; + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) { - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - { - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - } - - DestroySprite(sprite); - gAnimVisualTaskCount--; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; } + + DestroySprite(sprite); + gAnimVisualTaskCount--; } struct FeatherDanceData @@ -570,30 +569,27 @@ struct FeatherDanceData static void AnimFallingFeather(struct Sprite *sprite) { u8 battler, matrixNum, sinIndex; - s16 spriteCoord, sinVal; + s16 sinVal; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; - if (gBattleAnimArgs[7] & 0x100) - battler = gBattleAnimAttacker; - else - battler = gBattleAnimTarget; + battler = (gBattleAnimArgs[7] & 0x100) ? gBattleAnimAttacker : gBattleAnimTarget; if (GetBattlerSide(battler) == B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0]; - spriteCoord = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); - sprite->pos1.y = spriteCoord + gBattleAnimArgs[1]; + sinVal = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); + sprite->pos1.y = sinVal + gBattleAnimArgs[1]; - data->unk8 = sprite->pos1.y << 8; - data->unkE_1 = spriteCoord + gBattleAnimArgs[6]; + data->unk8 = (u16)(sprite->pos1.y) << 8; + data->unkE_1 = (u16)(sinVal + gBattleAnimArgs[6]); data->unk0_0c = 1; - data->unk2 = gBattleAnimArgs[2] & 0xFF; - data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF; + data->unk2 = (u16)(gBattleAnimArgs[2] & 0xFF); + data->unkA = (u16)((gBattleAnimArgs[2] >> 8) & 0xFF) ; data->unk4 = gBattleAnimArgs[3]; - data->unk6 = gBattleAnimArgs[4]; - *(u16*)(data->unkC) = gBattleAnimArgs[5]; + data->unk6 = (u16)gBattleAnimArgs[4]; + *(u16*)(data->unkC) = (u16)gBattleAnimArgs[5]; if (data->unk2 >= 64 && data->unk2 <= 191) { @@ -628,27 +624,16 @@ static void AnimFallingFeather(struct Sprite *sprite) } } - data->unk0_1 = data->unk2 >> 6; - sprite->pos2.x = (gSineTable[data->unk2] * data->unkC[0]) >> 8; + data->unk0_1 = data->unk2/64; + sprite->pos2.x = (gSineTable[data->unk2] * (s32)data->unkC[0]) >> 8; matrixNum = sprite->oam.matrixNum; sinIndex = (-sprite->pos2.x >> 1) + data->unkA; sinVal = gSineTable[sinIndex]; gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; - // The comparison below is completely pointless. 'sprite' is sure to be a valid pointer and - // both the 'if' and 'else' parts are exactly the same. - // The only reason for this is making sure the compiler generates the exact ASM. - if (sprite) - { - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; - } - else - { - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; - } + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; sprite->callback = sub_810E520; } @@ -665,242 +650,239 @@ static void sub_810E520(struct Sprite *sprite) data->unk0_0a = 0; data->unk1 = 0; } + return; } - else + + switch (data->unk2 / 64) { - switch (data->unk2 / 64) + case 0: + if ((u8)data->unk0_1 == 1) // this must be cast to u8 { - case 0: - if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_1 << 24 >> 24 == 3) - { - data->unk0_0b ^= 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - sprite->hFlip ^= 1; - sprite->animNum = sprite->hFlip; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - data->unk2; - } - data->unk0_1 = 0; - break; - case 1: - if (data->unk0_1 << 24 >> 24 == 0) - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_1 << 24 >> 24 == 2) - { - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - sprite->hFlip ^= 1; - sprite->animNum = sprite->hFlip; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 1; - break; - case 2: - if (data->unk0_1 << 24 >> 24 == 3) - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_1 << 24 >> 24 == 1) - { - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - sprite->hFlip ^= 1; - sprite->animNum = sprite->hFlip; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 2; - break; - case 3: - if (data->unk0_1 << 24 >> 24 == 2) - { - data->unk0_0d = 1; - } - else if (data->unk0_1 << 24 >> 24 == 0) - { - data->unk0_0b ^= 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - sprite->hFlip ^= 1; - sprite->animNum = sprite->hFlip; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 3; - break; + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; } - #ifndef NONMATCHING - asm("":::"r8"); - #endif - sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8; - matrixNum = sprite->oam.matrixNum; - - sinIndex = (-sprite->pos2.x >> 1) + data->unkA; - sinVal = gSineTable[sinIndex]; - - gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; - - data->unk8 += data->unk6; - sprite->pos1.y = data->unk8 >> 8; - if (data->unk4 & 0x8000) - data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF; - else - data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; - - if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) + else if ((u8)data->unk0_1 == 3) { - sprite->data[0] = 0; - sprite->callback = DestroyAnimSpriteAfterTimer; + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + data->unk2; + } + data->unk0_1 = 0; + break; + case 1: + if ((u8)data->unk0_1 == 0) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if ((u8)data->unk0_1 == 2) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 1; + break; + case 2: + if ((u8)data->unk0_1 == 3) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if ((u8)data->unk0_1 == 1) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 2; + break; + case 3: + if ((u8)data->unk0_1 == 2) + { + data->unk0_0d = 1; + } + else if ((u8)data->unk0_1 == 0) + { + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 3; + break; + } + + sprite->pos2.x = ((s32)(data->unkC[data->unk0_0b]) * gSineTable[data->unk2]) >> 8; + matrixNum = sprite->oam.matrixNum; + + sinIndex = ((-sprite->pos2.x >> 1) + data->unkA); + sinVal = gSineTable[sinIndex]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + + data->unk8 += data->unk6; + sprite->pos1.y = (s16)(data->unk8 >> 8); + if (data->unk4 & 0x8000) + data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF; + else + data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; + + if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) + { + sprite->data[0] = 0; + sprite->callback = DestroyAnimSpriteAfterTimer; } } @@ -944,20 +926,20 @@ static void sub_810EB40(struct Sprite *sprite) { sprite->pos2.x += sprite->data[1] >> 8; - if (++sprite->data[0] == 6) + if (sprite->data[0]++ == 5) { sprite->data[0] = 0; sprite->pos2.x = 0; StartSpriteAnim(sprite, 0); } - if (--sprite->data[7] == -1) + if (sprite->data[7]-- == 0) DestroyAnimSprite(sprite); } void AnimTask_DrillPeckHitSplats(u8 task) { - if (!(gTasks[task].data[0] % 32)) + if ((gTasks[task].data[0] % 32) == 0) { gAnimVisualTaskCount++; @@ -1060,8 +1042,8 @@ static void AnimDiveBall_Step2(struct Sprite *sprite) static void AnimDiveWaterSplash(struct Sprite *sprite) { - u32 matrixNum; - int t1, t2; + u8 matrixNum; + s32 t1, t2; switch (sprite->data[0]) { @@ -1083,7 +1065,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) sprite->data[0]++; break; case 1: - if (sprite->data[2] <= 11) + if (sprite->data[2] < 12) sprite->data[1] -= 40; else sprite->data[1] += 40; @@ -1091,7 +1073,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) sprite->data[2]++; TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0); - + matrixNum = sprite->oam.matrixNum; t1 = 15616; @@ -1115,8 +1097,8 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) // Launches a water droplet away from the specified battler. Used by Astonish and Dive static void AnimSprayWaterDroplet(struct Sprite *sprite) { - int v1 = 0x1ff & Random2(); - int v2 = 0x7f & Random2(); + const u16 v1 = Random2() & 0x1ff; + const u16 v2 = Random2() & 0x07f; if (v1 % 2) sprite->data[0] = 736 + v1; @@ -1160,13 +1142,13 @@ static void AnimSprayWaterDroplet_Step(struct Sprite *sprite) sprite->pos2.y -= sprite->data[1] >> 8; } - sprite->data[0] = sprite->data[0]; + sprite->data[0] -= 0; // Needed to Match sprite->data[1] -= 32; if (sprite->data[0] < 0) sprite->data[0] = 0; - if (++sprite->data[3] == 31) + if (sprite->data[3]++ == 30) DestroyAnimSprite(sprite); } @@ -1212,7 +1194,7 @@ static void AnimSkyAttackBird(struct Sprite *sprite) sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12; rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y); - rotation += 49152; + rotation -= 16384; TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation); @@ -1236,12 +1218,12 @@ void unref_sub_810F184(u8 taskId) { if (gBattleAnimArgs[0] == 0) { - u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = TRUE; } else { - u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = FALSE; } DestroyAnimVisualTask(taskId); From 35c6e85e2031571ee775ccc113f156266cd68b4d Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Sun, 9 Aug 2020 19:24:06 -0400 Subject: [PATCH 50/85] cleanup --- src/battle_anim_flying.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index f188f2c8f7..b4454b2e71 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -380,21 +380,18 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId) { u8 data2; u16 temp; - int i, base; if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1]) { + int i, base; gTasks[taskId].data[10] = 0; data2 = gTasks[taskId].data[2]; temp = gPlttBufferFaded[16 * data2 + 0x108]; i = 7; base = data2 * 16; - do - { + for (; i > 0; --i) gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; - i--; - } while (i > 0); gPlttBufferFaded[base + 0x101] = temp; } From 7e593d37bb59d3fc015af441a1b3669fc494de84 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Fri, 7 Aug 2020 19:18:51 -0400 Subject: [PATCH 51/85] 2 --- src/berry_crush.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index cf4c99f5a7..ff544a01d8 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -3271,7 +3271,7 @@ static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5) { - u8 sp[4]; + u8 sp[2]; 0[(u16 *)sp] = r3; r0[0] = r1; From cc4255d4c064384cf3516441e340b6377c99de3d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 10 Aug 2020 23:50:49 -0400 Subject: [PATCH 52/85] Add some charmap constant usage --- charmap.txt | 8 +- gflib/string_util.c | 169 +++++++++++---------- gflib/text.c | 222 ++++++++++++++-------------- gflib/text.h | 59 ++++++-- src/battle_controller_player.c | 12 +- src/battle_message.c | 2 +- src/battle_script_commands.c | 8 +- src/data/union_room.h | 12 +- src/dynamic_placeholder_text_util.c | 2 +- src/international_string_util.c | 2 +- src/link_rfu_3.c | 6 +- src/mauville_old_man.c | 2 +- src/menu_specialized.c | 42 +++--- src/pokeblock.c | 4 +- src/pokedex.c | 2 +- src/pokemon_storage_system.c | 34 ++--- src/pokemon_summary_screen.c | 6 +- src/pokenav_conditions_1.c | 44 +++--- src/pokenav_conditions_2.c | 8 +- src/pokenav_conditions_3.c | 2 +- src/pokenav_ribbons_1.c | 2 +- src/pokenav_ribbons_2.c | 2 +- src/strings.c | 76 +++++----- src/union_room_chat.c | 14 +- src/unk_text_util_2.c | 36 ++--- 25 files changed, 404 insertions(+), 372 deletions(-) diff --git a/charmap.txt b/charmap.txt index 3a34bada56..c96202a096 100644 --- a/charmap.txt +++ b/charmap.txt @@ -405,7 +405,7 @@ B_BUFF3 = FD 34 NAME_END = FC 00 @ special 0xF7 character -SPECIAL_F7 = F7 +DYNAMIC = F7 @ more text functions @@ -415,15 +415,15 @@ SHADOW = FC 03 @ same as fc 01 COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes PALETTE = FC 05 @ used in credits SIZE = FC 06 @ note that anything other than "SMALL" is invalid -UNKNOWN_7 = FC 07 +RESET_SIZE = FC 07 PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them PAUSE_UNTIL_PRESS = FC 09 WAIT_SE = FC 0A PLAY_BGM = FC 0B ESCAPE = FC 0C SHIFT_TEXT = FC 0D -UNKNOWN_E = FC 0E -UNKNOWN_F = FC 0F +SHIFT_DOWN = FC 0E +FILL_WINDOW = FC 0F PLAY_SE = FC 10 CLEAR = FC 11 SKIP = FC 12 diff --git a/gflib/string_util.c b/gflib/string_util.c index db972a8ed3..92f8eea5af 100644 --- a/gflib/string_util.c +++ b/gflib/string_util.c @@ -342,50 +342,61 @@ u8 *StringExpandPlaceholders(u8 *dest, const u8 *src) switch (c) { - case PLACEHOLDER_BEGIN: - placeholderId = *src++; - expandedString = GetExpandedPlaceholder(placeholderId); - dest = StringExpandPlaceholders(dest, expandedString); - break; - case EXT_CTRL_CODE_BEGIN: - *dest++ = c; - c = *src++; - *dest++ = c; + case PLACEHOLDER_BEGIN: + placeholderId = *src++; + expandedString = GetExpandedPlaceholder(placeholderId); + dest = StringExpandPlaceholders(dest, expandedString); + break; + case EXT_CTRL_CODE_BEGIN: + *dest++ = c; + c = *src++; + *dest++ = c; - switch (c) - { - case 0x07: - case 0x09: - case 0x0F: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - break; - case 0x04: - *dest++ = *src++; - case 0x0B: - *dest++ = *src++; - default: - *dest++ = *src++; - } + switch (c) + { + case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: + case EXT_CTRL_CODE_FILL_WINDOW: + case EXT_CTRL_CODE_JPN: + case EXT_CTRL_CODE_ENG: + case EXT_CTRL_CODE_PAUSE_MUSIC: + case EXT_CTRL_CODE_RESUME_MUSIC: break; - case EOS: - *dest = EOS; - return dest; - case CHAR_PROMPT_SCROLL: - case CHAR_PROMPT_CLEAR: - case CHAR_NEWLINE: + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: + *dest++ = *src++; + case EXT_CTRL_CODE_PLAY_BGM: + *dest++ = *src++; default: - *dest++ = c; + *dest++ = *src++; + } + break; + case EOS: + *dest = EOS; + return dest; + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + case CHAR_NEWLINE: + default: + *dest++ = c; } } } u8 *StringBraille(u8 *dest, const u8 *src) { - u8 setBrailleFont[] = { EXT_CTRL_CODE_BEGIN, 0x06, 0x06, EOS }; - u8 gotoLine2[] = { CHAR_NEWLINE, EXT_CTRL_CODE_BEGIN, 0x0E, 0x02, EOS }; + const u8 setBrailleFont[] = { + EXT_CTRL_CODE_BEGIN, + EXT_CTRL_CODE_SIZE, + 6, + EOS + }; + const u8 gotoLine2[] = { + CHAR_NEWLINE, + EXT_CTRL_CODE_BEGIN, + EXT_CTRL_CODE_SHIFT_DOWN, + 2, + EOS + }; dest = StringCopy(dest, setBrailleFont); @@ -395,16 +406,16 @@ u8 *StringBraille(u8 *dest, const u8 *src) switch (c) { - case EOS: - *dest = c; - return dest; - case CHAR_NEWLINE: - dest = StringCopy(dest, gotoLine2); - break; - default: - *dest++ = c; - *dest++ = c + 0x40; - break; + case EOS: + *dest = c; + return dest; + case CHAR_NEWLINE: + dest = StringCopy(dest, gotoLine2); + break; + default: + *dest++ = c; + *dest++ = c + 0x40; + break; } } } @@ -564,7 +575,7 @@ u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n) else { *dest++ = *src++; - if (*(src - 1) == CHAR_SPECIAL_F9) + if (*(src - 1) == CHAR_EXTRA_SYMBOL) *dest++ = *src++; } } @@ -579,7 +590,7 @@ u32 StringLength_Multibyte(const u8 *str) while (*str != EOS) { - if (*str == CHAR_SPECIAL_F9) + if (*str == CHAR_EXTRA_SYMBOL) str++; str++; length++; @@ -596,15 +607,15 @@ u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color) switch (colorType) { case 0: - *dest = 1; + *dest = EXT_CTRL_CODE_COLOR; dest++; break; case 1: - *dest = 3; + *dest = EXT_CTRL_CODE_SHADOW; dest++; break; case 2: - *dest = 2; + *dest = EXT_CTRL_CODE_HIGHLIGHT; dest++; break; } @@ -619,7 +630,7 @@ bool32 IsStringJapanese(u8 *str) { while (*str != EOS) { - if (*str <= 0xA0) + if (*str < CHAR_0) if (*str != CHAR_SPACE) return TRUE; str++; @@ -634,7 +645,7 @@ bool32 sub_800924C(u8 *str, s32 n) for (i = 0; *str != EOS && i < n; i++) { - if (*str <= 0xA0) + if (*str < CHAR_0) if (*str != CHAR_SPACE) return TRUE; str++; @@ -647,31 +658,31 @@ u8 GetExtCtrlCodeLength(u8 code) { static const u8 lengths[] = { - 1, - 2, - 2, - 2, - 4, - 2, - 2, - 1, - 2, - 1, - 1, - 3, - 2, - 2, - 2, - 1, - 3, - 2, - 2, - 2, - 2, - 1, - 1, - 1, - 1, + [0] = 1, + [EXT_CTRL_CODE_COLOR] = 2, + [EXT_CTRL_CODE_HIGHLIGHT] = 2, + [EXT_CTRL_CODE_SHADOW] = 2, + [EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW] = 4, + [EXT_CTRL_CODE_PALETTE] = 2, + [EXT_CTRL_CODE_SIZE] = 2, + [EXT_CTRL_CODE_RESET_SIZE] = 1, + [EXT_CTRL_CODE_PAUSE] = 2, + [EXT_CTRL_CODE_PAUSE_UNTIL_PRESS] = 1, + [EXT_CTRL_CODE_WAIT_SE] = 1, + [EXT_CTRL_CODE_PLAY_BGM] = 3, + [EXT_CTRL_CODE_ESCAPE] = 2, + [EXT_CTRL_CODE_SHIFT_TEXT] = 2, + [EXT_CTRL_CODE_SHIFT_DOWN] = 2, + [EXT_CTRL_CODE_FILL_WINDOW] = 1, + [EXT_CTRL_CODE_PLAY_SE] = 3, + [EXT_CTRL_CODE_CLEAR] = 2, + [EXT_CTRL_CODE_SKIP] = 2, + [EXT_CTRL_CODE_CLEAR_TO] = 2, + [EXT_CTRL_CODE_MIN_LETTER_SPACING] = 2, + [EXT_CTRL_CODE_JPN] = 1, + [EXT_CTRL_CODE_ENG] = 1, + [EXT_CTRL_CODE_PAUSE_MUSIC] = 1, + [EXT_CTRL_CODE_RESUME_MUSIC] = 1, }; u8 length = 0; @@ -734,7 +745,7 @@ void ConvertInternationalString(u8 *s, u8 language) StripExtCtrlCodes(s); i = StringLength(s); s[i++] = EXT_CTRL_CODE_BEGIN; - s[i++] = 22; + s[i++] = EXT_CTRL_CODE_ENG; s[i++] = EOS; i--; @@ -746,7 +757,7 @@ void ConvertInternationalString(u8 *s, u8 language) } s[0] = EXT_CTRL_CODE_BEGIN; - s[1] = 21; + s[1] = EXT_CTRL_CODE_JPN; } } diff --git a/gflib/text.c b/gflib/text.c index 6e5af0e125..5d407e5e4c 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -67,19 +67,19 @@ const struct GlyphWidthFunc gGlyphWidthFuncs[] = const struct KeypadIcon gKeypadIcons[] = { - { 0x0, 0x8, 0xC }, - { 0x1, 0x8, 0xC }, - { 0x2, 0x10, 0xC }, - { 0x4, 0x10, 0xC }, - { 0x6, 0x18, 0xC }, - { 0x9, 0x18, 0xC }, - { 0xC, 0x8, 0xC }, - { 0xD, 0x8, 0xC }, - { 0xE, 0x8, 0xC }, - { 0xF, 0x8, 0xC }, - { 0x20, 0x8, 0xC }, - { 0x21, 0x8, 0xC }, - { 0x22, 0x8, 0xC } + [CHAR_A_BUTTON] = { 0x0, 0x8, 0xC }, + [CHAR_B_BUTTON] = { 0x1, 0x8, 0xC }, + [CHAR_L_BUTTON] = { 0x2, 0x10, 0xC }, + [CHAR_R_BUTTON] = { 0x4, 0x10, 0xC }, + [CHAR_START_BUTTON] = { 0x6, 0x18, 0xC }, + [CHAR_SELECT_BUTTON] = { 0x9, 0x18, 0xC }, + [CHAR_DPAD_UP] = { 0xC, 0x8, 0xC }, + [CHAR_DPAD_DOWN] = { 0xD, 0x8, 0xC }, + [CHAR_DPAD_LEFT] = { 0xE, 0x8, 0xC }, + [CHAR_DPAD_RIGHT] = { 0xF, 0x8, 0xC }, + [CHAR_DPAD_UPDOWN] = { 0x20, 0x8, 0xC }, + [CHAR_DPAD_LEFTRIGHT] = { 0x21, 0x8, 0xC }, + [CHAR_DPAD_NONE] = { 0x22, 0x8, 0xC } }; const u8 gKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp"); @@ -1609,22 +1609,22 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentChar++; switch (currChar) { - case 1: + case EXT_CTRL_CODE_COLOR: textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 2: + case EXT_CTRL_CODE_HIGHLIGHT: textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 3: + case EXT_CTRL_CODE_SHADOW: textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 4: + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar; @@ -1633,63 +1633,63 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 5: + case EXT_CTRL_CODE_PALETTE: textPrinter->printerTemplate.currentChar++; return 2; - case 6: + case EXT_CTRL_CODE_SIZE: subStruct->glyphId = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return 2; - case EXT_CTRL_CODE_UNKNOWN_7: + case EXT_CTRL_CODE_RESET_SIZE: return 2; - case 8: + case EXT_CTRL_CODE_PAUSE: textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; textPrinter->state = 6; return 2; - case 9: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: textPrinter->state = 1; if (gTextFlags.autoScroll) subStruct->autoScrollDelay = 0; return 3; - case 10: + case EXT_CTRL_CODE_WAIT_SE: textPrinter->state = 5; return 3; - case 11: + case EXT_CTRL_CODE_PLAY_BGM: currChar = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; currChar |= *textPrinter->printerTemplate.currentChar << 8; textPrinter->printerTemplate.currentChar++; PlayBGM(currChar); return 2; - case 12: + case EXT_CTRL_CODE_ESCAPE: currChar = *textPrinter->printerTemplate.currentChar | 0x100; textPrinter->printerTemplate.currentChar++; break; - case 16: + case EXT_CTRL_CODE_PLAY_SE: currChar = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; currChar |= (*textPrinter->printerTemplate.currentChar << 8); textPrinter->printerTemplate.currentChar++; PlaySE(currChar); return 2; - case 13: + case EXT_CTRL_CODE_SHIFT_TEXT: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return 2; - case 14: + case EXT_CTRL_CODE_SHIFT_DOWN: textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return 2; - case 15: + case EXT_CTRL_CODE_FILL_WINDOW: FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; return 2; - case 23: + case EXT_CTRL_CODE_PAUSE_MUSIC: m4aMPlayStop(&gMPlayInfo_BGM); return 2; - case 24: + case EXT_CTRL_CODE_RESUME_MUSIC: m4aMPlayContinue(&gMPlayInfo_BGM); return 2; case EXT_CTRL_CODE_CLEAR: @@ -1702,7 +1702,7 @@ u16 RenderText(struct TextPrinter *textPrinter) return 0; } return 2; - case 18: + case EXT_CTRL_CODE_SKIP: textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentChar++; return 2; @@ -1739,11 +1739,11 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->state = 3; TextPrinterInitDownArrowCounters(textPrinter); return 3; - case CHAR_SPECIAL_F9: + case CHAR_EXTRA_SYMBOL: currChar = *textPrinter->printerTemplate.currentChar | 0x100; textPrinter->printerTemplate.currentChar++; break; - case CHAR_SPECIAL_F8: + case CHAR_KEYPAD_ICON: currChar = *textPrinter->printerTemplate.currentChar++; gUnknown_03002F90.unk80 = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing; @@ -1891,45 +1891,45 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) temp2 = strLocal[strPos++]; switch (temp2) { - case 0x4: + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: ++strPos; - case 0xB: - case 0x10: + case EXT_CTRL_CODE_PLAY_BGM: + case EXT_CTRL_CODE_PLAY_SE: ++strPos; - case 0x1: - case 0x2: - case 0x3: - case 0x5: - case 0x6: - case 0x8: - case 0xC: - case 0xD: - case 0xE: - case 0x11: - case 0x12: - case 0x13: - case 0x14: + case EXT_CTRL_CODE_COLOR: + case EXT_CTRL_CODE_HIGHLIGHT: + case EXT_CTRL_CODE_SHADOW: + case EXT_CTRL_CODE_PALETTE: + case EXT_CTRL_CODE_SIZE: + case EXT_CTRL_CODE_PAUSE: + case EXT_CTRL_CODE_ESCAPE: + case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_DOWN: + case EXT_CTRL_CODE_CLEAR: + case EXT_CTRL_CODE_SKIP: + case EXT_CTRL_CODE_CLEAR_TO: + case EXT_CTRL_CODE_MIN_LETTER_SPACING: ++strPos; break; - case EXT_CTRL_CODE_UNKNOWN_7: - case 0x9: - case 0xA: - case 0xF: + case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: + case EXT_CTRL_CODE_WAIT_SE: + case EXT_CTRL_CODE_FILL_WINDOW: case EXT_CTRL_CODE_JPN: case EXT_CTRL_CODE_ENG: default: break; } break; - case CHAR_SPECIAL_F7: + case CHAR_DYNAMIC: case PLACEHOLDER_BEGIN: ++strPos; break; case CHAR_PROMPT_SCROLL: case CHAR_PROMPT_CLEAR: break; - case CHAR_SPECIAL_F8: - case CHAR_SPECIAL_F9: + case CHAR_KEYPAD_ICON: + case CHAR_EXTRA_SYMBOL: ++strPos; default: ++width; @@ -1999,19 +1999,19 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case PLACEHOLDER_BEGIN: switch (*++str) { - case 0x2: + case PLACEHOLDER_ID_STRING_VAR_1: bufferPointer = gStringVar1; break; - case 0x3: + case PLACEHOLDER_ID_STRING_VAR_2: bufferPointer = gStringVar2; break; - case 0x4: + case PLACEHOLDER_ID_STRING_VAR_3: bufferPointer = gStringVar3; break; default: return 0; } - case CHAR_SPECIAL_F7: + case CHAR_DYNAMIC: if (bufferPointer == NULL) bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str); while (*bufferPointer != EOS) @@ -2035,40 +2035,40 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case EXT_CTRL_CODE_BEGIN: switch (*++str) { - case 0x4: + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: ++str; - case 0xB: - case 0x10: + case EXT_CTRL_CODE_PLAY_BGM: + case EXT_CTRL_CODE_PLAY_SE: ++str; - case 0x1: - case 0x2: - case 0x3: - case 0x5: - case 0x8: - case 0xC: - case 0xD: - case 0xE: + case EXT_CTRL_CODE_COLOR: + case EXT_CTRL_CODE_HIGHLIGHT: + case EXT_CTRL_CODE_SHADOW: + case EXT_CTRL_CODE_PALETTE: + case EXT_CTRL_CODE_PAUSE: + case EXT_CTRL_CODE_ESCAPE: + case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_DOWN: ++str; break; - case 0x6: + case EXT_CTRL_CODE_SIZE: func = GetFontWidthFunc(*++str); if (func == NULL) return 0; if (letterSpacing == -1) localLetterSpacing = GetFontAttribute(*str, FONTATTR_LETTER_SPACING); break; - case 0x11: + case EXT_CTRL_CODE_CLEAR: glyphWidth = *++str; lineWidth += glyphWidth; break; - case 0x12: + case EXT_CTRL_CODE_SKIP: lineWidth = *++str; break; - case 0x13: + case EXT_CTRL_CODE_CLEAR_TO: if (*++str > lineWidth) lineWidth = *str; break; - case 0x14: + case EXT_CTRL_CODE_MIN_LETTER_SPACING: minGlyphWidth = *++str; break; case EXT_CTRL_CODE_JPN: @@ -2077,17 +2077,17 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case EXT_CTRL_CODE_ENG: isJapanese = 0; break; - case EXT_CTRL_CODE_UNKNOWN_7: - case 0x9: - case 0xA: - case 0xF: + case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: + case EXT_CTRL_CODE_WAIT_SE: + case EXT_CTRL_CODE_FILL_WINDOW: default: break; } break; - case CHAR_SPECIAL_F8: - case CHAR_SPECIAL_F9: - if (*str == CHAR_SPECIAL_F9) + case CHAR_KEYPAD_ICON: + case CHAR_EXTRA_SYMBOL: + if (*str == CHAR_EXTRA_SYMBOL) glyphWidth = func(*++str | 0x100, isJapanese); else glyphWidth = GetKeypadIconWidth(*++str); @@ -2146,11 +2146,11 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) SaveTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]); - fgColor = 1; - bgColor = 0; - shadowColor = 3; + fgColor = TEXT_COLOR_WHITE; + bgColor = TEXT_COLOR_TRANSPARENT; + shadowColor = TEXT_COLOR_LIGHT_GREY; - GenerateFontHalfRowLookupTable(1, 0, 3); + GenerateFontHalfRowLookupTable(TEXT_COLOR_WHITE, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GREY); strLocal = str; strPos = 0; @@ -2163,54 +2163,54 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) temp2 = strLocal[strPos++]; switch (temp2) { - case 0x4: + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: fgColor = strLocal[strPos++]; bgColor = strLocal[strPos++]; shadowColor = strLocal[strPos++]; GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); continue; - case 0x1: + case EXT_CTRL_CODE_COLOR: fgColor = strLocal[strPos++]; GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); continue; - case 0x2: + case EXT_CTRL_CODE_HIGHLIGHT: bgColor = strLocal[strPos++]; GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); continue; - case 0x3: + case EXT_CTRL_CODE_SHADOW: shadowColor = strLocal[strPos++]; GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); continue; - case 0x6: + case EXT_CTRL_CODE_SIZE: fontId = strLocal[strPos++]; break; - case 0xB: - case 0x10: + case EXT_CTRL_CODE_PLAY_BGM: + case EXT_CTRL_CODE_PLAY_SE: ++strPos; - case 0x5: - case 0x8: - case 0xC: - case 0xD: - case 0xE: - case 0x11: - case 0x12: - case 0x13: - case 0x14: + case EXT_CTRL_CODE_PALETTE: + case EXT_CTRL_CODE_PAUSE: + case EXT_CTRL_CODE_ESCAPE: + case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_DOWN: + case EXT_CTRL_CODE_CLEAR: + case EXT_CTRL_CODE_SKIP: + case EXT_CTRL_CODE_CLEAR_TO: + case EXT_CTRL_CODE_MIN_LETTER_SPACING: ++strPos; break; - case EXT_CTRL_CODE_UNKNOWN_7: - case 0x9: - case 0xA: - case 0xF: + case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: + case EXT_CTRL_CODE_WAIT_SE: + case EXT_CTRL_CODE_FILL_WINDOW: case EXT_CTRL_CODE_JPN: case EXT_CTRL_CODE_ENG: default: continue; } break; - case CHAR_SPECIAL_F7: - case CHAR_SPECIAL_F8: - case CHAR_SPECIAL_F9: + case CHAR_DYNAMIC: + case CHAR_KEYPAD_ICON: + case CHAR_EXTRA_SYMBOL: case PLACEHOLDER_BEGIN: ++strPos; break; diff --git a/gflib/text.h b/gflib/text.h index 5b317600ea..ba74cde6e1 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -169,9 +169,9 @@ #define CHAR_a_DIAERESIS 0xF4 #define CHAR_o_DIAERESIS 0xF5 #define CHAR_u_DIAERESIS 0xF6 -#define CHAR_SPECIAL_F7 0xF7 -#define CHAR_SPECIAL_F8 0xF8 -#define CHAR_SPECIAL_F9 0xF9 +#define CHAR_DYNAMIC 0xF7 +#define CHAR_KEYPAD_ICON 0xF8 +#define CHAR_EXTRA_SYMBOL 0xF9 #define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog #define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog #define EXT_CTRL_CODE_BEGIN 0xFC // extended control code @@ -179,7 +179,22 @@ #define CHAR_NEWLINE 0xFE #define EOS 0xFF // end of string -// Special F9 chars +// CHAR_KEYPAD_ICON chars +#define CHAR_A_BUTTON 0x00 +#define CHAR_B_BUTTON 0x01 +#define CHAR_L_BUTTON 0x02 +#define CHAR_R_BUTTON 0x03 +#define CHAR_START_BUTTON 0x04 +#define CHAR_SELECT_BUTTON 0x05 +#define CHAR_DPAD_UP 0x06 +#define CHAR_DPAD_DOWN 0x07 +#define CHAR_DPAD_LEFT 0x08 +#define CHAR_DPAD_RIGHT 0x09 +#define CHAR_DPAD_UPDOWN 0x0A +#define CHAR_DPAD_LEFTRIGHT 0x0B +#define CHAR_DPAD_NONE 0x0C + +// CHAR_EXTRA_SYMBOL chars #define CHAR_UP_ARROW_2 0x00 #define CHAR_DOWN_ARROW_2 0x01 #define CHAR_LEFT_ARROW_2 0x02 @@ -191,18 +206,30 @@ #define CHAR_NO 0x08 #define CHAR_UNDERSCORE 0x09 -#define EXT_CTRL_CODE_COLOR 0x1 -#define EXT_CTRL_CODE_HIGHLIGHT 0x2 -#define EXT_CTRL_CODE_SHADOW 0x3 -// -#define EXT_CTRL_CODE_UNKNOWN_7 0x7 -// -#define EXT_CTRL_CODE_CLEAR 0x11 -// -#define EXT_CTRL_CODE_CLEAR_TO 0x13 -#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 -#define EXT_CTRL_CODE_JPN 0x15 -#define EXT_CTRL_CODE_ENG 0x16 +#define EXT_CTRL_CODE_COLOR 0x01 +#define EXT_CTRL_CODE_HIGHLIGHT 0x02 +#define EXT_CTRL_CODE_SHADOW 0x03 +#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x04 +#define EXT_CTRL_CODE_PALETTE 0x05 +#define EXT_CTRL_CODE_SIZE 0x06 +#define EXT_CTRL_CODE_RESET_SIZE 0x07 +#define EXT_CTRL_CODE_PAUSE 0x08 +#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x09 +#define EXT_CTRL_CODE_WAIT_SE 0x0A +#define EXT_CTRL_CODE_PLAY_BGM 0x0B +#define EXT_CTRL_CODE_ESCAPE 0x0C +#define EXT_CTRL_CODE_SHIFT_TEXT 0x0D +#define EXT_CTRL_CODE_SHIFT_DOWN 0x0E +#define EXT_CTRL_CODE_FILL_WINDOW 0x0F +#define EXT_CTRL_CODE_PLAY_SE 0x10 +#define EXT_CTRL_CODE_CLEAR 0x11 +#define EXT_CTRL_CODE_SKIP 0x12 +#define EXT_CTRL_CODE_CLEAR_TO 0x13 +#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 +#define EXT_CTRL_CODE_JPN 0x15 +#define EXT_CTRL_CODE_ENG 0x16 +#define EXT_CTRL_CODE_PAUSE_MUSIC 0x17 +#define EXT_CTRL_CODE_RESUME_MUSIC 0x18 #define TEXT_COLOR_TRANSPARENT 0x0 #define TEXT_COLOR_WHITE 0x1 diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index fd18c31879..1dd0914e47 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1468,8 +1468,7 @@ static void MoveSelectionDisplayPpNumber(void) SetPpNumbersPaletteInMoveSelection(); moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2); - txtPtr[0] = CHAR_SLASH; - txtPtr++; + *(txtPtr)++ = CHAR_SLASH; ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2); BattlePutTextOnWindow(gDisplayedStringBattle, 9); @@ -1481,12 +1480,9 @@ static void MoveSelectionDisplayMoveType(void) struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); - txtPtr[0] = EXT_CTRL_CODE_BEGIN; - txtPtr++; - txtPtr[0] = 6; - txtPtr++; - txtPtr[0] = 1; - txtPtr++; + *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; + *(txtPtr)++ = EXT_CTRL_CODE_SIZE; + *(txtPtr)++ = 1; StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]); BattlePutTextOnWindow(gDisplayedStringBattle, 10); diff --git a/src/battle_message.c b/src/battle_message.c index 2fba578dc0..14eba28ab3 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2756,7 +2756,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { dst[dstID] = EXT_CTRL_CODE_BEGIN; dstID++; - dst[dstID] = 9; + dst[dstID] = EXT_CTRL_CODE_PAUSE_UNTIL_PRESS; dstID++; } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6ccefd7be5..5c1b1e3707 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6340,15 +6340,13 @@ static void PutLevelAndGenderOnLvlUpBox(void) AddTextPrinter(&printerTemplate, 0xFF, NULL); txtPtr = gStringVar4; - gStringVar4[0] = CHAR_SPECIAL_F9; - txtPtr++; - txtPtr[0] = CHAR_LV_2; - txtPtr++; + *(txtPtr)++ = CHAR_EXTRA_SYMBOL; + *(txtPtr)++ = CHAR_LV_2; var = (u32)(txtPtr); txtPtr = ConvertIntToDecimalStringN(txtPtr, monLevel, STR_CONV_MODE_LEFT_ALIGN, 3); var = (u32)(txtPtr) - var; - txtPtr = StringFill(txtPtr, 0x77, 4 - var); + txtPtr = StringFill(txtPtr, CHAR_UNK_SPACER, 4 - var); if (monGender != MON_GENDERLESS) { diff --git a/src/data/union_room.h b/src/data/union_room.h index 7049787665..be7bfae71e 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -222,7 +222,7 @@ static const u8 *const sAwaitingResponseTexts[] = { ALIGNED(4) const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); ALIGNED(4) const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); ALIGNED(4) const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); -ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?"); +ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {DYNAMIC 0} {DYNAMIC 1}\pin exchange for a\nLv. {DYNAMIC 2} {DYNAMIC 3}.\pWill you accept this trade\noffer?"); ALIGNED(4) const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); ALIGNED(4) const u8 sText_ChatDropped[] = _("The chat has been dropped.\p"); ALIGNED(4) const u8 sText_OfferDeclined1[] = _("You declined the offer.\p"); @@ -567,17 +567,17 @@ static const u8 *const sCardColorTexts[] = { sText_ItsGoldCard }; -ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p"); -ALIGNED(4) const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p"); -ALIGNED(4) const u8 sText_GladToMeetYouMale[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}"); -ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}"); +ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("This is {DYNAMIC 0} {DYNAMIC 1}'s\nTRAINER CARD…\l{DYNAMIC 2}\pPOKéDEX: {DYNAMIC 3}\nTIME: {DYNAMIC 4}:{DYNAMIC 5}\p"); +ALIGNED(4) const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {DYNAMIC 0} LOSSES: {DYNAMIC 2}\nTRADES: {DYNAMIC 3}\p“{DYNAMIC 4} {DYNAMIC 5}\n{DYNAMIC 6} {DYNAMIC 7}”\p"); +ALIGNED(4) const u8 sText_GladToMeetYouMale[] = _("{DYNAMIC 1}: Glad to have met you!{PAUSE 60}"); +ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{DYNAMIC 1}: Glad to meet you!{PAUSE 60}"); const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = { sText_GladToMeetYouMale, sText_GladToMeetYouFemale }; -ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); +ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {DYNAMIC 1}'s\nTRAINER CARD.{PAUSE 60}"); static const u8 *const sLinkGroupActivityNameTexts[] = { [ACTIVITY_NONE] = sText_EmptyString, diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c index bdfcf66537..1ec0c1e06b 100644 --- a/src/dynamic_placeholder_text_util.c +++ b/src/dynamic_placeholder_text_util.c @@ -32,7 +32,7 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src) { while (*src != EOS) { - if (*src != CHAR_SPECIAL_F7) + if (*src != CHAR_DYNAMIC) { *dest++ = *src++; } diff --git a/src/international_string_util.c b/src/international_string_util.c index ec5057359f..23ca6c0816 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -136,7 +136,7 @@ void PadNameString(u8 *dest, u8 padChar) while (length < PLAYER_NAME_LENGTH - 1) { dest[length] = EXT_CTRL_CODE_BEGIN; - dest[length + 1] = EXT_CTRL_CODE_UNKNOWN_7; + dest[length + 1] = EXT_CTRL_CODE_RESET_SIZE; length += 2; } } diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index c53e1c59e8..db1ba8b43c 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -220,9 +220,9 @@ static const u8 sWireless_RSEtoASCIITable[256] = { [CHAR_y] = 'y', [CHAR_z] = 'z', 0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - [CHAR_SPECIAL_F7] = ' ', - [CHAR_SPECIAL_F8] = ' ', - [CHAR_SPECIAL_F9] = ' ', + [CHAR_DYNAMIC] = ' ', + [CHAR_KEYPAD_ICON] = ' ', + [CHAR_EXTRA_SYMBOL] = ' ', [CHAR_PROMPT_SCROLL] = ' ', [CHAR_PROMPT_CLEAR] = ' ', [EXT_CTRL_CODE_BEGIN] = ' ', diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index bbf0f8972d..af68c61169 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -220,7 +220,7 @@ static void PrepareSongText(void) if (lineNum == 0) { *(wordEnd++) = EXT_CTRL_CODE_BEGIN; - *(wordEnd++) = 15; + *(wordEnd++) = EXT_CTRL_CODE_FILL_WINDOW; } } } diff --git a/src/menu_specialized.c b/src/menu_specialized.c index b7dd1f33af..ecef9982ba 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -884,10 +884,10 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) u8 *str; *(dst++) = EXT_CTRL_CODE_BEGIN; - *(dst++) = 4; - *(dst++) = 8; - *(dst++) = 0; - *(dst++) = 9; + *(dst++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(dst++) = TEXT_COLOR_BLUE; + *(dst++) = TEXT_COLOR_TRANSPARENT; + *(dst++) = TEXT_COLOR_LIGHT_BLUE; if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) { return StringCopyPadded(dst, gText_EggNickname, 0, 12); @@ -920,8 +920,8 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) ; *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 0x12; - *(str++) = 0x3C; + *(str++) = EXT_CTRL_CODE_SKIP; + *(str++) = 60; switch (gender) { @@ -931,30 +931,30 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) case MON_MALE: *(str++) = EXT_CTRL_CODE_BEGIN; *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = 4; + *(str++) = TEXT_COLOR_RED; *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 3; - *(str++) = 5; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_RED; *(str++) = CHAR_MALE; break; case MON_FEMALE: *(str++) = EXT_CTRL_CODE_BEGIN; *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = 6; + *(str++) = TEXT_COLOR_GREEN; *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 3; - *(str++) = 7; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_GREEN; *(str++) = CHAR_FEMALE; break; } *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 4; - *(str++) = 8; - *(str++) = 0; - *(str++) = 9; + *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str++) = TEXT_COLOR_BLUE; + *(str++) = TEXT_COLOR_TRANSPARENT; + *(str++) = TEXT_COLOR_LIGHT_BLUE; *(str++) = CHAR_SLASH; - *(str++) = CHAR_SPECIAL_F9; + *(str++) = CHAR_EXTRA_SYMBOL; *(str++) = CHAR_LV_2; str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3); *(str++) = CHAR_SPACE; @@ -989,10 +989,10 @@ void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, { sub_81D2CD0(nameDst, boxId, monId); dst[0] = EXT_CTRL_CODE_BEGIN; - dst[1] = 4; - dst[2] = 8; - dst[3] = 0; - dst[4] = 9; + dst[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + dst[2] = TEXT_COLOR_BLUE; + dst[3] = TEXT_COLOR_TRANSPARENT; + dst[4] = TEXT_COLOR_LIGHT_BLUE; if (boxId == TOTAL_BOXES_COUNT) // Party mon. { sub_81D2E7C(dst + 5, gText_InParty, 8); diff --git a/src/pokeblock.c b/src/pokeblock.c index f654e07829..025adf875f 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -725,8 +725,8 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId) u8 *txtPtr = StringCopy(dst, gPokeblockNames[pkblock->color]); *(txtPtr++) = EXT_CTRL_CODE_BEGIN; - *(txtPtr++) = 0x12; - *(txtPtr++) = 0x57; + *(txtPtr++) = EXT_CTRL_CODE_SKIP; + *(txtPtr++) = 87; ConvertIntToDecimalStringN(gStringVar1, GetHighestPokeblocksFlavorLevel(pkblock), STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(txtPtr, gText_LvVar1); diff --git a/src/pokedex.c b/src/pokedex.c index 777cc52cd6..2a6a336334 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4145,7 +4145,7 @@ static void PrintMonHeight(u16 height, u8 left, u8 top) inches = (inches - (feet * 120)) / 10; buffer[i++] = EXT_CTRL_CODE_BEGIN; - buffer[i++] = 0x13; + buffer[i++] = EXT_CTRL_CODE_CLEAR_TO; if (feet / 10 == 0) { buffer[i++] = 18; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 59dc0acced..115c369afb 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6869,36 +6869,36 @@ static void SetCursorMonData(void *pokemon, u8 mode) txtPtr = sPSSData->cursorMonGenderLvlText; *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; - *(txtPtr)++ = 4; + *(txtPtr)++ = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; switch (gender) { case MON_MALE: - *(txtPtr)++ = 4; - *(txtPtr)++ = 1; - *(txtPtr)++ = 5; + *(txtPtr)++ = TEXT_COLOR_RED; + *(txtPtr)++ = TEXT_COLOR_WHITE; + *(txtPtr)++ = TEXT_COLOR_LIGHT_RED; *(txtPtr)++ = CHAR_MALE; break; case MON_FEMALE: - *(txtPtr)++ = 6; - *(txtPtr)++ = 1; - *(txtPtr)++ = 7; + *(txtPtr)++ = TEXT_COLOR_GREEN; + *(txtPtr)++ = TEXT_COLOR_WHITE; + *(txtPtr)++ = TEXT_COLOR_LIGHT_GREEN; *(txtPtr)++ = CHAR_FEMALE; break; default: - *(txtPtr)++ = 2; - *(txtPtr)++ = 1; - *(txtPtr)++ = 3; - *(txtPtr)++ = 0x77; + *(txtPtr)++ = TEXT_COLOR_DARK_GREY; + *(txtPtr)++ = TEXT_COLOR_WHITE; + *(txtPtr)++ = TEXT_COLOR_LIGHT_GREY; + *(txtPtr)++ = CHAR_UNK_SPACER; break; } *(txtPtr++) = EXT_CTRL_CODE_BEGIN; - *(txtPtr++) = 4; - *(txtPtr++) = 2; - *(txtPtr++) = 1; - *(txtPtr++) = 3; - *(txtPtr++) = 0; - *(txtPtr++) = CHAR_SPECIAL_F9; + *(txtPtr++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(txtPtr++) = TEXT_COLOR_DARK_GREY; + *(txtPtr++) = TEXT_COLOR_WHITE; + *(txtPtr++) = TEXT_COLOR_LIGHT_GREY; + *(txtPtr++) = CHAR_SPACE; + *(txtPtr++) = CHAR_EXTRA_SYMBOL; *(txtPtr++) = CHAR_LV_2; txtPtr = ConvertIntToDecimalStringN(txtPtr, sPSSData->cursorMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index a3efe09d72..2e79952220 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -709,9 +709,9 @@ static void (*const sTextPrinterTasks[])(u8 taskId) = static const u8 sMemoNatureTextColor[] = _("{COLOR LIGHT_RED}{SHADOW GREEN}"); static const u8 sMemoMiscTextColor[] = _("{COLOR WHITE}{SHADOW DARK_GREY}"); // This is also affected by palettes, apparently -static const u8 sStatsLeftColumnLayout[] = _("{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}\n{SPECIAL_F7 0x03}"); -static const u8 sStatsRightColumnLayout[] = _("{SPECIAL_F7 0x00}\n{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}"); -static const u8 sMovesPPLayout[] = _("{PP}{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}"); +static const u8 sStatsLeftColumnLayout[] = _("{DYNAMIC 0}/{DYNAMIC 1}\n{DYNAMIC 2}\n{DYNAMIC 3}"); +static const u8 sStatsRightColumnLayout[] = _("{DYNAMIC 0}\n{DYNAMIC 1}\n{DYNAMIC 2}"); +static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}"); #define TAG_MOVE_SELECTOR 30000 #define TAG_MON_STATUS 30001 diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c index 84e2a96825..7184271ea3 100644 --- a/src/pokenav_conditions_1.c +++ b/src/pokenav_conditions_1.c @@ -337,10 +337,10 @@ u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) boxId = unkPtr->unk4[id].boxId; monId = unkPtr->unk4[id].monId; *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 4; - *(str++) = 8; - *(str++) = 0; - *(str++) = 9; + *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str++) = TEXT_COLOR_BLUE; + *(str++) = TEXT_COLOR_TRANSPARENT; + *(str++) = TEXT_COLOR_LIGHT_BLUE; if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); @@ -368,40 +368,40 @@ u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) (str_++); *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = 0x12; - *(str_++) = 0x3C; + *(str_++) = EXT_CTRL_CODE_SKIP; + *(str_++) = 60; switch (gender) { default: - *(str_++) = 0x77; + *(str_++) = CHAR_UNK_SPACER; break; case MON_MALE: *(str_++) = EXT_CTRL_CODE_BEGIN; *(str_++) = EXT_CTRL_CODE_COLOR; - *(str_++) = 4; + *(str_++) = TEXT_COLOR_RED; *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = 3; - *(str_++) = 5; + *(str_++) = EXT_CTRL_CODE_SHADOW; + *(str_++) = TEXT_COLOR_LIGHT_RED; *(str_++) = CHAR_MALE; break; case MON_FEMALE: *(str_++) = EXT_CTRL_CODE_BEGIN; *(str_++) = EXT_CTRL_CODE_COLOR; - *(str_++) = 6; + *(str_++) = TEXT_COLOR_GREEN; *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = 3; - *(str_++) = 7; + *(str_++) = EXT_CTRL_CODE_SHADOW; + *(str_++) = TEXT_COLOR_LIGHT_GREEN; *(str_++) = CHAR_FEMALE; break; } *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = 4; - *(str_++) = 8; - *(str_++) = 0; - *(str_++) = 9; + *(str_++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str_++) = TEXT_COLOR_BLUE; + *(str_++) = TEXT_COLOR_TRANSPARENT; + *(str_++) = TEXT_COLOR_LIGHT_BLUE; *(str_++) = CHAR_SLASH; - *(str_++) = CHAR_SPECIAL_F9; + *(str_++) = CHAR_EXTRA_SYMBOL; *(str_++) = CHAR_LV_2; txtPtr = str_; str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); @@ -429,10 +429,10 @@ void sub_81CD824(s16 arg0, u8 arg1) sub_81CD624(structPtr->unk6368[arg1], arg0, FALSE); boxId = unkPtr->unk4[arg0].boxId; structPtr->unk6320[arg1][0] = EXT_CTRL_CODE_BEGIN; - structPtr->unk6320[arg1][1] = 4; - structPtr->unk6320[arg1][2] = 8; - structPtr->unk6320[arg1][3] = 0; - structPtr->unk6320[arg1][4] = 9; + structPtr->unk6320[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + structPtr->unk6320[arg1][2] = TEXT_COLOR_BLUE; + structPtr->unk6320[arg1][3] = TEXT_COLOR_TRANSPARENT; + structPtr->unk6320[arg1][4] = TEXT_COLOR_LIGHT_BLUE; if (boxId == TOTAL_BOXES_COUNT) sub_81CD5CC(&structPtr->unk6320[arg1][5], gText_InParty, 8); else diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c index 65a85aa7ec..32e673aa43 100644 --- a/src/pokenav_conditions_2.c +++ b/src/pokenav_conditions_2.c @@ -581,10 +581,10 @@ bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2) str = sub_81CDD24(a1); AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 17, 0, NULL); text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = 4; - text[2] = 8; - text[3] = 0; - text[4] = 9; + text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + text[2] = TEXT_COLOR_BLUE; + text[3] = TEXT_COLOR_TRANSPARENT; + text[4] = TEXT_COLOR_LIGHT_BLUE; StringCopy(text + 5, gText_Number2); AddTextPrinterParameterized(structPtr->unk1821, 1, text, 4, 1, 0, NULL); ConvertIntToDecimalStringN(text + 5, sub_81CDD48(), STR_CONV_MODE_RIGHT_ALIGN, 4); diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c index 7a48b92342..eea4aa397c 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_3.c @@ -707,7 +707,7 @@ static void sub_81CF8E4(struct PokenavMonList * item, u8 * dest) } s = StringCopy(gStringVar1, genderStr); *s++ = CHAR_SLASH; - *s++ = CHAR_SPECIAL_F9; + *s++ = CHAR_EXTRA_SYMBOL; *s++ = CHAR_LV_2; ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3); sub_81DB494(dest, 1, gStringVar1, 40); diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_1.c index ffc049c47d..aad0053a8d 100644 --- a/src/pokenav_ribbons_1.c +++ b/src/pokenav_ribbons_1.c @@ -724,7 +724,7 @@ static void BufferRibbonMonInfoText(struct PokenavMonList * item0, u8 * dest) s = StringCopy(gStringVar1, genderStr); *s++ = CHAR_SLASH; - *s++ = CHAR_SPECIAL_F9; + *s++ = CHAR_EXTRA_SYMBOL; *s++ = CHAR_LV_2; ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3); dest = sub_81DB494(dest, 1, gStringVar1, 54); diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_2.c index bb61164724..e5a89acad3 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_2.c @@ -836,7 +836,7 @@ void sub_81D0FF0(struct PokenavSub14 *structPtr) txtPtr = StringCopy(gStringVar1, genderTxt); *(txtPtr++) = CHAR_SLASH; - *(txtPtr++) = CHAR_SPECIAL_F9; + *(txtPtr++) = CHAR_EXTRA_SYMBOL; *(txtPtr++) = CHAR_LV_2; ConvertIntToDecimalStringN(txtPtr, level, STR_CONV_MODE_LEFT_ALIGN, 3); AddTextPrinterParameterized(windowId, 1, gStringVar1, 60, 1, TEXT_SPEED_FF, NULL); diff --git a/src/strings.c b/src/strings.c index 2ea06c1ad1..07361ba60f 100644 --- a/src/strings.c +++ b/src/strings.c @@ -512,14 +512,14 @@ const u8 gText_EggWillTakeSomeTime[] = _("What will hatch from this?\nIt will ta const u8 gText_EggWillHatchSoon[] = _("It moves occasionally.\nIt should hatch soon."); const u8 gText_EggAboutToHatch[] = _("It's making sounds.\nIt's about to hatch!"); const u8 gText_HMMovesCantBeForgotten2[] = _("HM moves can't be\nforgotten now."); -const u8 gText_XNatureMetAtYZ[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nmet at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01},\n{SPECIAL_F7 0x00}{SPECIAL_F7 0x04}{SPECIAL_F7 0x01}."); -const u8 gText_XNatureHatchedAtYZ[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nhatched at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01},\n{SPECIAL_F7 0x00}{SPECIAL_F7 0x04}{SPECIAL_F7 0x01}."); -const u8 gText_XNatureObtainedInTrade[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nobtained in a trade."); -const u8 gText_XNatureFatefulEncounter[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nobtained in a fateful\nencounter at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01}."); -const u8 gText_XNatureProbablyMetAt[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nprobably met at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01},\n{SPECIAL_F7 0x00}{SPECIAL_F7 0x04}{SPECIAL_F7 0x01}."); -const u8 gText_XNature[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature"); -const u8 gText_XNatureMetSomewhereAt[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nmet somewhere at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01}."); -const u8 gText_XNatureHatchedSomewhereAt[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nhatched somewhere at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01}."); +const u8 gText_XNatureMetAtYZ[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nmet at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1},\n{DYNAMIC 0}{DYNAMIC 4}{DYNAMIC 1}."); +const u8 gText_XNatureHatchedAtYZ[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nhatched at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1},\n{DYNAMIC 0}{DYNAMIC 4}{DYNAMIC 1}."); +const u8 gText_XNatureObtainedInTrade[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nobtained in a trade."); +const u8 gText_XNatureFatefulEncounter[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nobtained in a fateful\nencounter at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1}."); +const u8 gText_XNatureProbablyMetAt[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nprobably met at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1},\n{DYNAMIC 0}{DYNAMIC 4}{DYNAMIC 1}."); +const u8 gText_XNature[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature"); +const u8 gText_XNatureMetSomewhereAt[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nmet somewhere at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1}."); +const u8 gText_XNatureHatchedSomewhereAt[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nhatched somewhere at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1}."); const u8 gText_OddEggFoundByCouple[] = _("An odd POKéMON EGG found\nby the DAY CARE couple."); const u8 gText_PeculiarEggNicePlace[] = _("A peculiar POKéMON EGG\nobtained at the nice place."); const u8 gText_PeculiarEggTrade[] = _("A peculiar POKéMON EGG\nobtained in a trade."); @@ -861,14 +861,14 @@ const u8 gText_ExitFromBox[] = _("Exit from the BOX?"); const u8 gText_WhatDoYouWantToDo[] = _("What do you want to do?"); const u8 gText_PleasePickATheme[] = _("Please pick a theme."); const u8 gText_PickTheWallpaper[] = _("Pick the wallpaper."); -const u8 gText_PkmnIsSelected[] = _("{SPECIAL_F7 0x00} is selected."); +const u8 gText_PkmnIsSelected[] = _("{DYNAMIC 0} is selected."); const u8 gText_JumpToWhichBox[] = _("Jump to which BOX?"); const u8 gText_DepositInWhichBox[] = _("Deposit in which BOX?"); -const u8 gText_PkmnWasDeposited[] = _("{SPECIAL_F7 0x00} was deposited."); +const u8 gText_PkmnWasDeposited[] = _("{DYNAMIC 0} was deposited."); const u8 gText_BoxIsFull2[] = _("The BOX is full."); const u8 gText_ReleaseThisPokemon[] = _("Release this POKéMON?"); -const u8 gText_PkmnWasReleased[] = _("{SPECIAL_F7 0x00} was released."); -const u8 gText_ByeByePkmn[] = _("Bye-bye, {SPECIAL_F7 0x00}!"); +const u8 gText_PkmnWasReleased[] = _("{DYNAMIC 0} was released."); +const u8 gText_ByeByePkmn[] = _("Bye-bye, {DYNAMIC 0}!"); const u8 gText_MarkYourPkmn[] = _("Mark your POKéMON."); const u8 gText_ThatsYourLastPkmn[] = _("That's your last POKéMON!"); const u8 gText_YourPartysFull[] = _("Your party's full!"); @@ -876,7 +876,7 @@ const u8 gText_YoureHoldingAPkmn[] = _("You're holding a POKéMON!"); const u8 gText_WhichOneWillYouTake[] = _("Which one will you take?"); const u8 gText_YouCantReleaseAnEgg[] = _("You can't release an EGG."); const u8 gText_ContinueBoxOperations[] = _("Continue BOX operations?"); -const u8 gText_PkmnCameBack[] = _("{SPECIAL_F7 0x00} came back!"); +const u8 gText_PkmnCameBack[] = _("{DYNAMIC 0} came back!"); const u8 gText_WasItWorriedAboutYou[] = _("Was it worried about you?"); const u8 gText_FourEllipsesExclamation[] = _("… … … … !"); const u8 gText_PleaseRemoveTheMail[] = _("Please remove the MAIL."); @@ -884,8 +884,8 @@ const u8 gText_GiveToAPkmn[] = _("GIVE to a POKéMON?"); const u8 gText_PlacedItemInBag[] = _("Placed item in the BAG."); const u8 gText_BagIsFull2[] = _("The BAG is full."); const u8 gText_PutItemInBag[] = _("Put this item in the BAG?"); -const u8 gText_ItemIsNowHeld[] = _("{SPECIAL_F7 0x00} is now held."); -const u8 gText_ChangedToNewItem[] = _("Changed to {SPECIAL_F7 0x00}."); +const u8 gText_ItemIsNowHeld[] = _("{DYNAMIC 0} is now held."); +const u8 gText_ChangedToNewItem[] = _("Changed to {DYNAMIC 0}."); const u8 gText_MailCantBeStored[] = _("MAIL can't be stored!"); const u8 gPCText_Cancel[] = _("CANCEL"); const u8 gPCText_Store[] = _("STORE"); @@ -981,18 +981,18 @@ const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAI const u8 gText_InParty[] = _("IN PARTY"); const u8 gText_Number2[] = _("No. "); const u8 gText_Ribbons[] = _("RIBBONS"); // Unused -const u8 gText_PokemonMaleLv[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}"); // Unused -const u8 gText_PokemonFemaleLv[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}"); // Unused -const u8 gText_PokemonNoGenderLv[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}"); // Unused +const u8 gText_PokemonMaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}"); // Unused +const u8 gText_PokemonFemaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}"); // Unused +const u8 gText_PokemonNoGenderLv[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}"); // Unused const u8 gText_Unknown[] = _("UNKNOWN"); const u8 gText_Call[] = _("CALL"); const u8 gText_Check[] = _("CHECK"); const u8 gText_Cancel6[] = _("CANCEL"); -const u8 gText_NumberF700[] = _("No. {SPECIAL_F7 0x00}"); -const u8 gText_RibbonsF700[] = _("RIBBONS {SPECIAL_F7 0x00}"); -const u8 gText_PokemonMaleLv2[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused -const u8 gText_PokemonFemaleLv2[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused -const u8 gText_PokemonNoGenderLv2[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused +const u8 gText_NumberF700[] = _("No. {DYNAMIC 0}"); +const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}"); +const u8 gText_PokemonMaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused +const u8 gText_PokemonFemaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused +const u8 gText_PokemonNoGenderLv2[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused const u8 gText_CombineFourWordsOrPhrases[] = _("Combine four words or phrases"); const u8 gText_AndMakeYourProfile[] = _("and make your profile."); const u8 gText_CombineSixWordsOrPhrases[] = _("Combine six words or phrases"); @@ -1063,7 +1063,7 @@ const u8 gText_ApprenticesPhrase[] = _("Apprentice's phrase"); const u8 gText_Questionnaire[] = _("QUESTIONNAIRE"); const u8 gText_YouCannotQuitHere[] = _("You cannot quit here."); const u8 gText_SectionMustBeCompleted[] = _("This section must be completed."); -const u8 gText_F700sQuiz[] = _("{SPECIAL_F7 0x00}'s quiz"); +const u8 gText_F700sQuiz[] = _("{DYNAMIC 0}'s quiz"); const u8 gText_Lady[] = _("Lady"); const u8 gText_AfterYouHaveReadTheQuiz[] = _("After you have read the quiz"); const u8 gText_QuestionPressTheAButton[] = _("question, press the A Button."); @@ -1255,16 +1255,16 @@ const u8 gText_QuitChatting[] = _("Quit chatting?"); const u8 gText_RegisterTextWhere[] = _("Register text where?"); const u8 gText_RegisterTextHere[] = _("Register text here?"); const u8 gText_InputText[] = _("Input text."); -const u8 gText_F700JoinedChat[] = _("{SPECIAL_F7 0x00} joined the chat!"); -const u8 gText_F700LeftChat[] = _("{SPECIAL_F7 0x00} left the chat."); -const u8 gJPText_PlayersXPokemon[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめ:"); // Unused -const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused +const u8 gText_F700JoinedChat[] = _("{DYNAMIC 0} joined the chat!"); +const u8 gText_F700LeftChat[] = _("{DYNAMIC 0} left the chat."); +const u8 gJPText_PlayersXPokemon[] = _("{DYNAMIC 0}の{DYNAMIC 1}ひきめ:"); // Unused +const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{DYNAMIC 0}の{DYNAMIC 1}ひきめは いません"); // Unused const u8 gText_ExitingChat[] = _("Exiting the chat…"); -const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat."); +const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {DYNAMIC 0}, has\nleft, ending the chat."); const u8 gText_RegisteredTextChangedOKToSave[] = _("The registered text has been changed.\nIs it okay to save the game?"); const u8 gText_AlreadySavedFile_Chat[] = _("There is already a saved file.\nIs it okay to overwrite it?"); const u8 gText_SavingDontTurnOff_Chat[] = _("SAVING…\nDON'T TURN OFF THE POWER."); -const u8 gText_PlayerSavedGame_Chat[] = _("{SPECIAL_F7 0x00} saved the game."); +const u8 gText_PlayerSavedGame_Chat[] = _("{DYNAMIC 0} saved the game."); const u8 gText_IfLeaderLeavesChatEnds[] = _("If the LEADER leaves, the chat\nwill end. Is that okay?"); const u8 gText_Hello[] = _("HELLO"); const u8 gText_Pokemon2[] = _("POKéMON"); @@ -1301,8 +1301,8 @@ ALIGNED(4) const u8 gText_YouHaveNoBerries[] = _("You have no BERRIES.\nThe game ALIGNED(4) const u8 gText_MemberDroppedOut[] = _("A member dropped out.\nThe game will be canceled."); ALIGNED(4) const u8 gText_TimesUpNoGoodPowder[] = _("Time's up.\pGood BERRY POWDER could not be\nmade…\p"); ALIGNED(4) const u8 gText_CommunicationStandby2[] = _("Communication standby…"); -ALIGNED(4) const u8 gText_1DotBlueF700[] = _("1. {COLOR BLUE}{SHADOW LIGHT_BLUE}{SPECIAL_F7 0x00}"); -ALIGNED(4) const u8 gText_1DotF700[] = _("1. {SPECIAL_F7 0x00}"); +ALIGNED(4) const u8 gText_1DotBlueF700[] = _("1. {COLOR BLUE}{SHADOW LIGHT_BLUE}{DYNAMIC 0}"); +ALIGNED(4) const u8 gText_1DotF700[] = _("1. {DYNAMIC 0}"); ALIGNED(4) const u8 gText_SpaceTimes2[] = _(" time(s)"); ALIGNED(4) const u8 gText_XDotY[] = _("{STR_VAR_1}.{STR_VAR_2}"); ALIGNED(4) const u8 gText_Var1Berry[] = _("{STR_VAR_1} BERRY"); @@ -1375,7 +1375,7 @@ const u8 gText_2Colon[] = _("2:"); const u8 gText_3Colon[] = _("3:"); const u8 gText_4Colon[] = _("4:"); const u8 gText_5Colon[] = _("5:"); -const u8 gText_FirstPlacePrize[] = _("The first-place winner gets\nthis {SPECIAL_F7 0x00}!"); +const u8 gText_FirstPlacePrize[] = _("The first-place winner gets\nthis {DYNAMIC 0}!"); const u8 gText_CantHoldAnyMore[] = _("You can't hold any more!"); const u8 gText_FilledStorageSpace[] = _("It filled its storage space."); const u8 gText_WantToPlayAgain[] = _("Want to play again?"); @@ -1388,7 +1388,7 @@ const u8 gText_PkmnJumpRecords[] = _("POKéMON JUMP RECORDS"); const u8 gText_JumpsInARow[] = _("Jumps in a row:"); const u8 gText_BestScore2[] = _("Best score:"); const u8 gText_ExcellentsInARow[] = _("EXCELLENTS in a row:"); -const u8 gText_AwesomeWonF701F700[] = _("Awesome score! You've\nwon {SPECIAL_F7 0x01} {SPECIAL_F7 0x00}!"); +const u8 gText_AwesomeWonF701F700[] = _("Awesome score! You've\nwon {DYNAMIC 1} {DYNAMIC 0}!"); const u8 gText_FilledStorageSpace2[] = _("It filled its storage space."); const u8 gText_CantHoldMore[] = _("You can't hold any more!"); const u8 gText_WantToPlayAgain2[] = _("Want to play again?"); @@ -1645,10 +1645,10 @@ const u8 gText_PeopleTrading[] = _("People trading:"); const u8 gText_PeopleBattling[] = _("People battling:"); const u8 gText_PeopleInUnionRoom[] = _("People in the UNION ROOM:"); const u8 gText_PeopleCommunicating[] = _("People communicating:"); -const u8 gText_F700Players[] = _("{SPECIAL_F7 0} players"); -const u8 gText_F701Players[] = _("{SPECIAL_F7 1} players"); -const u8 gText_F702Players[] = _("{SPECIAL_F7 2} players"); -const u8 gText_F703Players[] = _("{SPECIAL_F7 3} players"); +const u8 gText_F700Players[] = _("{DYNAMIC 0} players"); +const u8 gText_F701Players[] = _("{DYNAMIC 1} players"); +const u8 gText_F702Players[] = _("{DYNAMIC 2} players"); +const u8 gText_F703Players[] = _("{DYNAMIC 3} players"); const u8 *const gTextTable_Players[] = { gText_F700Players, diff --git a/src/union_room_chat.c b/src/union_room_chat.c index fefb285a85..c656063a2a 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1646,7 +1646,7 @@ static void AppendTextToMessage(void) charsStr = sUnionRoomKeyboardText[sChat->currentPage][sChat->currentRow]; for (i = 0; i < sChat->currentCol; i++) { - if (*charsStr == CHAR_SPECIAL_F9) + if (*charsStr == CHAR_EXTRA_SYMBOL) charsStr++; charsStr++; } @@ -1670,7 +1670,7 @@ static void AppendTextToMessage(void) str = GetEndOfMessagePtr(); while (--strLength != -1 && sChat->bufferCursorPos < MAX_MESSAGE_LENGTH) { - if (*charsStr == CHAR_SPECIAL_F9) + if (*charsStr == CHAR_EXTRA_SYMBOL) { *str = *charsStr; charsStr++; @@ -1705,7 +1705,7 @@ static void SwitchCaseOfLastMessageCharacter(void) sChat->lastBufferCursorPos = sChat->bufferCursorPos - 1; str = GetLastCharOfMessagePtr(); - if (*str != CHAR_SPECIAL_F9) + if (*str != CHAR_EXTRA_SYMBOL) { character = sCaseToggleTable[*str]; if (character) @@ -1763,7 +1763,7 @@ static u8 *GetLastCharOfMessagePtr(void) while (*currChar != EOS) { lastChar = currChar; - if (*currChar == CHAR_SPECIAL_F9) + if (*currChar == CHAR_EXTRA_SYMBOL) currChar++; currChar++; } @@ -1784,7 +1784,7 @@ static u16 GetNumOverflowCharsInMessage(void) strLength -= 10; for (i = 0; i < strLength; i++) { - if (*str == CHAR_SPECIAL_F9) + if (*str == CHAR_EXTRA_SYMBOL) str++; str++; @@ -1925,7 +1925,7 @@ static u8 *GetLimitedMessageStartPtr(void) u8 *str = sChat->messageEntryBuffer; for (i = 0; i < numChars; i++) { - if (*str == CHAR_SPECIAL_F9) + if (*str == CHAR_EXTRA_SYMBOL) *str++; str++; @@ -1942,7 +1942,7 @@ static u16 GetLimitedMessageStartPos(void) u8 *str = sChat->messageEntryBuffer; for (count = 0, i = 0; i < numChars; count++, i++) { - if (*str == CHAR_SPECIAL_F9) + if (*str == CHAR_EXTRA_SYMBOL) str++; str++; diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c index a0b1281a45..2ff8c65070 100644 --- a/src/unk_text_util_2.c +++ b/src/unk_text_util_2.c @@ -57,19 +57,19 @@ u16 Font6Func(struct TextPrinter *textPrinter) char_ = *textPrinter->printerTemplate.currentChar++; switch (char_) { - case 1: + case EXT_CTRL_CODE_COLOR: textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 2: + case EXT_CTRL_CODE_HIGHLIGHT: textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 3: + case EXT_CTRL_CODE_SHADOW: textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 4: + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar; @@ -77,43 +77,43 @@ u16 Font6Func(struct TextPrinter *textPrinter) GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); return 2; - case 5: + case EXT_CTRL_CODE_PALETTE: textPrinter->printerTemplate.currentChar++; return 2; - case 6: + case EXT_CTRL_CODE_SIZE: subStruct->glyphId = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return 2; - case 7: + case EXT_CTRL_CODE_RESET_SIZE: return 2; - case 8: + case EXT_CTRL_CODE_PAUSE: textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++; textPrinter->state = 6; return 2; - case 9: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: textPrinter->state = 1; if (gTextFlags.autoScroll) { subStruct->autoScrollDelay = 0; } return 3; - case 10: + case EXT_CTRL_CODE_WAIT_SE: textPrinter->state = 5; return 3; - case 11: - case 16: + case EXT_CTRL_CODE_PLAY_BGM: + case EXT_CTRL_CODE_PLAY_SE: textPrinter->printerTemplate.currentChar += 2; return 2; - case 12: + case EXT_CTRL_CODE_ESCAPE: char_ = *++textPrinter->printerTemplate.currentChar; break; - case 13: + case EXT_CTRL_CODE_SHIFT_TEXT: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++; return 2; - case 14: + case EXT_CTRL_CODE_SHIFT_DOWN: textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++; return 2; - case 15: + case EXT_CTRL_CODE_FILL_WINDOW: FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); return 2; } @@ -126,10 +126,10 @@ u16 Font6Func(struct TextPrinter *textPrinter) textPrinter->state = 3; TextPrinterInitDownArrowCounters(textPrinter); return 3; - case 0xF9: + case CHAR_EXTRA_SYMBOL: char_ = *textPrinter->printerTemplate.currentChar++| 0x100; break; - case 0xF8: + case CHAR_KEYPAD_ICON: textPrinter->printerTemplate.currentChar++; return 0; } From 4f615b65e686c0958517fdd7c87cb0b6b29c1653 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 10 Aug 2020 17:05:42 -0400 Subject: [PATCH 53/85] Continue documenting use_pokeblock --- gflib/text.h | 36 +- graphics/pokenav/{ => condition}/cancel.pal | 0 graphics/pokenav/{ => condition}/cancel.png | Bin .../{condition.bin => condition/graph.bin} | Bin .../{condition.png => condition/graph.png} | Bin graphics/pokenav/{ => condition}/marker.png | Bin .../{8623208.pal => condition/text.pal} | 0 include/menu_specialized.h | 18 +- src/graphics.c | 14 +- src/menu_specialized.c | 139 ++-- src/pokenav_conditions_2.c | 8 +- src/use_pokeblock.c | 670 +++++++++--------- 12 files changed, 466 insertions(+), 419 deletions(-) rename graphics/pokenav/{ => condition}/cancel.pal (100%) rename graphics/pokenav/{ => condition}/cancel.png (100%) rename graphics/pokenav/{condition.bin => condition/graph.bin} (100%) rename graphics/pokenav/{condition.png => condition/graph.png} (100%) rename graphics/pokenav/{ => condition}/marker.png (100%) rename graphics/pokenav/{8623208.pal => condition/text.pal} (100%) diff --git a/gflib/text.h b/gflib/text.h index 5b317600ea..e5bb2c87a7 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -191,18 +191,30 @@ #define CHAR_NO 0x08 #define CHAR_UNDERSCORE 0x09 -#define EXT_CTRL_CODE_COLOR 0x1 -#define EXT_CTRL_CODE_HIGHLIGHT 0x2 -#define EXT_CTRL_CODE_SHADOW 0x3 -// -#define EXT_CTRL_CODE_UNKNOWN_7 0x7 -// -#define EXT_CTRL_CODE_CLEAR 0x11 -// -#define EXT_CTRL_CODE_CLEAR_TO 0x13 -#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 -#define EXT_CTRL_CODE_JPN 0x15 -#define EXT_CTRL_CODE_ENG 0x16 +#define EXT_CTRL_CODE_COLOR 0x1 +#define EXT_CTRL_CODE_HIGHLIGHT 0x2 +#define EXT_CTRL_CODE_SHADOW 0x3 +#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x4 +#define EXT_CTRL_CODE_PALETTE 0x5 +#define EXT_CTRL_CODE_SIZE 0x6 +#define EXT_CTRL_CODE_UNKNOWN_7 0x7 +#define EXT_CTRL_CODE_PAUSE 0x8 +#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x9 +#define EXT_CTRL_CODE_WAIT_SE 0xA +#define EXT_CTRL_CODE_PLAY_BGM 0xB +#define EXT_CTRL_CODE_ESCAPE 0xC +#define EXT_CTRL_CODE_SHIFT_TEXT 0xD +#define EXT_CTRL_CODE_UNKNOWN_E 0xE +#define EXT_CTRL_CODE_UNKNOWN_F 0xF +#define EXT_CTRL_CODE_PLAY_SE 0x10 +#define EXT_CTRL_CODE_CLEAR 0x11 +#define EXT_CTRL_CODE_SKIP 0x12 +#define EXT_CTRL_CODE_CLEAR_TO 0x13 +#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 +#define EXT_CTRL_CODE_JPN 0x15 +#define EXT_CTRL_CODE_ENG 0x16 +#define EXT_CTRL_CODE_PAUSE_MUSIC 0x17 +#define EXT_CTRL_CODE_RESUME_MUSIC 0x18 #define TEXT_COLOR_TRANSPARENT 0x0 #define TEXT_COLOR_WHITE 0x1 diff --git a/graphics/pokenav/cancel.pal b/graphics/pokenav/condition/cancel.pal similarity index 100% rename from graphics/pokenav/cancel.pal rename to graphics/pokenav/condition/cancel.pal diff --git a/graphics/pokenav/cancel.png b/graphics/pokenav/condition/cancel.png similarity index 100% rename from graphics/pokenav/cancel.png rename to graphics/pokenav/condition/cancel.png diff --git a/graphics/pokenav/condition.bin b/graphics/pokenav/condition/graph.bin similarity index 100% rename from graphics/pokenav/condition.bin rename to graphics/pokenav/condition/graph.bin diff --git a/graphics/pokenav/condition.png b/graphics/pokenav/condition/graph.png similarity index 100% rename from graphics/pokenav/condition.png rename to graphics/pokenav/condition/graph.png diff --git a/graphics/pokenav/marker.png b/graphics/pokenav/condition/marker.png similarity index 100% rename from graphics/pokenav/marker.png rename to graphics/pokenav/condition/marker.png diff --git a/graphics/pokenav/8623208.pal b/graphics/pokenav/condition/text.pal similarity index 100% rename from graphics/pokenav/8623208.pal rename to graphics/pokenav/condition/text.pal diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 8b78c17346..334635f177 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -6,6 +6,14 @@ #include "list_menu.h" #include "pokemon.h" +#define TAG_SPMENU_CONDITION_MON 100 +#define TAG_SPMENU_CONDITION_BALL 101 +#define TAG_SPMENU_CONDITION_CANCEL 102 +#define TAG_SPMENU_CONDITION_BALL_PLACEHOLDER 103 +#define TAG_SPMENU_CONDITION_SPARKLE 104 + +#define MAX_CONDITION_SPARKLES 10 + struct UnknownSubStruct_81D1ED4 { u16 unk0; @@ -47,18 +55,18 @@ void MoveRelearnerCreateYesNoMenu(void); u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); void InitMoveRelearnerWindows(bool8 useContextWindow); s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst); -void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7); -void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8); -void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7); +void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); +void GetConditionMenuMonConditions(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel); +void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); bool8 sub_81D312C(s16 *var); bool8 sub_81D3150(s16 *var); bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); -void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); +void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal); void ResetConditionSparkleSprites(struct Sprite **sprites); -void CreateConditionSparkleSprites(struct Sprite **sprites, u8 arg1, u8 arg2); +void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 count); void DestroyConditionSparkleSprites(struct Sprite **sprites); void FreeConditionSparkles(struct Sprite **sprites); void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); diff --git a/src/graphics.c b/src/graphics.c index 242d327eb0..c3f75b323d 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1312,9 +1312,9 @@ const u16 gContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_scree // pokenav -const u16 gPokenavCondition_Pal[] = INCBIN_U16("graphics/pokenav/condition.gbapal"); -const u32 gPokenavCondition_Gfx[] = INCBIN_U32("graphics/pokenav/condition.4bpp.lz"); -const u32 gPokenavCondition_Tilemap[] = INCBIN_U32("graphics/pokenav/condition.bin.lz"); +const u16 gPokenavCondition_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph.gbapal"); +const u32 gPokenavCondition_Gfx[] = INCBIN_U32("graphics/pokenav/condition/graph.4bpp.lz"); +const u32 gPokenavCondition_Tilemap[] = INCBIN_U32("graphics/pokenav/condition/graph.bin.lz"); const u16 gPokenavOptions_Tilemap[] = INCBIN_U16("graphics/pokenav/options/options.bin"); const u32 gPokenavOptions_Gfx[] = INCBIN_U32("graphics/pokenav/options/options.4bpp.lz"); @@ -1345,11 +1345,11 @@ const u32 gPokenavMessageBox_Tilemap[] = INCBIN_U32("graphics/pokenav/message.bi const u16 gRegionMapCityZoomTiles_Pal[] = INCBIN_U16("graphics/pokenav/zoom_tiles.gbapal"); const u32 gRegionMapCityZoomText_Gfx[] = INCBIN_U32("graphics/pokenav/city_zoom_text.4bpp.lz"); -const u16 gPokenavConditionCancel_Pal[] = INCBIN_U16("graphics/pokenav/cancel.gbapal"); -const u8 gPokenavConditionCancel_Gfx[] = INCBIN_U8("graphics/pokenav/cancel.4bpp"); +const u16 gPokenavConditionCancel_Pal[] = INCBIN_U16("graphics/pokenav/condition/cancel.gbapal"); +const u8 gPokenavConditionCancel_Gfx[] = INCBIN_U8("graphics/pokenav/condition/cancel.4bpp"); -const u16 gPokenavConditionMarker_Pal[] = INCBIN_U16("graphics/pokenav/marker.gbapal"); -const u8 gPokenavConditionMarker_Gfx[] = INCBIN_U8("graphics/pokenav/marker.4bpp"); +const u16 gPokenavConditionMarker_Pal[] = INCBIN_U16("graphics/pokenav/condition/marker.gbapal"); +const u8 gPokenavConditionMarker_Gfx[] = INCBIN_U8("graphics/pokenav/condition/marker.4bpp"); const u16 gBerryBlenderMiscPalette[] = INCBIN_U16("graphics/berry_blender/misc.gbapal"); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index b623bada3c..05ff97edb1 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -23,12 +23,11 @@ #include "text_window.h" #include "trig.h" #include "window.h" +#include "constants/berry.h" #include "constants/songs.h" #include "constants/species.h" #include "gba/io_reg.h" -#define TAG_CONDITION_SPARKLE 104 - extern const struct CompressedSpriteSheet gMonFrontPicTable[]; EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0}; @@ -879,17 +878,18 @@ s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst) return ret; } -static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) +// Gets the name/gender/level string for the condition menu +static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) { u16 species, level, gender; struct BoxPokemon *boxMon; u8 *str; *(dst++) = EXT_CTRL_CODE_BEGIN; - *(dst++) = 4; - *(dst++) = 8; - *(dst++) = 0; - *(dst++) = 9; + *(dst++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(dst++) = TEXT_COLOR_BLUE; + *(dst++) = TEXT_COLOR_TRANSPARENT; + *(dst++) = TEXT_COLOR_LIGHT_BLUE; if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) { return StringCopyPadded(dst, gText_EggNickname, 0, 12); @@ -922,8 +922,8 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) ; *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 0x12; - *(str++) = 0x3C; + *(str++) = EXT_CTRL_CODE_SKIP; + *(str++) = 60; switch (gender) { @@ -933,28 +933,28 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) case MON_MALE: *(str++) = EXT_CTRL_CODE_BEGIN; *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = 4; + *(str++) = TEXT_COLOR_RED; *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 3; - *(str++) = 5; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_RED; *(str++) = CHAR_MALE; break; case MON_FEMALE: *(str++) = EXT_CTRL_CODE_BEGIN; *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = 6; + *(str++) = TEXT_COLOR_GREEN; *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 3; - *(str++) = 7; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_GREEN; *(str++) = CHAR_FEMALE; break; } *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = 4; - *(str++) = 8; - *(str++) = 0; - *(str++) = 9; + *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str++) = TEXT_COLOR_BLUE; + *(str++) = TEXT_COLOR_TRANSPARENT; + *(str++) = TEXT_COLOR_LIGHT_BLUE; *(str++) = CHAR_SLASH; *(str++) = CHAR_SPECIAL_F9; *(str++) = CHAR_LV_2; @@ -966,7 +966,8 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) } } -static u8 *sub_81D2E7C(u8 *dst, const u8 *src, s16 n) +// Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces +static u8 *BufferConditionMenuSpacedStringN(u8 *dst, const u8 *src, s16 n) { while (*src != EOS) { @@ -980,50 +981,53 @@ static u8 *sub_81D2E7C(u8 *dst, const u8 *src, s16 n) return dst; } -void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7) +void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel) { u16 i; - if (!arg7) - arg6--; + // In this and the below 2 functions, numMons can be passed as the number of menu selections (which includes Cancel) + // To indicate that the Cancel needs to be subtracted they pass an additional bool + // Unclear why they didn't just subtract 1 when it gets passed instead + if (!excludesCancel) + numMons--; - if (arg5 != arg6) + if (partyId != numMons) { - sub_81D2CD0(nameDst, boxId, monId); - dst[0] = EXT_CTRL_CODE_BEGIN; - dst[1] = 4; - dst[2] = 8; - dst[3] = 0; - dst[4] = 9; + GetConditionMenuMonString(nameDst, boxId, monId); + locationDst[0] = EXT_CTRL_CODE_BEGIN; + locationDst[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + locationDst[2] = TEXT_COLOR_BLUE; + locationDst[3] = TEXT_COLOR_TRANSPARENT; + locationDst[4] = TEXT_COLOR_LIGHT_BLUE; if (boxId == TOTAL_BOXES_COUNT) // Party mon. { - sub_81D2E7C(dst + 5, gText_InParty, 8); + BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8); } else { boxId++;boxId--; // Again...Someone fix this maybe? - sub_81D2E7C(dst + 5, GetBoxNamePtr(boxId), 8); + BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(boxId), 8); } } else { - for (i = 0; i < 12; i++) + for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++) nameDst[i] = CHAR_SPACE; nameDst[i] = EOS; for (i = 0; i < 8; i++) - dst[i] = CHAR_SPACE; - dst[i] = EOS; + locationDst[i] = CHAR_SPACE; + locationDst[i] = EOS; } } -void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8) +void GetConditionMenuMonConditions(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel) { u16 i; - if (!arg8) - arg7--; + if (!excludesCancel) + numMons--; - if (arg5 != arg7) + if (partyId != numMons) { arg0->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); arg0->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); @@ -1039,7 +1043,7 @@ void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 m } else { - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { arg0->unk0[id][i] = 0; arg0->unk14[id][i].unk0 = 155; @@ -1048,12 +1052,12 @@ void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 m } } -void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7) +void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel) { - if (!arg7) - arg6--; + if (!excludesCancel) + numMons--; - if (arg5 != arg6) + if (partyId != numMons) { u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); u32 trainerId = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); @@ -1155,14 +1159,15 @@ static const union AnimCmd *const sSpriteAnimTable_8625A40[] = sSpriteAnim_8625A38 }; -void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal) +// Just loads the generic data, up to the caller to load the actual sheet/pal for the specific mon +void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal) { - struct SpriteSheet dataSheet = {NULL, 0x800, 100}; + struct SpriteSheet dataSheet = {NULL, 0x800, TAG_SPMENU_CONDITION_MON}; struct SpriteTemplate dataTemplate = { - .tileTag = 100, - .paletteTag = 100, + .tileTag = TAG_SPMENU_CONDITION_MON, + .paletteTag = TAG_SPMENU_CONDITION_MON, .oam = &sOamData_8625A20, .anims = gDummySpriteAnimTable, .images = NULL, @@ -1170,7 +1175,7 @@ void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, str .callback = SpriteCallbackDummy, }; - struct SpritePalette dataPal = {NULL, 100}; + struct SpritePalette dataPal = {NULL, TAG_SPMENU_CONDITION_MON}; *sheet = dataSheet; *template = dataTemplate; @@ -1183,23 +1188,23 @@ void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTempla struct SpriteSheet dataSheets[] = { - {sConditionPokeball_Gfx, 0x100, 101}, - {sConditionPokeballPlaceholder_Gfx, 0x20, 103}, - {gPokenavConditionCancel_Gfx, 0x100, 102}, + {sConditionPokeball_Gfx, 0x100, TAG_SPMENU_CONDITION_BALL}, + {sConditionPokeballPlaceholder_Gfx, 0x20, TAG_SPMENU_CONDITION_BALL_PLACEHOLDER}, + {gPokenavConditionCancel_Gfx, 0x100, TAG_SPMENU_CONDITION_CANCEL}, {}, }; struct SpritePalette dataPals[] = { - {gPokenavConditionCancel_Pal, 101}, - {gPokenavConditionCancel_Pal + 16, 102}, + {gPokenavConditionCancel_Pal, TAG_SPMENU_CONDITION_BALL}, + {gPokenavConditionCancel_Pal + 16, TAG_SPMENU_CONDITION_CANCEL}, {}, }; struct SpriteTemplate dataTemplate = { - .tileTag = 101, - .paletteTag = 101, + .tileTag = TAG_SPMENU_CONDITION_BALL, + .paletteTag = TAG_SPMENU_CONDITION_BALL, .oam = &sOamData_8625A28, .anims = sSpriteAnimTable_8625A40, .images = NULL, @@ -1218,8 +1223,8 @@ void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTempla void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal) { - struct SpriteSheet dataSheet = {sConditionSparkle_Pal, 0x380, TAG_CONDITION_SPARKLE}; - struct SpritePalette dataPal = {sConditionSparkle_Gfx, TAG_CONDITION_SPARKLE}; + struct SpriteSheet dataSheet = {sConditionSparkle_Pal, 0x380, TAG_SPMENU_CONDITION_SPARKLE}; + struct SpritePalette dataPal = {sConditionSparkle_Gfx, TAG_SPMENU_CONDITION_SPARKLE}; *sheet = dataSheet; *pal = dataPal; @@ -1292,8 +1297,8 @@ static const union AnimCmd *const *const sUnknown_08625B10 = sSpriteAnimTable_86 static const struct SpriteTemplate sSpriteTemplate_ConditionSparkle = { - .tileTag = TAG_CONDITION_SPARKLE, - .paletteTag = TAG_CONDITION_SPARKLE, + .tileTag = TAG_SPMENU_CONDITION_SPARKLE, + .paletteTag = TAG_SPMENU_CONDITION_SPARKLE, .oam = &sOam_ConditionSparkle, .anims = sAnims_ConditionSparkle, .images = NULL, @@ -1335,7 +1340,7 @@ static void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites) { u16 i; - for (i = 0; i < 10; i++) + for (i = 0; i < MAX_CONDITION_SPARKLES; i++) { if (sprites[i] != NULL) { @@ -1375,11 +1380,11 @@ void ResetConditionSparkleSprites(struct Sprite **sprites) { u8 i; - for (i = 0; i < 10; i++) + for (i = 0; i < MAX_CONDITION_SPARKLES; i++) sprites[i] = NULL; } -void CreateConditionSparkleSprites(struct Sprite **sprites, u8 arg1, u8 _count) +void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 _count) { u16 i, spriteId, firstSpriteId = 0; u8 count = _count; @@ -1391,7 +1396,7 @@ void CreateConditionSparkleSprites(struct Sprite **sprites, u8 arg1, u8 _count) { sprites[i] = &gSprites[spriteId]; sprites[i]->invisible = TRUE; - sprites[i]->data[4] = arg1; + sprites[i]->data[4] = monSpriteId; if (i != 0) sprites[i - 1]->data[5] = spriteId; else @@ -1411,7 +1416,7 @@ void DestroyConditionSparkleSprites(struct Sprite **sprites) { u16 i; - for (i = 0; i < 10; i++) + for (i = 0; i < MAX_CONDITION_SPARKLES; i++) { if (sprites[i] != NULL) { @@ -1428,8 +1433,8 @@ void DestroyConditionSparkleSprites(struct Sprite **sprites) void FreeConditionSparkles(struct Sprite **sprites) { DestroyConditionSparkleSprites(sprites); - FreeSpriteTilesByTag(TAG_CONDITION_SPARKLE); - FreeSpritePaletteByTag(TAG_CONDITION_SPARKLE); + FreeSpriteTilesByTag(TAG_SPMENU_CONDITION_SPARKLE); + FreeSpritePaletteByTag(TAG_SPMENU_CONDITION_SPARKLE); } static void SpriteCB_ConditionSparkle(struct Sprite *sprite) diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c index ad769adcf5..764d5c63fb 100644 --- a/src/pokenav_conditions_2.c +++ b/src/pokenav_conditions_2.c @@ -25,7 +25,7 @@ u32 sub_81CE700(s32); BSS_DATA u8 gUnknown_030012BC; const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); -const u16 gUnknown_08623208[] = INCBIN_U16("graphics/pokenav/8623208.gbapal"); +const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal"); const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); const u32 gUnknown_0862323C[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); const u16 gUnknown_08623338[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); @@ -134,7 +134,7 @@ struct Pokenav7Struct u8 unk1823; struct PokemonMarkMenu monMarks; struct Sprite *unk28dc; - struct Sprite *unk28e0[10]; + struct Sprite *unk28e0[MAX_CONDITION_SPARKLES]; u8 unk2908; u8 filler2[0x38ac - 0x2909]; }; @@ -226,7 +226,7 @@ u32 sub_81CDE94(s32 state) CopyBgTilemapBufferToVram(3); CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); - CopyPaletteIntoBufferUnfaded(gUnknown_08623208, 0xF0, 0x20); + CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); structPtr->unk1814 = -80; return LT_INC_AND_PAUSE; case 4: @@ -804,7 +804,7 @@ void sub_81CED30(u8 var) if (structPtr->unk1816 == 0xFF) { - sub_81D31D0(&sprSheet, &sprTemplate, &sprPal); + LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal); sprSheet.data = sub_81CDCB4(var); sprPal.data = sub_81CDCD4(var); structPtr->unk1818 = LoadSpritePalette(&sprPal); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 72490bde2f..30d5315146 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -25,9 +25,9 @@ #include "item_menu.h" /* - This file handles the pokeblock screen where the player - chooses which pokemon to give a pokeblock to. The subsequent - scene of feeding the pokeblock to the pokemon is handled by + This file handles the screen where the player chooses + which pokemon to give a pokeblock to. The subsequent scene + of feeding the pokeblock to the pokemon is handled by pokeblock_feed.c, and the rest of the pokeblock menu (and other pokeblock-related functions) are in pokeblock.c */ @@ -39,30 +39,37 @@ enum { WIN_COUNT }; +#define TAG_UP_DOWN 0 +#define TAG_CONDITION 1 + +// At any one time, the currently selected mon and its two adjacent neighbors can be loaded +// IDs to refer to one of these 3 are called "load id" in this file +#define NUM_SELECTIONS_LOADED 3 + struct UsePokeblockSession { - /*0x00*/ void (*callback)(void); - /*0x04*/ void (*exitCallback)(void); - /*0x08*/ struct Pokeblock *pokeblock; - /*0x0C*/ struct Pokemon *mon; - /*0x10*/ u8 stringBuffer[0x40]; - /*0x50*/ u8 mainState; - /*0x51*/ u8 field_51; // unused - /*0x52*/ u8 field_52; - /*0x53*/ u8 field_53; - /*0x54*/ u8 numEnhancements; - /*0x55*/ u8 field_55; // unused - /*0x56*/ u8 field_56; - /*0x57*/ u8 field_57[FLAVOR_COUNT]; - /*0x5C*/ u8 field_5c[FLAVOR_COUNT]; - /*0x61*/ u8 field_61[FLAVOR_COUNT]; - /*0x66*/ s16 field_66[FLAVOR_COUNT]; - /*0x70*/ u8 field_70; // mon id + 1 - /*0x71*/ u8 field_71; // mon id - /*0x74*/ u8 (*unk74)(void); // selection handler - /*0x78*/ u8 helperState; - /*0x79*/ u8 filler79[1]; // unused - /*0x7A*/ u8 field_7A[0x22]; // nature text buffer + void (*callback)(void); + void (*exitCallback)(void); + struct Pokeblock *pokeblock; + struct Pokemon *mon; + u8 stringBuffer[64]; + u8 mainState; + u8 unused_1; + u8 timer; + u8 statId; + u8 numEnhancements; + u8 unused_2; + bool8 monInTopHalf; + u8 conditionsPreBlock[FLAVOR_COUNT]; + u8 conditionsPostBlock[FLAVOR_COUNT]; + u8 enhancements[FLAVOR_COUNT]; + s16 pokeblockStatBoosts[FLAVOR_COUNT]; + u8 numSelections; // num in party + 1 (for Cancel) + u8 curSelection; + bool8 (*loadNewSelection)(void); + u8 helperState; + u8 unused_3; + u8 natureText[34]; }; // This struct is identical to PokenavMonList, the struct used for managing lists of pokemon in the pokenav @@ -79,50 +86,47 @@ struct UsePokeblockMenuPokemon struct UsePokeblockMenu { /*0x0000*/ u8 filler0[4]; // unused - /*0x0000*/ u16 field_4[6][0x40]; // pal buffer - /*0x0304*/ u8 field_304[3][0x2000]; // sheet buffer + /*0x0000*/ u16 partyPalettes[PARTY_SIZE][0x40]; + /*0x0304*/ u8 partySheets[NUM_SELECTIONS_LOADED][0x2000]; /*0x6304*/ u8 filler_6304[0x1000]; // unused? /*0x7304*/ u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; - /*0x7B06*/ u8 field_7B06[7]; // sprite ids - /*0x7B0E*/ s16 field_7B0E; // x pos? - /*0x7B10*/ u8 field_7B10; // sprite id? - /*0x7B12*/ u16 field_7B12; // pal - /*0x7B12*/ u16 field_7B14; // sheet - /*0x7B12*/ u8 *field_7B18; - /*0x7B1C*/ struct Sprite *sparkles[10]; + /*0x7B06*/ u8 selectionIconSpriteIds[PARTY_SIZE + 1]; + /*0x7B0E*/ s16 curMonXOffset; + /*0x7B10*/ u8 curMonSpriteId; + /*0x7B12*/ u16 curMonPalette; + /*0x7B12*/ u16 curMonSheet; + /*0x7B12*/ u8 *curMonTileStart; + /*0x7B1C*/ struct Sprite *sparkles[MAX_CONDITION_SPARKLES]; /*0x7B44*/ struct Sprite *condition[2]; /*0x7B4C*/ u8 field_7B4C; - /*0x7B4D*/ u8 field_7B4D[3][24]; - /*0x7B95*/ u8 field_7B95[3][64]; + /*0x7B4D*/ u8 locationStrings[NUM_SELECTIONS_LOADED][24]; // Gets an "in party" or "in box #" string that never gets printed + /*0x7B95*/ u8 monNameStrings[NUM_SELECTIONS_LOADED][64]; /*0x7C58*/ struct UnknownStruct_81D1ED4 field_7C58; - /*0x7FB0*/ u8 unk7FB0[3]; - /*0x7FB3*/ s8 field_7FB3; - /*0x7FB4*/ s8 field_7FB4; - /*0x7FB5*/ s8 field_7FB5; - /*0x7FB6*/ s8 field_7FB6; + /*0x7FB0*/ u8 numSparkles[NUM_SELECTIONS_LOADED]; + /*0x7FB3*/ s8 curLoadId; + /*0x7FB4*/ s8 nextLoadId; + /*0x7FB5*/ s8 prevLoadId; + /*0x7FB6*/ s8 toLoadId; /*0x7FB8*/ struct UsePokeblockMenuPokemon party[PARTY_SIZE]; /*0x7FD0*/ struct UsePokeblockSession info; }; -#define TAG_UP_DOWN 0 -#define TAG_CONDITION 1 - static void SetUsePokeblockCallback(void (*func)(void)); static void LoadUsePokeblockMenu(void); -static void sub_816631C(void); -static void sub_81662C0(void); +static void CB2_UsePokeblockMenu(void); +static void CB2_ReturnToUsePokeblockMenu(void); static void ShowUsePokeblockMenu(void); -static void sub_8166304(void); -static void sub_81668F8(void); -static void sub_8167420(void); -static void sub_8167760(void); +static void CB2_ShowUsePokeblockMenuForResults(void); +static void ShowUsePokeblockMenuForResults(void); +static void LoadPartyInfo(void); +static void LoadAndCreateSelectionIcons(void); static u8 GetNumNonEggPartyMons(u8); -static bool8 sub_8168328(void); -static bool8 LoadUsePokeblockGfx(void); -static void sub_8167608(u8); +static bool8 LoadConditionTitle(void); +static bool8 LoadUsePokeblockMenuGfx(void); +static void UpdateMonPic(u8); static void UpdateMonInfoText(u16, bool8); static void UsePokeblockMenu(void); -static void sub_8167CA0(bool8); +static void UpdateSelection(bool8); static void CloseUsePokeblockMenu(void); static void AskUsePokeblock(void); static s8 HandleAskUsePokeblockInput(void); @@ -130,29 +134,29 @@ static bool8 IsSheenMaxed(void); static void PrintWontEatAnymore(void); static void FeedPokeblockToMon(void); static void EraseMenuWindow(void); -static u8 sub_81672A4(u8); -static void sub_8166A34(void); -static void sub_8167104(void); -static void sub_8167338(void); -static void sub_81681F4(u8); -static void sub_8166E24(void); -static bool8 sub_8166EDC(void); +static u8 GetPartyIdFromSelectionId(u8); +static void ShowPokeblockResults(void); +static void CalculateConditionEnhancements(void); +static void LoadAndCreateUpDownSprites(void); +static void CalculateNumAdditionalSparkles(u8); +static void PrintFirstEnhancement(void); +static bool8 TryPrintNextEnhancement(void); static void BufferEnhancedStatText(u8 *, u8, s16); static void PrintMenuWindowText(const u8 *); -static void sub_8167184(struct Pokeblock *, struct Pokemon *); -static void sub_81673DC(struct Sprite *); -static void sub_81674BC(void); -static void sub_816753C(s16, u8); -static u8 sub_8167EA4(void); -static u8 sub_8167FA4(void); -static u8 sub_8168048(void); -static void sub_8168180(struct Sprite *); -static void sub_81681B4(struct Sprite *); -static void sub_8168168(struct Sprite *); -static void sub_8168374(struct Sprite *); +static void CalculatePokeblockEffectiveness(struct Pokeblock *, struct Pokemon *); +static void SpriteCB_UpDown(struct Sprite *); +static void LoadInitialMonInfo(void); +static void LoadMonInfo(s16, u8); +static bool8 LoadNewSelection_CancelToMon(void); +static bool8 LoadNewSelection_MonToCancel(void); +static bool8 LoadNewSelection_MonToMon(void); +static void SpriteCB_SelectionIconPokeball(struct Sprite *); +static void SpriteCB_SelectionIconCancel(struct Sprite *); +static void SpriteCB_MonPic(struct Sprite *); +static void SpriteCB_Condition(struct Sprite *); extern const u16 gConditionGraphData_Pal[]; -extern const u16 gUnknown_08623208[]; +extern const u16 gConditionText_Pal[]; // The below 3 are saved for returning to the screen after feeding a pokeblock to a mon // so that the rest of the data can be freed @@ -171,7 +175,9 @@ static const u32 sMonFrame_Gfx[] = INCBIN_U32("graphics/pokeblock/use_screen/mon static const u32 sMonFrame_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.bin"); static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/graph_data.bin"); -static const u32 gUnknown_085DFCB0[] = +// For some reason the condition/flavors aren't listed in order in this file +// Normally they would go Cool/Spicy, Beauty/Dry, Cute/Sweet, Smart/Bitter, Tough/Sour +static const u32 sMonDataConditions[FLAVOR_COUNT] = { MON_DATA_COOL, MON_DATA_TOUGH, @@ -298,13 +304,13 @@ static const struct SpritePalette sSpritePalette_UpDown = gUsePokeblockUpDown_Pal, TAG_UP_DOWN }; -static const s16 gUnknown_085DFD28[][2] = +static const s16 sUpDownCoordsOnGraph[FLAVOR_COUNT][2] = { - {0x9C, 0x24}, - {0x75, 0x3B}, - {0x75, 0x76}, - {0xC5, 0x76}, - {0xC5, 0x3B} + {156, 36}, + {117, 59}, + {117, 118}, + {197, 118}, + {197, 59} }; static const struct OamData sOam_UpDown = @@ -397,7 +403,7 @@ static const struct SpriteTemplate sSpriteTemplate_Condition = .anims = sAnims_Condition, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8168374, + .callback = SpriteCB_Condition, }; static const struct SpritePalette sSpritePalette_Condition = @@ -413,7 +419,7 @@ void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void sInfo->pokeblock = pokeblock; sInfo->exitCallback = callback; SetUsePokeblockCallback(LoadUsePokeblockMenu); - SetMainCallback2(sub_816631C); + SetMainCallback2(CB2_UsePokeblockMenu); } // When returning to the selection screen after feeding a pokeblock to a mon @@ -424,12 +430,12 @@ static void CB2_ReturnAndChooseMonToGivePokeblock(void) sInfo->pokeblock = sPokeblock; sInfo->exitCallback = sExitCallback; gPokeblockMonId = GetNumNonEggPartyMons(gPokeblockMonId); - sInfo->field_56 = gPokeblockMonId < 4 ? 0 : 1; + sInfo->monInTopHalf = (gPokeblockMonId <= PARTY_SIZE / 2) ? FALSE : TRUE; SetUsePokeblockCallback(LoadUsePokeblockMenu); - SetMainCallback2(sub_81662C0); + SetMainCallback2(CB2_ReturnToUsePokeblockMenu); } -static void sub_81662C0(void) +static void CB2_ReturnToUsePokeblockMenu(void) { sInfo->callback(); AnimateSprites(); @@ -438,19 +444,19 @@ static void sub_81662C0(void) if (sInfo->callback == ShowUsePokeblockMenu) { sInfo->mainState = 0; - SetMainCallback2(sub_8166304); + SetMainCallback2(CB2_ShowUsePokeblockMenuForResults); } } -static void sub_8166304(void) +static void CB2_ShowUsePokeblockMenuForResults(void) { - sub_81668F8(); + ShowUsePokeblockMenuForResults(); AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); } -static void sub_816631C(void) +static void CB2_UsePokeblockMenu(void) { sInfo->callback(); AnimateSprites(); @@ -459,7 +465,7 @@ static void sub_816631C(void) UpdatePaletteFade(); } -static void VBlankCB_UsePokeblock(void) +static void VBlankCB_UsePokeblockMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -479,7 +485,7 @@ static void LoadUsePokeblockMenu(void) switch (sInfo->mainState) { case 0: - sMenu->field_7B10 = 0xFF; + sMenu->curMonSpriteId = 0xFF; sub_81D1ED4(&sMenu->field_7C58); sInfo->mainState++; break; @@ -505,25 +511,25 @@ static void LoadUsePokeblockMenu(void) sInfo->mainState++; break; case 5: - if (!sub_8168328()) + if (!LoadConditionTitle()) sInfo->mainState++; break; case 6: gKeyRepeatStartDelay = 20; - sub_8167420(); + LoadPartyInfo(); sInfo->mainState++; break; case 7: - if (!LoadUsePokeblockGfx()) + if (!LoadUsePokeblockMenuGfx()) sInfo->mainState++; break; case 8: - sub_8167608(0); - sub_8167760(); + UpdateMonPic(0); + LoadAndCreateSelectionIcons(); sInfo->mainState++; break; case 9: - if (!sub_81D312C(&sMenu->field_7B0E)) + if (!sub_81D312C(&sMenu->curMonXOffset)) sInfo->mainState++; break; case 10: @@ -563,7 +569,7 @@ static void ShowUsePokeblockMenu(void) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - SetVBlankCallback(VBlankCB_UsePokeblock); + SetVBlankCallback(VBlankCB_UsePokeblockMenu); ShowBg(0); ShowBg(1); ShowBg(3); @@ -574,10 +580,10 @@ static void ShowUsePokeblockMenu(void) if (!gPaletteFade.active) { ResetConditionSparkleSprites(sMenu->sparkles); - if (sMenu->info.field_71 != sMenu->info.field_70 - 1) + if (sMenu->info.curSelection != sMenu->info.numSelections - 1) { - u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; - CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); + u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles); } SetUsePokeblockCallback(UsePokeblockMenu); @@ -599,7 +605,7 @@ enum { static void UsePokeblockMenu(void) { - u8 var; + bool8 loading; switch (sInfo->mainState) { @@ -607,14 +613,14 @@ static void UsePokeblockMenu(void) if (JOY_HELD(DPAD_UP)) { PlaySE(SE_SELECT); - sub_8167CA0(TRUE); + UpdateSelection(TRUE); DestroyConditionSparkleSprites(sMenu->sparkles); sInfo->mainState = STATE_UPDATE_SELECTION; } else if (JOY_HELD(DPAD_DOWN)) { PlaySE(SE_SELECT); - sub_8167CA0(FALSE); + UpdateSelection(FALSE); DestroyConditionSparkleSprites(sMenu->sparkles); sInfo->mainState = STATE_UPDATE_SELECTION; } @@ -628,15 +634,15 @@ static void UsePokeblockMenu(void) PlaySE(SE_SELECT); // If last item, selected Cancel. Otherwise selected mon - if (sMenu->info.field_71 == sMenu->info.field_70 - 1) + if (sMenu->info.curSelection == sMenu->info.numSelections - 1) sInfo->mainState = STATE_CLOSE; else sInfo->mainState = STATE_CONFIRM_SELECTION; } break; case STATE_UPDATE_SELECTION: - var = sMenu->info.unk74(); - if (!var) + loading = sMenu->info.loadNewSelection(); + if (!loading) sInfo->mainState = STATE_HANDLE_INPUT; break; case STATE_2: @@ -685,7 +691,7 @@ static void FeedPokeblockToMon(void) switch (sInfo->mainState) { case 0: - gPokeblockMonId = sub_81672A4(sMenu->info.field_71); + gPokeblockMonId = GetPartyIdFromSelectionId(sMenu->info.curSelection); sExitCallback = sInfo->exitCallback; sPokeblock = sInfo->pokeblock; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -707,16 +713,16 @@ static void FeedPokeblockToMon(void) } } -static void sub_81668F8(void) +static void ShowUsePokeblockMenuForResults(void) { - u16 var; + bool8 loading; switch (sInfo->mainState) { case 0: - if (sMenu->info.field_71 != gPokeblockMonId) + if (sMenu->info.curSelection != gPokeblockMonId) { - sub_8167CA0(sInfo->field_56); + UpdateSelection(sInfo->monInTopHalf); sInfo->mainState++; } else @@ -725,9 +731,9 @@ static void sub_81668F8(void) } break; case 1: - var = sMenu->info.unk74(); - if (!var) - sInfo->mainState = var; + loading = sMenu->info.loadNewSelection(); + if (!loading) + sInfo->mainState = 0; break; case 2: break; @@ -743,7 +749,7 @@ static void sub_81668F8(void) sInfo->mainState++; break; case 5: - SetVBlankCallback(VBlankCB_UsePokeblock); + SetVBlankCallback(VBlankCB_UsePokeblockMenu); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); sInfo->mainState++; break; @@ -751,14 +757,14 @@ static void sub_81668F8(void) if (!gPaletteFade.active) { ResetConditionSparkleSprites(sMenu->sparkles); - SetUsePokeblockCallback(sub_8166A34); - SetMainCallback2(sub_816631C); + SetUsePokeblockCallback(ShowPokeblockResults); + SetMainCallback2(CB2_UsePokeblockMenu); } break; } } -static void sub_8166A34(void) +static void ShowPokeblockResults(void) { u8 var; @@ -766,7 +772,7 @@ static void sub_8166A34(void) { case 0: sInfo->mon = gPlayerParty; - sInfo->mon += sMenu->party[sMenu->info.field_71].monId; + sInfo->mon += sMenu->party[sMenu->info.curSelection].monId; DestroyConditionSparkleSprites(sMenu->sparkles); sInfo->mainState++; break; @@ -775,36 +781,36 @@ static void sub_8166A34(void) sInfo->mainState++; break; case 2: - sub_8167104(); - sub_81D2754(sInfo->field_5c, sMenu->field_7C58.unk14[3]); - sub_81D1F84(&sMenu->field_7C58, sMenu->field_7C58.unk14[sMenu->field_7FB3], sMenu->field_7C58.unk14[3]); - sub_8167338(); + CalculateConditionEnhancements(); + sub_81D2754(sInfo->conditionsPostBlock, sMenu->field_7C58.unk14[3]); + sub_81D1F84(&sMenu->field_7C58, sMenu->field_7C58.unk14[sMenu->curLoadId], sMenu->field_7C58.unk14[3]); + LoadAndCreateUpDownSprites(); sInfo->mainState++; break; case 3: var = sub_81D2074(&sMenu->field_7C58); if (!var) { - sub_81681F4(sub_81672A4(sMenu->info.field_71)); - if (sMenu->info.field_71 != sMenu->info.field_70 - 1) + CalculateNumAdditionalSparkles(GetPartyIdFromSelectionId(sMenu->info.curSelection)); + if (sMenu->info.curSelection != sMenu->info.numSelections - 1) { - u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; - CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); + u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles); } - sInfo->field_52 = 0; + sInfo->timer = 0; sInfo->mainState++; } break; case 4: - if (++sInfo->field_52 > 16) + if (++sInfo->timer > 16) { - sub_8166E24(); + PrintFirstEnhancement(); sInfo->mainState++; } break; case 5: - if (JOY_NEW(A_BUTTON | B_BUTTON) && !sub_8166EDC()) + if (JOY_NEW(A_BUTTON | B_BUTTON) && !TryPrintNextEnhancement()) { TryClearPokeblock((u8)gSpecialVar_ItemId); SetUsePokeblockCallback(CloseUsePokeblockMenu); @@ -815,7 +821,7 @@ static void sub_8166A34(void) static void CloseUsePokeblockMenu(void) { - u8 i, var; + u8 i; switch (sInfo->mainState) { @@ -835,8 +841,8 @@ static void CloseUsePokeblockMenu(void) case 3: SetMainCallback2(sInfo->exitCallback); FreeConditionSparkles(sMenu->sparkles); - for (i = 0; i < ARRAY_COUNT(sMenu->field_7B06); i++) - DestroySprite(&gSprites[sMenu->field_7B06[i]]); + for (i = 0; i < ARRAY_COUNT(sMenu->selectionIconSpriteIds); i++) + DestroySprite(&gSprites[sMenu->selectionIconSpriteIds[i]]); FreeSpriteTilesByTag(TAG_UP_DOWN); FreeSpriteTilesByTag(TAG_CONDITION); @@ -846,8 +852,8 @@ static void CloseUsePokeblockMenu(void) for (i = 0; i < ARRAY_COUNT(sMenu->condition); i++) DestroySprite(sMenu->condition[i]); - if (sMenu->field_7B10 != 0xFF) - DestroySprite(&gSprites[sMenu->field_7B10]); + if (sMenu->curMonSpriteId != 0xFF) + DestroySprite(&gSprites[sMenu->curMonSpriteId]); SetVBlankCallback(NULL); FREE_AND_SET_NULL(sGraph_Tilemap); @@ -863,7 +869,7 @@ static void AskUsePokeblock(void) { u8 stringBuffer[0x40]; - GetMonData(&gPlayerParty[sub_81672A4(sMenu->info.field_71)], MON_DATA_NICKNAME, stringBuffer); + GetMonData(&gPlayerParty[GetPartyIdFromSelectionId(sMenu->info.curSelection)], MON_DATA_NICKNAME, stringBuffer); StringGetEnd10(stringBuffer); StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion); StringCopy(gStringVar4, stringBuffer); @@ -894,47 +900,47 @@ static s8 HandleAskUsePokeblockInput(void) return menuItem; } -static void sub_8166E24(void) +static void PrintFirstEnhancement(void) { DrawTextBorderOuter(WIN_TEXT, 151, 14); FillWindowPixelBuffer(WIN_TEXT, 17); - for (sInfo->field_53 = 0; sInfo->field_53 < FLAVOR_COUNT; sInfo->field_53++) + for (sInfo->statId = 0; sInfo->statId < FLAVOR_COUNT; sInfo->statId++) { - if (sInfo->field_61[sInfo->field_53] != 0) + if (sInfo->enhancements[sInfo->statId] != 0) break; } - if (sInfo->field_53 < FLAVOR_COUNT) - BufferEnhancedStatText(gStringVar4, sInfo->field_53, sInfo->field_61[sInfo->field_53]); + if (sInfo->statId < FLAVOR_COUNT) + BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]); else - BufferEnhancedStatText(gStringVar4, sInfo->field_53, 0); + BufferEnhancedStatText(gStringVar4, sInfo->statId, 0); PrintMenuWindowText(gStringVar4); PutWindowTilemap(WIN_TEXT); CopyWindowToVram(WIN_TEXT, 3); } -static bool8 sub_8166EDC(void) +static bool8 TryPrintNextEnhancement(void) { FillWindowPixelBuffer(WIN_TEXT, 17); while (1) { - sInfo->field_53++; - if (sInfo->field_53 < FLAVOR_COUNT) + sInfo->statId++; + if (sInfo->statId < FLAVOR_COUNT) { - if (sInfo->field_61[sInfo->field_53] != 0) + if (sInfo->enhancements[sInfo->statId] != 0) break; } else { - sInfo->field_53 = FLAVOR_COUNT; + sInfo->statId = FLAVOR_COUNT; return FALSE; } } - BufferEnhancedStatText(gStringVar4, sInfo->field_53, sInfo->field_61[sInfo->field_53]); + BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]); PrintMenuWindowText(gStringVar4); CopyWindowToVram(WIN_TEXT, 2); @@ -985,11 +991,11 @@ static void GetMonConditions(struct Pokemon *mon, u8 *data) { u16 i; - for (i = 0; i < 5; i++) - data[i] = GetMonData(mon, gUnknown_085DFCB0[i]); + for (i = 0; i < FLAVOR_COUNT; i++) + data[i] = GetMonData(mon, sMonDataConditions[i]); } -static void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) +static void UpdateMonConditions(struct Pokeblock *pokeblock, struct Pokemon *mon) { u16 i; s16 cstat; @@ -997,17 +1003,17 @@ static void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) if (GetMonData(mon, MON_DATA_SHEEN) != 255) { - sub_8167184(pokeblock, mon); + CalculatePokeblockEffectiveness(pokeblock, mon); for (i = 0; i < FLAVOR_COUNT; i++) { - data = GetMonData(mon, gUnknown_085DFCB0[i]); - cstat = data + sInfo->field_66[i]; + data = GetMonData(mon, sMonDataConditions[i]); + cstat = data + sInfo->pokeblockStatBoosts[i]; if (cstat < 0) cstat = 0; if (cstat > 255) cstat = 255; data = cstat; - SetMonData(mon, gUnknown_085DFCB0[i], &data); + SetMonData(mon, sMonDataConditions[i], &data); } cstat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel; @@ -1019,28 +1025,28 @@ static void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) } } -static void sub_8167104(void) +static void CalculateConditionEnhancements(void) { u16 i; struct Pokemon *mon = gPlayerParty; - mon += sMenu->unk7FB0[sMenu->info.field_71 * 4 + 9]; + mon += sMenu->party[sMenu->info.curSelection].monId; - GetMonConditions(mon, sInfo->field_57); - sub_8167054(sInfo->pokeblock, mon); - GetMonConditions(mon, sInfo->field_5c); + GetMonConditions(mon, sInfo->conditionsPreBlock); + UpdateMonConditions(sInfo->pokeblock, mon); + GetMonConditions(mon, sInfo->conditionsPostBlock); for (i = 0; i < FLAVOR_COUNT; i++) - sInfo->field_61[i] = sInfo->field_5c[i] - sInfo->field_57[i]; + sInfo->enhancements[i] = sInfo->conditionsPostBlock[i] - sInfo->conditionsPreBlock[i]; } -static void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) +static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct Pokemon *mon) { s8 i, direction, taste; - sInfo->field_66[0] = pokeblock->spicy; - sInfo->field_66[1] = pokeblock->sour; - sInfo->field_66[2] = pokeblock->bitter; - sInfo->field_66[3] = pokeblock->sweet; - sInfo->field_66[4] = pokeblock->dry; + sInfo->pokeblockStatBoosts[0] = pokeblock->spicy; + sInfo->pokeblockStatBoosts[1] = pokeblock->sour; + sInfo->pokeblockStatBoosts[2] = pokeblock->bitter; + sInfo->pokeblockStatBoosts[3] = pokeblock->sweet; + sInfo->pokeblockStatBoosts[4] = pokeblock->dry; if (gPokeblockGain > 0) direction = 1; @@ -1051,7 +1057,7 @@ static void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) for (i = 0; i < FLAVOR_COUNT; i++) { - s16 amount = sInfo->field_66[i]; + s16 amount = sInfo->pokeblockStatBoosts[i]; s8 boost = amount / 10; if (amount % 10 >= 5) // round to the nearest @@ -1059,14 +1065,14 @@ static void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) taste = GetMonFlavorRelation(mon, sFlavors[i]); if (taste == direction) - sInfo->field_66[i] += boost * taste; + sInfo->pokeblockStatBoosts[i] += boost * taste; } } static bool8 IsSheenMaxed(void) { - if (GetBoxOrPartyMonData(sMenu->party[sMenu->info.field_71].boxId, - sMenu->party[sMenu->info.field_71].monId, + if (GetBoxOrPartyMonData(sMenu->party[sMenu->info.curSelection].boxId, + sMenu->party[sMenu->info.curSelection].monId, MON_DATA_SHEEN, NULL) == 255) return TRUE; @@ -1074,7 +1080,7 @@ static bool8 IsSheenMaxed(void) return FALSE; } -static u8 sub_81672A4(u8 a0) +static u8 GetPartyIdFromSelectionId(u8 selectionId) { u8 i; @@ -1082,9 +1088,9 @@ static u8 sub_81672A4(u8 a0) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { - if (a0 == 0) + if (selectionId == 0) return i; - a0--; + selectionId--; } } @@ -1106,12 +1112,12 @@ static u8 GetNumNonEggPartyMons(u8 partyCount) } // Unused -static u8 sub_8167324(u8 a0) +static u8 GetPartyIdFromSelectionId_(u8 selectionId) { - return sub_81672A4(a0); + return GetPartyIdFromSelectionId(selectionId); } -static void sub_8167338(void) +static void LoadAndCreateUpDownSprites(void) { u16 i, spriteId; @@ -1121,21 +1127,20 @@ static void sub_8167338(void) for (i = 0; i < FLAVOR_COUNT; i++) { - if (sInfo->field_61[i] != 0) + if (sInfo->enhancements[i] != 0) { - spriteId = CreateSprite(&sSpriteTemplate_UpDown, gUnknown_085DFD28[i][0], gUnknown_085DFD28[i][1], 0); + spriteId = CreateSprite(&sSpriteTemplate_UpDown, sUpDownCoordsOnGraph[i][0], sUpDownCoordsOnGraph[i][1], 0); if (spriteId != MAX_SPRITES) { - if (sInfo->field_61[i] != 0) - gSprites[spriteId].callback = sub_81673DC; - + if (sInfo->enhancements[i] != 0) // Always true here + gSprites[spriteId].callback = SpriteCB_UpDown; sInfo->numEnhancements++; } } } } -static void sub_81673DC(struct Sprite *sprite) +static void SpriteCB_UpDown(struct Sprite *sprite) { if (sprite->data[0] < 6) sprite->pos2.y -= 2; @@ -1149,7 +1154,7 @@ static void sub_81673DC(struct Sprite *sprite) } } -static void sub_8167420(void) +static void LoadPartyInfo(void) { u16 i; u16 numMons; @@ -1165,84 +1170,84 @@ static void sub_8167420(void) } } - sMenu->info.field_71 = 0; - sMenu->info.field_70 = numMons + 1; - sub_81674BC(); + sMenu->info.curSelection = 0; + sMenu->info.numSelections = numMons + 1; + LoadInitialMonInfo(); } -static void sub_81674BC(void) +static void LoadInitialMonInfo(void) { - s16 var, var2; + s16 nextSelection, prevSelection; - sub_816753C(sMenu->info.field_71, 0); - sMenu->field_7FB3 = 0; - sMenu->field_7FB4 = 1; - sMenu->field_7FB5 = 2; + LoadMonInfo(sMenu->info.curSelection, 0); + sMenu->curLoadId = 0; + sMenu->nextLoadId = 1; + sMenu->prevLoadId = 2; - var = sMenu->info.field_71 + 1; - if (var >= sMenu->info.field_70) - var = 0; + nextSelection = sMenu->info.curSelection + 1; + if (nextSelection >= sMenu->info.numSelections) + nextSelection = 0; - var2 = sMenu->info.field_71 - 1; - if (var2 < 0) - var2 = sMenu->info.field_70 - 1; + prevSelection = sMenu->info.curSelection - 1; + if (prevSelection < 0) + prevSelection = sMenu->info.numSelections - 1; - sub_816753C(var, 1); - sub_816753C(var2, 2); + LoadMonInfo(nextSelection, 1); + LoadMonInfo(prevSelection, 2); } -static void sub_816753C(s16 id1, u8 id2) +static void LoadMonInfo(s16 partyId, u8 loadId) { - u8 boxId = sMenu->party[id1].boxId; - u8 monId = sMenu->party[id1].monId; - u8 r6 = sMenu->info.field_70; - bool8 r8 = FALSE; + u8 boxId = sMenu->party[partyId].boxId; + u8 monId = sMenu->party[partyId].monId; + u8 numSelections = sMenu->info.numSelections; + bool8 excludesCancel = FALSE; // whether or not numSelections excludes Cancel from the count - sub_81D2ED4(sMenu->field_7B4D[id2], sMenu->field_7B95[id2], boxId, monId, id1, r6, r8); - sub_81D2F78(&sMenu->field_7C58, sMenu->unk7FB0, boxId, monId, id1, id2, r6, r8); - sub_81D3094(sMenu->field_304[id2], sMenu->field_4[id2], boxId, monId, id1, r6, r8); + GetConditionMenuMonNameAndLocString(sMenu->locationStrings[loadId], sMenu->monNameStrings[loadId], boxId, monId, partyId, numSelections, excludesCancel); + GetConditionMenuMonConditions(&sMenu->field_7C58, sMenu->numSparkles, boxId, monId, partyId, loadId, numSelections, excludesCancel); + GetConditionMenuMonGfx(sMenu->partySheets[loadId], sMenu->partyPalettes[loadId], boxId, monId, partyId, numSelections, excludesCancel); } -static void sub_8167608(u8 arg0) +static void UpdateMonPic(u8 loadId) { u8 spriteId; struct SpriteTemplate spriteTemplate; struct SpriteSheet spriteSheet; struct SpritePalette spritePal; - if (sMenu->field_7B10 == 0xFF) + if (sMenu->curMonSpriteId == 0xFF) { - sub_81D31D0(&spriteSheet, &spriteTemplate, &spritePal); - spriteSheet.data = sMenu->field_304[arg0]; - spritePal.data = sMenu->field_4[arg0]; - sMenu->field_7B12 = LoadSpritePalette(&spritePal); - sMenu->field_7B14 = LoadSpriteSheet(&spriteSheet); + LoadConditionMonPicTemplate(&spriteSheet, &spriteTemplate, &spritePal); + spriteSheet.data = sMenu->partySheets[loadId]; + spritePal.data = sMenu->partyPalettes[loadId]; + sMenu->curMonPalette = LoadSpritePalette(&spritePal); + sMenu->curMonSheet = LoadSpriteSheet(&spriteSheet); spriteId = CreateSprite(&spriteTemplate, 38, 104, 0); - sMenu->field_7B10 = spriteId; + sMenu->curMonSpriteId = spriteId; if (spriteId == MAX_SPRITES) { - FreeSpriteTilesByTag(100); - FreeSpritePaletteByTag(100); - sMenu->field_7B10 = 0xFF; + FreeSpriteTilesByTag(TAG_SPMENU_CONDITION_MON); + FreeSpritePaletteByTag(TAG_SPMENU_CONDITION_MON); + sMenu->curMonSpriteId = 0xFF; } else { - sMenu->field_7B10 = spriteId; - gSprites[sMenu->field_7B10].callback = sub_8168168; - gSprites[sMenu->field_7B10].pos2.y -= 34; - sMenu->field_7B18 = (void*)(OBJ_VRAM0 + (sMenu->field_7B14 * 32)); - sMenu->field_7B12 = (sMenu->field_7B12 * 16) + 0x100; + sMenu->curMonSpriteId = spriteId; + gSprites[sMenu->curMonSpriteId].callback = SpriteCB_MonPic; + gSprites[sMenu->curMonSpriteId].pos2.y -= 34; + sMenu->curMonTileStart = (void*)(OBJ_VRAM0 + (sMenu->curMonSheet * 32)); + sMenu->curMonPalette = (sMenu->curMonPalette * 16) + 0x100; } } else { do {} while(0); // Only needed to match, feel free to remove. - DmaCopy16Defvars(3, sMenu->field_304[arg0], sMenu->field_7B18, 0x800); - LoadPalette(sMenu->field_4[arg0], sMenu->field_7B12, 32); + DmaCopy16Defvars(3, sMenu->partySheets[loadId], sMenu->curMonTileStart, 0x800); + LoadPalette(sMenu->partyPalettes[loadId], sMenu->curMonPalette, 32); } } -static void sub_8167760(void) +static void LoadAndCreateSelectionIcons(void) { u16 i, spriteId; struct SpriteSheet spriteSheets[4]; @@ -1255,48 +1260,51 @@ static void sub_8167760(void) LoadSpriteSheets(spriteSheets); LoadSpritePalettes(spritePals); - for (i = 0; i < sMenu->info.field_70 - 1; i++) + // Fill pokeball selection icons up to number in party + for (i = 0; i < sMenu->info.numSelections - 1; i++) { spriteId = CreateSprite(&spriteTemplate, 226, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - sMenu->field_7B06[i] = spriteId; + sMenu->selectionIconSpriteIds[i] = spriteId; gSprites[spriteId].data[0] = i; - gSprites[spriteId].callback = sub_8168180; + gSprites[spriteId].callback = SpriteCB_SelectionIconPokeball; } else { - sMenu->field_7B06[i] = -1; + sMenu->selectionIconSpriteIds[i] = -1; } } - spriteTemplate.tileTag = 103; - for (; i < 6; i++) + // Fill placeholder icons for remaining (empty) party slots + spriteTemplate.tileTag = TAG_SPMENU_CONDITION_BALL_PLACEHOLDER; + for (; i < PARTY_SIZE; i++) { spriteId = CreateSprite(&spriteTemplate, 230, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - sMenu->field_7B06[i] = spriteId; + sMenu->selectionIconSpriteIds[i] = spriteId; gSprites[spriteId].oam.size = 0; } else { - sMenu->field_7B06[i] = -1; + sMenu->selectionIconSpriteIds[i] = -1; } } - spriteTemplate.tileTag = 102; - spriteTemplate.callback = sub_81681B4; + // Add cancel selection icon at bottom + spriteTemplate.tileTag = TAG_SPMENU_CONDITION_CANCEL; + spriteTemplate.callback = SpriteCB_SelectionIconCancel; spriteId = CreateSprite(&spriteTemplate, 222, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - sMenu->field_7B06[i] = spriteId; + sMenu->selectionIconSpriteIds[i] = spriteId; gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); } else { - sMenu->field_7B06[i] = -1; + sMenu->selectionIconSpriteIds[i] = -1; } LoadConditionSparkle(&spriteSheet2, &spritePal2); @@ -1304,7 +1312,7 @@ static void sub_8167760(void) LoadSpritePalette(&spritePal2); } -static bool8 LoadUsePokeblockGfx(void) +static bool8 LoadUsePokeblockMenuGfx(void) { switch (sMenu->info.helperState) { @@ -1337,7 +1345,7 @@ static bool8 LoadUsePokeblockGfx(void) break; case 5: LoadPalette(sMonFrame_Pal, 208, 32); - sMenu->field_7B0E = -80; + sMenu->curMonXOffset = -80; break; case 6: LZ77UnCompVram(gUsePokeblockGraph_Gfx, sGraph_Gfx); @@ -1360,7 +1368,7 @@ static bool8 LoadUsePokeblockGfx(void) case 11: LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0); LoadPalette(gConditionGraphData_Pal, 48, 32); - LoadPalette(gUnknown_08623208, 240, 32); + LoadPalette(gConditionText_Pal, 240, 32); sub_81D21DC(2); break; default: @@ -1372,7 +1380,7 @@ static bool8 LoadUsePokeblockGfx(void) return TRUE; } -static void UpdateMonInfoText(u16 arg0, bool8 firstPrint) +static void UpdateMonInfoText(u16 loadId, bool8 firstPrint) { u8 partyIndex; u8 nature; @@ -1380,14 +1388,14 @@ static void UpdateMonInfoText(u16 arg0, bool8 firstPrint) FillWindowPixelBuffer(WIN_NAME, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_NATURE, PIXEL_FILL(0)); - if (sMenu->info.field_71 != sMenu->info.field_70 - 1) + if (sMenu->info.curSelection != sMenu->info.numSelections - 1) { - AddTextPrinterParameterized(WIN_NAME, 1, sMenu->field_7B95[arg0], 0, 1, 0, NULL); - partyIndex = sub_81672A4(sMenu->info.field_71); + AddTextPrinterParameterized(WIN_NAME, 1, sMenu->monNameStrings[loadId], 0, 1, 0, NULL); + partyIndex = GetPartyIdFromSelectionId(sMenu->info.curSelection); nature = GetNature(&gPlayerParty[partyIndex]); - str = StringCopy(sMenu->info.field_7A, gText_NatureSlash); + str = StringCopy(sMenu->info.natureText, gText_NatureSlash); str = StringCopy(str, gNatureNamePointers[nature]); - AddTextPrinterParameterized3(WIN_NATURE, 1, 2, 1, sNatureTextColors, 0, sMenu->info.field_7A); + AddTextPrinterParameterized3(WIN_NATURE, 1, 2, 1, sNatureTextColors, 0, sMenu->info.natureText); } if (firstPrint) @@ -1402,89 +1410,99 @@ static void UpdateMonInfoText(u16 arg0, bool8 firstPrint) } } -static void sub_8167CA0(bool8 arg0) +static void UpdateSelection(bool8 up) { - u16 var0; - bool32 r8, r4; + u16 newLoadId; + bool32 startedOnMon, endedOnMon; - if (arg0) - var0 = sMenu->field_7FB5; + if (up) + newLoadId = sMenu->prevLoadId; else - var0 = sMenu->field_7FB4; + newLoadId = sMenu->nextLoadId; sub_81D1F84( &sMenu->field_7C58, - sMenu->field_7C58.unk14[sMenu->field_7FB3], - sMenu->field_7C58.unk14[var0]); + sMenu->field_7C58.unk14[sMenu->curLoadId], + sMenu->field_7C58.unk14[newLoadId]); - r8 = (sMenu->info.field_71 ^ (sMenu->info.field_70 - 1)) ? 1 : 0; - if (arg0) + if (sMenu->info.curSelection == sMenu->info.numSelections - 1) + startedOnMon = FALSE; // moving off of Cancel + else + startedOnMon = TRUE; + + if (up) { - sMenu->field_7FB5 = sMenu->field_7FB4; - sMenu->field_7FB4 = sMenu->field_7FB3; - sMenu->field_7FB3 = var0; - sMenu->field_7FB6 = sMenu->field_7FB5; + sMenu->prevLoadId = sMenu->nextLoadId; // temporarily store nextLoadId, prevLoadId no longer needed + sMenu->nextLoadId = sMenu->curLoadId; + sMenu->curLoadId = newLoadId; + sMenu->toLoadId = sMenu->prevLoadId; // next load will be the mon that's one up from new selection - sMenu->info.field_71 = (sMenu->info.field_71 == 0) - ? sMenu->info.field_70 - 1 - : sMenu->info.field_71 - 1; + // Check for wrap to bottom of list + sMenu->info.curSelection = (sMenu->info.curSelection == 0) + ? sMenu->info.numSelections - 1 + : sMenu->info.curSelection - 1; - sMenu->field_7B4C = (sMenu->info.field_71 == 0) - ? sMenu->info.field_70 - 1 - : sMenu->info.field_71 - 1; + sMenu->field_7B4C = (sMenu->info.curSelection == 0) + ? sMenu->info.numSelections - 1 + : sMenu->info.curSelection - 1; } else { - sMenu->field_7FB4 = sMenu->field_7FB5; - sMenu->field_7FB5 = sMenu->field_7FB3; - sMenu->field_7FB3 = var0; - sMenu->field_7FB6 = sMenu->field_7FB4; + sMenu->nextLoadId = sMenu->prevLoadId; // temporarily store prevLoadId, nextLoadId no longer needed + sMenu->prevLoadId = sMenu->curLoadId; + sMenu->curLoadId = newLoadId; + sMenu->toLoadId = sMenu->nextLoadId; // next load will be the mon that's one down from new selection - sMenu->info.field_71 = (sMenu->info.field_71 < sMenu->info.field_70 - 1) - ? sMenu->info.field_71 + 1 + // Check for wrap to top of list + sMenu->info.curSelection = (sMenu->info.curSelection < sMenu->info.numSelections - 1) + ? sMenu->info.curSelection + 1 : 0; - sMenu->field_7B4C = (sMenu->info.field_71 < sMenu->info.field_70 - 1) - ? sMenu->info.field_71 + 1 + sMenu->field_7B4C = (sMenu->info.curSelection < sMenu->info.numSelections - 1) + ? sMenu->info.curSelection + 1 : 0; } - r4 = (sMenu->info.field_71 ^ (sMenu->info.field_70 - 1)) ? 1 : 0; + if (sMenu->info.curSelection == sMenu->info.numSelections - 1) + endedOnMon = FALSE; // moving onto Cancel + else + endedOnMon = TRUE; + DestroyConditionSparkleSprites(sMenu->sparkles); - if (!r8) - sMenu->info.unk74 = sub_8167EA4; - else if (!r4) - sMenu->info.unk74 = sub_8167FA4; + if (!startedOnMon) + sMenu->info.loadNewSelection = LoadNewSelection_CancelToMon; + else if (!endedOnMon) + sMenu->info.loadNewSelection = LoadNewSelection_MonToCancel; else - sMenu->info.unk74 = sub_8168048; + sMenu->info.loadNewSelection = LoadNewSelection_MonToMon; } -static u8 sub_8167EA4(void) +static bool8 LoadNewSelection_CancelToMon(void) { switch (sMenu->info.helperState) { case 0: - sub_8167608(sMenu->field_7FB3); + UpdateMonPic(sMenu->curLoadId); sMenu->info.helperState++; break; case 1: - UpdateMonInfoText(sMenu->field_7FB3, FALSE); + UpdateMonInfoText(sMenu->curLoadId, FALSE); sMenu->info.helperState++; break; case 2: - if (!sub_81D3178(&sMenu->field_7C58, &sMenu->field_7B0E)) + if (!sub_81D3178(&sMenu->field_7C58, &sMenu->curMonXOffset)) { - sub_816753C(sMenu->field_7B4C, sMenu->field_7FB6); + LoadMonInfo(sMenu->field_7B4C, sMenu->toLoadId); sMenu->info.helperState++; } break; case 3: ResetConditionSparkleSprites(sMenu->sparkles); - if (sMenu->info.field_71 != sMenu->info.field_70 - 1) + if (sMenu->info.curSelection != sMenu->info.numSelections - 1) { - u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; - CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); + u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles); } sMenu->info.helperState = 0; @@ -1494,20 +1512,20 @@ static u8 sub_8167EA4(void) return TRUE; } -static u8 sub_8167FA4(void) +static bool8 LoadNewSelection_MonToCancel(void) { switch (sMenu->info.helperState) { case 0: - if (!sub_81D31A4(&sMenu->field_7C58, &sMenu->field_7B0E)) + if (!sub_81D31A4(&sMenu->field_7C58, &sMenu->curMonXOffset)) sMenu->info.helperState++; break; case 1: - UpdateMonInfoText(sMenu->field_7FB3, FALSE); + UpdateMonInfoText(sMenu->curLoadId, FALSE); sMenu->info.helperState++; break; case 2: - sub_816753C(sMenu->field_7B4C, sMenu->field_7FB6); + LoadMonInfo(sMenu->field_7B4C, sMenu->toLoadId); sMenu->info.helperState++; break; case 3: @@ -1518,35 +1536,35 @@ static u8 sub_8167FA4(void) return TRUE; } -static u8 sub_8168048(void) +static bool8 LoadNewSelection_MonToMon(void) { switch (sMenu->info.helperState) { case 0: sub_81D2074(&sMenu->field_7C58); - if (!sub_81D3150(&sMenu->field_7B0E)) + if (!sub_81D3150(&sMenu->curMonXOffset)) { - sub_8167608(sMenu->field_7FB3); + UpdateMonPic(sMenu->curLoadId); sMenu->info.helperState++; } break; case 1: - UpdateMonInfoText(sMenu->field_7FB3, FALSE); + UpdateMonInfoText(sMenu->curLoadId, FALSE); sMenu->info.helperState++; break; case 2: - if (!sub_81D3178(&sMenu->field_7C58, &sMenu->field_7B0E)) + if (!sub_81D3178(&sMenu->field_7C58, &sMenu->curMonXOffset)) { - sub_816753C(sMenu->field_7B4C, sMenu->field_7FB6); + LoadMonInfo(sMenu->field_7B4C, sMenu->toLoadId); sMenu->info.helperState++; } break; case 3: ResetConditionSparkleSprites(sMenu->sparkles); - if (sMenu->info.field_71 != sMenu->info.field_70 - 1) + if (sMenu->info.curSelection != sMenu->info.numSelections - 1) { - u8 var0 = sMenu->unk7FB0[sMenu->field_7FB3]; - CreateConditionSparkleSprites(sMenu->sparkles, sMenu->field_7B10, var0); + u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId]; + CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles); } sMenu->info.helperState = 0; @@ -1556,37 +1574,40 @@ static u8 sub_8168048(void) return TRUE; } -static void sub_8168168(struct Sprite *sprite) +static void SpriteCB_MonPic(struct Sprite *sprite) { - sprite->pos1.x = sMenu->field_7B0E + 38; + sprite->pos1.x = sMenu->curMonXOffset + 38; } -static void sub_8168180(struct Sprite *sprite) +static void SpriteCB_SelectionIconPokeball(struct Sprite *sprite) { - if (sprite->data[0] == sMenu->info.field_71) + if (sprite->data[0] == sMenu->info.curSelection) StartSpriteAnim(sprite, 0); else StartSpriteAnim(sprite, 1); } -static void sub_81681B4(struct Sprite *sprite) +static void SpriteCB_SelectionIconCancel(struct Sprite *sprite) { - if (sMenu->info.field_71 == sMenu->info.field_70 - 1) - sprite->oam.paletteNum = IndexOfSpritePaletteTag(101); + if (sMenu->info.curSelection == sMenu->info.numSelections - 1) + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_SPMENU_CONDITION_BALL); else - sprite->oam.paletteNum = IndexOfSpritePaletteTag(102); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_SPMENU_CONDITION_CANCEL); } -static void sub_81681F4(u8 monIndex) +// Calculate the max id for sparkles/stars that appear around the pokemon on the condition screen +// All pokemon start with 1 sparkle (added by CreateConditionSparkleSprites), so the number here +1 +// is the total number of sparkles that appear +static void CalculateNumAdditionalSparkles(u8 monIndex) { u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN); - sMenu->unk7FB0[sMenu->field_7FB3] = (sheen != 255) - ? sheen / 29 - : 9; + sMenu->numSparkles[sMenu->curLoadId] = (sheen != 255) + ? sheen / (255 / (MAX_CONDITION_SPARKLES - 1) + 1) + : MAX_CONDITION_SPARKLES - 1; } -static void sub_8168248(void) +static void LoadConditionGfx(void) { struct CompressedSpriteSheet spriteSheet; struct SpritePalette spritePalette; @@ -1599,7 +1620,7 @@ static void sub_8168248(void) LoadSpritePalette(&spritePalette); } -static void sub_8168294(void) +static void CreateConditionSprite(void) { u16 i; s16 xDiff, xStart; @@ -1622,16 +1643,16 @@ static void sub_8168294(void) } } -static bool8 sub_8168328(void) +static bool8 LoadConditionTitle(void) { switch (sMenu->info.helperState) { case 0: - sub_8168248(); + LoadConditionGfx(); sMenu->info.helperState++; return TRUE; case 1: - sub_8168294(); + CreateConditionSprite(); sMenu->info.helperState = 0; return FALSE; } @@ -1639,7 +1660,8 @@ static bool8 sub_8168328(void) return FALSE; } -static void sub_8168374(struct Sprite *sprite) +// Literally the word "Condition", the title block that appears over the mon icon +static void SpriteCB_Condition(struct Sprite *sprite) { s16 prevX = sprite->pos1.x; From 70851d908347d1c7c8970b7bf1c1ccb0b2ca9c00 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 11 Aug 2020 15:45:58 -0400 Subject: [PATCH 54/85] Add MAP_SCRIPT descriptions --- include/constants/map_scripts.h | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/include/constants/map_scripts.h b/include/constants/map_scripts.h index 26de3ebc67..68d3609551 100644 --- a/include/constants/map_scripts.h +++ b/include/constants/map_scripts.h @@ -1,6 +1,41 @@ #ifndef GUARD_CONSTANTS_MAP_SCRIPTS_H #define GUARD_CONSTANTS_MAP_SCRIPTS_H +/* + IDs for special scripts that can be run for a particular map. + For the functions that handle when they are run, see these constants' uses in src/script.c + + Below describes when a script of this kind will be called, and what it typically does. + They are numbered in the order that they will be called when entering a map (from a warp or camera transition). + NOTE: These descriptions are just of what they generally do, not what they always or have to do + + 3. ON_LOAD: Run after the layout is loaded (but not drawn yet). + Almost exclusively used to set metatiles on the map before it's first drawn + + 6. ON_FRAME_TABLE: Run every frame after the map has faded in, before player input is processed. + This is a table of scripts that each run if their condition is satisfied. + Used to trigger an event, such as the player exiting the cable car or the SS Tidal sailor announcing progress + + 2. ON_TRANSITION: Run during the transition to the map + Used to set map-specific flags/vars, update object positions/movement types, set weather, etc + + 5. ON_WARP_INTO_MAP_TABLE: Run after the map's objects are loaded. + This is a table of scripts that each run if their condition is satisfied. + Used to add objects to the scene or update something about the player as they warp in (e.g. their facing dir or visibility) + Note that ON_TRANSITION may also handle object visibility, but would do so by modifying a flag or var + + 4. ON_RESUME: Run at the end of map load, and again any time upon returning to field (e.g. exiting the Bag menu, or finishing a battle) + Used to hide defeated static pokemon, or maintain some map state (e.g. the Trainer Hill timer, or the cycling road challenge) + In some maps this takes the metatile setting job of ON_LOAD + + 1. ON_DIVE_WARP: Run after the player chooses to dive/emerge. + Only used once, to determine whether or not the player should emerge in the Sealed Chamber + + x. ON_RETURN_TO_FIELD: Run exlusively upon returning to the field, shortly after ON_RESUME (as opposed to ON_RESUME, which also runs once on entering the map) + Used rarely, when something must only happen on reload (e.g. making sure Mew is above the grass after battling it on Faraway Island) + +*/ + #define MAP_SCRIPT_ON_LOAD 1 #define MAP_SCRIPT_ON_FRAME_TABLE 2 #define MAP_SCRIPT_ON_TRANSITION 3 From 4e20e2a3eac3ad5a1202689a937ae2a8a045ded4 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Mon, 3 Aug 2020 14:21:51 -0400 Subject: [PATCH 55/85] Match CopyGlyphToWindow --- gflib/text.c | 729 +-------------------------------------------------- 1 file changed, 11 insertions(+), 718 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 5d407e5e4c..f4b5444e8b 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -462,13 +462,10 @@ u8 GetLastTextColor(u8 colorType) } } -#ifdef NONMATCHING - #define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ { \ - u32 i, j, *ptr, toY, fromX, toX, r5, toOrr, bits; \ + u32 i, j, *ptr, toY, fromX, toX, r5, bits; \ u8 *dst; \ - \ j = fromX_; \ i = fromY_; \ ptr = unk; \ @@ -478,27 +475,29 @@ u8 GetLastTextColor(u8 colorType) \ for (; i < toY; i++) \ { \ + asm("":::"sl"); \ r5 = *(ptr++); \ for (j = fromX; j < toX; j++) \ { \ - toOrr = r5 & 0xF; \ + const u32 toOrr = r5 & 0xF; \ if (toOrr) \ { \ - dst = windowTiles + ((j / 8) * 32) + ((j & 7) / 2) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ + dst = windowTiles + ((j >> 3) * 32) + ((j & 7) >> 1) + ((i >> 3) * widthOffset) + ((i & 7) * 4); \ bits = ((j & 1) << 2); \ - *dst = ((toOrr << bits) | (*dst & (0xF0 >> bits))); \ + *dst = (toOrr << bits) | ((0xF0 >> bits) & *dst); \ } \ r5 >>= 4; \ } \ } \ } + void CopyGlyphToWindow(struct TextPrinter *textPrinter) { struct Window *win; struct WindowTemplate *winTempl; struct Struct_03002F90 *unkStruct; - u32 currX, widthOffset, currY; + u32 currX, currY, widthOffset; s32 r4, r0; u8 *windowTiles; @@ -519,9 +518,9 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) windowTiles = win->tileData; widthOffset = winTempl->width * 32; - if (r4 <= 8) + if (r4 < 9) { - if (r0 <= 8) + if (r0 < 9) { GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); } @@ -536,9 +535,9 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) } else { - if (r0 <= 8) + u32 temp; + if (r0 < 9) { - u32 temp; GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); temp = currX + 8; @@ -546,7 +545,6 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) } else { - u32 temp; GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); temp = currX + 8; @@ -563,711 +561,6 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) } } } -#else -NAKED -void CopyGlyphToWindow(struct TextPrinter *x) -{ - asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x8C\n\ - add r3, r0, #0\n\ - ldrb r1, [r3, #0x4]\n\ - lsl r0, r1, #1\n\ - add r0, r1\n\ - lsl r0, #2\n\ - ldr r1, =gWindows\n\ - add r1, r0, r1\n\ - add r2, r1, #0\n\ - ldrb r7, [r1, #0x3]\n\ - lsl r0, r7, #3\n\ - ldrb r6, [r3, #0x8]\n\ - sub r4, r0, r6\n\ - ldr r5, =gUnknown_03002F90\n\ - add r0, r5, #0\n\ - add r0, #0x80\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - ble _08004DD2\n\ - add r4, r0, #0\n\ -_08004DD2:\n\ - ldrb r0, [r1, #0x4]\n\ - lsl r0, #3\n\ - ldrb r3, [r3, #0x9]\n\ - sub r0, r3\n\ - add r1, r5, #0\n\ - add r1, #0x81\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - ble _08004DE6\n\ - add r0, r1, #0\n\ -_08004DE6:\n\ - str r6, [sp]\n\ - mov r8, r3\n\ - add r3, r5, #0\n\ - ldr r2, [r2, #0x8]\n\ - mov r9, r2\n\ - lsl r1, r7, #5\n\ - str r1, [sp, #0x4]\n\ - cmp r4, #0x8\n\ - ble _08004DFA\n\ - b _08004F94\n\ -_08004DFA:\n\ - cmp r0, #0x8\n\ - bgt _08004E84\n\ - mov r1, r8\n\ - str r3, [sp, #0x8]\n\ - add r2, r6, #0\n\ - add r2, r4\n\ - mov r8, r2\n\ - add r0, r1, r0\n\ - str r0, [sp, #0xC]\n\ - str r6, [sp, #0x10]\n\ - cmp r1, r0\n\ - bcc _08004E14\n\ - b _080052AA\n\ -_08004E14:\n\ - ldr r3, [sp, #0x8]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x8]\n\ - ldr r4, [sp, #0x10]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _08004E72\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08004E38:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _08004E6A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004E6A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004E38\n\ -_08004E72:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0xC]\n\ - cmp r1, r2\n\ - bcc _08004E14\n\ - b _080052AA\n\ - .pool\n\ -_08004E84:\n\ - mov r1, r8\n\ - str r3, [sp, #0x14]\n\ - ldr r3, [sp]\n\ - add r3, r4\n\ - mov r12, r3\n\ - add r2, r1, #0\n\ - add r2, #0x8\n\ - str r2, [sp, #0x18]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x1C]\n\ - mov r2, r12\n\ - str r2, [sp, #0x74]\n\ - ldr r3, [sp, #0x18]\n\ - str r3, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - cmp r1, r3\n\ - bcs _08004F0E\n\ -_08004EA8:\n\ - ldr r0, [sp, #0x14]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x14]\n\ - ldr r4, [sp, #0x1C]\n\ - add r2, r1, #0x1\n\ - mov r8, r2\n\ - cmp r4, r12\n\ - bcs _08004F06\n\ - mov r3, #0x7\n\ - mov r10, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r10\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_08004ECC:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004EFE\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r10\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004EFE:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004ECC\n\ -_08004F06:\n\ - mov r1, r8\n\ - ldr r2, [sp, #0x18]\n\ - cmp r1, r2\n\ - bcc _08004EA8\n\ -_08004F0E:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x40\n\ - str r3, [sp, #0x20]\n\ - ldr r0, [sp, #0x74]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x24]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x28]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ -_08004F28:\n\ - ldr r0, [sp, #0x20]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x20]\n\ - ldr r4, [sp, #0x28]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08004F86\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_08004F4C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004F7E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004F7E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004F4C\n\ -_08004F86:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x24]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ - .pool\n\ -_08004F94:\n\ - cmp r0, #0x8\n\ - ble _08004F9A\n\ - b _080050A4\n\ -_08004F9A:\n\ - mov r1, r8\n\ - str r3, [sp, #0x2C]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - add r0, r8\n\ - str r0, [sp, #0x30]\n\ - ldr r0, [sp]\n\ - str r0, [sp, #0x34]\n\ - ldr r2, [sp, #0x30]\n\ - str r2, [sp, #0x78]\n\ - str r3, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800501C\n\ -_08004FBA:\n\ - ldr r0, [sp, #0x2C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x2C]\n\ - ldr r4, [sp, #0x34]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r12\n\ - bcs _08005014\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, #0x7\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08004FDA:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800500C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800500C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004FDA\n\ -_08005014:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x30]\n\ - cmp r1, r2\n\ - bcc _08004FBA\n\ -_0800501C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002F90 + 0x20\n\ - str r3, [sp, #0x38]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x78]\n\ - str r3, [sp, #0x3C]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x40]\n\ - cmp r1, r3\n\ - bcc _08005038\n\ - b _080052AA\n\ -_08005038:\n\ - ldr r2, [sp, #0x38]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x38]\n\ - ldr r4, [sp, #0x40]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _08005096\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_0800505C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800508E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800508E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800505C\n\ -_08005096:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x3C]\n\ - cmp r1, r2\n\ - bcc _08005038\n\ - b _080052AA\n\ - .pool\n\ -_080050A4:\n\ - mov r1, r8\n\ - str r5, [sp, #0x44]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - mov r2, r8\n\ - add r2, #0x8\n\ - str r2, [sp, #0x48]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x4C]\n\ - str r2, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - mov r0, r12\n\ - str r0, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800512C\n\ -_080050CA:\n\ - ldr r2, [sp, #0x44]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x44]\n\ - ldr r4, [sp, #0x4C]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r12\n\ - bcs _08005124\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, #0x7\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_080050EA:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800511C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800511C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _080050EA\n\ -_08005124:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x48]\n\ - cmp r1, r2\n\ - bcc _080050CA\n\ -_0800512C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002F90 + 0x20\n\ - str r3, [sp, #0x50]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x88]\n\ - str r3, [sp, #0x54]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x58]\n\ - cmp r1, r3\n\ - bcs _080051AC\n\ -_08005146:\n\ - ldr r2, [sp, #0x50]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x50]\n\ - ldr r4, [sp, #0x58]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _080051A4\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_0800516A:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800519C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800519C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800516A\n\ -_080051A4:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x54]\n\ - cmp r1, r2\n\ - bcc _08005146\n\ -_080051AC:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x40\n\ - str r3, [sp, #0x5C]\n\ - ldr r0, [sp, #0x84]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x60]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x64]\n\ - cmp r1, r2\n\ - bcs _0800522A\n\ -_080051C4:\n\ - ldr r0, [sp, #0x5C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x5C]\n\ - ldr r4, [sp, #0x64]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08005222\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_080051E8:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800521A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800521A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _080051E8\n\ -_08005222:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x60]\n\ - cmp r1, r2\n\ - bcc _080051C4\n\ -_0800522A:\n\ - ldr r4, [sp, #0x84]\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x60\n\ - str r3, [sp, #0x68]\n\ - ldr r0, [sp, #0x7C]\n\ - add r0, r4\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x6C]\n\ - str r4, [sp, #0x70]\n\ - cmp r1, r2\n\ - bcs _080052AA\n\ -_08005244:\n\ - ldr r3, [sp, #0x68]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x68]\n\ - ldr r4, [sp, #0x70]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _080052A2\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08005268:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800529A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800529A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08005268\n\ -_080052A2:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x6C]\n\ - cmp r1, r2\n\ - bcc _08005244\n\ -_080052AA:\n\ - add sp, #0x8C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif // NONMATCHING - void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) { struct Window *window; From f33737ae97f44c3139cf13f4f028df48b94f69c8 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Wed, 12 Aug 2020 12:40:10 -0400 Subject: [PATCH 56/85] bool8 --- gflib/text.c | 54 +++++++++++++++++++++++----------------------------- gflib/text.h | 4 ++-- 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 5d407e5e4c..9eebd35d03 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -21,7 +21,7 @@ static u16 gLastTextFgColor; static u16 gLastTextShadowColor; const struct FontInfo *gFonts; -u8 gUnknown_03002F84; +bool8 gUnknown_03002F84; struct Struct_03002F90 gUnknown_03002F90; TextFlags gTextFlags; @@ -205,7 +205,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2); gTextPrinters[printerTemplate->windowId].active = 0; } - gUnknown_03002F84 = 0; + gUnknown_03002F84 = FALSE; return TRUE; } @@ -213,7 +213,7 @@ void RunTextPrinters(void) { int i; - if (gUnknown_03002F84 == 0) + if (!gUnknown_03002F84) { for (i = 0; i < NUM_TEXT_PRINTERS; ++i) { @@ -1299,7 +1299,7 @@ u16 Font0Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 0; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1311,7 +1311,7 @@ u16 Font1Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 1; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1323,7 +1323,7 @@ u16 Font2Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 2; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1335,7 +1335,7 @@ u16 Font3Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 3; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1347,7 +1347,7 @@ u16 Font4Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 4; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1359,7 +1359,7 @@ u16 Font5Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 5; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1371,7 +1371,7 @@ u16 Font7Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 7; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1383,7 +1383,7 @@ u16 Font8Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (!subStruct->hasGlyphIdBeenSet) { subStruct->glyphId = 8; subStruct->hasGlyphIdBeenSet = TRUE; @@ -1395,7 +1395,7 @@ void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (gTextFlags.autoScroll == 1) + if (gTextFlags.autoScroll == TRUE) { subStruct->autoScrollDelay = 0; } @@ -1411,7 +1411,7 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter) struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); const u8 *arrowTiles; - if (gTextFlags.autoScroll == 0) + if (!gTextFlags.autoScroll) { if (subStruct->downArrowDelay != 0) { @@ -1487,7 +1487,7 @@ bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) { bool8 result = FALSE; - if (gTextFlags.autoScroll != 0) + if (gTextFlags.autoScroll) { result = TextPrinterWaitAutoMode(textPrinter); } @@ -1506,17 +1506,14 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) bool16 TextPrinterWait(struct TextPrinter *textPrinter) { bool16 result = FALSE; - if (gTextFlags.autoScroll != 0) + if (gTextFlags.autoScroll) { result = TextPrinterWaitAutoMode(textPrinter); } - else + else if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - result = TRUE; - PlaySE(SE_SELECT); - } + result = TRUE; + PlaySE(SE_SELECT); } return result; } @@ -1532,7 +1529,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c else { FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10); - if (drawArrow == 0) + if (!drawArrow) { switch (gTextFlags.useAlternateDownArrow) { @@ -1724,10 +1721,10 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; return 2; case EXT_CTRL_CODE_JPN: - textPrinter->japanese = 1; + textPrinter->japanese = TRUE; return 2; case EXT_CTRL_CODE_ENG: - textPrinter->japanese = 0; + textPrinter->japanese = FALSE; return 2; } break; @@ -1788,13 +1785,10 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentX += width; } } + else if (textPrinter->japanese) + textPrinter->printerTemplate.currentX += (gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing); else - { - if (textPrinter->japanese) - textPrinter->printerTemplate.currentX += (gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing); - else - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; - } + textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; return 0; case 1: if (TextPrinterWait(textPrinter)) diff --git a/gflib/text.h b/gflib/text.h index ba74cde6e1..0d0f3341de 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -322,7 +322,7 @@ struct TextPrinter u8 delayCounter; u8 scrollDistance; u8 minLetterSpacing; // 0x20 - u8 japanese; + bool8 japanese; }; struct FontInfo @@ -372,7 +372,7 @@ struct Struct_03002F90 extern TextFlags gTextFlags; -extern u8 gUnknown_03002F84; +extern bool8 gUnknown_03002F84; extern struct Struct_03002F90 gUnknown_03002F90; void SetFontsPointer(const struct FontInfo *fonts); From f6efbe38bfd7365ffdace6e82f5160563473efd7 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 12 Aug 2020 11:44:39 -0400 Subject: [PATCH 57/85] Clean up use_pokeblock doc, some menu_specialized --- include/menu_specialized.h | 45 ++-- include/pokenav.h | 2 +- src/menu_specialized.c | 425 +++++++++++++++++++------------------ src/pokenav_conditions_1.c | 4 +- src/pokenav_conditions_2.c | 24 +-- src/use_pokeblock.c | 162 +++++++------- 6 files changed, 333 insertions(+), 329 deletions(-) diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 334635f177..242e1c6b2f 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -5,12 +5,13 @@ #include "player_pc.h" #include "list_menu.h" #include "pokemon.h" +#include "constants/berry.h" -#define TAG_SPMENU_CONDITION_MON 100 -#define TAG_SPMENU_CONDITION_BALL 101 -#define TAG_SPMENU_CONDITION_CANCEL 102 -#define TAG_SPMENU_CONDITION_BALL_PLACEHOLDER 103 -#define TAG_SPMENU_CONDITION_SPARKLE 104 +#define TAG_CONDITION_MON 100 +#define TAG_CONDITION_BALL 101 +#define TAG_CONDITION_CANCEL 102 +#define TAG_CONDITION_BALL_PLACEHOLDER 103 +#define TAG_CONDITION_SPARKLE 104 #define MAX_CONDITION_SPARKLES 10 @@ -20,12 +21,12 @@ struct UnknownSubStruct_81D1ED4 u16 unk2; }; -struct UnknownStruct_81D1ED4 +struct ConditionGraph { - /*0x000*/ u8 unk0[4][5]; - /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][5]; - /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][5]; - /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[5]; + /*0x000*/ u8 unk0[4][FLAVOR_COUNT]; + /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][FLAVOR_COUNT]; + /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][FLAVOR_COUNT]; + /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[FLAVOR_COUNT]; /*0x140*/ u16 unk140[66][2]; /*0x248*/ u16 unk248[66][2]; /*0x350*/ u16 unk350; @@ -40,15 +41,15 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page); void sub_81D1E90(struct PlayerPCItemPageStruct *page); void sub_81D1EC0(void); void sub_81D1D04(u8 a0); -void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0); -void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0); +void sub_81D1ED4(struct ConditionGraph *graph); +void sub_81D2108(struct ConditionGraph *graph); void sub_81D21DC(u8 bg); -void sub_81D20AC(struct UnknownStruct_81D1ED4 *arg0); -void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0); -bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0); -bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0); +void sub_81D20AC(struct ConditionGraph *graph); +void sub_81D2230(struct ConditionGraph *graph); +bool8 sub_81D20BC(struct ConditionGraph *graph); +bool32 TransitionConditionGraph(struct ConditionGraph *graph); void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1); -void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); +void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); void MoveRelearnerPrintText(u8 *str); bool16 MoveRelearnerRunTextPrinters(void); void MoveRelearnerCreateYesNoMenu(void); @@ -56,12 +57,12 @@ u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); void InitMoveRelearnerWindows(bool8 useContextWindow); s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst); void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); -void GetConditionMenuMonConditions(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel); +void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel); void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); -bool8 sub_81D312C(s16 *var); -bool8 sub_81D3150(s16 *var); -bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); -bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); +bool8 MoveConditionMonOnscreen(s16 *x); +bool8 MoveConditionMonOffscreen(s16 *x); +bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x); +bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x); void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal); diff --git a/include/pokenav.h b/include/pokenav.h index 3eafe9af2c..ac916f3ba8 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -391,7 +391,7 @@ u32 sub_81CD070(void); void sub_81CD1C0(void); bool32 sub_81CD3C4(void); bool32 sub_81CDD5C(void); -struct UnknownStruct_81D1ED4 *sub_81CDC70(void); +struct ConditionGraph *sub_81CDC70(void); u16 sub_81CDC60(void); u16 sub_81CDC50(void); u8 sub_81CDDB0(void); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 05ff97edb1..cdaa32a982 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -34,13 +34,13 @@ EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0}; EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL; static void sub_81D1E7C(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void sub_81D24A4(struct UnknownStruct_81D1ED4 *a0); -static void sub_81D2634(struct UnknownStruct_81D1ED4 *a0); +static void sub_81D24A4(struct ConditionGraph *a0); +static void sub_81D2634(struct ConditionGraph *a0); static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list); static void nullsub_79(void); -static void sub_81D3408(struct Sprite *sprite); +static void SetNextConditionSparkle(struct Sprite *sprite); static void SpriteCB_ConditionSparkle(struct Sprite *sprite); -static void sub_81D35E8(struct Sprite *sprite); +static void ShowAllConditionSparkles(struct Sprite *sprite); static const struct WindowTemplate sUnknown_086253E8[] = { @@ -80,7 +80,7 @@ static const u8 sPlayerNameTextColors[] = static const u8 sEmptyItemName[] = _(""); -static const struct ScanlineEffectParams sUnknown_08625404 = +static const struct ScanlineEffectParams sConditionGraphScanline = { .dmaDest = (void*)REG_ADDR_WIN0H, .dmaControl = SCANLINE_EFFECT_DMACNT_32BIT, @@ -320,11 +320,11 @@ void sub_81D1EC0(void) Free(sUnknown_0203CF4C); } -void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0) +void sub_81D1ED4(struct ConditionGraph *a0) { u8 i, j; - for (j = 0; j < 5; j++) + for (j = 0; j < FLAVOR_COUNT; j++) { for (i = 0; i < 10; i++) { @@ -346,7 +346,7 @@ void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0) a0->unk352 = 0; } -void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2) +void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2) { u16 i, j; s32 r5, r6; @@ -357,30 +357,30 @@ void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D r6 = ((arg2[i].unk0 - arg1[i].unk0) << 8) / 10; for (j = 0; j < 9; j++) { - arg0->unk64[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1); + graph->unk64[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1); r5 += r6; } - arg0->unk64[j][i].unk0 = arg2[i].unk0; + graph->unk64[j][i].unk0 = arg2[i].unk0; r5 = arg1[i].unk2 << 8; r6 = ((arg2[i].unk2 - arg1[i].unk2) << 8) / 10; for (j = 0; j < 9; j++) { - arg0->unk64[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1); + graph->unk64[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1); r5 += r6; } - arg0->unk64[j][i].unk2 = arg2[i].unk2; + graph->unk64[j][i].unk2 = arg2[i].unk2; } - arg0->unk352 = 0; + graph->unk352 = 0; } -bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0) +bool32 TransitionConditionGraph(struct ConditionGraph *graph) { - if (a0->unk352 < 10) + if (graph->unk352 < 10) { - sub_81D2230(a0); - return (++a0->unk352 != 10); + sub_81D2230(graph); + return (++graph->unk352 != 10); } else { @@ -388,48 +388,48 @@ bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0) } } -void sub_81D20AC(struct UnknownStruct_81D1ED4 *a0) +void sub_81D20AC(struct ConditionGraph *a0) { a0->unk355 = 0; } -bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0) +bool8 sub_81D20BC(struct ConditionGraph *graph) { struct ScanlineEffectParams params; - switch (arg0->unk355) + switch (graph->unk355) { case 0: ScanlineEffect_Clear(); - arg0->unk355++; + graph->unk355++; return TRUE; case 1: - params = sUnknown_08625404; + params = sConditionGraphScanline; ScanlineEffect_SetParams(params); - arg0->unk355++; + graph->unk355++; return FALSE; default: return FALSE; } } -void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0) +void sub_81D2108(struct ConditionGraph *graph) { u16 i; - if (arg0->unk354 == 0) + if (graph->unk354 == 0) return; - sub_81D24A4(arg0); - sub_81D2634(arg0); + sub_81D24A4(graph); + sub_81D2634(graph); for (i = 0; i < 66; i++) { - gScanlineEffectRegBuffers[1][(i + 55) * 2] = gScanlineEffectRegBuffers[0][(i + 55) * 2] = (arg0->unk140[i][0] << 8) | (arg0->unk140[i][1]); - gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (arg0->unk248[i][0] << 8) | (arg0->unk248[i][1]); + gScanlineEffectRegBuffers[1][(i + 55) * 2] = gScanlineEffectRegBuffers[0][(i + 55) * 2] = (graph->unk140[i][0] << 8) | (graph->unk140[i][1]); + gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (graph->unk248[i][0] << 8) | (graph->unk248[i][1]); } - arg0->unk354 = 0; + graph->unk354 = 0; } void sub_81D21DC(u8 bg) @@ -442,24 +442,24 @@ void sub_81D21DC(u8 bg) // Unset the WINOUT flag for the bg. flags = (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) & ~(1 << bg); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); - SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0, 0x9B)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0x38, 0x79)); - SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0x38, 0x79)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 0, DISPLAY_WIDTH)); + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE( 0, 155)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(56, 121)); + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(56, 121)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); SetGpuReg(REG_OFFSET_WINOUT, flags); } -void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0) +void sub_81D2230(struct ConditionGraph *graph) { u16 i; - for (i = 0; i < 5; i++) - arg0->unk12C[i] = arg0->unk64[arg0->unk352][i]; + for (i = 0; i < FLAVOR_COUNT; i++) + graph->unk12C[i] = graph->unk64[graph->unk352][i]; - arg0->unk354 = 1; + graph->unk354 = 1; } -static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5) +static void sub_81D2278(struct ConditionGraph *graph, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5) { u16 i, r8, r10, r0, var_30; u16 *ptr; @@ -510,8 +510,8 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un break; } - arg0->unk350 = r10 + i; - arg1 += (arg0->unk350 - 56) * 2; + graph->unk350 = r10 + i; + arg1 += (graph->unk350 - 56) * 2; for (; i < r8; i++) { arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; @@ -536,8 +536,8 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un arg1 += 2; } - arg0->unk350 = r10 + i; - arg5 += (arg0->unk350 - 56) * 2; + graph->unk350 = r10 + i; + arg5 += (graph->unk350 - 56) * 2; for (; i < r8; i++) { arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; @@ -549,7 +549,7 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un } else { - arg0->unk350 = r10; + graph->unk350 = r10; arg1 += (r10 - 56) * 2; arg5 += (r10 - 56) * 2; arg1[1] = arg2->unk0 + 1; @@ -561,87 +561,87 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un ptr[arg4] = arg4 + var_30; } -static void sub_81D24A4(struct UnknownStruct_81D1ED4 *arg0) +static void sub_81D24A4(struct ConditionGraph *graph) { u16 i, r6, varMax; - if (arg0->unk12C[0].unk2 < arg0->unk12C[1].unk2) + if (graph->unk12C[0].unk2 < graph->unk12C[1].unk2) { - r6 = arg0->unk12C[0].unk2; - sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[0], &arg0->unk12C[1], 1, NULL); + r6 = graph->unk12C[0].unk2; + sub_81D2278(graph, graph->unk140[0], &graph->unk12C[0], &graph->unk12C[1], 1, NULL); } else { - r6 = arg0->unk12C[1].unk2; - sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[0], 0, NULL); + r6 = graph->unk12C[1].unk2; + sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[0], 0, NULL); } - sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[2], 1, NULL); + sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[2], 1, NULL); - i = (arg0->unk12C[2].unk2 <= arg0->unk12C[3].unk2); - sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[2], &arg0->unk12C[3], i, arg0->unk248[0]); + i = (graph->unk12C[2].unk2 <= graph->unk12C[3].unk2); + sub_81D2278(graph, graph->unk140[0], &graph->unk12C[2], &graph->unk12C[3], i, graph->unk248[0]); for (i = 56; i < r6; i++) { - arg0->unk140[i - 56][0] = 0; - arg0->unk140[i - 56][1] = 0; + graph->unk140[i - 56][0] = 0; + graph->unk140[i - 56][1] = 0; } - for (i = arg0->unk12C[0].unk2; i <= arg0->unk350; i++) - arg0->unk140[i - 56][0] = 155; + for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++) + graph->unk140[i - 56][0] = 155; - varMax = max(arg0->unk350, arg0->unk12C[2].unk2); + varMax = max(graph->unk350, graph->unk12C[2].unk2); for (i = varMax + 1; i < 122; i++) { - arg0->unk140[i - 56][0] = 0; - arg0->unk140[i - 56][1] = 0; + graph->unk140[i - 56][0] = 0; + graph->unk140[i - 56][1] = 0; } for (i = 56; i < 122; i++) { - if (arg0->unk140[i - 56][0] == 0 && arg0->unk140[i - 56][1] != 0) - arg0->unk140[i - 56][0] = 155; + if (graph->unk140[i - 56][0] == 0 && graph->unk140[i - 56][1] != 0) + graph->unk140[i - 56][0] = 155; } } -static void sub_81D2634(struct UnknownStruct_81D1ED4 *arg0) +static void sub_81D2634(struct ConditionGraph *graph) { s32 i, r6, varMax; - if (arg0->unk12C[0].unk2 < arg0->unk12C[4].unk2) + if (graph->unk12C[0].unk2 < graph->unk12C[4].unk2) { - r6 = arg0->unk12C[0].unk2; - sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[0], &arg0->unk12C[4], 0, NULL); + r6 = graph->unk12C[0].unk2; + sub_81D2278(graph, graph->unk248[0], &graph->unk12C[0], &graph->unk12C[4], 0, NULL); } else { - r6 = arg0->unk12C[4].unk2; - sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[0], 1, NULL); + r6 = graph->unk12C[4].unk2; + sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[0], 1, NULL); } - sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[3], 0, NULL); + sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[3], 0, NULL); for (i = 56; i < r6; i++) { - arg0->unk140[i + 10][0] = 0; - arg0->unk140[i + 10][1] = 0; + graph->unk140[i + 10][0] = 0; + graph->unk140[i + 10][1] = 0; } - for (i = arg0->unk12C[0].unk2; i <= arg0->unk350; i++) - arg0->unk140[i + 10][1] = 155; + for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++) + graph->unk140[i + 10][1] = 155; - varMax = max(arg0->unk350, arg0->unk12C[3].unk2 + 1); + varMax = max(graph->unk350, graph->unk12C[3].unk2 + 1); for (i = varMax; i < 122; i++) { - arg0->unk140[i + 10][0] = 0; - arg0->unk140[i + 10][1] = 0; + graph->unk140[i + 10][0] = 0; + graph->unk140[i + 10][1] = 0; } for (i = 0; i < 66; i++) { - if (arg0->unk248[i][0] >= arg0->unk248[i][1]) + if (graph->unk248[i][0] >= graph->unk248[i][1]) { - arg0->unk248[i][1] = 0; - arg0->unk248[i][0] = 0; + graph->unk248[i][1] = 0; + graph->unk248[i][0] = 0; } } } @@ -985,7 +985,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId { u16 i; - // In this and the below 2 functions, numMons can be passed as the number of menu selections (which includes Cancel) + // In this and the below 2 functions, numMons is passed as the number of menu selections (which includes Cancel) // To indicate that the Cancel needs to be subtracted they pass an additional bool // Unclear why they didn't just subtract 1 when it gets passed instead if (!excludesCancel) @@ -1020,7 +1020,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId } } -void GetConditionMenuMonConditions(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel) +void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel) { u16 i; @@ -1029,25 +1029,25 @@ void GetConditionMenuMonConditions(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen if (partyId != numMons) { - arg0->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - arg0->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - arg0->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - arg0->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - arg0->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + graph->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + graph->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + graph->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + graph->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + graph->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF) ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u : 9; - sub_81D2754(arg0->unk0[id], arg0->unk14[id]); + sub_81D2754(graph->unk0[id], graph->unk14[id]); } else { for (i = 0; i < FLAVOR_COUNT; i++) { - arg0->unk0[id][i] = 0; - arg0->unk14[id][i].unk0 = 155; - arg0->unk14[id][i].unk2 = 91; + graph->unk0[id][i] = 0; + graph->unk14[id][i].unk0 = 155; + graph->unk14[id][i].unk2 = 91; } } } @@ -1068,38 +1068,38 @@ void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, } } -bool8 sub_81D312C(s16 *var) +bool8 MoveConditionMonOnscreen(s16 *x) { - *var += 24; - if (*var > 0) - *var = 0; + *x += 24; + if (*x > 0) + *x = 0; - return (*var != 0); + return (*x != 0); } -bool8 sub_81D3150(s16 *var) +bool8 MoveConditionMonOffscreen(s16 *x) { - *var -= 24; - if (*var < -80) - *var = -80; + *x -= 24; + if (*x < -80) + *x = -80; - return (*var != -80); + return (*x != -80); } -bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1) +bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x) { - bool8 var1 = sub_81D2074(arg0); - bool8 var2 = sub_81D312C(arg1); + bool8 graphUpdating = TransitionConditionGraph(graph); + bool8 monUpdating = MoveConditionMonOnscreen(x); - return ((var1 != 0) || (var2 != 0)); + return (graphUpdating || monUpdating); } -bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1) +bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x) { - bool8 var1 = sub_81D2074(arg0); - bool8 var2 = sub_81D3150(arg1); + bool8 graphUpdating = TransitionConditionGraph(graph); + bool8 monUpdating = MoveConditionMonOffscreen(x); - return ((var1 != 0) || (var2 != 0)); + return (graphUpdating || monUpdating); } static const u32 sConditionPokeball_Gfx[] = INCBIN_U32("graphics/pokenav/condition/pokeball.4bpp"); @@ -1107,7 +1107,7 @@ static const u32 sConditionPokeballPlaceholder_Gfx[] = INCBIN_U32("graphics/poke static const u16 sConditionSparkle_Gfx[] = INCBIN_U16("graphics/pokenav/condition/sparkle.gbapal"); static const u32 sConditionSparkle_Pal[] = INCBIN_U32("graphics/pokenav/condition/sparkle.4bpp"); -static const struct OamData sOamData_8625A20 = +static const struct OamData sOam_ConditionMonPic = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -1124,7 +1124,7 @@ static const struct OamData sOamData_8625A20 = .affineParam = 0 }; -static const struct OamData sOamData_8625A28 = +static const struct OamData sOam_ConditionSelectionIcon = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -1141,41 +1141,41 @@ static const struct OamData sOamData_8625A28 = .affineParam = 0 }; -static const union AnimCmd sSpriteAnim_8625A30[] = +static const union AnimCmd sAnim_ConditionSelectionIcon_Selected[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8625A38[] = +static const union AnimCmd sAnim_ConditionSelectionIcon_Unselected[] = { ANIMCMD_FRAME(4, 5), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_8625A40[] = +static const union AnimCmd *const sAnims_ConditionSelectionIcon[] = { - sSpriteAnim_8625A30, - sSpriteAnim_8625A38 + sAnim_ConditionSelectionIcon_Selected, + sAnim_ConditionSelectionIcon_Unselected }; // Just loads the generic data, up to the caller to load the actual sheet/pal for the specific mon void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal) { - struct SpriteSheet dataSheet = {NULL, 0x800, TAG_SPMENU_CONDITION_MON}; + struct SpriteSheet dataSheet = {NULL, 0x800, TAG_CONDITION_MON}; struct SpriteTemplate dataTemplate = { - .tileTag = TAG_SPMENU_CONDITION_MON, - .paletteTag = TAG_SPMENU_CONDITION_MON, - .oam = &sOamData_8625A20, + .tileTag = TAG_CONDITION_MON, + .paletteTag = TAG_CONDITION_MON, + .oam = &sOam_ConditionMonPic, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; - struct SpritePalette dataPal = {NULL, TAG_SPMENU_CONDITION_MON}; + struct SpritePalette dataPal = {NULL, TAG_CONDITION_MON}; *sheet = dataSheet; *template = dataTemplate; @@ -1188,25 +1188,26 @@ void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTempla struct SpriteSheet dataSheets[] = { - {sConditionPokeball_Gfx, 0x100, TAG_SPMENU_CONDITION_BALL}, - {sConditionPokeballPlaceholder_Gfx, 0x20, TAG_SPMENU_CONDITION_BALL_PLACEHOLDER}, - {gPokenavConditionCancel_Gfx, 0x100, TAG_SPMENU_CONDITION_CANCEL}, + {sConditionPokeball_Gfx, 0x100, TAG_CONDITION_BALL}, + {sConditionPokeballPlaceholder_Gfx, 0x20, TAG_CONDITION_BALL_PLACEHOLDER}, + {gPokenavConditionCancel_Gfx, 0x100, TAG_CONDITION_CANCEL}, {}, }; struct SpritePalette dataPals[] = { - {gPokenavConditionCancel_Pal, TAG_SPMENU_CONDITION_BALL}, - {gPokenavConditionCancel_Pal + 16, TAG_SPMENU_CONDITION_CANCEL}, + {gPokenavConditionCancel_Pal, TAG_CONDITION_BALL}, + {gPokenavConditionCancel_Pal + 16, TAG_CONDITION_CANCEL}, {}, }; + // Tag is overwritten for the other selection icons struct SpriteTemplate dataTemplate = { - .tileTag = TAG_SPMENU_CONDITION_BALL, - .paletteTag = TAG_SPMENU_CONDITION_BALL, - .oam = &sOamData_8625A28, - .anims = sSpriteAnimTable_8625A40, + .tileTag = TAG_CONDITION_BALL, + .paletteTag = TAG_CONDITION_BALL, + .oam = &sOam_ConditionSelectionIcon, + .anims = sAnims_ConditionSelectionIcon, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, @@ -1221,30 +1222,37 @@ void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTempla *(pals++) = dataPals[i]; } +#define sSparkleId data[0] +#define sDelayTimer data[1] +#define sNumExtraSparkles data[2] +#define sCurSparkleId data[3] +#define sMonSpriteId data[4] +#define sNextSparkleSpriteId data[5] + void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal) { - struct SpriteSheet dataSheet = {sConditionSparkle_Pal, 0x380, TAG_SPMENU_CONDITION_SPARKLE}; - struct SpritePalette dataPal = {sConditionSparkle_Gfx, TAG_SPMENU_CONDITION_SPARKLE}; + struct SpriteSheet dataSheet = {sConditionSparkle_Pal, 0x380, TAG_CONDITION_SPARKLE}; + struct SpritePalette dataPal = {sConditionSparkle_Gfx, TAG_CONDITION_SPARKLE}; *sheet = dataSheet; *pal = dataPal; } -static void sub_81D32D4(struct Sprite *sprite) +static void SpriteCB_ConditionSparkle_DoNextAfterDelay(struct Sprite *sprite) { - if (++sprite->data[1] > 60) + if (++sprite->sDelayTimer > 60) { - sprite->data[1] = 0; - sub_81D3408(sprite); + sprite->sDelayTimer = 0; + SetNextConditionSparkle(sprite); } } -static void sub_81D32F4(struct Sprite *sprite) +static void SpriteCB_ConditionSparkle_WaitForAllAnim(struct Sprite *sprite) { if (sprite->animEnded) { - sprite->data[1] = 0; - sprite->callback = sub_81D32D4; + sprite->sDelayTimer = 0; + sprite->callback = SpriteCB_ConditionSparkle_DoNextAfterDelay; } } @@ -1274,31 +1282,19 @@ static const union AnimCmd sAnim_ConditionSparkle[] = static const union AnimCmd *const sAnims_ConditionSparkle[] = { - sAnim_ConditionSparkle, - sAnim_ConditionSparkle + 2, + &sAnim_ConditionSparkle[0], // Only this entry is used + &sAnim_ConditionSparkle[2], + &sAnim_ConditionSparkle[4], + &sAnim_ConditionSparkle[6], + &sAnim_ConditionSparkle[8], // Here below OOB, will crash if used + &sAnim_ConditionSparkle[10], + &sAnim_ConditionSparkle[12], }; -// unused -static const union AnimCmd *const sSpriteAnimTable_8625B00[] = -{ - sAnim_ConditionSparkle + 4, - sAnim_ConditionSparkle + 6, -}; - -// unused -static const union AnimCmd *const sSpriteAnimTable_8625B08[] = -{ - sAnim_ConditionSparkle + 8, - sAnim_ConditionSparkle + 10, -}; - -// unused -static const union AnimCmd *const *const sUnknown_08625B10 = sSpriteAnimTable_8625B08; - static const struct SpriteTemplate sSpriteTemplate_ConditionSparkle = { - .tileTag = TAG_SPMENU_CONDITION_SPARKLE, - .paletteTag = TAG_SPMENU_CONDITION_SPARKLE, + .tileTag = TAG_CONDITION_SPARKLE, + .paletteTag = TAG_CONDITION_SPARKLE, .oam = &sOam_ConditionSparkle, .anims = sAnims_ConditionSparkle, .images = NULL, @@ -1306,37 +1302,37 @@ static const struct SpriteTemplate sSpriteTemplate_ConditionSparkle = .callback = SpriteCB_ConditionSparkle, }; -static const s16 gUnknown_08625B2C[][2] = +static const s16 sConditionSparkleCoords[MAX_CONDITION_SPARKLES][2] = { - {0, -35}, - {20, -28}, - {33, -10}, - {33, 10}, - {20, 28}, - {0, 35}, - {-20, 28}, - {-33, 10}, - {-33, -10}, - {-20, -28}, + { 0, -35}, + { 20, -28}, + { 33, -10}, + { 33, 10}, + { 20, 28}, + { 0, 35}, + {-20, 28}, + {-33, 10}, + {-33, -10}, + {-20, -28}, }; -static void sub_81D3314(struct Sprite *sprite) +static void SetConditionSparklePosition(struct Sprite *sprite) { - struct Sprite *sprite2 = &gSprites[sprite->data[4]]; + struct Sprite *mon = &gSprites[sprite->sMonSpriteId]; - if (sprite2 != NULL) + if (mon != NULL) { - sprite->pos1.x = sprite2->pos1.x + sprite2->pos2.x + gUnknown_08625B2C[sprite->data[0]][0]; - sprite->pos1.y = sprite2->pos1.y + sprite2->pos2.y + gUnknown_08625B2C[sprite->data[0]][1]; + sprite->pos1.x = mon->pos1.x + mon->pos2.x + sConditionSparkleCoords[sprite->sSparkleId][0]; + sprite->pos1.y = mon->pos1.y + mon->pos2.y + sConditionSparkleCoords[sprite->sSparkleId][1]; } else { - sprite->pos1.x = gUnknown_08625B2C[sprite->data[0]][0] + 40; - sprite->pos1.y = gUnknown_08625B2C[sprite->data[0]][1] + 104; + sprite->pos1.x = sConditionSparkleCoords[sprite->sSparkleId][0] + 40; + sprite->pos1.y = sConditionSparkleCoords[sprite->sSparkleId][1] + 104; } } -static void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites) +static void InitConditionSparkles(u8 count, bool8 allowFirstShowAll, struct Sprite **sprites) { u16 i; @@ -1344,35 +1340,34 @@ static void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites) { if (sprites[i] != NULL) { - sprites[i]->data[0] = i; - sprites[i]->data[1] = (i * 16) + 1; - sprites[i]->data[2] = arg0; - sprites[i]->data[3] = i; - if (arg1 == 0 || arg0 != 9) + sprites[i]->sSparkleId = i; + sprites[i]->sDelayTimer = (i * 16) + 1; + sprites[i]->sNumExtraSparkles = count; + sprites[i]->sCurSparkleId = i; + if (!allowFirstShowAll || count != MAX_CONDITION_SPARKLES - 1) { sprites[i]->callback = SpriteCB_ConditionSparkle; } else { - sub_81D3314(sprites[i]); - sub_81D35E8(sprites[i]); - sprites[i]->callback = sub_81D32F4; + SetConditionSparklePosition(sprites[i]); + ShowAllConditionSparkles(sprites[i]); + sprites[i]->callback = SpriteCB_ConditionSparkle_WaitForAllAnim; sprites[i]->invisible = FALSE; } } } } -static void sub_81D3408(struct Sprite *sprite) +static void SetNextConditionSparkle(struct Sprite *sprite) { u16 i; - u8 id = sprite->data[5]; - - for (i = 0; i < sprite->data[2] + 1; i++) + u8 id = sprite->sNextSparkleSpriteId; + for (i = 0; i < sprite->sNumExtraSparkles + 1; i++) { - gSprites[id].data[1] = (gSprites[id].data[0] * 16) + 1; + gSprites[id].sDelayTimer = (gSprites[id].sSparkleId * 16) + 1; gSprites[id].callback = SpriteCB_ConditionSparkle; - id = gSprites[id].data[5]; + id = gSprites[id].sNextSparkleSpriteId; } } @@ -1396,9 +1391,9 @@ void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 _ { sprites[i] = &gSprites[spriteId]; sprites[i]->invisible = TRUE; - sprites[i]->data[4] = monSpriteId; + sprites[i]->sMonSpriteId = monSpriteId; if (i != 0) - sprites[i - 1]->data[5] = spriteId; + sprites[i - 1]->sNextSparkleSpriteId = spriteId; else firstSpriteId = spriteId; } @@ -1408,8 +1403,8 @@ void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 _ } } - sprites[count]->data[5] = firstSpriteId; - sub_81D338C(count, 1, sprites); + sprites[count]->sNextSparkleSpriteId = firstSpriteId; + InitConditionSparkles(count, TRUE, sprites); } void DestroyConditionSparkleSprites(struct Sprite **sprites) @@ -1433,35 +1428,38 @@ void DestroyConditionSparkleSprites(struct Sprite **sprites) void FreeConditionSparkles(struct Sprite **sprites) { DestroyConditionSparkleSprites(sprites); - FreeSpriteTilesByTag(TAG_SPMENU_CONDITION_SPARKLE); - FreeSpritePaletteByTag(TAG_SPMENU_CONDITION_SPARKLE); + FreeSpriteTilesByTag(TAG_CONDITION_SPARKLE); + FreeSpritePaletteByTag(TAG_CONDITION_SPARKLE); } static void SpriteCB_ConditionSparkle(struct Sprite *sprite) { - if (sprite->data[1] != 0) + // Delay, then do sparkle anim + if (sprite->sDelayTimer != 0) { - if (--sprite->data[1] != 0) + if (--sprite->sDelayTimer != 0) return; SeekSpriteAnim(sprite, 0); sprite->invisible = FALSE; } - sub_81D3314(sprite); + SetConditionSparklePosition(sprite); + + // Set up next sparkle if (sprite->animEnded) { sprite->invisible = TRUE; - if (sprite->data[3] == sprite->data[2]) + if (sprite->sCurSparkleId == sprite->sNumExtraSparkles) { - if (sprite->data[3] == 9) + if (sprite->sCurSparkleId == MAX_CONDITION_SPARKLES - 1) { - sub_81D35E8(sprite); - sprite->callback = sub_81D32F4; + ShowAllConditionSparkles(sprite); + sprite->callback = SpriteCB_ConditionSparkle_WaitForAllAnim; } else { - sprite->callback = sub_81D32D4; + sprite->callback = SpriteCB_ConditionSparkle_DoNextAfterDelay; } } else @@ -1471,18 +1469,25 @@ static void SpriteCB_ConditionSparkle(struct Sprite *sprite) } } -static void sub_81D35E8(struct Sprite *sprite) +static void ShowAllConditionSparkles(struct Sprite *sprite) { - u8 i, id = sprite->data[5]; + u8 i, id = sprite->sNextSparkleSpriteId; - for (i = 0; i < sprite->data[2] + 1; i++) + for (i = 0; i < sprite->sNumExtraSparkles + 1; i++) { SeekSpriteAnim(&gSprites[id], 0); gSprites[id].invisible = FALSE; - id = gSprites[id].data[5]; + id = gSprites[id].sNextSparkleSpriteId; } } +#undef sSparkleId +#undef sDelayTimer +#undef sNumExtraSparkles +#undef sCurSparkleId +#undef sMonSpriteId +#undef sNextSparkleSpriteId + static const u8 *const sLvlUpStatStrings[NUM_STATS] = { gText_MaxHP, diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c index 84e2a96825..84e7615336 100644 --- a/src/pokenav_conditions_1.c +++ b/src/pokenav_conditions_1.c @@ -25,7 +25,7 @@ struct PokenavSub11 u8 fill2[0x6320 - 0x6308]; u8 unk6320[3][24]; u8 unk6368[3][64]; - struct UnknownStruct_81D1ED4 unk6428; + struct ConditionGraph unk6428; u8 unk6780[3]; u8 unk6783[3]; s8 unk6786; @@ -546,7 +546,7 @@ u16 sub_81CDC60(void) return unkPtr->unk2; } -struct UnknownStruct_81D1ED4 *sub_81CDC70(void) +struct ConditionGraph *sub_81CDC70(void) { struct PokenavSub11 *structPtr = GetSubstructPtr(11); return &structPtr->unk6428; diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c index 764d5c63fb..cd1ca0aa51 100644 --- a/src/pokenav_conditions_2.c +++ b/src/pokenav_conditions_2.c @@ -323,7 +323,7 @@ u32 sub_81CDE94(s32 state) sub_81CEE74(TRUE); return LT_INC_AND_PAUSE; case 20: - if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814)) { ResetConditionSparkleSprites(structPtr->unk28e0); if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50()) @@ -348,7 +348,7 @@ u32 sub_81CE2D0(s32 state) DestroyConditionSparkleSprites(structPtr->unk28e0); return 1; case 1: - if (sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) + if (TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814)) return 2; sub_81CEE74(FALSE); return 1; @@ -373,7 +373,7 @@ u32 sub_81CE2D0(s32 state) u32 sub_81CE37C(s32 state) { struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - struct UnknownStruct_81D1ED4 *unkPtr = sub_81CDC70(); + struct ConditionGraph *unkPtr = sub_81CDC70(); switch (state) { @@ -388,10 +388,10 @@ u32 sub_81CE37C(s32 state) DestroyConditionSparkleSprites(structPtr->unk28e0); return 1; case 3: - sub_81D2074(unkPtr); + TransitionConditionGraph(unkPtr); return 1; case 4: - if (!sub_81D3150(&structPtr->unk1814)) + if (!MoveConditionMonOffscreen(&structPtr->unk1814)) { sub_81CED30(sub_81CDC84()); return 1; @@ -412,7 +412,7 @@ u32 sub_81CE37C(s32 state) return 2; case 9: unkPtr = sub_81CDC70(); - if (!sub_81D3178(unkPtr, &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->unk1814)) { ResetConditionSparkleSprites(structPtr->unk28e0); if (sub_81CDD5C() != TRUE && sub_81CDC60() == sub_81CDC50()) @@ -459,7 +459,7 @@ u32 sub_81CE4D8(s32 state) return 1; return 2; case 8: - if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814)) { ResetConditionSparkleSprites(structPtr->unk28e0); CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); @@ -488,7 +488,7 @@ u32 sub_81CE5E4(s32 state) DestroyConditionSparkleSprites(structPtr->unk28e0); return 1; case 3: - if (!sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814)) return 1; return 2; case 4: @@ -834,7 +834,7 @@ void sub_81CED30(u8 var) void sub_81CEE44(void) { - struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + struct ConditionGraph *unk = sub_81CDC70(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -857,17 +857,17 @@ void sub_81CEE74(bool8 showBg) void sub_81CEE90(void) { - struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + struct ConditionGraph *unk = sub_81CDC70(); u8 id = sub_81CDC84(); gUnknown_030012BC = id; sub_81D1F84(unk, unk->unk14[3], unk->unk14[id]); - sub_81D2074(unk); + TransitionConditionGraph(unk); } void sub_81CEEC8(void) { - struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + struct ConditionGraph *unk = sub_81CDC70(); if (sub_81CDD5C() || sub_81CDC60() != sub_81CDC50() - 1) sub_81D1F84(unk, unk->unk14[sub_81CDC84()], unk->unk14[3]); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 30d5315146..ebb237d544 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -54,21 +54,21 @@ struct UsePokeblockSession struct Pokemon *mon; u8 stringBuffer[64]; u8 mainState; - u8 unused_1; + u8 unused1; u8 timer; u8 statId; u8 numEnhancements; - u8 unused_2; + u8 unused2; bool8 monInTopHalf; - u8 conditionsPreBlock[FLAVOR_COUNT]; - u8 conditionsPostBlock[FLAVOR_COUNT]; + u8 conditionsBeforeBlock[FLAVOR_COUNT]; + u8 conditionsAfterBlock[FLAVOR_COUNT]; u8 enhancements[FLAVOR_COUNT]; s16 pokeblockStatBoosts[FLAVOR_COUNT]; u8 numSelections; // num in party + 1 (for Cancel) u8 curSelection; bool8 (*loadNewSelection)(void); u8 helperState; - u8 unused_3; + u8 unused3; u8 natureText[34]; }; @@ -85,30 +85,30 @@ struct UsePokeblockMenuPokemon struct UsePokeblockMenu { - /*0x0000*/ u8 filler0[4]; // unused - /*0x0000*/ u16 partyPalettes[PARTY_SIZE][0x40]; - /*0x0304*/ u8 partySheets[NUM_SELECTIONS_LOADED][0x2000]; - /*0x6304*/ u8 filler_6304[0x1000]; // unused? - /*0x7304*/ u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; - /*0x7B06*/ u8 selectionIconSpriteIds[PARTY_SIZE + 1]; - /*0x7B0E*/ s16 curMonXOffset; - /*0x7B10*/ u8 curMonSpriteId; - /*0x7B12*/ u16 curMonPalette; - /*0x7B12*/ u16 curMonSheet; - /*0x7B12*/ u8 *curMonTileStart; - /*0x7B1C*/ struct Sprite *sparkles[MAX_CONDITION_SPARKLES]; - /*0x7B44*/ struct Sprite *condition[2]; - /*0x7B4C*/ u8 field_7B4C; - /*0x7B4D*/ u8 locationStrings[NUM_SELECTIONS_LOADED][24]; // Gets an "in party" or "in box #" string that never gets printed - /*0x7B95*/ u8 monNameStrings[NUM_SELECTIONS_LOADED][64]; - /*0x7C58*/ struct UnknownStruct_81D1ED4 field_7C58; - /*0x7FB0*/ u8 numSparkles[NUM_SELECTIONS_LOADED]; - /*0x7FB3*/ s8 curLoadId; - /*0x7FB4*/ s8 nextLoadId; - /*0x7FB5*/ s8 prevLoadId; - /*0x7FB6*/ s8 toLoadId; - /*0x7FB8*/ struct UsePokeblockMenuPokemon party[PARTY_SIZE]; - /*0x7FD0*/ struct UsePokeblockSession info; + u32 unused; + u16 partyPalettes[PARTY_SIZE][0x40]; + u8 partySheets[NUM_SELECTIONS_LOADED][0x2000]; + u8 unusedBuffer[0x1000]; + u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; + u8 selectionIconSpriteIds[PARTY_SIZE + 1]; + s16 curMonXOffset; + u8 curMonSpriteId; + u16 curMonPalette; + u16 curMonSheet; + u8 *curMonTileStart; + struct Sprite *sparkles[MAX_CONDITION_SPARKLES]; + struct Sprite *condition[2]; + u8 toLoadSelection; + u8 locationStrings[NUM_SELECTIONS_LOADED][24]; // Gets an "in party" or "in box #" string that never gets printed + u8 monNameStrings[NUM_SELECTIONS_LOADED][64]; + struct ConditionGraph graph; + u8 numSparkles[NUM_SELECTIONS_LOADED]; + s8 curLoadId; + s8 nextLoadId; + s8 prevLoadId; + s8 toLoadId; + struct UsePokeblockMenuPokemon party[PARTY_SIZE]; + struct UsePokeblockSession info; }; static void SetUsePokeblockCallback(void (*func)(void)); @@ -120,7 +120,7 @@ static void CB2_ShowUsePokeblockMenuForResults(void); static void ShowUsePokeblockMenuForResults(void); static void LoadPartyInfo(void); static void LoadAndCreateSelectionIcons(void); -static u8 GetNumNonEggPartyMons(u8); +static u8 GetSelectionIdFromPartyId(u8); static bool8 LoadConditionTitle(void); static bool8 LoadUsePokeblockMenuGfx(void); static void UpdateMonPic(u8); @@ -170,13 +170,13 @@ static EWRAM_DATA u8 *sGraph_Gfx = NULL; static EWRAM_DATA u8 *sMonFrame_TilemapPtr = NULL; static EWRAM_DATA struct UsePokeblockMenu *sMenu = NULL; -static const u32 sMonFrame_Pal[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame_pal.bin"); // TODO: convert to .pal +static const u32 sMonFrame_Pal[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame_pal.bin"); static const u32 sMonFrame_Gfx[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.4bpp"); static const u32 sMonFrame_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.bin"); static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/graph_data.bin"); -// For some reason the condition/flavors aren't listed in order in this file -// Normally they would go Cool/Spicy, Beauty/Dry, Cute/Sweet, Smart/Bitter, Tough/Sour +// The condition/flavors aren't listed in their normal order in this file, they're listed as shown on the graph going counter-clockwise +// Normally they would go Cool/Spicy, Beauty/Dry, Cute/Sweet, Smart/Bitter, Tough/Sour (also graph order, but clockwise) static const u32 sMonDataConditions[FLAVOR_COUNT] = { MON_DATA_COOL, @@ -370,19 +370,19 @@ static const struct OamData sOam_Condition = .paletteNum = 0, }; -static const union AnimCmd gSpriteAnim_085DFD7C[] = +static const union AnimCmd sAnim_Condition_0[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_085DFD84[] = +static const union AnimCmd sAnim_Condition_1[] = { ANIMCMD_FRAME(32, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_085DFD8C[] = +static const union AnimCmd sAnim_Condition_2[] = { ANIMCMD_FRAME(64, 5), ANIMCMD_END @@ -390,9 +390,9 @@ static const union AnimCmd gSpriteAnim_085DFD8C[] = static const union AnimCmd *const sAnims_Condition[] = { - gSpriteAnim_085DFD7C, - gSpriteAnim_085DFD84, - gSpriteAnim_085DFD8C + sAnim_Condition_0, + sAnim_Condition_1, + sAnim_Condition_2 }; static const struct SpriteTemplate sSpriteTemplate_Condition = @@ -429,7 +429,7 @@ static void CB2_ReturnAndChooseMonToGivePokeblock(void) sInfo = &sMenu->info; sInfo->pokeblock = sPokeblock; sInfo->exitCallback = sExitCallback; - gPokeblockMonId = GetNumNonEggPartyMons(gPokeblockMonId); + gPokeblockMonId = GetSelectionIdFromPartyId(gPokeblockMonId); sInfo->monInTopHalf = (gPokeblockMonId <= PARTY_SIZE / 2) ? FALSE : TRUE; SetUsePokeblockCallback(LoadUsePokeblockMenu); SetMainCallback2(CB2_ReturnToUsePokeblockMenu); @@ -470,7 +470,7 @@ static void VBlankCB_UsePokeblockMenu(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_81D2108(&sMenu->field_7C58); + sub_81D2108(&sMenu->graph); ScanlineEffect_InitHBlankDmaTransfer(); } @@ -486,7 +486,7 @@ static void LoadUsePokeblockMenu(void) { case 0: sMenu->curMonSpriteId = 0xFF; - sub_81D1ED4(&sMenu->field_7C58); + sub_81D1ED4(&sMenu->graph); sInfo->mainState++; break; case 1: @@ -529,26 +529,26 @@ static void LoadUsePokeblockMenu(void) sInfo->mainState++; break; case 9: - if (!sub_81D312C(&sMenu->curMonXOffset)) + if (!MoveConditionMonOnscreen(&sMenu->curMonXOffset)) sInfo->mainState++; break; case 10: sInfo->mainState++; break; case 11: - sub_81D2754(sMenu->field_7C58.unk0[0], sMenu->field_7C58.unk14[0]); - sub_81D20AC(&sMenu->field_7C58); + sub_81D2754(sMenu->graph.unk0[0], sMenu->graph.unk14[0]); + sub_81D20AC(&sMenu->graph); sInfo->mainState++; break; case 12: - if (!sub_81D20BC(&sMenu->field_7C58)) + if (!sub_81D20BC(&sMenu->graph)) { - sub_81D1F84(&sMenu->field_7C58, sMenu->field_7C58.unk14[0], sMenu->field_7C58.unk14[0]); + sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[0], sMenu->graph.unk14[0]); sInfo->mainState++; } break; case 13: - sub_81D2230(&sMenu->field_7C58); + sub_81D2230(&sMenu->graph); sInfo->mainState++; break; case 14: @@ -782,13 +782,13 @@ static void ShowPokeblockResults(void) break; case 2: CalculateConditionEnhancements(); - sub_81D2754(sInfo->conditionsPostBlock, sMenu->field_7C58.unk14[3]); - sub_81D1F84(&sMenu->field_7C58, sMenu->field_7C58.unk14[sMenu->curLoadId], sMenu->field_7C58.unk14[3]); + sub_81D2754(sInfo->conditionsAfterBlock, sMenu->graph.unk14[3]); + sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[3]); LoadAndCreateUpDownSprites(); sInfo->mainState++; break; case 3: - var = sub_81D2074(&sMenu->field_7C58); + var = TransitionConditionGraph(&sMenu->graph); if (!var) { CalculateNumAdditionalSparkles(GetPartyIdFromSelectionId(sMenu->info.curSelection)); @@ -995,7 +995,7 @@ static void GetMonConditions(struct Pokemon *mon, u8 *data) data[i] = GetMonData(mon, sMonDataConditions[i]); } -static void UpdateMonConditions(struct Pokeblock *pokeblock, struct Pokemon *mon) +static void AddPokeblockToConditions(struct Pokeblock *pokeblock, struct Pokemon *mon) { u16 i; s16 cstat; @@ -1031,11 +1031,11 @@ static void CalculateConditionEnhancements(void) struct Pokemon *mon = gPlayerParty; mon += sMenu->party[sMenu->info.curSelection].monId; - GetMonConditions(mon, sInfo->conditionsPreBlock); - UpdateMonConditions(sInfo->pokeblock, mon); - GetMonConditions(mon, sInfo->conditionsPostBlock); + GetMonConditions(mon, sInfo->conditionsBeforeBlock); + AddPokeblockToConditions(sInfo->pokeblock, mon); + GetMonConditions(mon, sInfo->conditionsAfterBlock); for (i = 0; i < FLAVOR_COUNT; i++) - sInfo->enhancements[i] = sInfo->conditionsPostBlock[i] - sInfo->conditionsPreBlock[i]; + sInfo->enhancements[i] = sInfo->conditionsAfterBlock[i] - sInfo->conditionsBeforeBlock[i]; } static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct Pokemon *mon) @@ -1097,18 +1097,17 @@ static u8 GetPartyIdFromSelectionId(u8 selectionId) return 0; } -// TODO: Update -static u8 GetNumNonEggPartyMons(u8 partyCount) +// Eggs are not viewable on the condition screen, so count how many are skipped over to reach the party id +static u8 GetSelectionIdFromPartyId(u8 partyId) { u8 i, numEggs; - - for (i = 0, numEggs = 0; i < partyCount; i++) + for (i = 0, numEggs = 0; i < partyId; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) numEggs++; } - return partyCount - numEggs; + return partyId - numEggs; } // Unused @@ -1204,7 +1203,7 @@ static void LoadMonInfo(s16 partyId, u8 loadId) bool8 excludesCancel = FALSE; // whether or not numSelections excludes Cancel from the count GetConditionMenuMonNameAndLocString(sMenu->locationStrings[loadId], sMenu->monNameStrings[loadId], boxId, monId, partyId, numSelections, excludesCancel); - GetConditionMenuMonConditions(&sMenu->field_7C58, sMenu->numSparkles, boxId, monId, partyId, loadId, numSelections, excludesCancel); + GetConditionMenuMonConditions(&sMenu->graph, sMenu->numSparkles, boxId, monId, partyId, loadId, numSelections, excludesCancel); GetConditionMenuMonGfx(sMenu->partySheets[loadId], sMenu->partyPalettes[loadId], boxId, monId, partyId, numSelections, excludesCancel); } @@ -1226,8 +1225,8 @@ static void UpdateMonPic(u8 loadId) sMenu->curMonSpriteId = spriteId; if (spriteId == MAX_SPRITES) { - FreeSpriteTilesByTag(TAG_SPMENU_CONDITION_MON); - FreeSpritePaletteByTag(TAG_SPMENU_CONDITION_MON); + FreeSpriteTilesByTag(TAG_CONDITION_MON); + FreeSpritePaletteByTag(TAG_CONDITION_MON); sMenu->curMonSpriteId = 0xFF; } else @@ -1277,7 +1276,7 @@ static void LoadAndCreateSelectionIcons(void) } // Fill placeholder icons for remaining (empty) party slots - spriteTemplate.tileTag = TAG_SPMENU_CONDITION_BALL_PLACEHOLDER; + spriteTemplate.tileTag = TAG_CONDITION_BALL_PLACEHOLDER; for (; i < PARTY_SIZE; i++) { spriteId = CreateSprite(&spriteTemplate, 230, (i * 20) + 8, 0); @@ -1293,7 +1292,7 @@ static void LoadAndCreateSelectionIcons(void) } // Add cancel selection icon at bottom - spriteTemplate.tileTag = TAG_SPMENU_CONDITION_CANCEL; + spriteTemplate.tileTag = TAG_CONDITION_CANCEL; spriteTemplate.callback = SpriteCB_SelectionIconCancel; spriteId = CreateSprite(&spriteTemplate, 222, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) @@ -1420,10 +1419,7 @@ static void UpdateSelection(bool8 up) else newLoadId = sMenu->nextLoadId; - sub_81D1F84( - &sMenu->field_7C58, - sMenu->field_7C58.unk14[sMenu->curLoadId], - sMenu->field_7C58.unk14[newLoadId]); + sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[newLoadId]); if (sMenu->info.curSelection == sMenu->info.numSelections - 1) startedOnMon = FALSE; // moving off of Cancel @@ -1442,7 +1438,7 @@ static void UpdateSelection(bool8 up) ? sMenu->info.numSelections - 1 : sMenu->info.curSelection - 1; - sMenu->field_7B4C = (sMenu->info.curSelection == 0) + sMenu->toLoadSelection = (sMenu->info.curSelection == 0) ? sMenu->info.numSelections - 1 : sMenu->info.curSelection - 1; } @@ -1458,7 +1454,7 @@ static void UpdateSelection(bool8 up) ? sMenu->info.curSelection + 1 : 0; - sMenu->field_7B4C = (sMenu->info.curSelection < sMenu->info.numSelections - 1) + sMenu->toLoadSelection = (sMenu->info.curSelection < sMenu->info.numSelections - 1) ? sMenu->info.curSelection + 1 : 0; } @@ -1491,9 +1487,10 @@ static bool8 LoadNewSelection_CancelToMon(void) sMenu->info.helperState++; break; case 2: - if (!sub_81D3178(&sMenu->field_7C58, &sMenu->curMonXOffset)) + if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset)) { - LoadMonInfo(sMenu->field_7B4C, sMenu->toLoadId); + // Load the new adjacent pokemon (not the one being shown) + LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); sMenu->info.helperState++; } break; @@ -1517,7 +1514,7 @@ static bool8 LoadNewSelection_MonToCancel(void) switch (sMenu->info.helperState) { case 0: - if (!sub_81D31A4(&sMenu->field_7C58, &sMenu->curMonXOffset)) + if (!TryUpdateConditionMonTransitionOff(&sMenu->graph, &sMenu->curMonXOffset)) sMenu->info.helperState++; break; case 1: @@ -1525,7 +1522,7 @@ static bool8 LoadNewSelection_MonToCancel(void) sMenu->info.helperState++; break; case 2: - LoadMonInfo(sMenu->field_7B4C, sMenu->toLoadId); + LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); sMenu->info.helperState++; break; case 3: @@ -1541,8 +1538,8 @@ static bool8 LoadNewSelection_MonToMon(void) switch (sMenu->info.helperState) { case 0: - sub_81D2074(&sMenu->field_7C58); - if (!sub_81D3150(&sMenu->curMonXOffset)) + TransitionConditionGraph(&sMenu->graph); + if (!MoveConditionMonOffscreen(&sMenu->curMonXOffset)) { UpdateMonPic(sMenu->curLoadId); sMenu->info.helperState++; @@ -1553,9 +1550,10 @@ static bool8 LoadNewSelection_MonToMon(void) sMenu->info.helperState++; break; case 2: - if (!sub_81D3178(&sMenu->field_7C58, &sMenu->curMonXOffset)) + if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset)) { - LoadMonInfo(sMenu->field_7B4C, sMenu->toLoadId); + // Load the new adjacent pokemon (not the one being shown) + LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); sMenu->info.helperState++; } break; @@ -1590,9 +1588,9 @@ static void SpriteCB_SelectionIconPokeball(struct Sprite *sprite) static void SpriteCB_SelectionIconCancel(struct Sprite *sprite) { if (sMenu->info.curSelection == sMenu->info.numSelections - 1) - sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_SPMENU_CONDITION_BALL); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_BALL); else - sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_SPMENU_CONDITION_CANCEL); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_CANCEL); } // Calculate the max id for sparkles/stars that appear around the pokemon on the condition screen From fa4d31ba969f95e47b592d64e979fc66e475146a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 12 Aug 2020 19:53:08 -0400 Subject: [PATCH 58/85] Fix newline warning --- gflib/text.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gflib/text.c b/gflib/text.c index d46ac7c0e9..5722d5a438 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -475,7 +475,7 @@ u8 GetLastTextColor(u8 colorType) \ for (; i < toY; i++) \ { \ - asm("":::"sl"); \ + asm("":::"sl"); \ r5 = *(ptr++); \ for (j = fromX; j < toX; j++) \ { \ From 96ef73f88152e5e58f101b41680280d7beaf12d5 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Wed, 12 Aug 2020 19:58:58 -0400 Subject: [PATCH 59/85] removed stray line --- src/battle_anim_flying.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index b4454b2e71..3fc4f20f26 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -701,7 +701,6 @@ static void sub_810E520(struct Sprite *sprite) } } data->unk0_0d = 0; - data->unk2; } data->unk0_1 = 0; break; From 4911849723195b1b7228a28bb294072070376b2e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 13 Aug 2020 03:09:47 -0400 Subject: [PATCH 60/85] Document link contest connection --- common_syms/link.txt | 6 +- include/contest.h | 4 +- include/contest_link.h | 23 +++-- include/link.h | 22 ++--- include/link_rfu.h | 20 ++-- src/battle_controller_player.c | 4 +- src/battle_main.c | 14 +-- src/battle_tower.c | 4 +- src/berry_blender.c | 16 +-- src/berry_crush.c | 30 +++--- src/cable_club.c | 28 +++--- src/contest.c | 35 ++++--- src/contest_link.c | 66 +++++++------ src/contest_link_util.c | 133 +++++++++++++------------ src/contest_util.c | 107 ++++++++++---------- src/dodrio_berry_picking.c | 8 +- src/ereader_screen.c | 4 +- src/field_screen_effect.c | 6 +- src/field_specials.c | 4 +- src/link.c | 156 +++++++++++++++--------------- src/link_rfu_2.c | 109 +++++++++++---------- src/mystery_event_menu.c | 4 +- src/mystery_gift.c | 4 +- src/pokemon_jump.c | 2 +- src/record_mixing.c | 6 +- src/save.c | 6 +- src/script_pokemon_util_80F87D8.c | 2 +- src/trade.c | 46 ++++----- src/trainer_card.c | 2 +- src/union_room.c | 22 ++--- src/union_room_battle.c | 4 +- src/union_room_chat.c | 6 +- 32 files changed, 458 insertions(+), 445 deletions(-) diff --git a/common_syms/link.txt b/common_syms/link.txt index 37c16a557f..4118d1eb4b 100644 --- a/common_syms/link.txt +++ b/common_syms/link.txt @@ -12,9 +12,9 @@ gRecvCmds gLinkStatus gLinkDummy1 gLinkDummy2 -gUnknown_030030EC -gUnknown_030030F0 -gUnknown_030030F4 +gReadyToExitStandby +gReadyToCloseLink +gReadyCloseLinkType gSuppressLinkErrorMessage gWirelessCommType gSavedLinkPlayerCount diff --git a/include/contest.h b/include/contest.h index 1cad717058..5808cb9250 100644 --- a/include/contest.h +++ b/include/contest.h @@ -322,7 +322,7 @@ extern u8 gContestMonPartyIndex; extern u8 gContestPlayerMonIndex; extern u8 gContestantTurnOrder[CONTESTANT_COUNT]; extern u8 gLinkContestFlags; -extern u8 gUnknown_02039F2B; +extern u8 gContestLinkLeaderIndex; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; extern u8 gNumLinkContestPlayers; @@ -342,7 +342,7 @@ void CreateContestMonFromParty(u8 partyIndex); void SetContestants(u8 contestType, u8 rank); void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame); u8 GetContestEntryEligibility(struct Pokemon *pkmn); -void sub_80DB09C(u8 contestCategory); +void CalculateRound1Points(u8 contestCategory); bool8 IsSpeciesNotUnown(u16 species); bool8 Contest_IsMonsTurnDisabled(u8 a); void SaveLinkContestResults(void); diff --git a/include/contest_link.h b/include/contest_link.h index 52b7ee330f..02eb2f11d8 100644 --- a/include/contest_link.h +++ b/include/contest_link.h @@ -1,24 +1,23 @@ #ifndef GUARD_CONTEST_LINK_H #define GUARD_CONTEST_LINK_H -void sub_80FCC88(u8); void sub_80FCC88(u8); void Task_LinkContest_CommunicateFinalStandings(u8); -void sub_80FC580(u8); -void sub_80FC6BC(u8); -void sub_80FC804(u8); -void sub_80FCE48(u8); -void sub_80FC894(u8); -void Task_LinkContest_CommunicateMonIdxs(u8 taskId); -void sub_81D9DE4(u8 taskId); +void Task_LinkContest_Init(u8); +void Task_LinkContest_CommunicateMonsRS(u8); +void Task_LinkContest_CommunicateRngRS(u8); +void Task_LinkContest_CommunicateLeaderIdsRS(u8); +void Task_LinkContest_CommunicateCategoryRS(u8); +void Task_LinkContest_CommunicateMonIdxs(u8); +void Task_LinkContest_StartCommunicationEm(u8); void Task_LinkContest_CommunicateRound1Points(u8); void Task_LinkContest_CommunicateTurnOrder(u8); -void sub_80F8714(u8); -bool32 sub_80FC670(s16 *); +void Task_LinkContest_FinalizeConnection(u8); +void Task_LinkContest_CommunicateMoveSelections(u8); +bool32 LinkContest_TryLinkStandby(s16 *); bool32 LinkContest_SendBlock(void *, u16); bool8 LinkContest_GetBlockReceivedFromAllPlayers(void); bool8 LinkContest_GetBlockReceived(u8); -u8 sub_80F86E0(u8 *); -void Task_LinkContest_CommunicateMoveSelections(u8 taskId); +u8 LinkContest_GetLeaderIndex(u8 *); #endif //GUARD_CONTEST_LINK_H diff --git a/include/link.h b/include/link.h index 25e62ff1e1..de10bb8dcf 100644 --- a/include/link.h +++ b/include/link.h @@ -49,11 +49,11 @@ (((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT) #define LINKCMD_SEND_LINK_TYPE 0x2222 -#define LINKCMD_0x2FFE 0x2FFE +#define LINKCMD_READY_EXIT_STANDBY 0x2FFE #define LINKCMD_SEND_HELD_KEYS 0x4444 #define LINKCMD_0x5555 0x5555 #define LINKCMD_0x5566 0x5566 -#define LINKCMD_0x5FFF 0x5FFF +#define LINKCMD_READY_CLOSE_LINK 0x5FFF #define LINKCMD_0x6666 0x6666 #define LINKCMD_0x7777 0x7777 #define LINKCMD_CONT_BLOCK 0x8888 @@ -64,7 +64,7 @@ #define LINKCMD_INIT_BLOCK 0xBBBB #define LINKCMD_READY_CANCEL_TRADE 0xBBCC #define LINKCMD_SEND_HELD_KEYS_2 0xCAFE -#define LINKCMD_0xCCCC 0xCCCC +#define LINKCMD_SEND_BLOCK_REQ 0xCCCC #define LINKCMD_START_TRADE 0xCCDD #define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA #define LINKCMD_SET_MONS_TO_TRADE 0xDDDD @@ -273,11 +273,11 @@ bool32 InUnionRoom(void); void LoadWirelessStatusIndicatorSpriteGfx(void); bool8 IsLinkTaskFinished(void); void CreateWirelessStatusIndicatorSprite(u8, u8); -void sub_800ADF8(void); +void SetLinkStandbyCallback(void); void SetWirelessCommType1(void); void CheckShouldAdvanceLinkState(void); u8 IsLinkMaster(void); -void sub_800AC34(void); +void SetCloseLinkCallback(void); bool8 HandleLinkConnection(void); void SetLinkDebugValues(u32 seed, u32 flags); void sub_800A418(void); @@ -305,9 +305,9 @@ extern u16 gLinkHeldKeys; extern u32 gLinkStatus; extern u8 gUnknown_030030E4; extern u8 gUnknown_030030E8; -extern u8 gUnknown_030030EC[MAX_LINK_PLAYERS]; -extern u8 gUnknown_030030F0[MAX_LINK_PLAYERS]; -extern u16 gUnknown_030030F4; +extern bool8 gReadyToExitStandby[MAX_LINK_PLAYERS]; +extern bool8 gReadyToCloseLink[MAX_LINK_PLAYERS]; +extern u16 gReadyCloseLinkType; extern u8 gSuppressLinkErrorMessage; extern u8 gWirelessCommType; extern bool8 gSavedLinkPlayerCount; @@ -334,15 +334,15 @@ bool32 LinkDummy_Return2(void); void SetLocalLinkPlayerId(u8); u8 GetSavedPlayerCount(void); void sub_8009FAC(void); -bool8 sub_800A4D8(u8 a0); +bool8 SendBlockRequest(u8 type); u8 GetLinkPlayerCountAsBitFlags(void); u8 sub_800A0C8(s32, s32); u8 GetSavedLinkPlayerCountAsBitFlags(void); -void sub_800AD10(void); +void SetCloseLinkCallbackHandleJP(void); void CheckLinkPlayersMatchSaved(void); void StartSendingKeysToLink(void); bool8 DoesLinkPlayerCountMatchSaved(void); -void sub_800ABF4(u16 a0); +void SetCloseLinkCallbackAndType(u16 type); bool32 IsSendingKeysToLink(void); u32 GetLinkRecvQueueLength(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index eede41d601..4d00039eb9 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -8,11 +8,11 @@ #define RFU_COMMAND_0x4400 0x4400 #define RFU_COMMAND_0x8800 0x8800 #define RFU_COMMAND_0x8900 0x8900 -#define RFU_COMMAND_0xA100 0xA100 +#define RFU_COMMAND_SEND_BLOCK_REQ 0xA100 #define RFU_COMMAND_0x7700 0x7700 #define RFU_COMMAND_0x7800 0x7800 -#define RFU_COMMAND_0x6600 0x6600 -#define RFU_COMMAND_0x5F00 0x5F00 +#define RFU_COMMAND_READY_EXIT_STANDBY 0x6600 +#define RFU_COMMAND_READY_CLOSE_LINK 0x5F00 #define RFU_COMMAND_0x2F00 0x2F00 #define RFU_COMMAND_0xBE00 0xBE00 #define RFU_COMMAND_0xEE00 0xEE00 @@ -125,7 +125,7 @@ struct GFRfuManager /* 0x012 */ u16 unk_12; /* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14]; /* 0x04c */ u8 unk_4c[14]; - /* 0x05a */ u8 unk_5a; + /* 0x05a */ u8 blockRequestType; /* 0x05b */ u8 unk_5b; /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS]; /* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS]; @@ -134,14 +134,14 @@ struct GFRfuManager /* 0x068 */ u8 filler_68[4]; /* 0x06c */ struct RfuBlockSend sendBlock; /* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS]; - /* 0x0e4 */ u8 unk_e4[5]; - /* 0x0e9 */ u8 unk_e9[5]; + /* 0x0e4 */ bool8 readyCloseLink[MAX_RFU_PLAYERS]; + /* 0x0e9 */ bool8 readyExitStandby[MAX_RFU_PLAYERS]; /* 0x0ee */ vu8 errorState; /* 0x0ef */ bool8 isShuttingDown; /* 0x0f0 */ u8 linkLossRecoveryState; /* 0x0f1 */ u8 status; /* 0x0f2 */ u16 unk_f2[6]; - /* 0x0fe */ u16 unk_fe; + /* 0x0fe */ u16 resendExitStandbyTimer; /* 0x100 */ u16 unk_100; /* 0x102 */ u8 unk_102; /* 0x103 */ u8 filler_103[0x10A - 0x103]; @@ -203,11 +203,11 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size); void ClearLinkRfuCallback(void); u8 Rfu_GetLinkPlayerCount(void); u8 Rfu_GetMultiplayerId(void); -bool8 sub_8010100(u8 a0); +bool8 Rfu_SendBlockRequest(u8 type); bool8 IsLinkRfuTaskFinished(void); bool8 Rfu_IsMaster(void); -void task_add_05_task_del_08FA224_when_no_RfuFunc(void); -void sub_8010434(void); +void Rfu_SetCloseLinkCallback(void); +void Rfu_SetLinkStandbyCallback(void); void ResetLinkRfuGFLayer(void); void UpdateWirelessStatusIndicatorSprite(void); void InitRFU(void); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 6dd9cd2f48..1dc81f1a9d 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -886,9 +886,9 @@ void sub_80587B0(void) if (IsLinkTaskFinished()) { if (gWirelessCommType == 0) - sub_800AC34(); + SetCloseLinkCallback(); else - sub_800ADF8(); + SetLinkStandbyCallback(); gBattlerControllerFuncs[gActiveBattler] = sub_80586F8; } diff --git a/src/battle_main.c b/src/battle_main.c index dd31e12d54..72890d6da2 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1484,9 +1484,9 @@ static void CB2_PreInitMultiBattle(void) { gBattleCommunication[MULTIUSE_STATE]++; if (gWirelessCommType) - sub_800ADF8(); + SetLinkStandbyCallback(); else - sub_800AC34(); + SetCloseLinkCallback(); } break; case 3: @@ -2368,7 +2368,7 @@ static void sub_8038F34(void) case 6: if (IsLinkTaskFinished() == TRUE) { - sub_800ADF8(); + SetLinkStandbyCallback(); BattlePutTextOnWindow(gText_LinkStandby3, 0); gBattleCommunication[MULTIUSE_STATE]++; } @@ -2382,7 +2382,7 @@ static void sub_8038F34(void) break; case 8: if (!gWirelessCommType) - sub_800AC34(); + SetCloseLinkCallback(); gBattleCommunication[MULTIUSE_STATE]++; break; case 9: @@ -2556,7 +2556,7 @@ static void sub_803939C(void) HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); if (gMain.field_439_x4) { - sub_800ADF8(); + SetLinkStandbyCallback(); BattlePutTextOnWindow(gText_LinkStandby3, 0); } gBattleCommunication[MULTIUSE_STATE]++; @@ -2566,7 +2566,7 @@ static void sub_803939C(void) if (--gBattleCommunication[1] == 0) { if (gMain.field_439_x4 && !gWirelessCommType) - sub_800AC34(); + SetCloseLinkCallback(); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -2605,7 +2605,7 @@ static void sub_803939C(void) { if (gMain.field_439_x4) { - sub_800ADF8(); + SetLinkStandbyCallback(); BattlePutTextOnWindow(gText_LinkStandby3, 0); } gBattleCommunication[MULTIUSE_STATE]++; diff --git a/src/battle_tower.c b/src/battle_tower.c index 4695d9aa08..7377a6798b 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -2627,7 +2627,7 @@ static void LoadLinkMultiOpponentsData(void) } break; case 4: - sub_800AC34(); + SetCloseLinkCallback(); gSpecialVar_Result = 5; break; case 5: @@ -2644,7 +2644,7 @@ static void LoadLinkMultiOpponentsData(void) static void sub_8164DCC(void) { if (gWirelessCommType != 0) - sub_800AC34(); + SetCloseLinkCallback(); } static void SetMultiPartnerGfx(void) diff --git a/src/berry_blender.c b/src/berry_blender.c index a2a96c0892..14a1ffff80 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -1230,7 +1230,7 @@ static void sub_8080018(void) sBerryBlenderData->field_114 = 0; Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId); memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry)); - sub_800ADF8(); + SetLinkStandbyCallback(); sBerryBlenderData->framesToWait = 0; break; case 9: @@ -1238,7 +1238,7 @@ static void sub_8080018(void) { ResetBlockReceivedFlags(); if (GetMultiplayerId() == 0) - sub_800A4D8(4); + SendBlockRequest(4); sBerryBlenderData->mainState++; } break; @@ -1332,7 +1332,7 @@ static void sub_8080018(void) sBerryBlenderData->mainState++; break; case 19: - sub_800ADF8(); + SetLinkStandbyCallback(); sBerryBlenderData->mainState++; break; case 20: @@ -2587,7 +2587,7 @@ static bool8 LinkPlayAgainHandleSaving(void) switch (sBerryBlenderData->field_1A0) { case 0: - sub_800ADF8(); + SetLinkStandbyCallback(); sBerryBlenderData->field_1A0 = 1; sBerryBlenderData->framesToWait = 0; break; @@ -2606,7 +2606,7 @@ static bool8 LinkPlayAgainHandleSaving(void) case 3: if (++sBerryBlenderData->framesToWait == 10) { - sub_800ADF8(); + SetLinkStandbyCallback(); sBerryBlenderData->field_1A0++; } break; @@ -2682,7 +2682,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void) break; case 5: Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0); - sub_800ADF8(); + SetLinkStandbyCallback(); sBerryBlenderData->gameEndState++; break; case 6: @@ -2702,7 +2702,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void) break; case 8: sBerryBlenderData->gameEndState++; - sub_800ADF8(); + SetLinkStandbyCallback(); break; case 9: if (IsLinkTaskFinished()) @@ -2732,7 +2732,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void) case 11: if (++sBerryBlenderData->framesToWait > 30) { - sub_800AC34(); + SetCloseLinkCallback(); sBerryBlenderData->gameEndState++; } break; diff --git a/src/berry_crush.c b/src/berry_crush.c index 90a299a747..42199e757b 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1125,7 +1125,7 @@ int sub_802130C(void) switch (var0->unkC) { case 0: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 1: if (!IsLinkTaskFinished()) @@ -2027,7 +2027,7 @@ static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5) r4->unkC = 3; return 0; case 1: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); ++r4->unkC; return 0; case 2: @@ -2110,7 +2110,7 @@ static u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 switch (r4->unkC) { case 0: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 1: if (IsLinkTaskFinished()) @@ -2167,7 +2167,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2) sub_8022BEC(3, 1, NULL); return 0; case 1: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 2: if (!IsLinkTaskFinished()) @@ -2213,7 +2213,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r { case 0: sub_80214A8(r4, &r4->unk138); - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 1: if (!IsLinkTaskFinished()) @@ -2233,7 +2233,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r return 0; r4->unk138.unk38[r4->unk138.unk0] = NULL; ++r4->unk138.unk0; - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 4: if (!IsLinkTaskFinished()) @@ -2247,7 +2247,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r break; case 5: sub_80216A8(r4, &r4->unk138); - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 6: if (!IsLinkTaskFinished()) @@ -2295,7 +2295,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r SetGpuReg(REG_OFFSET_BG0VOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG3VOFS, 0); - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 3: if (!IsLinkTaskFinished()) @@ -2323,7 +2323,7 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r return 0; // fallthrough case 0: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 3: if (!IsLinkTaskFinished()) @@ -2703,7 +2703,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 case 4: if (!sub_80218D4(r4, &r4->unk138)) return 0; - sub_8010434(); + Rfu_SetLinkStandbyCallback(); r4->unk10 = 0; break; case 5: @@ -2737,7 +2737,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6) case 2: if (!sub_80218D4(r5, &r5->unk138)) return 0; - sub_8010434(); + Rfu_SetLinkStandbyCallback(); r5->unk10 = 0; SetGpuReg(REG_OFFSET_BG0VOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); @@ -3005,7 +3005,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4) r5->unkC = 0; return 0; case 1: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 2: if (!IsLinkTaskFinished()) @@ -3084,7 +3084,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 switch (r4->unkC) { case 0: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 1: if (!IsLinkTaskFinished()) @@ -3184,12 +3184,12 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1 switch (r5->unkC) { case 0: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); break; case 1: if (!IsLinkTaskFinished()) return 0; - sub_800AC34(); + SetCloseLinkCallback(); break; case 2: if (gReceivedRemoteLinkPlayers != 0) diff --git a/src/cable_club.c b/src/cable_club.c index 15e4683902..b6fba361e9 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -203,7 +203,7 @@ static void sub_80B2600(u8 taskId) gTasks[taskId].data[0]++; if (gTasks[taskId].data[0] == 10) { - sub_800A4D8(2); + SendBlockRequest(2); DestroyTask(taskId); } } @@ -357,7 +357,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId) if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS || gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS) { - sub_800AC34(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = Task_StopLinkup; } @@ -392,7 +392,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId) { if (!Link_AnyPartnersPlayingRubyOrSapphire()) { - sub_800AC34(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = Task_StopLinkup; } @@ -405,7 +405,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId) } else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS) { - sub_800AC34(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = Task_StopLinkup; } @@ -426,7 +426,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId) card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL); card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL); gTasks[taskId].func = Task_LinkupAwaitTrainerCardData; - sub_800A4D8(2); + SendBlockRequest(2); } } @@ -481,7 +481,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId) { // Unsuccessful battle tower linkup *linkupStatus = LINKUP_FAILED_BATTLE_TOWER; - sub_800AC34(); + SetCloseLinkCallback(); gTasks[taskId].func = Task_StopLinkup; } else @@ -503,7 +503,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId) else { // Unsuccessful linkup - sub_800AC34(); + SetCloseLinkCallback(); gTasks[taskId].func = Task_StopLinkup; } } @@ -686,7 +686,7 @@ static void Task_ValidateMixingGameLanguage(u8 taskId) if (mixingForeignGames) { gSpecialVar_Result = LINKUP_FOREIGN_GAME; - sub_800AD10(); + SetCloseLinkCallbackHandleJP(); gTasks[taskId].tState = 1; return; } @@ -856,7 +856,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId) task->tState++; break; case 3: - sub_800AC34(); + SetCloseLinkCallback(); task->tState++; break; case 4: @@ -919,7 +919,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId) tState = 5; break; case 5: - sub_800ADF8(); + SetLinkStandbyCallback(); tState = 6; break; case 6: @@ -974,7 +974,7 @@ static void CB2_ReturnFromUnionRoomBattle(void) } else { - sub_800AC34(); + SetCloseLinkCallback(); gMain.state = 1; } break; @@ -1113,7 +1113,7 @@ static void Task_StartWiredTrade(u8 taskId) gSelectedTradeMonPositions[TRADE_PLAYER] = 0; gSelectedTradeMonPositions[TRADE_PARTNER] = 0; m4aMPlayAllStop(); - sub_800AC34(); + SetCloseLinkCallback(); task->tState++; break; case 3: @@ -1146,7 +1146,7 @@ static void Task_StartWirelessTrade(u8 taskId) gSelectedTradeMonPositions[TRADE_PLAYER] = 0; gSelectedTradeMonPositions[TRADE_PARTNER] = 0; m4aMPlayAllStop(); - sub_800ADF8(); + SetLinkStandbyCallback(); tState++; break; case 3: @@ -1264,7 +1264,7 @@ static void sub_80B3AAC(u8 taskId) // Unused static void sub_80B3AD0(u8 taskId) { - sub_800AC34(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_80B3AAC; } diff --git a/src/contest.c b/src/contest.c index b90f894980..ab3897fa15 100644 --- a/src/contest.c +++ b/src/contest.c @@ -69,7 +69,7 @@ static void Task_EndCommunicateMoveSelections(u8 taskId); static void Task_HideMoveSelectScreen(u8 taskId); static void Task_HideApplauseMeterForAppealStart(u8 taskId); static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId); -static void sub_80D8A88(u8 taskId); +static void Task_AppealSetup(u8 taskId); static void Task_DoAppeals(u8 taskId); static void sub_80DA110(u8); static void sub_80DA134(struct Sprite *); @@ -94,7 +94,7 @@ static void Task_CommunicateFinalStandings(u8); static void Task_EndCommunicateFinalStandings(u8); static void Task_ContestReturnToField(u8); static void FieldCB_ContestReturnToField(void); -static bool8 sub_80DA8A4(void); +static bool8 IsPlayerLinkLeader(void); static void PrintContestantTrainerName(u8); static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1); static void PrintContestantMonName(u8); @@ -250,7 +250,7 @@ EWRAM_DATA u8 gContestantTurnOrder[CONTESTANT_COUNT] = {0}; EWRAM_DATA u8 gLinkContestFlags = 0; // Bit 0: Is a link contest // Bit 1: Link contest uses wireless adapter -EWRAM_DATA u8 gUnknown_02039F2B = 0; +EWRAM_DATA u8 gContestLinkLeaderIndex = 0; EWRAM_DATA u16 gSpecialVar_ContestCategory = 0; EWRAM_DATA u16 gSpecialVar_ContestRank = 0; EWRAM_DATA u8 gNumLinkContestPlayers = 0; @@ -1118,7 +1118,7 @@ static void Task_TryStartLinkContest(u8 taskId) case 1: if (IsLinkTaskFinished()) { - sub_800ADF8(); + SetLinkStandbyCallback(); gTasks[taskId].data[0]++; } return; @@ -1566,16 +1566,16 @@ static void Task_HideApplauseMeterForAppealStart(u8 taskId) static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId) { if (!eContest.applauseMeterIsMoving && !eContest.sliderHeartsAnimating) - gTasks[taskId].func = sub_80D8A88; + gTasks[taskId].func = Task_AppealSetup; } -static void sub_80D8A88(u8 taskId) +static void Task_AppealSetup(u8 taskId) { if (++gTasks[taskId].data[0] > 19) { eContest.turnNumber = 0; eContest.unk1921C = gRngValue; - if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && sub_80DA8A4()) + if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && IsPlayerLinkLeader()) { s32 i; @@ -1611,7 +1611,7 @@ static void Task_DoAppeals(u8 taskId) u8 taskId2; eContest.unk1920B_2 = 1; - if (sub_80DA8A4()) + if (IsPlayerLinkLeader()) sub_80DD080(eContest.currentContestant); taskId2 = CreateTask(sub_80FCC88, 0); SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110); @@ -2339,7 +2339,7 @@ static void sub_80DA198(u8 taskId) u8 taskId2; eContest.unk1920B_2 = 1; - if (sub_80DA8A4()) + if (IsPlayerLinkLeader()) { RankContestants(); SetAttentionLevels(); @@ -2619,9 +2619,9 @@ static void TryPutPlayerLast(void) gContestPlayerMonIndex = CONTESTANT_COUNT - 1; } -static bool8 sub_80DA8A4(void) +static bool8 IsPlayerLinkLeader(void) { - if (gContestPlayerMonIndex == gUnknown_02039F2B) + if (gContestPlayerMonIndex == gContestLinkLeaderIndex) return TRUE; return FALSE; } @@ -2902,7 +2902,7 @@ static void PrintContestantMonNameWithColor(u8 contestant, u8 color) Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, 5, 1, 7); } -static u16 sub_80DAFE0(u8 who, u8 contestCategory) +static u16 CalculateContestantRound1Points(u8 who, u8 contestCategory) { u8 statMain; u8 statSub1; @@ -2940,12 +2940,12 @@ static u16 sub_80DAFE0(u8 who, u8 contestCategory) return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2; } -void sub_80DB09C(u8 contestCategory) +void CalculateRound1Points(u8 contestCategory) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - gContestMonRound1Points[i] = sub_80DAFE0(i, contestCategory); + gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory); } static u8 sub_80DB0C4(void) @@ -4252,13 +4252,12 @@ static void sub_80DD080(u8 contestant) u16 move; u8 effect; u8 rnd; - bool8 r8; + bool8 canUseTurn; s32 i; eContestantStatus[contestant].appeal2 = 0; eContestantStatus[contestant].appeal1 = 0; - r8 = ContestantCanUseTurn(contestant); - if (!r8) + if (!ContestantCanUseTurn(contestant)) return; move = eContestantStatus[contestant].currMove; @@ -4974,7 +4973,7 @@ static void sub_80DE4A8(u8 taskId) u8 taskId2; eContest.unk1920B_2 = 1; - if (sub_80DA8A4()) + if (IsPlayerLinkLeader()) sub_80DBAA0(); taskId2 = CreateTask(sub_80FCC88, 0); SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110); diff --git a/src/contest_link.c b/src/contest_link.c index 172a2b2ba9..aff24052aa 100644 --- a/src/contest_link.c +++ b/src/contest_link.c @@ -9,8 +9,8 @@ #include "contest_link.h" #include "constants/flags.h" -static void sub_80FC5C0(u8); -static void sub_80FC5DC(u8); +static void Task_LinkContest_StartInitFlags(u8); +static void Task_LinkContest_InitFlags(u8); #define tState data[0] #define tCategory data[9] @@ -52,7 +52,7 @@ bool8 LinkContest_GetBlockReceivedFromAllPlayers(void) } } -void sub_80FC580(u8 taskId) +void Task_LinkContest_Init(u8 taskId) { u8 i; @@ -60,15 +60,15 @@ void sub_80FC580(u8 taskId) gBlockRecvBuffer[i][0] = 0xFF; gTasks[taskId].tState = 0; - gTasks[taskId].func = sub_80FC5C0; + gTasks[taskId].func = Task_LinkContest_StartInitFlags; } -static void sub_80FC5C0(u8 taskId) +static void Task_LinkContest_StartInitFlags(u8 taskId) { - gTasks[taskId].func = sub_80FC5DC; + gTasks[taskId].func = Task_LinkContest_InitFlags; } -static void sub_80FC5DC(u8 taskId) +static void Task_LinkContest_InitFlags(u8 taskId) { int i; @@ -91,8 +91,9 @@ static void sub_80FC5DC(u8 taskId) SwitchTaskToFollowupFunc(taskId); } -bool32 sub_80FC670(s16 *state) +bool32 LinkContest_TryLinkStandby(s16 *state) { + // Skip standby for RS cabled links if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER) return TRUE; @@ -101,7 +102,7 @@ bool32 sub_80FC670(s16 *state) case 0: if (IsLinkTaskFinished()) { - sub_800ADF8(); + SetLinkStandbyCallback(); (*state)++; } return FALSE; @@ -116,16 +117,17 @@ bool32 sub_80FC670(s16 *state) } } -void sub_80FC6BC(u8 taskId) +void Task_LinkContest_CommunicateMonsRS(u8 taskId) { int i; - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].tState) { case 0: + // Send players mon if (GetMultiplayerId() == 0) { if (IsLinkTaskFinished()) @@ -141,6 +143,7 @@ void sub_80FC6BC(u8 taskId) } break; case 1: + // Wait for other players data if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < gNumLinkContestPlayers; i++) @@ -153,9 +156,10 @@ void sub_80FC6BC(u8 taskId) } break; case 10: + // Only if leader. Request other players data if (++gTasks[taskId].tTimer > 300) { - sub_800A4D8(2); + SendBlockRequest(2); gTasks[taskId].tState = 1; } break; @@ -168,7 +172,7 @@ void sub_80FC6BC(u8 taskId) } } -void sub_80FC804(u8 taskId) +void Task_LinkContest_CommunicateRngRS(u8 taskId) { switch (gTasks[taskId].tState) { @@ -198,11 +202,11 @@ void sub_80FC804(u8 taskId) } } -void sub_80FC894(u8 taskId) +void Task_LinkContest_CommunicateCategoryRS(u8 taskId) { int i; - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].tState) @@ -231,7 +235,7 @@ void sub_80FC894(u8 taskId) case 10: if (++gTasks[taskId].tTimer > 10) { - sub_800A4D8(2); + SendBlockRequest(2); gTasks[taskId].tState = 1; } break; @@ -311,7 +315,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId) case 1: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints)); + memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonTotalPoints)); gTasks[taskId].tState++; } break; @@ -335,7 +339,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId) case 4: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonAppealPointTotals)); + memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonAppealPointTotals)); gTasks[taskId].tState++; } break; @@ -349,7 +353,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId) case 7: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points)); + memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound2Points)); gTasks[taskId].tState++; } break; @@ -363,7 +367,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId) case 10: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings)); + memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestFinalStandings)); gTasks[taskId].tState++; } break; @@ -388,7 +392,7 @@ void sub_80FCC88(u8 taskId) case 1: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], CONTESTANT_COUNT * sizeof(struct ContestantStatus)); + memcpy(eContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], CONTESTANT_COUNT * sizeof(struct ContestantStatus)); gTasks[taskId].tState++; } break; @@ -412,7 +416,7 @@ void sub_80FCC88(u8 taskId) case 4: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7)); + memcpy(gContestResources->field_8, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct UnknownContestStruct7)); gTasks[taskId].tState++; } break; @@ -426,7 +430,7 @@ void sub_80FCC88(u8 taskId) case 7: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5)); + memcpy(gContestResources->field_10, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct UnknownContestStruct5)); gTasks[taskId].tState++; } break; @@ -440,7 +444,7 @@ void sub_80FCC88(u8 taskId) case 10: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder)); + memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder)); gTasks[taskId].tState++; } break; @@ -451,11 +455,11 @@ void sub_80FCC88(u8 taskId) } } -void sub_80FCE48(u8 taskId) +void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId) { int i; - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].tState) @@ -484,7 +488,7 @@ void sub_80FCE48(u8 taskId) case 10: if (++gTasks[taskId].tTimer > 10) { - sub_800A4D8(2); + SendBlockRequest(2); gTasks[taskId].tState = 1; } break; @@ -499,7 +503,7 @@ void sub_80FCE48(u8 taskId) void Task_LinkContest_CommunicateRound1Points(u8 taskId) { - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].tState) @@ -514,7 +518,7 @@ void Task_LinkContest_CommunicateRound1Points(u8 taskId) case 1: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestMonRound1Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound1Points)); + memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound1Points)); gTasks[taskId].tState++; } break; @@ -528,7 +532,7 @@ void Task_LinkContest_CommunicateRound1Points(u8 taskId) void Task_LinkContest_CommunicateTurnOrder(u8 taskId) { - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].tState) @@ -543,7 +547,7 @@ void Task_LinkContest_CommunicateTurnOrder(u8 taskId) case 1: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder)); + memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder)); gTasks[taskId].tState++; } break; diff --git a/src/contest_link_util.c b/src/contest_link_util.c index 02c94f0baf..31ffb5fdb3 100644 --- a/src/contest_link_util.c +++ b/src/contest_link_util.c @@ -6,21 +6,31 @@ #include "random.h" #include "task.h" -static void sub_81D9F14(u8); -static void sub_81D9F30(u8); -static void sub_81D9F4C(u8); -static void sub_81D9F68(u8); -static void sub_81DA10C(u8); -static void sub_81DA138(u8); -static void sub_81DA160(u8); -static void sub_81DA244(u8); -static void sub_81DA2E8(u8); -static void sub_81DA3B8(u8); -static void sub_81DA488(u8); +/* + The functions in this file handle preliminary communication + for Emerald-only link contests. If the link contest has an RS + player linked, none of these functions are used. + + The equivalent functions for RS-linked contests are spread + between contest_link.c and contest_util.c, and are suffixed RS + instead of Em +*/ + +static void Task_LinkContest_CommunicateMonsEm(u8); +static void Task_LinkContest_StartCommunicateRngEm(u8); +static void Task_LinkContest_CommunicateRngEm(u8); +static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8); +static void Task_LinkContest_CommunicateLeaderIdsEm(u8); +static void Task_LinkContest_StartCommunicateCategoryEm(u8); +static void Task_LinkContest_CommunicateCategoryEm(u8); +static void Task_LinkContest_SetUpContestEm(u8); +static void Task_LinkContest_CommunicateAIMonsEm(u8); +static void Task_LinkContest_CalculateRound1Em(u8); +static void Task_LinkContest_CalculateTurnOrderEm(u8); #define tCategory data[9] -void sub_81D9DE4(u8 taskId) +void Task_LinkContest_StartCommunicationEm(u8 taskId) { int gameCleared; @@ -47,57 +57,51 @@ void sub_81D9DE4(u8 taskId) gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank; gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0; gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared; - SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsEm, Task_LinkContest_StartCommunicateRngEm); } -static void sub_81D9F14(u8 taskId) +static void Task_LinkContest_StartCommunicateRngEm(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngEm, Task_LinkContest_StartCommunicateLeaderIdsEm); } -static void sub_81D9F30(u8 taskId) +static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsEm, Task_LinkContest_StartCommunicateCategoryEm); } -static void sub_81D9F4C(u8 taskId) +static void Task_LinkContest_StartCommunicateCategoryEm(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryEm, Task_LinkContest_SetUpContestEm); } -static void sub_81D9F68(u8 taskId) +static void Task_LinkContest_SetUpContestEm(u8 taskId) { u8 i; u8 rank; int gameCleared; - u8 contestCategories[CONTESTANT_COUNT]; - u8 data2[CONTESTANT_COUNT]; + u8 categories[CONTESTANT_COUNT]; + u8 leaderIds[CONTESTANT_COUNT]; - memset(contestCategories, 0, sizeof(contestCategories)); - memset(data2, 0, sizeof(data2)); + memset(categories, 0, sizeof(categories)); + memset(leaderIds, 0, sizeof(leaderIds)); for (i = 0; i < gNumLinkContestPlayers; i++) - contestCategories[i] = gTasks[taskId].data[i + 1]; + categories[i] = gTasks[taskId].data[i + 1]; // Ensure all players are doing the same category - i = 0; - if (i < gNumLinkContestPlayers) - { - while (++i < gNumLinkContestPlayers) - { - if (contestCategories[0] != contestCategories[i]) - break; - } - } + for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++) + ; if (i == gNumLinkContestPlayers) - gSpecialVar_0x8004 = FALSE; + gSpecialVar_0x8004 = FALSE; // Category choices the same else - gSpecialVar_0x8004 = TRUE; + gSpecialVar_0x8004 = TRUE; // Category choices differ for (i = 0; i < gNumLinkContestPlayers; i++) - data2[i] = gTasks[taskId].data[i + 5]; + leaderIds[i] = gTasks[taskId].data[i + 5]; + // If < 4 players and player is leader, set AI contestants based on rank and game clear if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0) { rank = gContestMons[0].highestRank; @@ -110,43 +114,45 @@ static void sub_81D9F68(u8 taskId) if (rank) rank--; - gameCleared = 1; + gameCleared = TRUE; for (i = 0; i < gNumLinkContestPlayers; i++) { if (!gContestMons[i].gameCleared) { - gameCleared = 0; + gameCleared = FALSE; break; } } - SetLinkAIContestants(contestCategories[0], rank, gameCleared); + SetLinkAIContestants(categories[0], rank, gameCleared); } - gUnknown_02039F2B = sub_80F86E0(data2); + // Assign link leader. After initial communication all players will read data only from them + gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds); + if (gNumLinkContestPlayers < CONTESTANT_COUNT) - SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateAIMonsEm, Task_LinkContest_CalculateRound1Em); else - gTasks[taskId].func = sub_81DA10C; + gTasks[taskId].func = Task_LinkContest_CalculateRound1Em; } -static void sub_81DA10C(u8 taskId) +static void Task_LinkContest_CalculateRound1Em(u8 taskId) { - sub_80DB09C(gSpecialVar_ContestCategory); - SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_81DA138); + CalculateRound1Points(gSpecialVar_ContestCategory); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderEm); } -static void sub_81DA138(u8 taskId) +static void Task_LinkContest_CalculateTurnOrderEm(u8 taskId) { SortContestants(FALSE); - SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection); } -static void sub_81DA160(u8 taskId) +static void Task_LinkContest_CommunicateMonsEm(u8 taskId) { int i; - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].data[0]) @@ -178,9 +184,9 @@ static void sub_81DA160(u8 taskId) } } -static void sub_81DA244(u8 taskId) +static void Task_LinkContest_CommunicateRngEm(u8 taskId) { - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].data[0]) @@ -193,6 +199,7 @@ static void sub_81DA244(u8 taskId) case 0: if (GetMultiplayerId() == 0) { + // Only the leader sends the RNG seed if (!IsLinkTaskFinished()) return; @@ -201,10 +208,12 @@ static void sub_81DA244(u8 taskId) } else { + // Other link members skip to waiting gTasks[taskId].data[0]++; } break; case 1: + // Wait to receive RNG data if (LinkContest_GetBlockReceived(0)) { memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue)); @@ -215,13 +224,13 @@ static void sub_81DA244(u8 taskId) } } -static void sub_81DA2E8(u8 taskId) +static void Task_LinkContest_CommunicateLeaderIdsEm(u8 taskId) { int i; - u16 data[4]; - u16 var0; + u16 data[CONTESTANT_COUNT]; + u16 leaderId; - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].data[0]) @@ -234,8 +243,8 @@ static void sub_81DA2E8(u8 taskId) case 0: if (IsLinkTaskFinished()) { - var0 = 0x6E; - if (LinkContest_SendBlock(&var0, sizeof(var0)) == 1) + leaderId = 0x6E; + if (LinkContest_SendBlock(&leaderId, sizeof(leaderId)) == 1) gTasks[taskId].data[0]++; } break; @@ -254,13 +263,13 @@ static void sub_81DA2E8(u8 taskId) } } -static void sub_81DA3B8(u8 taskId) +static void Task_LinkContest_CommunicateCategoryEm(u8 taskId) { int i; u16 data[CONTESTANT_COUNT]; u16 category; - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].data[0]) @@ -293,11 +302,11 @@ static void sub_81DA3B8(u8 taskId) } } -static void sub_81DA488(u8 taskId) +static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId) { int i; - if (!sub_80FC670(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) return; switch (gTasks[taskId].data[0]) diff --git a/src/contest_util.c b/src/contest_util.c index 1fd3e04826..23b9dcaaa9 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -151,14 +151,14 @@ static void Task_CreateConfetti(u8); static void SpriteCB_TextBoxSlideIn(struct Sprite *); static void SpriteCB_TextBoxSlideOut(struct Sprite *); static void SpriteCB_EndTextBoxSlideIn(struct Sprite *); -static void sub_80F8508(u8); -static void sub_80F8568(u8); -static void sub_80F8584(u8); -static void sub_80F85A0(u8); -static void sub_80F85BC(u8); -static void sub_80F86B8(u8); -static void sub_80F878C(u8); -static void sub_80F87B4(u8); +static void Task_StartCommunication(u8); +static void Task_StartCommunicateRngRS(u8); +static void Task_StartCommunicateLeaderIdsRS(u8); +static void Task_StartCommunicateCategoryRS(u8); +static void Task_LinkContest_SetUpContestRS(u8); +static void Task_LinkContest_CalculateTurnOrderRS(u8); +static void Task_LinkContest_Disconnect(u8); +static void Task_LinkContest_WaitDisconnect(u8); static void SpriteCB_Confetti(struct Sprite *sprite); static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal"); @@ -602,7 +602,7 @@ static void Task_ShowContestResults(u8 taskId) case 2: if (IsLinkTaskFinished()) { - sub_800ADF8(); + SetLinkStandbyCallback(); gTasks[taskId].tState++; } return; @@ -975,7 +975,7 @@ static void Task_TryDisconnectLinkPartners(u8 taskId) if (!gTasks[taskId].data[10]) { ShowLinkResultsTextBox(gText_CommunicationStandby); - sub_800AC34(); + SetCloseLinkCallback(); gTasks[taskId].func = Task_WaitForLinkPartnersDisconnect; } } @@ -2207,7 +2207,7 @@ void TryEnterContestMon(void) if (eligibility) { SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); - sub_80DB09C(gSpecialVar_ContestCategory); + CalculateRound1Points(gSpecialVar_ContestCategory); } gSpecialVar_Result = eligibility; @@ -2409,103 +2409,102 @@ void ContestLinkTransfer(u8 category) { u8 newTaskId; ScriptContext2_Enable(); - newTaskId = CreateTask(sub_80FC580, 0); - SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508); + newTaskId = CreateTask(Task_LinkContest_Init, 0); + SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication); gTasks[newTaskId].data[9] = category; } -static void sub_80F8508(u8 taskId) +static void Task_StartCommunication(u8 taskId) { if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER) { CreateContestMonFromParty(gContestMonPartyIndex); - SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsRS, Task_StartCommunicateRngRS); } else { CreateContestMonFromParty(gContestMonPartyIndex); - gTasks[taskId].func = sub_81D9DE4; + gTasks[taskId].func = Task_LinkContest_StartCommunicationEm; } } -static void sub_80F8568(u8 taskId) +static void Task_StartCommunicateRngRS(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80FC804, sub_80F8584); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngRS, Task_StartCommunicateLeaderIdsRS); } -static void sub_80F8584(u8 taskId) +static void Task_StartCommunicateLeaderIdsRS(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80FCE48, sub_80F85A0); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsRS, Task_StartCommunicateCategoryRS); } -static void sub_80F85A0(u8 taskId) +static void Task_StartCommunicateCategoryRS(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80FC894, sub_80F85BC); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryRS, Task_LinkContest_SetUpContestRS); } -static void sub_80F85BC(u8 taskId) +static void Task_LinkContest_SetUpContestRS(u8 taskId) { u8 i; - u8 sp0[4]; - u8 sp4[4]; + u8 categories[CONTESTANT_COUNT]; + u8 leaderIds[CONTESTANT_COUNT]; - memset(sp0, 0, sizeof(sp0)); - memset(sp4, 0, sizeof(sp4)); + memset(categories, 0, sizeof(categories)); + memset(leaderIds, 0, sizeof(leaderIds)); for (i = 0; i < gNumLinkContestPlayers; i++) - sp0[i] = gTasks[taskId].data[i + 1]; + categories[i] = gTasks[taskId].data[i + 1]; - for (i = 0; i < gNumLinkContestPlayers;) - { - i++; - if (i >= gNumLinkContestPlayers || sp0[0] != sp0[i]) - break; - } + // Ensure all players are doing the same category + for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++) + ; if (i == gNumLinkContestPlayers) - gSpecialVar_0x8004 = 0; + gSpecialVar_0x8004 = FALSE; // Category choices the same else - gSpecialVar_0x8004 = 1; + gSpecialVar_0x8004 = TRUE; // Category choices differ for (i = 0; i < gNumLinkContestPlayers; i++) - sp4[i] = gTasks[taskId].data[i + 5]; + leaderIds[i] = gTasks[taskId].data[i + 5]; - gUnknown_02039F2B = sub_80F86E0(sp4); - sub_80DB09C(gSpecialVar_ContestCategory); - SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_80F86B8); + gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds); + CalculateRound1Points(gSpecialVar_ContestCategory); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderRS); } -static void sub_80F86B8(u8 taskId) +static void Task_LinkContest_CalculateTurnOrderRS(u8 taskId) { SortContestants(FALSE); - SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection); } -u8 sub_80F86E0(u8 *arg0) +u8 LinkContest_GetLeaderIndex(u8 *ids) { int i; - u8 result = 0; + u8 leaderIdx = 0; for (i = 1; i < gNumLinkContestPlayers; i++) { - if (arg0[result] < arg0[i]) - result = i; + if (ids[leaderIdx] < ids[i]) + leaderIdx = i; } - return result; + return leaderIdx; } -void sub_80F8714(u8 taskId) +void Task_LinkContest_FinalizeConnection(u8 taskId) { int i; - if (gSpecialVar_0x8004 == 1) + if (gSpecialVar_0x8004 == TRUE) { + // Link partner data doesn't agree, disconnect if (IsLinkTaskFinished()) - gTasks[taskId].func = sub_80F878C; + gTasks[taskId].func = Task_LinkContest_Disconnect; } else { + // Succesfully connected for (i = 0; i < CONTESTANT_COUNT; i++) StringGetEnd10(gContestMons[i].nickname); @@ -2516,13 +2515,13 @@ void sub_80F8714(u8 taskId) } } -static void sub_80F878C(u8 taskId) +static void Task_LinkContest_Disconnect(u8 taskId) { - sub_800AC34(); - gTasks[taskId].func = sub_80F87B4; + SetCloseLinkCallback(); + gTasks[taskId].func = Task_LinkContest_WaitDisconnect; } -static void sub_80F87B4(u8 taskId) +static void Task_LinkContest_WaitDisconnect(u8 taskId) { if (!gReceivedRemoteLinkPlayers) { diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 3ca7a1cf77..fc132943c2 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -558,7 +558,7 @@ static void sub_8024BC8(u8 taskId) case 2: if (!sub_802A770()) { - sub_8010434(); + Rfu_SetLinkStandbyCallback(); gUnknown_02022C98->unk0C++; } break; @@ -671,7 +671,7 @@ static void sub_8024E38(void) gUnknown_02022C98->unk10++; break; case 1: - sub_8010434(); + Rfu_SetLinkStandbyCallback(); gUnknown_02022C98->unk10++; break; case 2: @@ -690,7 +690,7 @@ static void sub_8024E38(void) case 4: if (++gUnknown_02022C98->unk30 > 5) { - sub_8010434(); + Rfu_SetLinkStandbyCallback(); gUnknown_02022C98->unk10++; } break; @@ -1081,7 +1081,7 @@ static void sub_8025644(void) switch (gUnknown_02022C98->unk10) { case 0: - sub_800AC34(); + SetCloseLinkCallback(); sub_80292E0(7); gUnknown_02022C98->unk10++; break; diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 26f7eb6793..823e03dd44 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -192,7 +192,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) } break; case 4: - sub_800ABF4(0); + SetCloseLinkCallbackAndType(0); *arg0 = 5; break; case 5: @@ -403,7 +403,7 @@ static void sub_81D5084(u8 taskId) break; case 15: data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer); - sub_800ABF4(data->unkE); + SetCloseLinkCallbackAndType(data->unkE); data->unk8 = 16; break; case 16: diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 53057fc31d..183bd67fa5 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -197,7 +197,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId) switch (task->data[0]) { case 0: - sub_800ADF8(); + SetLinkStandbyCallback(); task->data[0]++; break; case 1: @@ -230,7 +230,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId) switch (task->data[0]) { case 0: - sub_800ADF8(); + SetLinkStandbyCallback(); task->data[0]++; break; case 1: @@ -623,7 +623,7 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId) case 1: if (!PaletteFadeActive() && BGMusicStopped()) { - sub_800AC34(); + SetCloseLinkCallback(); data[0]++; } break; diff --git a/src/field_specials.c b/src/field_specials.c index e806440f75..db82f35b4a 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -3865,7 +3865,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId) case 7: if (IsLinkTaskFinished() == 1) { - sub_800ADF8(); + SetLinkStandbyCallback(); gTasks[taskId].data[0]++; } break; @@ -3878,7 +3878,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId) case 9: if (gWirelessCommType == 0) { - sub_800AC34(); + SetCloseLinkCallback(); } gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags; EnableBothScriptContexts(); diff --git a/src/link.c b/src/link.c index e04e5e29d6..62a9e41511 100644 --- a/src/link.c +++ b/src/link.c @@ -75,9 +75,9 @@ u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; u32 gLinkStatus; bool8 gLinkDummy1; // Never read bool8 gLinkDummy2; // Never read -bool8 gUnknown_030030EC[MAX_LINK_PLAYERS]; -bool8 gUnknown_030030F0[MAX_LINK_PLAYERS]; -u16 gUnknown_030030F4; +bool8 gReadyToExitStandby[MAX_LINK_PLAYERS]; +bool8 gReadyToCloseLink[MAX_LINK_PLAYERS]; +u16 gReadyCloseLinkType; // Never read u8 gSuppressLinkErrorMessage; bool8 gWirelessCommType; bool8 gSavedLinkPlayerCount; @@ -114,7 +114,7 @@ EWRAM_DATA struct { u8 lastSendQueueCount; u8 unk_06; } sLinkErrorBuffer = {}; -static EWRAM_DATA u16 sUnknown_02022B08 = 0; +static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL; // Static ROM declarations @@ -135,12 +135,12 @@ static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2); static void LinkCB_RequestPlayerDataExchange(void); static void Task_PrintTestData(u8 taskId); -static void sub_800AC80(void); -static void sub_800ACAC(void); -static void sub_800AD5C(void); -static void sub_800AD88(void); -static void sub_800AE30(void); -static void sub_800AE5C(void); +static void LinkCB_ReadyCloseLink(void); +static void LinkCB_WaitCloseLink(void); +static void LinkCB_ReadyCloseLinkWithJP(void); +static void LinkCB_WaitCloseLinkWithJP(void); +static void LinkCB_Standby(void); +static void LinkCB_StandbyForAll(void); static void CheckErrorStatus(void); static void CB2_PrintErrorMessage(void); @@ -379,7 +379,7 @@ void OpenLink(void) sDummy1 = FALSE; gLinkDummy2 = FALSE; gLinkDummy1 = FALSE; - gUnknown_030030F4 = 0; + gReadyCloseLinkType = 0; CreateTask(Task_TriggerHandshake, 2); } else @@ -390,8 +390,8 @@ void OpenLink(void) for (i = 0; i < MAX_LINK_PLAYERS; i++) { gRemoteLinkPlayersNotReceived[i] = TRUE; - gUnknown_030030F0[i] = FALSE; - gUnknown_030030EC[i] = FALSE; + gReadyToCloseLink[i] = FALSE; + gReadyToExitStandby[i] = FALSE; } } @@ -467,7 +467,7 @@ static void LinkTestProcessKeyInput(void) } if (gMain.newKeys & SELECT_BUTTON) { - sub_800AC34(); + SetCloseLinkCallback(); } if (gLinkTestDebugValuesEnabled) { @@ -630,16 +630,16 @@ static void ProcessRecvCmds(u8 unused) } } break; - case LINKCMD_0x5FFF: - gUnknown_030030F0[i] = TRUE; + case LINKCMD_READY_CLOSE_LINK: + gReadyToCloseLink[i] = TRUE; break; - case LINKCMD_0x2FFE: - gUnknown_030030EC[i] = TRUE; + case LINKCMD_READY_EXIT_STANDBY: + gReadyToExitStandby[i] = TRUE; break; case LINKCMD_0xAAAA: sub_800A418(); break; - case LINKCMD_0xCCCC: + case LINKCMD_SEND_BLOCK_REQ: SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size); break; case LINKCMD_SEND_HELD_KEYS_2: @@ -657,8 +657,8 @@ static void BuildSendCmd(u16 command) gSendCmd[0] = LINKCMD_SEND_LINK_TYPE; gSendCmd[1] = gLinkType; break; - case LINKCMD_0x2FFE: - gSendCmd[0] = LINKCMD_0x2FFE; + case LINKCMD_READY_EXIT_STANDBY: + gSendCmd[0] = LINKCMD_READY_EXIT_STANDBY; break; case LINKCMD_SEND_HELD_KEYS: gSendCmd[0] = LINKCMD_SEND_HELD_KEYS; @@ -694,13 +694,13 @@ static void BuildSendCmd(u16 command) gSendCmd[0] = LINKCMD_0xAAAB; gSendCmd[1] = gSpecialVar_ItemId; break; - case LINKCMD_0xCCCC: - gSendCmd[0] = LINKCMD_0xCCCC; + case LINKCMD_SEND_BLOCK_REQ: + gSendCmd[0] = LINKCMD_SEND_BLOCK_REQ; gSendCmd[1] = gBlockRequestType; break; - case LINKCMD_0x5FFF: - gSendCmd[0] = LINKCMD_0x5FFF; - gSendCmd[1] = gUnknown_030030F4; + case LINKCMD_READY_CLOSE_LINK: + gSendCmd[0] = LINKCMD_READY_CLOSE_LINK; + gSendCmd[1] = gReadyCloseLinkType; break; case LINKCMD_0x5566: gSendCmd[0] = LINKCMD_0x5566; @@ -1065,16 +1065,16 @@ bool8 SendBlock(u8 unused, const void *src, u16 size) return InitBlockSend(src, size); } -bool8 sub_800A4D8(u8 a0) +bool8 SendBlockRequest(u8 blockReqType) { if (gWirelessCommType == TRUE) { - return sub_8010100(a0); + return Rfu_SendBlockRequest(blockReqType); } if (gLinkCallback == NULL) { - gBlockRequestType = a0; - BuildSendCmd(LINKCMD_0xCCCC); + gBlockRequestType = blockReqType; + BuildSendCmd(LINKCMD_SEND_BLOCK_REQ); return TRUE; } return FALSE; @@ -1423,70 +1423,70 @@ static u8 GetDummy2(void) return sDummy2; } -void sub_800ABF4(u16 a0) +void SetCloseLinkCallbackAndType(u16 type) { if (gWirelessCommType == TRUE) { - task_add_05_task_del_08FA224_when_no_RfuFunc(); + Rfu_SetCloseLinkCallback(); } else { if (gLinkCallback == NULL) { - gLinkCallback = sub_800AC80; + gLinkCallback = LinkCB_ReadyCloseLink; gLinkDummy1 = FALSE; - gUnknown_030030F4 = a0; + gReadyCloseLinkType = type; } } } -void sub_800AC34(void) +void SetCloseLinkCallback(void) { if (gWirelessCommType == TRUE) { - task_add_05_task_del_08FA224_when_no_RfuFunc(); + Rfu_SetCloseLinkCallback(); } else { if (gLinkCallback != NULL) { - sUnknown_02022B08++; + sReadyCloseLinkAttempts++; } else { - gLinkCallback = sub_800AC80; + gLinkCallback = LinkCB_ReadyCloseLink; gLinkDummy1 = FALSE; - gUnknown_030030F4 = 0; + gReadyCloseLinkType = 0; } } } -static void sub_800AC80(void) +static void LinkCB_ReadyCloseLink(void) { if (gLastRecvQueueCount == 0) { - BuildSendCmd(LINKCMD_0x5FFF); - gLinkCallback = sub_800ACAC; + BuildSendCmd(LINKCMD_READY_CLOSE_LINK); + gLinkCallback = LinkCB_WaitCloseLink; } } -static void sub_800ACAC(void) +static void LinkCB_WaitCloseLink(void) { int i; unsigned count; - u8 linkPlayerCount; - linkPlayerCount = GetLinkPlayerCount(); + // Wait for all players to be ready + u8 linkPlayerCount = GetLinkPlayerCount(); count = 0; for (i = 0; i < linkPlayerCount; i++) { - if (gUnknown_030030F0[i]) - { + if (gReadyToCloseLink[i]) count++; - } } + if (count == linkPlayerCount) { + // All ready, close link gBattleTypeFlags &= ~BATTLE_TYPE_20; gLinkVSyncDisabled = TRUE; CloseLink(); @@ -1495,37 +1495,38 @@ static void sub_800ACAC(void) } } -void sub_800AD10(void) +// Used instead of SetCloseLinkCallback when disconnecting from an attempt to link with a foreign game +void SetCloseLinkCallbackHandleJP(void) { if (gWirelessCommType == TRUE) { - task_add_05_task_del_08FA224_when_no_RfuFunc(); + Rfu_SetCloseLinkCallback(); } else { if (gLinkCallback != NULL) { - sUnknown_02022B08++; + sReadyCloseLinkAttempts++; } else { - gLinkCallback = sub_800AD5C; + gLinkCallback = LinkCB_ReadyCloseLinkWithJP; gLinkDummy1 = FALSE; - gUnknown_030030F4 = 0; + gReadyCloseLinkType = 0; } } } -static void sub_800AD5C(void) +static void LinkCB_ReadyCloseLinkWithJP(void) { if (gLastRecvQueueCount == 0) { - BuildSendCmd(LINKCMD_0x5FFF); - gLinkCallback = sub_800AD88; + BuildSendCmd(LINKCMD_READY_CLOSE_LINK); + gLinkCallback = LinkCB_WaitCloseLinkWithJP; } } -static void sub_800AD88(void) +static void LinkCB_WaitCloseLinkWithJP(void) { int i; unsigned count; @@ -1533,19 +1534,21 @@ static void sub_800AD88(void) linkPlayerCount = GetLinkPlayerCount(); count = 0; + + // Wait for all non-foreign players to be ready for (i = 0; i < linkPlayerCount; i++) { + // Rather than communicate with the foreign game + // just assume they're ready to disconnect if (gLinkPlayers[i].language == LANGUAGE_JAPANESE) - { count++; - } - else if (gUnknown_030030F0[i]) - { + else if (gReadyToCloseLink[i]) count++; - } } + if (count == linkPlayerCount) { + // All ready, close link gBattleTypeFlags &= ~BATTLE_TYPE_20; gLinkVSyncDisabled = TRUE; CloseLink(); @@ -1554,50 +1557,47 @@ static void sub_800AD88(void) } } -void sub_800ADF8(void) +void SetLinkStandbyCallback(void) { if (gWirelessCommType == TRUE) { - sub_8010434(); + Rfu_SetLinkStandbyCallback(); } else { if (gLinkCallback == NULL) { - gLinkCallback = sub_800AE30; + gLinkCallback = LinkCB_Standby; } gLinkDummy1 = FALSE; } } -static void sub_800AE30(void) +static void LinkCB_Standby(void) { if (gLastRecvQueueCount == 0) { - BuildSendCmd(LINKCMD_0x2FFE); - gLinkCallback = sub_800AE5C; + BuildSendCmd(LINKCMD_READY_EXIT_STANDBY); + gLinkCallback = LinkCB_StandbyForAll; } } -static void sub_800AE5C(void) +static void LinkCB_StandbyForAll(void) { u8 i; - u8 linkPlayerCount; - - linkPlayerCount = GetLinkPlayerCount(); + u8 linkPlayerCount = GetLinkPlayerCount(); for (i = 0; i < linkPlayerCount; i++) { - if (!gUnknown_030030EC[i]) - { + if (!gReadyToExitStandby[i]) break; - } } + + // If true, all players ready to exit standby if (i == linkPlayerCount) { for (i = 0; i < MAX_LINK_PLAYERS; i++) - { - gUnknown_030030EC[i] = FALSE; - } + gReadyToExitStandby[i] = FALSE; + gLinkCallback = NULL; } } diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 34e9f719bf..3372aa766f 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -148,10 +148,7 @@ static const u8 sUnknown_082ED6A5[] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }; -static const struct { - u8 *buffer; - u32 size; -} sUnknown_082ED6B8[] = { +static const struct BlockRequest sBlockRequests[] = { { gBlockSendBuffer, 200 }, { gBlockSendBuffer, 200 }, { gBlockSendBuffer, 100 }, @@ -1072,15 +1069,15 @@ static void RfuHandleReceiveCommand(u8 unused) } } break; - case RFU_COMMAND_0xA100: - Rfu_InitBlockSend(sUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)sUnknown_082ED6B8[gRecvCmds[i][1]].size); + case RFU_COMMAND_SEND_BLOCK_REQ: + Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size); break; - case RFU_COMMAND_0x5F00: - Rfu.unk_e4[i] = 1; + case RFU_COMMAND_READY_CLOSE_LINK: + Rfu.readyCloseLink[i] = TRUE; break; - case RFU_COMMAND_0x6600: + case RFU_COMMAND_READY_EXIT_STANDBY: if (Rfu.unk_100 == gRecvCmds[i][1]) - Rfu.unk_e9[i] = 1; + Rfu.readyExitStandby[i] = TRUE; break; case RFU_COMMAND_0xED00: if (Rfu.parentChild == MODE_CHILD) @@ -1194,9 +1191,9 @@ static void RfuPrepareSendBuffer(u16 command) gSendCmd[1] = Rfu.sendBlock.count; gSendCmd[2] = Rfu.sendBlock.owner + 0x80; break; - case RFU_COMMAND_0xA100: + case RFU_COMMAND_SEND_BLOCK_REQ: if (AreNoPlayersReceiving()) - gSendCmd[1] = Rfu.unk_5a; + gSendCmd[1] = Rfu.blockRequestType; break; case RFU_COMMAND_0x7700: case RFU_COMMAND_0x7800: @@ -1207,8 +1204,8 @@ static void RfuPrepareSendBuffer(u16 command) for (i = 0; i < RFU_CHILD_MAX; i++) buff[i] = Rfu.linkPlayerIdx[i]; break; - case RFU_COMMAND_0x6600: - case RFU_COMMAND_0x5F00: + case RFU_COMMAND_READY_EXIT_STANDBY: + case RFU_COMMAND_READY_CLOSE_LINK: gSendCmd[1] = Rfu.unk_100; break; case RFU_COMMAND_0x4400: @@ -1327,10 +1324,10 @@ static void SendLastBlock(void) Rfu.callback = NULL; } -bool8 sub_8010100(u8 blockRequestType) +bool8 Rfu_SendBlockRequest(u8 type) { - Rfu.unk_5a = blockRequestType; - RfuPrepareSendBuffer(RFU_COMMAND_0xA100); + Rfu.blockRequestType = type; + RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ); return TRUE; } @@ -1343,14 +1340,14 @@ static void sub_801011C(void) Rfu.callback = NULL; } -static void sub_8010148(void) +static void DisconnectRfu(void) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); sub_801011C(); } -static void sub_8010168(void) +static void TryDisconnectRfu(void) { if (Rfu.parentChild == MODE_CHILD) { @@ -1358,7 +1355,7 @@ static void sub_8010168(void) Rfu.unk_ce4 = 2; } else - Rfu.callback = sub_8010148; + Rfu.callback = DisconnectRfu; } void LinkRfu_FatalError(void) @@ -1368,131 +1365,137 @@ void LinkRfu_FatalError(void) Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; } -static void sub_80101CC(void) +// RFU equivalent of LinkCB_WaitCloseLink +static void WaitAllReadyToCloseLink(void) { s32 i; u8 playerCount = Rfu.playerCount; s32 count = 0; + // Wait for all players to be ready for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.unk_e4[i]) + if (Rfu.readyCloseLink[i]) count++; } if (count == playerCount) { + // All ready, close link gBattleTypeFlags &= ~BATTLE_TYPE_20; if (Rfu.parentChild == MODE_CHILD) { Rfu.errorState = 3; - sub_8010168(); + TryDisconnectRfu(); } else - Rfu.callback = sub_8010168; + Rfu.callback = TryDisconnectRfu; } } -static void sub_801022C(void) +static void SendReadyCloseLink(void) { if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) { - RfuPrepareSendBuffer(RFU_COMMAND_0x5F00); - Rfu.callback = sub_80101CC; + RfuPrepareSendBuffer(RFU_COMMAND_READY_CLOSE_LINK); + Rfu.callback = WaitAllReadyToCloseLink; } } -static void sub_8010264(u8 taskId) +static void Task_TryReadyCloseLink(u8 taskId) { if (Rfu.callback == NULL) { Rfu.unk_cd9 = 1; - Rfu.callback = sub_801022C; + Rfu.callback = SendReadyCloseLink; DestroyTask(taskId); } } -void task_add_05_task_del_08FA224_when_no_RfuFunc(void) +void Rfu_SetCloseLinkCallback(void) { - if (!FuncIsActiveTask(sub_8010264)) - CreateTask(sub_8010264, 5); + if (!FuncIsActiveTask(Task_TryReadyCloseLink)) + CreateTask(Task_TryReadyCloseLink, 5); } -static void sub_80102B8(void) +static void SendReadyExitStandbyUntilAllReady(void) { u8 playerCount; u8 i; if (GetMultiplayerId() != 0) { - if (Rfu.recvQueue.count == 0 && Rfu.unk_fe > 60) + if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) { - RfuPrepareSendBuffer(RFU_COMMAND_0x6600); - Rfu.unk_fe = 0; + RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY); + Rfu.resendExitStandbyTimer = 0; } } playerCount = GetLinkPlayerCount(); for (i = 0; i < playerCount; i++) { - if (Rfu.unk_e9[i] == 0) + if (!Rfu.readyExitStandby[i]) break; } if (i == playerCount) { for (i = 0; i < MAX_RFU_PLAYERS; i++) - Rfu.unk_e9[i] = 0; + Rfu.readyExitStandby[i] = FALSE; Rfu.unk_100++; Rfu.callback = NULL; } - Rfu.unk_fe++; + Rfu.resendExitStandbyTimer++; } -static void sub_8010358(void) +static void LinkLeaderReadyToExitStandby(void) { if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0) { - RfuPrepareSendBuffer(RFU_COMMAND_0x6600); - Rfu.callback = sub_80102B8; + RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY); + Rfu.callback = SendReadyExitStandbyUntilAllReady; } } -static void sub_8010390(void) +// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll +static void Rfu_LinkStandby(void) { u8 i; u8 playerCount; if (GetMultiplayerId() != 0) { + // Not link leader, send exit standby when ready if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0) { - RfuPrepareSendBuffer(RFU_COMMAND_0x6600); - Rfu.callback = sub_80102B8; + RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY); + Rfu.callback = SendReadyExitStandbyUntilAllReady; } } else { + // Link leader, wait for all members to send exit ready playerCount = GetLinkPlayerCount(); for (i = 1; i < playerCount; i++) { - if (Rfu.unk_e9[i] == 0) + if (!Rfu.readyExitStandby[i]) break; } if (i == playerCount) { if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0) { - RfuPrepareSendBuffer(RFU_COMMAND_0x6600); - Rfu.callback = sub_8010358; + RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY); + Rfu.callback = LinkLeaderReadyToExitStandby; } } } } -void sub_8010434(void) +void Rfu_SetLinkStandbyCallback(void) { if (Rfu.callback == NULL) { - Rfu.callback = sub_8010390; - Rfu.unk_fe = 0; + Rfu.callback = Rfu_LinkStandby; + Rfu.resendExitStandbyTimer = 0; } } @@ -1724,8 +1727,8 @@ static void sub_801084C(u8 taskId) { if (AreNoPlayersReceiving()) { - Rfu.unk_5a = 0; - RfuPrepareSendBuffer(RFU_COMMAND_0xA100); + Rfu.blockRequestType = 0; + RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ); gTasks[taskId].data[0]++; } } diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 04902dee87..032cc33403 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -208,7 +208,7 @@ static void CB2_MysteryEventMenu(void) { if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS) { - sub_800AC34(); + SetCloseLinkCallback(); GetEventLoadMessage(gStringVar4, 1); PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); gMain.state = 13; @@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void) gMain.state++; break; case 10: - sub_800AC34(); + SetCloseLinkCallback(); gMain.state++; break; case 11: diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 9672fe0ec6..b8ae470a9a 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -1284,7 +1284,7 @@ void task00_mystery_gift(u8 taskId) switch (mevent_client_do_exec(&data->curPromptWindowId)) { case 6: - task_add_05_task_del_08FA224_when_no_RfuFunc(); + Rfu_SetCloseLinkCallback(); data->prevPromptWindowId = data->curPromptWindowId; data->state = 13; break; @@ -1647,7 +1647,7 @@ void task00_mystery_gift(u8 taskId) } break; case 33: - task_add_05_task_del_08FA224_when_no_RfuFunc(); + Rfu_SetCloseLinkCallback(); StringCopy(gStringVar1, gLinkPlayers[1].name); data->state = 34; break; diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 33ddee1b50..c5f4ef1a4b 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -1463,7 +1463,7 @@ static bool32 sub_802BC60(void) case 4: if (!gPaletteFade.active) { - sub_800AC34(); + SetCloseLinkCallback(); gUnknown_02022CFC->unkA++; } break; diff --git a/src/record_mixing.c b/src/record_mixing.c index 075bc6aee1..a4229b91e8 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -501,7 +501,7 @@ static void Task_SendPacket(u8 taskId) break; case 1: if (GetMultiplayerId() == 0) - sub_800A4D8(1); + SendBlockRequest(1); task->data[0]++; break; case 2: @@ -973,7 +973,7 @@ static void Task_DoRecordMixing(u8 taskId) case 4: // Wait 10 frames if (++task->data[1] > 10) { - sub_800AC34(); + SetCloseLinkCallback(); task->data[0] ++; } break; @@ -1005,7 +1005,7 @@ static void Task_DoRecordMixing(u8 taskId) } break; case 8: - sub_800ADF8(); + SetLinkStandbyCallback(); task->data[0] ++; break; case 9: diff --git a/src/save.c b/src/save.c index 09e1b7aae4..3ae2f6fd53 100644 --- a/src/save.c +++ b/src/save.c @@ -912,7 +912,7 @@ void Task_LinkSave(u8 taskId) tState = 1; break; case 1: - sub_800ADF8(); + SetLinkStandbyCallback(); tState = 2; break; case 2: @@ -949,7 +949,7 @@ void Task_LinkSave(u8 taskId) case 7: if (!tPartialSave) ClearContinueGameWarpStatus2(); - sub_800ADF8(); + SetLinkStandbyCallback(); tState = 8; break; case 8: @@ -960,7 +960,7 @@ void Task_LinkSave(u8 taskId) } break; case 9: - sub_800ADF8(); + SetLinkStandbyCallback(); tState = 10; break; case 10: diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index 89029210bb..b151b56509 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -472,7 +472,7 @@ static void Task_LinkContestWaitForConnection(u8 taskId) case 0: if (IsLinkTaskFinished()) { - sub_800ADF8(); + SetLinkStandbyCallback(); gTasks[taskId].data[0]++; } break; diff --git a/src/trade.c b/src/trade.c index 3a0f07ac68..17967733a1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -246,9 +246,9 @@ static bool8 SendLinkData(const void *linkData, u32 size) } } -static void sub_80771AC(u8 a0) +static void RequestLinkData(u8 type) { - sub_800A4D8(a0); + SendBlockRequest(type); } static bool32 sub_80771BC(void) @@ -295,9 +295,9 @@ static bool32 IsWirelessTrade(void) return FALSE; } -static void sub_8077288(u8 unused) +static void SetTradeLinkStandbyCallback(u8 unused) { - sub_800ADF8(); + SetLinkStandbyCallback(); } static bool32 _IsLinkTaskFinished(void) @@ -445,7 +445,7 @@ static void CB2_CreateTradeMenu(void) if (gWirelessCommType) { sub_801048C(TRUE); - sub_800ADF8(); + SetLinkStandbyCallback(); } } break; @@ -825,7 +825,7 @@ static void LinkTradeWaitForFade(void) } else { - sub_800ABF4(32); + SetCloseLinkCallbackAndType(32); sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; } } @@ -983,7 +983,7 @@ static bool8 BufferTradeParties(void) case 3: if (id == 0) { - sub_80771AC(1); + RequestLinkData(1); } sTradeMenuData->bufferPartyState++; break; @@ -1002,7 +1002,7 @@ static bool8 BufferTradeParties(void) case 7: if (id == 0) { - sub_80771AC(1); + RequestLinkData(1); } sTradeMenuData->bufferPartyState++; break; @@ -1021,7 +1021,7 @@ static bool8 BufferTradeParties(void) case 11: if (id == 0) { - sub_80771AC(1); + RequestLinkData(1); } sTradeMenuData->bufferPartyState++; break; @@ -1040,7 +1040,7 @@ static bool8 BufferTradeParties(void) case 15: if (id == 0) { - sub_80771AC(3); + RequestLinkData(3); } sTradeMenuData->bufferPartyState++; break; @@ -1059,7 +1059,7 @@ static bool8 BufferTradeParties(void) case 19: if (id == 0) { - sub_80771AC(4); + RequestLinkData(4); } sTradeMenuData->bufferPartyState++; break; @@ -1652,11 +1652,11 @@ static void CancelTrade_1(void) { if (gWirelessCommType) { - sub_800ADF8(); + SetLinkStandbyCallback(); } else { - sub_800ABF4(12); + SetCloseLinkCallbackAndType(12); } sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2; @@ -1692,7 +1692,7 @@ static void LinkTradeWaitForQueue(void) { if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0) { - sub_800ADF8(); + SetLinkStandbyCallback(); sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; } } @@ -4566,7 +4566,7 @@ static void CB2_SaveAndEndTrade(void) DrawTextOnTradeWindow(0, gStringVar4, 0); break; case 1: - sub_8077288(0); + SetTradeLinkStandbyCallback(0); gMain.state = 100; sTradeData->timer = 0; break; @@ -4644,7 +4644,7 @@ static void CB2_SaveAndEndTrade(void) case 41: if (sTradeData->timer == 0) { - sub_8077288(1); + SetTradeLinkStandbyCallback(1); gMain.state = 42; } else @@ -4663,7 +4663,7 @@ static void CB2_SaveAndEndTrade(void) if (++sTradeData->timer > 60) { gMain.state++; - sub_8077288(2); + SetTradeLinkStandbyCallback(2); } break; case 6: @@ -4685,11 +4685,11 @@ static void CB2_SaveAndEndTrade(void) { if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) { - sub_8077288(3); + SetTradeLinkStandbyCallback(3); } else { - sub_800AC34(); + SetCloseLinkCallback(); } gMain.state++; } @@ -4902,7 +4902,7 @@ static void CB2_SaveAndEndWirelessTrade(void) DrawTextOnTradeWindow(0, gStringVar4, 0); break; case 1: - sub_8077288(0); + SetTradeLinkStandbyCallback(0); gMain.state = 2; sTradeData->timer = 0; break; @@ -4950,7 +4950,7 @@ static void CB2_SaveAndEndWirelessTrade(void) case 7: if (sTradeData->timer == 0) { - sub_8077288(1); + SetTradeLinkStandbyCallback(1); gMain.state = 8; } else @@ -4969,7 +4969,7 @@ static void CB2_SaveAndEndWirelessTrade(void) if (++sTradeData->timer > 60) { gMain.state++; - sub_8077288(2); + SetTradeLinkStandbyCallback(2); } break; case 10: @@ -4983,7 +4983,7 @@ static void CB2_SaveAndEndWirelessTrade(void) case 11: if (!gPaletteFade.active && IsBGMStopped() == TRUE) { - sub_8077288(3); + SetTradeLinkStandbyCallback(3); gMain.state = 12; } break; diff --git a/src/trainer_card.c b/src/trainer_card.c index fb92dc336e..3a9dbba8ab 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -498,7 +498,7 @@ static void Task_TrainerCard(u8 taskId) } break; case STATE_WAIT_LINK_PARTNER: - sub_800AC34(); + SetCloseLinkCallback(); DrawDialogueFrame(0, 1); AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); CopyWindowToVram(0, 3); diff --git a/src/union_room.c b/src/union_room.c index 1ef8cd4cb0..f2c35ac8e9 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1483,7 +1483,7 @@ static void Task_ExchangeCards(u8 taskId) { case 0: if (GetMultiplayerId() == 0) - sub_800A4D8(2); + SendBlockRequest(2); gTasks[taskId].data[0]++; break; case 1: @@ -1759,7 +1759,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) } else { - sub_800ADF8(); + SetLinkStandbyCallback(); data[0] = 3; } } @@ -1795,7 +1795,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) DestroyTask(taskId); break; case 7: - sub_800AC34(); + SetCloseLinkCallback(); data[0] = 8; break; case 8: @@ -2018,7 +2018,7 @@ static void Task_MEvent_Leader(u8 taskId) Free(data->field_8); Free(data->field_0); Free(data->field_4); - sub_800ADF8(); + SetLinkStandbyCallback(); data->state++; break; case 17: @@ -2188,7 +2188,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 11: data->state++; - sub_800ADF8(); + SetLinkStandbyCallback(); break; case 12: if (IsLinkTaskFinished()) @@ -2367,7 +2367,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) break; case 13: data->state++; - sub_800ADF8(); + SetLinkStandbyCallback(); break; case 14: if (IsLinkTaskFinished()) @@ -2714,7 +2714,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case UR_STATE_REQUEST_DECLINED: - sub_800AC34(); + SetCloseLinkCallback(); uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; case UR_STATE_SEND_TRADE_REQUST: @@ -2763,7 +2763,7 @@ static void Task_RunUnionRoom(u8 taskId) if (PrintOnTextbox(&uroom->textState, gStringVar4)) { uroom->state = UR_STATE_WAIT_FINISH_READING_CARD; - sub_800ADF8(); + SetLinkStandbyCallback(); uroom->partnerYesNoResponse = 0; uroom->recvActivityRequest[0] = 0; } @@ -2940,7 +2940,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case UR_STATE_DECLINE_ACTIVITY_REQUEST: - sub_800AC34(); + SetCloseLinkCallback(); uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; case UR_STATE_CANCEL_REQUEST_PRINT_MSG: @@ -2962,7 +2962,7 @@ static void Task_RunUnionRoom(u8 taskId) ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4); break; case UR_STATE_START_ACTIVITY_LINK: - sub_800ADF8(); + SetLinkStandbyCallback(); uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK; break; case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK: @@ -3231,7 +3231,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom * else if (id == 2) // No activity { uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; - sub_800AC34(); + SetCloseLinkCallback(); return FALSE; } } diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 4b2aa0bb12..b9ddd74a75 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -174,7 +174,7 @@ void CB2_UnionRoomBattle(void) } else { - sub_800AC34(); + SetCloseLinkCallback(); if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM)) { gMain.state = 6; @@ -190,7 +190,7 @@ void CB2_UnionRoomBattle(void) case 50: if (!UpdatePaletteFade()) { - sub_800ADF8(); + SetLinkStandbyCallback(); gMain.state++; } break; diff --git a/src/union_room_chat.c b/src/union_room_chat.c index fefb285a85..0e7cacf318 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1267,7 +1267,7 @@ static void Chat_Exit(void) case 5: if (IsLinkTaskFinished() && !sub_8011A9C()) { - sub_800AC34(); + SetCloseLinkCallback(); sChat->exitDelayTimer = 0; sChat->funcState++; } @@ -1302,7 +1302,7 @@ static void Chat_Drop(void) case 1: if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C()) { - sub_800AC34(); + SetCloseLinkCallback(); sChat->exitDelayTimer = 0; sChat->funcState++; } @@ -1348,7 +1348,7 @@ static void Chat_Disbanded(void) case 2: if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C()) { - sub_800AC34(); + SetCloseLinkCallback(); sChat->exitDelayTimer = 0; sChat->funcState++; } From 3779422489e81c139ece633e1b6409b06d228d7c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 13 Aug 2020 17:42:12 -0400 Subject: [PATCH 61/85] Split contest funcs from script_pokemon_util --- data/maps/ContestHall/scripts.inc | 4 +- data/scripts/contest_hall.inc | 2 +- data/specials.inc | 6 +- include/contest_util.h | 3 + include/script_pokemon_80F8.h | 10 - include/script_pokemon_util.h | 11 + include/script_pokemon_util_80F87D8.h | 9 - ld_script.txt | 4 +- src/battle_dome.c | 2 +- src/battle_setup.c | 2 +- src/cable_club.c | 2 +- src/contest.c | 1 - src/contest_util.c | 487 +++++++++++++++++ src/frontier_util.c | 2 +- src/overworld.c | 2 +- src/post_battle_event_funcs.c | 2 +- src/scrcmd.c | 4 +- src/script_pokemon_util.c | 225 ++++++++ src/script_pokemon_util_80F87D8.c | 726 -------------------------- src/trainer_card.c | 2 +- src/union_room.c | 2 +- 21 files changed, 744 insertions(+), 764 deletions(-) delete mode 100644 include/script_pokemon_80F8.h create mode 100644 include/script_pokemon_util.h delete mode 100644 include/script_pokemon_util_80F87D8.h create mode 100755 src/script_pokemon_util.c delete mode 100755 src/script_pokemon_util_80F87D8.c diff --git a/data/maps/ContestHall/scripts.inc b/data/maps/ContestHall/scripts.inc index 33e074e8ab..f9c3f4794d 100644 --- a/data/maps/ContestHall/scripts.inc +++ b/data/maps/ContestHall/scripts.inc @@ -18,7 +18,7 @@ ContestHall_OnTransition: @ 823B79F ContestHall_EventScript_ReadyContestMusic:: @ 823B7AF call ContestHall_EventScript_TryWaitForLink - special ScriptGetMultiplayerId + special GetContestMultiplayerId compare VAR_RESULT, 0 call_if_eq ContestHall_EventScript_SaveContestMusicPlayer1 compare VAR_RESULT, 1 @@ -136,7 +136,7 @@ ContestHall_EventScript_SetRandomAudience7:: @ 823B8ED ContestHall_EventScript_GetRandomAudienceGfxId:: @ 823B8F8 setvar VAR_RESULT, 32 - special ScriptRandom + special GenerateContestRand addvar VAR_RESULT, 1 switch VAR_RESULT case 1, ContestHall_EventScript_RandomAudienceNinjaBoy diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 48fd2e293c..d08267c8e4 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -526,7 +526,7 @@ ContestHall_EventScript_AudienceHeartEmotes:: @ 827A34F ContestHall_EventScript_DisplayHearts:: @ 827A3E5 setvar VAR_RESULT, 8 - special ScriptRandom + special GenerateContestRand compare VAR_RESULT, 0 call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember1 compare VAR_RESULT, 1 diff --git a/data/specials.inc b/data/specials.inc index 0f78f981f5..a9f648aab4 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -149,7 +149,7 @@ gSpecials:: @ 81DBA64 def_special SaveMuseumContestPainting def_special DoesContestCategoryHaveWinner def_special CountPlayerContestPaintings - def_special ShowContestWinner + def_special ShowContestWinnerPainting def_special MauvilleGymSetDefaultBarriers def_special MauvilleGymPressSwitch def_special ShowFieldMessageStringVar4 @@ -336,7 +336,7 @@ gSpecials:: @ 81DBA64 def_special BattleSetup_StartLatiBattle def_special SetRoute119Weather def_special SetRoute123Weather - def_special ScriptGetMultiplayerId + def_special GetContestMultiplayerId def_special ScriptGetPartyMonSpecies def_special IsSelectedMonEgg def_special TryInitBattleTowerAwardManObjectEvent @@ -350,7 +350,7 @@ gSpecials:: @ 81DBA64 def_special BufferLottoTicketNumber def_special TryHideBattleTowerReporter def_special DoesPartyHaveEnigmaBerry - def_special ScriptRandom + def_special GenerateContestRand def_special SetChampionSaveWarp def_special TryPutTreasureInvestigatorsOnAir def_special TryPutLotteryWinnerReportOnAir diff --git a/include/contest_util.h b/include/contest_util.h index d0021153d5..76f9ae522a 100644 --- a/include/contest_util.h +++ b/include/contest_util.h @@ -7,5 +7,8 @@ void StartContest(void); void BufferContestantMonSpecies(void); void ShowContestResults(void); void ContestLinkTransfer(u8); +void ShowContestWinnerPainting(void); +u16 GetContestRand(void); +u8 CountPlayerContestPaintings(void); #endif // GUARD_CONTEST_UTIL_H diff --git a/include/script_pokemon_80F8.h b/include/script_pokemon_80F8.h deleted file mode 100644 index 8dd7ed0c0f..0000000000 --- a/include/script_pokemon_80F8.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef GUARD_SCRIPTPOKE80F8_H -#define GUARD_SCRIPTPOKE80F8_H - -void ShowContestWinner(void); -u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); -u8 ScriptGiveEgg(u16); -void CreateScriptedWildMon(u16, u8, u16); -void ScriptSetMonMoveSlot(u8, u16, u8); - -#endif diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h new file mode 100644 index 0000000000..120c28a637 --- /dev/null +++ b/include/script_pokemon_util.h @@ -0,0 +1,11 @@ +#ifndef GUARD_SCRIPT_POKEMON_UTIL +#define GUARD_SCRIPT_POKEMON_UTIL + +u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); +u8 ScriptGiveEgg(u16); +void CreateScriptedWildMon(u16, u8, u16); +void ScriptSetMonMoveSlot(u8, u16, u8); +void ReducePlayerPartyToSelectedMons(void); +void HealPlayerParty(void); + +#endif // GUARD_SCRIPT_POKEMON_UTIL diff --git a/include/script_pokemon_util_80F87D8.h b/include/script_pokemon_util_80F87D8.h deleted file mode 100644 index 7c246b7453..0000000000 --- a/include/script_pokemon_util_80F87D8.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H -#define GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H - -u16 GetContestRand(void); -void ReducePlayerPartyToSelectedMons(void); -void HealPlayerParty(void); -u8 CountPlayerContestPaintings(void); - -#endif // GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H diff --git a/ld_script.txt b/ld_script.txt index 0e7e2f2346..6b14dc1899 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -170,7 +170,7 @@ SECTIONS { src/secret_base.o(.text); src/tv.o(.text); src/contest_util.o(.text); - src/script_pokemon_util_80F87D8.o(.text); + src/script_pokemon_util.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); src/fldeff_misc.o(.text); @@ -545,7 +545,7 @@ SECTIONS { src/secret_base.o(.rodata); src/tv.o(.rodata); src/contest_util.o(.rodata); - src/script_pokemon_util_80F87D8.o(.rodata); + src/script_pokemon_util.o(.rodata); src/pokemon_size_record.o(.rodata) src/fldeff_misc.o(.rodata); src/field_special_scene.o(.rodata); diff --git a/src/battle_dome.c b/src/battle_dome.c index 6f3d111ba5..9e687f1311 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -29,7 +29,7 @@ #include "international_string_util.h" #include "trainer_pokemon_sprites.h" #include "scanline_effect.h" -#include "script_pokemon_util_80F87D8.h" +#include "script_pokemon_util.h" #include "graphics.h" #include "constants/battle_dome.h" #include "constants/frontier_util.h" diff --git a/src/battle_setup.c b/src/battle_setup.c index 40e36d302e..b6b97ea905 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -12,7 +12,7 @@ #include "fieldmap.h" #include "random.h" #include "starter_choose.h" -#include "script_pokemon_80F8.h" +#include "script_pokemon_util.h" #include "palette.h" #include "window.h" #include "event_object_movement.h" diff --git a/src/cable_club.c b/src/cable_club.c index b6fba361e9..982bd9fd3c 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -20,7 +20,7 @@ #include "union_room.h" #include "mevent2.h" #include "script.h" -#include "script_pokemon_util_80F87D8.h" +#include "script_pokemon_util.h" #include "sound.h" #include "start_menu.h" #include "string_util.h" diff --git a/src/contest.c b/src/contest.c index ab3897fa15..8ff696699d 100644 --- a/src/contest.c +++ b/src/contest.c @@ -40,7 +40,6 @@ #include "strings.h" #include "contest_effect.h" #include "contest_link.h" -#include "script_pokemon_util_80F87D8.h" #include "international_string_util.h" #include "data.h" #include "constants/rgb.h" diff --git a/src/contest_util.c b/src/contest_util.c index 23b9dcaaa9..50845b7072 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -6,10 +6,12 @@ #include "contest.h" #include "contest_util.h" #include "contest_link.h" +#include "contest_painting.h" #include "data.h" #include "decompress.h" #include "dma3.h" #include "event_data.h" +#include "event_object_movement.h" #include "field_specials.h" #include "gpu_regs.h" #include "graphics.h" @@ -27,6 +29,7 @@ #include "save.h" #include "scanline_effect.h" #include "script.h" +#include "script_menu.h" #include "sound.h" #include "string_util.h" #include "strings.h" @@ -36,6 +39,7 @@ #include "tv.h" #include "util.h" #include "window.h" +#include "constants/event_objects.h" #include "constants/field_specials.h" #include "constants/game_stat.h" #include "constants/rgb.h" @@ -160,6 +164,13 @@ static void Task_LinkContest_CalculateTurnOrderRS(u8); static void Task_LinkContest_Disconnect(u8); static void Task_LinkContest_WaitDisconnect(u8); static void SpriteCB_Confetti(struct Sprite *sprite); +static void Task_ShowContestEntryMonPic(u8 taskId); +static void Task_LinkContestWaitForConnection(u8 taskId); + +extern const u16 gObjectEventPalette8[]; +extern const u16 gObjectEventPalette17[]; +extern const u16 gObjectEventPalette33[]; +extern const u16 gObjectEventPalette34[]; static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal"); static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp"); @@ -2530,3 +2541,479 @@ static void Task_LinkContest_WaitDisconnect(u8 taskId) EnableBothScriptContexts(); } } + +void SetContestTrainerGfxIds(void) +{ + gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId; + gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId; + gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId; +} + +// Unused +void sub_80F8814(void) +{ + u16 var1; + u8 var0 = gSpecialVar_0x8005; + switch (var0) + { + case 0: + var1 = 3; + break; + case 1: + var1 = 4; + break; + case 2: + var1 = 5; + break; + default: + var1 = 100; + break; + } + + gSpecialVar_0x8004 = var1; +} + +void BufferContestTrainerAndMonNames(void) +{ + BufferContestantTrainerName(); + BufferContestantMonNickname(); + BufferContestantMonSpecies(); +} + +// Unused +void DoesContestCategoryHaveWinner(void) +{ + int contestWinner; + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + contestWinner = 8; + break; + case CONTEST_CATEGORY_BEAUTY: + contestWinner = 9; + break; + case CONTEST_CATEGORY_CUTE: + contestWinner = 10; + break; + case CONTEST_CATEGORY_SMART: + contestWinner = 11; + break; + case CONTEST_CATEGORY_TOUGH: + default: + contestWinner = 12; + break; + } + + if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE) + gSpecialVar_0x8004 = FALSE; + else + gSpecialVar_0x8004 = TRUE; +} + +void SaveMuseumContestPainting(void) +{ + sub_80DEDA8(0xFF); +} + +void ShouldReadyContestArtist(void) +{ + if (gContestFinalStandings[gContestPlayerMonIndex] == 0 + && gSpecialVar_ContestRank == CONTEST_RANK_MASTER + && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) + { + gSpecialVar_0x8004 = TRUE; + } + else + { + gSpecialVar_0x8004 = FALSE; + } +} + +u8 CountPlayerContestPaintings(void) +{ + int i; + u8 count = 0; + + for (i = 0; i < 5; i++) + { + if (gSaveBlock1Ptr->contestWinners[8 + i].species) + count++; + } + + return count; +} + +// Unused +void sub_80F8970(void) +{ + s16 conditions[CONTESTANT_COUNT]; + int i, j; + s16 condition; + s8 var0; + u8 var2; + u8 r8; + u8 r7; + + for (i = 0; i < CONTESTANT_COUNT; i++) + conditions[i] = gContestMonRound1Points[i]; + + for (i = 0; i < CONTESTANT_COUNT - 1; i++) + { + for (j = CONTESTANT_COUNT - 1; j > i; j--) + { + if (conditions[j - 1] < conditions[j]) + { + int temp; + SWAP(conditions[j], conditions[j - 1], temp) + } + } + } + + condition = conditions[gSpecialVar_0x8006]; + var0 = 0; + r8 = 0; + for (i = 0; i < CONTESTANT_COUNT; i++) + { + if (conditions[i] == condition) + { + var0++; + if (i == gSpecialVar_0x8006) + r8 = var0; + } + } + + for (i = 0; i < CONTESTANT_COUNT; i++) + { + if (conditions[i] == condition) + break; + } + + r7 = i; + var2 = r8; + for (i = 0; i < CONTESTANT_COUNT; i++) + { + if (condition == gContestMonRound1Points[i]) + { + if (var2 == 1) + break; + var2--; + } + } + + StringCopy(gStringVar1, gContestMons[i].nickname); + StringCopy(gStringVar2, gContestMons[i].trainerName); + sub_81DB5AC(gStringVar2); + + if (var0 == 1) + gSpecialVar_0x8006 = r7; + else if (r8 == var0) + gSpecialVar_0x8006 = r7; + else + gSpecialVar_0x8006 = r7 + 4; +} + +static void ExitContestWinnerPainting(void) +{ + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ShowContestWinnerPainting(void) +{ + SetMainCallback2(CB2_ContestPainting); + gMain.savedCallback = ExitContestWinnerPainting; +} + +void SetLinkContestPlayerGfx(void) +{ + int i; + + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + int version = (u8)gLinkPlayers[i].version; + if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + { + if (gLinkPlayers[i].gender == MALE) + gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN; + else + gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY; + } + } + + VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId); + VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId); + VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId); + VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId); + } +} + +void LoadLinkContestPlayerPalettes(void) +{ + int i; + u8 objectEventId; + int version; + struct Sprite *sprite; + static const u8 sContestantLocalIds[CONTESTANT_COUNT] = { 3, 4, 5, 14 }; + + gReservedSpritePaletteCount = 12; + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + objectEventId = GetObjectEventIdByLocalIdAndMap(sContestantLocalIds[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + sprite = &gSprites[gObjectEvents[objectEventId].spriteId]; + sprite->oam.paletteNum = 6 + i; + version = (u8)gLinkPlayers[i].version; + if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + { + if (gLinkPlayers[i].gender == MALE) + LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20); + else + LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20); + } + else + { + if (gLinkPlayers[i].gender == MALE) + LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20); + else + LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20); + } + } + } +} + +bool8 GiveMonArtistRibbon(void) +{ + u8 hasArtistRibbon; + + hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON); + if (!hasArtistRibbon + && gContestFinalStandings[gContestPlayerMonIndex] == 0 + && gSpecialVar_ContestRank == CONTEST_RANK_MASTER + && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) + { + hasArtistRibbon = 1; + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon); + if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS) + TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON); + + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 IsContestDebugActive(void) +{ + return FALSE; // gUnknown_0203856C in pokeruby +} + +void ShowContestEntryMonPic(void) +{ + const struct CompressedSpritePalette *palette; + u32 personality, otId; + u16 species; + u8 spriteId; + u8 taskId; + u8 left, top; + + if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF) + { + AllocateMonSpritesGfx(); + left = 10; + top = 3; + species = gContestMons[gSpecialVar_0x8006].species; + personality = gContestMons[gSpecialVar_0x8006].personality; + otId = gContestMons[gSpecialVar_0x8006].otId; + taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = species; + if (gSpecialVar_0x8006 == gContestPlayerMonIndex) + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + else + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + + palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); + LoadCompressedSpritePalette(palette); + SetMultiuseSpriteTemplateToPokemon(species, 1); + gMultiuseSpriteTemplate.paletteTag = palette->tag; + spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0); + + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) + { + if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)) + DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0); + } + else + { + DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0); + } + + gTasks[taskId].data[2] = spriteId; + gTasks[taskId].data[3] = left; + gTasks[taskId].data[4] = top; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].oam.priority = 0; + } +} + +void HideContestEntryMonPic(void) +{ + u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic); + if (taskId != 0xFF) + { + gTasks[taskId].data[0]++; + FreeMonSpritesGfx(); + } +} + +static void Task_ShowContestEntryMonPic(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + struct Sprite *sprite; + + switch(task->data[0]) + { + case 0: + task->data[0]++; + break; + case 1: + task->data[5] = CreateWindowFromRect(10, 3, 8, 8); + SetStandardWindowBorderStyle(task->data[5], 1); + task->data[0]++; + break; + case 2: + break; + case 3: + sprite = &gSprites[task->data[2]]; + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + + if(sprite->oam.affineMode) + FreeOamMatrix(sprite->oam.matrixNum); + + DestroySprite(sprite); + task->data[0]++; + break; + case 4: + ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]); + DestroyTask(taskId); + break; + } +} + +void GetContestMultiplayerId(void) +{ + if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) + && gNumLinkContestPlayers == CONTESTANT_COUNT + && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)) + gSpecialVar_Result = GetMultiplayerId(); + else + gSpecialVar_Result = MAX_LINK_PLAYERS; +} + +void GenerateContestRand(void) +{ + u16 random; + u16 *result; + + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) + { + gContestRngValue = ISO_RANDOMIZE1(gContestRngValue); + random = gContestRngValue >> 16; + result = &gSpecialVar_Result; + } + else + { + result = &gSpecialVar_Result; + random = Random(); + } + *result = random % *result; +} + +u16 GetContestRand(void) +{ + gContestRngValue = ISO_RANDOMIZE1(gContestRngValue); + return gContestRngValue >> 16; +} + +bool8 LinkContestWaitForConnection(void) +{ + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) + { + CreateTask(Task_LinkContestWaitForConnection, 5); + return TRUE; + } + else + { + return FALSE; + } +} + +static void Task_LinkContestWaitForConnection(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (IsLinkTaskFinished()) + { + SetLinkStandbyCallback(); + gTasks[taskId].data[0]++; + } + break; + case 1: + gTasks[taskId].data[0]++; + break; + default: + if (IsLinkTaskFinished() == 1) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } + break; + } +} + +void LinkContestTryShowWirelessIndicator(void) +{ + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) + { + if (gReceivedRemoteLinkPlayers) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(8, 8); + } + } +} + +void LinkContestTryHideWirelessIndicator(void) +{ + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) + { + if (gReceivedRemoteLinkPlayers) + DestroyWirelessStatusIndicatorSprite(); + } +} + +bool8 IsContestWithRSPlayer(void) +{ + if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER) + return TRUE; + else + return FALSE; +} + +void ClearLinkContestFlags(void) +{ + gLinkContestFlags = 0; +} + +bool8 IsWirelessContest(void) +{ + if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) + return TRUE; + else + return FALSE; +} diff --git a/src/frontier_util.c b/src/frontier_util.c index 668771375d..c741a64fea 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -7,7 +7,7 @@ #include "battle_tower.h" #include "field_specials.h" #include "battle.h" -#include "script_pokemon_util_80F87D8.h" +#include "script_pokemon_util.h" #include "main.h" #include "window.h" #include "menu.h" diff --git a/src/overworld.c b/src/overworld.c index ea0d633bcf..1d9f704300 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -44,7 +44,7 @@ #include "save.h" #include "save_location.h" #include "script.h" -#include "script_pokemon_util_80F87D8.h" +#include "script_pokemon_util.h" #include "secret_base.h" #include "sound.h" #include "start_menu.h" diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 4fa5d1b21a..afafca0cad 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -5,7 +5,7 @@ #include "hall_of_fame.h" #include "load_save.h" #include "overworld.h" -#include "script_pokemon_util_80F87D8.h" +#include "script_pokemon_util.h" #include "tv.h" #include "constants/heal_locations.h" #include "constants/flags.h" diff --git a/src/scrcmd.c b/src/scrcmd.c index 4a7f4ea735..8155887843 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -38,7 +38,7 @@ #include "script.h" #include "script_menu.h" #include "script_movement.h" -#include "script_pokemon_80F8.h" +#include "script_pokemon_util.h" #include "shop.h" #include "slot_machine.h" #include "sound.h" @@ -1474,7 +1474,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) if (contestWinnerId != CONTEST_WINNER_ARTIST) SetContestWinnerForPainting(contestWinnerId); - ShowContestWinner(); + ShowContestWinnerPainting(); ScriptContext1_Stop(); return TRUE; } diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c new file mode 100755 index 0000000000..3546ed1269 --- /dev/null +++ b/src/script_pokemon_util.c @@ -0,0 +1,225 @@ +#include "global.h" +#include "battle.h" +#include "battle_gfx_sfx_util.h" +#include "berry.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "international_string_util.h" +#include "link.h" +#include "link_rfu.h" +#include "main.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "party_menu.h" +#include "pokedex.h" +#include "pokemon.h" +#include "random.h" +#include "script.h" +#include "sprite.h" +#include "string_util.h" +#include "tv.h" +#include "constants/items.h" +#include "constants/species.h" +#include "constants/tv.h" +#include "constants/vars.h" +#include "constants/battle_frontier.h" + +static void CB2_ReturnFromChooseHalfParty(void); +static void CB2_ReturnFromChooseBattleFrontierParty(void); + +void HealPlayerParty(void) +{ + u8 i, j; + u8 ppBonuses; + u8 arg[4]; + + // restore HP. + for(i = 0; i < gPlayerPartyCount; i++) + { + u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + arg[0] = maxHP; + arg[1] = maxHP >> 8; + SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); + ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); + + // restore PP. + for(j = 0; j < MAX_MON_MOVES; j++) + { + arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); + } + + // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. + arg[0] = 0; + arg[1] = 0; + arg[2] = 0; + arg[3] = 0; + SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); + } +} + +u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) +{ + u16 nationalDexNum; + int sentToPc; + u8 heldItem[2]; + struct Pokemon mon; + + CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); + sentToPc = GiveMonToPlayer(&mon); + nationalDexNum = SpeciesToNationalPokedexNum(species); + + switch(sentToPc) + { + case 0: + case 1: + GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN); + GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); + break; + } + return sentToPc; +} + +u8 ScriptGiveEgg(u16 species) +{ + struct Pokemon mon; + u8 isEgg; + + CreateEgg(&mon, species, TRUE); + isEgg = TRUE; + SetMonData(&mon, MON_DATA_IS_EGG, &isEgg); + + return GiveMonToPlayer(&mon); +} + +void HasEnoughMonsForDoubleBattle(void) +{ + switch (GetMonsStateToDoubles()) + { + case PLAYER_HAS_TWO_USABLE_MONS: + gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; + break; + case PLAYER_HAS_ONE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_MON; + break; + case PLAYER_HAS_ONE_USABLE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; + break; + } +} + +static bool8 CheckPartyMonHasHeldItem(u16 item) +{ + int i; + + for(i = 0; i < PARTY_SIZE; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) + return TRUE; + } + return FALSE; +} + +bool8 DoesPartyHaveEnigmaBerry(void) +{ + bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); + if (hasItem == TRUE) + GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); + + return hasItem; +} + +void CreateScriptedWildMon(u16 species, u8 level, u16 item) +{ + u8 heldItem[2]; + + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (item) + { + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); + } +} + +void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) +{ + if (monIndex > PARTY_SIZE) + monIndex = gPlayerPartyCount - 1; + + SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); +} + +// Note: When control returns to the event script, gSpecialVar_Result will be +// TRUE if the party selection was successful. +void ChooseHalfPartyForBattle(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseHalfParty; + VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); + InitChooseHalfPartyForBattle(0); +} + +static void CB2_ReturnFromChooseHalfParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + gSpecialVar_Result = FALSE; + break; + default: + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ChoosePartyForBattleFrontier(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty; + InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1); +} + +static void CB2_ReturnFromChooseBattleFrontierParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + gSpecialVar_Result = FALSE; + break; + default: + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ReducePlayerPartyToSelectedMons(void) +{ + struct Pokemon party[MAX_FRONTIER_PARTY_SIZE]; + int i; + + CpuFill32(0, party, sizeof party); + + // copy the selected pokemon according to the order. + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) + if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop + party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal + + CpuFill32(0, gPlayerParty, sizeof gPlayerParty); + + // overwrite the first 4 with the order copied to. + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) + gPlayerParty[i] = party[i]; + + CalculatePlayerPartyCount(); +} diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c deleted file mode 100755 index b151b56509..0000000000 --- a/src/script_pokemon_util_80F87D8.c +++ /dev/null @@ -1,726 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_gfx_sfx_util.h" -#include "berry.h" -#include "contest.h" -#include "contest_util.h" -#include "contest_painting.h" -#include "data.h" -#include "daycare.h" -#include "decompress.h" -#include "event_data.h" -#include "event_object_movement.h" -#include "international_string_util.h" -#include "link.h" -#include "link_rfu.h" -#include "main.h" -#include "menu.h" -#include "overworld.h" -#include "palette.h" -#include "party_menu.h" -#include "pokedex.h" -#include "pokemon.h" -#include "random.h" -#include "script.h" -#include "script_menu.h" -#include "sprite.h" -#include "string_util.h" -#include "tv.h" -#include "constants/event_objects.h" -#include "constants/items.h" -#include "constants/species.h" -#include "constants/tv.h" -#include "constants/vars.h" -#include "constants/battle_frontier.h" - -extern const u16 gObjectEventPalette8[]; -extern const u16 gObjectEventPalette17[]; -extern const u16 gObjectEventPalette33[]; -extern const u16 gObjectEventPalette34[]; - -static const u8 gUnknown_0858D8EC[] = { 3, 4, 5, 14 }; - -static void Task_ShowContestEntryMonPic(u8 taskId); -static void Task_LinkContestWaitForConnection(u8 taskId); -static void CB2_ReturnFromChooseHalfParty(void); -static void CB2_ReturnFromChooseBattleFrontierParty(void); - -void SetContestTrainerGfxIds(void) -{ - gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId; - gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId; - gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId; -} - -// Unused -void sub_80F8814(void) -{ - u16 var1; - u8 var0 = gSpecialVar_0x8005; - switch (var0) - { - case 0: - var1 = 3; - break; - case 1: - var1 = 4; - break; - case 2: - var1 = 5; - break; - default: - var1 = 100; - break; - } - - gSpecialVar_0x8004 = var1; -} - -void BufferContestTrainerAndMonNames(void) -{ - BufferContestantTrainerName(); - BufferContestantMonNickname(); - BufferContestantMonSpecies(); -} - -// Unused -void DoesContestCategoryHaveWinner(void) -{ - int contestWinner; - switch (gSpecialVar_ContestCategory) - { - case CONTEST_CATEGORY_COOL: - contestWinner = 8; - break; - case CONTEST_CATEGORY_BEAUTY: - contestWinner = 9; - break; - case CONTEST_CATEGORY_CUTE: - contestWinner = 10; - break; - case CONTEST_CATEGORY_SMART: - contestWinner = 11; - break; - case CONTEST_CATEGORY_TOUGH: - default: - contestWinner = 12; - break; - } - - if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE) - gSpecialVar_0x8004 = FALSE; - else - gSpecialVar_0x8004 = TRUE; -} - -void SaveMuseumContestPainting(void) -{ - sub_80DEDA8(0xFF); -} - -void ShouldReadyContestArtist(void) -{ - if (gContestFinalStandings[gContestPlayerMonIndex] == 0 - && gSpecialVar_ContestRank == CONTEST_RANK_MASTER - && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) - { - gSpecialVar_0x8004 = TRUE; - } - else - { - gSpecialVar_0x8004 = FALSE; - } -} - -u8 CountPlayerContestPaintings(void) -{ - int i; - u8 count = 0; - - for (i = 0; i < 5; i++) - { - if (gSaveBlock1Ptr->contestWinners[8 + i].species) - count++; - } - - return count; -} - -// Unused -void sub_80F8970(void) -{ - s16 conditions[CONTESTANT_COUNT]; - int i, j; - s16 condition; - s8 var0; - u8 var2; - u8 r8; - u8 r7; - - for (i = 0; i < CONTESTANT_COUNT; i++) - conditions[i] = gContestMonRound1Points[i]; - - for (i = 0; i < CONTESTANT_COUNT - 1; i++) - { - for (j = CONTESTANT_COUNT - 1; j > i; j--) - { - if (conditions[j - 1] < conditions[j]) - { - int temp; - SWAP(conditions[j], conditions[j - 1], temp) - } - } - } - - condition = conditions[gSpecialVar_0x8006]; - var0 = 0; - r8 = 0; - for (i = 0; i < CONTESTANT_COUNT; i++) - { - if (conditions[i] == condition) - { - var0++; - if (i == gSpecialVar_0x8006) - r8 = var0; - } - } - - for (i = 0; i < CONTESTANT_COUNT; i++) - { - if (conditions[i] == condition) - break; - } - - r7 = i; - var2 = r8; - for (i = 0; i < CONTESTANT_COUNT; i++) - { - if (condition == gContestMonRound1Points[i]) - { - if (var2 == 1) - break; - var2--; - } - } - - StringCopy(gStringVar1, gContestMons[i].nickname); - StringCopy(gStringVar2, gContestMons[i].trainerName); - sub_81DB5AC(gStringVar2); - - if (var0 == 1) - gSpecialVar_0x8006 = r7; - else if (r8 == var0) - gSpecialVar_0x8006 = r7; - else - gSpecialVar_0x8006 = r7 + 4; -} - -static void ShowContestWinnerCleanup(void) -{ - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); -} - -void ShowContestWinner(void) -{ - /* - if(gUnknown_0203856C) - { - sub_80AAF30(); - gBattleStruct->unk15DDF = 1; - gBattleStruct->unk15DDE = sub_80B2C4C(254, 0); - Contest_SaveWinner(3); - gUnknown_0203856C = 0; - } - */ - - SetMainCallback2(CB2_ContestPainting); - gMain.savedCallback = ShowContestWinnerCleanup; -} - -void SetLinkContestPlayerGfx(void) -{ - int i; - - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) - { - for (i = 0; i < gNumLinkContestPlayers; i++) - { - int version = (u8)gLinkPlayers[i].version; - if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) - { - if (gLinkPlayers[i].gender == MALE) - gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN; - else - gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY; - } - } - - VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId); - VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId); - VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId); - VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId); - } -} - -void LoadLinkContestPlayerPalettes(void) -{ - int i; - u8 objectEventId; - int version; - struct Sprite *sprite; - - gReservedSpritePaletteCount = 12; - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) - { - for (i = 0; i < gNumLinkContestPlayers; i++) - { - objectEventId = GetObjectEventIdByLocalIdAndMap(gUnknown_0858D8EC[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - sprite = &gSprites[gObjectEvents[objectEventId].spriteId]; - sprite->oam.paletteNum = 6 + i; - version = (u8)gLinkPlayers[i].version; - if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) - { - if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20); - else - LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20); - } - else - { - if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20); - else - LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20); - } - } - } -} - -u8 GiveMonArtistRibbon(void) -{ - u8 hasArtistRibbon; - - hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON); - if (!hasArtistRibbon - && gContestFinalStandings[gContestPlayerMonIndex] == 0 - && gSpecialVar_ContestRank == CONTEST_RANK_MASTER - && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) - { - hasArtistRibbon = 1; - SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon); - if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS) - TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON); - - return 1; - } - else - { - return 0; - } -} - -bool8 IsContestDebugActive(void) -{ - return FALSE; // gUnknown_0203856C in pokeruby -} - -void ShowContestEntryMonPic(void) -{ - const struct CompressedSpritePalette *palette; - u32 personality, otId; - u16 species; - u8 spriteId; - u8 taskId; - u8 left, top; - - if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF) - { - AllocateMonSpritesGfx(); - left = 10; - top = 3; - species = gContestMons[gSpecialVar_0x8006].species; - personality = gContestMons[gSpecialVar_0x8006].personality; - otId = gContestMons[gSpecialVar_0x8006].otId; - taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = species; - if (gSpecialVar_0x8006 == gContestPlayerMonIndex) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); - else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); - - palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); - LoadCompressedSpritePalette(palette); - SetMultiuseSpriteTemplateToPokemon(species, 1); - gMultiuseSpriteTemplate.paletteTag = palette->tag; - spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0); - - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) - { - if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)) - DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0); - } - else - { - DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0); - } - - gTasks[taskId].data[2] = spriteId; - gTasks[taskId].data[3] = left; - gTasks[taskId].data[4] = top; - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].oam.priority = 0; - } -} - -void HideContestEntryMonPic(void) -{ - u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic); - if (taskId != 0xFF) - { - gTasks[taskId].data[0]++; - FreeMonSpritesGfx(); - } -} - -static void Task_ShowContestEntryMonPic(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - struct Sprite *sprite; - - switch(task->data[0]) - { - case 0: - task->data[0]++; - break; - case 1: - task->data[5] = CreateWindowFromRect(10, 3, 8, 8); - SetStandardWindowBorderStyle(task->data[5], 1); - task->data[0]++; - break; - case 2: - break; - case 3: - sprite = &gSprites[task->data[2]]; - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); - - if(sprite->oam.affineMode) - FreeOamMatrix(sprite->oam.matrixNum); - - DestroySprite(sprite); - task->data[0]++; - break; - case 4: - ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]); - DestroyTask(taskId); - break; - } -} - -void ScriptGetMultiplayerId(void) -{ - if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) - && gNumLinkContestPlayers == CONTESTANT_COUNT - && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)) - gSpecialVar_Result = GetMultiplayerId(); - else - gSpecialVar_Result = MAX_LINK_PLAYERS; -} - -void ScriptRandom(void) -{ - u16 random; - u16 *scriptPtr; - - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) - { - gContestRngValue = ISO_RANDOMIZE1(gContestRngValue); - random = gContestRngValue >> 16; - scriptPtr = &gSpecialVar_Result; - } - else - { - scriptPtr = &gSpecialVar_Result; - random = Random(); - } - *scriptPtr = random % *scriptPtr; -} - -u16 GetContestRand(void) -{ - gContestRngValue = ISO_RANDOMIZE1(gContestRngValue); - return gContestRngValue >> 16; -} - -bool8 LinkContestWaitForConnection(void) -{ - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) - { - CreateTask(Task_LinkContestWaitForConnection, 5); - return TRUE; - } - else - { - return FALSE; - } -} - -static void Task_LinkContestWaitForConnection(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - case 0: - if (IsLinkTaskFinished()) - { - SetLinkStandbyCallback(); - gTasks[taskId].data[0]++; - } - break; - case 1: - gTasks[taskId].data[0]++; - break; - default: - if (IsLinkTaskFinished() == 1) - { - EnableBothScriptContexts(); - DestroyTask(taskId); - } - break; - } -} - -void LinkContestTryShowWirelessIndicator(void) -{ - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) - { - if (gReceivedRemoteLinkPlayers) - { - LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(8, 8); - } - } -} - -void LinkContestTryHideWirelessIndicator(void) -{ - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) - { - if (gReceivedRemoteLinkPlayers) - DestroyWirelessStatusIndicatorSprite(); - } -} - -bool8 IsContestWithRSPlayer(void) -{ - if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER) - return TRUE; - else - return FALSE; -} - -void ClearLinkContestFlags(void) -{ - gLinkContestFlags = 0; -} - -bool8 IsWirelessContest(void) -{ - if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS) - return TRUE; - else - return FALSE; -} - -void HealPlayerParty(void) -{ - u8 i, j; - u8 ppBonuses; - u8 arg[4]; - - // restore HP. - for(i = 0; i < gPlayerPartyCount; i++) - { - u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - arg[0] = maxHP; - arg[1] = maxHP >> 8; - SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); - ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); - - // restore PP. - for(j = 0; j < MAX_MON_MOVES; j++) - { - arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); - SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); - } - - // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. - arg[0] = 0; - arg[1] = 0; - arg[2] = 0; - arg[3] = 0; - SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); - } -} - -u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) -{ - u16 nationalDexNum; - int sentToPc; - u8 heldItem[2]; - struct Pokemon mon; - - CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); - heldItem[0] = item; - heldItem[1] = item >> 8; - SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); - sentToPc = GiveMonToPlayer(&mon); - nationalDexNum = SpeciesToNationalPokedexNum(species); - - switch(sentToPc) - { - case 0: - case 1: - GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN); - GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); - break; - } - return sentToPc; -} - -u8 ScriptGiveEgg(u16 species) -{ - struct Pokemon mon; - u8 isEgg; - - CreateEgg(&mon, species, TRUE); - isEgg = TRUE; - SetMonData(&mon, MON_DATA_IS_EGG, &isEgg); - - return GiveMonToPlayer(&mon); -} - -void HasEnoughMonsForDoubleBattle(void) -{ - switch (GetMonsStateToDoubles()) - { - case PLAYER_HAS_TWO_USABLE_MONS: - gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; - break; - case PLAYER_HAS_ONE_MON: - gSpecialVar_Result = PLAYER_HAS_ONE_MON; - break; - case PLAYER_HAS_ONE_USABLE_MON: - gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; - break; - } -} - -static bool8 CheckPartyMonHasHeldItem(u16 item) -{ - int i; - - for(i = 0; i < PARTY_SIZE; i++) - { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) - return TRUE; - } - return FALSE; -} - -bool8 DoesPartyHaveEnigmaBerry(void) -{ - bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); - if (hasItem == TRUE) - GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); - - return hasItem; -} - -void CreateScriptedWildMon(u16 species, u8 level, u16 item) -{ - u8 heldItem[2]; - - ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); - if (item) - { - heldItem[0] = item; - heldItem[1] = item >> 8; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); - } -} - -void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) -{ - if (monIndex > PARTY_SIZE) - monIndex = gPlayerPartyCount - 1; - - SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); -} - -// Note: When control returns to the event script, gSpecialVar_Result will be -// TRUE if the party selection was successful. -void ChooseHalfPartyForBattle(void) -{ - gMain.savedCallback = CB2_ReturnFromChooseHalfParty; - VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); - InitChooseHalfPartyForBattle(0); -} - -static void CB2_ReturnFromChooseHalfParty(void) -{ - switch (gSelectedOrderFromParty[0]) - { - case 0: - gSpecialVar_Result = FALSE; - break; - default: - gSpecialVar_Result = TRUE; - break; - } - - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); -} - -void ChoosePartyForBattleFrontier(void) -{ - gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty; - InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1); -} - -static void CB2_ReturnFromChooseBattleFrontierParty(void) -{ - switch (gSelectedOrderFromParty[0]) - { - case 0: - gSpecialVar_Result = FALSE; - break; - default: - gSpecialVar_Result = TRUE; - break; - } - - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); -} - -void ReducePlayerPartyToSelectedMons(void) -{ - struct Pokemon party[MAX_FRONTIER_PARTY_SIZE]; - int i; - - CpuFill32(0, party, sizeof party); - - // copy the selected pokemon according to the order. - for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) - if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop - party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal - - CpuFill32(0, gPlayerParty, sizeof gPlayerParty); - - // overwrite the first 4 with the order copied to. - for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) - gPlayerParty[i] = party[i]; - - CalculatePlayerPartyCount(); -} diff --git a/src/trainer_card.c b/src/trainer_card.c index 3a9dbba8ab..44b018a7b9 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -25,7 +25,7 @@ #include "graphics.h" #include "pokemon_icon.h" #include "trainer_pokemon_sprites.h" -#include "script_pokemon_util_80F87D8.h" +#include "contest_util.h" #include "constants/songs.h" #include "constants/flags.h" #include "constants/game_stat.h" diff --git a/src/union_room.c b/src/union_room.c index f2c35ac8e9..639420d719 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -32,7 +32,7 @@ #include "random.h" #include "save_location.h" #include "script.h" -#include "script_pokemon_util_80F87D8.h" +#include "script_pokemon_util.h" #include "sound.h" #include "start_menu.h" #include "string_util.h" From 35dca16a3d365563e3d0ef74fc30b586817de35c Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Thu, 13 Aug 2020 21:18:46 -0400 Subject: [PATCH 62/85] matching --- src/battle_anim_water.c | 448 +++------------------------------------- 1 file changed, 30 insertions(+), 418 deletions(-) diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index fa2f38c4bf..12f37dbba2 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -798,17 +798,21 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } -#ifdef NONMATCHING void AnimTask_CreateSurfWave(u8 taskId) { struct BattleAnimBgData animBg; u8 taskId2; + u16 *x, *y; //These pointers are needed to match - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + x = &gBattle_BG1_X; + y = &gBattle_BG1_Y; + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1); + SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8)); SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); sub_80A6B30(&animBg); + if (!IsContest()) { SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); @@ -833,30 +837,30 @@ void AnimTask_CreateSurfWave(u8 taskId) gTasks[taskId2].data[2] = 0x1000; if (IsContest()) { - gBattle_BG1_X = -80; - gBattle_BG1_Y = -48; + *x = -80; + *y = -48; gTasks[taskId].data[0] = 2; gTasks[taskId].data[1] = 1; gTasks[taskId2].data[3] = 0; } else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) { - gBattle_BG1_X = -224; - gBattle_BG1_Y = 256; + *x = -224; + *y = 256; gTasks[taskId].data[0] = 2; gTasks[taskId].data[1] = -1; gTasks[taskId2].data[3] = 1; } else { - gBattle_BG1_X = 0; - gBattle_BG1_Y = -48; + *x = 0; + *y = -48; gTasks[taskId].data[0] = -2; gTasks[taskId].data[1] = 1; gTasks[taskId2].data[3] = 0; } - SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); - SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, *x); + SetGpuReg(REG_OFFSET_BG1VOFS, *y); if (gTasks[taskId2].data[3] == 0) { gTasks[taskId2].data[4] = 48; @@ -870,245 +874,16 @@ void AnimTask_CreateSurfWave(u8 taskId) gTasks[taskId].data[6] = 1; gTasks[taskId].func = AnimTask_CreateSurfWave_Step1; } -#else -NAKED -void AnimTask_CreateSurfWave(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x10\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - ldr r1, =0x00003f42\n\ - movs r0, 0x50\n\ - bl SetGpuReg\n\ - movs r1, 0x80\n\ - lsls r1, 5\n\ - movs r0, 0x52\n\ - bl SetGpuReg\n\ - movs r0, 0x1\n\ - movs r1, 0x4\n\ - movs r2, 0x1\n\ - bl SetAnimBgAttribute\n\ - movs r0, 0x1\n\ - movs r1, 0\n\ - movs r2, 0x1\n\ - bl SetAnimBgAttribute\n\ - mov r0, sp\n\ - bl sub_80A6B30\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _081079E0\n\ - movs r0, 0x1\n\ - movs r1, 0x3\n\ - movs r2, 0x1\n\ - bl SetAnimBgAttribute\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _081079D0\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x9]\n\ - ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\ - bl AnimLoadCompressedBgTilemap\n\ - b _081079EA\n\ - .pool\n\ -_081079D0:\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x9]\n\ - ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\ - bl AnimLoadCompressedBgTilemap\n\ - b _081079EA\n\ - .pool\n\ -_081079E0:\n\ - ldr r1, =gBattleAnimBgTilemap_SurfContest\n\ - mov r0, sp\n\ - movs r2, 0x1\n\ - bl AnimLoadCompressedBgTilemapHandleContest\n\ -_081079EA:\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x9]\n\ - ldr r1, =gBattleAnimBgImage_Surf\n\ - mov r2, sp\n\ - ldrh r2, [r2, 0xA]\n\ - bl AnimLoadCompressedBgGfx\n\ - ldr r0, =gBattleAnimArgs\n\ - movs r1, 0\n\ - ldrsh r0, [r0, r1]\n\ - cmp r0, 0\n\ - bne _08107A24\n\ - ldr r0, =gBattleAnimBgPalette_Surf\n\ - mov r1, sp\n\ - ldrb r1, [r1, 0x8]\n\ - lsls r1, 4\n\ - movs r2, 0x20\n\ - bl LoadCompressedPalette\n\ - b _08107A32\n\ - .pool\n\ -_08107A24:\n\ - ldr r0, =gBattleAnimBackgroundImageMuddyWater_Pal\n\ - mov r1, sp\n\ - ldrb r1, [r1, 0x8]\n\ - lsls r1, 4\n\ - movs r2, 0x20\n\ - bl LoadCompressedPalette\n\ -_08107A32:\n\ - ldr r0, =AnimTask_SurfWaveScanlineEffect\n\ - ldr r4, =gTasks\n\ - mov r2, r10\n\ - lsls r5, r2, 2\n\ - adds r1, r5, r2\n\ - lsls r1, 3\n\ - adds r6, r1, r4\n\ - ldrb r1, [r6, 0x7]\n\ - adds r1, 0x1\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - bl CreateTask\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - movs r0, 0\n\ - mov r9, r0\n\ - mov r1, r8\n\ - strh r1, [r6, 0x26]\n\ - mov r2, r8\n\ - lsls r0, r2, 2\n\ - add r0, r8\n\ - lsls r0, 3\n\ - adds r7, r0, r4\n\ - mov r0, r9\n\ - strh r0, [r7, 0x8]\n\ - movs r0, 0x80\n\ - lsls r0, 5\n\ - strh r0, [r7, 0xA]\n\ - strh r0, [r7, 0xC]\n\ - bl IsContest\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0\n\ - beq _08107AB4\n\ - ldr r1, =0x0000ffb0\n\ - adds r0, r1, 0\n\ - ldr r2, =gBattle_BG1_X\n\ - strh r0, [r2]\n\ - adds r1, 0x20\n\ - adds r0, r1, 0\n\ - ldr r2, =gBattle_BG1_Y\n\ - strh r0, [r2]\n\ - movs r0, 0x2\n\ - strh r0, [r6, 0x8]\n\ - movs r0, 0x1\n\ - strh r0, [r6, 0xA]\n\ - mov r0, r9\n\ - strh r0, [r7, 0xE]\n\ - b _08107B0E\n\ - .pool\n\ -_08107AB4:\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0x1\n\ - bne _08107AF8\n\ - ldr r2, =0x0000ff20\n\ - adds r0, r2, 0\n\ - ldr r2, =gBattle_BG1_X\n\ - strh r0, [r2]\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r0, r2, 0\n\ - ldr r2, =gBattle_BG1_Y\n\ - strh r0, [r2]\n\ - movs r0, 0x2\n\ - strh r0, [r6, 0x8]\n\ - ldr r0, =0x0000ffff\n\ - strh r0, [r6, 0xA]\n\ - strh r1, [r7, 0xE]\n\ - b _08107B0E\n\ - .pool\n\ -_08107AF8:\n\ - ldr r0, =gBattle_BG1_X\n\ - strh r4, [r0]\n\ - ldr r1, =0x0000ffd0\n\ - adds r0, r1, 0\n\ - ldr r2, =gBattle_BG1_Y\n\ - strh r0, [r2]\n\ - ldr r0, =0x0000fffe\n\ - strh r0, [r6, 0x8]\n\ - movs r0, 0x1\n\ - strh r0, [r6, 0xA]\n\ - strh r4, [r7, 0xE]\n\ -_08107B0E:\n\ - ldr r0, =gBattle_BG1_X\n\ - ldrh r1, [r0]\n\ - movs r0, 0x14\n\ - bl SetGpuReg\n\ - ldr r2, =gBattle_BG1_Y\n\ - ldrh r1, [r2]\n\ - movs r0, 0x16\n\ - bl SetGpuReg\n\ - ldr r1, =gTasks\n\ - mov r2, r8\n\ - lsls r0, r2, 2\n\ - add r0, r8\n\ - lsls r0, 3\n\ - adds r1, r0, r1\n\ - movs r2, 0xE\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - bne _08107B54\n\ - movs r0, 0x30\n\ - strh r0, [r1, 0x10]\n\ - movs r0, 0x70\n\ - b _08107B58\n\ - .pool\n\ -_08107B54:\n\ - movs r0, 0\n\ - strh r0, [r1, 0x10]\n\ -_08107B58:\n\ - strh r0, [r1, 0x12]\n\ - ldr r1, =gTasks\n\ - mov r2, r10\n\ - adds r0, r5, r2\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x14]\n\ - ldr r1, =AnimTask_CreateSurfWave_Step1\n\ - str r1, [r0]\n\ - add sp, 0x10\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n"); -} -#endif -#ifdef NONMATCHING static void AnimTask_CreateSurfWave_Step1(u8 taskId) { - struct BattleAnimBgData animBg; - u8 i; u16 rgbBuffer; - u16 *BGptrX = &gBattle_BG1_X; - u16 *BGptrY = &gBattle_BG1_Y; - s16 unkUse; - u32 palOffset; - u16 palNum; + u8 i; + u16 *BGptrX, *BGptrY; + struct BattleAnimBgData animBg; + + BGptrX = &gBattle_BG1_X; + BGptrY = &gBattle_BG1_Y; *BGptrX += gTasks[taskId].data[0]; *BGptrY += gTasks[taskId].data[1]; @@ -1116,29 +891,26 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].data[2] += gTasks[taskId].data[1]; if (++gTasks[taskId].data[5] == 4) { - rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; - for (i = 6; i != 0; i--) + rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7]; + for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context { - palNum = animBg.paletteId * 16; - palOffset = 1 + i; - gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1]; + gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason } - gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; + gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer; gTasks[taskId].data[5] = 0; } if (++gTasks[taskId].data[6] > 1) { gTasks[taskId].data[6] = 0; - unkUse = ++gTasks[taskId].data[3]; - if (unkUse <= 13) + if (++gTasks[taskId].data[3] < 14) { - gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); + gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8)); gTasks[taskId].data[4]++; } if (gTasks[taskId].data[3] > 54) { - unkUse = --gTasks[taskId].data[4]; - gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); + gTasks[taskId].data[4]--; + gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[4]) | ((16 - gTasks[taskId].data[4]) << 8)); } } if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F)) @@ -1147,167 +919,7 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].func = AnimTask_CreateSurfWave_Step2; } } -#else -NAKED -static void AnimTask_CreateSurfWave_Step1(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - sub sp, 0x10\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r1, =gBattle_BG1_X\n\ - ldr r2, =gBattle_BG1_Y\n\ - ldr r0, =gTasks\n\ - lsls r4, r5, 2\n\ - adds r4, r5\n\ - lsls r4, 3\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0x8]\n\ - ldrh r3, [r1]\n\ - adds r0, r3\n\ - strh r0, [r1]\n\ - ldrh r0, [r4, 0xA]\n\ - ldrh r1, [r2]\n\ - adds r0, r1\n\ - strh r0, [r2]\n\ - mov r0, sp\n\ - bl sub_80A6B30\n\ - ldrh r0, [r4, 0xA]\n\ - ldrh r3, [r4, 0xC]\n\ - adds r0, r3\n\ - strh r0, [r4, 0xC]\n\ - ldrh r0, [r4, 0x12]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x12]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x4\n\ - bne _08107C18\n\ - ldr r1, =gPlttBufferFaded\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x8]\n\ - lsls r0, 4\n\ - adds r0, 0x7\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r6, [r0]\n\ - movs r2, 0x6\n\ - adds r7, r1, 0\n\ - adds r3, r7, 0\n\ - mov r4, sp\n\ -_08107BDE:\n\ - ldrb r0, [r4, 0x8]\n\ - lsls r0, 4\n\ - adds r1, r2, 0x1\n\ - adds r0, r1\n\ - lsls r1, r0, 1\n\ - adds r1, r3\n\ - subs r0, 0x1\n\ - lsls r0, 1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - subs r0, r2, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r2, 0\n\ - bne _08107BDE\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x8]\n\ - lsls r0, 4\n\ - adds r0, 0x1\n\ - lsls r0, 1\n\ - adds r0, r7\n\ - strh r6, [r0]\n\ - ldr r1, =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r2, [r0, 0x12]\n\ -_08107C18:\n\ - ldr r1, =gTasks\n\ - lsls r2, r5, 2\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r3, r0, r1\n\ - ldrh r0, [r3, 0x14]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x14]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - adds r4, r1, 0\n\ - adds r6, r2, 0\n\ - cmp r0, 0x1\n\ - ble _08107C86\n\ - movs r0, 0\n\ - strh r0, [r3, 0x14]\n\ - ldrh r0, [r3, 0xE]\n\ - adds r2, r0, 0x1\n\ - strh r2, [r3, 0xE]\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - cmp r0, 0xD\n\ - bgt _08107C62\n\ - movs r1, 0x26\n\ - ldrsh r0, [r3, r1]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r1, r4\n\ - movs r0, 0x10\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - orrs r2, r0\n\ - strh r2, [r1, 0xA]\n\ - ldrh r0, [r3, 0x10]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x10]\n\ -_08107C62:\n\ - movs r1, 0xE\n\ - ldrsh r0, [r3, r1]\n\ - cmp r0, 0x36\n\ - ble _08107C86\n\ - ldrh r2, [r3, 0x10]\n\ - subs r2, 0x1\n\ - strh r2, [r3, 0x10]\n\ - movs r1, 0x26\n\ - ldrsh r0, [r3, r1]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r1, r4\n\ - movs r0, 0x10\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - orrs r2, r0\n\ - strh r2, [r1, 0xA]\n\ -_08107C86:\n\ - adds r0, r6, r5\n\ - lsls r0, 3\n\ - adds r2, r0, r4\n\ - movs r3, 0x26\n\ - ldrsh r1, [r2, r3]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r4\n\ - ldrh r0, [r0, 0xA]\n\ - movs r3, 0x1F\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - bne _08107CA8\n\ - strh r3, [r2, 0x8]\n\ - ldr r0, =AnimTask_CreateSurfWave_Step2\n\ - str r0, [r2]\n\ -_08107CA8:\n\ - add sp, 0x10\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n"); -} -#endif + static void AnimTask_CreateSurfWave_Step2(u8 taskId) { From d3e00cadccb20566b9a4239b398ec9aad33c8f91 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Fri, 14 Aug 2020 18:08:16 -0400 Subject: [PATCH 63/85] Enum Time --- gflib/text.c | 10 +++++----- gflib/text.h | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 5722d5a438..07fd23109f 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -451,11 +451,11 @@ u8 GetLastTextColor(u8 colorType) { switch (colorType) { - case 0: + case COLOR_FOREGROUND: return gLastTextFgColor; - case 2: + case COLOR_BACKGROUND: return gLastTextBgColor; - case 1: + case COLOR_SHADOW: return gLastTextShadowColor; default: return 0; @@ -482,8 +482,8 @@ u8 GetLastTextColor(u8 colorType) const u32 toOrr = r5 & 0xF; \ if (toOrr) \ { \ - dst = windowTiles + ((j >> 3) * 32) + ((j & 7) >> 1) + ((i >> 3) * widthOffset) + ((i & 7) * 4); \ - bits = ((j & 1) << 2); \ + dst = windowTiles + ((j / 8) * 32) + ((j & 7) >> 1) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ + bits = ((j & 1) * 4); \ *dst = (toOrr << bits) | ((0xF0 >> bits) & *dst); \ } \ r5 >>= 4; \ diff --git a/gflib/text.h b/gflib/text.h index 0d0f3341de..0829d748f3 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -269,6 +269,13 @@ #define TEXT_SPEED_FF 0xFF +enum +{ + COLOR_FOREGROUND, + COLOR_SHADOW, + COLOR_BACKGROUND +}; + enum { FONTATTR_MAX_LETTER_WIDTH, From c42c1ab8c1aaab06350ba71ceb5b89db42d3d851 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 13 Aug 2020 19:10:23 -0400 Subject: [PATCH 64/85] Document contest appeal --- .../unknown_587C30.pal => contest/text.pal} | 0 include/contest.h | 70 +- src/battle_anim.c | 8 +- src/battle_anim_dark.c | 2 +- src/battle_anim_effects_3.c | 18 +- src/battle_anim_mons.c | 30 +- src/battle_anim_sound_tasks.c | 6 +- src/battle_anim_utility_funcs.c | 6 +- src/battle_gfx_sfx_util.c | 8 +- src/contest.c | 2056 +++++++++-------- src/contest_ai.c | 2 +- src/contest_effect.c | 2 +- src/contest_util.c | 12 +- 13 files changed, 1203 insertions(+), 1017 deletions(-) rename graphics/{unknown/unknown_587C30.pal => contest/text.pal} (100%) diff --git a/graphics/unknown/unknown_587C30.pal b/graphics/contest/text.pal similarity index 100% rename from graphics/unknown/unknown_587C30.pal rename to graphics/contest/text.pal diff --git a/include/contest.h b/include/contest.h index 5808cb9250..c5c674fdc0 100644 --- a/include/contest.h +++ b/include/contest.h @@ -123,15 +123,15 @@ struct Shared1A004 u8 savedJunk[0x800]; }; -struct ContestStruct_field_18 +struct ContestMoveAnimData { u16 species; - u16 unk2; - u8 unk4_0:1; - u8 unk5; - u32 unk8; - u32 unkC; - u32 unk10; + u16 targetSpecies; + bool8 hasTargetAnim:1; + u8 contestant; + u32 personality; + u32 otId; + u32 targetPersonality; }; struct Contest @@ -143,29 +143,29 @@ struct Contest bool16 unk1920A_1:1; bool16 unk1920A_2:1; bool16 unk1920A_3:1; - bool16 unk1920A_4:1; + bool16 waitForJudgeSpeechBubble:1; bool16 isShowingApplauseMeter:1; bool16 applauseMeterIsMoving:1; - bool16 unk1920A_7:1; - bool16 unk1920B_0:1; + bool16 animatingAudience:1; + bool16 waitForAudienceBlend:1; bool16 sliderHeartsAnimating:1; // When the slider heart is appearing/disappearing - bool16 unk1920B_2:1; + bool16 waitForLink:1; u8 mainTaskId; u8 unk1920D[4]; - u8 unk19211; + u8 judgeAttentionTaskId; u8 unk19212; u8 filler19213; u8 turnNumber; u8 currentContestant; - u8 unk19216; // sprite ID + u8 judgeSpeechBubbleSpriteId; s8 applauseLevel; u8 prevTurnOrder[CONTESTANT_COUNT]; - u32 unk1921C; // saved RNG value? + u32 unusedRng; u16 moveHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT]; u8 excitementHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT]; u8 applauseMeterSpriteId; u8 contestSetupState; - u8 unk1925E; + u8 moveAnimTurnCount; }; struct ContestantStatus @@ -177,7 +177,7 @@ struct ContestantStatus u16 prevMove; u8 moveCategory; u8 ranking:2; - u8 unkB_2:2; + u8 unused1:2; u8 moveRepeatCount:3; bool8 noMoreTurns:1; // used a one-time move? bool8 nervous:1; @@ -203,18 +203,18 @@ struct ContestantStatus u8 effectStringId; // status action? u8 effectStringId2; bool8 repeatedMove:1; - bool8 unused:1; + bool8 unused2:1; bool8 repeatedPrevMove:1; // never read bool8 unk15_3:1; bool8 hasJudgesAttention:1; bool8 judgesAttentionWasRemoved:1; - bool8 unk15_6:1; - u8 unk16; + bool8 usedComboMove:1; + bool8 completedCombo; u8 unk17; u8 unk18; u8 nextTurnOrder; // turn position u8 attentionLevel; // How much the Pokemon "stood out" - u8 unk1B; + u8 contestantAnimTarget; }; struct UnknownContestStruct7 @@ -246,7 +246,7 @@ struct ContestAIInfo struct UnknownContestStruct5 { - s8 bits_0; // current move excitement? + s8 moveExcitement; u8 excitementFrozen:1; u8 excitementFreezer:3; s8 unk2; @@ -256,17 +256,17 @@ struct UnknownContestStruct4 { u8 sliderHeartSpriteId; u8 nextTurnSpriteId; - u8 sliderUpdating:1; - u8 unk2_1:1; - u8 unk2_2:1; + bool8 sliderUpdating:1; + bool8 boxBlinking:1; + bool8 updatingAppealHearts:1; }; -struct UnknownContestStruct6 +struct ContestFinalStandings { - s32 unk0; - s32 unk4; - s32 unk8; - s32 unkC; + s32 totalPoints; + s32 round1Points; + s32 random; + s32 contestant; }; struct ContestResourcesField1C @@ -292,12 +292,12 @@ struct ContestResources struct ContestAIInfo *aiData; struct UnknownContestStruct5 *field_10; struct UnknownContestStruct4 *field_14; - struct ContestStruct_field_18 *field_18; + struct ContestMoveAnimData *moveAnim; struct ContestResourcesField1C * field_1c; struct ContestResourcesField20 * field_20; u8 * contestBgTilemaps[CONTESTANT_COUNT]; - void * field_34; - void * field_38; + void * boxBlinkTiles1; + void * boxBlinkTiles2; void * field_3c; }; @@ -307,8 +307,8 @@ struct ContestResources #define eContestAI (*gContestResources->aiData) #define eContestResources10 (*gContestResources->field_10) #define eContestResources14 (*gContestResources->field_14) -#define eUnzippedContestAudienceGfx (gHeap + 0x18000) -#define eUnknownHeap19000 (gHeap + 0x19000) +#define eUnzippedContestAudience_Gfx (gHeap + 0x18000) +#define eContestAudienceFrame2_Gfx (gHeap + 0x19000) #define eContestDebugMode (gHeap[0x1a000]) #define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004)) @@ -352,7 +352,7 @@ void SetContestantEffectStringID2(u8 a, u8 b); void SetStartledString(u8 contestant, u8 jam); void MakeContestantNervous(u8 p); s8 Contest_GetMoveExcitement(u16 move); -bool8 sub_80DE1E8(u8 a); +bool8 IsContestantAllowedToCombo(u8 contestant); void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s32 fontId); void ResetContestLinkResults(void); bool8 sub_80DEDA8(u8 a); diff --git a/src/battle_anim.c b/src/battle_anim.c index 32a917cb4d..874ac935b5 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1849,8 +1849,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo } else { - for (i = 0; i < 4; i++) - gAnimBattlerSpecies[i] = gContestResources->field_18->species; + for (i = 0; i < CONTESTANT_COUNT; i++) + gAnimBattlerSpecies[i] = gContestResources->moveAnim->species; } if (!isMoveAnim) @@ -2311,7 +2311,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) battlerSpriteId = gBattlerSpriteIds[battlerId]; gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20; - if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->species)) + if (IsContest() && IsSpeciesNotUnown(gContestResources->moveAnim->species)) gBattle_BG1_X--; gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20; @@ -2369,7 +2369,7 @@ static void sub_80A46A0(void) struct BattleAnimBgData animBg; u16 *ptr; - if (IsSpeciesNotUnown(gContestResources->field_18->species)) + if (IsSpeciesNotUnown(gContestResources->moveAnim->species)) { sub_80A6B30(&animBg); ptr = animBg.bgTilemap; diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index dc3e8c83c0..faa5884a59 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -849,7 +849,7 @@ void AnimTask_MetallicShine(u8 taskId) if (IsContest()) { - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; } else { diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index fd68bbd37b..afdc900494 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2297,7 +2297,7 @@ void AnimTask_TransformMon(u8 taskId) LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset); if (IsContest()) { - if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2)) + if (IsSpeciesNotUnown(gContestResources->moveAnim->species) != IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies)) { bgTilemap = (u16 *)animBg.bgTilemap; for (i = 0; i < 8; i++) @@ -2319,7 +2319,7 @@ void AnimTask_TransformMon(u8 taskId) } } - if (IsSpeciesNotUnown(gContestResources->field_18->unk2)) + if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies)) gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0; else gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694; @@ -3196,10 +3196,10 @@ void AnimTask_RolePlaySilhouette(u8 taskId) GetAnimBattlerSpriteId(ANIM_ATTACKER); if (IsContest()) { - isBackPic = 1; - personality = gContestResources->field_18->unk10; - otId = gContestResources->field_18->unkC; - species = gContestResources->field_18->unk2; + isBackPic = TRUE; + personality = gContestResources->moveAnim->targetPersonality; + otId = gContestResources->moveAnim->otId; + species = gContestResources->moveAnim->targetSpecies; xOffset = 20; priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); } @@ -5031,9 +5031,9 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) case 1: if (IsContest()) { - personality = gContestResources->field_18->unk8; - otId = gContestResources->field_18->unkC; - species = gContestResources->field_18->species; + personality = gContestResources->moveAnim->personality; + otId = gContestResources->moveAnim->otId; + species = gContestResources->moveAnim->species; subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); isBackPic = 0; x = -32; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index e5a866999c..d9993ab953 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -141,10 +141,10 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) default: if (IsContest()) { - if (gContestResources->field_18->unk4_0) - species = gContestResources->field_18->unk2; + if (gContestResources->moveAnim->hasTargetAnim) + species = gContestResources->moveAnim->targetSpecies; else - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; } else { @@ -189,10 +189,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species) { if (IsContest()) { - if (gContestResources->field_18->unk4_0) - personality = gContestResources->field_18->unk10; + if (gContestResources->moveAnim->hasTargetAnim) + personality = gContestResources->moveAnim->targetPersonality; else - personality = gContestResources->field_18->unk8; + personality = gContestResources->moveAnim->personality; } else { @@ -306,10 +306,10 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType) { if (IsContest()) { - if (gContestResources->field_18->unk4_0) - species = gContestResources->field_18->unk2; + if (gContestResources->moveAnim->hasTargetAnim) + species = gContestResources->moveAnim->targetSpecies; else - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; } else { @@ -1851,7 +1851,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) { if (IsContest()) { - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; return gMonBackPicCoords[species].y_offset; } else @@ -2103,15 +2103,15 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) if (IsContest()) { - if (gContestResources->field_18->unk4_0) + if (gContestResources->moveAnim->hasTargetAnim) { - species = gContestResources->field_18->unk2; - personality = gContestResources->field_18->unk10; + species = gContestResources->moveAnim->targetSpecies; + personality = gContestResources->moveAnim->targetPersonality; } else { - species = gContestResources->field_18->species; - personality = gContestResources->field_18->unk8; + species = gContestResources->moveAnim->species; + personality = gContestResources->moveAnim->personality; } if (species == SPECIES_UNOWN) { diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 8efc987b8e..71c81235af 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -134,7 +134,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId) if (IsContest()) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; else DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task. } @@ -180,7 +180,7 @@ void SoundTask_PlayDoubleCry(u8 taskId) if (IsContest()) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; else DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task. } @@ -284,7 +284,7 @@ void SoundTask_PlayCryWithEcho(u8 taskId) pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); if (IsContest()) - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; else species = gAnimBattlerSpecies[gBattleAnimAttacker]; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index dcef7d4830..0e6d0bebd4 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -318,7 +318,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId) if (IsContest()) { - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; } else { @@ -440,7 +440,7 @@ static void sub_8116F04(u8 taskId) if (IsContest()) { - sAnimStatsChangeData->species = gContestResources->field_18->species; + sAnimStatsChangeData->species = gContestResources->moveAnim->species; } else { @@ -810,7 +810,7 @@ void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, if (IsContest()) { - species = gContestResources->field_18->species; + species = gContestResources->moveAnim->species; } else { diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 50001cebe6..e0530407c9 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -874,14 +874,14 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform if (IsContest()) { position = 0; - targetSpecies = gContestResources->field_18->unk2; - personalityValue = gContestResources->field_18->unk8; - otId = gContestResources->field_18->unkC; + targetSpecies = gContestResources->moveAnim->targetSpecies; + personalityValue = gContestResources->moveAnim->personality; + otId = gContestResources->moveAnim->otId; HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies], gMonSpritesGfxPtr->sprites[0], targetSpecies, - gContestResources->field_18->unk10); + gContestResources->moveAnim->targetPersonality); } else { diff --git a/src/contest.c b/src/contest.c index 8ff696699d..743b5fe863 100644 --- a/src/contest.c +++ b/src/contest.c @@ -51,10 +51,10 @@ static void Task_StartContestWaitFade(u8 taskId); static void Task_TryStartLinkContest(u8 taskId); static void Task_CommunicateMonIdxs(u8 taskId); static void Task_EndCommunicateMonIdxs(u8 taskId); -static void sub_80D7DE8(u8 taskId); +static void Task_ReadyStartLinkContest(u8 taskId); static bool8 SetupContestGraphics(u8 *stateVar); -static void sub_80D80C8(u8 taskId); -static void sub_80D8108(u8 taskId); +static void Task_WaitToRaiseCurtainAtStart(u8 taskId); +static void Task_RaiseCurtainAtStart(u8 taskId); static void VBlankCB_Contest(void); static void CB2_ContestMain(void); static void Task_DisplayAppealNumberText(u8 taskId); @@ -70,24 +70,24 @@ static void Task_HideApplauseMeterForAppealStart(u8 taskId); static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId); static void Task_AppealSetup(u8 taskId); static void Task_DoAppeals(u8 taskId); -static void sub_80DA110(u8); -static void sub_80DA134(struct Sprite *); -static void sub_80DA164(struct Sprite *); -static void sub_80DA198(u8); -static void sub_80DA25C(u8); -static void sub_80DA28C(u8); -static void sub_80DA31C(u8); +static void Task_EndWaitForLink(u8); +static void SpriteCB_MonSlideIn(struct Sprite *); +static void SpriteCB_MonSlideOut(struct Sprite *); +static void Task_FinishRoundOfAppeals(u8); +static void Task_ReadyUpdateHeartSliders(u8); +static void Task_UpdateHeartSliders(u8); +static void Task_WaitForHeartSliders(u8); static void sub_80DA348(u8); static void sub_80DA38C(u8); -static void sub_80DA3CC(u8); -static void sub_80DA464(u8); -static void sub_80DA49C(u8); -static void sub_80DA4CC(u8); -static void sub_80DA51C(u8); -static void sub_80DA5B4(u8); +static void Task_PrintRoundResultText(u8); +static void Task_ReUpdateHeartSliders(u8); +static void Task_WaitForHeartSlidersAgain(u8); +static void Task_DropCurtainAtRoundEnd(u8); +static void Task_TryStartNextRoundOfAppeals(u8); +static void Task_StartNewRoundOfAppeals(u8); static void Task_EndAppeals(u8); static void Task_WaitForOutOfTimeMsg(u8); -static void Task_CoverAppealPanelForEnd(u8); +static void Task_DropCurtainAtAppealsEnd(u8); static void Task_TryCommunicateFinalStandings(u8); static void Task_CommunicateFinalStandings(u8); static void Task_EndCommunicateFinalStandings(u8); @@ -98,8 +98,8 @@ static void PrintContestantTrainerName(u8); static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1); static void PrintContestantMonName(u8); static void PrintContestantMonNameWithColor(u8, u8); -static u8 sub_80DB0C4(void); -static u8 sub_80DB120(void); +static u8 CreateJudgeSprite(void); +static u8 CreateJudgeSpeechBubbleSprite(void); static u8 CreateContestantSprite(u16, u32, u32, u32); static void PrintContestMoveDescription(u16); static u16 SanitizeSpecies(u16); @@ -112,44 +112,44 @@ static void CreateSliderHeartSprites(void); static void SetBottomSliderHeartsInvisibility(bool8); static void CreateNextTurnSprites(void); static void CreateApplauseMeterSprite(void); -static void sub_80DC5E8(void); +static void CreateJudgeAttentionEyeTask(void); static void sub_80DC7EC(void); static void ContestDebugDoPrint(void); static void DrawContestantWindows(void); static void ApplyNextTurnOrder(void); -static void StartMoveApplauseMeterOnscreen(void); -static void TryMoveApplauseMeterOffscreen(void); -static void sub_80DE224(void); -static void sub_80DE350(void); -static void sub_80DE424(u8); +static void SlideApplauseMeterIn(void); +static void SlideApplauseMeterOut(void); +static void SetBgForCurtainDrop(void); +static void UpdateContestantBoxOrder(void); +static void Task_StartDropCurtainAtRoundEnd(u8); static void AnimateSliderHearts(u8); -static void sub_80DEA20(void); +static void CreateInvisibleBattleTargetSprite(void); static void Contest_StartTextPrinter(const u8 *, u32); static void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, s16); static bool32 Contest_RunTextPrinters(void); static void Contest_SetBgCopyFlags(u32 flagIndex); static void CalculateFinalScores(void); -static void sub_80DD080(u8); -static void sub_80DE9DC(u8); -static void sub_80DCBE8(u8, u8); -static u8 sub_80DC9EC(u8); +static void CalculateAppealMoveImpact(u8); +static void SetMoveAnimAttackerData(u8); +static void BlinkContestantBox(u8, u8); +static u8 CreateContestantBoxBlinkSprites(u8); static u16 SanitizeMove(u16); -static void sub_80DE864(u8); -static void SelectContestMoveBankTarget(u16); -static void sub_80DE9B0(u8); -static void sub_80DC674(u8); -static void sub_80DE12C(void); -static void sub_80DD45C(u8, u8); -static void sub_80DD720(u8); -static void sub_80DE008(bool8); -static u8 sub_80DC028(s16, s16, u8); -static bool8 sub_80DB5B8(u8, u8); -static bool8 sub_80DB798(u8); -static void sub_80DB884(void); -static void sub_80DC9B4(u8); -static void sub_80DDED0(s8, s8); +static void SetMoveSpecificAnimData(u8); +static void SetMoveTargetPosition(u16); +static void ClearMoveAnimData(u8); +static void StopFlashJudgeAttentionEye(u8); +static void DrawUnnervedSymbols(void); +static void PrintAppealMoveResultText(u8, u8); +static void DoJudgeSpeechBubble(u8); +static void ShowHideNextTurnGfx(bool8); +static u8 UpdateAppealHearts(s16, s16, u8); +static bool8 UpdateConditionStars(u8, u8); +static bool8 DrawStatusSymbol(u8); +static void DrawStatusSymbols(void); +static void StartStopFlashJudgeAttentionEye(u8); +static void BlendAudienceBackground(s8, s8); static void ShowAndUpdateApplauseMeter(s8 unused); -static void sub_80DDE0C(void); +static void AnimateAudience(void); static void UpdateApplauseMeter(void); static void RankContestants(void); static void SetAttentionLevels(void); @@ -159,30 +159,30 @@ static void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8); static void Contest_PrintTextToBg0WindowStd(u32, const u8 *); static s16 GetContestantRound2Points(u8); static void DetermineFinalStandings(void); -static bool8 sub_80DBF30(s32, s32, struct UnknownContestStruct6 *); -static void sub_80DC0F4(u8); +static bool8 DidContestantPlaceHigher(s32, s32, struct ContestFinalStandings *); +static void Task_UpdateAppealHearts(u8); static void SpriteCB_UpdateHeartSlider(struct Sprite *); -static void sub_80DC728(u8); -static void sub_80DC6A4(u8); +static void Task_FlashJudgeAttentionEye(u8); +static void Task_StopFlashJudgeAttentionEye(u8); static void sub_80DC8D0(u8); static void sub_80DC81C(u8); static void sub_80DC87C(u8); -static void sub_80DCC84(struct Sprite *); -static void sub_80DCCD8(struct Sprite *sprite); +static void SpriteCB_BlinkContestantBox(struct Sprite *); +static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite); static u8 StartApplauseOverflowAnimation(void); static void Task_ApplauseOverflowAnimation(u8); -static void Task_MoveApplauseMeterOnscreen(u8); -static void Task_MoveApplauseMeterOffscreen(u8); +static void Task_SlideApplauseMeterIn(u8); +static void Task_SlideApplauseMeterOut(u8); static void Task_ShowAndUpdateApplauseMeter(u8); -static void sub_80DDE30(u8); -static void sub_80DDF80(u8); +static void Task_AnimateAudience(u8); +static void Task_BlendAudienceBackground(u8); static const u8 *GetTurnOrderNumberGfx(u8); -static void sub_80DE464(u8); -static void sub_80DE4A8(u8); -static void sub_80DE5F4(u8); -static void sub_80DE65C(u8); +static void Task_UpdateCurtainDropAtRoundEnd(u8); +static void Task_ResetForNextRound(u8); +static void Task_WaitRaiseCurtainAtRoundEnd(u8); +static void Task_StartRaiseCurtainAtRoundEnd(u8); static void Task_WaitForSliderHeartAnim(u8); -static void sub_80DEA5C(void); +static void SetBattleTargetSpritePosition(void); static void sub_80DF250(void); static void sub_80DF4F8(void); static void sub_80DF080(u8); @@ -195,41 +195,64 @@ static void SwapMoveDescAndContestTilemaps(void); // Contestant 0 will use palette color 10, contestant 1 will use color 11, etc. #define CONTESTANT_TEXT_COLOR_START 10 -enum -{ +enum { // The "{Pokemon Name} / {Trainer Name}" windows. - CONTEST_WINDOW_CONTESTANT0_NAME, - CONTEST_WINDOW_CONTESTANT1_NAME, - CONTEST_WINDOW_CONTESTANT2_NAME, - CONTEST_WINDOW_CONTESTANT3_NAME, - CONTEST_WINDOW_GENERAL_TEXT, + WIN_CONTESTANT0_NAME, + WIN_CONTESTANT1_NAME, + WIN_CONTESTANT2_NAME, + WIN_CONTESTANT3_NAME, + WIN_GENERAL_TEXT, // The available moves, from top to bottom - CONTEST_WINDOW_MOVE0, - CONTEST_WINDOW_MOVE1, - CONTEST_WINDOW_MOVE2, - CONTEST_WINDOW_MOVE3, + WIN_MOVE0, + WIN_MOVE1, + WIN_MOVE2, + WIN_MOVE3, // The small "/" character between the move category and the // appeal/jam display - CONTEST_WINDOW_SLASH, - CONTEST_WINDOW_MOVE_DESCRIPTION + WIN_SLASH, + WIN_MOVE_DESCRIPTION }; -#define MOVE_WINDOWS_START CONTEST_WINDOW_MOVE0 +enum { + JUDGE_SYMBOL_SWIRL, + JUDGE_SYMBOL_SWIRL_UNUSED, + JUDGE_SYMBOL_ONE_EXCLAMATION, + JUDGE_SYMBOL_TWO_EXCLAMATIONS, + JUDGE_SYMBOL_NUMBER_ONE_UNUSED, + JUDGE_SYMBOL_NUMBER_ONE, + JUDGE_SYMBOL_NUMBER_FOUR, + JUDGE_SYMBOL_QUESTION_MARK, + JUDGE_SYMBOL_STAR, +}; + +enum { + STAT_SYMBOL_CIRCLE, + STAT_SYMBOL_WAVE, + STAT_SYMBOL_X, + STAT_SYMBOL_SWIRL, + STAT_SYMBOL_SQUARE, +}; + +#define MOVE_WINDOWS_START WIN_MOVE0 #define TAG_CONTEST_SYMBOLS_PAL 0xABE0 +#define TAG_JUDGE_SYMBOLS_GFX 0xABE0 +#define TAG_FACES_GFX 0xABE1 +#define TAG_APPLAUSE_METER 0xABE2 -#define TAG_JUDGE_SYMBOLS_GFX 0xABE0 -#define TAG_FACES_GFX 0xABE1 -#define TAG_APPLAUSE_METER 0xABE2 - -#define TAG_SLIDER_HEART 0x4E20 - +#define TAG_SLIDER_HEART 0x4E20 +#define TAG_JUDGE 0x4E21 #define TAG_NEXT_TURN_PAL 0x4E22 #define TAG_NEXT_TURN_1_GFX 0x4E22 #define TAG_NEXT_TURN_2_GFX 0x4E23 #define TAG_NEXT_TURN_3_GFX 0x4E24 #define TAG_NEXT_TURN_4_GFX 0x4E25 +#define TAG_BLINK_EFFECT_CONTESTANT0 0x80E8 +#define TAG_BLINK_EFFECT_CONTESTANT1 0x80E9 +#define TAG_BLINK_EFFECT_CONTESTANT2 0x80EA +#define TAG_BLINK_EFFECT_CONTESTANT3 0x80EB + enum { SLIDER_HEART_ANIM_NORMAL, SLIDER_HEART_ANIM_DISAPPEAR, @@ -490,20 +513,20 @@ static const struct SpriteTemplate sSpriteTemplate_Faces = .callback = SpriteCallbackDummy }; -static const struct CompressedSpriteSheet sApplauseMeterSpriteSheet = +static const struct CompressedSpriteSheet sSpriteSheet_ApplauseMeter = { .data = gContestApplauseGfx, .size = 0x400, .tag = TAG_APPLAUSE_METER }; -static const struct SpritePalette sApplauseMeterPalette = +static const struct SpritePalette sSpritePalette_ApplauseMeter = { .data = gContestPal, .tag = TAG_APPLAUSE_METER }; -static const struct OamData sApplauseMeterOamData = +static const struct OamData sOam_ApplauseMeter = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -517,18 +540,18 @@ static const struct OamData sApplauseMeterOamData = .paletteNum = 0, }; -static const struct SpriteTemplate sApplauseMeterSpriteTemplate = +static const struct SpriteTemplate sSpriteTemplate_ApplauseMeter = { .tileTag = TAG_APPLAUSE_METER, .paletteTag = TAG_APPLAUSE_METER, - .oam = &sApplauseMeterOamData, + .oam = &sOam_ApplauseMeter, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -const struct OamData gOamData_8587BE0 = +const struct OamData sOam_Judge = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -542,22 +565,22 @@ const struct OamData gOamData_8587BE0 = .paletteNum = 2, }; -const struct SpriteTemplate gSpriteTemplate_8587BE8 = +const struct SpriteTemplate sSpriteTemplate_Judge = { - .tileTag = 0x4E21, - .paletteTag = 0x4E21, - .oam = &gOamData_8587BE0, + .tileTag = TAG_JUDGE, + .paletteTag = TAG_JUDGE, + .oam = &sOam_Judge, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -const struct CompressedSpriteSheet gUnknown_08587C00 = +const struct CompressedSpriteSheet sSpriteSheet_Judge = { .data = gContestJudgeGfx, .size = 0x800, - .tag = 0x4E21 + .tag = TAG_JUDGE }; static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols = @@ -567,13 +590,13 @@ static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols = .tag = TAG_JUDGE_SYMBOLS_GFX }; -const struct CompressedSpritePalette gUnknown_08587C10 = +const struct CompressedSpritePalette sSpritePalette_JudgeSymbols = { .data = gContest3Pal, .tag = TAG_CONTEST_SYMBOLS_PAL }; -const struct SpriteTemplate gSpriteTemplate_8587C18 = +const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble = { .tileTag = TAG_JUDGE_SYMBOLS_GFX, .paletteTag = TAG_CONTEST_SYMBOLS_PAL, @@ -584,7 +607,7 @@ const struct SpriteTemplate gSpriteTemplate_8587C18 = .callback = SpriteCallbackDummy }; -const u16 gUnknown_08587C30[] = INCBIN_U16("graphics/unknown/unknown_587C30.gbapal"); +static const u16 sText_Pal[] = INCBIN_U16("graphics/contest/text.gbapal"); #include "data/contest_text_tables.h" @@ -630,7 +653,7 @@ static const struct BgTemplate sContestBgTemplates[] = static const struct WindowTemplate sContestWindowTemplates[] = { - [CONTEST_WINDOW_CONTESTANT0_NAME] = { + [WIN_CONTESTANT0_NAME] = { .bg = 0, .tilemapLeft = 18, .tilemapTop = 0, @@ -639,7 +662,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x200 }, - [CONTEST_WINDOW_CONTESTANT1_NAME] = { + [WIN_CONTESTANT1_NAME] = { .bg = 0, .tilemapLeft = 18, .tilemapTop = 5, @@ -648,7 +671,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x218 }, - [CONTEST_WINDOW_CONTESTANT2_NAME] = { + [WIN_CONTESTANT2_NAME] = { .bg = 0, .tilemapLeft = 18, .tilemapTop = 10, @@ -657,7 +680,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x230 }, - [CONTEST_WINDOW_CONTESTANT3_NAME] = { + [WIN_CONTESTANT3_NAME] = { .bg = 0, .tilemapLeft = 18, .tilemapTop = 15, @@ -666,7 +689,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x248 }, - [CONTEST_WINDOW_GENERAL_TEXT] = { + [WIN_GENERAL_TEXT] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 15, @@ -675,7 +698,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x260 }, - [CONTEST_WINDOW_MOVE0] = { + [WIN_MOVE0] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 31, @@ -684,7 +707,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x2A4 }, - [CONTEST_WINDOW_MOVE1] = { + [WIN_MOVE1] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 33, @@ -693,7 +716,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x2B6 }, - [CONTEST_WINDOW_MOVE2] = { + [WIN_MOVE2] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 35, @@ -702,7 +725,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x2C8 }, - [CONTEST_WINDOW_MOVE3] = { + [WIN_MOVE3] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 37, @@ -711,7 +734,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x2DA }, - [CONTEST_WINDOW_SLASH] = { + [WIN_SLASH] = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 31, @@ -720,7 +743,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x2EC }, - [CONTEST_WINDOW_MOVE_DESCRIPTION] = { + [WIN_MOVE_DESCRIPTION] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 35, @@ -734,52 +757,52 @@ static const struct WindowTemplate sContestWindowTemplates[] = #include "data/contest_opponents.h" -static const struct CompressedSpriteSheet sUnknown_08589904[] = +static const struct CompressedSpriteSheet sSpriteSheets_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = { { .data = gBlankGfxCompressed, .size = 0x1000, - .tag = 0x80E8 + .tag = TAG_BLINK_EFFECT_CONTESTANT0 }, { .data = gBlankGfxCompressed, .size = 0x1000, - .tag = 0x80E9 + .tag = TAG_BLINK_EFFECT_CONTESTANT1 }, { .data = gBlankGfxCompressed, .size = 0x1000, - .tag = 0x80EA + .tag = TAG_BLINK_EFFECT_CONTESTANT2 }, { .data = gBlankGfxCompressed, .size = 0x1000, - .tag = 0x80EB + .tag = TAG_BLINK_EFFECT_CONTESTANT3 } }; // Yup this is super dangerous but that's how it is here -static const struct SpritePalette sUnknown_08589924[] = +static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = { { .data = (u16*)(gHeap + 0x1A0A4), - .tag = 0x80E8 + .tag = TAG_BLINK_EFFECT_CONTESTANT0 }, { .data = (u16*)(gHeap + 0x1A0C4), - .tag = 0x80E9 + .tag = TAG_BLINK_EFFECT_CONTESTANT1 }, { .data = (u16*)(gHeap + 0x1A0E4), - .tag = 0x80EA + .tag = TAG_BLINK_EFFECT_CONTESTANT2 }, { .data = (u16*)(gHeap + 0x1A104), - .tag = 0x80EB + .tag = TAG_BLINK_EFFECT_CONTESTANT3 } }; -const struct OamData gOamData_8589944 = +const struct OamData sOam_ContestantsTurnBlinkEffect = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -794,13 +817,13 @@ const struct OamData gOamData_8589944 = .affineParam = 0, }; -const union AffineAnimCmd gSpriteAffineAnim_858994C[] = +const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd gSpriteAffineAnim_858995C[] = +const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] = { AFFINEANIMCMD_FRAME(3, 3, 0, 15), AFFINEANIMCMD_FRAME(-3, -3, 0, 15), @@ -809,59 +832,89 @@ const union AffineAnimCmd gSpriteAffineAnim_858995C[] = AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_8589984[] = +const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] = { - gSpriteAffineAnim_858994C, - gSpriteAffineAnim_858995C + sAffineAnim_ContestantsTurnBlinkEffect_0, + sAffineAnim_ContestantsTurnBlinkEffect_1 }; -const struct SpriteTemplate gSpriteTemplate_858998C[] = +const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = { { - .tileTag = 0x80E8, - .paletteTag = 0x80E8, - .oam = &gOamData_8589944, + .tileTag = TAG_BLINK_EFFECT_CONTESTANT0, + .paletteTag = TAG_BLINK_EFFECT_CONTESTANT0, + .oam = &sOam_ContestantsTurnBlinkEffect, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_8589984, + .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect, .callback = SpriteCallbackDummy }, { - .tileTag = 0x80E9, - .paletteTag = 0x80E9, - .oam = &gOamData_8589944, + .tileTag = TAG_BLINK_EFFECT_CONTESTANT1, + .paletteTag = TAG_BLINK_EFFECT_CONTESTANT1, + .oam = &sOam_ContestantsTurnBlinkEffect, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_8589984, + .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect, .callback = SpriteCallbackDummy }, { - .tileTag = 0x80EA, - .paletteTag = 0x80EA, - .oam = &gOamData_8589944, + .tileTag = TAG_BLINK_EFFECT_CONTESTANT2, + .paletteTag = TAG_BLINK_EFFECT_CONTESTANT2, + .oam = &sOam_ContestantsTurnBlinkEffect, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_8589984, + .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect, .callback = SpriteCallbackDummy }, { - .tileTag = 0x80EB, - .paletteTag = 0x80EB, - .oam = &gOamData_8589944, + .tileTag = TAG_BLINK_EFFECT_CONTESTANT3, + .paletteTag = TAG_BLINK_EFFECT_CONTESTANT3, + .oam = &sOam_ContestantsTurnBlinkEffect, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_8589984, + .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect, .callback = SpriteCallbackDummy } }; -const s8 gContestExcitementTable[][5] = +static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = { - { 1, 0, -1, -1, 0}, - { 0, 1, 0, -1, -1}, - {-1, 0, 1, 0, -1}, - {-1, -1, 0, 1, 0}, - { 0, -1, -1, 0, 1} + [CONTEST_CATEGORY_COOL] = { + [CONTEST_CATEGORY_COOL] = +1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_TOUGH] = 0 + }, + [CONTEST_CATEGORY_BEAUTY] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = +1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_TOUGH] = -1 + }, + [CONTEST_CATEGORY_CUTE] = { + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = +1, + [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = -1 + }, + [CONTEST_CATEGORY_SMART] = { + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = +1, + [CONTEST_CATEGORY_TOUGH] = 0 + }, + [CONTEST_CATEGORY_TOUGH] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = +1 + } }; static void TaskDummy1(u8 taskId) @@ -948,7 +1001,7 @@ static void LoadContestPalettes(void) { s32 i; - LoadPalette(gUnknown_08587C30, 0xf0, 0x20); + LoadPalette(sText_Pal, 0xf0, 0x20); FillPalette(RGB_BLACK, 0, 2); for (i = 10; i < 14; i++) LoadPalette(gPlttBufferUnfaded + 241, 240 + i, 2); @@ -1002,15 +1055,15 @@ static void AllocContestResources(void) gContestResources->aiData = AllocZeroed(sizeof(struct ContestAIInfo)); gContestResources->field_10 = AllocZeroed(sizeof(struct UnknownContestStruct5) * CONTESTANT_COUNT); gContestResources->field_14 = AllocZeroed(sizeof(struct UnknownContestStruct4) * CONTESTANT_COUNT); - gContestResources->field_18 = AllocZeroed(sizeof(struct ContestStruct_field_18)); + gContestResources->moveAnim = AllocZeroed(sizeof(struct ContestMoveAnimData)); gContestResources->field_1c = AllocZeroed(sizeof(struct ContestResourcesField1C) * CONTESTANT_COUNT); gContestResources->field_20 = AllocZeroed(sizeof(struct ContestResourcesField20)); gContestResources->contestBgTilemaps[0] = AllocZeroed(0x1000); gContestResources->contestBgTilemaps[1] = AllocZeroed(0x1000); gContestResources->contestBgTilemaps[2] = AllocZeroed(0x1000); gContestResources->contestBgTilemaps[3] = AllocZeroed(0x1000); - gContestResources->field_34 = AllocZeroed(0x800); - gContestResources->field_38 = AllocZeroed(0x800); + gContestResources->boxBlinkTiles1 = AllocZeroed(0x800); + gContestResources->boxBlinkTiles2 = AllocZeroed(0x800); gContestResources->field_3c = AllocZeroed(0x2000); gUnknown_0202305C = gContestResources->field_3c; gUnknown_02023060 = gContestResources->contestBgTilemaps[1]; @@ -1024,15 +1077,15 @@ static void FreeContestResources(void) FREE_AND_SET_NULL(gContestResources->aiData); FREE_AND_SET_NULL(gContestResources->field_10); FREE_AND_SET_NULL(gContestResources->field_14); - FREE_AND_SET_NULL(gContestResources->field_18); + FREE_AND_SET_NULL(gContestResources->moveAnim); FREE_AND_SET_NULL(gContestResources->field_1c); FREE_AND_SET_NULL(gContestResources->field_20); FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[0]); FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[1]); FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[2]); FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[3]); - FREE_AND_SET_NULL(gContestResources->field_34); - FREE_AND_SET_NULL(gContestResources->field_38); + FREE_AND_SET_NULL(gContestResources->boxBlinkTiles1); + FREE_AND_SET_NULL(gContestResources->boxBlinkTiles2); FREE_AND_SET_NULL(gContestResources->field_3c); FREE_AND_SET_NULL(gContestResources); gUnknown_0202305C = NULL; @@ -1076,7 +1129,7 @@ void CB2_StartContest(void) } break; case 3: - sub_80DE224(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; BeginFastPaletteFade(2); @@ -1102,6 +1155,8 @@ static void Task_StartContestWaitFade(u8 taskId) } } +// If this is a link contest try to start communication +// Otherwise skip ahead static void Task_TryStartLinkContest(u8 taskId) { if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) @@ -1141,7 +1196,7 @@ static void Task_TryStartLinkContest(u8 taskId) } else { - gTasks[taskId].func = sub_80D80C8; + gTasks[taskId].func = Task_WaitToRaiseCurtainAtStart; } } @@ -1153,10 +1208,10 @@ static void Task_CommunicateMonIdxs(u8 taskId) static void Task_EndCommunicateMonIdxs(u8 taskId) { gTasks[taskId].data[0] = 1; - gTasks[taskId].func = sub_80D7DE8; + gTasks[taskId].func = Task_ReadyStartLinkContest; } -static void sub_80D7DE8(u8 taskId) +static void Task_ReadyStartLinkContest(u8 taskId) { // data[0] always 1 here gTasks[taskId].data[0]--; @@ -1164,7 +1219,7 @@ static void sub_80D7DE8(u8 taskId) { GetMultiplayerId(); // unused return value DestroyTask(taskId); - gTasks[eContest.mainTaskId].func = sub_80D80C8; + gTasks[eContest.mainTaskId].func = Task_WaitToRaiseCurtainAtStart; gRngValue = gContestRngValue; } } @@ -1187,7 +1242,7 @@ static bool8 SetupContestGraphics(u8 *stateVar) break; case 2: LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); - DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudienceGfx, 0x2000, 0x1000); + DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudience_Gfx, 0x2000, 0x1000); break; case 3: CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0); @@ -1212,21 +1267,23 @@ static bool8 SetupContestGraphics(u8 *stateVar) DrawContestantWindows(); FillContestantWindowBgs(); SwapMoveDescAndContestTilemaps(); - eContest.unk19216 = sub_80DB120(); + eContest.judgeSpeechBubbleSpriteId = CreateJudgeSpeechBubbleSprite(); CreateSliderHeartSprites(); CreateNextTurnSprites(); CreateApplauseMeterSprite(); - sub_80DC5E8(); + CreateJudgeAttentionEyeTask(); sub_80DC7EC(); gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT; gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT; gBattleTypeFlags = 0; - gBattlerAttacker = 2; - gBattlerTarget = 3; - gBattlerSpriteIds[gBattlerAttacker] = sub_80DB0C4(); - sub_80DEA20(); + gBattlerAttacker = B_POSITION_PLAYER_RIGHT; + gBattlerTarget = B_POSITION_OPPONENT_RIGHT; + // Unclear why judge sprite is assigned here + // Overwritten in APPEALSTATE_SLIDE_MON_IN with the attacking contest mon + gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite(); + CreateInvisibleBattleTargetSprite(); CopyBgTilemapBufferToVram(3); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(1); @@ -1244,18 +1301,18 @@ static bool8 SetupContestGraphics(u8 *stateVar) return FALSE; } -static void sub_80D80C8(u8 taskId) +static void Task_WaitToRaiseCurtainAtStart(u8 taskId) { gPaletteFade.bufferTransferDisabled = FALSE; if (!gPaletteFade.active) { gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80D8108; + gTasks[taskId].func = Task_RaiseCurtainAtStart; } } -static void sub_80D8108(u8 taskId) +static void Task_RaiseCurtainAtStart(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1273,7 +1330,7 @@ static void sub_80D8108(u8 taskId) gTasks[taskId].data[0]++; break; case 2: - sub_80DE350(); + UpdateContestantBoxOrder(); gTasks[taskId].data[0]++; break; case 3: @@ -1284,7 +1341,7 @@ static void sub_80D8108(u8 taskId) ((struct BgCnt *)&bg2Cnt)->priority = 0; SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt); SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt); - StartMoveApplauseMeterOnscreen(); + SlideApplauseMeterIn(); gTasks[taskId].data[0]++; break; } @@ -1397,17 +1454,18 @@ static void Task_ShowMoveSelectScreen(u8 taskId) u8 *moveNameBuffer = moveName; if (eContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE - && sub_80DE1E8(gContestPlayerMonIndex) - && AreMovesContestCombo(eContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0 + && IsContestantAllowedToCombo(gContestPlayerMonIndex) + && AreMovesContestCombo(eContestantStatus[gContestPlayerMonIndex].prevMove, move) && eContestantStatus[gContestPlayerMonIndex].hasJudgesAttention) { + // Highlight the text because it's a combo move moveNameBuffer = StringCopy(moveName, gText_ColorLightShadowDarkGrey); } else if (move != MOVE_NONE && eContestantStatus[gContestPlayerMonIndex].prevMove == move && gContestMoves[move].effect != CONTEST_EFFECT_REPETITION_NOT_BORING) { - // Gray the text because it is a repeated move + // Gray the text because it's a repeated move moveNameBuffer = StringCopy(moveName, gText_ColorBlue); } moveNameBuffer = StringCopy(moveNameBuffer, gMoveNames[move]); @@ -1555,7 +1613,7 @@ static void Task_HideApplauseMeterForAppealStart(u8 taskId) gTasks[taskId].data[0] = 0; if (++gTasks[taskId].data[1] == 2) { - TryMoveApplauseMeterOffscreen(); + SlideApplauseMeterOut(); AnimateSliderHearts(SLIDER_HEART_ANIM_DISAPPEAR); gTasks[taskId].func = Task_WaitHideApplauseMeterForAppealStart; } @@ -1568,12 +1626,79 @@ static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId) gTasks[taskId].func = Task_AppealSetup; } +enum { + APPEALSTATE_START_TURN, + APPEALSTATE_1, + APPEALSTATE_2, + APPEALSTATE_SLIDE_MON_IN, + APPEALSTATE_WAIT_SLIDE_MON, + APPEALSTATE_PRINT_USED_MOVE_MSG, + APPEALSTATE_WAIT_USED_MOVE_MSG, + APPEALSTATE_MOVE_ANIM, + APPEALSTATE_WAIT_MOVE_ANIM, + APPEALSTATE_MOVE_ANIM_MULTITURN, + APPEALSTATE_SLIDE_MON_OUT, + APPEALSTATE_FREE_MON_SPRITE, + APPEALSTATE_UPDATE_MOVE_USERS_HEARTS, + APPEALSTATE_WAIT_MOVE_USERS_HEARTS, + APPEALSTATE_PRINT_COMBO_MSG, + APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO, + APPEALSTATE_WAIT_HEARTS_FROM_COMBO, + APPEALSTATE_CHECK_REPEATED_MOVE, + APPEALSTATE_WAIT_HEARTS_FROM_REPEAT, + APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT, + APPEALSTATE_START_TURN_END_DELAY, + APPEALSTATE_TURN_END_DELAY, + APPEALSTATE_START_NEXT_TURN, + APPEALSTATE_TRY_PRINT_MOVE_RESULT, + APPEALSTATE_WAIT_MOVE_RESULT_MSG, + APPEALSTATE_UPDATE_OPPONENTS, + APPEALSTATE_UPDATE_OPPONENT, + APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG, + APPEALSTATE_UPDATE_OPPONENT_HEARTS, + APPEALSTATE_WAIT_OPPONENT_HEARTS, + APPEALSTATE_UPDATE_OPPONENT_STATUS, + APPEALSTATE_PRINT_SKIP_TURN_MSG, + APPEALSTATE_WAIT_SKIP_TURN_MSG, + APPEALSTATE_PRINT_TOO_NERVOUS_MSG, + APPEALSTATE_WAIT_TOO_NERVOUS_MSG, + APPEALSTATE_TRY_JUDGE_STAR, + APPEALSTATE_WAIT_JUDGE_STAR, + APPEALSTATE_UPDATE_MOVE_USERS_STARS, + APPEALSTATE_WAIT_MOVE_USERS_STARS, + APPEALSTATE_UPDATE_OPPONENT_STARS, + APPEALSTATE_WAIT_OPPONENT_STARS, + APPEALSTATE_UPDATE_CROWD, + APPEALSTATE_42, // Unused state + APPEALSTATE_WAIT_EXCITEMENT_HEARTS, + APPEALSTATE_44, // Unused state + APPEALSTATE_WAIT_JUDGE_COMBO, + APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE, + APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX, + APPEALSTATE_CHECK_TURN_ORDER_MOD, + APPEALSTATE_WAIT_JUDGE_TURN_ORDER, + APPEALSTATE_UPDATE_MOVE_USERS_STATUS, + APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG, + APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG, + APPEALSTATE_DO_CROWD_UNEXCITED, + APPEALSTATE_DO_CROWD_EXCITED, + APPEALSTATE_SLIDE_APPLAUSE_OUT, + APPEALSTATE_WAIT_SLIDE_APPLAUSE, + APPEALSTATE_PRINT_CROWD_WATCHES_MSG, + APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG, + APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG, +}; + +#define tState data[0] +#define tMonSpriteId data[2] +#define tCounter data[10] + static void Task_AppealSetup(u8 taskId) { if (++gTasks[taskId].data[0] > 19) { eContest.turnNumber = 0; - eContest.unk1921C = gRngValue; + eContest.unusedRng = gRngValue; if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && IsPlayerLinkLeader()) { s32 i; @@ -1583,500 +1708,511 @@ static void Task_AppealSetup(u8 taskId) eContestantStatus[gNumLinkContestPlayers + i].currMove = GetChosenMove(gNumLinkContestPlayers + i); } } - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = APPEALSTATE_START_TURN; gTasks[taskId].func = Task_DoAppeals; } } -#define tState data[0] - static void Task_DoAppeals(u8 taskId) { u8 spriteId; s32 i; - u8 r6 = eContest.currentContestant; + u8 contestant = eContest.currentContestant; s8 r3; switch (gTasks[taskId].tState) { - case 0: + case APPEALSTATE_START_TURN: ContestDebugDoPrint(); for (i = 0; eContest.turnNumber != gContestResources->field_8->turnOrder[i]; i++) ; eContest.currentContestant = i; - r6 = eContest.currentContestant; + contestant = eContest.currentContestant; if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { u8 taskId2; - eContest.unk1920B_2 = 1; + eContest.waitForLink = TRUE; if (IsPlayerLinkLeader()) - sub_80DD080(eContest.currentContestant); + CalculateAppealMoveImpact(eContest.currentContestant); taskId2 = CreateTask(sub_80FCC88, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110); + SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, Task_EndWaitForLink); ContestPrintLinkStandby(); - gTasks[taskId].tState = 1; + gTasks[taskId].tState = APPEALSTATE_1; } else { - sub_80DD080(eContest.currentContestant); - gTasks[taskId].tState = 2; + CalculateAppealMoveImpact(eContest.currentContestant); + gTasks[taskId].tState = APPEALSTATE_2; } return; - case 1: - if (!eContest.unk1920B_2) - gTasks[taskId].tState = 2; + case APPEALSTATE_1: + if (!eContest.waitForLink) + gTasks[taskId].tState = APPEALSTATE_2; return; - case 2: - sub_80DF080(r6); + case APPEALSTATE_2: + sub_80DF080(contestant); ContestDebugPrintBitStrings(); - if (eContestantStatus[r6].numTurnsSkipped != 0 - || eContestantStatus[r6].noMoreTurns) + if (eContestantStatus[contestant].numTurnsSkipped != 0 + || eContestantStatus[contestant].noMoreTurns) { - gTasks[taskId].tState = 31; + gTasks[taskId].tState = APPEALSTATE_PRINT_SKIP_TURN_MSG; } else { ContestClearGeneralTextWindow(); - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 3; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_SLIDE_MON_IN; } return; - case 3: + case APPEALSTATE_SLIDE_MON_IN: for (i = 0; i < CONTESTANT_COUNT; i++) gBattleMonForms[i] = 0; - memset(gContestResources->field_18, 0, sizeof(*gContestResources->field_18)); - sub_80DE9DC(eContest.currentContestant); + memset(gContestResources->moveAnim, 0, sizeof(*gContestResources->moveAnim)); + SetMoveAnimAttackerData(eContest.currentContestant); spriteId = CreateContestantSprite( gContestMons[eContest.currentContestant].species, gContestMons[eContest.currentContestant].otId, gContestMons[eContest.currentContestant].personality, eContest.currentContestant); gSprites[spriteId].pos2.x = 120; - gSprites[spriteId].callback = sub_80DA134; - gTasks[taskId].data[2] = spriteId; + gSprites[spriteId].callback = SpriteCB_MonSlideIn; + gTasks[taskId].tMonSpriteId = spriteId; gBattlerSpriteIds[gBattlerAttacker] = spriteId; - sub_80DCBE8(sub_80DC9EC(eContest.currentContestant), FALSE); - gTasks[taskId].tState = 4; + BlinkContestantBox(CreateContestantBoxBlinkSprites(eContest.currentContestant), FALSE); + gTasks[taskId].tState = APPEALSTATE_WAIT_SLIDE_MON; return; - case 4: - spriteId = gTasks[taskId].data[2]; + case APPEALSTATE_WAIT_SLIDE_MON: + spriteId = gTasks[taskId].tMonSpriteId; if (gSprites[spriteId].callback == SpriteCallbackDummy) { - if (!gContestResources->field_14[r6].unk2_1) - gTasks[taskId].tState = 5; + // Once mon has slid in, also wait for box to finish blinking + if (!gContestResources->field_14[contestant].boxBlinking) + gTasks[taskId].tState = APPEALSTATE_PRINT_USED_MOVE_MSG; } return; - case 5: - if (eContestantStatus[r6].nervous) + case APPEALSTATE_PRINT_USED_MOVE_MSG: + if (eContestantStatus[contestant].nervous) { - gTasks[taskId].tState = 33; + gTasks[taskId].tState = APPEALSTATE_PRINT_TOO_NERVOUS_MSG; } else { ContestClearGeneralTextWindow(); - StringCopy(gStringVar1, gContestMons[r6].nickname); - if (eContestantStatus[r6].currMove < MOVES_COUNT) - StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + if (eContestantStatus[contestant].currMove < MOVES_COUNT) + StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]); else - StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[r6].moveCategory]); + StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[contestant].moveCategory]); StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove); Contest_StartTextPrinter(gStringVar4, 1); - gTasks[taskId].tState = 6; + gTasks[taskId].tState = APPEALSTATE_WAIT_USED_MOVE_MSG; } return; - case 6: + case APPEALSTATE_WAIT_USED_MOVE_MSG: if (!Contest_RunTextPrinters()) { - eContest.unk1925E = 0; - gTasks[taskId].tState = 7; + eContest.moveAnimTurnCount = 0; + gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM; } return; - case 7: + case APPEALSTATE_MOVE_ANIM: { u16 move = SanitizeMove(eContestantStatus[eContest.currentContestant].currMove); - - sub_80DE864(eContest.currentContestant); - sub_80DE9DC(eContest.currentContestant); - SelectContestMoveBankTarget(move); + SetMoveSpecificAnimData(eContest.currentContestant); + SetMoveAnimAttackerData(eContest.currentContestant); + SetMoveTargetPosition(move); DoMoveAnim(move); - gTasks[taskId].tState = 8; + gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_ANIM; } return; - case 8: + case APPEALSTATE_WAIT_MOVE_ANIM: gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_80DE9B0(r6); - if (eContest.unk1925E != 0) + ClearMoveAnimData(contestant); + if (eContest.moveAnimTurnCount != 0) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 9; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM_MULTITURN; } else { - if (!eContestantStatus[r6].hasJudgesAttention) - sub_80DC674(r6); - sub_80DE12C(); - gTasks[taskId].tState = 23; + if (!eContestantStatus[contestant].hasJudgesAttention) + StopFlashJudgeAttentionEye(contestant); + DrawUnnervedSymbols(); + gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_MOVE_RESULT; } } return; - case 9: - if (gTasks[taskId].data[10]++ > 30) + case APPEALSTATE_MOVE_ANIM_MULTITURN: + if (gTasks[taskId].tCounter++ > 30) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 7; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM; } return; - case 23: + case APPEALSTATE_TRY_PRINT_MOVE_RESULT: gTasks[taskId].data[1] = 0; - if (eContestantStatus[r6].effectStringId != CONTEST_STRING_NONE) + if (eContestantStatus[contestant].effectStringId != CONTEST_STRING_NONE) { - sub_80DD45C(r6, eContestantStatus[r6].effectStringId); - eContestantStatus[r6].effectStringId = CONTEST_STRING_NONE; - gTasks[taskId].tState = 24; + PrintAppealMoveResultText(contestant, eContestantStatus[contestant].effectStringId); + eContestantStatus[contestant].effectStringId = CONTEST_STRING_NONE; + gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_RESULT_MSG; } else { - if (eContestantStatus[r6].effectStringId2 != CONTEST_STRING_NONE) + if (eContestantStatus[contestant].effectStringId2 != CONTEST_STRING_NONE) { for (i = 0; i < CONTESTANT_COUNT; i++) { - if (i != r6 && eContestantStatus[i].effectStringId != CONTEST_STRING_NONE) + if (i != contestant && eContestantStatus[i].effectStringId != CONTEST_STRING_NONE) break; } - if (i == 4) + if (i == CONTESTANT_COUNT) { - sub_80DD45C(r6, eContestantStatus[r6].effectStringId2); - eContestantStatus[r6].effectStringId2 = CONTEST_STRING_NONE; - gTasks[taskId].tState = 24; + PrintAppealMoveResultText(contestant, eContestantStatus[contestant].effectStringId2); + eContestantStatus[contestant].effectStringId2 = CONTEST_STRING_NONE; + gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_RESULT_MSG; } else { - gTasks[taskId].tState = 48; + gTasks[taskId].tState = APPEALSTATE_CHECK_TURN_ORDER_MOD; } } else { - gTasks[taskId].tState = 48; + gTasks[taskId].tState = APPEALSTATE_CHECK_TURN_ORDER_MOD; } } return; - case 24: + case APPEALSTATE_WAIT_MOVE_RESULT_MSG: if (!Contest_RunTextPrinters()) - gTasks[taskId].tState = 23; + gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_MOVE_RESULT; return; - case 48: - if (eContestantStatus[r6].turnOrderModAction == 1) + case APPEALSTATE_CHECK_TURN_ORDER_MOD: + if (eContestantStatus[contestant].turnOrderModAction == 1) { - sub_80DD720(5); + DoJudgeSpeechBubble(JUDGE_SYMBOL_NUMBER_ONE); } - else if (eContestantStatus[r6].turnOrderModAction == 2) + else if (eContestantStatus[contestant].turnOrderModAction == 2) { - sub_80DD720(6); + DoJudgeSpeechBubble(JUDGE_SYMBOL_NUMBER_FOUR); } - else if (eContestantStatus[r6].turnOrderModAction == 3) + else if (eContestantStatus[contestant].turnOrderModAction == 3) { - sub_80DD720(7); + DoJudgeSpeechBubble(JUDGE_SYMBOL_QUESTION_MARK); } else { - gTasks[taskId].tState = 47; + gTasks[taskId].tState = APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX; return; } - gTasks[taskId].tState = 49; + gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_TURN_ORDER; return; - case 49: - if (!eContest.unk1920A_4) - gTasks[taskId].tState = 47; + case APPEALSTATE_WAIT_JUDGE_TURN_ORDER: + if (!eContest.waitForJudgeSpeechBubble) + gTasks[taskId].tState = APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX; return; - case 47: - sub_80DE008(TRUE); - gTasks[taskId].tState = 12; + case APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX: + ShowHideNextTurnGfx(TRUE); + gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_HEARTS; return; - case 12: - sub_80DC028(0, eContestantStatus[r6].appeal2, r6); - gTasks[taskId].tState = 13; + case APPEALSTATE_UPDATE_MOVE_USERS_HEARTS: + UpdateAppealHearts(0, eContestantStatus[contestant].appeal2, contestant); + gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_HEARTS; return; - case 13: - if (!gContestResources->field_14[eContest.currentContestant].unk2_2) - gTasks[taskId].tState = 35; + case APPEALSTATE_WAIT_MOVE_USERS_HEARTS: + if (!gContestResources->field_14[eContest.currentContestant].updatingAppealHearts) + gTasks[taskId].tState = APPEALSTATE_TRY_JUDGE_STAR; return; - case 35: - if (eContestantStatus[r6].conditionMod == 1) - sub_80DD720(8); - gTasks[taskId].tState = 36; + case APPEALSTATE_TRY_JUDGE_STAR: + if (eContestantStatus[contestant].conditionMod == 1) + DoJudgeSpeechBubble(JUDGE_SYMBOL_STAR); + gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_STAR; return; - case 36: - if (!eContest.unk1920A_4) - gTasks[taskId].tState = 37; + case APPEALSTATE_WAIT_JUDGE_STAR: + if (!eContest.waitForJudgeSpeechBubble) + gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STARS; return; - case 37: - if (sub_80DB5B8(r6, 1)) + case APPEALSTATE_UPDATE_MOVE_USERS_STARS: + if (UpdateConditionStars(contestant, TRUE)) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 38; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_STARS; } else { - gTasks[taskId].tState = 50; + gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STATUS; } return; - case 38: - if (++gTasks[taskId].data[10] > 20) + case APPEALSTATE_WAIT_MOVE_USERS_STARS: + if (++gTasks[taskId].tCounter > 20) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 50; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STATUS; } return; - case 50: - if (sub_80DB798(r6)) + case APPEALSTATE_UPDATE_MOVE_USERS_STATUS: + if (DrawStatusSymbol(contestant)) PlaySE(SE_C_PASI); - gTasks[taskId].tState = 25; + gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENTS; return; - case 25: + case APPEALSTATE_UPDATE_OPPONENTS: gTasks[taskId].data[1] = 0; - gTasks[taskId].tState = 26; + gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT; return; - case 26: + case APPEALSTATE_UPDATE_OPPONENT: { - s32 r2 = 0; + // Update each other contestant as a result of this move appeal + s32 j = 0; - r3 = 0; + r3 = FALSE; // Can't get this to use local variable. Should be "needsUpdate" for (i = gTasks[taskId].data[1]; i < CONTESTANT_COUNT; i++) { - r3 = 0; - for (r2 = 0; r2 < CONTESTANT_COUNT; r2++) + r3 = FALSE; + for (j = 0; j < CONTESTANT_COUNT; j++) { - if (r2 != r6 && gContestantTurnOrder[r2] == i - && eContestantStatus[r2].effectStringId != CONTEST_STRING_NONE) + if (j != contestant && gContestantTurnOrder[j] == i + && eContestantStatus[j].effectStringId != CONTEST_STRING_NONE) { - r3 = 1; + r3 = TRUE; break; } } - if (r3 != 0) + if (r3) break; } if (r3) { - gTasks[taskId].data[1] = gContestantTurnOrder[r2]; - sub_80DD45C(r2, eContestantStatus[r2].effectStringId); - eContestantStatus[r2].effectStringId = CONTEST_STRING_NONE; - gTasks[taskId].tState = 27; + // Update contestant + gTasks[taskId].data[1] = gContestantTurnOrder[j]; + PrintAppealMoveResultText(j, eContestantStatus[j].effectStringId); + eContestantStatus[j].effectStringId = CONTEST_STRING_NONE; + gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG; } else { + // Done updating contestants gTasks[taskId].data[1] = 0; - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 51; - sub_80DB884(); + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG; + DrawStatusSymbols(); } } return; - case 27: + case APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG: + // Wait for contestants response to current appeal + // i.e. "Contestant managed to avert its gaze" if (!Contest_RunTextPrinters()) - gTasks[taskId].tState = 28; + gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_HEARTS; return; - case 28: + case APPEALSTATE_UPDATE_OPPONENT_HEARTS: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - sub_80DC028(eContestantStatus[i].appeal2 + eContestantStatus[i].jam, -eContestantStatus[i].jam, i); - gTasks[taskId].tState = 29; + UpdateAppealHearts(eContestantStatus[i].appeal2 + eContestantStatus[i].jam, -eContestantStatus[i].jam, i); + gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_HEARTS; return; - case 29: + case APPEALSTATE_WAIT_OPPONENT_HEARTS: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (!gContestResources->field_14[i].unk2_2) - gTasks[taskId].tState = 39; + if (!gContestResources->field_14[i].updatingAppealHearts) + gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STARS; return; - case 39: + case APPEALSTATE_UPDATE_OPPONENT_STARS: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (sub_80DB5B8(i, 1)) + if (UpdateConditionStars(i, TRUE)) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 40; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_STARS; } else { - gTasks[taskId].tState = 30; + gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STATUS; } return; - case 40: - if (++gTasks[taskId].data[10] > 20) + case APPEALSTATE_WAIT_OPPONENT_STARS: + if (++gTasks[taskId].tCounter > 20) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 30; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STATUS; } return; - case 30: + case APPEALSTATE_UPDATE_OPPONENT_STATUS: for (i = 0; i < CONTESTANT_COUNT; i++) { if (gContestantTurnOrder[i] == gTasks[taskId].data[1]) break; } - if (sub_80DB798(i)) + if (DrawStatusSymbol(i)) PlaySE(SE_C_PASI); else PlaySE(SE_C_SYU); if (eContestantStatus[i].judgesAttentionWasRemoved) { - sub_80DC674(i); - eContestantStatus[i].judgesAttentionWasRemoved = 0; + StopFlashJudgeAttentionEye(i); + eContestantStatus[i].judgesAttentionWasRemoved = FALSE; } gTasks[taskId].data[1]++; - gTasks[taskId].tState = 26; + gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT; return; - case 51: - if (gTasks[taskId].data[10]++ > 9) + case APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG: + if (gTasks[taskId].tCounter++ > 9) { - gTasks[taskId].data[10] = 0; - if (eContestantStatus[r6].numTurnsSkipped != 0 - || eContestantStatus[r6].turnSkipped) + gTasks[taskId].tCounter = 0; + if (eContestantStatus[contestant].numTurnsSkipped != 0 + || eContestantStatus[contestant].turnSkipped) { ContestClearGeneralTextWindow(); - StringCopy(gStringVar1, gContestMons[r6].nickname); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn); Contest_StartTextPrinter(gStringVar4, 1); } - gTasks[taskId].tState = 52; + gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG; } return; - case 52: + case APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG: if (!Contest_RunTextPrinters()) { - if (!eContestantStatus[r6].unk15_6) - gTasks[taskId].tState = 17; + if (!eContestantStatus[contestant].usedComboMove) + gTasks[taskId].tState = APPEALSTATE_CHECK_REPEATED_MOVE; else - gTasks[taskId].tState = 14; + gTasks[taskId].tState = APPEALSTATE_PRINT_COMBO_MSG; } return; - case 14: - r3 = eContestantStatus[r6].unk16; - if (eContestantStatus[r6].unk16 != 0) + case APPEALSTATE_PRINT_COMBO_MSG: + { + s8 completedCombo = eContestantStatus[contestant].completedCombo; + if (eContestantStatus[contestant].completedCombo) { + // Finished combo + + // Looks like there were originally meant to be move combos of + // different effectivenesses. completedCombo however is only ever 0 or 1, + // so in here only "Went over well" will ever be used ContestClearGeneralTextWindow(); - if (r3 == 1) + if (completedCombo == 1) Contest_StartTextPrinter(gText_AppealComboWentOverWell, TRUE); - else if (r3 == 2) + else if (completedCombo == 2) Contest_StartTextPrinter(gText_AppealComboWentOverVeryWell, TRUE); else Contest_StartTextPrinter(gText_AppealComboWentOverExcellently, TRUE); - sub_80DD720(3); - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 45; + + DoJudgeSpeechBubble(JUDGE_SYMBOL_TWO_EXCLAMATIONS); + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO; } else { + // Started combo ContestClearGeneralTextWindow(); - StringCopy(gStringVar1, gContestMons[r6].nickname); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, gText_JudgeLookedAtMonExpectantly); Contest_StartTextPrinter(gStringVar4, 1); - sub_80DD720(2); - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 45; + DoJudgeSpeechBubble(JUDGE_SYMBOL_ONE_EXCLAMATION); + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO; } return; - case 45: - if (!eContest.unk1920A_4) + } + case APPEALSTATE_WAIT_JUDGE_COMBO: + if (!eContest.waitForJudgeSpeechBubble) { - sub_80DC9B4(eContest.currentContestant); - gTasks[taskId].tState = 15; + StartStopFlashJudgeAttentionEye(eContest.currentContestant); + gTasks[taskId].tState = APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO; } return; - case 15: + case APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO: if (!Contest_RunTextPrinters()) { - if (++gTasks[taskId].data[10] > 50) + if (++gTasks[taskId].tCounter > 50) { - if (!eContestantStatus[r6].hasJudgesAttention) + if (!eContestantStatus[contestant].hasJudgesAttention) { - sub_80DC028( - eContestantStatus[r6].appeal2, - eContestantStatus[r6].unk17, - r6); - eContestantStatus[r6].appeal2 += eContestantStatus[r6].unk17; + UpdateAppealHearts( + eContestantStatus[contestant].appeal2, + eContestantStatus[contestant].unk17, + contestant); + eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].unk17; } - gTasks[taskId].tState = 16; + gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_COMBO; } } return; - case 16: - if (!gContestResources->field_14[r6].unk2_2) + case APPEALSTATE_WAIT_HEARTS_FROM_COMBO: + if (!gContestResources->field_14[contestant].updatingAppealHearts) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 17; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_CHECK_REPEATED_MOVE; } return; - case 17: - if (eContestantStatus[r6].repeatedMove) + case APPEALSTATE_CHECK_REPEATED_MOVE: + if (eContestantStatus[contestant].repeatedMove) { ContestClearGeneralTextWindow(); - StringCopy(gStringVar1, gContestMons[r6].nickname); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, gText_RepeatedAppeal); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].data[10] = 0; - sub_80DD720(0); - gTasks[taskId].tState = 46; + gTasks[taskId].tCounter = 0; + DoJudgeSpeechBubble(JUDGE_SYMBOL_SWIRL); + gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE; } else { - gTasks[taskId].tState = 41; + gTasks[taskId].tState = APPEALSTATE_UPDATE_CROWD; } return; - case 46: - if (!eContest.unk1920A_4) - gTasks[taskId].tState = 19; + case APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE: + if (!eContest.waitForJudgeSpeechBubble) + gTasks[taskId].tState = APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT; return; - case 19: + case APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT: if (!Contest_RunTextPrinters()) { - sub_80DC028(eContestantStatus[r6].appeal2, -eContestantStatus[r6].unk18, r6); - eContestantStatus[r6].appeal2 -= eContestantStatus[r6].unk18; - gTasks[taskId].tState = 18; + UpdateAppealHearts(eContestantStatus[contestant].appeal2, -eContestantStatus[contestant].unk18, contestant); + eContestantStatus[contestant].appeal2 -= eContestantStatus[contestant].unk18; + gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_REPEAT; } return; - case 18: + case APPEALSTATE_WAIT_HEARTS_FROM_REPEAT: ContestDebugDoPrint(); - if (!gContestResources->field_14[r6].unk2_2) + if (!gContestResources->field_14[contestant].updatingAppealHearts) { - gTasks[taskId].data[10] = 0; + gTasks[taskId].tCounter = 0; ContestClearGeneralTextWindow(); - gTasks[taskId].tState = 41; + gTasks[taskId].tState = APPEALSTATE_UPDATE_CROWD; } return; - case 41: - if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer) + case APPEALSTATE_UPDATE_CROWD: + if (gContestResources->field_10->excitementFrozen && contestant != gContestResources->field_10->excitementFreezer) { - gTasks[taskId].tState = 57; + gTasks[taskId].tState = APPEALSTATE_PRINT_CROWD_WATCHES_MSG; } else { - r3 = gContestResources->field_10->bits_0; - if (eContestantStatus[r6].overrideCategoryExcitementMod) + r3 = gContestResources->field_10->moveExcitement; // Can't get this to use local variable. Should be "moveExcitement" + if (eContestantStatus[contestant].overrideCategoryExcitementMod) { r3 = 1; - StringCopy(gStringVar3, gMoveNames[eContestantStatus[r6].currMove]); + StringCopy(gStringVar3, gMoveNames[eContestantStatus[contestant].currMove]); } else { - StringCopy(gStringVar3, sContestConditions[gContestMoves[eContestantStatus[r6].currMove].contestCategory]); - } - if (r3 > 0) - { - if (eContestantStatus[r6].repeatedMove) - r3 = 0; + StringCopy(gStringVar3, sContestConditions[gContestMoves[eContestantStatus[contestant].currMove].contestCategory]); } + + if (r3 > 0 && eContestantStatus[contestant].repeatedMove) + r3 = 0; + ContestClearGeneralTextWindow(); - StringCopy(gStringVar1, gContestMons[r6].nickname); + StringCopy(gStringVar1, gContestMons[contestant].nickname); eContest.applauseLevel += r3; if (eContest.applauseLevel < 0) eContest.applauseLevel = 0; if (r3 == 0) { - gTasks[taskId].tState = 55; + gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT; } else { @@ -2087,28 +2223,28 @@ static void Task_DoAppeals(u8 taskId) else StringExpandPlaceholders(gStringVar4, gText_MonsXGotTheCrowdGoing); Contest_StartTextPrinter(gStringVar4, 1); - gTasks[taskId].data[10] = 0; + gTasks[taskId].tCounter = 0; gTasks[taskId].data[11] = 0; if (r3 < 0) - gTasks[taskId].tState = 53; + gTasks[taskId].tState = APPEALSTATE_DO_CROWD_UNEXCITED; else - gTasks[taskId].tState = 54; + gTasks[taskId].tState = APPEALSTATE_DO_CROWD_EXCITED; } } return; - case 53: - switch (gTasks[taskId].data[10]) + case APPEALSTATE_DO_CROWD_UNEXCITED: + switch (gTasks[taskId].tCounter) { case 0: - sub_80DDED0(-1, 1); + BlendAudienceBackground(-1, 1); PlayFanfare(MUS_ME_ZANNEN); - gTasks[taskId].data[10]++; + gTasks[taskId].tCounter++; break; case 1: - if (!eContest.unk1920B_0 && !Contest_RunTextPrinters()) + if (!eContest.waitForAudienceBlend && !Contest_RunTextPrinters()) { ShowAndUpdateApplauseMeter(-1); - gTasks[taskId].data[10]++; + gTasks[taskId].tCounter++; } break; case 2: @@ -2117,38 +2253,38 @@ static void Task_DoAppeals(u8 taskId) if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80DDED0(-1, -1); - gTasks[taskId].data[10]++; + BlendAudienceBackground(-1, -1); + gTasks[taskId].tCounter++; } } break; case 3: if (!gPaletteFade.active) { - gTasks[taskId].data[10] = 0; + gTasks[taskId].tCounter = 0; gTasks[taskId].data[11] = 0; - gTasks[taskId].tState = 43; + gTasks[taskId].tState = APPEALSTATE_WAIT_EXCITEMENT_HEARTS; } break; } return; - case 54: - switch (gTasks[taskId].data[10]) + case APPEALSTATE_DO_CROWD_EXCITED: + switch (gTasks[taskId].tCounter) { case 0: if (!Contest_RunTextPrinters()) { - sub_80DDED0(1, 1); - gTasks[taskId].data[10]++; + BlendAudienceBackground(1, 1); + gTasks[taskId].tCounter++; } break; case 1: - if (!eContest.unk1920B_0) + if (!eContest.waitForAudienceBlend) { - sub_80DDE0C(); + AnimateAudience(); PlaySE(SE_W227B); ShowAndUpdateApplauseMeter(1); - gTasks[taskId].data[10]++; + gTasks[taskId].tCounter++; } break; case 2: @@ -2157,83 +2293,83 @@ static void Task_DoAppeals(u8 taskId) if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80DC028(eContestantStatus[r6].appeal2, gContestResources->field_10->unk2, r6); - eContestantStatus[r6].appeal2 += gContestResources->field_10->unk2; - gTasks[taskId].data[10]++; + UpdateAppealHearts(eContestantStatus[contestant].appeal2, gContestResources->field_10->unk2, contestant); + eContestantStatus[contestant].appeal2 += gContestResources->field_10->unk2; + gTasks[taskId].tCounter++; } } break; case 3: - if (!gContestResources->field_14[r6].unk2_2) + if (!gContestResources->field_14[contestant].updatingAppealHearts) { - if (!eContest.unk1920A_7) + if (!eContest.animatingAudience) { - sub_80DDED0(1, -1); - gTasks[taskId].data[10]++; + BlendAudienceBackground(1, -1); + gTasks[taskId].tCounter++; } } break; case 4: if (!gPaletteFade.active) { - gTasks[taskId].data[10] = 0; + gTasks[taskId].tCounter = 0; gTasks[taskId].data[11] = 0; - gTasks[taskId].tState = 43; + gTasks[taskId].tState = APPEALSTATE_WAIT_EXCITEMENT_HEARTS; } break; } return; - case 43: - if (!gContestResources->field_14[r6].unk2_2) + case APPEALSTATE_WAIT_EXCITEMENT_HEARTS: + if (!gContestResources->field_14[contestant].updatingAppealHearts) { ContestClearGeneralTextWindow(); - gTasks[taskId].tState = 55; + gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT; } return; - case 57: + case APPEALSTATE_PRINT_CROWD_WATCHES_MSG: ContestClearGeneralTextWindow(); StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname); - StringCopy(gStringVar1, gContestMons[r6].nickname); - StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]); StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].tState = 58; + gTasks[taskId].tState = APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG; return; - case 58: + case APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG: if (!Contest_RunTextPrinters()) { ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, gText_MonsMoveIsIgnored); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].tState = 59; + gTasks[taskId].tState = APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG; } return; - case 59: + case APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG: if (!Contest_RunTextPrinters()) { ContestClearGeneralTextWindow(); - gTasks[taskId].tState = 55; + gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT; } return; - case 33: - if (eContestantStatus[r6].hasJudgesAttention) - eContestantStatus[r6].hasJudgesAttention = 0; - sub_80DC9B4(r6); - StringCopy(gStringVar1, gContestMons[r6].nickname); - StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]); + case APPEALSTATE_PRINT_TOO_NERVOUS_MSG: + if (eContestantStatus[contestant].hasJudgesAttention) + eContestantStatus[contestant].hasJudgesAttention = FALSE; + StartStopFlashJudgeAttentionEye(contestant); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]); StringExpandPlaceholders(gStringVar4, gText_MonWasTooNervousToMove); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].tState = 34; + gTasks[taskId].tState = APPEALSTATE_WAIT_TOO_NERVOUS_MSG; return; - case 34: + case APPEALSTATE_WAIT_TOO_NERVOUS_MSG: if (!Contest_RunTextPrinters()) - gTasks[taskId].tState = 55; + gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT; return; - case 55: - TryMoveApplauseMeterOffscreen(); - gTasks[taskId].tState = 56; + case APPEALSTATE_SLIDE_APPLAUSE_OUT: + SlideApplauseMeterOut(); + gTasks[taskId].tState = APPEALSTATE_WAIT_SLIDE_APPLAUSE; return; - case 56: + case APPEALSTATE_WAIT_SLIDE_APPLAUSE: if (!eContest.applauseMeterIsMoving) { if (eContest.applauseLevel > 4) @@ -2241,68 +2377,68 @@ static void Task_DoAppeals(u8 taskId) eContest.applauseLevel = 0; UpdateApplauseMeter(); } - gTasks[taskId].tState = 10; + gTasks[taskId].tState = APPEALSTATE_SLIDE_MON_OUT; } return; - case 10: - spriteId = gTasks[taskId].data[2]; - gSprites[spriteId].callback = sub_80DA164; - gTasks[taskId].tState = 11; + case APPEALSTATE_SLIDE_MON_OUT: + spriteId = gTasks[taskId].tMonSpriteId; + gSprites[spriteId].callback = SpriteCB_MonSlideOut; + gTasks[taskId].tState = APPEALSTATE_FREE_MON_SPRITE; return; - case 11: - spriteId = gTasks[taskId].data[2]; + case APPEALSTATE_FREE_MON_SPRITE: + spriteId = gTasks[taskId].tMonSpriteId; if (gSprites[spriteId].invisible) { FreeSpriteOamMatrix(&gSprites[spriteId]); DestroySprite(&gSprites[spriteId]); - gTasks[taskId].tState = 20; + gTasks[taskId].tState = APPEALSTATE_START_TURN_END_DELAY; } return; - case 20: - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 21; + case APPEALSTATE_START_TURN_END_DELAY: + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_TURN_END_DELAY; return; - case 31: + case APPEALSTATE_PRINT_SKIP_TURN_MSG: ContestClearGeneralTextWindow(); - StringCopy(gStringVar1, gContestMons[r6].nickname); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers); Contest_StartTextPrinter(gStringVar4, TRUE); - gTasks[taskId].tState = 32; + gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_TURN_MSG; return; - case 32: + case APPEALSTATE_WAIT_SKIP_TURN_MSG: if (!Contest_RunTextPrinters()) - gTasks[taskId].tState = 21; + gTasks[taskId].tState = APPEALSTATE_TURN_END_DELAY; return; - case 21: - if (++gTasks[taskId].data[10] > 29) + case APPEALSTATE_TURN_END_DELAY: + if (++gTasks[taskId].tCounter > 29) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].tState = 22; + gTasks[taskId].tCounter = 0; + gTasks[taskId].tState = APPEALSTATE_START_NEXT_TURN; } return; - case 22: + case APPEALSTATE_START_NEXT_TURN: if (++eContest.turnNumber == CONTESTANT_COUNT) { gTasks[taskId].tState = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80DA198; + gTasks[taskId].tMonSpriteId = 0; + gTasks[taskId].func = Task_FinishRoundOfAppeals; } else { - gTasks[taskId].tState = 0; + gTasks[taskId].tState = APPEALSTATE_START_TURN; } return; } } -static void sub_80DA110(u8 taskId) +static void Task_EndWaitForLink(u8 taskId) { - eContest.unk1920B_2 = 0; + eContest.waitForLink = FALSE; DestroyTask(taskId); } -static void sub_80DA134(struct Sprite *sprite) +static void SpriteCB_MonSlideIn(struct Sprite *sprite) { if (sprite->pos2.x != 0) { @@ -2318,7 +2454,7 @@ static void sub_80DA134(struct Sprite *sprite) } } -static void sub_80DA164(struct Sprite *sprite) +static void SpriteCB_MonSlideOut(struct Sprite *sprite) { sprite->pos2.x -= 6; if (sprite->pos1.x + sprite->pos2.x < -32) @@ -2328,7 +2464,7 @@ static void sub_80DA164(struct Sprite *sprite) } } -static void sub_80DA198(u8 taskId) +static void Task_FinishRoundOfAppeals(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -2337,14 +2473,14 @@ static void sub_80DA198(u8 taskId) { u8 taskId2; - eContest.unk1920B_2 = 1; + eContest.waitForLink = TRUE; if (IsPlayerLinkLeader()) { RankContestants(); SetAttentionLevels(); } taskId2 = CreateTask(sub_80FCC88, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110); + SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].data[0] = 1; } @@ -2356,25 +2492,25 @@ static void sub_80DA198(u8 taskId) } break; case 1: - if (!eContest.unk1920B_2) + if (!eContest.waitForLink) gTasks[taskId].data[0] = 2; break; case 2: gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80DA25C; + gTasks[taskId].func = Task_ReadyUpdateHeartSliders; break; } } -static void sub_80DA25C(u8 taskId) +static void Task_ReadyUpdateHeartSliders(u8 taskId) { - sub_80DE008(FALSE); + ShowHideNextTurnGfx(FALSE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80DA28C; + gTasks[taskId].func = Task_UpdateHeartSliders; } -static void sub_80DA28C(u8 taskId) +static void Task_UpdateHeartSliders(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -2400,12 +2536,12 @@ static void sub_80DA28C(u8 taskId) UpdateHeartSliders(); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80DA31C; + gTasks[taskId].func = Task_WaitForHeartSliders; break; } } -static void sub_80DA31C(u8 taskId) +static void Task_WaitForHeartSliders(u8 taskId) { if (SlidersDoneUpdating()) gTasks[taskId].func = sub_80DA348; @@ -2425,11 +2561,11 @@ static void sub_80DA38C(u8 taskId) { gTasks[taskId].data[0] = 0; if (--gTasks[taskId].data[1] == 0) - gTasks[taskId].func = sub_80DA3CC; + gTasks[taskId].func = Task_PrintRoundResultText; } } -static void sub_80DA3CC(u8 taskId) +static void Task_PrintRoundResultText(u8 taskId) { if (gTasks[taskId].data[0] == 0) { @@ -2446,44 +2582,44 @@ static void sub_80DA3CC(u8 taskId) if (!Contest_RunTextPrinters()) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80DA464; + gTasks[taskId].func = Task_ReUpdateHeartSliders; ContestDebugDoPrint(); } } } -static void sub_80DA464(u8 taskId) +static void Task_ReUpdateHeartSliders(u8 taskId) { if (gTasks[taskId].data[0]++ > 29) { gTasks[taskId].data[0] = 0; - UpdateHeartSliders(); - gTasks[taskId].func = sub_80DA49C; + UpdateHeartSliders(); // ? Sliders have already been updated + gTasks[taskId].func = Task_WaitForHeartSlidersAgain; } } -static void sub_80DA49C(u8 taskId) +static void Task_WaitForHeartSlidersAgain(u8 taskId) { if (SlidersDoneUpdating()) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80DA4CC; + gTasks[taskId].func = Task_DropCurtainAtRoundEnd; } } -static void sub_80DA4CC(u8 taskId) +static void Task_DropCurtainAtRoundEnd(u8 taskId) { - sub_80DE224(); - gTasks[taskId].func = sub_80DE424; + SetBgForCurtainDrop(); + gTasks[taskId].func = Task_StartDropCurtainAtRoundEnd; } -static void sub_80DA4F4(u8 taskId) +static void Task_UpdateContestantBoxOrder(u8 taskId) { - sub_80DE350(); - gTasks[taskId].func = sub_80DA51C; + UpdateContestantBoxOrder(); + gTasks[taskId].func = Task_TryStartNextRoundOfAppeals; } -static void sub_80DA51C(u8 taskId) +static void Task_TryStartNextRoundOfAppeals(u8 taskId) { vu16 sp0 = GetGpuReg(REG_OFFSET_BG0CNT); vu16 sp2 = GetGpuReg(REG_OFFSET_BG2CNT); @@ -2498,12 +2634,12 @@ static void sub_80DA51C(u8 taskId) } else { - StartMoveApplauseMeterOnscreen(); - gTasks[taskId].func = sub_80DA5B4; + SlideApplauseMeterIn(); + gTasks[taskId].func = Task_StartNewRoundOfAppeals; } } -static void sub_80DA5B4(u8 taskId) +static void Task_StartNewRoundOfAppeals(u8 taskId) { if (!eContest.applauseMeterIsMoving) gTasks[taskId].func = Task_DisplayAppealNumberText; @@ -2538,16 +2674,16 @@ static void Task_WaitForOutOfTimeMsg(u8 taskId) { if (!Contest_RunTextPrinters()) { - sub_80DE224(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 160; PlaySE12WithPanning(SE_C_MAKU_D, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CoverAppealPanelForEnd; + gTasks[taskId].func = Task_DropCurtainAtAppealsEnd; } } -static void Task_CoverAppealPanelForEnd(u8 taskId) +static void Task_DropCurtainAtAppealsEnd(u8 taskId) { gBattle_BG1_Y -= 7; if ((s16)gBattle_BG1_Y < 0) @@ -2947,25 +3083,25 @@ void CalculateRound1Points(u8 contestCategory) gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory); } -static u8 sub_80DB0C4(void) +static u8 CreateJudgeSprite(void) { u8 spriteId; - LoadCompressedSpriteSheet(&gUnknown_08587C00); + LoadCompressedSpriteSheet(&sSpriteSheet_Judge); LoadCompressedPalette(gContest2Pal, 0x110, 32); - spriteId = CreateSprite(&gSpriteTemplate_8587BE8, 112, 36, 30); + spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30); gSprites[spriteId].oam.paletteNum = 1; gSprites[spriteId].callback = SpriteCallbackDummy; return spriteId; } -static u8 sub_80DB120(void) +static u8 CreateJudgeSpeechBubbleSprite(void) { u8 spriteId; LoadCompressedSpriteSheet(&sSpriteSheet_JudgeSymbols); - LoadCompressedSpritePalette(&gUnknown_08587C10); - spriteId = CreateSprite(&gSpriteTemplate_8587C18, 96, 10, 29); + LoadCompressedSpritePalette(&sSpritePalette_JudgeSymbols); + spriteId = CreateSprite(&sSpriteTemplate_JudgeSpeechBubble, 96, 10, 29); gSprites[spriteId].invisible = TRUE; gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum; return spriteId; @@ -2977,9 +3113,9 @@ static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 ind species = SanitizeSpecies(species); if (index == gContestPlayerMonIndex) - HandleLoadSpecialPokePic_2(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality); + HandleLoadSpecialPokePic_2(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality); else - HandleLoadSpecialPokePic_DontHandleDeoxys(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality); LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); SetMultiuseSpriteTemplateToPokemon(species, 0); @@ -3017,27 +3153,28 @@ static void SwapMoveDescAndContestTilemaps(void) CpuCopy16(gContestResources->contestBgTilemaps[2], gContestResources->contestBgTilemaps[2] + 0x500, 32 * 20); } -static u16 sub_80DB2EC(u16 a0, u8 a1) +// Functionally unused +static u16 GetMoveEffectSymbolTileOffset(u16 move, u8 contestant) { - u16 var; + u16 offset; - switch (gContestEffects[gContestMoves[a0].effect].effectType) + switch (gContestEffects[gContestMoves[move].effect].effectType) { case 0: case 1: case 8: - var = 0x9082; + offset = 0x9082; break; case 2: case 3: - var = 0x9088; + offset = 0x9088; break; default: - var = 0x9086; + offset = 0x9086; break; } - var += 0x9000 + (a1 << 12); - return var; + offset += 0x9000 + (contestant << 12); + return offset; } static void PrintContestMoveDescription(u16 a) @@ -3084,53 +3221,54 @@ static void PrintContestMoveDescription(u16 a) // Empty hearts ContestBG_FillBoxWithTile(0, 0x5014, 0x15, 0x20, numHearts, 0x01, 0x11); - FillWindowPixelBuffer(CONTEST_WINDOW_MOVE_DESCRIPTION, PIXEL_FILL(0)); - Contest_PrintTextToBg0WindowStd(CONTEST_WINDOW_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]); - Contest_PrintTextToBg0WindowStd(CONTEST_WINDOW_SLASH, gText_Slash); + FillWindowPixelBuffer(WIN_MOVE_DESCRIPTION, PIXEL_FILL(0)); + Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]); + Contest_PrintTextToBg0WindowStd(WIN_SLASH, gText_Slash); } -static void sub_80DB4E0(u16 move, u8 b) +static void DrawMoveEffectSymbol(u16 move, u8 contestant) { - u8 r7 = gContestantTurnOrder[b] * 5 + 2; + u8 contestantOffset = gContestantTurnOrder[contestant] * 5 + 2; - if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE) + if (!Contest_IsMonsTurnDisabled(contestant) && move != MOVE_NONE) { - u16 tile = sub_80DB2EC(move, b); + u16 tile = GetMoveEffectSymbolTileOffset(move, contestant); - ContestBG_FillBoxWithIncrementingTile(0, tile, 20, r7, 2, 1, 17, 1); - ContestBG_FillBoxWithIncrementingTile(0, tile + 16, 20, r7 + 1, 2, 1, 17, 1); + ContestBG_FillBoxWithIncrementingTile(0, tile, 20, contestantOffset, 2, 1, 17, 1); + ContestBG_FillBoxWithIncrementingTile(0, tile + 16, 20, contestantOffset + 1, 2, 1, 17, 1); } else { - ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17); + ContestBG_FillBoxWithTile(0, 0, 20, contestantOffset, 2, 2, 17); } } -static void sub_80DB584(void) +// Unused +static void DrawMoveEffectSymbols(void) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - sub_80DB4E0(eContestantStatus[i].currMove, i); + DrawMoveEffectSymbol(eContestantStatus[i].currMove, i); } -static u16 sub_80DB5B0(void) +static u16 GetStarTileOffset(void) { return 0x2034; } -static bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod) +static bool8 UpdateConditionStars(u8 contestantIdx, bool8 resetMod) { - u8 r6; - s32 r4; + u8 contestantOffset; + s32 numStars; if (eContestantStatus[contestantIdx].conditionMod == 0) return FALSE; - r6 = gContestantTurnOrder[contestantIdx] * 5 + 2; - r4 = eContestantStatus[contestantIdx].condition / 10; + contestantOffset = gContestantTurnOrder[contestantIdx] * 5 + 2; + numStars = eContestantStatus[contestantIdx].condition / 10; if (eContestantStatus[contestantIdx].conditionMod == 1) { - ContestBG_FillBoxWithTile(0, sub_80DB5B0(), 19, r6, 1, r4, 17); + ContestBG_FillBoxWithTile(0, GetStarTileOffset(), 19, contestantOffset, 1, numStars, 17); if (resetMod) { PlaySE(SE_EXPMAX); @@ -3139,7 +3277,7 @@ static bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod) } else { - ContestBG_FillBoxWithTile(0, 0, 19, r6 + r4, 1, 3 - r4, 17); + ContestBG_FillBoxWithTile(0, 0, 19, contestantOffset + numStars, 1, 3 - numStars, 17); if (resetMod) { PlaySE(SE_FU_ZAKU2); @@ -3149,86 +3287,90 @@ static bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod) return TRUE; } -static void sub_80DB69C(void) +static void DrawConditionStars(void) { s32 i; - s32 r6; + s32 numStars; for (i = 0; i < CONTESTANT_COUNT; i++) { - u8 r4 = gContestantTurnOrder[i] * 5 + 2; - u16 r5 = sub_80DB5B0(); + u8 contestantOffset = gContestantTurnOrder[i] * 5 + 2; + u16 starOffset = GetStarTileOffset(); - r6 = eContestantStatus[i].condition / 10; - ContestBG_FillBoxWithTile(0, r5, 19, r4, 1, r6, 17); - ContestBG_FillBoxWithTile(0, 0, 19, r4 + r6, 1, 3 - r6, 17); + numStars = eContestantStatus[i].condition / 10; + ContestBG_FillBoxWithTile(0, starOffset, 19, contestantOffset, 1, numStars, 17); + ContestBG_FillBoxWithTile(0, 0, 19, contestantOffset + numStars, 1, 3 - numStars, 17); } } -static u16 sub_80DB748(u8 status) +static u16 GetStatusSymbolTileOffset(u8 status) { - u16 var = 0; + u16 offset = 0; switch (status) { - case 0: - var = 0x80; + case STAT_SYMBOL_CIRCLE: // For resistant + offset = 0x80; break; - case 1: - var = 0x84; + case STAT_SYMBOL_WAVE: // For nervous + offset = 0x84; break; - case 2: - var = 0x86; + case STAT_SYMBOL_X: // For turn skipped + offset = 0x86; break; - case 3: - var = 0x88; + case STAT_SYMBOL_SWIRL: // For jammed/unnerved + offset = 0x88; break; - case 4: - var = 0x82; + case STAT_SYMBOL_SQUARE: // Never used + offset = 0x82; break; } - var += 0x9000; - return var; + offset += 0x9000; + return offset; } -static bool8 sub_80DB798(u8 a) +static bool8 DrawStatusSymbol(u8 contestant) { - bool8 r9 = TRUE; - u16 r8 = 0; - u8 r7 = gContestantTurnOrder[a] * 5 + 2; + bool8 statused = TRUE; + u16 symbolOffset = 0; + u8 contestantOffset = gContestantTurnOrder[contestant] * 5 + 2; - if (eContestantStatus[a].resistant || eContestantStatus[a].immune || eContestantStatus[a].jamSafetyCount != 0 || eContestantStatus[a].jamReduction != 0) - r8 = sub_80DB748(0); - else if (eContestantStatus[a].nervous) - r8 = sub_80DB748(1); - else if (eContestantStatus[a].numTurnsSkipped != 0 || eContestantStatus[a].noMoreTurns) - r8 = sub_80DB748(2); + if (eContestantStatus[contestant].resistant + || eContestantStatus[contestant].immune + || eContestantStatus[contestant].jamSafetyCount != 0 + || eContestantStatus[contestant].jamReduction != 0) + symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_CIRCLE); + else if (eContestantStatus[contestant].nervous) + symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_WAVE); + else if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) + symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_X); else - r9 = FALSE; - if (r9) + statused = FALSE; + + if (statused) { - ContestBG_FillBoxWithIncrementingTile(0, r8, 20, r7, 2, 1, 17, 1); - ContestBG_FillBoxWithIncrementingTile(0, r8 + 16, 20, r7 + 1, 2, 1, 17, 1); + ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset, 2, 1, 17, 1); + ContestBG_FillBoxWithIncrementingTile(0, symbolOffset + 16, 20, contestantOffset + 1, 2, 1, 17, 1); } else { - ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17); + ContestBG_FillBoxWithTile(0, 0, 20, contestantOffset, 2, 2, 17); } - return r9; + return statused; } -static void sub_80DB884(void) +static void DrawStatusSymbols(void) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - sub_80DB798(i); + DrawStatusSymbol(i); } static void ContestClearGeneralTextWindow(void) { - FillWindowPixelBuffer(CONTEST_WINDOW_GENERAL_TEXT, PIXEL_FILL(0)); - CopyWindowToVram(CONTEST_WINDOW_GENERAL_TEXT, 2); + FillWindowPixelBuffer(WIN_GENERAL_TEXT, PIXEL_FILL(0)); + CopyWindowToVram(WIN_GENERAL_TEXT, 2); Contest_SetBgCopyFlags(0); } @@ -3271,16 +3413,14 @@ static void RankContestants(void) } // Sort the point totals using bubble-sort. - for (i = 0; i < 3; i++) + for (i = 0; i < CONTESTANT_COUNT - 1; i++) { - for (j = 3; j > i; j--) + for (j = CONTESTANT_COUNT - 1; j > i; j--) { if (arr[j - 1] < arr[j]) { - u16 temp = arr[j]; - - arr[j] = arr[j - 1]; - arr[j - 1] = temp; + u16 temp; + SWAP(arr[j], arr[j - 1], temp); } } } @@ -3342,7 +3482,7 @@ static bool8 ContestantCanUseTurn(u8 contestant) return TRUE; } -static void sub_80DBAA0(void) +static void ResetContestantStatuses(void) { s32 i; @@ -3420,18 +3560,17 @@ static s16 GetContestantRound2Points(u8 contestant) static void DetermineFinalStandings(void) { u16 randomOrdering[CONTESTANT_COUNT] = {0}; - struct UnknownContestStruct6 sp8[CONTESTANT_COUNT]; + struct ContestFinalStandings standings[CONTESTANT_COUNT]; s32 i; - s32 j; + // Seed random order in case of ties for (i = 0; i < CONTESTANT_COUNT; i++) { - s32 r2; - + s32 j; randomOrdering[i] = Random(); - for (r2 = 0; r2 < i; r2++) + for (j = 0; j < i; j++) { - if (randomOrdering[i] == randomOrdering[r2]) + if (randomOrdering[i] == randomOrdering[j]) { i--; break; @@ -3439,42 +3578,47 @@ static void DetermineFinalStandings(void) } } + // Init data for ranking contestants for (i = 0; i < CONTESTANT_COUNT; i++) { - sp8[i].unk0 = gContestMonTotalPoints[i]; - sp8[i].unk4 = gContestMonRound1Points[i]; - sp8[i].unk8 = randomOrdering[i]; - sp8[i].unkC = i; + standings[i].totalPoints = gContestMonTotalPoints[i]; + standings[i].round1Points = gContestMonRound1Points[i]; + standings[i].random = randomOrdering[i]; + standings[i].contestant = i; } - for (i = 0; i < 3; i++) + // Rank contestants + for (i = 0; i < CONTESTANT_COUNT - 1; i++) { - for (j = 3; j > i; j--) + s32 j; + for (j = CONTESTANT_COUNT - 1; j > i; j--) { - if (sub_80DBF30(j - 1, j, sp8)) + if (DidContestantPlaceHigher(j - 1, j, standings)) { - struct UnknownContestStruct6 temp; + // Swap contestants in array + struct ContestFinalStandings temp; - temp.unk0 = sp8[j - 1].unk0; - temp.unk4 = sp8[j - 1].unk4; - temp.unk8 = sp8[j - 1].unk8; - temp.unkC = sp8[j - 1].unkC; + temp.totalPoints = standings[j - 1].totalPoints; + temp.round1Points = standings[j - 1].round1Points; + temp.random = standings[j - 1].random; + temp.contestant = standings[j - 1].contestant; - sp8[j - 1].unk0 = sp8[j].unk0; - sp8[j - 1].unk4 = sp8[j].unk4; - sp8[j - 1].unk8 = sp8[j].unk8; - sp8[j - 1].unkC = sp8[j].unkC; + standings[j - 1].totalPoints = standings[j].totalPoints; + standings[j - 1].round1Points = standings[j].round1Points; + standings[j - 1].random = standings[j].random; + standings[j - 1].contestant = standings[j].contestant; - sp8[j].unk0 = temp.unk0; - sp8[j].unk4 = temp.unk4; - sp8[j].unk8 = temp.unk8; - sp8[j].unkC = temp.unkC; + standings[j].totalPoints = temp.totalPoints; + standings[j].round1Points = temp.round1Points; + standings[j].random = temp.random; + standings[j].contestant = temp.contestant; } } } + // Assign placements. i is the placing (0 is 1st, 1 is 2nd...) for (i = 0; i < CONTESTANT_COUNT; i++) - gContestFinalStandings[sp8[i].unkC] = i; + gContestFinalStandings[standings[i].contestant] = i; } void SaveLinkContestResults(void) @@ -3488,19 +3632,22 @@ void SaveLinkContestResults(void) } } -static bool8 sub_80DBF30(s32 a, s32 b, struct UnknownContestStruct6 *c) +static bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *standings) { bool8 retVal; - if (c[a].unk0 < c[b].unk0) + // Rank contestants first based on total points + if (standings[a].totalPoints < standings[b].totalPoints) retVal = TRUE; - else if (c[a].unk0 > c[b].unk0) + else if (standings[a].totalPoints > standings[b].totalPoints) retVal = FALSE; - else if (c[a].unk4 < c[b].unk4) + // If tied, rank on round 1 points + else if (standings[a].round1Points < standings[b].round1Points) retVal = TRUE; - else if (c[a].unk4 > c[b].unk4) + else if (standings[a].round1Points > standings[b].round1Points) retVal = FALSE; - else if (c[a].unk8 < c[b].unk8) + // If tied again, choose randomly + else if (standings[a].random < standings[b].random) retVal = TRUE; else retVal = FALSE; @@ -3520,147 +3667,161 @@ static void FillContestantWindowBgs(void) int i; for(i = 0; i < CONTESTANT_COUNT; i++) - { ContestBG_FillBoxWithTile(0, 0, 0x16, 2 + i * 5, 8, 2, 0x11); - } } -static u16 sub_80DBFC8(u8 a) +static u16 GetAppealHeartTileOffset(u8 contestant) { - u16 var; + u16 offset; - if (a == 0) - var = 0x5011; - else if (a == 1) - var = 0x6011; - else if (a == 2) - var = 0x7011; + if (contestant == 0) + offset = 0x5011; + else if (contestant == 1) + offset = 0x6011; + else if (contestant == 2) + offset = 0x7011; else - var = 0x8011; - return var + 1; + offset = 0x8011; + return offset + 1; } -static s8 sub_80DBFFC(s16 a) +static s8 GetNumHeartsFromAppealPoints(s16 appeal) { - s8 retVal = a / 10; + s8 hearts = appeal / 10; - if (retVal > 16) - retVal = 16; - else if (retVal < -16) - retVal = -16; - return retVal; + if (hearts > 16) + hearts = 16; + else if (hearts < -16) + hearts = -16; + return hearts; } -static u8 sub_80DC028(s16 a, s16 b, u8 c) +#define tNumHearts data[0] +#define tHeartsDelta data[1] +#define tHeartsSign data[2] +#define tContestant data[3] +#define tDelayTimer data[10] + +static u8 UpdateAppealHearts(s16 startAppeal, s16 endAppeal, u8 contestant) { u8 taskId; - s8 r4; - s8 r5; + s8 startHearts; + s8 heartsDelta; - gContestResources->field_14[c].unk2_2 = 1; - taskId = CreateTask(sub_80DC0F4, 20); - r4 = sub_80DBFFC(a); - r5 = sub_80DBFFC(a + b) - r4; - sub_80DBFC8(c); // unused return value - gTasks[taskId].data[0] = abs(r4); - gTasks[taskId].data[1] = r5; - if (r4 > 0 || (r4 == 0 && r5 > 0)) - gTasks[taskId].data[2] = 1; + gContestResources->field_14[contestant].updatingAppealHearts = TRUE; + taskId = CreateTask(Task_UpdateAppealHearts, 20); + startHearts = GetNumHeartsFromAppealPoints(startAppeal); + heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + endAppeal) - startHearts; + GetAppealHeartTileOffset(contestant); // unused return value + gTasks[taskId].tNumHearts = abs(startHearts); + gTasks[taskId].tHeartsDelta = heartsDelta; + if (startHearts > 0 || (startHearts == 0 && heartsDelta > 0)) + gTasks[taskId].tHeartsSign = 1; else - gTasks[taskId].data[2] = -1; - gTasks[taskId].data[3] = c; + gTasks[taskId].tHeartsSign = -1; + gTasks[taskId].tContestant = contestant; return taskId; } -static void sub_80DC0F4(u8 taskId) +static void Task_UpdateAppealHearts(u8 taskId) { - u8 r7 = gTasks[taskId].data[3]; - s16 r3 = gTasks[taskId].data[0]; - s16 r1 = gTasks[taskId].data[1]; + u8 contestant = gTasks[taskId].tContestant; + s16 startHearts = gTasks[taskId].tNumHearts; + s16 heartsDelta = gTasks[taskId].tHeartsDelta; - if (++gTasks[taskId].data[10] > 14) + if (++gTasks[taskId].tDelayTimer > 14) { - u16 r6; - u8 r5; - u8 r10; - u8 r11; + u16 heartOffset; + u8 newNumHearts; + u8 pitchMod; + bool8 onSecondLine; - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[1] == 0) + gTasks[taskId].tDelayTimer = 0; + if (gTasks[taskId].tHeartsDelta == 0) { + // No more hearts to add/remove, end DestroyTask(taskId); - gContestResources->field_14[r7].unk2_2 = 0; + gContestResources->field_14[contestant].updatingAppealHearts = FALSE; return; } - else if (r3 == 0) + else if (startHearts == 0) { - if (r1 < 0) + if (heartsDelta < 0) { - r6 = sub_80DBFC8(r7) + 2; - gTasks[taskId].data[1]++; + // Losing hearts, get black heart offset + heartOffset = GetAppealHeartTileOffset(contestant) + 2; + gTasks[taskId].tHeartsDelta++; } else { - r6 = sub_80DBFC8(r7); - gTasks[taskId].data[1]--; + // Gaining hearts, get red heart offset + heartOffset = GetAppealHeartTileOffset(contestant); + gTasks[taskId].tHeartsDelta--; } - r5 = gTasks[taskId].data[0]++; + newNumHearts = gTasks[taskId].tNumHearts++; } else { - if (gTasks[taskId].data[2] < 0) + if (gTasks[taskId].tHeartsSign < 0) { - if (r1 < 0) + // Hearts currently black (negative) + if (heartsDelta < 0) { - r5 = gTasks[taskId].data[0]++; - gTasks[taskId].data[1]++; - r6 = sub_80DBFC8(r7) + 2; + // Losing points, add black heart + newNumHearts = gTasks[taskId].tNumHearts++; + gTasks[taskId].tHeartsDelta++; + heartOffset = GetAppealHeartTileOffset(contestant) + 2; } else { - r5 = --gTasks[taskId].data[0]; - r6 = 0; - gTasks[taskId].data[1]--; + // Gaining points, remove black heart + newNumHearts = --gTasks[taskId].tNumHearts; + heartOffset = 0; + gTasks[taskId].tHeartsDelta--; } } else { - if (r1 < 0) + // Hearts currently red (positive) + if (heartsDelta < 0) { - r5 = --gTasks[taskId].data[0]; - r6 = 0; - gTasks[taskId].data[1]++; + // Losing points, remove red heart + newNumHearts = --gTasks[taskId].tNumHearts; + heartOffset = 0; + gTasks[taskId].tHeartsDelta++; } else { - r5 = gTasks[taskId].data[0]++; - gTasks[taskId].data[1]--; - r6 = sub_80DBFC8(r7); + // Gaining points, add red heart + newNumHearts = gTasks[taskId].tNumHearts++; + gTasks[taskId].tHeartsDelta--; + heartOffset = GetAppealHeartTileOffset(contestant); } } } - r10 = r5; - r11 = 0; + pitchMod = newNumHearts; + onSecondLine = FALSE; - if (r5 > 7) + // Check if wrapping to second line of hearts + if (newNumHearts > 7) { - r11 = 1; - r5-= 8; + onSecondLine = TRUE; + newNumHearts -= 8; } - ContestBG_FillBoxWithTile(0, r6, r5 + 22, gContestantTurnOrder[r7] * 5 + 2 + r11, 1, 1, 17); - if (r1 > 0) + ContestBG_FillBoxWithTile(0, heartOffset, newNumHearts + 22, gContestantTurnOrder[contestant] * 5 + 2 + onSecondLine, 1, 1, 17); + if (heartsDelta > 0) { PlaySE(SE_C_GAJI); m4aMPlayImmInit(&gMPlayInfo_SE1); - m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256); + m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, pitchMod * 256); } else { PlaySE(SE_BOO); } - if (!r11 && !r5 && !r6) - gTasks[taskId].data[2] = -gTasks[taskId].data[2]; + if (!onSecondLine && newNumHearts == 0 && heartOffset == 0) + gTasks[taskId].tHeartsSign = -gTasks[taskId].tHeartsSign; } } @@ -3759,7 +3920,7 @@ static void SetBottomSliderHeartsInvisibility(bool8 invisible) for (i = 0; i < CONTESTANT_COUNT; i++) { - // The contestants that go 3rd and 4th should be moved + // Skip the top two contestants sliders if (gContestantTurnOrder[i] > 1) { if (!invisible) @@ -3791,73 +3952,72 @@ static void CreateApplauseMeterSprite(void) { u8 spriteId; - LoadCompressedSpriteSheet(&sApplauseMeterSpriteSheet); - LoadSpritePalette(&sApplauseMeterPalette); - spriteId = CreateSprite(&sApplauseMeterSpriteTemplate, 30, 44, 1); + LoadCompressedSpriteSheet(&sSpriteSheet_ApplauseMeter); + LoadSpritePalette(&sSpritePalette_ApplauseMeter); + spriteId = CreateSprite(&sSpriteTemplate_ApplauseMeter, 30, 44, 1); gSprites[spriteId].invisible = TRUE; eContest.applauseMeterSpriteId = spriteId; } -static void sub_80DC5E8(void) +static void CreateJudgeAttentionEyeTask(void) { u8 i; - u8 taskId = CreateTask(sub_80DC728, 30); + u8 taskId = CreateTask(Task_FlashJudgeAttentionEye, 30); - eContest.unk19211 = taskId; + eContest.judgeAttentionTaskId = taskId; for (i = 0; i < CONTESTANT_COUNT; i++) gTasks[taskId].data[i * 4] = 0xFF; } -static void sub_80DC630(u8 a) +static void StartFlashJudgeAttentionEye(u8 contestant) { - gTasks[eContest.unk19211].data[a * 4 + 0] = 0; - gTasks[eContest.unk19211].data[a * 4 + 1] = 0; + gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0; + gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0; } -static void sub_80DC674(u8 a) +static void StopFlashJudgeAttentionEye(u8 contestant) { - u8 taskId = CreateTask(sub_80DC6A4, 31); - - gTasks[taskId].data[0] = a; + u8 taskId = CreateTask(Task_StopFlashJudgeAttentionEye, 31); + gTasks[taskId].data[0] = contestant; } -static void sub_80DC6A4(u8 taskId) +static void Task_StopFlashJudgeAttentionEye(u8 taskId) { - u8 r4 = gTasks[taskId].data[0]; + u8 contestant = gTasks[taskId].data[0]; - if (gTasks[eContest.unk19211].data[r4 * 4 + 0] == 0 - || gTasks[eContest.unk19211].data[r4 * 4 + 0] == 0xFF) + if (gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] == 0 + || gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] == 0xFF) { - gTasks[eContest.unk19211].data[r4 * 4 + 0] = 0xFF; - gTasks[eContest.unk19211].data[r4 * 4 + 1] = 0; - BlendPalette((eContest.prevTurnOrder[r4] + MOVE_WINDOWS_START) * 16 + 6, 2, 0, RGB(31, 31, 18)); + gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0xFF; + gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0; + BlendPalette((eContest.prevTurnOrder[contestant] + MOVE_WINDOWS_START) * 16 + 6, 2, 0, RGB(31, 31, 18)); DestroyTask(taskId); } } -static void sub_80DC728(u8 taskId) +static void Task_FlashJudgeAttentionEye(u8 taskId) { u8 i; for (i = 0; i < CONTESTANT_COUNT; i++) { - u8 r3 = i * 4; + u8 offset = i * 4; - if (gTasks[taskId].data[r3 + 0] != 0xFF) + if (gTasks[taskId].data[offset + 0] != 0xFF) { - if (gTasks[taskId].data[r3 + 1] == 0) - gTasks[taskId].data[r3 + 0]++; + if (gTasks[taskId].data[offset + 1] == 0) + gTasks[taskId].data[offset + 0]++; else - gTasks[taskId].data[r3 + 0]--; + gTasks[taskId].data[offset + 0]--; - if (gTasks[taskId].data[r3 + 0] == 16 - || gTasks[taskId].data[r3 + 0] == 0) - gTasks[taskId].data[r3 + 1] ^= 1; + if (gTasks[taskId].data[offset + 0] == 16 + || gTasks[taskId].data[offset + 0] == 0) + gTasks[taskId].data[offset + 1] ^= 1; BlendPalette( (eContest.prevTurnOrder[i] + MOVE_WINDOWS_START) * 16 + 6, 2, - gTasks[taskId].data[r3 + 0], + gTasks[taskId].data[offset + 0], RGB(31, 31, 18)); } } @@ -3911,69 +4071,69 @@ static void sub_80DC8D0(u8 taskId) for (i = 0; i < CONTESTANT_COUNT; i++) { - u8 r3 = i * 4; + u8 idx = i * 4; - if (gTasks[taskId].data[r3 + 0] != 0xFF) + if (gTasks[taskId].data[idx + 0] != 0xFF) { - if (++gTasks[taskId].data[r3 + 2] > 2) + if (++gTasks[taskId].data[idx + 2] > 2) { - gTasks[taskId].data[r3 + 2] = 0; + gTasks[taskId].data[idx + 2] = 0; - if (gTasks[taskId].data[r3 + 1] == 0) - gTasks[taskId].data[r3 + 0]++; + if (gTasks[taskId].data[idx + 1] == 0) + gTasks[taskId].data[idx + 0]++; else - gTasks[taskId].data[r3 + 0]--; + gTasks[taskId].data[idx + 0]--; - if (gTasks[taskId].data[r3 + 0] == 16 - || gTasks[taskId].data[r3 + 0] == 0) - gTasks[taskId].data[r3 + 1] ^= 1; + if (gTasks[taskId].data[idx + 0] == 16 + || gTasks[taskId].data[idx + 0] == 0) + gTasks[taskId].data[idx + 1] ^= 1; - BlendPalette((i + MOVE_WINDOWS_START) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); - BlendPalette((i + MOVE_WINDOWS_START) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); + BlendPalette((i + MOVE_WINDOWS_START) * 16 + 10, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); + BlendPalette((i + MOVE_WINDOWS_START) * 16 + 12 + i, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); } } } } -static void sub_80DC9B4(u8 contestant) +static void StartStopFlashJudgeAttentionEye(u8 contestant) { if (eContestantStatus[contestant].hasJudgesAttention) - sub_80DC630(contestant); + StartFlashJudgeAttentionEye(contestant); else - sub_80DC674(contestant); + StopFlashJudgeAttentionEye(contestant); } -static u8 sub_80DC9EC(u8 contestant) +static u8 CreateContestantBoxBlinkSprites(u8 contestant) { u8 spriteId1, spriteId2; u8 x = gContestantTurnOrder[contestant] * 40 + 32; - LoadCompressedSpriteSheet(&sUnknown_08589904[contestant]); - LoadSpritePalette(&sUnknown_08589924[contestant]); - spriteId1 = CreateSprite(&gSpriteTemplate_858998C[contestant], 184, x, 29); - spriteId2 = CreateSprite(&gSpriteTemplate_858998C[contestant], 248, x, 29); + LoadCompressedSpriteSheet(&sSpriteSheets_ContestantsTurnBlinkEffect[contestant]); + LoadSpritePalette(&sSpritePalettes_ContestantsTurnBlinkEffect[contestant]); + spriteId1 = CreateSprite(&sSpriteTemplates_ContestantsTurnBlinkEffect[contestant], 184, x, 29); + spriteId2 = CreateSprite(&sSpriteTemplates_ContestantsTurnBlinkEffect[contestant], 248, x, 29); gSprites[spriteId2].oam.tileNum += 64; CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(BG_SCREEN_ADDR(28) + gContestantTurnOrder[contestant] * 5 * 64 + 0x26), - gContestResources->field_34); + gContestResources->boxBlinkTiles1); CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(BG_SCREEN_ADDR(28) + gContestantTurnOrder[contestant] * 5 * 64 + 0x36), - gContestResources->field_38); + gContestResources->boxBlinkTiles2); - CpuFill32(0, gContestResources->field_34 + 0x500, 0x300); - CpuFill32(0, gContestResources->field_38 + 0x500, 0x300); + CpuFill32(0, gContestResources->boxBlinkTiles1 + 0x500, 0x300); + CpuFill32(0, gContestResources->boxBlinkTiles2 + 0x500, 0x300); - RequestDma3Copy(gContestResources->field_34, + RequestDma3Copy(gContestResources->boxBlinkTiles1, (u8 *)(VRAM + 0x10000 + gSprites[spriteId1].oam.tileNum * 32), 0x800, 1); - RequestDma3Copy(gContestResources->field_38, + RequestDma3Copy(gContestResources->boxBlinkTiles2, (u8 *)(VRAM + 0x10000 + gSprites[spriteId2].oam.tileNum * 32), 0x800, 1); @@ -3987,7 +4147,7 @@ static u8 sub_80DC9EC(u8 contestant) return spriteId1; } -static void sub_80DCB78(u8 spriteId) +static void DestroyContestantBoxBlinkSprites(u8 spriteId) { u8 spriteId2 = gSprites[spriteId].data[0]; @@ -3996,55 +4156,56 @@ static void sub_80DCB78(u8 spriteId) DestroySpriteAndFreeResources(&gSprites[spriteId]); } -static void sub_80DCBB4(void) +static void SetBlendForContestantBoxBlink(void) { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(7, 9)); } -static void sub_80DCBD0(void) +static void ResetBlendForContestantBoxBlink(void) { SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); } -static void sub_80DCBE8(u8 a, bool8 b) +// To indicate whose turn is up +static void BlinkContestantBox(u8 spriteId, bool8 b) { - u8 r5; + u8 spriteId2; - sub_80DCBB4(); - gContestResources->field_14[gSprites[a].data[1]].unk2_1 = 1; - r5 = gSprites[a].data[0]; - StartSpriteAffineAnim(&gSprites[a], 1); - StartSpriteAffineAnim(&gSprites[r5], 1); - gSprites[a].callback = sub_80DCC84; - gSprites[r5].callback = SpriteCallbackDummy; + SetBlendForContestantBoxBlink(); + gContestResources->field_14[gSprites[spriteId].data[1]].boxBlinking = TRUE; + spriteId2 = gSprites[spriteId].data[0]; + StartSpriteAffineAnim(&gSprites[spriteId], 1); + StartSpriteAffineAnim(&gSprites[spriteId2], 1); + gSprites[spriteId].callback = SpriteCB_BlinkContestantBox; + gSprites[spriteId2].callback = SpriteCallbackDummy; if (b == FALSE) PlaySE(SE_C_PIKON); else PlaySE(SE_PC_LOGIN); } -static void sub_80DCC84(struct Sprite *sprite) +static void SpriteCB_BlinkContestantBox(struct Sprite *sprite) { if (sprite->affineAnimEnded) { - u8 r1 = sprite->data[0]; + u8 spriteId2 = sprite->data[0]; - if (gSprites[r1].affineAnimEnded) + if (gSprites[spriteId2].affineAnimEnded) { sprite->invisible = TRUE; - gSprites[r1].invisible = TRUE; - sprite->callback = sub_80DCCD8; + gSprites[spriteId2].invisible = TRUE; + sprite->callback = SpriteCB_EndBlinkContestantBox; } } } -static void sub_80DCCD8(struct Sprite *sprite) +static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite) { - gContestResources->field_14[sprite->data[1]].unk2_1 = 0; - sub_80DCB78(sprite->data[0]); - sub_80DCBD0(); + gContestResources->field_14[sprite->data[1]].boxBlinking = FALSE; + DestroyContestantBoxBlinkSprites(sprite->data[0]); + ResetBlendForContestantBoxBlink(); } // Unused. @@ -4246,7 +4407,7 @@ static void DrawContestantWindows(void) DrawContestantWindowText(); } -static void sub_80DD080(u8 contestant) +static void CalculateAppealMoveImpact(u8 contestant) { u16 move; u8 effect; @@ -4286,7 +4447,7 @@ static void sub_80DD080(u8 contestant) if (eContestantStatus[contestant].hasJudgesAttention && !AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove)) - eContestantStatus[contestant].hasJudgesAttention = 0; + eContestantStatus[contestant].hasJudgesAttention = FALSE; gContestEffectFuncs[effect](); @@ -4297,30 +4458,30 @@ static void sub_80DD080(u8 contestant) else eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition; - eContestantStatus[contestant].unk16 = 0; - eContestantStatus[contestant].unk15_6 = FALSE; - if (sub_80DE1E8(contestant)) + eContestantStatus[contestant].completedCombo = FALSE; + eContestantStatus[contestant].usedComboMove = FALSE; + if (IsContestantAllowedToCombo(contestant)) { - bool8 usedCombo = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove); + bool8 completedCombo = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove); - if (usedCombo && eContestantStatus[contestant].hasJudgesAttention) + if (completedCombo && eContestantStatus[contestant].hasJudgesAttention) { - eContestantStatus[contestant].unk16 = usedCombo; - eContestantStatus[contestant].unk15_6 = TRUE; - eContestantStatus[contestant].hasJudgesAttention = 0; - eContestantStatus[contestant].unk17 = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].unk16; + eContestantStatus[contestant].completedCombo = completedCombo; + eContestantStatus[contestant].usedComboMove = TRUE; + eContestantStatus[contestant].hasJudgesAttention = FALSE; + eContestantStatus[contestant].unk17 = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].unk15_3 = TRUE; } else { if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) { - eContestantStatus[contestant].hasJudgesAttention = 1; - eContestantStatus[contestant].unk15_6 = TRUE; + eContestantStatus[contestant].hasJudgesAttention = TRUE; + eContestantStatus[contestant].usedComboMove = TRUE; } else { - eContestantStatus[contestant].hasJudgesAttention = 0; + eContestantStatus[contestant].hasJudgesAttention = FALSE; } } } @@ -4329,17 +4490,17 @@ static void sub_80DD080(u8 contestant) if (eContestantStatus[contestant].nervous) { - eContestantStatus[contestant].hasJudgesAttention = 0; + eContestantStatus[contestant].hasJudgesAttention = FALSE; eContestantStatus[contestant].appeal2 = 0; eContestantStatus[contestant].appeal1 = 0; } - eContestResources10.bits_0 = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove); + eContestResources10.moveExcitement = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove); if (eContestantStatus[contestant].overrideCategoryExcitementMod) - eContestResources10.bits_0 = 1; + eContestResources10.moveExcitement = 1; - if (eContestResources10.bits_0 > 0) + if (eContestResources10.moveExcitement > 0) { - if (eContest.applauseLevel + eContestResources10.bits_0 > 4) + if (eContest.applauseLevel + eContestResources10.moveExcitement > 4) eContestResources10.unk2 = 60; else eContestResources10.unk2 = 10; @@ -4349,9 +4510,12 @@ static void sub_80DD080(u8 contestant) eContestResources10.unk2 = 0; } + // Transform and Role Play require a visible target mon + // so randomly choose a contestant to be the "target" rnd = Random() % (CONTESTANT_COUNT - 1); for (i = 0; i < CONTESTANT_COUNT; i++) { + // Target can't be the attacker if (i != contestant) { if (rnd == 0) @@ -4359,7 +4523,7 @@ static void sub_80DD080(u8 contestant) rnd--; } } - eContestantStatus[contestant].unk1B = i; + eContestantStatus[contestant].contestantAnimTarget = i; } void SetContestantEffectStringID(u8 a, u8 b) @@ -4386,7 +4550,7 @@ void SetStartledString(u8 contestant, u8 jam) SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN); } -static void sub_80DD45C(u8 contestant, u8 stringId) +static void PrintAppealMoveResultText(u8 contestant, u8 stringId) { StringCopy(gStringVar1, gContestMons[contestant].nickname); StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]); @@ -4489,53 +4653,53 @@ static void ApplyNextTurnOrder(void) } } -static void sub_80DD6DC(struct Sprite *sprite) +static void SpriteCB_JudgeSpeechBubble(struct Sprite *sprite) { if (sprite->data[1]++ > 84) { sprite->data[1] = 0; sprite->invisible = TRUE; sprite->callback = SpriteCallbackDummy; - eContest.unk1920A_4 = 0; + eContest.waitForJudgeSpeechBubble = FALSE; } } -static void sub_80DD720(u8 a) +static void DoJudgeSpeechBubble(u8 symbolId) { - u8 spriteId = eContest.unk19216; + u8 spriteId = eContest.judgeSpeechBubbleSpriteId; - switch (a) + switch (symbolId) { - case 0: - case 1: + case JUDGE_SYMBOL_SWIRL: + case JUDGE_SYMBOL_SWIRL_UNUSED: gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0]; PlaySE(SE_HAZURE); break; - case 2: + case JUDGE_SYMBOL_ONE_EXCLAMATION: gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4; PlaySE(SE_SEIKAI); break; - case 3: + case JUDGE_SYMBOL_TWO_EXCLAMATIONS: gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8; PlaySE(SE_SEIKAI); break; - case 4: + case JUDGE_SYMBOL_NUMBER_ONE_UNUSED: // Identical to JUDGE_SYMBOL_NUMBER_ONE gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; PlaySE(SE_TK_WARPIN); break; - case 5: // exactly the same as case 4 + case JUDGE_SYMBOL_NUMBER_ONE: gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; PlaySE(SE_TK_WARPIN); break; - case 6: + case JUDGE_SYMBOL_NUMBER_FOUR: gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16; PlaySE(SE_TK_WARPIN); break; - case 8: + case JUDGE_SYMBOL_STAR: gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24; PlaySE(SE_W215); break; - case 7: + case JUDGE_SYMBOL_QUESTION_MARK: default: gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20; PlaySE(SE_TK_WARPIN); @@ -4543,8 +4707,8 @@ static void sub_80DD720(u8 a) } gSprites[spriteId].data[1] = 0; gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].callback = sub_80DD6DC; - eContest.unk1920A_4 = 1; + gSprites[spriteId].callback = SpriteCB_JudgeSpeechBubble; + eContest.waitForJudgeSpeechBubble = TRUE; } static void UpdateApplauseMeter(void) @@ -4611,15 +4775,15 @@ static void Task_ApplauseOverflowAnimation(u8 taskId) } } -static void StartMoveApplauseMeterOnscreen(void) +static void SlideApplauseMeterIn(void) { - CreateTask(Task_MoveApplauseMeterOnscreen, 10); + CreateTask(Task_SlideApplauseMeterIn, 10); gSprites[eContest.applauseMeterSpriteId].pos2.x = -70; gSprites[eContest.applauseMeterSpriteId].invisible = FALSE; eContest.applauseMeterIsMoving = TRUE; } -static void Task_MoveApplauseMeterOnscreen(u8 taskId) +static void Task_SlideApplauseMeterIn(u8 taskId) { struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId]; @@ -4635,7 +4799,7 @@ static void Task_MoveApplauseMeterOnscreen(u8 taskId) } } -static void TryMoveApplauseMeterOffscreen(void) +static void SlideApplauseMeterOut(void) { if (gSprites[eContest.applauseMeterSpriteId].invisible == TRUE) { @@ -4643,13 +4807,13 @@ static void TryMoveApplauseMeterOffscreen(void) } else { - CreateTask(Task_MoveApplauseMeterOffscreen, 10); + CreateTask(Task_SlideApplauseMeterOut, 10); gSprites[eContest.applauseMeterSpriteId].pos2.x = 0; eContest.applauseMeterIsMoving = TRUE; } } -static void Task_MoveApplauseMeterOffscreen(u8 taskId) +static void Task_SlideApplauseMeterOut(u8 taskId) { struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId]; @@ -4679,7 +4843,7 @@ static void Task_ShowAndUpdateApplauseMeter(u8 taskId) switch (gTasks[taskId].data[10]) { case 0: - StartMoveApplauseMeterOnscreen(); + SlideApplauseMeterIn(); gTasks[taskId].data[10]++; break; case 1: @@ -4713,111 +4877,133 @@ static void ShowApplauseMeterNoAnim(void) gSprites[eContest.applauseMeterSpriteId].invisible = TRUE; } -static void sub_80DDE0C(void) +#define tDelay data[10] +#define tFrame data[11] +#define tCycles data[12] + +static void AnimateAudience(void) { - CreateTask(sub_80DDE30, 15); - eContest.unk1920A_7 = 1; + CreateTask(Task_AnimateAudience, 15); + eContest.animatingAudience = TRUE; } -static void sub_80DDE30(u8 taskId) +static void Task_AnimateAudience(u8 taskId) { - if (gTasks[taskId].data[10]++ > 6) + if (gTasks[taskId].tDelay++ > 6) { - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[11] == 0) + gTasks[taskId].tDelay = 0; + if (gTasks[taskId].tFrame == 0) { - RequestDma3Copy(eUnknownHeap19000, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1); + RequestDma3Copy(eContestAudienceFrame2_Gfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1); } else { - RequestDma3Copy(eUnzippedContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1); - gTasks[taskId].data[12]++; + RequestDma3Copy(eUnzippedContestAudience_Gfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1); + gTasks[taskId].tCycles++; } - gTasks[taskId].data[11] ^= 1; + gTasks[taskId].tFrame ^= 1; - if (gTasks[taskId].data[12] == 9) + if (gTasks[taskId].tCycles == 9) { - eContest.unk1920A_7 = 0; + eContest.animatingAudience = FALSE; DestroyTask(taskId); } } } -#define tBlendColor data[0] -#define tBlendCoeff data[1] +#undef tDelay +#undef tFrame +#undef tCycles -static void sub_80DDED0(s8 a, s8 b) +#define tBlendColor data[0] +#define tBlendCoeff data[1] +#define tBlendDir data[2] +#define tTargetBlendCoeff data[3] +#define tBlendDelay data[10] + +static void BlendAudienceBackground(s8 excitementDir, s8 blendDir) { - u8 taskId = CreateTask(sub_80DDF80, 10); + u8 taskId = CreateTask(Task_BlendAudienceBackground, 10); u16 blendColor; u8 blendCoeff; - u8 r3; + u8 targetBlendCoeff; - if (a > 0) + if (excitementDir > 0) { blendColor = RGB(30, 27, 8); - if (b > 0) + if (blendDir > 0) { + // Blend to yellow (amount depends on applause meter) blendCoeff = 0; - r3 = eContest.applauseLevel * 3; + targetBlendCoeff = eContest.applauseLevel * 3; } else { + // Blend back to original blendCoeff = eContest.applauseLevel * 3; - r3 = 0; + targetBlendCoeff = 0; } } else { - blendColor = 0; - if (b > 0) + blendColor = RGB_BLACK; + if (blendDir > 0) { + // Blend to black blendCoeff = 0; - r3 = 12; + targetBlendCoeff = 12; } else { + // Black back to original blendCoeff = 12; - r3 = 0; + targetBlendCoeff = 0; } } gTasks[taskId].tBlendColor = blendColor; gTasks[taskId].tBlendCoeff = blendCoeff; - gTasks[taskId].data[2] = b; - gTasks[taskId].data[3] = r3; - eContest.unk1920B_0 = 0; + gTasks[taskId].tBlendDir = blendDir; + gTasks[taskId].tTargetBlendCoeff = targetBlendCoeff; + // Because this isn't set to TRUE here, the main task doesn't wait for the color blend + // Unclear if this was intentional or not (perhaps waiting added too much delay). In any case it does nothing now + eContest.waitForAudienceBlend = FALSE; + } -static void sub_80DDF80(u8 taskId) +static void Task_BlendAudienceBackground(u8 taskId) { - if (gTasks[taskId].data[10]++ >= 0) + if (gTasks[taskId].tBlendDelay++ >= 0) { - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[2] > 0) + gTasks[taskId].tBlendDelay = 0; + if (gTasks[taskId].tBlendDir > 0) gTasks[taskId].tBlendCoeff++; else gTasks[taskId].tBlendCoeff--; + BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); - if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3]) + + if (gTasks[taskId].tBlendCoeff == gTasks[taskId].tTargetBlendCoeff) { DestroyTask(taskId); - eContest.unk1920B_0 = 0; + eContest.waitForAudienceBlend = FALSE; } } } #undef tBlendColor #undef tBlendCoeff +#undef tTargetBlendCoeff +#undef tBlendDelay -static void sub_80DE008(bool8 a) +static void ShowHideNextTurnGfx(bool8 show) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestantStatus[i].turnOrderMod != 0 && a) + if (eContestantStatus[i].turnOrderMod != 0 && show) { CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[gContestResources->field_14[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); gSprites[gContestResources->field_14[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]]; @@ -4838,25 +5024,25 @@ static const u8 *GetTurnOrderNumberGfx(u8 contestant) return gContestNextTurnNumbersGfx + eContestantStatus[contestant].nextTurnOrder * 32; } -static void sub_80DE12C(void) +static void DrawUnnervedSymbols(void) { s32 i = 0; for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestResources8.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) { - u32 r6 = gContestantTurnOrder[i] * 5 + 2; - u16 var = sub_80DB748(3); + u32 contestantOffset = gContestantTurnOrder[i] * 5 + 2; + u16 symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_SWIRL); - ContestBG_FillBoxWithIncrementingTile(0, var, 20, r6, 2, 1, 17, 1); - var += 16; - ContestBG_FillBoxWithIncrementingTile(0, var, 20, r6 + 1, 2, 1, 17, 1); + ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset, 2, 1, 17, 1); + symbolOffset += 16; + ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset + 1, 2, 1, 17, 1); PlaySE(SE_C_PASI); } } } -bool8 sub_80DE1E8(u8 contestant) +bool8 IsContestantAllowedToCombo(u8 contestant) { if (eContestantStatus[contestant].repeatedMove || eContestantStatus[contestant].nervous) return FALSE; @@ -4864,7 +5050,7 @@ bool8 sub_80DE1E8(u8 contestant) return TRUE; } -static void sub_80DE224(void) +static void SetBgForCurtainDrop(void) { s32 i; u16 bg0Cnt, bg1Cnt, bg2Cnt; @@ -4902,7 +5088,7 @@ static void sub_80DE224(void) } } -static void sub_80DE350(void) +static void UpdateContestantBoxOrder(void) { s32 i; u16 bg1Cnt; @@ -4928,15 +5114,15 @@ static void sub_80DE350(void) } } -static void sub_80DE424(u8 taskId) +static void Task_StartDropCurtainAtRoundEnd(u8 taskId) { gBattle_BG1_X = 0; gBattle_BG1_Y = DISPLAY_HEIGHT; PlaySE12WithPanning(SE_C_MAKU_D, 0); - gTasks[taskId].func = sub_80DE464; + gTasks[taskId].func = Task_UpdateCurtainDropAtRoundEnd; } -static void sub_80DE464(u8 taskId) +static void Task_UpdateCurtainDropAtRoundEnd(u8 taskId) { if ((s16)(gBattle_BG1_Y -= 7) < 0) gBattle_BG1_Y = 0; @@ -4945,11 +5131,11 @@ static void sub_80DE464(u8 taskId) gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80DE4A8; + gTasks[taskId].func = Task_ResetForNextRound; } } -static void sub_80DE4A8(u8 taskId) +static void Task_ResetForNextRound(u8 taskId) { s32 i; @@ -4960,9 +5146,9 @@ static void sub_80DE4A8(u8 taskId) eContest.prevTurnOrder[i] = gContestantTurnOrder[i]; FillContestantWindowBgs(); sub_80DC864(); - sub_80DB69C(); + DrawConditionStars(); DrawContestantWindows(); - sub_80DE008(TRUE); + ShowHideNextTurnGfx(TRUE); UpdateSliderHeartSpriteYPositions(); gTasks[taskId].data[0] = 1; break; @@ -4971,40 +5157,40 @@ static void sub_80DE4A8(u8 taskId) { u8 taskId2; - eContest.unk1920B_2 = 1; + eContest.waitForLink = TRUE; if (IsPlayerLinkLeader()) - sub_80DBAA0(); + ResetContestantStatuses(); taskId2 = CreateTask(sub_80FCC88, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110); + SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].data[0] = 2; } else { - sub_80DBAA0(); + ResetContestantStatuses(); gTasks[taskId].data[0] = 3; } break; case 2: - if (!eContest.unk1920B_2) + if (!eContest.waitForLink) gTasks[taskId].data[0] = 3; break; case 3: - sub_80DB884(); + DrawStatusSymbols(); SwapMoveDescAndContestTilemaps(); gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80DE5F4; + gTasks[taskId].func = Task_WaitRaiseCurtainAtRoundEnd; break; } } -static void sub_80DE5C0(u8 taskId) +static void Task_UpdateRaiseCurtainAtRoundEnd(u8 taskId) { if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT) - gTasks[taskId].func = sub_80DA4F4; + gTasks[taskId].func = Task_UpdateContestantBoxOrder; } -static void sub_80DE5F4(u8 taskId) +static void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId) { if (gTasks[taskId].data[2] < 10) { @@ -5025,7 +5211,7 @@ static void sub_80DE5F4(u8 taskId) { gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80DE65C; + gTasks[taskId].func = Task_StartRaiseCurtainAtRoundEnd; } else { @@ -5035,7 +5221,7 @@ static void sub_80DE5F4(u8 taskId) } } -static void sub_80DE65C(u8 taskId) +static void Task_StartRaiseCurtainAtRoundEnd(u8 taskId) { if (gTasks[taskId].data[2] < 10) { @@ -5045,7 +5231,7 @@ static void sub_80DE65C(u8 taskId) { gTasks[taskId].data[2] = 0; PlaySE12WithPanning(SE_C_MAKU_U, 0); - gTasks[taskId].func = sub_80DE5C0; + gTasks[taskId].func = Task_UpdateRaiseCurtainAtRoundEnd; } } @@ -5106,14 +5292,14 @@ static u16 SanitizeSpecies(u16 species) return species; } -static void sub_80DE864(u8 a) +static void SetMoveSpecificAnimData(u8 contestant) { s32 i; - u16 move = SanitizeMove(eContestantStatus[a].currMove); - u16 species = SanitizeSpecies(gContestMons[a].species); - u8 r5_2; + u16 move = SanitizeMove(eContestantStatus[contestant].currMove); + u16 species = SanitizeSpecies(gContestMons[contestant].species); + u8 targetContestant; - memset(&gContestResources->field_18->species, 0, 20); + memset(&gContestResources->moveAnim->species, 0, 20); ClearBattleAnimationVars(); for (i = 0; i < CONTESTANT_COUNT; i++) gBattleMonForms[i] = 0; @@ -5127,10 +5313,10 @@ static void sub_80DE864(u8 a) break; case MOVE_TRANSFORM: case MOVE_ROLE_PLAY: - r5_2 = eContestantStatus[a].unk1B; - gContestResources->field_18->unk2 = SanitizeSpecies(gContestMons[r5_2].species); - gContestResources->field_18->unk10 = gContestMons[r5_2].personality; - gContestResources->field_18->unk4_0 = 1; + targetContestant = eContestantStatus[contestant].contestantAnimTarget; + gContestResources->moveAnim->targetSpecies = SanitizeSpecies(gContestMons[targetContestant].species); + gContestResources->moveAnim->targetPersonality = gContestMons[targetContestant].personality; + gContestResources->moveAnim->hasTargetAnim = TRUE; break; case MOVE_RETURN: gAnimFriendship = MAX_FRIENDSHIP; @@ -5142,9 +5328,9 @@ static void sub_80DE864(u8 a) case MOVE_RAZOR_WIND: case MOVE_SKULL_BASH: case MOVE_SKY_ATTACK: - if (eContest.unk1925E == 0) + if (eContest.moveAnimTurnCount == 0) { - eContest.unk1925E = 2; + eContest.moveAnimTurnCount = 2; gAnimMoveTurn = 0; } else @@ -5153,56 +5339,56 @@ static void sub_80DE864(u8 a) } break; } - sub_80DEA5C(); + SetBattleTargetSpritePosition(); } -static void sub_80DE9B0(u8 unused) +static void ClearMoveAnimData(u8 contestant) { - memset(gContestResources->field_18, 0, sizeof(struct ContestStruct_field_18)); - if (eContest.unk1925E != 0) - eContest.unk1925E--; + memset(gContestResources->moveAnim, 0, sizeof(struct ContestMoveAnimData)); + if (eContest.moveAnimTurnCount != 0) + eContest.moveAnimTurnCount--; } -static void sub_80DE9DC(u8 contestant) +static void SetMoveAnimAttackerData(u8 contestant) { - gContestResources->field_18->unk5 = contestant; - gContestResources->field_18->species = SanitizeSpecies(gContestMons[contestant].species); - gContestResources->field_18->unk8 = gContestMons[contestant].personality; - gContestResources->field_18->unkC = gContestMons[contestant].otId; + gContestResources->moveAnim->contestant = contestant; + gContestResources->moveAnim->species = SanitizeSpecies(gContestMons[contestant].species); + gContestResources->moveAnim->personality = gContestMons[contestant].personality; + gContestResources->moveAnim->otId = gContestMons[contestant].otId; } -static void sub_80DEA20(void) +static void CreateInvisibleBattleTargetSprite(void) { - gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + gBattlerSpriteIds[B_POSITION_OPPONENT_RIGHT] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]); - sub_80DEA5C(); + SetBattleTargetSpritePosition(); } -static void sub_80DEA5C(void) +static void SetBattleTargetSpritePosition(void) { - struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]]; + struct Sprite *sprite = &gSprites[gBattlerSpriteIds[B_POSITION_OPPONENT_RIGHT]]; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->pos1.x = GetBattlerSpriteCoord(3, 0); - sprite->pos1.y = GetBattlerSpriteCoord(3, 1); + sprite->pos1.x = GetBattlerSpriteCoord(B_POSITION_OPPONENT_RIGHT, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord(B_POSITION_OPPONENT_RIGHT, BATTLER_COORD_Y); sprite->invisible = TRUE; } -static void SelectContestMoveBankTarget(u16 move) +static void SetMoveTargetPosition(u16 move) { switch (gBattleMoves[move].target) { case MOVE_TARGET_USER_OR_SELECTED: case MOVE_TARGET_USER: - gBattlerTarget = 2; + gBattlerTarget = B_POSITION_PLAYER_RIGHT; break; case MOVE_TARGET_SELECTED: case MOVE_TARGET_RANDOM: case MOVE_TARGET_BOTH: case MOVE_TARGET_FOES_AND_ALLY: default: - gBattlerTarget = 3; + gBattlerTarget = B_POSITION_OPPONENT_RIGHT; break; } } @@ -5430,7 +5616,7 @@ static void sub_80DF080(u8 contestant) s32 i; if (!gContestResources->field_10->excitementFrozen - && gContestResources->field_10->bits_0 > 0 + && gContestResources->field_10->moveExcitement > 0 && !eContestantStatus[contestant].repeatedMove) { gContestResources->field_1c[contestant].unkC |= 1; @@ -5441,14 +5627,14 @@ static void sub_80DF080(u8 contestant) gContestResources->field_1c[contestant].unkC |= 2; if (!gContestResources->field_10->excitementFrozen - && gContestResources->field_10->bits_0 != 0 + && gContestResources->field_10->moveExcitement != 0 && gContestResources->field_10->unk2 == 60) { gContestResources->field_1c[contestant].unkC |= 4; } - if (eContestantStatus[contestant].unk15_6 - && eContestantStatus[contestant].unk16 != 0) + if (eContestantStatus[contestant].usedComboMove + && eContestantStatus[contestant].completedCombo) { gContestResources->field_1c[contestant].unkC |= 8; } @@ -5479,7 +5665,7 @@ static void sub_80DF080(u8 contestant) if (eContest.applauseLevel == 4 && !gContestResources->field_10->excitementFrozen - && gContestResources->field_10->bits_0 < 0) + && gContestResources->field_10->moveExcitement < 0) { gContestResources->field_1c[contestant].unkD |= 0x20; } diff --git a/src/contest_ai.c b/src/contest_ai.c index 7585cac692..45fd761f5f 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -1200,7 +1200,7 @@ static void ContestAICmd_get_used_combo_starter(void) u16 result = FALSE; u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - if (sub_80DE1E8(contestant)) + if (IsContestantAllowedToCombo(contestant)) result = gContestMoves[eContestantStatus[contestant].prevMove].comboStarterId ? TRUE : FALSE; eContestAI.scriptResult = result; diff --git a/src/contest_effect.c b/src/contest_effect.c index 809aecbed0..17384ec901 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -423,7 +423,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) } for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestantStatus[i].hasJudgesAttention && sub_80DE1E8(i)) + if (eContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i)) oddsMod[i] = gComboStarterLookupTable[gContestMoves[eContestantStatus[i].prevMove].comboStarterId] * 10; else oddsMod[i] = 0; diff --git a/src/contest_util.c b/src/contest_util.c index 50845b7072..d8ca6e50d1 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -122,8 +122,8 @@ static void CB2_ShowContestResults(void); static void VBlankCB_ShowContestResults(void); static void Task_SlideContestResultsBg(u8); static void Task_WaitForLinkPartnersBeforeResults(u8); -static void sub_80F5F14(u8); -static void sub_80F5F30(u8); +static void Task_CommunicateMonIdxsForResults(u8); +static void Task_WaitForLinkPartnerMonIdxs(u8); static void Task_AnnouncePreliminaryResults(u8); static void Task_FlashStarsAndHearts(u8); static void Task_ShowPreliminaryResults(u8); @@ -657,17 +657,17 @@ static void Task_WaitForLinkPartnersBeforeResults(u8 taskId) { if (gReceivedRemoteLinkPlayers) { - CreateTask(sub_80F5F14, 0); + CreateTask(Task_CommunicateMonIdxsForResults, 0); gTasks[taskId].func = TaskDummy; } } -static void sub_80F5F14(u8 taskId) +static void Task_CommunicateMonIdxsForResults(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, sub_80F5F30); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_WaitForLinkPartnerMonIdxs); } -static void sub_80F5F30(u8 taskId) +static void Task_WaitForLinkPartnerMonIdxs(u8 taskId) { if (IsLinkTaskFinished()) { From 9f4525666dca0576f7192528faea81b9ad6e2ea5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 15 Aug 2020 14:33:08 -0400 Subject: [PATCH 65/85] Document misc contest --- include/contest.h | 82 ++++----- include/contest_link.h | 2 +- src/contest.c | 260 ++++++++++++++-------------- src/contest_ai.c | 4 +- src/contest_effect.c | 382 ++++++++++++++++++++--------------------- src/contest_link.c | 52 +++--- 6 files changed, 393 insertions(+), 389 deletions(-) diff --git a/include/contest.h b/include/contest.h index c5c674fdc0..208604f4a7 100644 --- a/include/contest.h +++ b/include/contest.h @@ -9,9 +9,9 @@ enum CONTEST_DEBUG_MODE_OFF, // Prints the totalPoints value for each contestant. CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL, - // Prints the ContestResourcesField1C::unk_C value as a bitstring for each contestant. + // Prints the ContestTV::unk_C value as a bitstring for each contestant. CONTEST_DEBUG_MODE_PRINT_UNK_C, - // Prints the ContestResourcesField1C::unk_D value as a bitstring for each contestant. + // Prints the ContestTV::unk_D value as a bitstring for each contestant. CONTEST_DEBUG_MODE_PRINT_UNK_D }; @@ -90,29 +90,29 @@ enum { struct ContestPokemon { - /*0x00*/ u16 species; - /*0x02*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0D*/ u8 trainerName[PLAYER_NAME_LENGTH + 1]; - /*0x15*/ u8 trainerGfxId; - /*0x18*/ u32 aiChecks; - /*0x1C*/ u8 whichRank:2; // 0x1 0x2 - u8 aiPool_Cool:1; // 0x4 - u8 aiPool_Beauty:1; // 0x8 - u8 aiPool_Cute:1; // 0x10 - u8 aiPool_Smart:1; // 0x20 - u8 aiPool_Tough:1; // 0x40 - /*0x1E*/ u16 moves[MAX_MON_MOVES]; // moves - /*0x26*/ u8 cool; // cool - /*0x27*/ u8 beauty; // beauty - /*0x28*/ u8 cute; // cute - /*0x29*/ u8 smart; // smart - /*0x2A*/ u8 tough; // tough - /*0x2B*/ u8 sheen; // sheen + u16 species; + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 trainerName[PLAYER_NAME_LENGTH + 1]; + u8 trainerGfxId; + u32 aiChecks; + u8 whichRank:2; + u8 aiPool_Cool:1; + u8 aiPool_Beauty:1; + u8 aiPool_Cute:1; + u8 aiPool_Smart:1; + u8 aiPool_Tough:1; + u16 moves[MAX_MON_MOVES]; + u8 cool; + u8 beauty; + u8 cute; + u8 smart; + u8 tough; + u8 sheen; u8 highestRank; bool8 gameCleared; - /*0x2C*/ u8 unk2C[10]; - /*0x38*/ u32 personality; // personality - /*0x3C*/ u32 otId; // otId + u8 unk2C[10]; + u32 personality; + u32 otId; }; struct Shared1A004 @@ -210,14 +210,14 @@ struct ContestantStatus bool8 judgesAttentionWasRemoved:1; bool8 usedComboMove:1; bool8 completedCombo; - u8 unk17; + u8 comboAppealBonus; u8 unk18; u8 nextTurnOrder; // turn position u8 attentionLevel; // How much the Pokemon "stood out" u8 contestantAnimTarget; }; -struct UnknownContestStruct7 +struct ContestAppealMoveResults { u8 turnOrder[CONTESTANT_COUNT]; s16 jam; @@ -244,15 +244,15 @@ struct ContestAIInfo /*0x41*/ u8 contestantId; }; -struct UnknownContestStruct5 +struct ContestExcitement { s8 moveExcitement; - u8 excitementFrozen:1; - u8 excitementFreezer:3; - s8 unk2; + u8 frozen:1; + u8 freezer:3; + s8 excitementAppealBonus; }; -struct UnknownContestStruct4 +struct ContestGraphicsState { u8 sliderHeartSpriteId; u8 nextTurnSpriteId; @@ -269,7 +269,7 @@ struct ContestFinalStandings s32 contestant; }; -struct ContestResourcesField1C +struct ContestTV { u16 unk0[5]; s16 unkA; @@ -279,22 +279,22 @@ struct ContestResourcesField1C u8 unkE_2:1; }; -struct ContestResourcesField20 +struct ContestUnused { - u8 filler_00[0x0C]; + u8 filler[12]; }; struct ContestResources { struct Contest *contest; struct ContestantStatus *status; - struct UnknownContestStruct7 *field_8; + struct ContestAppealMoveResults *appealResults; struct ContestAIInfo *aiData; - struct UnknownContestStruct5 *field_10; - struct UnknownContestStruct4 *field_14; + struct ContestExcitement *excitement; + struct ContestGraphicsState *gfxState; struct ContestMoveAnimData *moveAnim; - struct ContestResourcesField1C * field_1c; - struct ContestResourcesField20 * field_20; + struct ContestTV *tv; + struct ContestUnused * unused; u8 * contestBgTilemaps[CONTESTANT_COUNT]; void * boxBlinkTiles1; void * boxBlinkTiles2; @@ -303,10 +303,10 @@ struct ContestResources #define eContest (*gContestResources->contest) #define eContestantStatus (gContestResources->status) -#define eContestResources8 (*gContestResources->field_8) +#define eContestAppealResults (*gContestResources->appealResults) #define eContestAI (*gContestResources->aiData) -#define eContestResources10 (*gContestResources->field_10) -#define eContestResources14 (*gContestResources->field_14) +#define eContestExcitement (*gContestResources->excitement) +#define eContestGfxState (gContestResources->gfxState) #define eUnzippedContestAudience_Gfx (gHeap + 0x18000) #define eContestAudienceFrame2_Gfx (gHeap + 0x19000) #define eContestDebugMode (gHeap[0x1a000]) diff --git a/include/contest_link.h b/include/contest_link.h index 02eb2f11d8..cd26825246 100644 --- a/include/contest_link.h +++ b/include/contest_link.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONTEST_LINK_H #define GUARD_CONTEST_LINK_H -void sub_80FCC88(u8); +void Task_LinkContest_CommunicateAppealsState(u8); void Task_LinkContest_CommunicateFinalStandings(u8); void Task_LinkContest_Init(u8); void Task_LinkContest_CommunicateMonsRS(u8); diff --git a/src/contest.c b/src/contest.c index 743b5fe863..49b408a1a8 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1027,10 +1027,10 @@ static void InitContestResources(void) eContestantStatus[i].effectStringId = CONTEST_STRING_NONE; eContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; } - eContestResources8 = (struct UnknownContestStruct7){}; + eContestAppealResults = (struct ContestAppealMoveResults){}; eContestAI = (struct ContestAIInfo){}; - *gContestResources->field_10 = (struct UnknownContestStruct5){}; - memset(gContestResources->field_14, 0, CONTESTANT_COUNT * sizeof(struct UnknownContestStruct4)); + *gContestResources->excitement = (struct ContestExcitement){}; + memset(eContestGfxState, 0, CONTESTANT_COUNT * sizeof(struct ContestGraphicsState)); if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)) SortContestants(FALSE); @@ -1043,7 +1043,7 @@ static void InitContestResources(void) // Calling this here while all the nextTurnOrder values are 0xFF will actually // just reverse the turn order. ApplyNextTurnOrder(); - memset(gContestResources->field_1c, 0, sizeof(*gContestResources->field_1c) * CONTESTANT_COUNT); + memset(gContestResources->tv, 0, sizeof(*gContestResources->tv) * CONTESTANT_COUNT); } static void AllocContestResources(void) @@ -1051,13 +1051,13 @@ static void AllocContestResources(void) gContestResources = AllocZeroed(sizeof(struct ContestResources)); gContestResources->contest = AllocZeroed(sizeof(struct Contest)); gContestResources->status = AllocZeroed(sizeof(struct ContestantStatus) * CONTESTANT_COUNT); - gContestResources->field_8 = AllocZeroed(sizeof(struct UnknownContestStruct7)); + gContestResources->appealResults = AllocZeroed(sizeof(struct ContestAppealMoveResults)); gContestResources->aiData = AllocZeroed(sizeof(struct ContestAIInfo)); - gContestResources->field_10 = AllocZeroed(sizeof(struct UnknownContestStruct5) * CONTESTANT_COUNT); - gContestResources->field_14 = AllocZeroed(sizeof(struct UnknownContestStruct4) * CONTESTANT_COUNT); + gContestResources->excitement = AllocZeroed(sizeof(struct ContestExcitement) * CONTESTANT_COUNT); + gContestResources->gfxState = AllocZeroed(sizeof(struct ContestGraphicsState) * CONTESTANT_COUNT); gContestResources->moveAnim = AllocZeroed(sizeof(struct ContestMoveAnimData)); - gContestResources->field_1c = AllocZeroed(sizeof(struct ContestResourcesField1C) * CONTESTANT_COUNT); - gContestResources->field_20 = AllocZeroed(sizeof(struct ContestResourcesField20)); + gContestResources->tv = AllocZeroed(sizeof(struct ContestTV) * CONTESTANT_COUNT); + gContestResources->unused = AllocZeroed(sizeof(struct ContestUnused)); gContestResources->contestBgTilemaps[0] = AllocZeroed(0x1000); gContestResources->contestBgTilemaps[1] = AllocZeroed(0x1000); gContestResources->contestBgTilemaps[2] = AllocZeroed(0x1000); @@ -1073,13 +1073,13 @@ static void FreeContestResources(void) { FREE_AND_SET_NULL(gContestResources->contest); FREE_AND_SET_NULL(gContestResources->status); - FREE_AND_SET_NULL(gContestResources->field_8); + FREE_AND_SET_NULL(gContestResources->appealResults); FREE_AND_SET_NULL(gContestResources->aiData); - FREE_AND_SET_NULL(gContestResources->field_10); - FREE_AND_SET_NULL(gContestResources->field_14); + FREE_AND_SET_NULL(gContestResources->excitement); + FREE_AND_SET_NULL(gContestResources->gfxState); FREE_AND_SET_NULL(gContestResources->moveAnim); - FREE_AND_SET_NULL(gContestResources->field_1c); - FREE_AND_SET_NULL(gContestResources->field_20); + FREE_AND_SET_NULL(gContestResources->tv); + FREE_AND_SET_NULL(gContestResources->unused); FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[0]); FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[1]); FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[2]); @@ -1724,7 +1724,7 @@ static void Task_DoAppeals(u8 taskId) { case APPEALSTATE_START_TURN: ContestDebugDoPrint(); - for (i = 0; eContest.turnNumber != gContestResources->field_8->turnOrder[i]; i++) + for (i = 0; eContest.turnNumber != eContestAppealResults.turnOrder[i]; i++) ; eContest.currentContestant = i; contestant = eContest.currentContestant; @@ -1735,8 +1735,8 @@ static void Task_DoAppeals(u8 taskId) eContest.waitForLink = TRUE; if (IsPlayerLinkLeader()) CalculateAppealMoveImpact(eContest.currentContestant); - taskId2 = CreateTask(sub_80FCC88, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, Task_EndWaitForLink); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].tState = APPEALSTATE_1; } @@ -1787,7 +1787,7 @@ static void Task_DoAppeals(u8 taskId) if (gSprites[spriteId].callback == SpriteCallbackDummy) { // Once mon has slid in, also wait for box to finish blinking - if (!gContestResources->field_14[contestant].boxBlinking) + if (!eContestGfxState[contestant].boxBlinking) gTasks[taskId].tState = APPEALSTATE_PRINT_USED_MOVE_MSG; } return; @@ -1923,7 +1923,7 @@ static void Task_DoAppeals(u8 taskId) gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_HEARTS; return; case APPEALSTATE_WAIT_MOVE_USERS_HEARTS: - if (!gContestResources->field_14[eContest.currentContestant].updatingAppealHearts) + if (!eContestGfxState[eContest.currentContestant].updatingAppealHearts) gTasks[taskId].tState = APPEALSTATE_TRY_JUDGE_STAR; return; case APPEALSTATE_TRY_JUDGE_STAR: @@ -2016,7 +2016,7 @@ static void Task_DoAppeals(u8 taskId) case APPEALSTATE_WAIT_OPPONENT_HEARTS: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (!gContestResources->field_14[i].updatingAppealHearts) + if (!eContestGfxState[i].updatingAppealHearts) gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STARS; return; case APPEALSTATE_UPDATE_OPPONENT_STARS: @@ -2132,16 +2132,16 @@ static void Task_DoAppeals(u8 taskId) { UpdateAppealHearts( eContestantStatus[contestant].appeal2, - eContestantStatus[contestant].unk17, + eContestantStatus[contestant].comboAppealBonus, contestant); - eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].unk17; + eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].comboAppealBonus; } gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_COMBO; } } return; case APPEALSTATE_WAIT_HEARTS_FROM_COMBO: - if (!gContestResources->field_14[contestant].updatingAppealHearts) + if (!eContestGfxState[contestant].updatingAppealHearts) { gTasks[taskId].tCounter = 0; gTasks[taskId].tState = APPEALSTATE_CHECK_REPEATED_MOVE; @@ -2177,7 +2177,7 @@ static void Task_DoAppeals(u8 taskId) return; case APPEALSTATE_WAIT_HEARTS_FROM_REPEAT: ContestDebugDoPrint(); - if (!gContestResources->field_14[contestant].updatingAppealHearts) + if (!eContestGfxState[contestant].updatingAppealHearts) { gTasks[taskId].tCounter = 0; ContestClearGeneralTextWindow(); @@ -2185,13 +2185,13 @@ static void Task_DoAppeals(u8 taskId) } return; case APPEALSTATE_UPDATE_CROWD: - if (gContestResources->field_10->excitementFrozen && contestant != gContestResources->field_10->excitementFreezer) + if (eContestExcitement.frozen && contestant != eContestExcitement.freezer) { gTasks[taskId].tState = APPEALSTATE_PRINT_CROWD_WATCHES_MSG; } else { - r3 = gContestResources->field_10->moveExcitement; // Can't get this to use local variable. Should be "moveExcitement" + r3 = eContestExcitement.moveExcitement; // Can't get this to use local variable. Should be "moveExcitement" if (eContestantStatus[contestant].overrideCategoryExcitementMod) { r3 = 1; @@ -2293,14 +2293,14 @@ static void Task_DoAppeals(u8 taskId) if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - UpdateAppealHearts(eContestantStatus[contestant].appeal2, gContestResources->field_10->unk2, contestant); - eContestantStatus[contestant].appeal2 += gContestResources->field_10->unk2; + UpdateAppealHearts(eContestantStatus[contestant].appeal2, eContestExcitement.excitementAppealBonus, contestant); + eContestantStatus[contestant].appeal2 += eContestExcitement.excitementAppealBonus; gTasks[taskId].tCounter++; } } break; case 3: - if (!gContestResources->field_14[contestant].updatingAppealHearts) + if (!eContestGfxState[contestant].updatingAppealHearts) { if (!eContest.animatingAudience) { @@ -2320,7 +2320,7 @@ static void Task_DoAppeals(u8 taskId) } return; case APPEALSTATE_WAIT_EXCITEMENT_HEARTS: - if (!gContestResources->field_14[contestant].updatingAppealHearts) + if (!eContestGfxState[contestant].updatingAppealHearts) { ContestClearGeneralTextWindow(); gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT; @@ -2328,7 +2328,7 @@ static void Task_DoAppeals(u8 taskId) return; case APPEALSTATE_PRINT_CROWD_WATCHES_MSG: ContestClearGeneralTextWindow(); - StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname); + StringCopy(gStringVar3, gContestMons[eContestExcitement.freezer].nickname); StringCopy(gStringVar1, gContestMons[contestant].nickname); StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]); StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon); @@ -2479,8 +2479,8 @@ static void Task_FinishRoundOfAppeals(u8 taskId) RankContestants(); SetAttentionLevels(); } - taskId2 = CreateTask(sub_80FCC88, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, Task_EndWaitForLink); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].data[0] = 1; } @@ -3526,7 +3526,7 @@ static void ResetContestantStatuses(void) eContest.excitementHistory[eContest.appealNumber][i] = Contest_GetMoveExcitement(eContestantStatus[i].currMove); eContestantStatus[i].currMove = MOVE_NONE; } - eContestResources10.excitementFrozen = 0; + eContestExcitement.frozen = FALSE; } bool8 Contest_IsMonsTurnDisabled(u8 contestant) @@ -3702,16 +3702,16 @@ static s8 GetNumHeartsFromAppealPoints(s16 appeal) #define tContestant data[3] #define tDelayTimer data[10] -static u8 UpdateAppealHearts(s16 startAppeal, s16 endAppeal, u8 contestant) +static u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant) { u8 taskId; s8 startHearts; s8 heartsDelta; - gContestResources->field_14[contestant].updatingAppealHearts = TRUE; + eContestGfxState[contestant].updatingAppealHearts = TRUE; taskId = CreateTask(Task_UpdateAppealHearts, 20); startHearts = GetNumHeartsFromAppealPoints(startAppeal); - heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + endAppeal) - startHearts; + heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + appealDelta) - startHearts; GetAppealHeartTileOffset(contestant); // unused return value gTasks[taskId].tNumHearts = abs(startHearts); gTasks[taskId].tHeartsDelta = heartsDelta; @@ -3741,7 +3741,7 @@ static void Task_UpdateAppealHearts(u8 taskId) { // No more hearts to add/remove, end DestroyTask(taskId); - gContestResources->field_14[contestant].updatingAppealHearts = FALSE; + eContestGfxState[contestant].updatingAppealHearts = FALSE; return; } else if (startHearts == 0) @@ -3834,7 +3834,7 @@ static void CreateSliderHeartSprites(void) { u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]]; - gContestResources->field_14[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1); + eContestGfxState[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1); } } @@ -3847,8 +3847,8 @@ static void UpdateHeartSlider(u8 contestant) u8 spriteId; s16 slideTarget; - gContestResources->field_14[contestant].sliderUpdating = TRUE; - spriteId = gContestResources->field_14[contestant].sliderHeartSpriteId; + eContestGfxState[contestant].sliderUpdating = TRUE; + spriteId = eContestGfxState[contestant].sliderHeartSpriteId; slideTarget = eContestantStatus[contestant].pointTotal / 10 * 2; if (slideTarget > 56) slideTarget = 56; @@ -3878,7 +3878,7 @@ static bool8 SlidersDoneUpdating(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - if (gContestResources->field_14[i].sliderUpdating) + if (eContestGfxState[i].sliderUpdating) break; } if (i == CONTESTANT_COUNT) @@ -3891,7 +3891,7 @@ static void SpriteCB_UpdateHeartSlider(struct Sprite *sprite) { if (sprite->pos2.x == sprite->sTargetX) { - gContestResources->field_14[sprite->sContestant].sliderUpdating = FALSE; + eContestGfxState[sprite->sContestant].sliderUpdating = FALSE; sprite->callback = SpriteCallbackDummy; } else @@ -3910,7 +3910,7 @@ static void UpdateSliderHeartSpriteYPositions(void) s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]]; + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]]; } // Used to hide (or subsequently reshow) the bottom two slider hearts that get hidden by text windows by moving them offscreen @@ -3924,9 +3924,9 @@ static void SetBottomSliderHeartsInvisibility(bool8 invisible) if (gContestantTurnOrder[i] > 1) { if (!invisible) - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].pos1.x = 180; + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 180; else - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].pos1.x = 256; + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 256; } } } @@ -3939,12 +3939,12 @@ static void CreateNextTurnSprites(void) for (i = 0; i < CONTESTANT_COUNT; i++) { LoadCompressedSpriteSheet(&sSpriteSheet_NextTurn[i]); - gContestResources->field_14[i].nextTurnSpriteId = CreateSprite(&sSpriteTemplates_NextTurn[i], + eContestGfxState[i].nextTurnSpriteId = CreateSprite(&sSpriteTemplates_NextTurn[i], 204, sNextTurnSpriteYPositions[gContestantTurnOrder[i]], 0); - SetSubspriteTables(&gSprites[gContestResources->field_14[i].nextTurnSpriteId], sSubspriteTable_NextTurn); - gSprites[gContestResources->field_14[i].nextTurnSpriteId].invisible = TRUE; + SetSubspriteTables(&gSprites[eContestGfxState[i].nextTurnSpriteId], sSubspriteTable_NextTurn); + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE; } } @@ -4174,7 +4174,7 @@ static void BlinkContestantBox(u8 spriteId, bool8 b) u8 spriteId2; SetBlendForContestantBoxBlink(); - gContestResources->field_14[gSprites[spriteId].data[1]].boxBlinking = TRUE; + eContestGfxState[gSprites[spriteId].data[1]].boxBlinking = TRUE; spriteId2 = gSprites[spriteId].data[0]; StartSpriteAffineAnim(&gSprites[spriteId], 1); StartSpriteAffineAnim(&gSprites[spriteId2], 1); @@ -4203,7 +4203,7 @@ static void SpriteCB_BlinkContestantBox(struct Sprite *sprite) static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite) { - gContestResources->field_14[sprite->data[1]].boxBlinking = FALSE; + eContestGfxState[sprite->data[1]].boxBlinking = FALSE; DestroyContestantBoxBlinkSprites(sprite->data[0]); ResetBlendForContestantBoxBlink(); } @@ -4435,14 +4435,14 @@ static void CalculateAppealMoveImpact(u8 contestant) } eContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal; eContestantStatus[contestant].appeal2 = eContestantStatus[contestant].appeal1; - eContestResources8.jam = gContestEffects[effect].jam; - eContestResources8.jam2 = eContestResources8.jam; + eContestAppealResults.jam = gContestEffects[effect].jam; + eContestAppealResults.jam2 = eContestAppealResults.jam; - eContestResources8.contestant = contestant; + eContestAppealResults.contestant = contestant; for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].jam = 0; - eContestResources8.unnervedPokes[i] = 0; + eContestAppealResults.unnervedPokes[i] = 0; } if (eContestantStatus[contestant].hasJudgesAttention @@ -4469,7 +4469,7 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].completedCombo = completedCombo; eContestantStatus[contestant].usedComboMove = TRUE; eContestantStatus[contestant].hasJudgesAttention = FALSE; - eContestantStatus[contestant].unk17 = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].completedCombo; + eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].unk15_3 = TRUE; } else @@ -4494,20 +4494,20 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].appeal2 = 0; eContestantStatus[contestant].appeal1 = 0; } - eContestResources10.moveExcitement = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove); + eContestExcitement.moveExcitement = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove); if (eContestantStatus[contestant].overrideCategoryExcitementMod) - eContestResources10.moveExcitement = 1; + eContestExcitement.moveExcitement = 1; - if (eContestResources10.moveExcitement > 0) + if (eContestExcitement.moveExcitement > 0) { - if (eContest.applauseLevel + eContestResources10.moveExcitement > 4) - eContestResources10.unk2 = 60; + if (eContest.applauseLevel + eContestExcitement.moveExcitement > 4) + eContestExcitement.excitementAppealBonus = 60; else - eContestResources10.unk2 = 10; + eContestExcitement.excitementAppealBonus = 10; } else { - eContestResources10.unk2 = 0; + eContestExcitement.excitementAppealBonus = 0; } // Transform and Role Play require a visible target mon @@ -4554,13 +4554,13 @@ static void PrintAppealMoveResultText(u8 contestant, u8 stringId) { StringCopy(gStringVar1, gContestMons[contestant].nickname); StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]); - if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL) + if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL) StringCopy(gStringVar3, gText_Contest_Shyness); - else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY) + else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY) StringCopy(gStringVar3, gText_Contest_Anxiety); - else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE) + else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE) StringCopy(gStringVar3, gText_Contest_Laziness); - else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART) + else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART) StringCopy(gStringVar3, gText_Contest_Hesitancy); else StringCopy(gStringVar3, gText_Contest_Fear); @@ -4646,7 +4646,7 @@ static void ApplyNextTurnOrder(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - eContestResources8.turnOrder[i] = newTurnOrder[i]; + eContestAppealResults.turnOrder[i] = newTurnOrder[i]; eContestantStatus[i].nextTurnOrder = 0xFF; eContestantStatus[i].turnOrderMod = 0; gContestantTurnOrder[i] = newTurnOrder[i]; @@ -5005,13 +5005,13 @@ static void ShowHideNextTurnGfx(bool8 show) { if (eContestantStatus[i].turnOrderMod != 0 && show) { - CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[gContestResources->field_14[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); - gSprites[gContestResources->field_14[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]]; - gSprites[gContestResources->field_14[i].nextTurnSpriteId].invisible = FALSE; + CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); + gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]]; + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE; } else { - gSprites[gContestResources->field_14[i].nextTurnSpriteId].invisible = TRUE; + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE; } } } @@ -5029,7 +5029,7 @@ static void DrawUnnervedSymbols(void) s32 i = 0; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) + if (eContestAppealResults.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) { u32 contestantOffset = gContestantTurnOrder[i] * 5 + 2; u16 symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_SWIRL); @@ -5083,8 +5083,8 @@ static void SetBgForCurtainDrop(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.priority = 1; - gSprites[gContestResources->field_14[i].nextTurnSpriteId].oam.priority = 1; + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 1; + gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 1; } } @@ -5109,8 +5109,8 @@ static void UpdateContestantBoxOrder(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.priority = 0; - gSprites[gContestResources->field_14[i].nextTurnSpriteId].oam.priority = 0; + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 0; + gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 0; } } @@ -5160,8 +5160,8 @@ static void Task_ResetForNextRound(u8 taskId) eContest.waitForLink = TRUE; if (IsPlayerLinkLeader()) ResetContestantStatuses(); - taskId2 = CreateTask(sub_80FCC88, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, Task_EndWaitForLink); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); gTasks[taskId].data[0] = 2; } @@ -5244,13 +5244,13 @@ static void AnimateSliderHearts(u8 animId) for (i = 0; i < CONTESTANT_COUNT; i++) { - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix(); - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - StartSpriteAffineAnim(&gSprites[gContestResources->field_14[i].sliderHeartSpriteId], animId); + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix(); + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + StartSpriteAffineAnim(&gSprites[eContestGfxState[i].sliderHeartSpriteId], animId); if (animId == SLIDER_HEART_ANIM_APPEAR) { - AnimateSprite(&gSprites[gContestResources->field_14[i].sliderHeartSpriteId]); - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].invisible = FALSE; + AnimateSprite(&gSprites[eContestGfxState[i].sliderHeartSpriteId]); + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = FALSE; } } taskId = CreateTask(Task_WaitForSliderHeartAnim, 5); @@ -5262,15 +5262,15 @@ static void Task_WaitForSliderHeartAnim(u8 taskId) { s32 i; - if (gSprites[gContestResources->field_14[0].sliderHeartSpriteId].affineAnimEnded) + if (gSprites[eContestGfxState[0].sliderHeartSpriteId].affineAnimEnded) { if ((u8)gTasks[taskId].tAnimId == SLIDER_HEART_ANIM_DISAPPEAR) { for (i = 0; i < CONTESTANT_COUNT; i++) - gSprites[gContestResources->field_14[i].sliderHeartSpriteId].invisible = TRUE; + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = TRUE; } for (i = 0; i < CONTESTANT_COUNT; i++) - FreeSpriteOamMatrix(&gSprites[gContestResources->field_14[i].sliderHeartSpriteId]); + FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].sliderHeartSpriteId]); eContest.sliderHeartsAnimating = FALSE; DestroyTask(taskId); } @@ -5615,59 +5615,59 @@ static void sub_80DF080(u8 contestant) { s32 i; - if (!gContestResources->field_10->excitementFrozen - && gContestResources->field_10->moveExcitement > 0 + if (!eContestExcitement.frozen + && eContestExcitement.moveExcitement > 0 && !eContestantStatus[contestant].repeatedMove) { - gContestResources->field_1c[contestant].unkC |= 1; - gContestResources->field_1c[contestant].unkE_2 = 1; + gContestResources->tv[contestant].unkC |= 1; + gContestResources->tv[contestant].unkE_2 = 1; } if (eContestantStatus[contestant].nervous) - gContestResources->field_1c[contestant].unkC |= 2; + gContestResources->tv[contestant].unkC |= 2; - if (!gContestResources->field_10->excitementFrozen - && gContestResources->field_10->moveExcitement != 0 - && gContestResources->field_10->unk2 == 60) + if (!eContestExcitement.frozen + && eContestExcitement.moveExcitement != 0 + && eContestExcitement.excitementAppealBonus == 60) { - gContestResources->field_1c[contestant].unkC |= 4; + gContestResources->tv[contestant].unkC |= 4; } if (eContestantStatus[contestant].usedComboMove && eContestantStatus[contestant].completedCombo) { - gContestResources->field_1c[contestant].unkC |= 8; + gContestResources->tv[contestant].unkC |= 8; } for (i = 0; i < CONTESTANT_COUNT; i++) { if (i != contestant && eContestantStatus[i].jam != 0) { - gContestResources->field_1c[contestant].unkC |= 0x10; - gContestResources->field_1c[i].unkC |= 0x40; + gContestResources->tv[contestant].unkC |= 0x10; + gContestResources->tv[i].unkC |= 0x40; } } if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) { - gContestResources->field_1c[contestant].unkC |= 0x20; + gContestResources->tv[contestant].unkC |= 0x20; } else if (!eContestantStatus[contestant].nervous) { - gContestResources->field_1c[contestant].unkC |= 0x80; - gContestResources->field_1c[contestant].unkE_1 = 1; - gContestResources->field_1c[contestant].unk0[eContest.appealNumber] = eContestantStatus[contestant].currMove; + gContestResources->tv[contestant].unkC |= 0x80; + gContestResources->tv[contestant].unkE_1 = 1; + gContestResources->tv[contestant].unk0[eContest.appealNumber] = eContestantStatus[contestant].currMove; } if (eContestantStatus[contestant].repeatedMove) - gContestResources->field_1c[contestant].unkD |= 2; + gContestResources->tv[contestant].unkD |= 2; if (eContest.applauseLevel == 4 - && !gContestResources->field_10->excitementFrozen - && gContestResources->field_10->moveExcitement < 0) + && !eContestExcitement.frozen + && eContestExcitement.moveExcitement < 0) { - gContestResources->field_1c[contestant].unkD |= 0x20; + gContestResources->tv[contestant].unkD |= 0x20; } } @@ -5694,14 +5694,14 @@ static void sub_80DF250(void) r1 = i; } - gContestResources->field_1c[r1].unkD |= 1; + gContestResources->tv[r1].unkD |= 1; for (i = 0; i < CONTESTANT_COUNT; i++) { if (i != var_38 && gContestMonTotalPoints[var_38] - gContestMonTotalPoints[i] <= 50) - gContestResources->field_1c[i].unkD |= 4; + gContestResources->tv[i].unkD |= 4; - if (!gContestResources->field_1c[i].unkE_2) - gContestResources->field_1c[i].unkD |= 8; + if (!gContestResources->tv[i].unkE_2) + gContestResources->tv[i].unkD |= 8; for (j = 0; j < CONTESTANT_COUNT; j++) { @@ -5709,7 +5709,7 @@ static void sub_80DF250(void) break; } if (j == 4 && gContestFinalStandings[i] != 0) - gContestResources->field_1c[i].unkD |= 0x10; + gContestResources->tv[i].unkD |= 0x10; r12 = FALSE; r8 = FALSE; @@ -5721,10 +5721,10 @@ static void sub_80DF250(void) r8 = TRUE; } if (!r12 && !r8) - gContestResources->field_1c[i].unkD |= 0x40; + gContestResources->tv[i].unkD |= 0x40; - if (!gContestResources->field_1c[i].unkE_1) - gContestResources->field_1c[i].unkD |= 0x80; + if (!gContestResources->tv[i].unkE_1) + gContestResources->tv[i].unkD |= 0x80; } for (i = 0; i < 5; i++) @@ -5737,15 +5737,15 @@ static void sub_80DF250(void) for (i = 0; i < 5; i++) { - if (gContestResources->field_1c[var_38].unk0[i] != 0) + if (gContestResources->tv[var_38].unk0[i] != 0) { for (j = 0; j < 5; j++) { - if (gContestResources->field_1c[var_38].unk0[i] != sp0[j]) + if (gContestResources->tv[var_38].unk0[i] != sp0[j]) { if (sp0[j] == 0) { - sp0[j] = gContestResources->field_1c[var_38].unk0[i]; + sp0[j] = gContestResources->tv[var_38].unk0[i]; spC[j]++; } } @@ -5775,7 +5775,7 @@ static void sub_80DF250(void) } } - gContestResources->field_1c[var_38].unkA = sp14[Random() % count]; + gContestResources->tv[var_38].unkA = sp14[Random() % count]; } static void sub_80DF4F8(void) @@ -5812,7 +5812,7 @@ static void sub_80DF4F8(void) r10++; } - bits = gContestResources->field_1c[r7].unkC; + bits = gContestResources->tv[r7].unkC; count = 0; for (i = 0; i < 8; bits >>= 1, i++) { @@ -5821,7 +5821,7 @@ static void sub_80DF4F8(void) } r5 = Random() % count; - bits = gContestResources->field_1c[r7].unkC; + bits = gContestResources->tv[r7].unkC; count = 0; r2 = 0; for (i = 0; i < 8; bits >>= 1, r2++, i++) @@ -5837,13 +5837,13 @@ static void sub_80DF4F8(void) if (r7 == 0) { sp0[0] = 1; - r4 = gContestResources->field_1c[1].unkD; + r4 = gContestResources->tv[1].unkD; i = 2; } else { sp0[0] = 0; - r4 = gContestResources->field_1c[0].unkD; + r4 = gContestResources->tv[0].unkD; i = 1; } @@ -5852,13 +5852,13 @@ static void sub_80DF4F8(void) { if (i != r7) { - if (r4 < gContestResources->field_1c[i].unkD) + if (r4 < gContestResources->tv[i].unkD) { sp0[0] = i; - r4 = gContestResources->field_1c[i].unkD; + r4 = gContestResources->tv[i].unkD; r5 = 1; } - else if (r4 == gContestResources->field_1c[i].unkD) + else if (r4 == gContestResources->tv[i].unkD) { sp0[r5] = i; r5++; @@ -5870,7 +5870,7 @@ static void sub_80DF4F8(void) r2 = 0x80; for (i = 0; i < 8; r2 >>= 1, i++) { - r4 = gContestResources->field_1c[r6].unkD & r2; + r4 = gContestResources->tv[r6].unkD & r2; if (r4) break; } @@ -5878,7 +5878,7 @@ static void sub_80DF4F8(void) ContestLiveUpdates_BeforeInterview_1(r9); ContestLiveUpdates_BeforeInterview_2(r10); ContestLiveUpdates_BeforeInterview_3(var); - ContestLiveUpdates_BeforeInterview_4(gContestResources->field_1c[r7].unkA); + ContestLiveUpdates_BeforeInterview_4(gContestResources->tv[r7].unkA); ContestLiveUpdates_BeforeInterview_5(r4, r6); } @@ -5932,7 +5932,7 @@ static void ContestDebugPrintBitStrings(void) { txtPtr = StringCopy(text1, gText_CDot); Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1, 5, 1, 7); - bits = gContestResources->field_1c[i].unkC; + bits = gContestResources->tv[i].unkC; for (j = 7; j > -1; j--) // Weird loop. { txtPtr = ConvertIntToDecimalStringN(txtPtr, bits & 1, STR_CONV_MODE_LEFT_ALIGN, 1); @@ -5952,7 +5952,7 @@ static void ContestDebugPrintBitStrings(void) for (i = 0; i < CONTESTANT_COUNT; i++) { StringCopy(text1, gText_BDot); - bits = gContestResources->field_1c[i].unkD; + bits = gContestResources->tv[i].unkD; txtPtr = &text1[2]; for (j = 7; j > -1; j--) // Weird loop. { diff --git a/src/contest_ai.c b/src/contest_ai.c index 45fd761f5f..b5e91c3149 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -384,7 +384,7 @@ static u8 GetContestantIdByTurn(u8 turn) int i; for (i = 0; i < CONTESTANT_COUNT; i++) - if (eContestResources8.turnOrder[i] == turn) + if (eContestAppealResults.turnOrder[i] == turn) break; return i; @@ -498,7 +498,7 @@ static void ContestAICmd_if_excitement_not_eq(void) static void ContestAICmd_get_user_order(void) { - eContestAI.scriptResult = eContestResources8.turnOrder[eContestAI.contestantId]; + eContestAI.scriptResult = eContestAppealResults.turnOrder[eContestAI.contestantId]; gAIScriptPtr += 1; } diff --git a/src/contest_effect.c b/src/contest_effect.c index 17384ec901..cba9b97450 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -82,98 +82,98 @@ static void ContestEffect_HighlyAppealing(void) // After this move, the user is more easily startled. static void ContestEffect_UserMoreEasilyStartled(void) { - eContestantStatus[eContestResources8.contestant].moreEasilyStartled = TRUE; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MORE_CONSCIOUS); + eContestantStatus[eContestAppealResults.contestant].moreEasilyStartled = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MORE_CONSCIOUS); } // Makes a great appeal, but allows no more to the end. static void ContestEffect_GreatAppealButNoMoreMoves(void) { - eContestantStatus[eContestResources8.contestant].exploded = TRUE; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NO_APPEAL); + eContestantStatus[eContestAppealResults.contestant].exploded = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_APPEAL); } // Can be used repeatedly without boring the JUDGE. static void ContestEffect_RepetitionNotBoring(void) { - eContestantStatus[eContestResources8.contestant].usedRepeatableMove = TRUE; - eContestantStatus[eContestResources8.contestant].repeatedMove = FALSE; - eContestantStatus[eContestResources8.contestant].moveRepeatCount = 0; + eContestantStatus[eContestAppealResults.contestant].usedRepeatableMove = TRUE; + eContestantStatus[eContestAppealResults.contestant].repeatedMove = FALSE; + eContestantStatus[eContestAppealResults.contestant].moveRepeatCount = 0; } // Can avoid being startled by others once. static void ContestEffect_AvoidStartleOnce(void) { - eContestantStatus[eContestResources8.contestant].jamSafetyCount = 1; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SETTLE_DOWN); + eContestantStatus[eContestAppealResults.contestant].jamSafetyCount = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SETTLE_DOWN); } // Can avoid being startled by others. static void ContestEffect_AvoidStartle(void) { - eContestantStatus[eContestResources8.contestant].immune = TRUE; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS); + eContestantStatus[eContestAppealResults.contestant].immune = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS); } // Can avoid being startled by others a little. static void ContestEffect_AvoidStartleSlightly(void) { - eContestantStatus[eContestResources8.contestant].jamReduction = 20; - SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_LESS_AWARE); + eContestantStatus[eContestAppealResults.contestant].jamReduction = 20; + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_LESS_AWARE); } // After this move, the user is less likely to be startled. static void ContestEffect_UserLessEasilyStartled(void) { - eContestantStatus[eContestResources8.contestant].resistant = TRUE; - SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_STOPPED_CARING); + eContestantStatus[eContestAppealResults.contestant].resistant = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING); } // Slightly startles the POKéMON in front. static void ContestEffect_StartleFrontMon(void) { u8 idx = 0; - u8 a = eContestResources8.contestant; + u8 a = eContestAppealResults.contestant; - if (eContestResources8.turnOrder[a] != 0) { + if (eContestAppealResults.turnOrder[a] != 0) { int i; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[a] - 1 == eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[a] - 1 == eContestAppealResults.turnOrder[i]) break; } - eContestResources8.jamQueue[0] = i; - eContestResources8.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Slightly startles those that have made appeals. static void ContestEffect_StartlePrevMons(void) { u8 idx = 0; - u8 contestant = eContestResources8.contestant; + u8 contestant = eContestAppealResults.contestant; - if (eContestResources8.turnOrder[contestant] != 0) + if (eContestAppealResults.turnOrder[contestant] != 0) { int i, j; for (i = 0, j = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i]) - eContestResources8.jamQueue[j++] = i; + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i]) + eContestAppealResults.jamQueue[j++] = i; } - eContestResources8.jamQueue[j] = 0xFF; + eContestAppealResults.jamQueue[j] = 0xFF; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Startles the POKéMON that appealed before the user. @@ -189,7 +189,7 @@ static void ContestEffect_StartlePrevMon2(void) else jam = 60; - eContestResources8.jam = jam; + eContestAppealResults.jam = jam; ContestEffect_StartleFrontMon(); } @@ -197,8 +197,8 @@ static void ContestEffect_StartlePrevMon2(void) static void ContestEffect_StartlePrevMons2(void) { u8 numStartled = 0; - u8 contestant = eContestResources8.contestant; - u8 turnOrder = eContestResources8.turnOrder[contestant]; + u8 contestant = eContestAppealResults.contestant; + u8 turnOrder = eContestAppealResults.turnOrder[contestant]; if (turnOrder != 0) { @@ -206,12 +206,12 @@ static void ContestEffect_StartlePrevMons2(void) for (i = 0; i < 4; i++) { - if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i]) { u8 rval, jam; - eContestResources8.jamQueue[0] = i; - eContestResources8.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; rval = Random() % 10; if (rval == 0) @@ -227,31 +227,31 @@ static void ContestEffect_StartlePrevMons2(void) else jam = 60; - eContestResources8.jam = jam; + eContestAppealResults.jam = jam; if (WasAtLeastOneOpponentJammed()) numStartled++; } } } - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); if (numStartled == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Shifts the JUDGE's attention from others. static void ContestEffect_ShiftJudgeAttention(void) { bool32 hitAny = FALSE; - u8 contestant = eContestResources8.contestant; + u8 contestant = eContestAppealResults.contestant; - if (eContestResources8.turnOrder[eContestResources8.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i] && + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i] && eContestantStatus[i].hasJudgesAttention && CanUnnerveContestant(i)) { @@ -262,10 +262,10 @@ static void ContestEffect_ShiftJudgeAttention(void) } } } - SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_DAZZLE_ATTEMPT); + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_DAZZLE_ATTEMPT); if (!hitAny) { - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } } @@ -273,81 +273,81 @@ static void ContestEffect_ShiftJudgeAttention(void) static void ContestEffect_StartleMonWithJudgesAttention(void) { u8 numStartled = 0; - u8 contestant = eContestResources8.contestant; + u8 contestant = eContestAppealResults.contestant; - if (eContestResources8.turnOrder[eContestResources8.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i]) { if (eContestantStatus[i].hasJudgesAttention) - eContestResources8.jam = 50; + eContestAppealResults.jam = 50; else - eContestResources8.jam = 10; - eContestResources8.jamQueue[0] = i; - eContestResources8.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numStartled++; } } } - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); if (numStartled == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Jams the others, and misses one turn of appeals. static void ContestEffect_JamsOthersButMissOneTurn(void) { - eContestantStatus[eContestResources8.contestant].turnSkipped = TRUE; + eContestantStatus[eContestAppealResults.contestant].turnSkipped = TRUE; ContestEffect_StartlePrevMons(); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Startles POKéMON that made a same-type appeal. static void ContestEffect_StartleMonsSameTypeAppeal(void) { - u16 move = eContestantStatus[eContestResources8.contestant].currMove; + u16 move = eContestantStatus[eContestAppealResults.contestant].currMove; JamByMoveCategory(gContestMoves[move].contestCategory); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made COOL appeals. static void ContestEffect_StartleMonsCoolAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_COOL); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made BEAUTY appeals. static void ContestEffect_StartleMonsBeautyAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_BEAUTY); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made CUTE appeals. static void ContestEffect_StartleMonsCuteAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_CUTE); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made SMART appeals. static void ContestEffect_StartleMonsSmartAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_SMART); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made TOUGH appeals. static void ContestEffect_StartleMonsToughAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_TOUGH); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Makes one POKéMON after the user nervous. @@ -355,13 +355,13 @@ static void ContestEffect_MakeFollowingMonNervous(void) { bool32 hitAny = FALSE; - if (eContestResources8.turnOrder[eContestResources8.contestant] != 3) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 3) { int i; for (i = 0; i < 4; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] + 1 == eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] + 1 == eContestAppealResults.turnOrder[i]) { if (CanUnnerveContestant(i)) { @@ -377,9 +377,9 @@ static void ContestEffect_MakeFollowingMonNervous(void) } } } - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_UNNERVE_ATTEMPT); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_ATTEMPT); if (!hitAny) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Makes all POKéMON after the user nervous. @@ -396,7 +396,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds)); for (i = 0, numAfter = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] < eContestResources8.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] && !eContestantStatus[i].nervous && !Contest_IsMonsTurnDisabled(i)) contestantIds[numAfter++] = i; } @@ -457,12 +457,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void) SetContestantEffectStringID(contestantIds[i], CONTEST_STRING_UNAFFECTED); numUnnerved++; } - eContestResources8.unnervedPokes[contestantIds[i]] = 1; + eContestAppealResults.unnervedPokes[contestantIds[i]] = 1; } } - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_UNNERVE_WAITING); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_WAITING); if (numUnnerved == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Worsens the condition of those that made appeals. @@ -473,7 +473,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i] && eContestantStatus[i].condition > 0 && CanUnnerveContestant(i)) { @@ -484,9 +484,9 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) } } - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_TAUNT_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_TAUNT_WELL); if (numHit == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_IGNORED); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED); } // Badly startles POKéMON in good condition. @@ -497,42 +497,42 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { if (eContestantStatus[i].condition > 0) - eContestResources8.jam = 40; + eContestAppealResults.jam = 40; else - eContestResources8.jam = 10; - eContestResources8.jamQueue[0] = i; - eContestResources8.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numHit++; } } - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_JAM_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_JAM_WELL); if (numHit == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_IGNORED); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED); } // The appeal works great if performed first. static void ContestEffect_BetterIfFirst(void) { - if (gContestantTurnOrder[eContestResources8.contestant] == 0) + if (gContestantTurnOrder[eContestAppealResults.contestant] == 0) { - u16 move = eContestantStatus[eContestResources8.contestant].currMove; - eContestantStatus[eContestResources8.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_HUSTLE_STANDOUT); + u16 move = eContestantStatus[eContestAppealResults.contestant].currMove; + eContestantStatus[eContestAppealResults.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HUSTLE_STANDOUT); } } // The appeal works great if performed last. static void ContestEffect_BetterIfLast(void) { - if (gContestantTurnOrder[eContestResources8.contestant] == 3) + if (gContestantTurnOrder[eContestAppealResults.contestant] == 3) { - u16 move = eContestantStatus[eContestResources8.contestant].currMove; - eContestantStatus[eContestResources8.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED); + u16 move = eContestantStatus[eContestAppealResults.contestant].currMove; + eContestantStatus[eContestAppealResults.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED); } } @@ -544,22 +544,22 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void) for (i = 0, appealSum = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) appealSum += eContestantStatus[i].appeal2; } if (appealSum < 0) appealSum = 0; - if (eContestResources8.turnOrder[eContestResources8.contestant] == 0 || appealSum == 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appealSum == 0) { - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL); } else { - eContestantStatus[eContestResources8.contestant].appeal2 += appealSum / 2; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_BEFORE); + eContestantStatus[eContestAppealResults.contestant].appeal2 += appealSum / 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_BEFORE); } - eContestantStatus[eContestResources8.contestant].appeal2 = RoundTowardsZero(eContestantStatus[eContestResources8.contestant].appeal2); + eContestantStatus[eContestAppealResults.contestant].appeal2 = RoundTowardsZero(eContestantStatus[eContestAppealResults.contestant].appeal2); } // Makes the appeal as good as the one before it. @@ -567,42 +567,42 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void) { s16 appeal = 0; - if (eContestResources8.turnOrder[eContestResources8.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) appeal = eContestantStatus[i].appeal2; } } - if (eContestResources8.turnOrder[eContestResources8.contestant] == 0 || appeal <= 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appeal <= 0) { - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL2); } else { - eContestantStatus[eContestResources8.contestant].appeal2 += appeal; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_PRECEDING); + eContestantStatus[eContestAppealResults.contestant].appeal2 += appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_PRECEDING); } } // The appeal works better the later it is performed. static void ContestEffect_BetterWhenLater(void) { - u8 whichTurn = eContestResources8.turnOrder[eContestResources8.contestant]; + u8 whichTurn = eContestAppealResults.turnOrder[eContestAppealResults.contestant]; if (whichTurn == 0) - eContestantStatus[eContestResources8.contestant].appeal2 = 10; + eContestantStatus[eContestAppealResults.contestant].appeal2 = 10; else - eContestantStatus[eContestResources8.contestant].appeal2 = 20 * whichTurn; + eContestantStatus[eContestAppealResults.contestant].appeal2 = 20 * whichTurn; if (whichTurn == 0) - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL); else if (whichTurn == 1) - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL); else if (whichTurn == 2) - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL); else - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY); } // The appeal's quality varies depending on its timing. @@ -614,31 +614,31 @@ static void ContestEffect_QualityDependsOnTiming(void) if (rval < 3) { appeal = 10; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); } else if (rval < 6) { appeal = 20; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); } else if (rval < 8) { appeal = 40; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); } else if (rval < 9) { appeal = 60; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL); } else { appeal = 80; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - eContestantStatus[eContestResources8.contestant].appeal2 = appeal; + eContestantStatus[eContestAppealResults.contestant].appeal2 = appeal; } static void ContestEffect_BetterIfSameType(void) { - s8 turnOrder = eContestResources8.turnOrder[eContestResources8.contestant]; + s8 turnOrder = eContestAppealResults.turnOrder[eContestAppealResults.contestant]; s8 i = turnOrder - 1, j; u16 move; @@ -649,7 +649,7 @@ static void ContestEffect_BetterIfSameType(void) { for (j = 0; j < CONTESTANT_COUNT; j++) { - if (eContestResources8.turnOrder[j] == i) + if (eContestAppealResults.turnOrder[j] == i) break; } if (eContestantStatus[j].noMoreTurns || eContestantStatus[j].nervous || eContestantStatus[j].numTurnsSkipped) @@ -663,29 +663,29 @@ static void ContestEffect_BetterIfSameType(void) } } - move = eContestantStatus[eContestResources8.contestant].currMove; + move = eContestantStatus[eContestAppealResults.contestant].currMove; if (gContestMoves[move].contestCategory == gContestMoves[eContestantStatus[j].currMove].contestCategory) { - eContestantStatus[eContestResources8.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SAME_TYPE_GOOD); + eContestantStatus[eContestAppealResults.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SAME_TYPE_GOOD); } } // Works well if different in type than the one before. static void ContestEffect_BetterIfDiffType(void) { - if (eContestResources8.turnOrder[eContestResources8.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { - u16 move = eContestantStatus[eContestResources8.contestant].currMove; + u16 move = eContestantStatus[eContestAppealResults.contestant].currMove; int i; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i] && gContestMoves[move].contestCategory != gContestMoves[eContestantStatus[i].currMove].contestCategory) { - eContestantStatus[eContestResources8.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_DIFF_TYPE_GOOD); + eContestantStatus[eContestAppealResults.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_DIFF_TYPE_GOOD); break; } } @@ -695,23 +695,23 @@ static void ContestEffect_BetterIfDiffType(void) // Affected by how well the appeal in front goes. static void ContestEffect_AffectedByPrevAppeal(void) { - if (eContestResources8.turnOrder[eContestResources8.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) { - if (eContestantStatus[eContestResources8.contestant].appeal2 > eContestantStatus[i].appeal2) + if (eContestantStatus[eContestAppealResults.contestant].appeal2 > eContestantStatus[i].appeal2) { - eContestantStatus[eContestResources8.contestant].appeal2 *= 2; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH); + eContestantStatus[eContestAppealResults.contestant].appeal2 *= 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH); } - else if (eContestantStatus[eContestResources8.contestant].appeal2 < eContestantStatus[i].appeal2) + else if (eContestantStatus[eContestAppealResults.contestant].appeal2 < eContestantStatus[i].appeal2) { - eContestantStatus[eContestResources8.contestant].appeal2 = 0; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NOT_AS_WELL); + eContestantStatus[eContestAppealResults.contestant].appeal2 = 0; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NOT_AS_WELL); } } } @@ -721,26 +721,26 @@ static void ContestEffect_AffectedByPrevAppeal(void) // Ups the user's condition. Helps prevent nervousness. static void ContestEffect_ImproveConditionPreventNervousness(void) { - if (eContestantStatus[eContestResources8.contestant].condition < 30) + if (eContestantStatus[eContestAppealResults.contestant].condition < 30) { - eContestantStatus[eContestResources8.contestant].condition += 10; - eContestantStatus[eContestResources8.contestant].conditionMod = 1; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_CONDITION_ROSE); + eContestantStatus[eContestAppealResults.contestant].condition += 10; + eContestantStatus[eContestAppealResults.contestant].conditionMod = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_CONDITION_ROSE); } else { - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE); } } // The appeal works well if the user's condition is good. static void ContestEffect_BetterWithGoodCondition(void) { - eContestantStatus[eContestResources8.contestant].appealTripleCondition = TRUE; - if (eContestantStatus[eContestResources8.contestant].condition != 0) - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_HOT_STATUS); + eContestantStatus[eContestAppealResults.contestant].appealTripleCondition = TRUE; + if (eContestantStatus[eContestAppealResults.contestant].condition != 0) + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HOT_STATUS); else - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL); } // The next appeal can be made earlier next turn. @@ -755,13 +755,13 @@ static void ContestEffect_NextAppealEarlier(void) for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; - turnOrder[eContestResources8.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = 0xFF; for (i = 0; i < CONTESTANT_COUNT; i++) { for (j = 0; j < CONTESTANT_COUNT; j++) { - if (j != eContestResources8.contestant && + if (j != eContestAppealResults.contestant && i == turnOrder[j] && turnOrder[j] == eContestantStatus[j].nextTurnOrder) { @@ -773,15 +773,15 @@ static void ContestEffect_NextAppealEarlier(void) break; } - turnOrder[eContestResources8.contestant] = 0; - eContestantStatus[eContestResources8.contestant].turnOrderMod = 1; + turnOrder[eContestAppealResults.contestant] = 0; + eContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1; for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].nextTurnOrder = turnOrder[i]; } - eContestantStatus[eContestResources8.contestant].turnOrderModAction = 1; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MOVE_UP_LINE); + eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_UP_LINE); } } @@ -797,13 +797,13 @@ static void ContestEffect_NextAppealLater(void) for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; - turnOrder[eContestResources8.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = 0xFF; for (i = CONTESTANT_COUNT - 1; i > -1; i--) { for (j = 0; j < CONTESTANT_COUNT; j++) { - if (j != eContestResources8.contestant && + if (j != eContestAppealResults.contestant && i == turnOrder[j] && turnOrder[j] == eContestantStatus[j].nextTurnOrder) { @@ -815,15 +815,15 @@ static void ContestEffect_NextAppealLater(void) break; } - turnOrder[eContestResources8.contestant] = CONTESTANT_COUNT - 1; - eContestantStatus[eContestResources8.contestant].turnOrderMod = 1; + turnOrder[eContestAppealResults.contestant] = CONTESTANT_COUNT - 1; + eContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1; for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].nextTurnOrder = turnOrder[i]; } - eContestantStatus[eContestResources8.contestant].turnOrderModAction = 2; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MOVE_BACK_LINE); + eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_BACK_LINE); } } @@ -874,17 +874,17 @@ static void ContestEffect_ScrambleNextTurnOrder(void) eContestantStatus[i].nextTurnOrder = turnOrder[i]; eContestantStatus[i].turnOrderMod = 2; } - eContestantStatus[eContestResources8.contestant].turnOrderModAction = 3; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SCRAMBLE_ORDER); + eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 3; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SCRAMBLE_ORDER); } } // An appeal that excites the audience in any CONTEST. static void ContestEffect_ExciteAudienceInAnyContest(void) { - if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory != gSpecialVar_ContestCategory) + if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory != gSpecialVar_ContestCategory) { - eContestantStatus[eContestResources8.contestant].overrideCategoryExcitementMod = TRUE; + eContestantStatus[eContestAppealResults.contestant].overrideCategoryExcitementMod = TRUE; } } @@ -896,24 +896,24 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { if (eContestantStatus[i].appeal2 > 0) { - eContestResources8.jam = eContestantStatus[i].appeal2 / 2; - eContestResources8.jam = RoundUp(eContestResources8.jam); + eContestAppealResults.jam = eContestantStatus[i].appeal2 / 2; + eContestAppealResults.jam = RoundUp(eContestAppealResults.jam); } else - eContestResources8.jam = 10; - eContestResources8.jamQueue[0] = i; - eContestResources8.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numJammed++; } } if (numJammed == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // The appeal works best the more the crowd is excited. @@ -924,39 +924,39 @@ static void ContestEffect_BetterWhenAudienceExcited(void) if (eContest.applauseLevel == 0) { appeal = 10; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); } else if (eContest.applauseLevel == 1) { appeal = 20; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); } else if (eContest.applauseLevel == 2) { appeal = 30; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); } else if (eContest.applauseLevel == 3) { appeal = 50; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL); } else { appeal = 60; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - eContestantStatus[eContestResources8.contestant].appeal2 = appeal; + eContestantStatus[eContestAppealResults.contestant].appeal2 = appeal; } // Temporarily stops the crowd from growing excited. static void ContestEffect_DontExciteAudience(void) { - if (!eContestResources10.excitementFrozen) + if (!eContestExcitement.frozen) { - eContestResources10.excitementFrozen = TRUE; - eContestResources10.excitementFreezer = eContestResources8.contestant; - SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTRACTED_ATTENTION); + eContestExcitement.frozen = TRUE; + eContestExcitement.freezer = eContestAppealResults.contestant; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTRACTED_ATTENTION); } } @@ -967,26 +967,26 @@ static void JamByMoveCategory(u8 category) for (i = 0; i < CONTESTANT_COUNT; i++) { - if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { if (category == gContestMoves[eContestantStatus[i].currMove].contestCategory) - eContestResources8.jam = 40; + eContestAppealResults.jam = 40; else - eContestResources8.jam = 10; - eContestResources8.jamQueue[0] = i; - eContestResources8.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numJammed++; } } if (numJammed == 0) - SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } static bool8 CanUnnerveContestant(u8 i) { - eContestResources8.unnervedPokes[i] = 1; + eContestAppealResults.unnervedPokes[i] = 1; if (eContestantStatus[i].immune) { SetContestantEffectStringID(i, CONTEST_STRING_AVOID_SEEING); @@ -1013,32 +1013,32 @@ static bool8 WasAtLeastOneOpponentJammed(void) s16 jamBuffer[CONTESTANT_COUNT] = {0}; int i; - for (i = 0; eContestResources8.jamQueue[i] != 0xFF; i++) + for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++) { - u8 contestant = eContestResources8.jamQueue[i]; + u8 contestant = eContestAppealResults.jamQueue[i]; if (CanUnnerveContestant(contestant)) { - eContestResources8.jam2 = eContestResources8.jam; + eContestAppealResults.jam2 = eContestAppealResults.jam; if (eContestantStatus[contestant].moreEasilyStartled) - eContestResources8.jam2 *= 2; + eContestAppealResults.jam2 *= 2; if (eContestantStatus[contestant].resistant) { - eContestResources8.jam2 = 10; + eContestAppealResults.jam2 = 10; SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED); } else { - eContestResources8.jam2 -= eContestantStatus[contestant].jamReduction; - if (eContestResources8.jam2 <= 0) + eContestAppealResults.jam2 -= eContestantStatus[contestant].jamReduction; + if (eContestAppealResults.jam2 <= 0) { - eContestResources8.jam2 = 0; + eContestAppealResults.jam2 = 0; SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED); } else { - JamContestant(contestant, eContestResources8.jam2); - SetStartledString(contestant, eContestResources8.jam2); - jamBuffer[contestant] = eContestResources8.jam2; + JamContestant(contestant, eContestAppealResults.jam2); + SetStartledString(contestant, eContestAppealResults.jam2); + jamBuffer[contestant] = eContestAppealResults.jam2; } } } diff --git a/src/contest_link.c b/src/contest_link.c index aff24052aa..1716d6a21d 100644 --- a/src/contest_link.c +++ b/src/contest_link.c @@ -12,9 +12,13 @@ static void Task_LinkContest_StartInitFlags(u8); static void Task_LinkContest_InitFlags(u8); -#define tState data[0] -#define tCategory data[9] -#define tTimer data[11] +#define tState data[0] +#define tDelayTimer data[1] +#define tCategories(i) data[(i) + 1] +#define tLeaderIds(i) data[(i) + 5] +#define tCategory data[9] +#define tTimer data[11] +#define tStandbyState data[12] bool32 LinkContest_SendBlock(void *src, u16 size) { @@ -121,7 +125,7 @@ void Task_LinkContest_CommunicateMonsRS(u8 taskId) { int i; - if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState)) return; switch (gTasks[taskId].tState) @@ -166,7 +170,7 @@ void Task_LinkContest_CommunicateMonsRS(u8 taskId) default: gTasks[taskId].tState = 0; gTasks[taskId].tTimer = 0; - gTasks[taskId].data[12] = 0; + gTasks[taskId].tStandbyState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -206,7 +210,7 @@ void Task_LinkContest_CommunicateCategoryRS(u8 taskId) { int i; - if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState)) return; switch (gTasks[taskId].tState) @@ -227,7 +231,7 @@ void Task_LinkContest_CommunicateCategoryRS(u8 taskId) if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < gNumLinkContestPlayers; i++) - gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0]; + gTasks[taskId].tCategories(i) = gBlockRecvBuffer[i][0]; gTasks[taskId].tState++; } @@ -242,7 +246,7 @@ void Task_LinkContest_CommunicateCategoryRS(u8 taskId) default: gTasks[taskId].tState = 0; gTasks[taskId].tTimer = 0; - gTasks[taskId].data[12] = 0; + gTasks[taskId].tStandbyState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -323,9 +327,9 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId) case 5: case 8: case 11: - if (gTasks[taskId].data[1]++ > 10) + if (gTasks[taskId].tDelayTimer++ > 10) { - gTasks[taskId].data[1] = 0; + gTasks[taskId].tDelayTimer = 0; gTasks[taskId].tState++; } break; @@ -378,7 +382,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId) } } -void sub_80FCC88(u8 taskId) +void Task_LinkContest_CommunicateAppealsState(u8 taskId) { switch (gTasks[taskId].tState) { @@ -400,37 +404,37 @@ void sub_80FCC88(u8 taskId) case 5: case 8: case 11: - if (gTasks[taskId].data[1]++ > 10) + if (gTasks[taskId].tDelayTimer++ > 10) { - gTasks[taskId].data[1] = 0; + gTasks[taskId].tDelayTimer = 0; gTasks[taskId].tState++; } break; case 3: if (IsLinkTaskFinished()) { - if (LinkContest_SendBlock(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1) + if (LinkContest_SendBlock(gContestResources->appealResults, sizeof(struct ContestAppealMoveResults)) == 1) gTasks[taskId].tState++; } break; case 4: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestResources->field_8, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct UnknownContestStruct7)); + memcpy(gContestResources->appealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestAppealMoveResults)); gTasks[taskId].tState++; } break; case 6: if (IsLinkTaskFinished()) { - if (LinkContest_SendBlock(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1) + if (LinkContest_SendBlock(gContestResources->excitement, sizeof(struct ContestExcitement)) == 1) gTasks[taskId].tState++; } break; case 7: if (LinkContest_GetBlockReceivedFromAllPlayers()) { - memcpy(gContestResources->field_10, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct UnknownContestStruct5)); + memcpy(gContestResources->excitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestExcitement)); gTasks[taskId].tState++; } break; @@ -459,7 +463,7 @@ void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId) { int i; - if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState)) return; switch (gTasks[taskId].tState) @@ -480,7 +484,7 @@ void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId) if (LinkContest_GetBlockReceivedFromAllPlayers()) { for (i = 0; i < CONTESTANT_COUNT; i++) - gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0]; + gTasks[taskId].tLeaderIds(i) = gBlockRecvBuffer[i][0]; gTasks[taskId].tState++; } @@ -495,7 +499,7 @@ void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId) default: gTasks[taskId].tState = 0; gTasks[taskId].tTimer = 0; - gTasks[taskId].data[12] = 0; + gTasks[taskId].tStandbyState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -503,7 +507,7 @@ void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId) void Task_LinkContest_CommunicateRound1Points(u8 taskId) { - if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState)) return; switch (gTasks[taskId].tState) @@ -524,7 +528,7 @@ void Task_LinkContest_CommunicateRound1Points(u8 taskId) break; default: gTasks[taskId].tState = 0; - gTasks[taskId].data[12] = 0; + gTasks[taskId].tStandbyState = 0; SwitchTaskToFollowupFunc(taskId); break; } @@ -532,7 +536,7 @@ void Task_LinkContest_CommunicateRound1Points(u8 taskId) void Task_LinkContest_CommunicateTurnOrder(u8 taskId) { - if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12])) + if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState)) return; switch (gTasks[taskId].tState) @@ -553,7 +557,7 @@ void Task_LinkContest_CommunicateTurnOrder(u8 taskId) break; default: gTasks[taskId].tState = 0; - gTasks[taskId].data[12] = 0; + gTasks[taskId].tStandbyState = 0; SwitchTaskToFollowupFunc(taskId); break; } From e98e4652fd252edfde79155d21ee55a80a1f94ce Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 16 Aug 2020 05:07:44 -0400 Subject: [PATCH 66/85] Document contest live updates --- data/text/tv.inc | 66 ++-- include/constants/tv.h | 54 +++ include/contest.h | 27 +- include/event_scripts.h | 66 ++-- include/global.tv.h | 20 +- include/tv.h | 10 +- src/contest.c | 418 ++++++++++++----------- src/tv.c | 729 ++++++++++++++++++++-------------------- 8 files changed, 732 insertions(+), 658 deletions(-) diff --git a/data/text/tv.inc b/data/text/tv.inc index 63a1eff652..6f678d8244 100644 --- a/data/text/tv.inc +++ b/data/text/tv.inc @@ -2436,7 +2436,7 @@ gTVSafariFanClubText10:: @ 08289D33 .string "and make the challenge yourself!\p" .string "Until next time, cheerio!$" -gTVContestLiveUpdatesText00:: @ 08289DD6 +ContestLiveUpdates_Text_Intro:: @ 08289DD6 .string "“POKéMON CONTEST LIVE UPDATES!”\p" .string "MC: Thanks for joining us!\p" .string "We're live from the just-ended\n" @@ -2455,117 +2455,117 @@ gTVContestLiveUpdatesText00:: @ 08289DD6 .string "MC: Let's hear what the fans have\n" .string "to say about this CONTEST.$" -gTVContestLiveUpdatesText01:: @ 08289F53 +ContestLiveUpdates_Text_WonBothRounds:: @ 08289F53 .string "Spectator: The {STR_VAR_2} was tops in\n" .string "both primary and secondary judging!\p" .string "That {STR_VAR_2} will keep winning!$" -gTVContestLiveUpdatesText02:: @ 08289FB0 +ContestLiveUpdates_Text_BetterRound2:: @ 08289FB0 .string "Spectator: The {STR_VAR_2} didn't do\n" .string "well in the primary judging, but it\l" .string "cleaned up in the secondary judging!\p" .string "It was a miraculous comeback\n" .string "for that {STR_VAR_2}. Yippee!$" -gTVContestLiveUpdatesText03:: @ 0828A047 +ContestLiveUpdates_Text_EqualRounds:: @ 0828A047 .string "Spectator: The {STR_VAR_2} remained\n" .string "consistent throughout both primary\l" .string "and secondary judging.\p" .string "{STR_VAR_3} and the {STR_VAR_2},\n" .string "they're no ordinary combo!$" -gTVContestLiveUpdatesText04:: @ 0828A0C6 +ContestLiveUpdates_Text_BetterRound1:: @ 0828A0C6 .string "Spectator: In terms of being {STR_VAR_1},\n" .string "that {STR_VAR_2} was outstanding.\p" .string "I hope it makes better appeals\n" .string "next time, though.$" -gTVContestLiveUpdatesText05:: @ 0828A132 +ContestLiveUpdates_Text_GotNervous:: @ 0828A132 .string "Spectator: When the {STR_VAR_2} got\n" .string "nervous, I couldn't stop myself from\l" .string "shouting encouragement.\p" .string "I'd like to say this to that\n" .string "{STR_VAR_2}, “Congratulations!”$" -gTVContestLiveUpdatesText06:: @ 0828A1BE +ContestLiveUpdates_Text_StartledFoes:: @ 0828A1BE .string "Spectator: That {STR_VAR_2}'s appeal\n" .string "startled even me!\p" .string "{STR_VAR_2}, you were awesome!$" -gTVContestLiveUpdatesText07:: @ 0828A202 +ContestLiveUpdates_Text_UsedCombo:: @ 0828A202 .string "Spectator: That {STR_VAR_2}'s combo\n" .string "appeal was stunning!\p" .string "It's shaken me to the core!$" -gTVContestLiveUpdatesText08:: @ 0828A24E +ContestLiveUpdates_Text_ExcitingAppeal:: @ 0828A24E .string "Spectator: The winning {STR_VAR_2}'s\n" .string "appeal got my heart pounding!$" -gTVContestLiveUpdatesText09:: @ 0828A288 +ContestLiveUpdates_Text_WasCool:: @ 0828A288 .string "{STR_VAR_2}!\n" .string "You were cool!$" -gTVContestLiveUpdatesText10:: @ 0828A29B +ContestLiveUpdates_Text_WasBeautiful:: @ 0828A29B .string "{STR_VAR_2}!\n" .string "You were beautiful!$" -gTVContestLiveUpdatesText11:: @ 0828A2B3 +ContestLiveUpdates_Text_WasCute:: @ 0828A2B3 .string "{STR_VAR_2}!\n" .string "You were cute!$" -gTVContestLiveUpdatesText12:: @ 0828A2C6 +ContestLiveUpdates_Text_WasSmart:: @ 0828A2C6 .string "{STR_VAR_2}!\n" .string "You were smart!$" -gTVContestLiveUpdatesText13:: @ 0828A2DA +ContestLiveUpdates_Text_WasTough:: @ 0828A2DA .string "{STR_VAR_2}!\n" .string "You were tough!$" -gTVContestLiveUpdatesText14:: @ 0828A2EE +ContestLiveUpdates_Text_VeryExcitingAppeal:: @ 0828A2EE .string "Spectator: The winning {STR_VAR_2}'s\n" .string "appeal still has my heart pounding!$" -gTVContestLiveUpdatesText15:: @ 0828A32E +ContestLiveUpdates_Text_VeryCool:: @ 0828A32E .string "{STR_VAR_2}!\n" .string "You're the last word in cool!$" -gTVContestLiveUpdatesText16:: @ 0828A350 +ContestLiveUpdates_Text_VeryBeautiful:: @ 0828A350 .string "{STR_VAR_2}!\n" .string "You're the most beautiful!$" -gTVContestLiveUpdatesText17:: @ 0828A36F +ContestLiveUpdates_Text_VeryCute:: @ 0828A36F .string "{STR_VAR_2}!\n" .string "You're simply the cutest!$" -gTVContestLiveUpdatesText18:: @ 0828A38D +ContestLiveUpdates_Text_VerySmart:: @ 0828A38D .string "{STR_VAR_2}!\n" .string "You're the smartest among the smart!$" -gTVContestLiveUpdatesText19:: @ 0828A3B6 +ContestLiveUpdates_Text_VeryTough:: @ 0828A3B6 .string "{STR_VAR_2}!\n" .string "You're the toughest of the tough!$" -gTVContestLiveUpdatesText20:: @ 0828A3DC +ContestLiveUpdates_Text_TookBreak:: @ 0828A3DC .string "Spectator: Even when the {STR_VAR_2}\n" .string "took a break from making appeals,\l" .string "I couldn't take my eyes off it.\p" .string "I'm captivated by that {STR_VAR_2}.$" -gTVContestLiveUpdatesText21:: @ 0828A455 +ContestLiveUpdates_Text_GotStartled:: @ 0828A455 .string "Spectator: When the {STR_VAR_2} was\n" .string "startled by another POKéMON's appeal,\l" .string "I was close to tears.\p" .string "{STR_VAR_2}, you were resilient!\n" .string "Way to go!$" -gTVContestLiveUpdatesText22:: @ 0828A4CF +ContestLiveUpdates_Text_MoveWonderful:: @ 0828A4CF .string "Spectator: Oh…\n" .string "That {STR_VAR_2}'s {STR_VAR_3}!\l" .string "{STR_VAR_2}'s {STR_VAR_3}!\l" .string "{STR_VAR_2}'s {STR_VAR_3}!\l" .string "How could it be so wonderful?$" -gTVContestLiveUpdatesText23:: @ 0828A51C +ContestLiveUpdates_Text_TalkAboutAnotherMon:: @ 0828A51C .string "MC: Well, there you have it. This place\n" .string "is full of the {STR_VAR_1}'s fans!\p" .string "I should also mention that another\n" @@ -2573,20 +2573,20 @@ gTVContestLiveUpdatesText23:: @ 0828A51C .string "caught my eye.\p" .string "{STR_VAR_2}'s {STR_VAR_3}…$" -gTVContestLiveUpdatesText24:: @ 0828A5AC +ContestLiveUpdates_Text_FailedToAppeal:: @ 0828A5AC .string "It failed to make a single appeal during\n" .string "secondary judging out of nervousness.\p" .string "Next time, I would like to see this\n" .string "{STR_VAR_1} make even one appeal.$" -gTVContestLiveUpdatesText25:: @ 0828A638 +ContestLiveUpdates_Text_LastInBothRounds:: @ 0828A638 .string "It came dead last in both primary\n" .string "and secondary judging.\p" .string "I hope that {STR_VAR_1} will retrain this\n" .string "{STR_VAR_2} and erase the shame of\l" .string "this undisputed last-place finish.$" -gTVContestLiveUpdatesText26:: @ 0828A6CF +ContestLiveUpdates_Text_NotExcitingEnough:: @ 0828A6CF .string "It failed to take advantage of\n" .string "the audience's excitement and make\l" .string "an appropriate appeal.\p" @@ -2594,7 +2594,7 @@ gTVContestLiveUpdatesText26:: @ 0828A6CF .string "a feel for the audience and whip their\l" .string "excitement to a fever pitch next time.$" -gTVContestLiveUpdatesText27:: @ 0828A797 +ContestLiveUpdates_Text_LostAfterWinningRound1:: @ 0828A797 .string "While finishing first in the primary\n" .string "judging, its appeals in the secondary\l" .string "judging failed to click.\p" @@ -2603,14 +2603,14 @@ gTVContestLiveUpdatesText27:: @ 0828A797 .string "I'm sure {STR_VAR_1} is studying how to\n" .string "make more effective appeals now.$" -gTVContestLiveUpdatesText28:: @ 0828A86D +ContestLiveUpdates_Text_NeverExciting:: @ 0828A86D .string "The audience never got excited by its\n" .string "appeals during the secondary judging.\p" .string "We hope it will stop worrying about\n" .string "other POKéMON and learn to pitch\l" .string "its appeals to the audience more.$" -gTVContestLiveUpdatesText29:: @ 0828A920 +ContestLiveUpdates_Text_LostBySmallMargin:: @ 0828A920 .string "It lost to {STR_VAR_1}'s {STR_VAR_2}\n" .string "by only a small margin.\p" .string "It must be heartbreaking to come\n" @@ -2618,7 +2618,7 @@ gTVContestLiveUpdatesText29:: @ 0828A920 .string "I wouldn't be surprised if {STR_VAR_3}\n" .string "were weeping over this outcome.$" -gTVContestLiveUpdatesText30:: @ 0828A9CC +ContestLiveUpdates_Text_RepeatedAppeals:: @ 0828A9CC .string "It disappointed the JUDGE by\n" .string "repeating the same appeals.\p" .string "It's an unforgivable error in any\n" @@ -2626,14 +2626,14 @@ gTVContestLiveUpdatesText30:: @ 0828A9CC .string "{STR_VAR_1} should feel guilty for\n" .string "this sorry showing.$" -gTVContestLiveUpdatesText31:: @ 0828AA74 +ContestLiveUpdates_Text_ValiantEffortButLost:: @ 0828AA74 .string "{STR_VAR_1} turned in a valiant effort,\n" .string "but…\p" .string "It was all for naught, finishing last.\p" .string "{STR_VAR_1} should learn from this loss\n" .string "and put the knowledge to good use.$" -gTVContestLiveUpdatesText32:: @ 0828AB01 +ContestLiveUpdates_Text_Outro:: @ 0828AB01 .string "I'd like to end this program with our\n" .string "usual farewell to the winners.\p" .string "This time, it's {STR_VAR_1} and\n" diff --git a/include/constants/tv.h b/include/constants/tv.h index 6f686f7276..4b5f9115b4 100644 --- a/include/constants/tv.h +++ b/include/constants/tv.h @@ -133,5 +133,59 @@ #define NUM_SECRET_BASE_FLAGS 32 // by definition, bitfield of 2 u16s +// TV Show states for Pokemon Contest Live Updates +#define CONTESTLIVE_STATE_INTRO 0 +#define CONTESTLIVE_STATE_WON_BOTH_ROUNDS 1 +#define CONTESTLIVE_STATE_BETTER_ROUND2 2 +#define CONTESTLIVE_STATE_EQUAL_ROUNDS 3 +#define CONTESTLIVE_STATE_BETTER_ROUND1 4 +#define CONTESTLIVE_STATE_GOT_NERVOUS 5 +#define CONTESTLIVE_STATE_STARTLED_OTHER 6 +#define CONTESTLIVE_STATE_USED_COMBO 7 +#define CONTESTLIVE_STATE_EXCITING_APPEAL 8 +#define CONTESTLIVE_STATE_COOL 9 +#define CONTESTLIVE_STATE_BEAUTIFUL 10 +#define CONTESTLIVE_STATE_CUTE 11 +#define CONTESTLIVE_STATE_SMART 12 +#define CONTESTLIVE_STATE_TOUGH 13 +#define CONTESTLIVE_STATE_VERY_EXCITING_APPEAL 14 +#define CONTESTLIVE_STATE_VERY_COOL 15 +#define CONTESTLIVE_STATE_VERY_BEAUTIFUL 16 +#define CONTESTLIVE_STATE_VERY_CUTE 17 +#define CONTESTLIVE_STATE_VERY_SMART 18 +#define CONTESTLIVE_STATE_VERY_TOUGH 19 +#define CONTESTLIVE_STATE_TOOK_BREAK 20 +#define CONTESTLIVE_STATE_GOT_STARTLED 21 +#define CONTESTLIVE_STATE_USED_MOVE 22 +#define CONTESTLIVE_STATE_TALK_ABOUT_LOSER 23 +#define CONTESTLIVE_STATE_NO_APPEALS 24 +#define CONTESTLIVE_STATE_LAST_BOTH 25 +#define CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH 26 +#define CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN 27 +#define CONTESTLIVE_STATE_NO_EXCITING_APPEALS 28 +#define CONTESTLIVE_STATE_LOST_SMALL_MARGIN 29 +#define CONTESTLIVE_STATE_REPEATED_APPEALS 30 +#define CONTESTLIVE_STATE_LOST 31 +#define CONTESTLIVE_STATE_OUTRO 32 + +// Flags used to comment on winner +#define CONTESTLIVE_FLAG_EXCITING_APPEAL (1 << 0) +#define CONTESTLIVE_FLAG_GOT_NERVOUS (1 << 1) +#define CONTESTLIVE_FLAG_MAXED_EXCITEMENT (1 << 2) +#define CONTESTLIVE_FLAG_USED_COMBO (1 << 3) +#define CONTESTLIVE_FLAG_STARTLED_OTHER (1 << 4) +#define CONTESTLIVE_FLAG_SKIPPED_TURN (1 << 5) +#define CONTESTLIVE_FLAG_GOT_STARTLED (1 << 6) +#define CONTESTLIVE_FLAG_MADE_APPEAL (1 << 7) + +// Flags used to comment on loser +#define CONTESTLIVE_FLAG_LOST (1 << 0) +#define CONTESTLIVE_FLAG_REPEATED_MOVE (1 << 1) +#define CONTESTLIVE_FLAG_LOST_SMALL_MARGIN (1 << 2) +#define CONTESTLIVE_FLAG_NO_EXCITEMENT (1 << 3) +#define CONTESTLIVE_FLAG_BLEW_LEAD (1 << 4) +#define CONTESTLIVE_FLAG_MISSED_EXCITEMENT (1 << 5) +#define CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS (1 << 6) +#define CONTESTLIVE_FLAG_NO_APPEALS (1 << 7) #endif //GUARD_CONSTANTS_TV_H diff --git a/include/contest.h b/include/contest.h index 208604f4a7..834aba4024 100644 --- a/include/contest.h +++ b/include/contest.h @@ -4,17 +4,6 @@ #include "palette.h" #include "constants/contest.h" -enum -{ - CONTEST_DEBUG_MODE_OFF, - // Prints the totalPoints value for each contestant. - CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL, - // Prints the ContestTV::unk_C value as a bitstring for each contestant. - CONTEST_DEBUG_MODE_PRINT_UNK_C, - // Prints the ContestTV::unk_D value as a bitstring for each contestant. - CONTEST_DEBUG_MODE_PRINT_UNK_D -}; - enum { CONTEST_STRING_MORE_CONSCIOUS, @@ -153,7 +142,7 @@ struct Contest u8 mainTaskId; u8 unk1920D[4]; u8 judgeAttentionTaskId; - u8 unk19212; + u8 blendTaskId; u8 filler19213; u8 turnNumber; u8 currentContestant; @@ -211,7 +200,7 @@ struct ContestantStatus bool8 usedComboMove:1; bool8 completedCombo; u8 comboAppealBonus; - u8 unk18; + u8 repeatJam; u8 nextTurnOrder; // turn position u8 attentionLevel; // How much the Pokemon "stood out" u8 contestantAnimTarget; @@ -271,12 +260,12 @@ struct ContestFinalStandings struct ContestTV { - u16 unk0[5]; - s16 unkA; - u8 unkC; - u8 unkD; - u8 unkE_1:1; - u8 unkE_2:1; + u16 appeals[CONTEST_NUM_APPEALS]; + s16 move; + u8 winnerFlags; + u8 loserFlags; + u8 madeAppeal:1; + u8 madeExcitingAppeal:1; }; struct ContestUnused diff --git a/include/event_scripts.h b/include/event_scripts.h index d147dd4f1d..6ec9107a75 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -294,39 +294,39 @@ extern const u8 gTVSafariFanClubText07[]; extern const u8 gTVSafariFanClubText08[]; extern const u8 gTVSafariFanClubText09[]; extern const u8 gTVSafariFanClubText10[]; -extern const u8 gTVContestLiveUpdatesText00[]; -extern const u8 gTVContestLiveUpdatesText01[]; -extern const u8 gTVContestLiveUpdatesText02[]; -extern const u8 gTVContestLiveUpdatesText03[]; -extern const u8 gTVContestLiveUpdatesText04[]; -extern const u8 gTVContestLiveUpdatesText05[]; -extern const u8 gTVContestLiveUpdatesText06[]; -extern const u8 gTVContestLiveUpdatesText07[]; -extern const u8 gTVContestLiveUpdatesText08[]; -extern const u8 gTVContestLiveUpdatesText09[]; -extern const u8 gTVContestLiveUpdatesText10[]; -extern const u8 gTVContestLiveUpdatesText11[]; -extern const u8 gTVContestLiveUpdatesText12[]; -extern const u8 gTVContestLiveUpdatesText13[]; -extern const u8 gTVContestLiveUpdatesText14[]; -extern const u8 gTVContestLiveUpdatesText15[]; -extern const u8 gTVContestLiveUpdatesText16[]; -extern const u8 gTVContestLiveUpdatesText17[]; -extern const u8 gTVContestLiveUpdatesText18[]; -extern const u8 gTVContestLiveUpdatesText19[]; -extern const u8 gTVContestLiveUpdatesText20[]; -extern const u8 gTVContestLiveUpdatesText21[]; -extern const u8 gTVContestLiveUpdatesText22[]; -extern const u8 gTVContestLiveUpdatesText23[]; -extern const u8 gTVContestLiveUpdatesText24[]; -extern const u8 gTVContestLiveUpdatesText25[]; -extern const u8 gTVContestLiveUpdatesText26[]; -extern const u8 gTVContestLiveUpdatesText27[]; -extern const u8 gTVContestLiveUpdatesText28[]; -extern const u8 gTVContestLiveUpdatesText29[]; -extern const u8 gTVContestLiveUpdatesText30[]; -extern const u8 gTVContestLiveUpdatesText31[]; -extern const u8 gTVContestLiveUpdatesText32[]; +extern const u8 ContestLiveUpdates_Text_Intro[]; +extern const u8 ContestLiveUpdates_Text_WonBothRounds[]; +extern const u8 ContestLiveUpdates_Text_BetterRound2[]; +extern const u8 ContestLiveUpdates_Text_EqualRounds[]; +extern const u8 ContestLiveUpdates_Text_BetterRound1[]; +extern const u8 ContestLiveUpdates_Text_GotNervous[]; +extern const u8 ContestLiveUpdates_Text_StartledFoes[]; +extern const u8 ContestLiveUpdates_Text_UsedCombo[]; +extern const u8 ContestLiveUpdates_Text_ExcitingAppeal[]; +extern const u8 ContestLiveUpdates_Text_WasCool[]; +extern const u8 ContestLiveUpdates_Text_WasBeautiful[]; +extern const u8 ContestLiveUpdates_Text_WasCute[]; +extern const u8 ContestLiveUpdates_Text_WasSmart[]; +extern const u8 ContestLiveUpdates_Text_WasTough[]; +extern const u8 ContestLiveUpdates_Text_VeryExcitingAppeal[]; +extern const u8 ContestLiveUpdates_Text_VeryCool[]; +extern const u8 ContestLiveUpdates_Text_VeryBeautiful[]; +extern const u8 ContestLiveUpdates_Text_VeryCute[]; +extern const u8 ContestLiveUpdates_Text_VerySmart[]; +extern const u8 ContestLiveUpdates_Text_VeryTough[]; +extern const u8 ContestLiveUpdates_Text_TookBreak[]; +extern const u8 ContestLiveUpdates_Text_GotStartled[]; +extern const u8 ContestLiveUpdates_Text_MoveWonderful[]; +extern const u8 ContestLiveUpdates_Text_TalkAboutAnotherMon[]; +extern const u8 ContestLiveUpdates_Text_FailedToAppeal[]; +extern const u8 ContestLiveUpdates_Text_LastInBothRounds[]; +extern const u8 ContestLiveUpdates_Text_NotExcitingEnough[]; +extern const u8 ContestLiveUpdates_Text_LostAfterWinningRound1[]; +extern const u8 ContestLiveUpdates_Text_NeverExciting[]; +extern const u8 ContestLiveUpdates_Text_LostBySmallMargin[]; +extern const u8 ContestLiveUpdates_Text_RepeatedAppeals[]; +extern const u8 ContestLiveUpdates_Text_ValiantEffortButLost[]; +extern const u8 ContestLiveUpdates_Text_Outro[]; extern const u8 gTVPokemonBattleUpdateText00[]; extern const u8 gTVPokemonBattleUpdateText01[]; extern const u8 gTVPokemonBattleUpdateText02[]; diff --git a/include/global.tv.h b/include/global.tv.h index ba1c3c37ee..b211052e05 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -124,18 +124,18 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u16 winningSpecies; - /*0x04*/ u8 winningTrainerName[8]; - /*0x0C*/ u8 appealFlags2; - /*0x0D*/ u8 round1Rank; - /*0x0e*/ u8 round2Rank; - /*0x0f*/ u8 appealFlags1; + /*0x02*/ u16 losingSpecies; + /*0x04*/ u8 losingTrainerName[8]; + /*0x0C*/ u8 loserAppealFlag; + /*0x0D*/ u8 round1Placing; + /*0x0e*/ u8 round2Placing; + /*0x0f*/ u8 winnerAppealFlag; /*0x10*/ u16 move; - /*0x12*/ u16 species; - /*0x14*/ u8 playerName[8]; + /*0x12*/ u16 winningSpecies; + /*0x14*/ u8 winningTrainerName[8]; /*0x1C*/ u8 category; - /*0x1D*/ u8 language; - /*0x1E*/ u8 winningTrainerLanguage; + /*0x1D*/ u8 winningTrainerLanguage; + /*0x1E*/ u8 losingTrainerLanguage; } contestLiveUpdates; // TVSHOW_3_CHEERS_FOR_POKEBLOCKS diff --git a/include/tv.h b/include/tv.h index 8e9233c2bd..4b5aceb559 100644 --- a/include/tv.h +++ b/include/tv.h @@ -59,11 +59,11 @@ void SaveRecordedItemPurchasesForTVShow(void); bool8 ShouldAirFrontierTVShow(void); void sub_80EE8C8(u16 winStreak, u8 facilityAndMode); void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace); -void ContestLiveUpdates_BeforeInterview_1(u8 a0); -void ContestLiveUpdates_BeforeInterview_2(u8 a0); -void ContestLiveUpdates_BeforeInterview_3(u8 a0); -void ContestLiveUpdates_BeforeInterview_4(u16 a0); -void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1); +void ContestLiveUpdates_Init(u8 round1Placing); +void ContestLiveUpdates_SetRound2Placing(u8 round2Placing); +void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag); +void ContestLiveUpdates_SetWinnerMoveUsed(u16 move); +void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser); void ResetGabbyAndTy(void); #endif //GUARD_TV_H diff --git a/src/contest.c b/src/contest.c index 49b408a1a8..d734b9eb4d 100644 --- a/src/contest.c +++ b/src/contest.c @@ -2,12 +2,6 @@ #include "gpu_regs.h" #include "bg.h" #include "malloc.h" -#include "constants/items.h" -#include "constants/event_objects.h" -#include "constants/moves.h" -#include "constants/songs.h" -#include "constants/species.h" -#include "constants/flags.h" #include "battle.h" #include "battle_anim.h" #include "contest.h" @@ -42,8 +36,15 @@ #include "contest_link.h" #include "international_string_util.h" #include "data.h" -#include "constants/rgb.h" #include "contest_ai.h" +#include "constants/event_objects.h" +#include "constants/flags.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/tv.h" // This file's functions. static void LoadContestPalettes(void); @@ -113,7 +114,7 @@ static void SetBottomSliderHeartsInvisibility(bool8); static void CreateNextTurnSprites(void); static void CreateApplauseMeterSprite(void); static void CreateJudgeAttentionEyeTask(void); -static void sub_80DC7EC(void); +static void CreateUnusedBlendTask(void); static void ContestDebugDoPrint(void); static void DrawContestantWindows(void); static void ApplyNextTurnOrder(void); @@ -164,9 +165,9 @@ static void Task_UpdateAppealHearts(u8); static void SpriteCB_UpdateHeartSlider(struct Sprite *); static void Task_FlashJudgeAttentionEye(u8); static void Task_StopFlashJudgeAttentionEye(u8); -static void sub_80DC8D0(u8); -static void sub_80DC81C(u8); -static void sub_80DC87C(u8); +static void Task_UnusedBlend(u8); +static void InitUnusedBlendTaskData(u8); +static void UpdateBlendTaskContestantData(u8); static void SpriteCB_BlinkContestantBox(struct Sprite *); static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite); static u8 StartApplauseOverflowAnimation(void); @@ -183,9 +184,9 @@ static void Task_WaitRaiseCurtainAtRoundEnd(u8); static void Task_StartRaiseCurtainAtRoundEnd(u8); static void Task_WaitForSliderHeartAnim(u8); static void SetBattleTargetSpritePosition(void); -static void sub_80DF250(void); -static void sub_80DF4F8(void); -static void sub_80DF080(u8); +static void CalculateContestLiveUpdateData(void); +static void SetConestLiveUpdateTVData(void); +static void SetContestLiveUpdateFlags(u8); static void ContestDebugPrintBitStrings(void); static void StripPlayerNameForLinkContest(u8 *); static void StripMonNameForLinkContest(u8 *, s32); @@ -233,6 +234,13 @@ enum { STAT_SYMBOL_SQUARE, }; +enum { + CONTEST_DEBUG_MODE_OFF, + CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL, + CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS, + CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS +}; + #define MOVE_WINDOWS_START WIN_MOVE0 #define TAG_CONTEST_SYMBOLS_PAL 0xABE0 @@ -964,9 +972,9 @@ void LoadContestBgAfterMoveAnim(void) LoadContestPalettes(); for (i = 0; i < CONTESTANT_COUNT; i++) { - u32 contestantWindowId = MOVE_WINDOWS_START + i; + u32 contestantWindowId = 5 + i; - LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (MOVE_WINDOWS_START + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId]))); + LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId]))); } } @@ -1257,9 +1265,9 @@ static bool8 SetupContestGraphics(u8 *stateVar) case 5: LoadCompressedPalette(gOldContestPalette, 0, 0x200); CpuCopy32(gPlttBufferUnfaded + 128, tempPalette1, 16 * sizeof(u16)); - CpuCopy32(gPlttBufferUnfaded + (MOVE_WINDOWS_START + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16)); + CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16)); CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); - CpuCopy32(tempPalette1, gPlttBufferUnfaded + (MOVE_WINDOWS_START + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); + CpuCopy32(tempPalette1, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.cachedWindowPalettes, sizeof(eUnknownHeap1A004.cachedWindowPalettes)); LoadContestPalettes(); break; @@ -1272,7 +1280,7 @@ static bool8 SetupContestGraphics(u8 *stateVar) CreateNextTurnSprites(); CreateApplauseMeterSprite(); CreateJudgeAttentionEyeTask(); - sub_80DC7EC(); + CreateUnusedBlendTask(); gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT; @@ -1591,7 +1599,7 @@ static void Task_HideMoveSelectScreen(u8 taskId) gBattle_BG2_Y = 0; SetBottomSliderHeartsInvisibility(FALSE); - for (i = 0; i < CONTESTANT_COUNT; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { FillWindowPixelBuffer(MOVE_WINDOWS_START + i, PIXEL_FILL(0)); PutWindowTilemap(MOVE_WINDOWS_START + i); @@ -1751,7 +1759,7 @@ static void Task_DoAppeals(u8 taskId) gTasks[taskId].tState = APPEALSTATE_2; return; case APPEALSTATE_2: - sub_80DF080(contestant); + SetContestLiveUpdateFlags(contestant); ContestDebugPrintBitStrings(); if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) @@ -2170,8 +2178,8 @@ static void Task_DoAppeals(u8 taskId) case APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT: if (!Contest_RunTextPrinters()) { - UpdateAppealHearts(eContestantStatus[contestant].appeal2, -eContestantStatus[contestant].unk18, contestant); - eContestantStatus[contestant].appeal2 -= eContestantStatus[contestant].unk18; + UpdateAppealHearts(eContestantStatus[contestant].appeal2, -eContestantStatus[contestant].repeatJam, contestant); + eContestantStatus[contestant].appeal2 -= eContestantStatus[contestant].repeatJam; gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_REPEAT; } return; @@ -2659,8 +2667,8 @@ static void Task_EndAppeals(u8 taskId) BravoTrainerPokemonProfile_BeforeInterview1(eContestantStatus[gContestPlayerMonIndex].prevMove); else { - sub_80DF250(); - sub_80DF4F8(); + CalculateContestLiveUpdateData(); + SetConestLiveUpdateTVData(); ContestDebugPrintBitStrings(); } gContestRngValue = gRngValue; @@ -3990,7 +3998,7 @@ static void Task_StopFlashJudgeAttentionEye(u8 taskId) { gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0xFF; gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0; - BlendPalette((eContest.prevTurnOrder[contestant] + MOVE_WINDOWS_START) * 16 + 6, 2, 0, RGB(31, 31, 18)); + BlendPalette((eContest.prevTurnOrder[contestant] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); DestroyTask(taskId); } } @@ -4014,58 +4022,62 @@ static void Task_FlashJudgeAttentionEye(u8 taskId) || gTasks[taskId].data[offset + 0] == 0) gTasks[taskId].data[offset + 1] ^= 1; - BlendPalette( - (eContest.prevTurnOrder[i] + MOVE_WINDOWS_START) * 16 + 6, - 2, - gTasks[taskId].data[offset + 0], - RGB(31, 31, 18)); + BlendPalette((eContest.prevTurnOrder[i] + 5) * 16 + 6, 2, gTasks[taskId].data[offset + 0], RGB(31, 31, 18)); } } } -static void sub_80DC7EC(void) +// Note: While the below task is run for the entire Appeals portion of the contest, +// because data[i * 4] is always 0xFF it never does anything +// If turned on by setting that data between 0 and 16, it blends +// an odd selection of palette colors (e.g. the text box, the appeal hearts +// for only one contestant, the heart outlines in the move selection box, etc) +// Given the similarities, it's possible this was an incorrect attempt +// at something similar to what CreateJudgeAttentionEyeTask does +static void CreateUnusedBlendTask(void) { s32 i; - eContest.unk19212 = CreateTask(sub_80DC8D0, 30); + eContest.blendTaskId = CreateTask(Task_UnusedBlend, 30); for (i = 0; i < CONTESTANT_COUNT; i++) - sub_80DC81C(i); + InitUnusedBlendTaskData(i); } -static void sub_80DC81C(u8 contestant) +static void InitUnusedBlendTaskData(u8 contestant) { - gTasks[eContest.unk19212].data[contestant * 4 + 0] = 0xFF; - gTasks[eContest.unk19212].data[contestant * 4 + 1] = 0; + gTasks[eContest.blendTaskId].data[contestant * 4] = 0xFF; + gTasks[eContest.blendTaskId].data[contestant * 4 + 1] = 0; } -static void sub_80DC864(void) +static void UpdateBlendTaskContestantsData(void) { s32 i; for (i = 0; i < CONTESTANT_COUNT; i++) - sub_80DC87C(i); + UpdateBlendTaskContestantData(i); } -static void sub_80DC87C(u8 contestant) +static void UpdateBlendTaskContestantData(u8 contestant) { - u32 windowId1; - u32 windowId2; + u32 palOffset1; + u32 palOffset2; - sub_80DC81C(contestant); + InitUnusedBlendTaskData(contestant); - windowId1 = contestant + MOVE_WINDOWS_START; + palOffset1 = contestant + 5; DmaCopy16Defvars(3, - gPlttBufferUnfaded + windowId1 * 16 + 10, - gPlttBufferFaded + windowId1 * 16 + 10, + gPlttBufferUnfaded + palOffset1 * 16 + 10, + gPlttBufferFaded + palOffset1 * 16 + 10, 2); - windowId2 = (contestant + MOVE_WINDOWS_START) * 16 + 12 + contestant; + palOffset2 = (contestant + 5) * 16 + 12 + contestant; DmaCopy16Defvars(3, - gPlttBufferUnfaded + windowId2, - gPlttBufferFaded + windowId2, + gPlttBufferUnfaded + palOffset2, + gPlttBufferFaded + palOffset2, 2); } -static void sub_80DC8D0(u8 taskId) +// See comments on CreateUnusedBlendTask +static void Task_UnusedBlend(u8 taskId) { u8 i; @@ -4073,23 +4085,24 @@ static void sub_80DC8D0(u8 taskId) { u8 idx = i * 4; - if (gTasks[taskId].data[idx + 0] != 0xFF) + // Below is never true + if (gTasks[taskId].data[idx] != 0xFF) { if (++gTasks[taskId].data[idx + 2] > 2) { gTasks[taskId].data[idx + 2] = 0; if (gTasks[taskId].data[idx + 1] == 0) - gTasks[taskId].data[idx + 0]++; + gTasks[taskId].data[idx]++; else - gTasks[taskId].data[idx + 0]--; + gTasks[taskId].data[idx]--; - if (gTasks[taskId].data[idx + 0] == 16 - || gTasks[taskId].data[idx + 0] == 0) + if (gTasks[taskId].data[idx] == 16 + || gTasks[taskId].data[idx] == 0) gTasks[taskId].data[idx + 1] ^= 1; - BlendPalette((i + MOVE_WINDOWS_START) * 16 + 10, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); - BlendPalette((i + MOVE_WINDOWS_START) * 16 + 12 + i, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); + BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); + BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); } } } @@ -4241,8 +4254,8 @@ static void ContestDebugDoPrint(void) { case CONTEST_DEBUG_MODE_OFF: break; - case CONTEST_DEBUG_MODE_PRINT_UNK_C: - case CONTEST_DEBUG_MODE_PRINT_UNK_D: + case CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS: + case CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS: ContestDebugPrintBitStrings(); break; // The only other possible value is 1, which is only set by ContestDebugTogglePointTotal. @@ -4401,8 +4414,8 @@ static void DrawContestantWindows(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - s32 windowId = i + MOVE_WINDOWS_START; - LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + MOVE_WINDOWS_START) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0])); + s32 windowId = i + 5; + LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0])); } DrawContestantWindowText(); } @@ -4486,7 +4499,7 @@ static void CalculateAppealMoveImpact(u8 contestant) } } if (eContestantStatus[contestant].repeatedMove) - eContestantStatus[contestant].unk18 = (eContestantStatus[contestant].moveRepeatCount + 1) * 10; + eContestantStatus[contestant].repeatJam = (eContestantStatus[contestant].moveRepeatCount + 1) * 10; if (eContestantStatus[contestant].nervous) { @@ -5145,7 +5158,7 @@ static void Task_ResetForNextRound(u8 taskId) for (i = 0; i < CONTESTANT_COUNT; i++) eContest.prevTurnOrder[i] = gContestantTurnOrder[i]; FillContestantWindowBgs(); - sub_80DC864(); + UpdateBlendTaskContestantsData(); DrawConditionStars(); DrawContestantWindows(); ShowHideNextTurnGfx(TRUE); @@ -5393,12 +5406,12 @@ static void SetMoveTargetPosition(u16 move) } } -static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b) +static void Contest_PrintTextToBg0WindowStd(u32 windowId, const u8 *b) { struct TextPrinterTemplate printerTemplate; printerTemplate.currentChar = b; - printerTemplate.windowId = a; + printerTemplate.windowId = windowId; printerTemplate.fontId = 1; printerTemplate.x = 0; printerTemplate.y = 1; @@ -5412,7 +5425,7 @@ static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b) printerTemplate.shadowColor = 8; AddTextPrinter(&printerTemplate, 0, 0); - PutWindowTilemap(a); + PutWindowTilemap(windowId); Contest_SetBgCopyFlags(0); } @@ -5610,8 +5623,7 @@ void ClearContestWinnerPicsInContestHall(void) gSaveBlock1Ptr->contestWinners[i] = gUnknown_08587FA4[i]; } -// The functions below are probably related to Contests in TV. -static void sub_80DF080(u8 contestant) +static void SetContestLiveUpdateFlags(u8 contestant) { s32 i; @@ -5619,278 +5631,292 @@ static void sub_80DF080(u8 contestant) && eContestExcitement.moveExcitement > 0 && !eContestantStatus[contestant].repeatedMove) { - gContestResources->tv[contestant].unkC |= 1; - gContestResources->tv[contestant].unkE_2 = 1; + gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_EXCITING_APPEAL; + gContestResources->tv[contestant].madeExcitingAppeal = TRUE; } if (eContestantStatus[contestant].nervous) - gContestResources->tv[contestant].unkC |= 2; + gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_GOT_NERVOUS; if (!eContestExcitement.frozen && eContestExcitement.moveExcitement != 0 && eContestExcitement.excitementAppealBonus == 60) { - gContestResources->tv[contestant].unkC |= 4; + gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_MAXED_EXCITEMENT; } if (eContestantStatus[contestant].usedComboMove && eContestantStatus[contestant].completedCombo) { - gContestResources->tv[contestant].unkC |= 8; + gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_USED_COMBO; } for (i = 0; i < CONTESTANT_COUNT; i++) { if (i != contestant && eContestantStatus[i].jam != 0) { - gContestResources->tv[contestant].unkC |= 0x10; - gContestResources->tv[i].unkC |= 0x40; + gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_STARTLED_OTHER; + gContestResources->tv[i].winnerFlags |= CONTESTLIVE_FLAG_GOT_STARTLED; } } if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) { - gContestResources->tv[contestant].unkC |= 0x20; + gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_SKIPPED_TURN; } else if (!eContestantStatus[contestant].nervous) { - gContestResources->tv[contestant].unkC |= 0x80; - gContestResources->tv[contestant].unkE_1 = 1; - gContestResources->tv[contestant].unk0[eContest.appealNumber] = eContestantStatus[contestant].currMove; + gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_MADE_APPEAL; + gContestResources->tv[contestant].madeAppeal = TRUE; + gContestResources->tv[contestant].appeals[eContest.appealNumber] = eContestantStatus[contestant].currMove; } if (eContestantStatus[contestant].repeatedMove) - gContestResources->tv[contestant].unkD |= 2; + gContestResources->tv[contestant].loserFlags |= CONTESTLIVE_FLAG_REPEATED_MOVE; if (eContest.applauseLevel == 4 && !eContestExcitement.frozen && eContestExcitement.moveExcitement < 0) { - gContestResources->tv[contestant].unkD |= 0x20; + gContestResources->tv[contestant].loserFlags |= CONTESTLIVE_FLAG_MISSED_EXCITEMENT; } } -static void sub_80DF250(void) +static void CalculateContestLiveUpdateData(void) { - u8 r1; + u8 loser; s32 i, j; - bool32 r12, r8; - u16 sp0[6]; - u8 spC[6]; - u16 sp14[5]; - u8 var_38; - u8 r3; - u8 count; + bool32 notLastInRound1, notLastInRound2; + u16 appealMoves[CONTEST_NUM_APPEALS + 1]; + u8 numMoveUses[CONTEST_NUM_APPEALS + 1]; + u16 moveCandidates[CONTEST_NUM_APPEALS]; + u8 winner; + u8 mostUses; + u8 numMoveCandidates; - r1 = 0; - var_38 = 0; + loser = 0; + winner = 0; + // Get loser/winner ids for (i = 0; i < CONTESTANT_COUNT; i++) { if (gContestFinalStandings[i] == 0) - var_38 = i; - else if (gContestFinalStandings[i] == 3) - r1 = i; + winner = i; + else if (gContestFinalStandings[i] == CONTESTANT_COUNT - 1) + loser = i; } - gContestResources->tv[r1].unkD |= 1; + // Set flags for commenting on loser + gContestResources->tv[loser].loserFlags |= CONTESTLIVE_FLAG_LOST; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (i != var_38 && gContestMonTotalPoints[var_38] - gContestMonTotalPoints[i] <= 50) - gContestResources->tv[i].unkD |= 4; + if (i != winner && gContestMonTotalPoints[winner] - gContestMonTotalPoints[i] <= 50) + gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_LOST_SMALL_MARGIN; - if (!gContestResources->tv[i].unkE_2) - gContestResources->tv[i].unkD |= 8; + if (!gContestResources->tv[i].madeExcitingAppeal) + gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_NO_EXCITEMENT; for (j = 0; j < CONTESTANT_COUNT; j++) { if (gContestMonRound1Points[i] < gContestMonRound1Points[j]) break; } - if (j == 4 && gContestFinalStandings[i] != 0) - gContestResources->tv[i].unkD |= 0x10; + if (j == CONTESTANT_COUNT && gContestFinalStandings[i] != 0) + gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_BLEW_LEAD; - r12 = FALSE; - r8 = FALSE; + notLastInRound1 = FALSE; + notLastInRound2 = FALSE; for (j = 0; j < CONTESTANT_COUNT; j++) { if (gContestMonRound1Points[i] > gContestMonRound1Points[j]) - r12 = TRUE; + notLastInRound1 = TRUE; if (gContestMonRound2Points[i] > gContestMonRound2Points[j]) - r8 = TRUE; + notLastInRound2 = TRUE; } - if (!r12 && !r8) - gContestResources->tv[i].unkD |= 0x40; + if (!notLastInRound1 && !notLastInRound2) + gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS; - if (!gContestResources->tv[i].unkE_1) - gContestResources->tv[i].unkD |= 0x80; + if (!gContestResources->tv[i].madeAppeal) + gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_NO_APPEALS; } - for (i = 0; i < 5; i++) + // Get what moves the winner used and how many times they used them + for (i = 0; i < CONTEST_NUM_APPEALS; i++) { - sp0[i] = 0; - spC[i] = 0; + appealMoves[i] = MOVE_NONE; + numMoveUses[i] = 0; } - sp0[5] = 0xFFFF; - spC[5] = 0; + appealMoves[CONTEST_NUM_APPEALS] = 0xFFFF; + numMoveUses[CONTEST_NUM_APPEALS] = 0; - for (i = 0; i < 5; i++) + for (i = 0; i < CONTEST_NUM_APPEALS; i++) { - if (gContestResources->tv[var_38].unk0[i] != 0) + if (gContestResources->tv[winner].appeals[i] != MOVE_NONE) { - for (j = 0; j < 5; j++) + for (j = 0; j < CONTEST_NUM_APPEALS; j++) { - if (gContestResources->tv[var_38].unk0[i] != sp0[j]) + if (gContestResources->tv[winner].appeals[i] != appealMoves[j]) { - if (sp0[j] == 0) + if (appealMoves[j] == MOVE_NONE) { - sp0[j] = gContestResources->tv[var_38].unk0[i]; - spC[j]++; + appealMoves[j] = gContestResources->tv[winner].appeals[i]; + numMoveUses[j]++; } } else { - spC[j]++; + numMoveUses[j]++; } } } } - sp14[0] = sp0[0]; - r3 = spC[0]; - count = 0; - for (i = 1; sp0[i] != 0xFFFF; i++) + // Choose an appeal move to comment on for the winner (most commonly used) + moveCandidates[0] = appealMoves[0]; + mostUses = numMoveUses[0]; + numMoveCandidates = 0; + for (i = 1; appealMoves[i] != 0xFFFF; i++) { - if (r3 < spC[i]) + if (mostUses < numMoveUses[i]) { - sp14[0] = sp0[i]; - r3 = spC[i]; - count = 1; + moveCandidates[0] = appealMoves[i]; + mostUses = numMoveUses[i]; + numMoveCandidates = 1; } - else if (r3 == spC[i]) + else if (mostUses == numMoveUses[i]) { - sp14[count] = sp0[i]; - count++; + moveCandidates[numMoveCandidates] = appealMoves[i]; + numMoveCandidates++; } } - gContestResources->tv[var_38].unkA = sp14[Random() % count]; + gContestResources->tv[winner].move = moveCandidates[Random() % numMoveCandidates]; } -static void sub_80DF4F8(void) +static void SetConestLiveUpdateTVData(void) { s32 i; - u32 bits; - u8 r7; - u8 r9, r10; + u32 flags; + u8 winner; + u8 round1Placing, round2Placing; u8 count; - u8 r5; - u8 r2; - u16 var; - u8 r4; - u8 r6; - u8 sp0[4]; + u8 randAction; + u8 numLoserCandidates; + u8 flagId; + u16 winnerFlag; + u8 loserFlag; + u8 loser; + u8 loserCandidates[CONTESTANT_COUNT - 1]; + // Players mon didn't win, don't generate show if (gContestFinalStandings[gContestPlayerMonIndex] != 0) return; - r7 = 0; + // Get winner id (unnecessary, we now know it's gContestPlayerMonIndex) + winner = 0; for (i = 0; i < CONTESTANT_COUNT; i++) { if (gContestFinalStandings[i] == 0) - r7 = i; + winner = i; } - r9 = 0; - r10 = 0; + // Get winner's placement in Round 1 and 2 + round1Placing = 0; + round2Placing = 0; for (i = 0; i < CONTESTANT_COUNT; i++) { - if (gContestMonRound1Points[r7] < gContestMonRound1Points[i]) - r9++; - if (gContestMonRound2Points[r7] < gContestMonRound2Points[i]) - r10++; + if (gContestMonRound1Points[winner] < gContestMonRound1Points[i]) + round1Placing++; + if (gContestMonRound2Points[winner] < gContestMonRound2Points[i]) + round2Placing++; } - bits = gContestResources->tv[r7].unkC; + // Count how many TV comment-worthy actions the winner took + flags = gContestResources->tv[winner].winnerFlags; count = 0; - for (i = 0; i < 8; bits >>= 1, i++) + for (i = 0; i < 8; flags >>= 1, i++) { - if (bits & 1) + if (flags & 1) count++; } - r5 = Random() % count; - bits = gContestResources->tv[r7].unkC; + // Randomly choose one of these actions to comment on + randAction = Random() % count; + flags = gContestResources->tv[winner].winnerFlags; count = 0; - r2 = 0; - for (i = 0; i < 8; bits >>= 1, r2++, i++) + flagId = 0; + for (i = 0; i < 8; flags >>= 1, flagId++, i++) { - if (!(bits & 1)) + if (!(flags & 1)) continue; - if (r5 == count) + if (randAction == count) break; count++; } + winnerFlag = 1 << flagId; - var = 1 << r2; - if (r7 == 0) + // Pick a losing player with the highest severity of bad actions to comment on + if (winner == 0) { - sp0[0] = 1; - r4 = gContestResources->tv[1].unkD; + loserCandidates[0] = 1; + loserFlag = gContestResources->tv[1].loserFlags; i = 2; } else { - sp0[0] = 0; - r4 = gContestResources->tv[0].unkD; + loserCandidates[0] = 0; + loserFlag = gContestResources->tv[0].loserFlags; i = 1; } - r5 = 1; + numLoserCandidates = 1; for (; i < CONTESTANT_COUNT; i++) { - if (i != r7) + if (i != winner) { - if (r4 < gContestResources->tv[i].unkD) + if (loserFlag < gContestResources->tv[i].loserFlags) { - sp0[0] = i; - r4 = gContestResources->tv[i].unkD; - r5 = 1; + // Losing player currently has the worst (highest) set of flags, only candidate + loserCandidates[0] = i; + loserFlag = gContestResources->tv[i].loserFlags; + numLoserCandidates = 1; } - else if (r4 == gContestResources->tv[i].unkD) + else if (loserFlag == gContestResources->tv[i].loserFlags) { - sp0[r5] = i; - r5++; + // Tie, increment number of loser candidates + loserCandidates[numLoserCandidates] = i; + numLoserCandidates++; } } } + loser = loserCandidates[Random() % numLoserCandidates]; - r6 = sp0[Random() % r5]; - r2 = 0x80; - for (i = 0; i < 8; r2 >>= 1, i++) + // Choose the "worst" action to comment on (flag with highest value) + flagId = CONTESTLIVE_FLAG_NO_APPEALS; + for (i = 0; i < 8; flagId >>= 1, i++) { - r4 = gContestResources->tv[r6].unkD & r2; - if (r4) + loserFlag = gContestResources->tv[loser].loserFlags & flagId; + if (loserFlag) break; } - ContestLiveUpdates_BeforeInterview_1(r9); - ContestLiveUpdates_BeforeInterview_2(r10); - ContestLiveUpdates_BeforeInterview_3(var); - ContestLiveUpdates_BeforeInterview_4(gContestResources->tv[r7].unkA); - ContestLiveUpdates_BeforeInterview_5(r4, r6); + ContestLiveUpdates_Init(round1Placing); + ContestLiveUpdates_SetRound2Placing(round2Placing); + ContestLiveUpdates_SetWinnerAppealFlag(winnerFlag); + ContestLiveUpdates_SetWinnerMoveUsed(gContestResources->tv[winner].move); + ContestLiveUpdates_SetLoserData(loserFlag, loser); } // Unused -void ContestDebugToggleBitfields(bool8 showUnkD) +void ContestDebugToggleBitfields(bool8 loserFlags) { if (eContestDebugMode == CONTEST_DEBUG_MODE_OFF) { - if (!showUnkD) - eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_UNK_C; + if (!loserFlags) + eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS; else - eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_UNK_D; + eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS; } else { @@ -5920,19 +5946,19 @@ static void ContestDebugPrintBitStrings(void) if (!gEnableContestDebugging) return; - if (eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_UNK_C && eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_UNK_D) + if (eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS && eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS) return; for (i = 0; i < CONTESTANT_COUNT; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); - if (eContestDebugMode == CONTEST_DEBUG_MODE_PRINT_UNK_C) + if (eContestDebugMode == CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS) { for (i = 0; i < CONTESTANT_COUNT; i++) { txtPtr = StringCopy(text1, gText_CDot); Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1, 5, 1, 7); - bits = gContestResources->tv[i].unkC; + bits = gContestResources->tv[i].winnerFlags; for (j = 7; j > -1; j--) // Weird loop. { txtPtr = ConvertIntToDecimalStringN(txtPtr, bits & 1, STR_CONV_MODE_LEFT_ALIGN, 1); @@ -5947,12 +5973,12 @@ static void ContestDebugPrintBitStrings(void) Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1 + j, 55, 1, 7); } } - else + else // CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS { for (i = 0; i < CONTESTANT_COUNT; i++) { StringCopy(text1, gText_BDot); - bits = gContestResources->tv[i].unkD; + bits = gContestResources->tv[i].loserFlags; txtPtr = &text1[2]; for (j = 7; j > -1; j--) // Weird loop. { diff --git a/src/tv.c b/src/tv.c index b3722e87a2..a3458b72f1 100644 --- a/src/tv.c +++ b/src/tv.c @@ -387,39 +387,39 @@ static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = { }; static const u8 *const sTVContestLiveUpdatesTextGroup[] = { - gTVContestLiveUpdatesText00, - gTVContestLiveUpdatesText01, - gTVContestLiveUpdatesText02, - gTVContestLiveUpdatesText03, - gTVContestLiveUpdatesText04, - gTVContestLiveUpdatesText05, - gTVContestLiveUpdatesText06, - gTVContestLiveUpdatesText07, - gTVContestLiveUpdatesText08, - gTVContestLiveUpdatesText09, - gTVContestLiveUpdatesText10, - gTVContestLiveUpdatesText11, - gTVContestLiveUpdatesText12, - gTVContestLiveUpdatesText13, - gTVContestLiveUpdatesText14, - gTVContestLiveUpdatesText15, - gTVContestLiveUpdatesText16, - gTVContestLiveUpdatesText17, - gTVContestLiveUpdatesText18, - gTVContestLiveUpdatesText19, - gTVContestLiveUpdatesText20, - gTVContestLiveUpdatesText21, - gTVContestLiveUpdatesText22, - gTVContestLiveUpdatesText23, - gTVContestLiveUpdatesText24, - gTVContestLiveUpdatesText25, - gTVContestLiveUpdatesText26, - gTVContestLiveUpdatesText27, - gTVContestLiveUpdatesText28, - gTVContestLiveUpdatesText29, - gTVContestLiveUpdatesText30, - gTVContestLiveUpdatesText31, - gTVContestLiveUpdatesText32 + [CONTESTLIVE_STATE_INTRO] = ContestLiveUpdates_Text_Intro, + [CONTESTLIVE_STATE_WON_BOTH_ROUNDS] = ContestLiveUpdates_Text_WonBothRounds, + [CONTESTLIVE_STATE_BETTER_ROUND2] = ContestLiveUpdates_Text_BetterRound2, + [CONTESTLIVE_STATE_EQUAL_ROUNDS] = ContestLiveUpdates_Text_EqualRounds, + [CONTESTLIVE_STATE_BETTER_ROUND1] = ContestLiveUpdates_Text_BetterRound1, + [CONTESTLIVE_STATE_GOT_NERVOUS] = ContestLiveUpdates_Text_GotNervous, + [CONTESTLIVE_STATE_STARTLED_OTHER] = ContestLiveUpdates_Text_StartledFoes, + [CONTESTLIVE_STATE_USED_COMBO] = ContestLiveUpdates_Text_UsedCombo, + [CONTESTLIVE_STATE_EXCITING_APPEAL] = ContestLiveUpdates_Text_ExcitingAppeal, + [CONTESTLIVE_STATE_COOL] = ContestLiveUpdates_Text_WasCool, + [CONTESTLIVE_STATE_BEAUTIFUL] = ContestLiveUpdates_Text_WasBeautiful, + [CONTESTLIVE_STATE_CUTE] = ContestLiveUpdates_Text_WasCute, + [CONTESTLIVE_STATE_SMART] = ContestLiveUpdates_Text_WasSmart, + [CONTESTLIVE_STATE_TOUGH] = ContestLiveUpdates_Text_WasTough, + [CONTESTLIVE_STATE_VERY_EXCITING_APPEAL] = ContestLiveUpdates_Text_VeryExcitingAppeal, + [CONTESTLIVE_STATE_VERY_COOL] = ContestLiveUpdates_Text_VeryCool, + [CONTESTLIVE_STATE_VERY_BEAUTIFUL] = ContestLiveUpdates_Text_VeryBeautiful, + [CONTESTLIVE_STATE_VERY_CUTE] = ContestLiveUpdates_Text_VeryCute, + [CONTESTLIVE_STATE_VERY_SMART] = ContestLiveUpdates_Text_VerySmart, + [CONTESTLIVE_STATE_VERY_TOUGH] = ContestLiveUpdates_Text_VeryTough, + [CONTESTLIVE_STATE_TOOK_BREAK] = ContestLiveUpdates_Text_TookBreak, + [CONTESTLIVE_STATE_GOT_STARTLED] = ContestLiveUpdates_Text_GotStartled, + [CONTESTLIVE_STATE_USED_MOVE] = ContestLiveUpdates_Text_MoveWonderful, + [CONTESTLIVE_STATE_TALK_ABOUT_LOSER] = ContestLiveUpdates_Text_TalkAboutAnotherMon, + [CONTESTLIVE_STATE_NO_APPEALS] = ContestLiveUpdates_Text_FailedToAppeal, + [CONTESTLIVE_STATE_LAST_BOTH] = ContestLiveUpdates_Text_LastInBothRounds, + [CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH] = ContestLiveUpdates_Text_NotExcitingEnough, + [CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN] = ContestLiveUpdates_Text_LostAfterWinningRound1, + [CONTESTLIVE_STATE_NO_EXCITING_APPEALS] = ContestLiveUpdates_Text_NeverExciting, + [CONTESTLIVE_STATE_LOST_SMALL_MARGIN] = ContestLiveUpdates_Text_LostBySmallMargin, + [CONTESTLIVE_STATE_REPEATED_APPEALS] = ContestLiveUpdates_Text_RepeatedAppeals, + [CONTESTLIVE_STATE_LOST] = ContestLiveUpdates_Text_ValiantEffortButLost, + [CONTESTLIVE_STATE_OUTRO] = ContestLiveUpdates_Text_Outro }; static const u8 *const sTVPokemonBattleUpdateTextGroup[] = { @@ -1268,19 +1268,19 @@ static void InterviewAfter_ContestLiveUpdates(void) show2 = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot]; show2->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES; show2->contestLiveUpdates.active = TRUE; - StringCopy(show2->contestLiveUpdates.playerName, gSaveBlock2Ptr->playerName); + StringCopy(show2->contestLiveUpdates.winningTrainerName, gSaveBlock2Ptr->playerName); // Show only begins running if player won, so always load players name show2->contestLiveUpdates.category = gSpecialVar_ContestCategory; - show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL); - show2->contestLiveUpdates.winningSpecies = show->contestLiveUpdates.winningSpecies; - show2->contestLiveUpdates.appealFlags2 = show->contestLiveUpdates.appealFlags2; - show2->contestLiveUpdates.round1Rank = show->contestLiveUpdates.round1Rank; - show2->contestLiveUpdates.round2Rank = show->contestLiveUpdates.round2Rank; + show2->contestLiveUpdates.winningSpecies = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL); + show2->contestLiveUpdates.losingSpecies = show->contestLiveUpdates.losingSpecies; + show2->contestLiveUpdates.loserAppealFlag = show->contestLiveUpdates.loserAppealFlag; + show2->contestLiveUpdates.round1Placing = show->contestLiveUpdates.round1Placing; + show2->contestLiveUpdates.round2Placing = show->contestLiveUpdates.round2Placing; show2->contestLiveUpdates.move = show->contestLiveUpdates.move; - show2->contestLiveUpdates.appealFlags1 = show->contestLiveUpdates.appealFlags1; - StringCopy(show2->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerName); + show2->contestLiveUpdates.winnerAppealFlag = show->contestLiveUpdates.winnerAppealFlag; + StringCopy(show2->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerName); tv_store_id_2x(show2); - show2->contestLiveUpdates.language = gGameLanguage; - show2->contestLiveUpdates.winningTrainerLanguage = show->contestLiveUpdates.winningTrainerLanguage; + show2->contestLiveUpdates.winningTrainerLanguage = gGameLanguage; + show2->contestLiveUpdates.losingTrainerLanguage = show->contestLiveUpdates.losingTrainerLanguage; DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX); } } @@ -1399,7 +1399,7 @@ void PutFanClubSpecialOnTheAir(void) } } -void ContestLiveUpdates_BeforeInterview_1(u8 a0) +void ContestLiveUpdates_Init(u8 round1Placing) { TVShow *show; @@ -1408,12 +1408,12 @@ void ContestLiveUpdates_BeforeInterview_1(u8 a0) if (sCurTVShowSlot != -1) { show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX]; - show->contestLiveUpdates.round1Rank = a0; + show->contestLiveUpdates.round1Placing = round1Placing; show->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES; } } -void ContestLiveUpdates_BeforeInterview_2(u8 a0) +void ContestLiveUpdates_SetRound2Placing(u8 round2Placing) { TVShow *show; @@ -1421,11 +1421,11 @@ void ContestLiveUpdates_BeforeInterview_2(u8 a0) sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1) { - show->contestLiveUpdates.round2Rank = a0; + show->contestLiveUpdates.round2Placing = round2Placing; } } -void ContestLiveUpdates_BeforeInterview_3(u8 a0) +void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag) { TVShow *show; @@ -1433,11 +1433,11 @@ void ContestLiveUpdates_BeforeInterview_3(u8 a0) sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1) { - show->contestLiveUpdates.appealFlags1 = a0; + show->contestLiveUpdates.winnerAppealFlag = flag; } } -void ContestLiveUpdates_BeforeInterview_4(u16 a0) +void ContestLiveUpdates_SetWinnerMoveUsed(u16 move) { TVShow *show; @@ -1445,11 +1445,11 @@ void ContestLiveUpdates_BeforeInterview_4(u16 a0) sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1) { - show->contestLiveUpdates.move = a0; + show->contestLiveUpdates.move = move; } } -void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1) +void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser) { TVShow *show; @@ -1457,21 +1457,21 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1) sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1) { - show->contestLiveUpdates.winningSpecies = gContestMons[a1].species; - StringCopy(show->contestLiveUpdates.winningTrainerName, gContestMons[a1].trainerName); - StripExtCtrlCodes(show->contestLiveUpdates.winningTrainerName); - show->contestLiveUpdates.appealFlags2 = a0; - if (a1 + 1 > gNumLinkContestPlayers) + show->contestLiveUpdates.losingSpecies = gContestMons[loser].species; + StringCopy(show->contestLiveUpdates.losingTrainerName, gContestMons[loser].trainerName); + StripExtCtrlCodes(show->contestLiveUpdates.losingTrainerName); + show->contestLiveUpdates.loserAppealFlag = flag; + if (loser + 1 > gNumLinkContestPlayers) { - show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[0].language; + show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[0].language; } - else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[a1].language == LANGUAGE_JAPANESE) + else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[loser].language == LANGUAGE_JAPANESE) { - show->contestLiveUpdates.winningTrainerLanguage = LANGUAGE_JAPANESE; + show->contestLiveUpdates.losingTrainerLanguage = LANGUAGE_JAPANESE; } else { - show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[a1].language; + show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[loser].language; } } } @@ -3810,10 +3810,10 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans switch (gSaveBlock1Ptr->tvShows[i].common.kind) { case TVSHOW_CONTEST_LIVE_UPDATES: - j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.species; - sub_80F0B24(j, i); j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies; sub_80F0B24(j, i); + j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.losingSpecies; + sub_80F0B24(j, i); break; case TVSHOW_3_CHEERS_FOR_POKEBLOCKS: break; @@ -4307,8 +4307,8 @@ static void sub_80F12A4(TVShow *shows) curShow->bravoTrainerTower.pokemonNameLanguage = TV_GetStringLanguage(curShow->bravoTrainerTower.pokemonName); break; case TVSHOW_CONTEST_LIVE_UPDATES: - curShow->contestLiveUpdates.language = TV_GetStringLanguage(curShow->contestLiveUpdates.playerName); curShow->contestLiveUpdates.winningTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName); + curShow->contestLiveUpdates.losingTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.losingTrainerName); break; case TVSHOW_3_CHEERS_FOR_POKEBLOCKS: curShow->threeCheers.language = TV_GetStringLanguage(curShow->threeCheers.playerName); @@ -5173,6 +5173,12 @@ static void DoTVShowPokemonNewsMassOutbreak(void) ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]); } +// TV Show that plays after a Link Contest. +// First talks about the winner and something they did, then about a losing player and something they did +// The show is only generated when the player wins, but can be record mixed to other games +// Each state buffers any needed data for a message to print from sTVContestLiveUpdatesTextGroup +// Many cases in this function are identical, and its size can be reduced a good deal by collapsing them +// Can't get this to match while collapsing them though static void DoTVShowPokemonContestLiveUpdates(void) { TVShow *show; @@ -5183,339 +5189,338 @@ static void DoTVShowPokemonContestLiveUpdates(void) state = sTVShowState; switch (state) { - case 0: - BufferContestName(gStringVar1, show->contestLiveUpdates.category); - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language); - if (show->contestLiveUpdates.round1Rank == show->contestLiveUpdates.round2Rank) + case CONTESTLIVE_STATE_INTRO: + BufferContestName(gStringVar1, show->contestLiveUpdates.category); + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); + if (show->contestLiveUpdates.round1Placing == show->contestLiveUpdates.round2Placing) + { + if (show->contestLiveUpdates.round1Placing == 0) { - if (show->contestLiveUpdates.round1Rank == 0) - { - sTVShowState = 1; - } - else - { - sTVShowState = 3; - } - } - else if (show->contestLiveUpdates.round1Rank > show->contestLiveUpdates.round2Rank) - { - sTVShowState = 2; + sTVShowState = CONTESTLIVE_STATE_WON_BOTH_ROUNDS; } else { - sTVShowState = 4; + sTVShowState = CONTESTLIVE_STATE_EQUAL_ROUNDS; } + } + else if (show->contestLiveUpdates.round1Placing > show->contestLiveUpdates.round2Placing) + { + sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND2; + } + else + { + sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND1; + } + break; + case CONTESTLIVE_STATE_WON_BOTH_ROUNDS: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + switch (show->contestLiveUpdates.winnerAppealFlag) + { + case CONTESTLIVE_FLAG_EXCITING_APPEAL: + sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL; break; - case 1: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - switch (show->contestLiveUpdates.appealFlags1) - { - case 0x01: - sTVShowState = 8; - break; - case 0x02: - sTVShowState = 5; - break; - case 0x04: - sTVShowState = 14; - break; - case 0x08: - sTVShowState = 7; - break; - case 0x10: - sTVShowState = 6; - break; - case 0x20: - sTVShowState = 20; - break; - case 0x40: - sTVShowState = 21; - break; - case 0x80: - sTVShowState = 22; - break; - } + case CONTESTLIVE_FLAG_GOT_NERVOUS: + sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS; break; - case 2: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - switch (show->contestLiveUpdates.appealFlags1) - { - case 0x01: - sTVShowState = 8; - break; - case 0x02: - sTVShowState = 5; - break; - case 0x04: - sTVShowState = 14; - break; - case 0x08: - sTVShowState = 7; - break; - case 0x10: - sTVShowState = 6; - break; - case 0x20: - sTVShowState = 20; - break; - case 0x40: - sTVShowState = 21; - break; - case 0x80: - sTVShowState = 22; - break; - } + case CONTESTLIVE_FLAG_MAXED_EXCITEMENT: + sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL; break; - case 3: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language); - switch (show->contestLiveUpdates.appealFlags1) - { - case 0x01: - sTVShowState = 8; - break; - case 0x02: - sTVShowState = 5; - break; - case 0x04: - sTVShowState = 14; - break; - case 0x08: - sTVShowState = 7; - break; - case 0x10: - sTVShowState = 6; - break; - case 0x20: - sTVShowState = 20; - break; - case 0x40: - sTVShowState = 21; - break; - case 0x80: - sTVShowState = 22; - break; - } + case CONTESTLIVE_FLAG_USED_COMBO: + sTVShowState = CONTESTLIVE_STATE_USED_COMBO; break; - case 4: - switch (show->contestLiveUpdates.category) - { - case 0: - StringCopy(gStringVar1, gText_Cool); - break; - case 1: - StringCopy(gStringVar1, gText_Beauty); - break; - case 2: - StringCopy(gStringVar1, gText_Cute); - break; - case 3: - StringCopy(gStringVar1, gText_Smart); - break; - case 4: - StringCopy(gStringVar1, gText_Tough); - break; - } - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - switch (show->contestLiveUpdates.appealFlags1) - { - case 0x01: - sTVShowState = 8; - break; - case 0x02: - sTVShowState = 5; - break; - case 0x04: - sTVShowState = 14; - break; - case 0x08: - sTVShowState = 7; - break; - case 0x10: - sTVShowState = 6; - break; - case 0x20: - sTVShowState = 20; - break; - case 0x40: - sTVShowState = 21; - break; - case 0x80: - sTVShowState = 22; - break; - } + case CONTESTLIVE_FLAG_STARTLED_OTHER: + sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER; break; - case 5: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_SKIPPED_TURN: + sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK; break; - case 6: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_GOT_STARTLED: + sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED; break; - case 7: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_MADE_APPEAL: + sTVShowState = CONTESTLIVE_STATE_USED_MOVE; break; - case 8: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - switch (show->contestLiveUpdates.category) - { - case 0: - sTVShowState = 9; - break; - case 1: - sTVShowState = 10; - break; - case 2: - sTVShowState = 11; - break; - case 3: - sTVShowState = 12; - break; - case 4: - sTVShowState = 13; - break; - } + } + break; + case CONTESTLIVE_STATE_BETTER_ROUND2: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + switch (show->contestLiveUpdates.winnerAppealFlag) + { + case CONTESTLIVE_FLAG_EXCITING_APPEAL: + sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL; break; - case 9: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_GOT_NERVOUS: + sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS; break; - case 10: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_MAXED_EXCITEMENT: + sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL; break; - case 11: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_USED_COMBO: + sTVShowState = CONTESTLIVE_STATE_USED_COMBO; break; - case 12: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_STARTLED_OTHER: + sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER; break; - case 13: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_SKIPPED_TURN: + sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK; break; - case 14: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - switch (show->contestLiveUpdates.category) - { - case 0: - sTVShowState = 15; - break; - case 1: - sTVShowState = 16; - break; - case 2: - sTVShowState = 17; - break; - case 3: - sTVShowState = 18; - break; - case 4: - sTVShowState = 19; - break; - } + case CONTESTLIVE_FLAG_GOT_STARTLED: + sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED; break; - case 15: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_MADE_APPEAL: + sTVShowState = CONTESTLIVE_STATE_USED_MOVE; break; - case 16: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + } + break; + case CONTESTLIVE_STATE_EQUAL_ROUNDS: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); + switch (show->contestLiveUpdates.winnerAppealFlag) + { + case CONTESTLIVE_FLAG_EXCITING_APPEAL: + sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL; break; - case 17: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_GOT_NERVOUS: + sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS; break; - case 18: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_MAXED_EXCITEMENT: + sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL; break; - case 19: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_USED_COMBO: + sTVShowState = CONTESTLIVE_STATE_USED_COMBO; break; - case 20: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_STARTLED_OTHER: + sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER; break; - case 21: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_SKIPPED_TURN: + sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK; break; - case 22: - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]); - sTVShowState = 23; + case CONTESTLIVE_FLAG_GOT_STARTLED: + sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED; break; - case 23: - StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.species]); - TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); - StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); - switch (show->contestLiveUpdates.appealFlags2) - { - case 0x01: - sTVShowState = 31; - break; - case 0x02: - sTVShowState = 30; - break; - case 0x04: - sTVShowState = 29; - break; - case 0x08: - sTVShowState = 28; - break; - case 0x10: - sTVShowState = 27; - break; - case 0x20: - sTVShowState = 26; - break; - case 0x40: - sTVShowState = 25; - break; - case 0x80: - sTVShowState = 24; - break; - } + case CONTESTLIVE_FLAG_MADE_APPEAL: + sTVShowState = CONTESTLIVE_STATE_USED_MOVE; break; - case 24: - StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); - sTVShowState = 32; + } + break; + case CONTESTLIVE_STATE_BETTER_ROUND1: + switch (show->contestLiveUpdates.category) + { + case CONTEST_CATEGORY_COOL: + StringCopy(gStringVar1, gText_Cool); break; - case 25: - TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); - sTVShowState = 32; + case CONTEST_CATEGORY_BEAUTY: + StringCopy(gStringVar1, gText_Beauty); break; - case 28: - sTVShowState = 32; + case CONTEST_CATEGORY_CUTE: + StringCopy(gStringVar1, gText_Cute); break; - case 29: - TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language); - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); - sTVShowState = 32; + case CONTEST_CATEGORY_SMART: + StringCopy(gStringVar1, gText_Smart); break; - case 26: - case 27: - case 30: - case 31: - TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); - sTVShowState = 32; + case CONTEST_CATEGORY_TOUGH: + StringCopy(gStringVar1, gText_Tough); break; - case 32: - - TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language); - StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); - TVShowDone(); + } + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + switch (show->contestLiveUpdates.winnerAppealFlag) + { + case CONTESTLIVE_FLAG_EXCITING_APPEAL: + sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL; break; + case CONTESTLIVE_FLAG_GOT_NERVOUS: + sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS; + break; + case CONTESTLIVE_FLAG_MAXED_EXCITEMENT: + sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL; + break; + case CONTESTLIVE_FLAG_USED_COMBO: + sTVShowState = CONTESTLIVE_STATE_USED_COMBO; + break; + case CONTESTLIVE_FLAG_STARTLED_OTHER: + sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER; + break; + case CONTESTLIVE_FLAG_SKIPPED_TURN: + sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK; + break; + case CONTESTLIVE_FLAG_GOT_STARTLED: + sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED; + break; + case CONTESTLIVE_FLAG_MADE_APPEAL: + sTVShowState = CONTESTLIVE_STATE_USED_MOVE; + break; + } + break; + case CONTESTLIVE_STATE_GOT_NERVOUS: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_STARTLED_OTHER: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_USED_COMBO: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_EXCITING_APPEAL: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + switch (show->contestLiveUpdates.category) + { + case CONTEST_CATEGORY_COOL: + sTVShowState = CONTESTLIVE_STATE_COOL; + break; + case CONTEST_CATEGORY_BEAUTY: + sTVShowState = CONTESTLIVE_STATE_BEAUTIFUL; + break; + case CONTEST_CATEGORY_CUTE: + sTVShowState = CONTESTLIVE_STATE_CUTE; + break; + case CONTEST_CATEGORY_SMART: + sTVShowState = CONTESTLIVE_STATE_SMART; + break; + case CONTEST_CATEGORY_TOUGH: + sTVShowState = CONTESTLIVE_STATE_TOUGH; + break; + } + break; + case CONTESTLIVE_STATE_COOL: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_BEAUTIFUL: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_CUTE: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_SMART: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_TOUGH: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_VERY_EXCITING_APPEAL: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + switch (show->contestLiveUpdates.category) + { + case CONTEST_CATEGORY_COOL: + sTVShowState = CONTESTLIVE_STATE_VERY_COOL; + break; + case CONTEST_CATEGORY_BEAUTY: + sTVShowState = CONTESTLIVE_STATE_VERY_BEAUTIFUL; + break; + case CONTEST_CATEGORY_CUTE: + sTVShowState = CONTESTLIVE_STATE_VERY_CUTE; + break; + case CONTEST_CATEGORY_SMART: + sTVShowState = CONTESTLIVE_STATE_VERY_SMART; + break; + case CONTEST_CATEGORY_TOUGH: + sTVShowState = CONTESTLIVE_STATE_VERY_TOUGH; + break; + } + break; + case CONTESTLIVE_STATE_VERY_COOL: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_VERY_BEAUTIFUL: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_VERY_CUTE: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_VERY_SMART: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_VERY_TOUGH: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_TOOK_BREAK: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_GOT_STARTLED: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_USED_MOVE: + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]); + sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER; + break; + case CONTESTLIVE_STATE_TALK_ABOUT_LOSER: + StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage); + StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.losingSpecies]); + switch (show->contestLiveUpdates.loserAppealFlag) + { + case CONTESTLIVE_FLAG_LOST: + sTVShowState = CONTESTLIVE_STATE_LOST; + break; + case CONTESTLIVE_FLAG_REPEATED_MOVE: + sTVShowState = CONTESTLIVE_STATE_REPEATED_APPEALS; + break; + case CONTESTLIVE_FLAG_LOST_SMALL_MARGIN: + sTVShowState = CONTESTLIVE_STATE_LOST_SMALL_MARGIN; + break; + case CONTESTLIVE_FLAG_NO_EXCITEMENT: + sTVShowState = CONTESTLIVE_STATE_NO_EXCITING_APPEALS; + break; + case CONTESTLIVE_FLAG_BLEW_LEAD: + sTVShowState = CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN; + break; + case CONTESTLIVE_FLAG_MISSED_EXCITEMENT: + sTVShowState = CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH; + break; + case CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS: + sTVShowState = CONTESTLIVE_STATE_LAST_BOTH; + break; + case CONTESTLIVE_FLAG_NO_APPEALS: + sTVShowState = CONTESTLIVE_STATE_NO_APPEALS; + break; + } + break; + case CONTESTLIVE_STATE_NO_APPEALS: + StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.losingSpecies]); + sTVShowState = CONTESTLIVE_STATE_OUTRO; + break; + case CONTESTLIVE_STATE_LAST_BOTH: + TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage); + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.losingSpecies]); + sTVShowState = CONTESTLIVE_STATE_OUTRO; + break; + case CONTESTLIVE_STATE_NO_EXCITING_APPEALS: + sTVShowState = CONTESTLIVE_STATE_OUTRO; + break; + case CONTESTLIVE_STATE_LOST_SMALL_MARGIN: + TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage); + sTVShowState = CONTESTLIVE_STATE_OUTRO; + break; + case CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH: + case CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN: + case CONTESTLIVE_STATE_REPEATED_APPEALS: + case CONTESTLIVE_STATE_LOST: + TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage); + sTVShowState = CONTESTLIVE_STATE_OUTRO; + break; + case CONTESTLIVE_STATE_OUTRO: + TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage); + StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]); + TVShowDone(); + break; } ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]); } From 2749948eebe65aa8b55738d820e4a0252dd45c1a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 16 Aug 2020 05:52:17 -0400 Subject: [PATCH 67/85] Clean up contest doc --- data/contest_ai_scripts.s | 6 +- include/constants/contest.h | 27 ----- include/contest.h | 22 ++-- src/contest.c | 201 ++++++++++++++++++----------------- src/contest_effect.c | 40 +++---- src/data/contest_opponents.h | 36 +++---- 6 files changed, 152 insertions(+), 180 deletions(-) diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index 4938a8c93c..4a0bed8175 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -6,8 +6,6 @@ .section script_data, "aw", %progbits -@ TODO - enum_start enum MON_1 enum MON_2 @@ -52,7 +50,7 @@ gContestAIChecks:: @ 82DE350 @ Unreferenced AI routine to encourage moves that improve condition on the first @ appeal. Additionally, it checks the turn order of the user and the effect -@ type, but the code is buggy and doesnt affect the score. +@ type, but the code is buggy and doesn't affect the score. if_appeal_num_not_eq 0, ContestUnreferenced_80 if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80 score +10 @@ -67,7 +65,7 @@ ContestUnreferenced_0D: ContestUnreferenced_end: end -@ Unreferenced AI routine that doesnt make much sense. +@ Unreferenced AI routine that doesn't make much sense. if_appeal_num_eq 0, ContestUnreferenced_0F_1 if_appeal_num_eq 1, ContestUnreferenced_0F_2 if_appeal_num_eq 2, ContestUnreferenced_0F_3 diff --git a/include/constants/contest.h b/include/constants/contest.h index a10354169b..5ec4c4f694 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -52,33 +52,6 @@ #define CONTEST_AI_CHECK_ORDER (1 << 4) #define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5) #define CONTEST_AI_ERRATIC (1 << 6) -#define CONTEST_AI_DUMMY_1 (1 << 7) -#define CONTEST_AI_DUMMY_2 (1 << 8) -#define CONTEST_AI_DUMMY_3 (1 << 9) -#define CONTEST_AI_DUMMY_4 (1 << 10) -#define CONTEST_AI_DUMMY_5 (1 << 11) -#define CONTEST_AI_DUMMY_6 (1 << 12) -#define CONTEST_AI_DUMMY_7 (1 << 13) -#define CONTEST_AI_DUMMY_8 (1 << 14) -#define CONTEST_AI_DUMMY_9 (1 << 15) -#define CONTEST_AI_DUMMY_10 (1 << 16) -#define CONTEST_AI_DUMMY_11 (1 << 17) -#define CONTEST_AI_DUMMY_12 (1 << 18) -#define CONTEST_AI_DUMMY_13 (1 << 19) -#define CONTEST_AI_DUMMY_14 (1 << 20) -#define CONTEST_AI_DUMMY_15 (1 << 21) -#define CONTEST_AI_DUMMY_16 (1 << 22) -#define CONTEST_AI_DUMMY_17 (1 << 23) -#define CONTEST_AI_DUMMY_18 (1 << 24) -#define CONTEST_AI_DUMMY_19 (1 << 25) -#define CONTEST_AI_DUMMY_20 (1 << 26) -#define CONTEST_AI_DUMMY_21 (1 << 27) -#define CONTEST_AI_DUMMY_22 (1 << 28) -#define CONTEST_AI_DUMMY_23 (1 << 29) -#define CONTEST_AI_DUMMY_24 (1 << 30) -#define CONTEST_AI_DUMMY_25 (1 << 31) -#define CONTEST_AI_ALL (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC) -#define CONTEST_AI_DUMMIES_1 (CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5) #define CONTEST_EFFECT_HIGHLY_APPEALING 0 #define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1 diff --git a/include/contest.h b/include/contest.h index 834aba4024..e4cda6e259 100644 --- a/include/contest.h +++ b/include/contest.h @@ -127,11 +127,11 @@ struct Contest { u8 playerMoveChoice; u8 appealNumber; - u8 unused2[CONTESTANT_COUNT]; - bool16 unk1920A_0:1; // Task active flags? - bool16 unk1920A_1:1; - bool16 unk1920A_2:1; - bool16 unk1920A_3:1; + u8 unk[CONTESTANT_COUNT]; // never read + bool16 unused1:1; + bool16 unused2:1; + bool16 unused3:1; + bool16 unused4:1; bool16 waitForJudgeSpeechBubble:1; bool16 isShowingApplauseMeter:1; bool16 applauseMeterIsMoving:1; @@ -140,10 +140,10 @@ struct Contest bool16 sliderHeartsAnimating:1; // When the slider heart is appearing/disappearing bool16 waitForLink:1; u8 mainTaskId; - u8 unk1920D[4]; + u8 filler1[4]; u8 judgeAttentionTaskId; u8 blendTaskId; - u8 filler19213; + u8 filler2; u8 turnNumber; u8 currentContestant; u8 judgeSpeechBubbleSpriteId; @@ -159,8 +159,8 @@ struct Contest struct ContestantStatus { - s16 appeal1; // move appeal? - s16 appeal2; // final appeal after end of turn, maybe? + s16 baseAppeal; + s16 appeal; s16 pointTotal; u16 currMove; u16 prevMove; @@ -264,8 +264,8 @@ struct ContestTV s16 move; u8 winnerFlags; u8 loserFlags; - u8 madeAppeal:1; - u8 madeExcitingAppeal:1; + bool8 madeAppeal:1; + bool8 madeExcitingAppeal:1; }; struct ContestUnused diff --git a/src/contest.c b/src/contest.c index d734b9eb4d..97d9cfda7d 100644 --- a/src/contest.c +++ b/src/contest.c @@ -79,7 +79,7 @@ static void Task_ReadyUpdateHeartSliders(u8); static void Task_UpdateHeartSliders(u8); static void Task_WaitForHeartSliders(u8); static void sub_80DA348(u8); -static void sub_80DA38C(u8); +static void Task_WaitPrintRoundResult(u8); static void Task_PrintRoundResultText(u8); static void Task_ReUpdateHeartSliders(u8); static void Task_WaitForHeartSlidersAgain(u8); @@ -267,6 +267,70 @@ enum { SLIDER_HEART_ANIM_APPEAR, }; +// States for Task_DoAppeals +enum { + APPEALSTATE_START_TURN, + APPEALSTATE_WAIT_LINK, + APPEALSTATE_CHECK_SKIP_TURN, + APPEALSTATE_SLIDE_MON_IN, + APPEALSTATE_WAIT_SLIDE_MON, + APPEALSTATE_PRINT_USED_MOVE_MSG, + APPEALSTATE_WAIT_USED_MOVE_MSG, + APPEALSTATE_MOVE_ANIM, + APPEALSTATE_WAIT_MOVE_ANIM, + APPEALSTATE_MOVE_ANIM_MULTITURN, + APPEALSTATE_SLIDE_MON_OUT, + APPEALSTATE_FREE_MON_SPRITE, + APPEALSTATE_UPDATE_MOVE_USERS_HEARTS, + APPEALSTATE_WAIT_MOVE_USERS_HEARTS, + APPEALSTATE_PRINT_COMBO_MSG, + APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO, + APPEALSTATE_WAIT_HEARTS_FROM_COMBO, + APPEALSTATE_CHECK_REPEATED_MOVE, + APPEALSTATE_WAIT_HEARTS_FROM_REPEAT, + APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT, + APPEALSTATE_START_TURN_END_DELAY, + APPEALSTATE_TURN_END_DELAY, + APPEALSTATE_START_NEXT_TURN, + APPEALSTATE_TRY_PRINT_MOVE_RESULT, + APPEALSTATE_WAIT_MOVE_RESULT_MSG, + APPEALSTATE_UPDATE_OPPONENTS, + APPEALSTATE_UPDATE_OPPONENT, + APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG, + APPEALSTATE_UPDATE_OPPONENT_HEARTS, + APPEALSTATE_WAIT_OPPONENT_HEARTS, + APPEALSTATE_UPDATE_OPPONENT_STATUS, + APPEALSTATE_PRINT_SKIP_TURN_MSG, + APPEALSTATE_WAIT_SKIP_TURN_MSG, + APPEALSTATE_PRINT_TOO_NERVOUS_MSG, + APPEALSTATE_WAIT_TOO_NERVOUS_MSG, + APPEALSTATE_TRY_JUDGE_STAR, + APPEALSTATE_WAIT_JUDGE_STAR, + APPEALSTATE_UPDATE_MOVE_USERS_STARS, + APPEALSTATE_WAIT_MOVE_USERS_STARS, + APPEALSTATE_UPDATE_OPPONENT_STARS, + APPEALSTATE_WAIT_OPPONENT_STARS, + APPEALSTATE_UPDATE_CROWD, + APPEALSTATE_42, // Unused state + APPEALSTATE_WAIT_EXCITEMENT_HEARTS, + APPEALSTATE_44, // Unused state + APPEALSTATE_WAIT_JUDGE_COMBO, + APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE, + APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX, + APPEALSTATE_CHECK_TURN_ORDER_MOD, + APPEALSTATE_WAIT_JUDGE_TURN_ORDER, + APPEALSTATE_UPDATE_MOVE_USERS_STATUS, + APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG, + APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG, + APPEALSTATE_DO_CROWD_UNEXCITED, + APPEALSTATE_DO_CROWD_EXCITED, + APPEALSTATE_SLIDE_APPLAUSE_OUT, + APPEALSTATE_WAIT_SLIDE_APPLAUSE, + APPEALSTATE_PRINT_CROWD_WATCHES_MSG, + APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG, + APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG, +}; + // EWRAM vars. EWRAM_DATA struct ContestPokemon gContestMons[CONTESTANT_COUNT] = {0}; EWRAM_DATA s16 gContestMonRound1Points[CONTESTANT_COUNT] = {0}; // "Round 1" points are based on condition @@ -1023,7 +1087,7 @@ static void InitContestResources(void) eContest = (struct Contest){}; for (i = 0; i < CONTESTANT_COUNT; i++) { - eContest.unused2[i] = 0xFF; + eContest.unk[i] = 0xFF; } for (i = 0; i < CONTESTANT_COUNT; i++) { @@ -1163,7 +1227,7 @@ static void Task_StartContestWaitFade(u8 taskId) } } -// If this is a link contest try to start communication +// If this is a link contest try to start appeals communication // Otherwise skip ahead static void Task_TryStartLinkContest(u8 taskId) { @@ -1634,69 +1698,6 @@ static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId) gTasks[taskId].func = Task_AppealSetup; } -enum { - APPEALSTATE_START_TURN, - APPEALSTATE_1, - APPEALSTATE_2, - APPEALSTATE_SLIDE_MON_IN, - APPEALSTATE_WAIT_SLIDE_MON, - APPEALSTATE_PRINT_USED_MOVE_MSG, - APPEALSTATE_WAIT_USED_MOVE_MSG, - APPEALSTATE_MOVE_ANIM, - APPEALSTATE_WAIT_MOVE_ANIM, - APPEALSTATE_MOVE_ANIM_MULTITURN, - APPEALSTATE_SLIDE_MON_OUT, - APPEALSTATE_FREE_MON_SPRITE, - APPEALSTATE_UPDATE_MOVE_USERS_HEARTS, - APPEALSTATE_WAIT_MOVE_USERS_HEARTS, - APPEALSTATE_PRINT_COMBO_MSG, - APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO, - APPEALSTATE_WAIT_HEARTS_FROM_COMBO, - APPEALSTATE_CHECK_REPEATED_MOVE, - APPEALSTATE_WAIT_HEARTS_FROM_REPEAT, - APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT, - APPEALSTATE_START_TURN_END_DELAY, - APPEALSTATE_TURN_END_DELAY, - APPEALSTATE_START_NEXT_TURN, - APPEALSTATE_TRY_PRINT_MOVE_RESULT, - APPEALSTATE_WAIT_MOVE_RESULT_MSG, - APPEALSTATE_UPDATE_OPPONENTS, - APPEALSTATE_UPDATE_OPPONENT, - APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG, - APPEALSTATE_UPDATE_OPPONENT_HEARTS, - APPEALSTATE_WAIT_OPPONENT_HEARTS, - APPEALSTATE_UPDATE_OPPONENT_STATUS, - APPEALSTATE_PRINT_SKIP_TURN_MSG, - APPEALSTATE_WAIT_SKIP_TURN_MSG, - APPEALSTATE_PRINT_TOO_NERVOUS_MSG, - APPEALSTATE_WAIT_TOO_NERVOUS_MSG, - APPEALSTATE_TRY_JUDGE_STAR, - APPEALSTATE_WAIT_JUDGE_STAR, - APPEALSTATE_UPDATE_MOVE_USERS_STARS, - APPEALSTATE_WAIT_MOVE_USERS_STARS, - APPEALSTATE_UPDATE_OPPONENT_STARS, - APPEALSTATE_WAIT_OPPONENT_STARS, - APPEALSTATE_UPDATE_CROWD, - APPEALSTATE_42, // Unused state - APPEALSTATE_WAIT_EXCITEMENT_HEARTS, - APPEALSTATE_44, // Unused state - APPEALSTATE_WAIT_JUDGE_COMBO, - APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE, - APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX, - APPEALSTATE_CHECK_TURN_ORDER_MOD, - APPEALSTATE_WAIT_JUDGE_TURN_ORDER, - APPEALSTATE_UPDATE_MOVE_USERS_STATUS, - APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG, - APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG, - APPEALSTATE_DO_CROWD_UNEXCITED, - APPEALSTATE_DO_CROWD_EXCITED, - APPEALSTATE_SLIDE_APPLAUSE_OUT, - APPEALSTATE_WAIT_SLIDE_APPLAUSE, - APPEALSTATE_PRINT_CROWD_WATCHES_MSG, - APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG, - APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG, -}; - #define tState data[0] #define tMonSpriteId data[2] #define tCounter data[10] @@ -1746,19 +1747,19 @@ static void Task_DoAppeals(u8 taskId) taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); - gTasks[taskId].tState = APPEALSTATE_1; + gTasks[taskId].tState = APPEALSTATE_WAIT_LINK; } else { CalculateAppealMoveImpact(eContest.currentContestant); - gTasks[taskId].tState = APPEALSTATE_2; + gTasks[taskId].tState = APPEALSTATE_CHECK_SKIP_TURN; } return; - case APPEALSTATE_1: + case APPEALSTATE_WAIT_LINK: if (!eContest.waitForLink) - gTasks[taskId].tState = APPEALSTATE_2; + gTasks[taskId].tState = APPEALSTATE_CHECK_SKIP_TURN; return; - case APPEALSTATE_2: + case APPEALSTATE_CHECK_SKIP_TURN: SetContestLiveUpdateFlags(contestant); ContestDebugPrintBitStrings(); if (eContestantStatus[contestant].numTurnsSkipped != 0 @@ -1927,7 +1928,7 @@ static void Task_DoAppeals(u8 taskId) gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_HEARTS; return; case APPEALSTATE_UPDATE_MOVE_USERS_HEARTS: - UpdateAppealHearts(0, eContestantStatus[contestant].appeal2, contestant); + UpdateAppealHearts(0, eContestantStatus[contestant].appeal, contestant); gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_HEARTS; return; case APPEALSTATE_WAIT_MOVE_USERS_HEARTS: @@ -2018,7 +2019,7 @@ static void Task_DoAppeals(u8 taskId) case APPEALSTATE_UPDATE_OPPONENT_HEARTS: for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - UpdateAppealHearts(eContestantStatus[i].appeal2 + eContestantStatus[i].jam, -eContestantStatus[i].jam, i); + UpdateAppealHearts(eContestantStatus[i].appeal + eContestantStatus[i].jam, -eContestantStatus[i].jam, i); gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_HEARTS; return; case APPEALSTATE_WAIT_OPPONENT_HEARTS: @@ -2139,10 +2140,10 @@ static void Task_DoAppeals(u8 taskId) if (!eContestantStatus[contestant].hasJudgesAttention) { UpdateAppealHearts( - eContestantStatus[contestant].appeal2, + eContestantStatus[contestant].appeal, eContestantStatus[contestant].comboAppealBonus, contestant); - eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].comboAppealBonus; + eContestantStatus[contestant].appeal += eContestantStatus[contestant].comboAppealBonus; } gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_COMBO; } @@ -2178,8 +2179,8 @@ static void Task_DoAppeals(u8 taskId) case APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT: if (!Contest_RunTextPrinters()) { - UpdateAppealHearts(eContestantStatus[contestant].appeal2, -eContestantStatus[contestant].repeatJam, contestant); - eContestantStatus[contestant].appeal2 -= eContestantStatus[contestant].repeatJam; + UpdateAppealHearts(eContestantStatus[contestant].appeal, -eContestantStatus[contestant].repeatJam, contestant); + eContestantStatus[contestant].appeal -= eContestantStatus[contestant].repeatJam; gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_REPEAT; } return; @@ -2301,8 +2302,8 @@ static void Task_DoAppeals(u8 taskId) if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - UpdateAppealHearts(eContestantStatus[contestant].appeal2, eContestExcitement.excitementAppealBonus, contestant); - eContestantStatus[contestant].appeal2 += eContestExcitement.excitementAppealBonus; + UpdateAppealHearts(eContestantStatus[contestant].appeal, eContestExcitement.excitementAppealBonus, contestant); + eContestantStatus[contestant].appeal += eContestExcitement.excitementAppealBonus; gTasks[taskId].tCounter++; } } @@ -2560,10 +2561,10 @@ static void sub_80DA348(u8 taskId) DmaCopy32Defvars(3, eUnknownHeap1A004.unk18204, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 2; - gTasks[taskId].func = sub_80DA38C; + gTasks[taskId].func = Task_WaitPrintRoundResult; } -static void sub_80DA38C(u8 taskId) +static void Task_WaitPrintRoundResult(u8 taskId) { if (++gTasks[taskId].data[0] > 2) { @@ -3416,7 +3417,7 @@ static void RankContestants(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - eContestantStatus[i].pointTotal += eContestantStatus[i].appeal2; + eContestantStatus[i].pointTotal += eContestantStatus[i].appeal; arr[i] = eContestantStatus[i].pointTotal; } @@ -3467,13 +3468,13 @@ static void SetAttentionLevels(void) if (eContestantStatus[i].currMove == MOVE_NONE) attentionLevel = 5; - else if (eContestantStatus[i].appeal2 <= 0) + else if (eContestantStatus[i].appeal <= 0) attentionLevel = 0; - else if (eContestantStatus[i].appeal2 < 30) + else if (eContestantStatus[i].appeal < 30) attentionLevel = 1; - else if (eContestantStatus[i].appeal2 < 60) + else if (eContestantStatus[i].appeal < 60) attentionLevel = 2; - else if (eContestantStatus[i].appeal2 < 80) + else if (eContestantStatus[i].appeal < 80) attentionLevel = 3; else attentionLevel = 4; @@ -3496,8 +3497,8 @@ static void ResetContestantStatuses(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - eContestantStatus[i].appeal2 = 0; - eContestantStatus[i].appeal1 = 0; + eContestantStatus[i].appeal = 0; + eContestantStatus[i].baseAppeal = 0; eContestantStatus[i].jamSafetyCount = 0; if (eContestantStatus[i].numTurnsSkipped > 0) eContestantStatus[i].numTurnsSkipped--; @@ -4278,9 +4279,9 @@ static void ContestDebugDoPrint(void) } for (i = 0; i < CONTESTANT_COUNT; i++) { - value = eContestantStatus[i].appeal2; + value = eContestantStatus[i].appeal; txtPtr = text; - if (eContestantStatus[i].appeal2 < 0) + if (eContestantStatus[i].appeal < 0) { value *= -1; txtPtr = StringCopy(txtPtr, gText_OneDash); @@ -4428,8 +4429,8 @@ static void CalculateAppealMoveImpact(u8 contestant) bool8 canUseTurn; s32 i; - eContestantStatus[contestant].appeal2 = 0; - eContestantStatus[contestant].appeal1 = 0; + eContestantStatus[contestant].appeal = 0; + eContestantStatus[contestant].baseAppeal = 0; if (!ContestantCanUseTurn(contestant)) return; @@ -4446,8 +4447,8 @@ static void CalculateAppealMoveImpact(u8 contestant) { eContestantStatus[contestant].moveRepeatCount = 0; } - eContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal; - eContestantStatus[contestant].appeal2 = eContestantStatus[contestant].appeal1; + eContestantStatus[contestant].baseAppeal = gContestEffects[effect].appeal; + eContestantStatus[contestant].appeal = eContestantStatus[contestant].baseAppeal; eContestAppealResults.jam = gContestEffects[effect].jam; eContestAppealResults.jam2 = eContestAppealResults.jam; @@ -4465,11 +4466,11 @@ static void CalculateAppealMoveImpact(u8 contestant) gContestEffectFuncs[effect](); if (eContestantStatus[contestant].conditionMod == 1) - eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition - 10; + eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition - 10; else if (eContestantStatus[contestant].appealTripleCondition) - eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition * 3; + eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition * 3; else - eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition; + eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition; eContestantStatus[contestant].completedCombo = FALSE; eContestantStatus[contestant].usedComboMove = FALSE; @@ -4482,7 +4483,7 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].completedCombo = completedCombo; eContestantStatus[contestant].usedComboMove = TRUE; eContestantStatus[contestant].hasJudgesAttention = FALSE; - eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].completedCombo; + eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].unk15_3 = TRUE; } else @@ -4504,8 +4505,8 @@ static void CalculateAppealMoveImpact(u8 contestant) if (eContestantStatus[contestant].nervous) { eContestantStatus[contestant].hasJudgesAttention = FALSE; - eContestantStatus[contestant].appeal2 = 0; - eContestantStatus[contestant].appeal1 = 0; + eContestantStatus[contestant].appeal = 0; + eContestantStatus[contestant].baseAppeal = 0; } eContestExcitement.moveExcitement = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove); if (eContestantStatus[contestant].overrideCategoryExcitementMod) diff --git a/src/contest_effect.c b/src/contest_effect.c index cba9b97450..037da5e11d 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -520,7 +520,7 @@ static void ContestEffect_BetterIfFirst(void) if (gContestantTurnOrder[eContestAppealResults.contestant] == 0) { u16 move = eContestantStatus[eContestAppealResults.contestant].currMove; - eContestantStatus[eContestAppealResults.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; + eContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HUSTLE_STANDOUT); } } @@ -531,7 +531,7 @@ static void ContestEffect_BetterIfLast(void) if (gContestantTurnOrder[eContestAppealResults.contestant] == 3) { u16 move = eContestantStatus[eContestAppealResults.contestant].currMove; - eContestantStatus[eContestAppealResults.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; + eContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED); } } @@ -545,7 +545,7 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void) for (i = 0, appealSum = 0; i < CONTESTANT_COUNT; i++) { if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) - appealSum += eContestantStatus[i].appeal2; + appealSum += eContestantStatus[i].appeal; } if (appealSum < 0) appealSum = 0; @@ -556,10 +556,10 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void) } else { - eContestantStatus[eContestAppealResults.contestant].appeal2 += appealSum / 2; + eContestantStatus[eContestAppealResults.contestant].appeal += appealSum / 2; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_BEFORE); } - eContestantStatus[eContestAppealResults.contestant].appeal2 = RoundTowardsZero(eContestantStatus[eContestAppealResults.contestant].appeal2); + eContestantStatus[eContestAppealResults.contestant].appeal = RoundTowardsZero(eContestantStatus[eContestAppealResults.contestant].appeal); } // Makes the appeal as good as the one before it. @@ -573,7 +573,7 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void) for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) - appeal = eContestantStatus[i].appeal2; + appeal = eContestantStatus[i].appeal; } } if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appeal <= 0) @@ -582,7 +582,7 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void) } else { - eContestantStatus[eContestAppealResults.contestant].appeal2 += appeal; + eContestantStatus[eContestAppealResults.contestant].appeal += appeal; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_PRECEDING); } } @@ -592,9 +592,9 @@ static void ContestEffect_BetterWhenLater(void) { u8 whichTurn = eContestAppealResults.turnOrder[eContestAppealResults.contestant]; if (whichTurn == 0) - eContestantStatus[eContestAppealResults.contestant].appeal2 = 10; + eContestantStatus[eContestAppealResults.contestant].appeal = 10; else - eContestantStatus[eContestAppealResults.contestant].appeal2 = 20 * whichTurn; + eContestantStatus[eContestAppealResults.contestant].appeal = 20 * whichTurn; if (whichTurn == 0) SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL); else if (whichTurn == 1) @@ -633,7 +633,7 @@ static void ContestEffect_QualityDependsOnTiming(void) appeal = 80; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - eContestantStatus[eContestAppealResults.contestant].appeal2 = appeal; + eContestantStatus[eContestAppealResults.contestant].appeal = appeal; } static void ContestEffect_BetterIfSameType(void) @@ -666,7 +666,7 @@ static void ContestEffect_BetterIfSameType(void) move = eContestantStatus[eContestAppealResults.contestant].currMove; if (gContestMoves[move].contestCategory == gContestMoves[eContestantStatus[j].currMove].contestCategory) { - eContestantStatus[eContestAppealResults.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; + eContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SAME_TYPE_GOOD); } } @@ -684,7 +684,7 @@ static void ContestEffect_BetterIfDiffType(void) if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i] && gContestMoves[move].contestCategory != gContestMoves[eContestantStatus[i].currMove].contestCategory) { - eContestantStatus[eContestAppealResults.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; + eContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_DIFF_TYPE_GOOD); break; } @@ -703,14 +703,14 @@ static void ContestEffect_AffectedByPrevAppeal(void) { if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) { - if (eContestantStatus[eContestAppealResults.contestant].appeal2 > eContestantStatus[i].appeal2) + if (eContestantStatus[eContestAppealResults.contestant].appeal > eContestantStatus[i].appeal) { - eContestantStatus[eContestAppealResults.contestant].appeal2 *= 2; + eContestantStatus[eContestAppealResults.contestant].appeal *= 2; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH); } - else if (eContestantStatus[eContestAppealResults.contestant].appeal2 < eContestantStatus[i].appeal2) + else if (eContestantStatus[eContestAppealResults.contestant].appeal < eContestantStatus[i].appeal) { - eContestantStatus[eContestAppealResults.contestant].appeal2 = 0; + eContestantStatus[eContestAppealResults.contestant].appeal = 0; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NOT_AS_WELL); } } @@ -898,9 +898,9 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) { if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { - if (eContestantStatus[i].appeal2 > 0) + if (eContestantStatus[i].appeal > 0) { - eContestAppealResults.jam = eContestantStatus[i].appeal2 / 2; + eContestAppealResults.jam = eContestantStatus[i].appeal / 2; eContestAppealResults.jam = RoundUp(eContestAppealResults.jam); } else @@ -946,7 +946,7 @@ static void ContestEffect_BetterWhenAudienceExcited(void) appeal = 60; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - eContestantStatus[eContestAppealResults.contestant].appeal2 = appeal; + eContestantStatus[eContestAppealResults.contestant].appeal = appeal; } // Temporarily stops the crowd from growing excited. @@ -1054,7 +1054,7 @@ static bool8 WasAtLeastOneOpponentJammed(void) static void JamContestant(u8 i, u8 jam) { - eContestantStatus[i].appeal2 -= jam; + eContestantStatus[i].appeal -= jam; eContestantStatus[i].jam += jam; } diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index e77223d95e..53868fc84f 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -183,7 +183,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("POOCHY"), .trainerName = _("JIMMY"), .trainerGfxId = OBJ_EVENT_GFX_BOY_1, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, + .aiChecks = 0xC000FFF, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -211,7 +211,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("MUSILLE"), .trainerName = _("EDITH"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -239,7 +239,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DUSTER"), .trainerName = _("EVAN"), .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, + .aiChecks = 0x21000FFF, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -603,7 +603,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BULBY"), .trainerName = _("AGATHA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, + .aiChecks = 0xC000FFF, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -631,7 +631,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("FUTTERBE"), .trainerName = _("BEAU"), .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -659,7 +659,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("PIDEOT"), .trainerName = _("KAY"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, + .aiChecks = 0x21000FFF, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -883,7 +883,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DUODO"), .trainerName = _("BOBBY"), .trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1275,7 +1275,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BROWLO"), .trainerName = _("LUKE"), .trainerGfxId = OBJ_EVENT_GFX_FAT_MAN, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, + .aiChecks = 0xC000FFF, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1303,7 +1303,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("FETCHIN"), .trainerName = _("RAUL"), .trainerGfxId = OBJ_EVENT_GFX_MAN_5, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -1331,7 +1331,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SEELEY"), .trainerName = _("JADA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, + .aiChecks = 0x21000FFF, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1555,7 +1555,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SHIFTY"), .trainerName = _("CLAUDIA"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1947,7 +1947,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("EGGSOR"), .trainerName = _("GRACIE"), .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, + .aiChecks = 0xC000FFF, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1975,7 +1975,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CUBIN"), .trainerName = _("COLTIN"), .trainerGfxId = OBJ_EVENT_GFX_MAN_4, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2003,7 +2003,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("HITMON"), .trainerName = _("ELLIE"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_F, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, + .aiChecks = 0x21000FFF, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2227,7 +2227,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LOUDERD"), .trainerName = _("RALPH"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_M, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2619,7 +2619,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GAREN"), .trainerName = _("CAMILE"), .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21, + .aiChecks = 0xC000FFF, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2647,7 +2647,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GONPOR"), .trainerName = _("MARTIN"), .trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25, + .aiChecks = 0x82000FFF, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2675,7 +2675,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DRITE"), .trainerName = _("SERGIO"), .trainerGfxId = OBJ_EVENT_GFX_BOY_1, - .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23, + .aiChecks = 0x21000FFF, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, From 337ab9c7a22c019784bba69ef4c30995470c9c64 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Sun, 16 Aug 2020 12:25:44 -0400 Subject: [PATCH 68/85] match --- src/link_rfu_3.c | 82 +++++------------------------------------------- 1 file changed, 8 insertions(+), 74 deletions(-) diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index db1ba8b43c..c4c000a6e2 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -623,105 +623,39 @@ static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr) pkmnStr[i] = EOS; } -#ifdef NONMATCHING static u8 GetConnectedChildStrength(u8 maxFlags) { u8 flagCount = 0; - u32 flags = gRfuLinkStatus->connSlotFlag; + u8 flags = gRfuLinkStatus->connSlotFlag; u8 i; if (gRfuLinkStatus->parentChild == MODE_PARENT) { - for (i = 0; i < 4; flags >>= 1, i++) + for (i = 0; i < 4; i++) { if (flags & 1) { if (maxFlags == flagCount + 1) + { return gRfuLinkStatus->strength[i]; + break; // This break is needed to match + } flagCount++; } + flags >>= 1; } } else { - for (i = 0; i < 4; flags >>= 1, i++) + for (i = 0; i < 4; i++) { if (flags & 1) return gRfuLinkStatus->strength[i]; + flags >>= 1; } } return 0; } -#else -NAKED -static u8 GetConnectedChildStrength(u8 maxFlags) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tmovs r6, 0\n" - "\tldr r0, =gRfuLinkStatus\n" - "\tldr r4, [r0]\n" - "\tldrb r2, [r4, 0x2]\n" - "\tldrb r1, [r4]\n" - "\tadds r7, r0, 0\n" - "\tcmp r1, 0x1\n" - "\tbne _0800DD72\n" - "\tmovs r3, 0\n" - "\tands r1, r2\n" - "\tcmp r1, 0\n" - "\tbeq _0800DD4E\n" - "\tcmp r5, 0x1\n" - "\tbne _0800DD48\n" - "\tldrb r0, [r4, 0xA]\n" - "\tb _0800DD8C\n" - "\t.pool\n" - "_0800DD48:\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "_0800DD4E:\n" - "\tlsrs r2, 1\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x3\n" - "\tbhi _0800DD8A\n" - "\tmovs r0, 0x1\n" - "\tands r0, r2\n" - "\tcmp r0, 0\n" - "\tbeq _0800DD4E\n" - "\tadds r0, r6, 0x1\n" - "\tcmp r5, r0\n" - "\tbne _0800DD48\n" - "_0800DD68:\n" - "\tldr r0, [r7]\n" - "\tadds r0, 0xA\n" - "\tadds r0, r3\n" - "\tldrb r0, [r0]\n" - "\tb _0800DD8C\n" - "_0800DD72:\n" - "\tmovs r3, 0\n" - "\tmovs r1, 0x1\n" - "_0800DD76:\n" - "\tadds r0, r2, 0\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbne _0800DD68\n" - "\tlsrs r2, 1\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x3\n" - "\tbls _0800DD76\n" - "_0800DD8A:\n" - "\tmovs r0, 0\n" - "_0800DD8C:\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders) { From 19cf1b9770d8ec98aec3100a1aa1b9399a8c54bf Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 18 Aug 2020 07:30:18 -0400 Subject: [PATCH 69/85] Fix ContestPokemon offset-named field --- include/contest.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/contest.h b/include/contest.h index e4cda6e259..9a4b3425d8 100644 --- a/include/contest.h +++ b/include/contest.h @@ -99,7 +99,7 @@ struct ContestPokemon u8 sheen; u8 highestRank; bool8 gameCleared; - u8 unk2C[10]; + u8 unused[10]; u32 personality; u32 otId; }; From 0e7f634b00f904ac29088f3b7fdac0c51999be2d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 18 Aug 2020 08:11:25 -0400 Subject: [PATCH 70/85] Wrap asm statements in NONMATCHING --- gflib/text.c | 6 +++--- src/battle_tent.c | 6 +++++- src/battle_tower.c | 8 ++++++-- src/battle_transition.c | 4 +++- src/data/graphics/pokemon.h | 3 ++- src/dewford_trend.c | 4 +++- src/frontier_pass.c | 4 +++- src/graphics.c | 26 ++++++++++++-------------- src/librfu_intr.c | 6 +++++- src/m4a.c | 4 +++- src/pokemon.c | 4 +++- src/pokemon_animation.c | 6 +++++- src/record_mixing.c | 8 ++++++-- 13 files changed, 59 insertions(+), 30 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 07fd23109f..636fe50a97 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -475,15 +475,15 @@ u8 GetLastTextColor(u8 colorType) \ for (; i < toY; i++) \ { \ - asm("":::"sl"); \ + asm("":::"sl"); /* NONMATCHING */ \ r5 = *(ptr++); \ for (j = fromX; j < toX; j++) \ { \ const u32 toOrr = r5 & 0xF; \ if (toOrr) \ { \ - dst = windowTiles + ((j / 8) * 32) + ((j & 7) >> 1) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ - bits = ((j & 1) * 4); \ + dst = windowTiles + ((j / 8) * 32) + ((j & 7) >> 1) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ + bits = ((j & 1) * 4); \ *dst = (toOrr << bits) | ((0xF0 >> bits) & *dst); \ } \ r5 >>= 4; \ diff --git a/src/battle_tent.c b/src/battle_tent.c index b2db0e39cf..0a03fc1675 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -355,7 +355,11 @@ static void GenerateOpponentMons(void) { u16 trainerId; s32 i, j, k; - register const u16 *monSet asm("r9"); // Fix me. Compiler insists on moving that variable into stack. + #ifndef NONMATCHING + register const u16 *monSet asm("r9"); // Fix me. Compiler insists on moving that variable into stack. + #else + const u16 *monSet; + #endif u16 species[FRONTIER_PARTY_SIZE]; u16 heldItems[FRONTIER_PARTY_SIZE]; s32 monId = 0; diff --git a/src/battle_tower.c b/src/battle_tower.c index 8fcea11230..81c542d1cd 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1466,7 +1466,9 @@ u8 GetFrontierOpponentClass(u16 trainerId) else { trainerClass = gFacilityClassToTrainerClass[gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass]; - asm(""); + #ifndef NONMATCHING + asm(""); + #endif } } else @@ -1478,7 +1480,9 @@ u8 GetFrontierOpponentClass(u16 trainerId) else { trainerClass = gFacilityClassToTrainerClass[gApprentices[gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id].facilityClass]; - asm(""); + #ifndef NONMATCHING + asm(""); + #endif } } diff --git a/src/battle_transition.c b/src/battle_transition.c index 2ffa28645d..b0cdbd93af 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -3974,7 +3974,9 @@ static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task) for (i = 0; i < 160; i++, var6 += var8) { s16 index = var6 / 256; - asm(""); + #ifndef NONMATCHING + asm(""); + #endif gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index, amplitude); } diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index fd4d8b95d4..bce0b7a217 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -2698,7 +2698,8 @@ const u8 gMonIcon_Deoxys[] = INCBIN_U8("graphics/pokemon/deoxys/icon.4bpp"); const u8 gMonIcon_DeoxysSpeed[] = INCBIN_U8("graphics/pokemon/deoxys/icon_speed.4bpp"); const u8 gMonIcon_DeoxysSpeedWide[] = INCBIN_U8("graphics/unused/deoxys_speed_icon_wide.4bpp"); -asm(".space 0x6800"); +// Probably the leftover space from the other Deoxys forms +static const u8 sEmpty[0x6800] = {0}; const u16 gUnknown_D437F8[] = INCBIN_U16("graphics/unknown/unknown_D437F8.bin"); diff --git a/src/dewford_trend.c b/src/dewford_trend.c index 9c5e69d993..e3b98859ce 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -225,7 +225,9 @@ void TrendyPhraseIsOld(void) if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 < 2) { - asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2 + #ifndef NONMATCHING + asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2 + #endif if (!gSaveBlock1Ptr->easyChatPairs[0].unk1_6 && gSaveBlock1Ptr->easyChatPairs[1].unk1_6) result = 1; } diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 024a954d18..adc02f90bb 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -1239,7 +1239,9 @@ static void sub_80C6104(u8 cursorArea, u8 previousCursorArea) if (!var) { - asm("":::"r4"); + #ifndef NONMATCHING + asm("":::"r4"); + #endif if (previousCursorArea == CURSOR_AREA_NOTHING || previousCursorArea > CURSOR_AREA_CANCEL) return; } diff --git a/src/graphics.c b/src/graphics.c index e0b2774d62..83b1b55d90 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -987,8 +987,7 @@ const u16 gTilesetAnims_BattleDomePals0_1[] = INCBIN_U16("graphics/battle_fronti const u16 gTilesetAnims_BattleDomePals0_2[] = INCBIN_U16("graphics/battle_frontier/dome_anim3.gbapal"); const u16 gTilesetAnims_BattleDomePals0_3[] = INCBIN_U16("graphics/battle_frontier/dome_anim4.gbapal"); -// 8D856C0 -asm(".2byte 0x013F, 0x0119, 0x0113, 0x010E"); // unused? +static const u16 sUnused0[] = {0x13F, 0x119, 0x113, 0x10E}; const u16 gUnknown_08D856C8[] = INCBIN_U16("graphics/battle_frontier/pyramid_light.gbapal"); // unfaded pal for the player light in battle pyramid @@ -1362,17 +1361,17 @@ const u8 gBerryBlenderMarubatsuTiles[] = INCBIN_U8("graphics/berry_blender/marub const u8 gBerryBlenderParticlesTiles[] = INCBIN_U8("graphics/berry_blender/particles.4bpp"); -asm(".space 0x120"); +static const u8 sEmpty0[0x120] = {0}; const u8 gBerryBlenderCountdownNumbersTiles[] = INCBIN_U8("graphics/berry_blender/countdown_numbers.4bpp"); const u8 gBerryBlenderStartTiles[] = INCBIN_U8("graphics/berry_blender/start.4bpp"); -asm(".space 0x200"); +static const u8 sEmpty1[0x200] = {0}; const u8 gBerryBlenderArrowTiles[] = INCBIN_U8("graphics/berry_blender/arrow.4bpp"); -asm(".space 0x2C0"); +static const u8 sEmpty2[0x2C0] = {0}; const u16 gEasyChatCursor_Pal[] = INCBIN_U16("graphics/easy_chat/cursor.gbapal"); const u32 gEasyChatCursor_Gfx[] = INCBIN_U32("graphics/easy_chat/cursor.4bpp.lz"); @@ -1481,8 +1480,7 @@ const u16 gTradeGba_Pal[] = INCBIN_U16("graphics/link/gba.gbapal"); const u16 gTradeGba2_Pal[] = INCBIN_U16("graphics/link/gba_pal2.gbapal"); const u8 gTradeGba_Gfx[] = INCBIN_U8("graphics/link/gba.4bpp"); -// 8DD8760 -asm(".space 0x20"); //blank palette?? +static const u16 sEmptyPal[16] = {0}; #include "data/graphics/berry_fix.h" @@ -1564,10 +1562,10 @@ const u32 gUnknown_08DE34B8[] = INCBIN_U32("graphics/berry_crusher/tiles.4bpp.lz const u32 gUnknown_08DE3FD4[] = INCBIN_U32("graphics/berry_crusher/tiles.bin.lz"); // random garbage at the end. -asm(".space 0x54BAC \n\ - .byte 0x0D, 0x00, 0x58, 0x02 \n\ - .space 0x1145 \n\ - .byte 0x02 \n\ - .space 0x3242 \n\ - .byte 0x40 \n\ - .space 0x13"); +static const u8 sEmpty3[0x54BAC] = {0}; +static const u8 sUnused1[] = {0x0D, 0x00, 0x58, 0x02}; +static const u8 sEmpty4[0x1145] = {0}; +static const u8 sUnused2[] = {0x02}; +static const u8 sEmpty5[0x3242] = {0}; +static const u8 sUnused3[] = {0x40}; +static const u8 sEmpty6[0x13] = {0}; diff --git a/src/librfu_intr.c b/src/librfu_intr.c index 23962a937c..1361be40ec 100644 --- a/src/librfu_intr.c +++ b/src/librfu_intr.c @@ -148,7 +148,11 @@ static void sio32intr_clock_slave(void) { u32 regSIODATA32; u32 r0; - register u32 reqLen asm("r2"); + #ifndef NONMATCHING + register u32 reqLen asm("r2"); + #else + u32 reqLen; + #endif gSTWIStatus->timerActive = 0; STWI_set_timer_in_RAM(100); diff --git a/src/m4a.c b/src/m4a.c index 267a72657d..11a4525eab 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -904,7 +904,9 @@ void CgbModVol(struct CgbChannel *chan) // Force chan->rightVolume and chan->leftVolume to be read from memory again, // even though there is no reason to do so. // The command line option "-fno-gcse" achieves the same result as this. - asm("" : : : "memory"); + #ifndef NONMATCHING + asm("" : : : "memory"); + #endif chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; if (chan->eg > 15) diff --git a/src/pokemon.c b/src/pokemon.c index 44b5e55bbe..1adc7b1c4f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6814,7 +6814,9 @@ static void sub_806F160(struct Unknown_806F160_Struct* structPtr) structPtr->templates[i] = gUnknown_08329D98[i]; for (j = 0; j < structPtr->field_1; j++) { - asm(""); + #ifndef NONMATCHING + asm(""); + #endif structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800]; } structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_1]; diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index a388be39a5..37abb90e9d 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -2884,7 +2884,11 @@ static void sub_8181C2C(struct Sprite *sprite) } else { - register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8; + #ifndef NONMATCHING + register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8; + #else + s32 var = sUnknown_03001240[sprite->data[0]].field_8; + #endif sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (sUnknown_03001240[sprite->data[0]].field_8 * 8); sprite->pos2.y = -(Sin(counter % 128, 8)); diff --git a/src/record_mixing.c b/src/record_mixing.c index ad8b5693ca..ccdaabdd1c 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -872,8 +872,12 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r var2 = sub_80E7A9C(&_src->mail[1]); if (!var1 && var2) { - register u8 one asm("r0") = 1; // boo, a fakematch - sp24[j][1] = one; + #ifndef NONMATCHING + register u8 one asm("r0") = 1; // boo, a fakematch + sp24[j][1] = one; + #else + sp24[j][1] = 1; + #endif } else if ((var1 && var2) || (!var1 && !var2)) { From fa29ff98a342f4f434b96d4e04f47e25ca865512 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 18 Aug 2020 11:38:50 -0400 Subject: [PATCH 71/85] Add condition mod constants --- include/contest.h | 7 +++++++ src/contest.c | 16 ++++++++-------- src/contest_effect.c | 4 ++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/include/contest.h b/include/contest.h index 9a4b3425d8..d008b8fce1 100644 --- a/include/contest.h +++ b/include/contest.h @@ -77,6 +77,13 @@ enum { CONTEST_FILTER_ONLY_POSTGAME }; +// Constants for changing in-contest Condition (the stars that appear during appeals) +enum { + CONDITION_NO_CHANGE, + CONDITION_GAIN, + CONDITION_LOSE, +}; + struct ContestPokemon { u16 species; diff --git a/src/contest.c b/src/contest.c index de00018310..a015c5bab3 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1935,7 +1935,7 @@ static void Task_DoAppeals(u8 taskId) gTasks[taskId].tState = APPEALSTATE_TRY_JUDGE_STAR; return; case APPEALSTATE_TRY_JUDGE_STAR: - if (eContestantStatus[contestant].conditionMod == 1) + if (eContestantStatus[contestant].conditionMod == CONDITION_GAIN) DoJudgeSpeechBubble(JUDGE_SYMBOL_STAR); gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_STAR; return; @@ -3270,26 +3270,26 @@ static bool8 UpdateConditionStars(u8 contestantIdx, bool8 resetMod) u8 contestantOffset; s32 numStars; - if (eContestantStatus[contestantIdx].conditionMod == 0) + if (eContestantStatus[contestantIdx].conditionMod == CONDITION_NO_CHANGE) return FALSE; contestantOffset = gContestantTurnOrder[contestantIdx] * 5 + 2; numStars = eContestantStatus[contestantIdx].condition / 10; - if (eContestantStatus[contestantIdx].conditionMod == 1) + if (eContestantStatus[contestantIdx].conditionMod == CONDITION_GAIN) { ContestBG_FillBoxWithTile(0, GetStarTileOffset(), 19, contestantOffset, 1, numStars, 17); if (resetMod) { PlaySE(SE_EXPMAX); - eContestantStatus[contestantIdx].conditionMod = 0; + eContestantStatus[contestantIdx].conditionMod = CONDITION_NO_CHANGE; } } - else + else // CONDITION_LOSE { ContestBG_FillBoxWithTile(0, 0, 19, contestantOffset + numStars, 1, 3 - numStars, 17); if (resetMod) { PlaySE(SE_FU_ZAKU2); - eContestantStatus[contestantIdx].conditionMod = 0; + eContestantStatus[contestantIdx].conditionMod = CONDITION_NO_CHANGE; } } return TRUE; @@ -3510,7 +3510,7 @@ static void ResetContestantStatuses(void) eContestantStatus[i].nervous = FALSE; eContestantStatus[i].effectStringId = CONTEST_STRING_NONE; eContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; - eContestantStatus[i].conditionMod = 0; + eContestantStatus[i].conditionMod = CONDITION_NO_CHANGE; eContestantStatus[i].repeatedPrevMove = eContestantStatus[i].repeatedMove; eContestantStatus[i].repeatedMove = FALSE; eContestantStatus[i].turnOrderModAction = 0; @@ -4464,7 +4464,7 @@ static void CalculateAppealMoveImpact(u8 contestant) gContestEffectFuncs[effect](); - if (eContestantStatus[contestant].conditionMod == 1) + if (eContestantStatus[contestant].conditionMod == CONDITION_GAIN) eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition - 10; else if (eContestantStatus[contestant].appealTripleCondition) eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition * 3; diff --git a/src/contest_effect.c b/src/contest_effect.c index 037da5e11d..8d1bbb2987 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -478,7 +478,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) CanUnnerveContestant(i)) { eContestantStatus[i].condition = 0; - eContestantStatus[i].conditionMod = 2; + eContestantStatus[i].conditionMod = CONDITION_LOSE; SetContestantEffectStringID(i, CONTEST_STRING_REGAINED_FORM); numHit++; } @@ -724,7 +724,7 @@ static void ContestEffect_ImproveConditionPreventNervousness(void) if (eContestantStatus[eContestAppealResults.contestant].condition < 30) { eContestantStatus[eContestAppealResults.contestant].condition += 10; - eContestantStatus[eContestAppealResults.contestant].conditionMod = 1; + eContestantStatus[eContestAppealResults.contestant].conditionMod = CONDITION_GAIN; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_CONDITION_ROSE); } else From 3ba8cabd80f7769b0903088a7d9429bd4a46edaf Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 18 Aug 2020 15:56:44 -0400 Subject: [PATCH 72/85] Fix Brenday typo --- data/maps/Route110/scripts.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/Route110/scripts.inc b/data/maps/Route110/scripts.inc index 02c13f4d9a..7cdb547edb 100644 --- a/data/maps/Route110/scripts.inc +++ b/data/maps/Route110/scripts.inc @@ -448,7 +448,7 @@ Route110_EventScript_MayDefeated:: @ 81EF84A end Route110_EventScript_BrendanBattle:: @ 81EF865 - msgbox Route110_Text_BrendayLetsBattle, MSGBOX_DEFAULT + msgbox Route110_Text_BrendanLetsBattle, MSGBOX_DEFAULT switch VAR_STARTER_MON case 0, Route110_EventScript_BrendanBattleTreecko case 1, Route110_EventScript_BrendanBattleTorchic @@ -814,7 +814,7 @@ Route110_Text_MayExplainItemfinder: @ 81EFD58 .string "me, but I think you should train a lot\l" .string "harder for the next time.$" -Route110_Text_BrendayLetsBattle: @ 81EFE3F +Route110_Text_BrendanLetsBattle: @ 81EFE3F .string "BRENDAN: Hey, {PLAYER}.\n" .string "So this is where you were.\l" .string "How's it going?\p" From 503dafd2104c400f3dbe0494d4a97d06b82267ab Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 18 Aug 2020 17:51:41 -0400 Subject: [PATCH 73/85] Fix wallys parents misnamed as uncle/aunt --- data/maps/PetalburgCity/map.json | 6 +- data/maps/PetalburgCity/scripts.inc | 14 +-- data/maps/PetalburgCity_Gym/map.json | 2 +- data/maps/PetalburgCity_Gym/scripts.inc | 116 +++++++++--------- data/maps/PetalburgCity_WallysHouse/map.json | 4 +- .../PetalburgCity_WallysHouse/scripts.inc | 12 +- data/scripts/new_game.inc | 4 +- include/constants/flags.h | 6 +- 8 files changed, 82 insertions(+), 82 deletions(-) diff --git a/data/maps/PetalburgCity/map.json b/data/maps/PetalburgCity/map.json index 03c0950ca1..faec3eea1f 100644 --- a/data/maps/PetalburgCity/map.json +++ b/data/maps/PetalburgCity/map.json @@ -35,8 +35,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "PetalburgCity_EventScript_WallyAunt", - "flag": "FLAG_HIDE_PETALBURG_CITY_WALLYS_AUNT" + "script": "PetalburgCity_EventScript_WallysMom", + "flag": "FLAG_HIDE_PETALBURG_CITY_WALLYS_MOM" }, { "graphics_id": "OBJ_EVENT_GFX_WALLY", @@ -88,7 +88,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "0x0", - "flag": "FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE" + "flag": "FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/PetalburgCity/scripts.inc b/data/maps/PetalburgCity/scripts.inc index b7df048579..558eac64e8 100644 --- a/data/maps/PetalburgCity/scripts.inc +++ b/data/maps/PetalburgCity/scripts.inc @@ -1,6 +1,6 @@ .set LOCALID_WALLY, 2 .set LOCALID_BOY, 3 -.set LOCALID_WALLYS_UNCLE, 5 +.set LOCALID_WALLYS_DAD, 5 .set LOCALID_GYM_BOY, 8 .set LOCALID_SCOTT, 9 @@ -68,17 +68,17 @@ PetalburgCity_EventScript_WallyTutorial:: @ 81DC32E PetalburgCity_EventScript_WalkToWallyHouse:: @ 81DC390 lockall setflag FLAG_HIDE_MAP_NAME_POPUP - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Movement_WalkToWallyHouseUncle + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Movement_WalkToWallyHouseWallysDad applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Movement_WalkToWallyHousePlayer waitmovement 0 setvar VAR_0x8004, 7 setvar VAR_0x8005, 5 opendoor VAR_0x8004, VAR_0x8005 waitdooranim - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Movement_WalkInsideHouseUncle + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Movement_WalkInsideHouseWallysDad applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Movement_WalkInsideHousePlayer waitmovement 0 - setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE + setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD hideobjectat OBJ_EVENT_ID_PLAYER, MAP_PETALBURG_CITY closedoor VAR_0x8004, VAR_0x8005 waitdooranim @@ -100,7 +100,7 @@ PetalburgCity_EventScript_Boy:: @ 81DC3E6 release end -PetalburgCity_EventScript_WallyAunt:: @ 81DC3FD +PetalburgCity_EventScript_WallysMom:: @ 81DC3FD msgbox PetalburgCity_Text_WhereIsWally, MSGBOX_NPC end @@ -129,7 +129,7 @@ PetalburgCity_Movement_WalkInsideHousePlayer: @ 81DC418 walk_up step_end -PetalburgCity_Movement_WalkToWallyHouseUncle: @ 81DC41B +PetalburgCity_Movement_WalkToWallyHouseWallysDad: @ 81DC41B delay_8 walk_down walk_down @@ -149,7 +149,7 @@ PetalburgCity_Movement_WalkToWallyHouseUncle: @ 81DC41B walk_up step_end -PetalburgCity_Movement_WalkInsideHouseUncle: @ 81DC42D +PetalburgCity_Movement_WalkInsideHouseWallysDad: @ 81DC42D walk_up set_invisible step_end diff --git a/data/maps/PetalburgCity_Gym/map.json b/data/maps/PetalburgCity_Gym/map.json index ca074547ff..f38463a19c 100644 --- a/data/maps/PetalburgCity_Gym/map.json +++ b/data/maps/PetalburgCity_Gym/map.json @@ -155,7 +155,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "0x0", - "flag": "FLAG_HIDE_PETALBURG_GYM_WALLYS_UNCLE" + "flag": "FLAG_HIDE_PETALBURG_GYM_WALLYS_DAD" } ], "warp_events": [ diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc index 5df31917f8..c8e14a13fd 100644 --- a/data/maps/PetalburgCity_Gym/scripts.inc +++ b/data/maps/PetalburgCity_Gym/scripts.inc @@ -1,6 +1,6 @@ .set LOCALID_NORMAN, 1 .set LOCALID_WALLY, 10 -.set LOCALID_WALLYS_UNCLE, 11 +.set LOCALID_WALLYS_DAD, 11 PetalburgCity_Gym_MapScripts:: @ 8204889 map_script MAP_SCRIPT_ON_LOAD, PetalburgCity_Gym_OnLoad @@ -213,7 +213,7 @@ PetalburgCity_Gym_EventScript_BeginWallyTutorial:: @ 8204AAC compare VAR_0x8008, 3 call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallyEast removeobject LOCALID_WALLY - setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_AUNT + setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_MOM setvar VAR_PETALBURG_GYM_STATE, 1 setvar VAR_PETALBURG_CITY_STATE, 2 clearflag FLAG_HIDE_PETALBURG_CITY_WALLY @@ -433,11 +433,11 @@ PetalburgCity_Gym_EventScript_NormanBattle:: @ 8204E3B delay 40 playse SE_DOOR delay 10 - addobject LOCALID_WALLYS_UNCLE + addobject LOCALID_WALLYS_DAD switch VAR_FACING - case DIR_NORTH, PetalburgCity_Gym_EventScript_WallysUncleArrivesNorth - case DIR_WEST, PetalburgCity_Gym_EventScript_WallysUncleArrivesWest - case DIR_EAST, PetalburgCity_Gym_EventScript_WallysUncleArrivesEast + case DIR_NORTH, PetalburgCity_Gym_EventScript_WallysDadArrivesNorth + case DIR_WEST, PetalburgCity_Gym_EventScript_WallysDadArrivesWest + case DIR_EAST, PetalburgCity_Gym_EventScript_WallysDadArrivesEast end PetalburgCity_Gym_EventScript_GiveFacade:: @ 8204ED2 @@ -448,119 +448,119 @@ PetalburgCity_Gym_EventScript_GiveFacade:: @ 8204ED2 msgbox PetalburgCity_Gym_Text_ExplainFacade, MSGBOX_DEFAULT return -PetalburgCity_Gym_EventScript_WallysUncleArrivesNorth:: @ 8204EF5 +PetalburgCity_Gym_EventScript_WallysDadArrivesNorth:: @ 8204EF5 setvar VAR_0x8008, 1 - goto PetalburgCity_Gym_EventScript_WallysUncleArrives + goto PetalburgCity_Gym_EventScript_WallysDadArrives -PetalburgCity_Gym_EventScript_WallysUncleArrivesEast:: @ 8204EFF +PetalburgCity_Gym_EventScript_WallysDadArrivesEast:: @ 8204EFF setvar VAR_0x8008, 2 - goto PetalburgCity_Gym_EventScript_WallysUncleArrives + goto PetalburgCity_Gym_EventScript_WallysDadArrives -PetalburgCity_Gym_EventScript_WallysUncleArrivesWest:: @ 8204F09 +PetalburgCity_Gym_EventScript_WallysDadArrivesWest:: @ 8204F09 setvar VAR_0x8008, 3 - goto PetalburgCity_Gym_EventScript_WallysUncleArrives + goto PetalburgCity_Gym_EventScript_WallysDadArrives -PetalburgCity_Gym_EventScript_WallysUncleArrives:: @ 8204F13 - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Gym_Movement_WallysUncleEnterGym +PetalburgCity_Gym_EventScript_WallysDadArrives:: @ 8204F13 + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadEnterGym waitmovement 0 playse SE_PIN - applymovement LOCALID_WALLYS_UNCLE, Common_Movement_ExclamationMark + applymovement LOCALID_WALLYS_DAD, Common_Movement_ExclamationMark waitmovement 0 - applymovement LOCALID_WALLYS_UNCLE, Common_Movement_Delay48 + applymovement LOCALID_WALLYS_DAD, Common_Movement_Delay48 waitmovement 0 delay 10 compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_WallysUncleApproachPlayerNorth + call_if_eq PetalburgCity_Gym_EventScript_WallysDadApproachPlayerNorth compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_WallysUncleApproachPlayerEast + call_if_eq PetalburgCity_Gym_EventScript_WallysDadApproachPlayerEast compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_WallysUncleApproachPlayerWest + call_if_eq PetalburgCity_Gym_EventScript_WallysDadApproachPlayerWest msgbox PetalburgCity_Gym_Text_PleaseComeWithMe, MSGBOX_DEFAULT closemessage delay 20 compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_WallysUncleFaceNormanNorth + call_if_eq PetalburgCity_Gym_EventScript_WallysDadFaceNormanNorth compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_WallysUncleFaceNormanEast + call_if_eq PetalburgCity_Gym_EventScript_WallysDadFaceNormanEast compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_WallysUncleFaceNormanWest + call_if_eq PetalburgCity_Gym_EventScript_WallysDadFaceNormanWest msgbox PetalburgCity_Gym_Text_LetMeBorrowPlayer, MSGBOX_DEFAULT closemessage setflag FLAG_DONT_TRANSITION_MUSIC playbgm MUS_TSURETEK, 0 compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysUncleNorth + call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysDadNorth compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysUncleEast + call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysDadEast compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysUncleWest - removeobject LOCALID_WALLYS_UNCLE + call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysDadWest + removeobject LOCALID_WALLYS_DAD setvar VAR_PETALBURG_CITY_STATE, 4 - clearflag FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE + clearflag FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD warp MAP_PETALBURG_CITY, 255, 15, 8 waitstate release end -PetalburgCity_Gym_EventScript_WallysUncleFaceNormanNorth:: @ 8204FCC - applymovement LOCALID_WALLYS_UNCLE, Common_Movement_WalkInPlaceFastestUp +PetalburgCity_Gym_EventScript_WallysDadFaceNormanNorth:: @ 8204FCC + applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFastestUp waitmovement 0 return -PetalburgCity_Gym_EventScript_WallysUncleFaceNormanEast:: @ 8204FD7 - applymovement LOCALID_WALLYS_UNCLE, Common_Movement_WalkInPlaceFastestRight +PetalburgCity_Gym_EventScript_WallysDadFaceNormanEast:: @ 8204FD7 + applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFastestRight waitmovement 0 return -PetalburgCity_Gym_EventScript_WallysUncleFaceNormanWest:: @ 8204FE2 - applymovement LOCALID_WALLYS_UNCLE, Common_Movement_WalkInPlaceFastestLeft +PetalburgCity_Gym_EventScript_WallysDadFaceNormanWest:: @ 8204FE2 + applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFastestLeft waitmovement 0 return -PetalburgCity_Gym_EventScript_WallysUncleApproachPlayerNorth:: @ 8204FED - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Gym_Movement_WallysUncleApproachPlayerNorth +PetalburgCity_Gym_EventScript_WallysDadApproachPlayerNorth:: @ 8204FED + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadApproachPlayerNorth waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestLeft waitmovement 0 return -PetalburgCity_Gym_EventScript_WallysUncleApproachPlayerEast:: @ 8205009 - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Gym_Movement_WallysUncleApproachPlayerEast +PetalburgCity_Gym_EventScript_WallysDadApproachPlayerEast:: @ 8205009 + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadApproachPlayerEast waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown waitmovement 0 return -PetalburgCity_Gym_EventScript_WallysUncleApproachPlayerWest:: @ 8205025 - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Gym_Movement_WallysUncleApproachPlayerWest +PetalburgCity_Gym_EventScript_WallysDadApproachPlayerWest:: @ 8205025 + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadApproachPlayerWest waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown waitmovement 0 return -PetalburgCity_Gym_EventScript_ExitGymWithWallysUncleNorth:: @ 8205041 - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Gym_Movement_WallysUncleExitNorth +PetalburgCity_Gym_EventScript_ExitGymWithWallysDadNorth:: @ 8205041 + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadExitNorth applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown - applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleNorth + applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallysDadNorth waitmovement 0 return -PetalburgCity_Gym_EventScript_ExitGymWithWallysUncleEast:: @ 820505A - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Gym_Movement_WallysUncleExitEast - applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleEast +PetalburgCity_Gym_EventScript_ExitGymWithWallysDadEast:: @ 820505A + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadExitEast + applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallysDadEast waitmovement 0 return -PetalburgCity_Gym_EventScript_ExitGymWithWallysUncleWest:: @ 820506C - applymovement LOCALID_WALLYS_UNCLE, PetalburgCity_Gym_Movement_WallysUncleExitWest - applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleWest +PetalburgCity_Gym_EventScript_ExitGymWithWallysDadWest:: @ 820506C + applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadExitWest + applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallysDadWest waitmovement 0 return -PetalburgCity_Gym_Movement_WallysUncleExitNorth: @ 820507E +PetalburgCity_Gym_Movement_WallysDadExitNorth: @ 820507E walk_down walk_down walk_left @@ -573,7 +573,7 @@ PetalburgCity_Gym_Movement_WallysUncleExitNorth: @ 820507E set_invisible step_end -PetalburgCity_Gym_Movement_WallysUncleExitEast: @ 8205089 +PetalburgCity_Gym_Movement_WallysDadExitEast: @ 8205089 walk_down walk_down walk_left @@ -586,7 +586,7 @@ PetalburgCity_Gym_Movement_WallysUncleExitEast: @ 8205089 set_invisible step_end -PetalburgCity_Gym_Movement_WallysUncleExitWest: @ 8205094 +PetalburgCity_Gym_Movement_WallysDadExitWest: @ 8205094 walk_down walk_down walk_left @@ -601,7 +601,7 @@ PetalburgCity_Gym_Movement_WallysUncleExitWest: @ 8205094 set_invisible step_end -PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleNorth: @ 82050A1 +PetalburgCity_Gym_Movement_PlayerExitWithWallysDadNorth: @ 82050A1 delay_16 walk_down walk_down @@ -611,7 +611,7 @@ PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleNorth: @ 82050A1 walk_down step_end -PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleEast: @ 82050A9 +PetalburgCity_Gym_Movement_PlayerExitWithWallysDadEast: @ 82050A9 delay_16 walk_down walk_down @@ -621,7 +621,7 @@ PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleEast: @ 82050A9 walk_down step_end -PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleWest: @ 82050B1 +PetalburgCity_Gym_Movement_PlayerExitWithWallysDadWest: @ 82050B1 delay_16 walk_down walk_down @@ -633,7 +633,7 @@ PetalburgCity_Gym_Movement_PlayerExitWithWallysUncleWest: @ 82050B1 walk_down step_end -PetalburgCity_Gym_Movement_WallysUncleEnterGym: @ 82050BB +PetalburgCity_Gym_Movement_WallysDadEnterGym: @ 82050BB walk_up delay_8 walk_in_place_fastest_right @@ -643,7 +643,7 @@ PetalburgCity_Gym_Movement_WallysUncleEnterGym: @ 82050BB walk_in_place_fastest_up step_end -PetalburgCity_Gym_Movement_WallysUncleApproachPlayerNorth: @ 82050C3 +PetalburgCity_Gym_Movement_WallysDadApproachPlayerNorth: @ 82050C3 walk_right walk_right walk_up @@ -652,7 +652,7 @@ PetalburgCity_Gym_Movement_WallysUncleApproachPlayerNorth: @ 82050C3 walk_in_place_fastest_right step_end -PetalburgCity_Gym_Movement_WallysUncleApproachPlayerEast: @ 82050CA +PetalburgCity_Gym_Movement_WallysDadApproachPlayerEast: @ 82050CA walk_right walk_right walk_up @@ -660,7 +660,7 @@ PetalburgCity_Gym_Movement_WallysUncleApproachPlayerEast: @ 82050CA walk_up step_end -PetalburgCity_Gym_Movement_WallysUncleApproachPlayerWest: @ 82050D0 +PetalburgCity_Gym_Movement_WallysDadApproachPlayerWest: @ 82050D0 walk_right walk_right walk_up diff --git a/data/maps/PetalburgCity_WallysHouse/map.json b/data/maps/PetalburgCity_WallysHouse/map.json index 172cf3e2ef..c0efbeb67a 100644 --- a/data/maps/PetalburgCity_WallysHouse/map.json +++ b/data/maps/PetalburgCity_WallysHouse/map.json @@ -24,7 +24,7 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "PetalburgCity_WallysHouse_EventScript_WallyUncle", + "script": "PetalburgCity_WallysHouse_EventScript_WallysDad", "flag": "0" }, { @@ -37,7 +37,7 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "PetalburgCity_WallysHouse_EventScript_WallyAunt", + "script": "PetalburgCity_WallysHouse_EventScript_WallysMom", "flag": "0" } ], diff --git a/data/maps/PetalburgCity_WallysHouse/scripts.inc b/data/maps/PetalburgCity_WallysHouse/scripts.inc index a46f5d78d9..1e4e75987f 100644 --- a/data/maps/PetalburgCity_WallysHouse/scripts.inc +++ b/data/maps/PetalburgCity_WallysHouse/scripts.inc @@ -1,4 +1,4 @@ -.set LOCALID_WALLYS_UNCLE, 1 +.set LOCALID_WALLYS_DAD, 1 PetalburgCity_WallysHouse_MapScripts:: @ 8204229 map_script MAP_SCRIPT_ON_FRAME_TABLE, PetalburgCity_WallysHouse_OnFrame @@ -6,12 +6,12 @@ PetalburgCity_WallysHouse_MapScripts:: @ 8204229 .byte 0 PetalburgCity_WallysHouse_OnWarp: @ 8204234 - map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_PlayerUncleFaceEachOther + map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_PlayerWallysDadFaceEachOther .2byte 0 -PetalburgCity_WallysHouse_EventScript_PlayerUncleFaceEachOther:: @ 820423E +PetalburgCity_WallysHouse_EventScript_PlayerWallysDadFaceEachOther:: @ 820423E turnobject OBJ_EVENT_ID_PLAYER, DIR_EAST - turnobject LOCALID_WALLYS_UNCLE, DIR_WEST + turnobject LOCALID_WALLYS_DAD, DIR_WEST end PetalburgCity_WallysHouse_OnFrame: @ 8204247 @@ -28,7 +28,7 @@ PetalburgCity_WallysHouse_EventScript_GiveHM03Surf:: @ 8204251 releaseall end -PetalburgCity_WallysHouse_EventScript_WallyUncle:: @ 8204278 +PetalburgCity_WallysHouse_EventScript_WallysDad:: @ 8204278 lock faceplayer goto_if_set FLAG_DEFEATED_WALLY_VICTORY_ROAD, PetalburgCity_WallysHouse_EventScript_DefeatedWallyInVictoryRoad @@ -54,7 +54,7 @@ PetalburgCity_WallysHouse_EventScript_PlayedWithWally:: @ 82042B6 release end -PetalburgCity_WallysHouse_EventScript_WallyAunt:: @ 82042C0 +PetalburgCity_WallysHouse_EventScript_WallysMom:: @ 82042C0 lock faceplayer goto_if_set FLAG_RECEIVED_HM03, PetalburgCity_WallysHouse_EventScript_ReceivedHM03Surf diff --git a/data/scripts/new_game.inc b/data/scripts/new_game.inc index 3c68dfa13d..f723379729 100644 --- a/data/scripts/new_game.inc +++ b/data/scripts/new_game.inc @@ -115,7 +115,7 @@ EventScript_ResetAllMapFlags:: @ 82715DE setflag FLAG_HIDE_LILYCOVE_MUSEUM_PATRON_4 setflag FLAG_HIDE_LILYCOVE_MUSEUM_TOURISTS setflag FLAG_HIDE_PETALBURG_GYM_GREETER - setflag FLAG_HIDE_PETALBURG_GYM_WALLYS_UNCLE + setflag FLAG_HIDE_PETALBURG_GYM_WALLYS_DAD setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_BRENDAN setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_MAY setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM @@ -142,7 +142,7 @@ EventScript_ResetAllMapFlags:: @ 82715DE setflag FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WALLYS_UNCLE setflag FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WANDA setflag FLAG_HIDE_VERDANTURF_TOWN_SCOTT - setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE + setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD setflag FLAG_HIDE_PETALBURG_GYM_WALLY setflag FLAG_HIDE_SLATEPORT_CITY_STERNS_SHIPYARD_MR_BRINEY setflag FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_ARCHIE diff --git a/include/constants/flags.h b/include/constants/flags.h index 485dd3058c..2490a6244f 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -768,7 +768,7 @@ #define FLAG_HIDE_PETALBURG_WOODS_AQUA_GRUNT 0x2D5 #define FLAG_HIDE_PETALBURG_CITY_WALLY 0x2D6 #define FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_INVISIBLE_NINJA_BOY 0x2D7 -#define FLAG_HIDE_PETALBURG_CITY_WALLYS_AUNT 0x2D8 +#define FLAG_HIDE_PETALBURG_CITY_WALLYS_MOM 0x2D8 #define FLAG_UNUSED_0x2D9 0x2D9 // Unused Flag @@ -866,13 +866,13 @@ #define FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_1_BLOCKING_ENTRANCE 0x335 #define FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_2_BLOCKING_ENTRANCE 0x336 #define FLAG_HIDE_MOSSDEEP_CITY_TEAM_MAGMA 0x337 -#define FLAG_HIDE_PETALBURG_GYM_WALLYS_UNCLE 0x338 +#define FLAG_HIDE_PETALBURG_GYM_WALLYS_DAD 0x338 #define FLAG_HIDE_LEGEND_MON_CAVE_OF_ORIGIN 0x339 // Unused, leftover from R/S #define FLAG_HIDE_SOOTOPOLIS_CITY_ARCHIE 0x33A #define FLAG_HIDE_SOOTOPOLIS_CITY_MAXIE 0x33B #define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_ARCHIE 0x33C #define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAXIE 0x33D -#define FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE 0x33E +#define FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD 0x33E #define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAGMA_GRUNTS 0x33F #define FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER 0x340 #define FLAG_HIDE_GRANITE_CAVE_STEVEN 0x341 From 7d3b68a27bd6c211790e35ac9957158b911c2ad7 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 18 Aug 2020 17:51:51 -0400 Subject: [PATCH 74/85] Fix Champinship typo --- include/battle_message.h | 2 +- src/battle_message.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/battle_message.h b/include/battle_message.h index a3f2636e59..011a1cb0c7 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -274,7 +274,7 @@ extern const u8 gText_PkmnGettingPumped[]; extern const u8 gText_PkmnShroudedInMist[]; extern const u8 gText_PkmnsXPreventsSwitching[]; extern const u8 gText_TheGreatNewHope[]; -extern const u8 gText_WillChampinshipDreamComeTrue[]; +extern const u8 gText_WillChampionshipDreamComeTrue[]; extern const u8 gText_AFormerChampion[]; extern const u8 gText_ThePreviousChampion[]; extern const u8 gText_TheUnbeatenChampion[]; diff --git a/src/battle_message.c b/src/battle_message.c index 14eba28ab3..191fffb016 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1285,7 +1285,7 @@ const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] = }; const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); -const u8 gText_WillChampinshipDreamComeTrue[] = _("Will the championship dream come true?!\p"); +const u8 gText_WillChampionshipDreamComeTrue[] = _("Will the championship dream come true?!\p"); const u8 gText_AFormerChampion[] = _("A former CHAMPION!\p"); const u8 gText_ThePreviousChampion[] = _("The previous CHAMPION!\p"); const u8 gText_TheUnbeatenChampion[] = _("The unbeaten CHAMPION!\p"); From e27975afaae8604ce397f09b6a75185cc2c84342 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Sun, 16 Aug 2020 13:14:35 -0400 Subject: [PATCH 75/85] Match battle script commands by correcting a function and the pokemon struct --- include/battle.h | 22 +-- include/constants/battle.h | 2 +- src/battle_script_commands.c | 322 ++--------------------------------- 3 files changed, 25 insertions(+), 321 deletions(-) diff --git a/include/battle.h b/include/battle.h index 7da0401885..78e7b809a2 100644 --- a/include/battle.h +++ b/include/battle.h @@ -124,22 +124,22 @@ struct ProtectStruct u32 flinchImmobility:1; u32 notFirstStrike:1; u32 palaceUnableToUseMove:1; - u32 physicalDmg; - u32 specialDmg; + s32 physicalDmg; + s32 specialDmg; u8 physicalBattlerId; u8 specialBattlerId; }; struct SpecialStatus { - u8 statLowered:1; - u8 lightningRodRedirected:1; - u8 restoredBattlerSprite: 1; - u8 intimidatedMon:1; - u8 traced:1; - u8 ppNotAffectedByPressure:1; - u8 flag40:1; - u8 focusBanded:1; + u32 statLowered:1; + u32 lightningRodRedirected:1; + u32 restoredBattlerSprite: 1; + u32 intimidatedMon:1; + u32 traced:1; + u32 ppNotAffectedByPressure:1; + u32 flag40:1; + u32 focusBanded:1; s32 dmg; s32 physicalDmg; s32 specialDmg; @@ -254,7 +254,7 @@ struct BattleResults u16 playerMon2Species; // 0x26 u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A - u8 filler35[1]; // 0x35 + u8 filler35; // 0x35 u8 catchAttempts[11]; // 0x36 }; diff --git a/include/constants/battle.h b/include/constants/battle.h index 8b860e3848..fa8f422c4b 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -186,7 +186,7 @@ #define HITMARKER_x4000000 (1 << 26) #define HITMARKER_CHARGING (1 << 27) #define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28) -#define HITMARKER_FAINTED2(battler) (1 << (28 + battler)) +#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler) // Per-side statuses that affect an entire party #define SIDE_STATUS_REFLECT (1 << 0) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 5c1b1e3707..b2e02b2876 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3489,7 +3489,6 @@ static void Cmd_getexp(void) } } -#ifdef NONMATCHING static void Cmd_unknown_24(void) { u16 HP_count = 0; @@ -3521,7 +3520,9 @@ static void Cmd_unknown_24(void) if (HP_count == 0) gBattleOutcome |= B_OUTCOME_LOST; - for (HP_count = 0, i = 0; i < PARTY_SIZE; i++) + HP_count = 0; + + for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) @@ -3535,33 +3536,31 @@ static void Cmd_unknown_24(void) if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) { - s32 foundPlayer; - s32 foundOpponent; - - // Impossible to decompile loops. - for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2) + s32 foundPlayer = 0, foundOpponent; + for (i = 0; i < gBattlersCount; i += 2) { - if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40) + if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) foundPlayer++; } - for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2) + foundOpponent = 0; + for (i = 1; i < gBattlersCount; i += 2) { - if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40) + if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) foundOpponent++; } if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (foundOpponent + foundPlayer > 1) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } else { if (foundOpponent != 0 && foundPlayer != 0) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -3571,301 +3570,6 @@ static void Cmd_unknown_24(void) gBattlescriptCurrInstr += 5; } } -#else -NAKED -static void Cmd_unknown_24(void) -{ - asm("\n\ - .syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - movs r6, 0\n\ - ldr r0, =gBattleControllerExecFlags\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0804ACE2\n\ - b _0804AF22\n\ - _0804ACE2:\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 15\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AD48\n\ - ldr r0, =gPartnerTrainerId\n\ - ldrh r1, [r0]\n\ - ldr r0, =0x00000c03\n\ - cmp r1, r0\n\ - bne _0804AD48\n\ - movs r5, 0\n\ - _0804ACFC:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0804AD2C\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0804AD2C\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - _0804AD2C:\n\ - adds r5, 0x1\n\ - cmp r5, 0x2\n\ - ble _0804ACFC\n\ - b _0804ADA8\n\ - .pool\n\ - _0804AD48:\n\ - movs r5, 0\n\ - _0804AD4A:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0804ADA2\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0804ADA2\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 11\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AD94\n\ - ldr r0, =gBattleStruct\n\ - ldr r0, [r0]\n\ - movs r1, 0xA8\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - ldr r2, =gBitTable\n\ - lsls r0, r5, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0804ADA2\n\ - _0804AD94:\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - _0804ADA2:\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _0804AD4A\n\ - _0804ADA8:\n\ - cmp r6, 0\n\ - bne _0804ADB6\n\ - ldr r0, =gBattleOutcome\n\ - ldrb r1, [r0]\n\ - movs r2, 0x2\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - _0804ADB6:\n\ - movs r6, 0\n\ - movs r5, 0\n\ - _0804ADBA:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, =gEnemyParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0804AE10\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0804AE10\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 11\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AE02\n\ - ldr r0, =gBattleStruct\n\ - ldr r0, [r0]\n\ - ldr r1, =0x000002a1\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - ldr r2, =gBitTable\n\ - lsls r0, r5, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0804AE10\n\ - _0804AE02:\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - _0804AE10:\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _0804ADBA\n\ - ldr r2, =gBattleOutcome\n\ - cmp r6, 0\n\ - bne _0804AE24\n\ - ldrb r0, [r2]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - _0804AE24:\n\ - ldrb r0, [r2]\n\ - cmp r0, 0\n\ - bne _0804AF1A\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r1, [r0]\n\ - ldr r2, =0x02000002\n\ - ands r1, r2\n\ - mov r8, r0\n\ - cmp r1, 0\n\ - beq _0804AF1A\n\ - movs r3, 0\n\ - movs r5, 0\n\ - ldr r0, =gBattlersCount\n\ - ldrb r1, [r0]\n\ - mov r12, r0\n\ - ldr r7, =gBattlescriptCurrInstr\n\ - cmp r3, r1\n\ - bge _0804AE70\n\ - ldr r0, =gHitMarker\n\ - movs r6, 0x80\n\ - lsls r6, 21\n\ - ldr r4, [r0]\n\ - adds r2, r1, 0\n\ - ldr r1, =gSpecialStatuses\n\ - _0804AE54:\n\ - adds r0, r6, 0\n\ - lsls r0, r5\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - beq _0804AE68\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _0804AE68\n\ - adds r3, 0x1\n\ - _0804AE68:\n\ - adds r1, 0x28\n\ - adds r5, 0x2\n\ - cmp r5, r2\n\ - blt _0804AE54\n\ - _0804AE70:\n\ - movs r2, 0\n\ - movs r5, 0x1\n\ - mov r4, r12\n\ - ldrb r1, [r4]\n\ - cmp r5, r1\n\ - bge _0804AEAA\n\ - ldr r0, =gHitMarker\n\ - movs r4, 0x80\n\ - lsls r4, 21\n\ - mov r12, r4\n\ - ldr r6, [r0]\n\ - ldr r0, =gSpecialStatuses\n\ - adds r4, r1, 0\n\ - adds r1, r0, 0\n\ - adds r1, 0x14\n\ - _0804AE8E:\n\ - mov r0, r12\n\ - lsls r0, r5\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _0804AEA2\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _0804AEA2\n\ - adds r2, 0x1\n\ - _0804AEA2:\n\ - adds r1, 0x28\n\ - adds r5, 0x2\n\ - cmp r5, r4\n\ - blt _0804AE8E\n\ - _0804AEAA:\n\ - mov r1, r8\n\ - ldr r0, [r1]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AEF0\n\ - adds r0, r2, r3\n\ - cmp r0, 0x1\n\ - bgt _0804AEF8\n\ - b _0804AF12\n\ - .pool\n\ - _0804AEF0:\n\ - cmp r2, 0\n\ - beq _0804AF12\n\ - cmp r3, 0\n\ - beq _0804AF12\n\ - _0804AEF8:\n\ - ldr r2, [r7]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - adds r1, r0\n\ - str r1, [r7]\n\ - b _0804AF22\n\ - _0804AF12:\n\ - ldr r0, [r7]\n\ - adds r0, 0x5\n\ - str r0, [r7]\n\ - b _0804AF22\n\ - _0804AF1A:\n\ - ldr r1, =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x5\n\ - str r0, [r1]\n\ - _0804AF22:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} - -#endif // NONMATCHING static void MoveValuesCleanUp(void) { @@ -5831,8 +5535,8 @@ static void Cmd_hitanimation(void) static u32 GetTrainerMoneyToGive(u16 trainerId) { u32 i = 0; - u32 lastMonLevel = 0; - u32 moneyReward = 0; + u32 moneyReward; + u8 lastMonLevel = 0; if (trainerId == TRAINER_SECRET_BASE) { From 469ec5f248ce3f3708940dfaedcb1b1c2d6d3380 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 21 Aug 2020 02:36:48 -0400 Subject: [PATCH 76/85] Document contest AI commands --- asm/macros/contest_ai_script.inc | 790 ++++++++++++++++++++++--------- data/contest_ai_scripts.s | 126 ++--- include/contest.h | 4 +- src/contest.c | 8 +- src/contest_ai.c | 713 ++++++++++++++-------------- src/contest_effect.c | 5 +- 6 files changed, 1004 insertions(+), 642 deletions(-) diff --git a/asm/macros/contest_ai_script.inc b/asm/macros/contest_ai_script.inc index 763c3d1c40..7a5d669f4a 100644 --- a/asm/macros/contest_ai_script.inc +++ b/asm/macros/contest_ai_script.inc @@ -1,6 +1,8 @@ +@ A large number of the Contest AI commands go unused, so their corresponding macros in this file are similarly unused + @ Add a positive/negative value to the score of the move being evaluated. - .macro score score + .macro score score:req .byte 0x00 .byte \score .endm @@ -9,36 +11,36 @@ .byte 0x01 .endm - .macro if_appeal_num_less_than param, addr + .macro if_appeal_num_less_than num:req, destination:req .byte 0x02 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_appeal_num_more_than param, addr + .macro if_appeal_num_more_than num:req, destination:req .byte 0x03 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_appeal_num_eq param, addr + .macro if_appeal_num_eq num:req, destination:req .byte 0x04 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_appeal_num_not_eq param, addr + .macro if_appeal_num_not_eq num:req, destination:req .byte 0x05 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_last_appeal addr:req - if_appeal_num_eq CONTEST_LAST_APPEAL, \addr + .macro if_last_appeal destination:req + if_appeal_num_eq CONTEST_LAST_APPEAL, \destination .endm - .macro if_not_last_appeal addr:req - if_appeal_num_not_eq CONTEST_LAST_APPEAL, \addr + .macro if_not_last_appeal destination:req + if_appeal_num_not_eq CONTEST_LAST_APPEAL, \destination .endm @ audience excitement @@ -47,28 +49,28 @@ .byte 0x06 .endm - .macro if_excitement_less_than param, addr + .macro if_excitement_less_than num:req, destination:req .byte 0x07 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_excitement_more_than param, addr + .macro if_excitement_more_than num:req, destination:req .byte 0x08 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_excitement_eq param, addr + .macro if_excitement_eq num:req, destination:req .byte 0x09 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_excitement_not_eq param, addr + .macro if_excitement_not_eq num:req, destination:req .byte 0x0A - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm @ the order that the user goes in the current appeal @@ -77,28 +79,28 @@ .byte 0x0B .endm - .macro if_user_order_less_than param addr + .macro if_user_order_less_than num:req, destination:req .byte 0x0C - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_user_order_more_than param addr + .macro if_user_order_more_than num:req, destination:req .byte 0x0D - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_user_order_eq param addr + .macro if_user_order_eq num:req, destination:req .byte 0x0E - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_user_order_not_eq param addr + .macro if_user_order_not_eq num:req, destination:req .byte 0x0F - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm @ user condition @@ -107,40 +109,89 @@ .byte 0x10 .endm - .macro if_user_condition_less_than param, addr + .macro if_user_condition_less_than num:req, destination:req .byte 0x11 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_user_condition_more_than param, addr + .macro if_user_condition_more_than num:req, destination:req .byte 0x12 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_user_condition_eq param, addr + .macro if_user_condition_eq num:req, destination:req .byte 0x13 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_user_condition_not_eq param, addr + .macro if_user_condition_not_eq num:req, destination:req .byte 0x14 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm -@ 15 -@ 16 -@ 17 -@ 18 -@ 19 -@ 1A -@ 1B -@ 1C -@ 1D -@ 1E +@ appeal points + + .macro get_point_total + .byte 0x15 + .endm + + .macro if_points_less_than num:req, destination:req + .byte 0x16 + .byte \num + .4byte \destination + .endm + + .macro if_points_more_than num:req, destination:req + .byte 0x17 + .byte \num + .4byte \destination + .endm + + .macro if_points_eq num:req, destination:req + .byte 0x18 + .byte \num + .4byte \destination + .endm + + .macro if_points_not_eq num:req, destination:req + .byte 0x19 + .byte \num + .4byte \destination + .endm + +@ preliminary (pre-appeal) judging points + + .macro get_preliminary_points + .byte 0x1A + .endm + + .macro if_preliminary_points_less_than num:req, destination:req + .byte 0x1B + .byte \num + .4byte \destination + .endm + + .macro if_preliminary_points_more_than num:req, destination:req + .byte 0x1C + .byte \num + .4byte \destination + .endm + + .macro if_preliminary_points_eq num:req, destination:req + .byte 0x1D + .byte \num + .4byte \destination + .endm + + .macro if_preliminary_points_not_eq num:req, destination:req + .byte 0x1E + .byte \num + .4byte \destination + .endm @ contest type @@ -148,16 +199,16 @@ .byte 0x1F .endm - .macro if_contest_type_eq param, addr + .macro if_contest_type_eq type:req, destination:req .byte 0x20 - .byte \param - .4byte \addr + .byte \type + .4byte \destination .endm - .macro if_contest_type_not_eq param, addr + .macro if_contest_type_not_eq type:req, destination:req .byte 0x21 - .byte \param - .4byte \addr + .byte \type + .4byte \destination .endm @ move excitement (change in excitement due to move) @@ -166,28 +217,28 @@ .byte 0x22 .endm - .macro if_move_excitement_less_than param, addr + .macro if_move_excitement_less_than num:req, destination:req .byte 0x23 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_move_excitement_more_than param, addr + .macro if_move_excitement_more_than num:req, destination:req .byte 0x24 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_move_excitement_eq param, addr + .macro if_move_excitement_eq num:req, destination:req .byte 0x25 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_move_excitement_not_eq param, addr + .macro if_move_excitement_not_eq num:req, destination:req .byte 0x26 - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm @ move effect @@ -196,16 +247,16 @@ .byte 0x27 .endm - .macro if_effect_eq param, addr + .macro if_effect_eq effect:req, destination:req .byte 0x28 - .byte \param - .4byte \addr + .byte \effect + .4byte \destination .endm - .macro if_effect_not_eq param, addr + .macro if_effect_not_eq effect:req, destination:req .byte 0x29 - .byte \param - .4byte \addr + .byte \effect + .4byte \destination .endm @ move effect type @@ -214,16 +265,16 @@ .byte 0x2A .endm - .macro if_effect_type_eq param, addr + .macro if_effect_type_eq type:req, destination:req .byte 0x2B - .byte \param - .4byte \addr + .byte \type + .4byte \destination .endm - .macro if_effect_type_not_eq param, addr + .macro if_effect_type_not_eq type:req, destination:req .byte 0x2C - .byte \param - .4byte \addr + .byte \type + .4byte \destination .endm @ whether the current move is the most appealing in the user's moveset @@ -232,23 +283,81 @@ .byte 0x2D .endm - .macro if_most_appealing_move addr + .macro if_most_appealing_move destination:req .byte 0x2E - .4byte \addr + .4byte \destination .endm -@ 2F -@ 30 -@ 31 -@ 32 -@ 33 -@ 34 -@ 35 -@ 36 -@ 37 -@ 38 -@ 39 -@ 3A +@ whether the current move is the most jamming in the user's moveset + + .macro check_most_jamming_move + .byte 0x2F + .endm + + .macro if_most_jamming_move destination:req + .byte 0x30 + .4bye \destination + .endm + +@ number of hearts the current move's appeal would provide + + .macro get_num_move_hearts + .byte 0x31 + .endm + + .macro if_num_move_hearts_less_than num:req, destination:req + .byte 0x32 + .byte \num + .4byte \destination + .endm + + .macro if_num_move_hearts_more_than num:req, destination:req + .byte 0x33 + .byte \num + .4byte \destination + .endm + + .macro if_num_move_hearts_eq num:req, destination:req + .byte 0x34 + .byte \num + .4byte \destination + .endm + + .macro if_num_move_hearts_not_eq num:req, destination:req + .byte 0x35 + .byte \num + .4byte \destination + .endm + +@ number of hearts the current move's jam would remove + + .macro get_num_move_jam_hearts + .byte 0x36 + .endm + + .macro if_num_move_jam_hearts_less_than num:req, destination:req + .byte 0x37 + .byte \num + .4byte \destination + .endm + + .macro if_num_move_jam_hearts_more_than num:req, destination:req + .byte 0x38 + .byte \num + .4byte \destination + .endm + + .macro if_num_move_jam_hearts_eq num:req, destination:req + .byte 0x39 + .byte \num + .4byte \destination + .endm + + .macro if_num_move_jam_hearts_not_eq num:req, destination:req + .byte 0x3A + .byte \num + .4byte \destination + .endm @ number of times current move has been used @@ -256,28 +365,28 @@ .byte 0x3B .endm - .macro if_move_used_count_less_than param, addr + .macro if_move_used_count_less_than num:req, destination:req .byte 0x3C - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_move_used_count_more_than param, addr + .macro if_move_used_count_more_than num:req, destination:req .byte 0x3D - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_move_used_count_eq param, addr + .macro if_move_used_count_eq num:req, destination:req .byte 0x3E - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_move_used_count_not_eq param, addr + .macro if_move_used_count_not_eq num:req, destination:req .byte 0x3F - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm @ whether the current move is a combo starter (with another move in the moveset) @@ -286,14 +395,14 @@ .byte 0x40 .endm - .macro if_combo_starter addr + .macro if_combo_starter destination:req .byte 0x41 - .4byte \addr + .4byte \destination .endm - .macro if_not_combo_starter addr + .macro if_not_combo_starter destination:req .byte 0x42 - .4byte \addr + .4byte \destination .endm @ whether the current move is a combo finisher (with another move in the moveset) @@ -302,14 +411,14 @@ .byte 0x43 .endm - .macro if_combo_finisher addr + .macro if_combo_finisher destination:req .byte 0x44 - .4byte \addr + .4byte \destination .endm - .macro if_not_combo_finisher addr + .macro if_not_combo_finisher destination:req .byte 0x45 - .4byte \addr + .4byte \destination .endm @ whether the current move would finish a combo @@ -318,170 +427,403 @@ .byte 0x46 .endm - .macro if_would_finish_combo addr + .macro if_would_finish_combo destination:req .byte 0x47 - .4byte \addr + .4byte \destination .endm - .macro if_would_not_finish_combo addr + .macro if_would_not_finish_combo destination:req .byte 0x48 - .4byte \addr + .4byte \destination .endm @ condition of mon (indexed by order) - .macro get_condition mon + .macro get_condition mon:req .byte 0x49 .byte \mon .endm - .macro if_condition_less_than mon, value, addr + .macro if_condition_less_than mon:req, num:req destination:req .byte 0x4A .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_condition_more_than mon, value, addr + .macro if_condition_more_than mon:req, num:req, destination:req .byte 0x4B .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_condition_eq mon, value, addr + .macro if_condition_eq mon:req, num:req, destination:req .byte 0x4C .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_condition_not_eq mon, value, addr + .macro if_condition_not_eq mon:req, num:req, destination:req .byte 0x4D .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm @ whether the mon used a combo starter move @ Even though this value is always 1 or 0 (i.e. TRUE/FALSE), @ there are less-than and greater-than comparison operations for some reason. - .macro get_used_combo_starter mon + .macro get_used_combo_starter mon:req .byte 0x4E .byte \mon .endm - .macro if_used_combo_starter_less_than mon, value, addr + .macro if_used_combo_starter_less_than mon:req, num:req, destination:req .byte 0x4F .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_used_combo_starter_more_than mon, value, addr + .macro if_used_combo_starter_more_than mon:req, num:req, destination:req .byte 0x50 .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_used_combo_starter_eq mon, value, addr + .macro if_used_combo_starter_eq mon:req, num:req, destination:req .byte 0x51 .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm - .macro if_used_combo_starter_not_eq mon, value, addr + .macro if_used_combo_starter_not_eq mon:req, num:req, destination:req .byte 0x52 .byte \mon - .byte \value - .4byte \addr + .byte \num + .4byte \destination .endm @ whether the mon can make an appeal - .macro check_can_participate mon + .macro check_can_participate mon:req .byte 0x53 .byte \mon .endm - .macro if_can_participate mon, addr + .macro if_can_participate mon:req, destination:req .byte 0x54 .byte \mon - .4byte \addr + .4byte \destination .endm - .macro if_cannot_participate mon, addr + .macro if_cannot_participate mon:req, destination:req .byte 0x55 .byte \mon - .4byte \addr + .4byte \destination .endm -@ 56 -@ 57 +@ whether the mon just completed a combo - .macro contest_58 param addr + .macro get_completed_combo mon:req + .byte 0x56 + .byte \mon + .4byte \destination + .endm + + .macro if_completed_combo mon:req, destination:req + .byte 0x57 + .byte \mon + .4byte \destination + .endm + + .macro if_not_completed_combo mon:req destination:req .byte 0x58 - .byte \param - .4byte \addr + .byte \mon + .4byte \destination .endm -@ 59 -@ 5A -@ 5B -@ 5C -@ 5D -@ 5E -@ 5F -@ 60 -@ 61 -@ 62 -@ 63 -@ 64 -@ 65 -@ 66 -@ 67 -@ 68 -@ 69 -@ 6A -@ 6B -@ 6C -@ 6D -@ 6E -@ 6F -@ 70 -@ 71 -@ 72 -@ 73 -@ 74 -@ 75 -@ 76 -@ 77 -@ 78 -@ 79 -@ 7A -@ 7B -@ 7C +@ comparing appeal points to another mon - .macro if_random param addr + .macro get_points_diff mon:req + .byte 0x59 + .byte \mon + .endm + + .macro if_points_more_than_mon mon:req, destination:req + .byte 0x5A + .byte \mon + .4byte \destination + .endm + + .macro if_points_less_than_mon mon:req, destination:req + .byte 0x5B + .byte \mon + .4byte \destination + .endm + + .macro if_points_eq_mon mon:req, destination:req + .byte 0x5C + .byte \mon + .4byte \destination + .endm + + .macro if_points_not_eq_mon mon:req, destination:req + .byte 0x5D + .byte \mon + .4byte \destination + .endm + +@ comparing preliminary judging points to another mon + + .macro get_preliminary_points_diff mon:req + .byte 0x5E + .byte \mon + .endm + + .macro if_preliminary_points_more_than_mon mon:req, destination:req + .byte 0x5F + .byte \mon + .4byte \destination + .endm + + .macro if_preliminary_points_less_than_mon mon:req, destination:req + .byte 0x60 + .byte \mon + .4byte \destination + .endm + + .macro if_preliminary_points_eq_mon mon:req, destination:req + .byte 0x61 + .byte \mon + .4byte \destination + .endm + + .macro if_preliminary_points_not_eq_mon mon:req, destination:req + .byte 0x62 + .byte \mon + .4byte \destination + .endm + +@ checking move history for move effect + + .macro get_used_moves_effect mon:req, round:req + .byte 0x63 + .byte \mon + .byte \round + .endm + + .macro if_used_moves_effect_less_than mon:req, round:req, effect:req, destination:req + .byte 0x64 + .byte \mon + .byte \round + .byte \effect + .4byte \destination + .endm + + .macro if_used_moves_effect_more_than mon:req, round:req, effect:req, destination:req + .byte 0x65 + .byte \mon + .byte \round + .byte \effect + .4byte \destination + .endm + + .macro if_used_moves_effect_eq mon:req, round:req, effect:req, destination:req + .byte 0x66 + .byte \mon + .byte \round + .byte \effect + .4byte \destination + .endm + + .macro if_used_moves_effect_not_eq mon:req, round:req, effect:req, destination:req + .byte 0x67 + .byte \mon + .byte \round + .byte \effect + .4byte \destination + .endm + +@ checking move history for excitement + + .macro get_used_moves_excitement mon:req, round:req + .byte 0x68 + .byte \mon + .byte \round + .endm + + .macro if_used_moves_excitement_less_than mon:req, round:req, num:req, destination:req + .byte 0x69 + .byte \mon + .byte \round + .byte \num + .4byte \destination + .endm + + .macro if_used_moves_excitement_more_than mon:req, round:req, num:req, destination:req + .byte 0x6A + .byte \mon + .byte \round + .byte \num + .4byte \destination + .endm + + .macro if_used_moves_excitement_eq mon:req, round:req, num:req, destination:req + .byte 0x6B + .byte \mon + .byte \round + .byte \num + .4byte \destination + .endm + + .macro if_used_moves_excitement_not_eq mon:req, round:req, num:req, destination:req + .byte 0x6C + .byte \mon + .byte \round + .byte \num + .4byte \destination + .endm + +@ checking move history for effect type + + .macro get_used_moves_effect_type mon:req, round:req + .byte 0x6D + .byte \mon + .byte \round + .endm + + .macro if_used_moves_effect_type_eq mon:req, round:req, type:req, destination:req + .byte 0x6E + .byte \mon + .byte \round + .byte \type + .4byte \destination + .endm + + .macro if_used_moves_effect_type_not_eq mon:req, round:req, type:req, destination:req + .byte 0x6F + .byte \mon + .byte \round + .byte \type + .4byte \destination + .endm + +@ generic commands + + .macro save_result varId:req + .byte 0x70 + .byte \varId + .endm + + .macro setvar varId:req, num:req + .byte 0x71 + .byte \varId + .2byte \num + .endm + + .macro add varId:req, num:req + .byte 0x72 + .byte \varId + .2byte \num + .endm + + .macro addvar varId1:req, varId2:req + .byte 0x73 + .byte \varId1 + .byte \varId2 + .endm + + @ Duplicate of above + .macro addvar_duplicate varId1:req, varId2:req + .byte 0x74 + .byte \varId1 + .byte \varId2 + .endm + + .macro if_less_than varId:req, num:req, destination:req + .byte 0x75 + .byte \varId + .2byte \num + .4byte \destination + .endm + + .macro if_greater_than varId:req, num:req, destination:req + .byte 0x76 + .byte \varId + .2byte \num + .4byte \destination + .endm + + .macro if_eq varId:req, num:req, destination:req + .byte 0x77 + .byte \varId + .2byte \num + .4byte \destination + .endm + + .macro if_not_eq varId:req, num:req, destination:req + .byte 0x78 + .byte \varId + .2byte \num + .4byte \destination + .endm + + .macro if_less_than_var varId1:req, varId2:req, destination:req + .byte 0x79 + .byte \varId1 + .byte \varId2 + .4byte \destination + .endm + + .macro if_greater_than_var varId1:req, varId2:req, destination:req + .byte 0x7A + .byte \varId1 + .byte \varId2 + .4byte \destination + .endm + + .macro if_eq_var varId1:req, varId2:req, destination:req + .byte 0x7B + .byte \varId1 + .byte \varId2 + .4byte \destination + .endm + + .macro if_not_eq_var varId1:req, varId2:req, destination:req + .byte 0x7C + .byte \varId1 + .byte \varId2 + .4byte \destination + .endm + + @ NOTE: Random is broken (see ContestAICmd_if_random_less_than) + .macro if_random_less_than num:req, destination:req .byte 0x7D - .byte \param - .4byte \addr + .byte \num + .4byte \destination .endm -@ 7E + .macro if_random_greater_than num:req, destination:req + .byte 0x7E + .byte \num + .4byte \destination + .endm - .macro jump addr + .macro goto destination:req .byte 0x7F - .4byte \addr + .4byte \destination .endm - .macro call addr + .macro call destination:req .byte 0x80 - .4byte \addr + .4byte \destination .endm .macro end @@ -492,21 +834,29 @@ .byte 0x82 .endm - .macro if_user_has_exciting_move addr + .macro if_user_has_exciting_move destination:req .byte 0x83 - .4byte \addr + .4byte \destination .endm - .macro if_user_doesnt_have_exciting_move addr + .macro if_user_doesnt_have_exciting_move destination:req .byte 0x84 - .4byte \addr + .4byte \destination .endm -@ 85 -@ 86 + .macro check_user_has_move move:req + .byte 0x85 + .2byte \move + .endm - .macro if_effect_in_user_moveset param addr + .macro if_user_has_move move:req, destination:req + .byte 0x86 + .2byte \move + .4byte \destination + .endm + + .macro if_effect_in_user_moveset effect:req, destination:req .byte 0x87 - .2byte \param - .4byte \addr + .2byte \effect + .4byte \destination .endm diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index 4a0bed8175..bb8d32f577 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -159,29 +159,29 @@ AI_contest09_081DC2AB: end AI_contest0F_1_081DC2AB: if_user_order_not_eq MON_1, AI_contest7D_1_081DC2AB - if_random 51, AI_end_081DC2AB + if_random_less_than 51, AI_end_081DC2AB score +20 end AI_contest7D_1_081DC2AB: - if_random 127, AI_end_081DC2AB + if_random_less_than 127, AI_end_081DC2AB score -10 end AI_contest0F_2_081DC2AB: if_user_order_not_eq MON_1, AI_contest7D_3_081DC2AB if_last_appeal AI_score_081DC2AB AI_contest7D_2_081DC2AB: - if_random 51, AI_end_081DC2AB + if_random_less_than 51, AI_end_081DC2AB score +10 end AI_score_081DC2AB: score +15 end AI_contest7D_3_081DC2AB: - if_random 127, AI_end_081DC2AB + if_random_less_than 127, AI_end_081DC2AB score +10 end AI_contest7D_4_081DC2AB: - if_random 127, AI_end_081DC2AB + if_random_less_than 127, AI_end_081DC2AB score +10 end AI_contest3D_081DC2AB: @@ -191,7 +191,7 @@ AI_contest3D_081DC2AB: score +30 end AI_contest7D_5_081DC2AB: - if_random 100, AI_end_081DC2AB + if_random_less_than 100, AI_end_081DC2AB score +10 end AI_contest29_081DC2AB: @@ -225,17 +225,17 @@ AI_score_081DC348: end AI_contest04_1_081DC348: if_last_appeal AI_contest7D_081DC348 - if_random 150, AI_end_081DC348 + if_random_less_than 150, AI_end_081DC348 score +10 end AI_contest04_2_081DC348: if_last_appeal AI_contest7D_081DC348 - if_random 125, AI_end_081DC348 + if_random_less_than 125, AI_end_081DC348 score +10 end AI_contest04_3_081DC348: if_last_appeal AI_contest7D_081DC348 - if_random 50, AI_end_081DC348 + if_random_less_than 50, AI_end_081DC348 score +10 end AI_contest04_4_081DC348: @@ -243,7 +243,7 @@ AI_contest04_4_081DC348: score +10 end AI_contest7D_081DC348: - if_random 125, AI_end_081DC348 + if_random_less_than 125, AI_end_081DC348 score -15 end AI_end_081DC348: @@ -276,11 +276,11 @@ ContestEffect39_score1: score +20 end ContestEffect39_score2: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +15 end ContestEffect39_score3: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +5 end ContestEffect39_score4: @@ -289,27 +289,27 @@ ContestEffect39_score4: ContestEffect40: if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_FIRST, ContestEffectEnd - if_random 50, ContestEffectEnd + if_random_less_than 50, ContestEffectEnd score +20 end ContestEffect41: if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_LAST, ContestEffectEnd - if_random 50, ContestEffectEnd + if_random_less_than 50, ContestEffectEnd score +20 end ContestEffect3: if_user_order_not_eq MON_4, ContestEffectEnd - if_random 50, ContestEffectEnd + if_random_less_than 50, ContestEffectEnd score +15 end if_last_appeal ContestEffect3_7D - if_random 220, ContestEffect3_score + if_random_less_than 220, ContestEffect3_score score +10 end ContestEffect3_7D: - if_random 20, ContestEffectEnd + if_random_less_than 20, ContestEffectEnd score +15 end ContestEffect3_score: @@ -319,7 +319,7 @@ ContestEffect3_score: ContestEffect38: if_effect_in_user_moveset CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, ContestEffect38_contest04 if_user_condition_eq 3, ContestEffect38_score1 - if_random 50, ContestEffectEnd + if_random_less_than 50, ContestEffectEnd score +15 end ContestEffect38_score1: @@ -329,11 +329,11 @@ ContestEffect38_contest04: if_last_appeal ContestEffect38_score2 if_appeal_num_eq 0, ContestEffect38_random if_move_used_count_eq 1, ContestEffectEnd - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +10 end ContestEffect38_random: - if_random 100, ContestEffectEnd + if_random_less_than 100, ContestEffectEnd score +10 end ContestEffect38_score2: @@ -350,7 +350,7 @@ ContestEffect47: score +10 end ContestEffect47_random: - if_random 127, ContestEffectEnd + if_random_less_than 127, ContestEffectEnd score +10 end @@ -385,7 +385,7 @@ ContestEffect32_score2: ContestEffect32_score3: if_cannot_participate MON_1, ContestEffect32_score4 score +5 - jump ContestEffect32_score4 + goto ContestEffect32_score4 end ContestEffect32_score4: if_cannot_participate MON_2, ContestEffectEnd @@ -394,12 +394,12 @@ ContestEffect32_score4: ContestEffect32_score5: if_cannot_participate MON_1, ContestEffect32_score6 score +5 - jump ContestEffect32_score6 + goto ContestEffect32_score6 end ContestEffect32_score6: if_cannot_participate MON_2, ContestEffect32_score7 score +5 - jump ContestEffect32_score7 + goto ContestEffect32_score7 end ContestEffect32_score7: if_cannot_participate MON_3, ContestEffectEnd @@ -416,25 +416,25 @@ ContestEffect46_05: if_excitement_eq 3, ContestEffect46_score3 end ContestEffect46_score1: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score -15 end ContestEffect46_score2: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +20 end ContestEffect46_score3: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +15 end ContestEffect46_score4: - if_random 178, ContestEffectEnd + if_random_less_than 178, ContestEffectEnd score +10 end ContestEffect27: if_user_order_eq MON_1, ContestEffectEnd - jump ContestEffect27_55_1 + goto ContestEffect27_55_1 end ContestEffect27_55_1: if_cannot_participate MON_1, ContestEffect27_noscore @@ -444,17 +444,17 @@ ContestEffect27_55_1: if_condition_eq MON_1, 3, ContestEffect27_score3 end ContestEffect27_score1: - if_random 125, ContestEffect27_55_2 + if_random_less_than 125, ContestEffect27_55_2 score +5 if_user_order_more_than MON_2, ContestEffect27_55_2 end ContestEffect27_score2: - if_random 125, ContestEffect27_55_2 + if_random_less_than 125, ContestEffect27_55_2 score +10 if_user_order_more_than MON_2, ContestEffect27_55_2 end ContestEffect27_score3: - if_random 125, ContestEffect27_55_2 + if_random_less_than 125, ContestEffect27_55_2 score +15 if_user_order_more_than MON_2, ContestEffect27_55_2 end @@ -469,17 +469,17 @@ ContestEffect27_55_2: if_condition_eq MON_2, 3, ContestEffect27_score6 end ContestEffect27_score4: - if_random 125, ContestEffect27_55_3 + if_random_less_than 125, ContestEffect27_55_3 score +5 if_user_order_more_than MON_3, ContestEffect27_55_3 end ContestEffect27_score5: - if_random 125, ContestEffect27_55_3 + if_random_less_than 125, ContestEffect27_55_3 score +10 if_user_order_more_than MON_3, ContestEffect27_55_3 end ContestEffect27_score6: - if_random 125, ContestEffect27_55_3 + if_random_less_than 125, ContestEffect27_55_3 score +15 if_user_order_more_than MON_3, ContestEffect27_55_3 end @@ -494,15 +494,15 @@ ContestEffect27_55_3: if_condition_eq MON_3, 3, ContestEffect27_score9 end ContestEffect27_score7: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +5 end ContestEffect27_score8: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +10 end ContestEffect27_score9: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +15 end ContestEffect27_end: @@ -510,44 +510,44 @@ ContestEffect27_end: ContestEffect16or17: if_user_order_eq MON_1, ContestEffectEnd - jump ContestEffect16or17_55 + goto ContestEffect16or17_55 end ContestEffect16or17_55: if_cannot_participate MON_1, ContestEffect16or17_0E_1 if_used_combo_starter_eq MON_1, TRUE, ContestEffect16or17_0E_1 - if_random 125, ContestEffect16or17_0E_1 + if_random_less_than 125, ContestEffect16or17_0E_1 score +2 - contest_58 MON_1, ContestEffect16or17_0E_1 + if_not_completed_combo MON_1, ContestEffect16or17_0E_1 score +8 end ContestEffect16or17_0E_1: if_user_order_eq MON_2, ContestEffectEnd if_cannot_participate MON_2, ContestEffect16or17_0E_2 if_used_combo_starter_eq MON_2, TRUE, ContestEffect16or17_0E_2 - if_random 125, ContestEffect16or17_0E_2 + if_random_less_than 125, ContestEffect16or17_0E_2 score +2 - contest_58 MON_2, ContestEffect16or17_0E_2 + if_not_completed_combo MON_2, ContestEffect16or17_0E_2 score +8 end ContestEffect16or17_0E_2: if_user_order_eq MON_3, ContestEffectEnd if_cannot_participate MON_3, ContestEffectEnd if_used_combo_starter_eq MON_3, TRUE, ContestEffectEnd - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +2 - contest_58 MON_3, ContestEffectEnd + if_not_completed_combo MON_3, ContestEffectEnd score +8 end ContestEffect_FollowingMonsNervous: if_user_order_eq MON_4, ContestEffectEnd - jump ContestEffect_FollowingMonsNervous_CheckMon4 + goto ContestEffect_FollowingMonsNervous_CheckMon4 end ContestEffect_FollowingMonsNervous_CheckMon4: if_cannot_participate MON_4, ContestEffect_FollowingMonsNervous_CheckMon3 if_used_combo_starter_eq MON_4, FALSE, ContestEffect_FollowingMonsNervous_CheckMon3 score +5 - if_random 125, ContestEffect16or17_0E_1 + if_random_less_than 125, ContestEffect16or17_0E_1 score +5 end ContestEffect_FollowingMonsNervous_CheckMon3: @@ -555,7 +555,7 @@ ContestEffect_FollowingMonsNervous_CheckMon3: if_cannot_participate MON_3, ContestEffect_FollowingMonsNervous_CheckMon2 if_used_combo_starter_eq MON_3, FALSE, ContestEffect_FollowingMonsNervous_CheckMon2 score +5 - if_random 125, ContestEffect16or17_0E_2 + if_random_less_than 125, ContestEffect16or17_0E_2 score +5 end ContestEffect_FollowingMonsNervous_CheckMon2: @@ -563,17 +563,17 @@ ContestEffect_FollowingMonsNervous_CheckMon2: if_cannot_participate MON_2, ContestEffectEnd if_used_combo_starter_eq MON_2, FALSE, ContestEffectEnd score +5 - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +5 end ContestEffect18: if_last_appeal ContestEffect18_score1 - jump ContestEffect18_0E + goto ContestEffect18_0E end ContestEffect18_score1: score +5 - jump ContestEffect18_0E + goto ContestEffect18_0E end ContestEffect18_0E: if_user_order_eq MON_1, ContestEffect18_score2 @@ -585,15 +585,15 @@ ContestEffect18_score2: score -15 end ContestEffect18_random1: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score -10 end ContestEffect18_random2: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +5 end ContestEffect18_random3: - if_random 125, ContestEffectEnd + if_random_less_than 125, ContestEffectEnd score +15 end @@ -607,7 +607,7 @@ AI_Erratic: if_contest_type_eq CONTEST_CATEGORY_TOUGH, Erratic_CuteSmartTough end Erratic_CuteSmartTough: - if_random 125, Erratic_NoScoreIncrease + if_random_less_than 125, Erratic_NoScoreIncrease score +10 end Erratic_NoScoreIncrease: @@ -772,23 +772,23 @@ ContestEffect2_2: if_last_appeal ContestEffect2_2_score5 end ContestEffect2_2_score1: - if_random 20, ContestEffectEnd2 + if_random_less_than 20, ContestEffectEnd2 score -15 end ContestEffect2_2_score2: - if_random 40, ContestEffectEnd2 + if_random_less_than 40, ContestEffectEnd2 score -15 end ContestEffect2_2_score3: - if_random 60, ContestEffectEnd2 + if_random_less_than 60, ContestEffectEnd2 score -15 end ContestEffect2_2_score4: - if_random 80, ContestEffectEnd2 + if_random_less_than 80, ContestEffectEnd2 score -15 end ContestEffect2_2_score5: - if_random 20, ContestEffectEnd2 + if_random_less_than 20, ContestEffectEnd2 score +20 end @@ -813,7 +813,7 @@ AI_score2_081DCA4C: score -15 end AI_random1_081DCA4C: - if_random 100, ContestEffectEnd2 + if_random_less_than 100, ContestEffectEnd2 score +10 end AI_effectcheck2_081DCA4C: @@ -824,7 +824,7 @@ AI_score3_081DCA4C: score -5 end AI_random2_081DCA4C: - if_random 125, ContestEffectEnd2 + if_random_less_than 125, ContestEffectEnd2 score +10 end AI_effectcheck3_081DCA4C: @@ -851,7 +851,7 @@ AI_score6_081DCA4C: score -10 end AI_random3_081DCA4C: - if_random 125, ContestEffectEnd2 + if_random_less_than 125, ContestEffectEnd2 score +10 end AI_score7_081DCA4C: diff --git a/include/contest.h b/include/contest.h index d008b8fce1..d53aec2129 100644 --- a/include/contest.h +++ b/include/contest.h @@ -201,7 +201,7 @@ struct ContestantStatus bool8 repeatedMove:1; bool8 unused2:1; bool8 repeatedPrevMove:1; // never read - bool8 unk15_3:1; + bool8 completedComboFlag:1; bool8 hasJudgesAttention:1; bool8 judgesAttentionWasRemoved:1; bool8 usedComboMove:1; @@ -234,7 +234,7 @@ struct ContestAIInfo /*0x10*/ u8 currentAICheck; /*0x14*/ u32 aiChecks; /*0x18*/ s16 scriptResult; - /*0x1A*/ s16 scriptArr[3]; + /*0x1A*/ s16 vars[3]; /*0x20*/ const u8 *stack[8]; /*0x40*/ u8 stackSize; /*0x41*/ u8 contestantId; diff --git a/src/contest.c b/src/contest.c index a015c5bab3..32a8675e58 100644 --- a/src/contest.c +++ b/src/contest.c @@ -3490,7 +3490,7 @@ static bool8 ContestantCanUseTurn(u8 contestant) return TRUE; } -static void ResetContestantStatuses(void) +static void SetContestantStatusesForNextRound(void) { s32 i; @@ -4483,7 +4483,7 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].usedComboMove = TRUE; eContestantStatus[contestant].hasJudgesAttention = FALSE; eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo; - eContestantStatus[contestant].unk15_3 = TRUE; + eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI } else { @@ -5172,7 +5172,7 @@ static void Task_ResetForNextRound(u8 taskId) eContest.waitForLink = TRUE; if (IsPlayerLinkLeader()) - ResetContestantStatuses(); + SetContestantStatusesForNextRound(); taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); ContestPrintLinkStandby(); @@ -5180,7 +5180,7 @@ static void Task_ResetForNextRound(u8 taskId) } else { - ResetContestantStatuses(); + SetContestantStatusesForNextRound(); gTasks[taskId].data[0] = 3; } break; diff --git a/src/contest_ai.c b/src/contest_ai.c index b5e91c3149..4635539982 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -30,22 +30,22 @@ static void ContestAICmd_if_user_condition_less_than(void); static void ContestAICmd_if_user_condition_more_than(void); static void ContestAICmd_if_user_condition_eq(void); static void ContestAICmd_if_user_condition_not_eq(void); -static void ContestAICmd_unk_15(void); -static void ContestAICmd_unk_16(void); -static void ContestAICmd_unk_17(void); -static void ContestAICmd_unk_18(void); -static void ContestAICmd_unk_19(void); -static void ContestAICmd_unk_1A(void); -static void ContestAICmd_unk_1B(void); -static void ContestAICmd_unk_1C(void); -static void ContestAICmd_unk_1D(void); -static void ContestAICmd_unk_1E(void); +static void ContestAICmd_get_points(void); +static void ContestAICmd_if_points_less_than(void); +static void ContestAICmd_if_points_more_than(void); +static void ContestAICmd_if_points_eq(void); +static void ContestAICmd_if_points_not_eq(void); +static void ContestAICmd_get_preliminary_points(void); +static void ContestAICmd_if_preliminary_points_less_than(void); +static void ContestAICmd_if_preliminary_points_more_than(void); +static void ContestAICmd_if_preliminary_points_eq(void); +static void ContestAICmd_if_preliminary_points_not_eq(void); static void ContestAICmd_get_contest_type(void); static void ContestAICmd_if_contest_type_eq(void); static void ContestAICmd_if_contest_type_not_eq(void); static void ContestAICmd_get_move_excitement(void); static void ContestAICmd_if_move_excitement_less_than(void); -static void ContestAICmd_if_move_excitement_greater_than(void); +static void ContestAICmd_if_move_excitement_more_than(void); static void ContestAICmd_if_move_excitement_eq(void); static void ContestAICmd_if_move_excitement_not_eq(void); static void ContestAICmd_get_move_effect(void); @@ -56,18 +56,18 @@ static void ContestAICmd_if_move_effect_type_eq(void); static void ContestAICmd_if_move_effect_type_not_eq(void); static void ContestAICmd_check_most_appealing_move(void); static void ContestAICmd_if_most_appealing_move(void); -static void ContestAICmd_unk_2F(void); -static void ContestAICmd_unk_30(void); -static void ContestAICmd_unk_31(void); -static void ContestAICmd_unk_32(void); -static void ContestAICmd_unk_33(void); -static void ContestAICmd_unk_34(void); -static void ContestAICmd_unk_35(void); -static void ContestAICmd_unk_36(void); -static void ContestAICmd_unk_37(void); -static void ContestAICmd_unk_38(void); -static void ContestAICmd_unk_39(void); -static void ContestAICmd_unk_3A(void); +static void ContestAICmd_check_most_jamming_move(void); +static void ContestAICmd_if_most_jamming_move(void); +static void ContestAICmd_get_num_move_hearts(void); +static void ContestAICmd_if_num_move_hearts_less_than(void); +static void ContestAICmd_if_num_move_hearts_more_than(void); +static void ContestAICmd_if_num_move_hearts_eq(void); +static void ContestAICmd_if_num_move_hearts_not_eq(void); +static void ContestAICmd_get_num_move_jam_hearts(void); +static void ContestAICmd_if_num_move_jam_hearts_less_than(void); +static void ContestAICmd_if_num_move_jam_hearts_more_than(void); +static void ContestAICmd_if_num_move_jam_hearts_eq(void); +static void ContestAICmd_if_num_move_jam_hearts_not_eq(void); static void ContestAICmd_get_move_used_count(void); static void ContestAICmd_if_most_used_count_less_than(void); static void ContestAICmd_if_most_used_count_more_than(void); @@ -95,197 +95,197 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void); static void ContestAICmd_check_can_participate(void); static void ContestAICmd_if_can_participate(void); static void ContestAICmd_if_cannot_participate(void); -static void ContestAICmd_get_val_812A188(void); -static void ContestAICmd_unk_57(void); -static void ContestAICmd_contest_58(void); -static void ContestAICmd_unk_59(void); -static void ContestAICmd_unk_5A(void); -static void ContestAICmd_unk_5B(void); -static void ContestAICmd_unk_5C(void); -static void ContestAICmd_unk_5D(void); -static void ContestAICmd_unk_5E(void); -static void ContestAICmd_unk_5F(void); -static void ContestAICmd_unk_60(void); -static void ContestAICmd_unk_61(void); -static void ContestAICmd_unk_62(void); -static void ContestAICmd_unk_63(void); -static void ContestAICmd_unk_64(void); -static void ContestAICmd_unk_65(void); -static void ContestAICmd_unk_66(void); -static void ContestAICmd_unk_67(void); -static void ContestAICmd_unk_68(void); -static void ContestAICmd_unk_69(void); -static void ContestAICmd_unk_6A(void); -static void ContestAICmd_unk_6B(void); -static void ContestAICmd_unk_6C(void); -static void ContestAICmd_unk_6D(void); -static void ContestAICmd_unk_6E(void); -static void ContestAICmd_unk_6F(void); -static void ContestAICmd_unk_70(void); -static void ContestAICmd_unk_71(void); -static void ContestAICmd_unk_72(void); -static void ContestAICmd_unk_73(void); -static void ContestAICmd_unk_74(void); -static void ContestAICmd_unk_75(void); -static void ContestAICmd_unk_76(void); -static void ContestAICmd_unk_77(void); -static void ContestAICmd_unk_78(void); -static void ContestAICmd_unk_79(void); -static void ContestAICmd_unk_7A(void); -static void ContestAICmd_unk_7B(void); -static void ContestAICmd_unk_7C(void); -static void ContestAICmd_if_random(void); -static void ContestAICmd_unk_7E(void); -static void ContestAICmd_jump(void); +static void ContestAICmd_get_completed_combo(void); +static void ContestAICmd_if_completed_combo(void); +static void ContestAICmd_if_not_completed_combo(void); +static void ContestAICmd_get_points_diff(void); +static void ContestAICmd_if_points_more_than_mon(void); +static void ContestAICmd_if_points_less_than_mon(void); +static void ContestAICmd_if_points_eq_mon(void); +static void ContestAICmd_if_points_not_eq_mon(void); +static void ContestAICmd_get_preliminary_points_diff(void); +static void ContestAICmd_if_preliminary_points_more_than_mon(void); +static void ContestAICmd_if_preliminary_points_less_than_mon(void); +static void ContestAICmd_if_preliminary_points_eq_mon(void); +static void ContestAICmd_if_preliminary_points_not_eq_mon(void); +static void ContestAICmd_get_used_moves_effect(void); +static void ContestAICmd_if_used_moves_effect_less_than(void); +static void ContestAICmd_if_used_moves_effect_more_than(void); +static void ContestAICmd_if_used_moves_effect_eq(void); +static void ContestAICmd_if_used_moves_effect_not_eq(void); +static void ContestAICmd_get_used_moves_excitement(void); +static void ContestAICmd_if_used_moves_excitement_less_than(void); +static void ContestAICmd_if_used_moves_excitement_more_than(void); +static void ContestAICmd_if_used_moves_excitement_eq(void); +static void ContestAICmd_if_used_moves_excitement_not_eq(void); +static void ContestAICmd_get_used_moves_effect_type(void); +static void ContestAICmd_if_used_moves_effect_type_eq(void); +static void ContestAICmd_if_used_moves_effect_type_not_eq(void); +static void ContestAICmd_save_result(void); +static void ContestAICmd_setvar(void); +static void ContestAICmd_add(void); +static void ContestAICmd_addvar(void); +static void ContestAICmd_addvar_duplicate(void); +static void ContestAICmd_if_less_than(void); +static void ContestAICmd_if_greater_than(void); +static void ContestAICmd_if_eq(void); +static void ContestAICmd_if_not_eq(void); +static void ContestAICmd_if_less_than_var(void); +static void ContestAICmd_if_greater_than_var(void); +static void ContestAICmd_if_eq_var(void); +static void ContestAICmd_if_not_eq_var(void); +static void ContestAICmd_if_random_less_than(void); +static void ContestAICmd_if_random_greater_than(void); +static void ContestAICmd_goto(void); static void ContestAICmd_call(void); static void ContestAICmd_end(void); static void ContestAICmd_check_user_has_exciting_move(void); static void ContestAICmd_if_user_has_exciting_move(void); static void ContestAICmd_if_user_doesnt_have_exciting_move(void); -static void ContestAICmd_unk_85(void); -static void ContestAICmd_unk_86(void); +static void ContestAICmd_check_user_has_move(void); +static void ContestAICmd_if_user_has_move(void); static void ContestAICmd_if_effect_in_user_moveset(void); typedef void (* ContestAICmdFunc)(void); static const ContestAICmdFunc sContestAICmdTable[] = { - ContestAICmd_score, // 0x00 - ContestAICmd_get_appeal_num, // 0x01 - ContestAICmd_if_appeal_num_less_than, // 0x02 - ContestAICmd_if_appeal_num_more_than, // 0x03 - ContestAICmd_if_appeal_num_eq, // 0x04 - ContestAICmd_if_appeal_num_not_eq, // 0x05 - ContestAICmd_get_excitement, // 0x06 - ContestAICmd_if_excitement_less_than, // 0x07 - ContestAICmd_if_excitement_more_than, // 0x08 - ContestAICmd_if_excitement_eq, // 0x09 - ContestAICmd_if_excitement_not_eq, // 0x0A - ContestAICmd_get_user_order, // 0x0B - ContestAICmd_if_user_order_less_than, // 0x0C - ContestAICmd_if_user_order_more_than, // 0x0D - ContestAICmd_if_user_order_eq, // 0x0E - ContestAICmd_if_user_order_not_eq, // 0x0F - ContestAICmd_get_user_condition, // 0x10 - ContestAICmd_if_user_condition_less_than, // 0x11 - ContestAICmd_if_user_condition_more_than, // 0x12 - ContestAICmd_if_user_condition_eq, // 0x13 - ContestAICmd_if_user_condition_not_eq, // 0x14 - ContestAICmd_unk_15, // 0x15 - ContestAICmd_unk_16, // 0x16 - ContestAICmd_unk_17, // 0x17 - ContestAICmd_unk_18, // 0x18 - ContestAICmd_unk_19, // 0x19 - ContestAICmd_unk_1A, // 0x1A - ContestAICmd_unk_1B, // 0x1B - ContestAICmd_unk_1C, // 0x1C - ContestAICmd_unk_1D, // 0x1D - ContestAICmd_unk_1E, // 0x1E - ContestAICmd_get_contest_type, // 0x1F - ContestAICmd_if_contest_type_eq, // 0x20 - ContestAICmd_if_contest_type_not_eq, // 0x21 - ContestAICmd_get_move_excitement, // 0x22 - ContestAICmd_if_move_excitement_less_than, // 0x23 - ContestAICmd_if_move_excitement_greater_than, // 0x24 - ContestAICmd_if_move_excitement_eq, // 0x25 - ContestAICmd_if_move_excitement_not_eq, // 0x26 - ContestAICmd_get_move_effect, // 0x27 - ContestAICmd_if_move_effect_eq, // 0x28 - ContestAICmd_if_move_effect_not_eq, // 0x29 - ContestAICmd_get_move_effect_type, // 0x2A - ContestAICmd_if_move_effect_type_eq, // 0x2B - ContestAICmd_if_move_effect_type_not_eq, // 0x2C - ContestAICmd_check_most_appealing_move, // 0x2D - ContestAICmd_if_most_appealing_move, // 0x2E - ContestAICmd_unk_2F, // 0x2F - ContestAICmd_unk_30, // 0x30 - ContestAICmd_unk_31, // 0x31 - ContestAICmd_unk_32, // 0x32 - ContestAICmd_unk_33, // 0x33 - ContestAICmd_unk_34, // 0x34 - ContestAICmd_unk_35, // 0x35 - ContestAICmd_unk_36, // 0x36 - ContestAICmd_unk_37, // 0x37 - ContestAICmd_unk_38, // 0x38 - ContestAICmd_unk_39, // 0x39 - ContestAICmd_unk_3A, // 0x3A - ContestAICmd_get_move_used_count, // 0x3B - ContestAICmd_if_most_used_count_less_than, // 0x3C - ContestAICmd_if_most_used_count_more_than, // 0x3D - ContestAICmd_if_most_used_count_eq, // 0x3E - ContestAICmd_if_most_used_count_not_eq, // 0x3F - ContestAICmd_check_combo_starter, // 0x40 - ContestAICmd_if_combo_starter, // 0x41 - ContestAICmd_if_not_combo_starter, // 0x42 - ContestAICmd_check_combo_finisher, // 0x43 - ContestAICmd_if_combo_finisher, // 0x44 - ContestAICmd_if_not_combo_finisher, // 0x45 - ContestAICmd_check_would_finish_combo, // 0x46 - ContestAICmd_if_would_finish_combo, // 0x47 - ContestAICmd_if_would_not_finish_combo, // 0x48 - ContestAICmd_get_condition, // 0x49 - ContestAICmd_if_condition_less_than, // 0x4A - ContestAICmd_if_condition_more_than, // 0x4B - ContestAICmd_if_condition_eq, // 0x4C - ContestAICmd_if_condition_not_eq, // 0x4D - ContestAICmd_get_used_combo_starter, // 0x4E - ContestAICmd_if_used_combo_starter_less_than, // 0x4F - ContestAICmd_if_used_combo_starter_more_than, // 0x50 - ContestAICmd_if_used_combo_starter_eq, // 0x51 - ContestAICmd_if_used_combo_starter_not_eq, // 0x52 - ContestAICmd_check_can_participate, // 0x53 - ContestAICmd_if_can_participate, // 0x54 - ContestAICmd_if_cannot_participate, // 0x55 - ContestAICmd_get_val_812A188, // 0x56 - ContestAICmd_unk_57, // 0x57 - ContestAICmd_contest_58, // 0x58 - ContestAICmd_unk_59, // 0x59 - ContestAICmd_unk_5A, // 0x5A - ContestAICmd_unk_5B, // 0x5B - ContestAICmd_unk_5C, // 0x5C - ContestAICmd_unk_5D, // 0x5D - ContestAICmd_unk_5E, // 0x5E - ContestAICmd_unk_5F, // 0x5F - ContestAICmd_unk_60, // 0x60 - ContestAICmd_unk_61, // 0x61 - ContestAICmd_unk_62, // 0x62 - ContestAICmd_unk_63, // 0x63 - ContestAICmd_unk_64, // 0x64 - ContestAICmd_unk_65, // 0x65 - ContestAICmd_unk_66, // 0x66 - ContestAICmd_unk_67, // 0x67 - ContestAICmd_unk_68, // 0x68 - ContestAICmd_unk_69, // 0x69 - ContestAICmd_unk_6A, // 0x6A - ContestAICmd_unk_6B, // 0x6B - ContestAICmd_unk_6C, // 0x6C - ContestAICmd_unk_6D, // 0x6D - ContestAICmd_unk_6E, // 0x6E - ContestAICmd_unk_6F, // 0x6F - ContestAICmd_unk_70, // 0x70 - ContestAICmd_unk_71, // 0x71 - ContestAICmd_unk_72, // 0x72 - ContestAICmd_unk_73, // 0x73 - ContestAICmd_unk_74, // 0x74 - ContestAICmd_unk_75, // 0x75 - ContestAICmd_unk_76, // 0x76 - ContestAICmd_unk_77, // 0x77 - ContestAICmd_unk_78, // 0x78 - ContestAICmd_unk_79, // 0x79 - ContestAICmd_unk_7A, // 0x7A - ContestAICmd_unk_7B, // 0x7B - ContestAICmd_unk_7C, // 0x7C - ContestAICmd_if_random, // 0x7D - ContestAICmd_unk_7E, // 0x7E - ContestAICmd_jump, // 0x7F - ContestAICmd_call, // 0x80 - ContestAICmd_end, // 0x81 - ContestAICmd_check_user_has_exciting_move, // 0x82 - ContestAICmd_if_user_has_exciting_move, // 0x83 - ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84 - ContestAICmd_unk_85, // 0x85 - ContestAICmd_unk_86, // 0x86 - ContestAICmd_if_effect_in_user_moveset, // 0x87 + ContestAICmd_score, // 0x00 + ContestAICmd_get_appeal_num, // 0x01 + ContestAICmd_if_appeal_num_less_than, // 0x02 + ContestAICmd_if_appeal_num_more_than, // 0x03 + ContestAICmd_if_appeal_num_eq, // 0x04 + ContestAICmd_if_appeal_num_not_eq, // 0x05 + ContestAICmd_get_excitement, // 0x06 + ContestAICmd_if_excitement_less_than, // 0x07 + ContestAICmd_if_excitement_more_than, // 0x08 + ContestAICmd_if_excitement_eq, // 0x09 + ContestAICmd_if_excitement_not_eq, // 0x0A + ContestAICmd_get_user_order, // 0x0B + ContestAICmd_if_user_order_less_than, // 0x0C + ContestAICmd_if_user_order_more_than, // 0x0D + ContestAICmd_if_user_order_eq, // 0x0E + ContestAICmd_if_user_order_not_eq, // 0x0F + ContestAICmd_get_user_condition, // 0x10 + ContestAICmd_if_user_condition_less_than, // 0x11 + ContestAICmd_if_user_condition_more_than, // 0x12 + ContestAICmd_if_user_condition_eq, // 0x13 + ContestAICmd_if_user_condition_not_eq, // 0x14 + ContestAICmd_get_points, // 0x15 + ContestAICmd_if_points_less_than, // 0x16 + ContestAICmd_if_points_more_than, // 0x17 + ContestAICmd_if_points_eq, // 0x18 + ContestAICmd_if_points_not_eq, // 0x19 + ContestAICmd_get_preliminary_points, // 0x1A + ContestAICmd_if_preliminary_points_less_than, // 0x1B + ContestAICmd_if_preliminary_points_more_than, // 0x1C + ContestAICmd_if_preliminary_points_eq, // 0x1D + ContestAICmd_if_preliminary_points_not_eq, // 0x1E + ContestAICmd_get_contest_type, // 0x1F + ContestAICmd_if_contest_type_eq, // 0x20 + ContestAICmd_if_contest_type_not_eq, // 0x21 + ContestAICmd_get_move_excitement, // 0x22 + ContestAICmd_if_move_excitement_less_than, // 0x23 + ContestAICmd_if_move_excitement_more_than, // 0x24 + ContestAICmd_if_move_excitement_eq, // 0x25 + ContestAICmd_if_move_excitement_not_eq, // 0x26 + ContestAICmd_get_move_effect, // 0x27 + ContestAICmd_if_move_effect_eq, // 0x28 + ContestAICmd_if_move_effect_not_eq, // 0x29 + ContestAICmd_get_move_effect_type, // 0x2A + ContestAICmd_if_move_effect_type_eq, // 0x2B + ContestAICmd_if_move_effect_type_not_eq, // 0x2C + ContestAICmd_check_most_appealing_move, // 0x2D + ContestAICmd_if_most_appealing_move, // 0x2E + ContestAICmd_check_most_jamming_move, // 0x2F + ContestAICmd_if_most_jamming_move, // 0x30 + ContestAICmd_get_num_move_hearts, // 0x31 + ContestAICmd_if_num_move_hearts_less_than, // 0x32 + ContestAICmd_if_num_move_hearts_more_than, // 0x33 + ContestAICmd_if_num_move_hearts_eq, // 0x34 + ContestAICmd_if_num_move_hearts_not_eq, // 0x35 + ContestAICmd_get_num_move_jam_hearts, // 0x36 + ContestAICmd_if_num_move_jam_hearts_less_than, // 0x37 + ContestAICmd_if_num_move_jam_hearts_more_than, // 0x38 + ContestAICmd_if_num_move_jam_hearts_eq, // 0x39 + ContestAICmd_if_num_move_jam_hearts_not_eq, // 0x3A + ContestAICmd_get_move_used_count, // 0x3B + ContestAICmd_if_most_used_count_less_than, // 0x3C + ContestAICmd_if_most_used_count_more_than, // 0x3D + ContestAICmd_if_most_used_count_eq, // 0x3E + ContestAICmd_if_most_used_count_not_eq, // 0x3F + ContestAICmd_check_combo_starter, // 0x40 + ContestAICmd_if_combo_starter, // 0x41 + ContestAICmd_if_not_combo_starter, // 0x42 + ContestAICmd_check_combo_finisher, // 0x43 + ContestAICmd_if_combo_finisher, // 0x44 + ContestAICmd_if_not_combo_finisher, // 0x45 + ContestAICmd_check_would_finish_combo, // 0x46 + ContestAICmd_if_would_finish_combo, // 0x47 + ContestAICmd_if_would_not_finish_combo, // 0x48 + ContestAICmd_get_condition, // 0x49 + ContestAICmd_if_condition_less_than, // 0x4A + ContestAICmd_if_condition_more_than, // 0x4B + ContestAICmd_if_condition_eq, // 0x4C + ContestAICmd_if_condition_not_eq, // 0x4D + ContestAICmd_get_used_combo_starter, // 0x4E + ContestAICmd_if_used_combo_starter_less_than, // 0x4F + ContestAICmd_if_used_combo_starter_more_than, // 0x50 + ContestAICmd_if_used_combo_starter_eq, // 0x51 + ContestAICmd_if_used_combo_starter_not_eq, // 0x52 + ContestAICmd_check_can_participate, // 0x53 + ContestAICmd_if_can_participate, // 0x54 + ContestAICmd_if_cannot_participate, // 0x55 + ContestAICmd_get_completed_combo, // 0x56 + ContestAICmd_if_completed_combo, // 0x57 + ContestAICmd_if_not_completed_combo, // 0x58 + ContestAICmd_get_points_diff, // 0x59 + ContestAICmd_if_points_more_than_mon, // 0x5A + ContestAICmd_if_points_less_than_mon, // 0x5B + ContestAICmd_if_points_eq_mon, // 0x5C + ContestAICmd_if_points_not_eq_mon, // 0x5D + ContestAICmd_get_preliminary_points_diff, // 0x5E + ContestAICmd_if_preliminary_points_more_than_mon, // 0x5F + ContestAICmd_if_preliminary_points_less_than_mon, // 0x60 + ContestAICmd_if_preliminary_points_eq_mon, // 0x61 + ContestAICmd_if_preliminary_points_not_eq_mon, // 0x62 + ContestAICmd_get_used_moves_effect, // 0x63 + ContestAICmd_if_used_moves_effect_less_than, // 0x64 + ContestAICmd_if_used_moves_effect_more_than, // 0x65 + ContestAICmd_if_used_moves_effect_eq, // 0x66 + ContestAICmd_if_used_moves_effect_not_eq, // 0x67 + ContestAICmd_get_used_moves_excitement, // 0x68 + ContestAICmd_if_used_moves_excitement_less_than, // 0x69 + ContestAICmd_if_used_moves_excitement_more_than, // 0x6A + ContestAICmd_if_used_moves_excitement_eq, // 0x6B + ContestAICmd_if_used_moves_excitement_not_eq, // 0x6C + ContestAICmd_get_used_moves_effect_type, // 0x6D + ContestAICmd_if_used_moves_effect_type_eq, // 0x6E + ContestAICmd_if_used_moves_effect_type_not_eq, // 0x6F + ContestAICmd_save_result, // 0x70 + ContestAICmd_setvar, // 0x71 + ContestAICmd_add, // 0x72 + ContestAICmd_addvar, // 0x73 + ContestAICmd_addvar_duplicate, // 0x74 + ContestAICmd_if_less_than, // 0x75 + ContestAICmd_if_greater_than, // 0x76 + ContestAICmd_if_eq, // 0x77 + ContestAICmd_if_not_eq, // 0x78 + ContestAICmd_if_less_than_var, // 0x79 + ContestAICmd_if_greater_than_var, // 0x7A + ContestAICmd_if_eq_var, // 0x7B + ContestAICmd_if_not_eq_var, // 0x7C + ContestAICmd_if_random_less_than, // 0x7D + ContestAICmd_if_random_greater_than, // 0x7E + ContestAICmd_goto, // 0x7F + ContestAICmd_call, // 0x80 + ContestAICmd_end, // 0x81 + ContestAICmd_check_user_has_exciting_move, // 0x82 + ContestAICmd_if_user_has_exciting_move, // 0x83 + ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84 + ContestAICmd_check_user_has_move, // 0x85 + ContestAICmd_if_user_has_move, // 0x86 + ContestAICmd_if_effect_in_user_moveset, // 0x87 }; static void ContestAI_DoAIProcessing(void); @@ -588,15 +588,15 @@ static void ContestAICmd_if_user_condition_not_eq(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_15(void) +static void ContestAICmd_get_points(void) { eContestAI.scriptResult = eContestantStatus[eContestAI.contestantId].pointTotal; gAIScriptPtr += 1; } -static void ContestAICmd_unk_16(void) +static void ContestAICmd_if_points_less_than(void) { - ContestAICmd_unk_15(); + ContestAICmd_get_points(); if (eContestAI.scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -604,9 +604,9 @@ static void ContestAICmd_unk_16(void) gAIScriptPtr += 6; } -static void ContestAICmd_unk_17(void) +static void ContestAICmd_if_points_more_than(void) { - ContestAICmd_unk_15(); + ContestAICmd_get_points(); if (eContestAI.scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -614,9 +614,9 @@ static void ContestAICmd_unk_17(void) gAIScriptPtr += 6; } -static void ContestAICmd_unk_18(void) +static void ContestAICmd_if_points_eq(void) { - ContestAICmd_unk_15(); + ContestAICmd_get_points(); if (eContestAI.scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -624,9 +624,9 @@ static void ContestAICmd_unk_18(void) gAIScriptPtr += 6; } -static void ContestAICmd_unk_19(void) +static void ContestAICmd_if_points_not_eq(void) { - ContestAICmd_unk_15(); + ContestAICmd_get_points(); if (eContestAI.scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -634,15 +634,15 @@ static void ContestAICmd_unk_19(void) gAIScriptPtr += 6; } -static void ContestAICmd_unk_1A(void) +static void ContestAICmd_get_preliminary_points(void) { eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId]; gAIScriptPtr += 1; } -static void ContestAICmd_unk_1B(void) +static void ContestAICmd_if_preliminary_points_less_than(void) { - ContestAICmd_unk_1A(); + ContestAICmd_get_preliminary_points(); if (eContestAI.scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -650,9 +650,9 @@ static void ContestAICmd_unk_1B(void) gAIScriptPtr += 6; } -static void ContestAICmd_unk_1C(void) +static void ContestAICmd_if_preliminary_points_more_than(void) { - ContestAICmd_unk_1A(); + ContestAICmd_get_preliminary_points(); if (eContestAI.scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -660,9 +660,9 @@ static void ContestAICmd_unk_1C(void) gAIScriptPtr += 6; } -static void ContestAICmd_unk_1D(void) +static void ContestAICmd_if_preliminary_points_eq(void) { - ContestAICmd_unk_1A(); + ContestAICmd_get_preliminary_points(); if (eContestAI.scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -670,9 +670,9 @@ static void ContestAICmd_unk_1D(void) gAIScriptPtr += 6; } -static void ContestAICmd_unk_1E(void) +static void ContestAICmd_if_preliminary_points_not_eq(void) { - ContestAICmd_unk_1A(); + ContestAICmd_get_preliminary_points(); if (eContestAI.scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); @@ -722,7 +722,7 @@ static void ContestAICmd_if_move_excitement_less_than(void) gAIScriptPtr += 5; } -static void ContestAICmd_if_move_excitement_greater_than(void) +static void ContestAICmd_if_move_excitement_more_than(void) { ContestAICmd_get_move_excitement(); @@ -839,7 +839,7 @@ static void ContestAICmd_if_most_appealing_move(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_2F(void) +static void ContestAICmd_check_most_jamming_move(void) { int i; u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex]; @@ -848,7 +848,7 @@ static void ContestAICmd_unk_2F(void) for (i = 0; i < MAX_MON_MOVES; i++) { u16 newMove = gContestMons[eContestAI.contestantId].moves[i]; - if (newMove != 0 && jam < gContestEffects[gContestMoves[newMove].effect].jam) + if (newMove != MOVE_NONE && jam < gContestEffects[gContestMoves[newMove].effect].jam) break; } @@ -860,9 +860,9 @@ static void ContestAICmd_unk_2F(void) gAIScriptPtr += 1; } -static void ContestAICmd_unk_30(void) +static void ContestAICmd_if_most_jamming_move(void) { - ContestAICmd_unk_2F(); + ContestAICmd_check_most_jamming_move(); if (eContestAI.scriptResult != FALSE) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -870,7 +870,7 @@ static void ContestAICmd_unk_30(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_31(void) +static void ContestAICmd_get_num_move_hearts(void) { u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex]; @@ -878,9 +878,9 @@ static void ContestAICmd_unk_31(void) gAIScriptPtr += 1; } -static void ContestAICmd_unk_32(void) +static void ContestAICmd_if_num_move_hearts_less_than(void) { - ContestAICmd_unk_31(); + ContestAICmd_get_num_move_hearts(); if (eContestAI.scriptResult < gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -888,9 +888,9 @@ static void ContestAICmd_unk_32(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_33(void) +static void ContestAICmd_if_num_move_hearts_more_than(void) { - ContestAICmd_unk_31(); + ContestAICmd_get_num_move_hearts(); if (eContestAI.scriptResult > gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -898,9 +898,9 @@ static void ContestAICmd_unk_33(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_34(void) +static void ContestAICmd_if_num_move_hearts_eq(void) { - ContestAICmd_unk_31(); + ContestAICmd_get_num_move_hearts(); if (eContestAI.scriptResult == gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -908,9 +908,9 @@ static void ContestAICmd_unk_34(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_35(void) +static void ContestAICmd_if_num_move_hearts_not_eq(void) { - ContestAICmd_unk_31(); + ContestAICmd_get_num_move_hearts(); if (eContestAI.scriptResult != gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -918,7 +918,7 @@ static void ContestAICmd_unk_35(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_36(void) +static void ContestAICmd_get_num_move_jam_hearts(void) { u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex]; @@ -926,9 +926,9 @@ static void ContestAICmd_unk_36(void) gAIScriptPtr += 1; } -static void ContestAICmd_unk_37(void) +static void ContestAICmd_if_num_move_jam_hearts_less_than(void) { - ContestAICmd_unk_36(); + ContestAICmd_get_num_move_jam_hearts(); if (eContestAI.scriptResult < gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -936,9 +936,9 @@ static void ContestAICmd_unk_37(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_38(void) +static void ContestAICmd_if_num_move_jam_hearts_more_than(void) { - ContestAICmd_unk_36(); + ContestAICmd_get_num_move_jam_hearts(); if (eContestAI.scriptResult > gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -946,9 +946,9 @@ static void ContestAICmd_unk_38(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_39(void) +static void ContestAICmd_if_num_move_jam_hearts_eq(void) { - ContestAICmd_unk_36(); + ContestAICmd_get_num_move_jam_hearts(); if (eContestAI.scriptResult == gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -956,9 +956,9 @@ static void ContestAICmd_unk_39(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_3A(void) +static void ContestAICmd_if_num_move_jam_hearts_not_eq(void) { - ContestAICmd_unk_36(); + ContestAICmd_get_num_move_jam_hearts(); if (eContestAI.scriptResult != gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1050,7 +1050,7 @@ static void ContestAICmd_if_combo_starter(void) { ContestAICmd_check_combo_starter(); - if (eContestAI.scriptResult != 0) + if (eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1060,7 +1060,7 @@ static void ContestAICmd_if_not_combo_starter(void) { ContestAICmd_check_combo_starter(); - if (eContestAI.scriptResult == 0) + if (!eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1096,7 +1096,7 @@ static void ContestAICmd_if_combo_finisher(void) { ContestAICmd_check_combo_finisher(); - if (eContestAI.scriptResult != 0) + if (eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1106,7 +1106,7 @@ static void ContestAICmd_if_not_combo_finisher(void) { ContestAICmd_check_combo_finisher(); - if (eContestAI.scriptResult == 0) + if (!eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1131,7 +1131,7 @@ static void ContestAICmd_if_would_finish_combo(void) { ContestAICmd_check_would_finish_combo(); - if (eContestAI.scriptResult != 0) + if (eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1141,7 +1141,7 @@ static void ContestAICmd_if_would_not_finish_combo(void) { ContestAICmd_check_would_finish_combo(); - if (eContestAI.scriptResult == 0) + if (!eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1261,7 +1261,7 @@ static void ContestAICmd_if_can_participate(void) { ContestAICmd_check_can_participate(); - if (eContestAI.scriptResult != 0) + if (eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1271,41 +1271,41 @@ static void ContestAICmd_if_cannot_participate(void) { ContestAICmd_check_can_participate(); - if (eContestAI.scriptResult == 0) + if (!eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; } -static void ContestAICmd_get_val_812A188(void) +static void ContestAICmd_get_completed_combo(void) { u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - eContestAI.scriptResult = eContestantStatus[contestant].unk15_3; + eContestAI.scriptResult = eContestantStatus[contestant].completedComboFlag; gAIScriptPtr += 2; } -static void ContestAICmd_unk_57(void) +static void ContestAICmd_if_completed_combo(void) { - ContestAICmd_get_val_812A188(); + ContestAICmd_get_completed_combo(); - if (eContestAI.scriptResult != 0) + if (eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; } -static void ContestAICmd_contest_58(void) +static void ContestAICmd_if_not_completed_combo(void) { - ContestAICmd_get_val_812A188(); + ContestAICmd_get_completed_combo(); - if (eContestAI.scriptResult == 0) + if (!eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; } -static void ContestAICmd_unk_59(void) +static void ContestAICmd_get_points_diff(void) { u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); @@ -1313,9 +1313,9 @@ static void ContestAICmd_unk_59(void) gAIScriptPtr += 2; } -static void ContestAICmd_unk_5A(void) +static void ContestAICmd_if_points_more_than_mon(void) { - ContestAICmd_unk_59(); + ContestAICmd_get_points_diff(); if (eContestAI.scriptResult < 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1323,9 +1323,9 @@ static void ContestAICmd_unk_5A(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_5B(void) +static void ContestAICmd_if_points_less_than_mon(void) { - ContestAICmd_unk_59(); + ContestAICmd_get_points_diff(); if (eContestAI.scriptResult > 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1333,9 +1333,9 @@ static void ContestAICmd_unk_5B(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_5C(void) +static void ContestAICmd_if_points_eq_mon(void) { - ContestAICmd_unk_59(); + ContestAICmd_get_points_diff(); if (eContestAI.scriptResult == 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1343,9 +1343,9 @@ static void ContestAICmd_unk_5C(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_5D(void) +static void ContestAICmd_if_points_not_eq_mon(void) { - ContestAICmd_unk_59(); + ContestAICmd_get_points_diff(); if (eContestAI.scriptResult != 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1353,7 +1353,7 @@ static void ContestAICmd_unk_5D(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_5E(void) +static void ContestAICmd_get_preliminary_points_diff(void) { u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); @@ -1361,9 +1361,9 @@ static void ContestAICmd_unk_5E(void) gAIScriptPtr += 2; } -static void ContestAICmd_unk_5F(void) +static void ContestAICmd_if_preliminary_points_more_than_mon(void) { - ContestAICmd_unk_5E(); + ContestAICmd_get_preliminary_points_diff(); if (eContestAI.scriptResult < 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1371,9 +1371,9 @@ static void ContestAICmd_unk_5F(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_60(void) +static void ContestAICmd_if_preliminary_points_less_than_mon(void) { - ContestAICmd_unk_5E(); + ContestAICmd_get_preliminary_points_diff(); if (eContestAI.scriptResult > 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1381,9 +1381,9 @@ static void ContestAICmd_unk_60(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_61(void) +static void ContestAICmd_if_preliminary_points_eq_mon(void) { - ContestAICmd_unk_5E(); + ContestAICmd_get_preliminary_points_diff(); if (eContestAI.scriptResult == 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1391,9 +1391,9 @@ static void ContestAICmd_unk_61(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_62(void) +static void ContestAICmd_if_preliminary_points_not_eq_mon(void) { - ContestAICmd_unk_5E(); + ContestAICmd_get_preliminary_points_diff(); if (eContestAI.scriptResult != 0) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); @@ -1401,19 +1401,19 @@ static void ContestAICmd_unk_62(void) gAIScriptPtr += 4; } -static void ContestAICmd_unk_63(void) +static void ContestAICmd_get_used_moves_effect(void) { u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - u8 turn = gAIScriptPtr[2]; - u16 move = eContest.moveHistory[turn][contestant]; + u8 round = gAIScriptPtr[2]; + u16 move = eContest.moveHistory[round][contestant]; eContestAI.scriptResult = gContestMoves[move].effect; gAIScriptPtr += 3; } -static void ContestAICmd_unk_64(void) +static void ContestAICmd_if_used_moves_effect_less_than(void) { - ContestAICmd_unk_63(); + ContestAICmd_get_used_moves_effect(); if (eContestAI.scriptResult < gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1421,9 +1421,9 @@ static void ContestAICmd_unk_64(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_65(void) +static void ContestAICmd_if_used_moves_effect_more_than(void) { - ContestAICmd_unk_63(); + ContestAICmd_get_used_moves_effect(); if (eContestAI.scriptResult > gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1431,9 +1431,9 @@ static void ContestAICmd_unk_65(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_66(void) +static void ContestAICmd_if_used_moves_effect_eq(void) { - ContestAICmd_unk_63(); + ContestAICmd_get_used_moves_effect(); if (eContestAI.scriptResult == gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1441,9 +1441,9 @@ static void ContestAICmd_unk_66(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_67(void) +static void ContestAICmd_if_used_moves_effect_not_eq(void) { - ContestAICmd_unk_63(); + ContestAICmd_get_used_moves_effect(); if (eContestAI.scriptResult != gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1451,19 +1451,19 @@ static void ContestAICmd_unk_67(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_68(void) +static void ContestAICmd_get_used_moves_excitement(void) { u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - u8 turn = gAIScriptPtr[2]; - s8 result = eContest.excitementHistory[turn][contestant]; + u8 round = gAIScriptPtr[2]; + s8 result = eContest.excitementHistory[round][contestant]; eContestAI.scriptResult = result; gAIScriptPtr += 3; } -static void ContestAICmd_unk_69(void) +static void ContestAICmd_if_used_moves_excitement_less_than(void) { - ContestAICmd_unk_68(); + ContestAICmd_get_used_moves_excitement(); if (eContestAI.scriptResult < gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1471,9 +1471,9 @@ static void ContestAICmd_unk_69(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_6A(void) +static void ContestAICmd_if_used_moves_excitement_more_than(void) { - ContestAICmd_unk_68(); + ContestAICmd_get_used_moves_excitement(); if (eContestAI.scriptResult > gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1481,9 +1481,9 @@ static void ContestAICmd_unk_6A(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_6B(void) +static void ContestAICmd_if_used_moves_excitement_eq(void) { - ContestAICmd_unk_68(); + ContestAICmd_get_used_moves_excitement(); if (eContestAI.scriptResult == gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1491,9 +1491,9 @@ static void ContestAICmd_unk_6B(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_6C(void) +static void ContestAICmd_if_used_moves_excitement_not_eq(void) { - ContestAICmd_unk_68(); + ContestAICmd_get_used_moves_excitement(); if (eContestAI.scriptResult != gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1501,19 +1501,19 @@ static void ContestAICmd_unk_6C(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_6D(void) +static void ContestAICmd_get_used_moves_effect_type(void) { u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); - u8 turn = gAIScriptPtr[2]; - u16 move = eContest.moveHistory[turn][contestant]; + u8 round = gAIScriptPtr[2]; + u16 move = eContest.moveHistory[round][contestant]; eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType; gAIScriptPtr += 3; } -static void ContestAICmd_unk_6E(void) +static void ContestAICmd_if_used_moves_effect_type_eq(void) { - ContestAICmd_unk_6D(); + ContestAICmd_get_used_moves_effect_type(); if (eContestAI.scriptResult == gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1521,9 +1521,9 @@ static void ContestAICmd_unk_6E(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_6F(void) +static void ContestAICmd_if_used_moves_effect_type_not_eq(void) { - ContestAICmd_unk_6D(); + ContestAICmd_get_used_moves_effect_type(); if (eContestAI.scriptResult != gAIScriptPtr[0]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -1531,119 +1531,128 @@ static void ContestAICmd_unk_6F(void) gAIScriptPtr += 5; } -static void ContestAICmd_unk_70(void) +static void ContestAICmd_save_result(void) { - eContestAI.scriptArr[gAIScriptPtr[1]] = eContestAI.scriptResult; + eContestAI.vars[gAIScriptPtr[1]] = eContestAI.scriptResult; gAIScriptPtr += 2; } -static void ContestAICmd_unk_71(void) +static void ContestAICmd_setvar(void) { - eContestAI.scriptArr[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2); + eContestAI.vars[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2); gAIScriptPtr += 4; } -static void ContestAICmd_unk_72(void) +static void ContestAICmd_add(void) { // wtf? shouldn't T1_READ_16 work here? why the signed 8 load by gAIScriptPtr[2]? - eContestAI.scriptArr[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8); + eContestAI.vars[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8); gAIScriptPtr += 4; } -static void ContestAICmd_unk_73(void) +static void ContestAICmd_addvar(void) { - eContestAI.scriptArr[gAIScriptPtr[1]] += eContestAI.scriptArr[gAIScriptPtr[2]]; + eContestAI.vars[gAIScriptPtr[1]] += eContestAI.vars[gAIScriptPtr[2]]; gAIScriptPtr += 3; } -static void ContestAICmd_unk_74(void) +static void ContestAICmd_addvar_duplicate(void) { - eContestAI.scriptArr[gAIScriptPtr[1]] += eContestAI.scriptArr[gAIScriptPtr[2]]; + eContestAI.vars[gAIScriptPtr[1]] += eContestAI.vars[gAIScriptPtr[2]]; gAIScriptPtr += 3; } -static void ContestAICmd_unk_75(void) +static void ContestAICmd_if_less_than(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2)) + if (eContestAI.vars[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } -static void ContestAICmd_unk_76(void) +static void ContestAICmd_if_greater_than(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2)) + if (eContestAI.vars[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } -static void ContestAICmd_unk_77(void) +static void ContestAICmd_if_eq(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2)) + if (eContestAI.vars[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } -static void ContestAICmd_unk_78(void) +static void ContestAICmd_if_not_eq(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2)) + if (eContestAI.vars[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2)) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } -static void ContestAICmd_unk_79(void) +static void ContestAICmd_if_less_than_var(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] < (eContestAI.scriptArr[gAIScriptPtr[2]])) + if (eContestAI.vars[gAIScriptPtr[1]] < (eContestAI.vars[gAIScriptPtr[2]])) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } -static void ContestAICmd_unk_7A(void) +static void ContestAICmd_if_greater_than_var(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] > (eContestAI.scriptArr[gAIScriptPtr[2]])) + if (eContestAI.vars[gAIScriptPtr[1]] > (eContestAI.vars[gAIScriptPtr[2]])) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } -static void ContestAICmd_unk_7B(void) +static void ContestAICmd_if_eq_var(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] == (eContestAI.scriptArr[gAIScriptPtr[2]])) + if (eContestAI.vars[gAIScriptPtr[1]] == (eContestAI.vars[gAIScriptPtr[2]])) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } -static void ContestAICmd_unk_7C(void) +static void ContestAICmd_if_not_eq_var(void) { - if (eContestAI.scriptArr[gAIScriptPtr[1]] != (eContestAI.scriptArr[gAIScriptPtr[2]])) + if (eContestAI.vars[gAIScriptPtr[1]] != (eContestAI.vars[gAIScriptPtr[2]])) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } -static void ContestAICmd_if_random(void) +// UB: Should just be comparing to gAIScriptPtr[1] in the functions below +// With the values passed to if_random_less_than this goes way OOB on vars +static void ContestAICmd_if_random_less_than(void) { - if ((Random() & 0xFF) < eContestAI.scriptArr[gAIScriptPtr[1]]) +#ifndef UBFIX + if ((Random() & 0xFF) < eContestAI.vars[gAIScriptPtr[1]]) +#else + if ((Random() & 0xFF) < gAIScriptPtr[1]) +#endif gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } -static void ContestAICmd_unk_7E(void) +static void ContestAICmd_if_random_greater_than(void) { - if ((Random() & 0xFF) > eContestAI.scriptArr[gAIScriptPtr[1]]) +#ifndef UBFIX + if (((Random()) & 0xFF) > eContestAI.vars[gAIScriptPtr[1]]) +#else + if (((Random()) & 0xFF) > gAIScriptPtr[1]) +#endif gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } -// jump -static void ContestAICmd_jump(void) +static void ContestAICmd_goto(void) { gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } @@ -1704,7 +1713,7 @@ static void ContestAICmd_if_user_has_exciting_move(void) { ContestAICmd_check_user_has_exciting_move(); - if (eContestAI.scriptResult != 0) + if (eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1714,37 +1723,37 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void) { ContestAICmd_check_user_has_exciting_move(); - if (eContestAI.scriptResult == 0) + if (!eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; } -static void ContestAICmd_unk_85(void) +static void ContestAICmd_check_user_has_move(void) { - int result = 0; + int hasMove = FALSE; int i; - u16 arg = T1_READ_16(gAIScriptPtr + 1); + u16 targetMove = T1_READ_16(gAIScriptPtr + 1); for (i = 0; i < MAX_MON_MOVES; i++) { u16 move = gContestMons[eContestAI.contestantId].moves[i]; - if (move == arg) + if (move == targetMove) { - result = 1; + hasMove = TRUE; break; } } - eContestAI.scriptResult = result; + eContestAI.scriptResult = hasMove; gAIScriptPtr += 3; } -static void ContestAICmd_unk_86(void) +static void ContestAICmd_if_user_has_move(void) { - ContestAICmd_unk_85(); + ContestAICmd_check_user_has_move(); - if (eContestAI.scriptResult != 0) + if (eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; @@ -1752,9 +1761,9 @@ static void ContestAICmd_unk_86(void) static void ContestAICmd_if_effect_in_user_moveset(void) { - ContestAICmd_unk_85(); + ContestAICmd_check_user_has_move(); - if (eContestAI.scriptResult == 0) + if (!eContestAI.scriptResult) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); else gAIScriptPtr += 4; diff --git a/src/contest_effect.c b/src/contest_effect.c index 8d1bbb2987..1fe21daaba 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -68,7 +68,10 @@ bool8 AreMovesContestCombo(u16 lastMove, u16 nextMove) if (lastMoveComboStarterId == 0) return FALSE; - else if (lastMoveComboStarterId == nextMoveComboMoves[0] || lastMoveComboStarterId == nextMoveComboMoves[1] || lastMoveComboStarterId == nextMoveComboMoves[2] || lastMoveComboStarterId == nextMoveComboMoves[3]) + else if (lastMoveComboStarterId == nextMoveComboMoves[0] + || lastMoveComboStarterId == nextMoveComboMoves[1] + || lastMoveComboStarterId == nextMoveComboMoves[2] + || lastMoveComboStarterId == nextMoveComboMoves[3]) return gComboStarterLookupTable[lastMoveComboStarterId]; else return FALSE; From fbb70b372743fca1c9323e0011a498e672d4707b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 21 Aug 2020 14:47:55 -0400 Subject: [PATCH 77/85] Document contest AI scripts --- asm/macros/contest_ai_script.inc | 15 +- data/contest_ai_scripts.s | 1091 ++++++++++++++++-------------- include/constants/contest.h | 41 ++ include/contest.h | 6 +- src/contest.c | 4 +- src/contest_ai.c | 29 +- src/data/contest_moves.h | 96 +-- src/data/contest_opponents.h | 231 ++++--- 8 files changed, 824 insertions(+), 689 deletions(-) diff --git a/asm/macros/contest_ai_script.inc b/asm/macros/contest_ai_script.inc index 7a5d669f4a..9ab7184c3c 100644 --- a/asm/macros/contest_ai_script.inc +++ b/asm/macros/contest_ai_script.inc @@ -510,6 +510,14 @@ .4byte \destination .endm + .macro if_used_combo_starter mon:req, destination:req + if_used_combo_starter_eq \mon, TRUE, \destination + .endm + + .macro if_not_used_combo_starter mon:req, destination:req + if_used_combo_starter_eq \mon, FALSE, \destination + .endm + @ whether the mon can make an appeal .macro check_can_participate mon:req @@ -803,7 +811,7 @@ .4byte \destination .endm - @ NOTE: Random is broken (see ContestAICmd_if_random_less_than) + @ NOTE: The random commands are broken (see ContestAICmd_if_random_less_than) .macro if_random_less_than num:req, destination:req .byte 0x7D .byte \num @@ -844,6 +852,7 @@ .4byte \destination .endm + @ This is used incorrectly to check for an effect; see ContestAICmd_check_user_has_move .macro check_user_has_move move:req .byte 0x85 .2byte \move @@ -855,8 +864,8 @@ .4byte \destination .endm - .macro if_effect_in_user_moveset effect:req, destination:req + .macro if_user_doesnt_have_move move:req, destination:req .byte 0x87 - .2byte \effect + .2byte \move .4byte \destination .endm diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index bb8d32f577..e47ccb4c8b 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -13,848 +13,889 @@ enum MON_4 .align 2 -gContestAIChecks:: @ 82DE350 - .4byte AI_CheckForBadMove @ CONTEST_AI_CHECK_BAD_MOVE - .4byte AI_CheckForCombo @ CONTEST_AI_CHECK_COMBO +gContestAI_ScriptsTable:: @ 82DE350 + .4byte AI_CheckBadMove @ CONTEST_AI_CHECK_BAD_MOVE + .4byte AI_CheckCombo @ CONTEST_AI_CHECK_COMBO .4byte AI_CheckBoring @ CONTEST_AI_CHECK_BORING .4byte AI_CheckExcitement @ CONTEST_AI_CHECK_EXCITEMENT .4byte AI_CheckOrder @ CONTEST_AI_CHECK_ORDER - .4byte AI_CheckForGoodMove @ CONTEST_AI_CHECK_GOOD_MOVE + .4byte AI_CheckGoodMove @ CONTEST_AI_CHECK_GOOD_MOVE .4byte AI_Erratic @ CONTEST_AI_ERRATIC - .4byte AI_Nothing // 0x00000080 - .4byte AI_Nothing // 0x00000100 - .4byte AI_Nothing // 0x00000200 - .4byte AI_Nothing // 0x00000400 - .4byte AI_Nothing // 0x00000800 - .4byte AI_Nothing // 0x00001000 - .4byte AI_Nothing // 0x00002000 - .4byte AI_Nothing // 0x00004000 - .4byte AI_Nothing // 0x00008000 - .4byte AI_Nothing // 0x00010000 - .4byte AI_Nothing // 0x00020000 - .4byte AI_Nothing // 0x00040000 - .4byte AI_Nothing // 0x00080000 - .4byte AI_Nothing // 0x00100000 - .4byte AI_Nothing // 0x00200000 - .4byte AI_Nothing // 0x00400000 - .4byte AI_Nothing // 0x00800000 - .4byte AI_Nothing // 0x01000000 - .4byte AI_Nothing // 0x02000000 - .4byte AI_Nothing // 0x04000000 - .4byte AI_Nothing // 0x08000000 - .4byte AI_Nothing // 0x10000000 - .4byte AI_Nothing // 0x20000000 - .4byte AI_Nothing // 0x40000000 - .4byte AI_Nothing // 0x80000000 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_1 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_2 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_3 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_4 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_5 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_6 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_7 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_8 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_9 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_10 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_11 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_12 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_13 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_14 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_15 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_16 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_17 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_18 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_19 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_20 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_21 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_22 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_23 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_24 + .4byte AI_Nothing @ CONTEST_AI_DUMMY_25 -@ Unreferenced AI routine to encourage moves that improve condition on the first -@ appeal. Additionally, it checks the turn order of the user and the effect -@ type, but the code is buggy and doesn't affect the score. - if_appeal_num_not_eq 0, ContestUnreferenced_80 - if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80 +@ Unused. Encourages improving condition on the 1st appeal, or startling mons if the users turn is later +AI_CheckTiming: + if_appeal_num_not_eq 0, AI_CheckTiming_SkipCondition + if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, AI_CheckTiming_SkipCondition score +10 -ContestUnreferenced_80: - call ContestUnreferenced_0D +AI_CheckTiming_SkipCondition: + call AI_CheckTiming_TryStartle end -ContestUnreferenced_0D: - if_user_order_more_than MON_2, ContestUnreferenced_end - if_effect_type_not_eq 2, ContestUnreferenced_end - if_effect_type_not_eq 3, ContestUnreferenced_end - score +10 @ unreachable -ContestUnreferenced_end: +AI_CheckTiming_TryStartle: + if_user_order_more_than MON_2, AI_CheckTiming_End + if_effect_type_not_eq CONTEST_EFFECT_TYPE_STARTLE_MON, AI_CheckTiming_End + if_effect_type_not_eq CONTEST_EFFECT_TYPE_STARTLE_MONS, AI_CheckTiming_End + score +10 +AI_CheckTiming_End: end -@ Unreferenced AI routine that doesn't make much sense. - if_appeal_num_eq 0, ContestUnreferenced_0F_1 - if_appeal_num_eq 1, ContestUnreferenced_0F_2 - if_appeal_num_eq 2, ContestUnreferenced_0F_3 - if_appeal_num_eq 3, ContestUnreferenced_0F_4 - if_last_appeal ContestUnreferenced_0F_5 +@ Unused, doesnt make much sense +@ Encourages using an avoid being startled move +@ The various appeal and turn checks are pointless, it will always encourage these moves +AI_AvoidStartle: + if_appeal_num_eq 0, AI_AvoidStartle_1stAppeal + if_appeal_num_eq 1, AI_AvoidStartle_2ndAppeal + if_appeal_num_eq 2, AI_AvoidStartle_3rdAppeal + if_appeal_num_eq 3, AI_AvoidStartle_4thAppeal + if_last_appeal AI_AvoidStartle_LastAppeal end -ContestUnreferenced_0F_1: - if_user_order_not_eq MON_1, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_2, ContestUnreferenced_2B_2 - if_user_order_not_eq MON_3, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_4, ContestUnreferenced_2B_1 +AI_AvoidStartle_1stAppeal: + if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove2 + if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove end -ContestUnreferenced_2B_1: - if_effect_type_eq 1, ContestUnreferenced_score +AI_AvoidStartle_EncourageIfAvoidMove: + if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_AvoidStartle_Encourage end -ContestUnreferenced_2B_2: - if_effect_type_eq 1, ContestUnreferenced_score +AI_AvoidStartle_EncourageIfAvoidMove2: + if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_AvoidStartle_Encourage end - if_effect_type_eq 1, ContestUnreferenced_score +AI_AvoidStartle_EncourageIfAvoidMove3: + if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_AvoidStartle_Encourage end -ContestUnreferenced_0F_2: - if_user_order_not_eq MON_1, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_2, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_3, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_4, ContestUnreferenced_2B_1 +AI_AvoidStartle_2ndAppeal: + if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove end -ContestUnreferenced_0F_3: - if_user_order_not_eq MON_1, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_2, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_3, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_4, ContestUnreferenced_2B_1 +AI_AvoidStartle_3rdAppeal: + if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove end -ContestUnreferenced_0F_4: - if_user_order_not_eq MON_1, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_2, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_3, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_4, ContestUnreferenced_2B_1 +AI_AvoidStartle_4thAppeal: + if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove end -ContestUnreferenced_0F_5: - if_user_order_not_eq MON_1, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_2, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_3, ContestUnreferenced_2B_1 - if_user_order_not_eq MON_4, ContestUnreferenced_2B_1 +AI_AvoidStartle_LastAppeal: + if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove + if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove end -ContestUnreferenced_score: - score +10 - end - - end - -@ Unreferenced AI routine to encourage the most appealing move. - if_most_appealing_move ContestUnreferenced_score2 - end -ContestUnreferenced_score2: +AI_AvoidStartle_Encourage: + score +10 + end +AI_AvoidStartle_End: + end + +@ Unused +AI_PreferMostAppealingMove: + if_most_appealing_move AI_PreferMostAppealingMove_Encourage + end +AI_PreferMostAppealingMove_Encourage: score +10 end +@ Discourages using the same move multiple times if it would get boring AI_CheckBoring: if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CheckBoring_NotBoring - if_move_used_count_eq 1, AI_CheckBoring_FirstRepeat - if_move_used_count_eq 2, AI_CheckBoring_SecondRepeat - if_move_used_count_eq 3, AI_CheckBoring_ThirdRepeat - if_move_used_count_eq 4, AI_CheckBoring_FourthRepeat + if_move_used_count_eq 1, AI_CheckBoring_1stRepeat + if_move_used_count_eq 2, AI_CheckBoring_2ndRepeat + if_move_used_count_eq 3, AI_CheckBoring_3rdRepeat + if_move_used_count_eq 4, AI_CheckBoring_4thRepeat @ No repeats end -AI_CheckBoring_FirstRepeat: +AI_CheckBoring_1stRepeat: score -5 end -AI_CheckBoring_SecondRepeat: +AI_CheckBoring_2ndRepeat: score -15 end -AI_CheckBoring_ThirdRepeat: +AI_CheckBoring_3rdRepeat: score -20 end -AI_CheckBoring_FourthRepeat: +AI_CheckBoring_4thRepeat: score -25 end AI_CheckBoring_NotBoring: end +@ Strongly encourages using an exciting move if user is in a position to receive the max excitement bonus +@ Encourages using exciting moves in general +@ If the user doesnt have a good exciting move to use, then encourage lowering excitement to prevent +@ opponents from benefitting from the excitement AI_CheckExcitement: - if_move_excitement_less_than 0, AI_contest09_081DC2AB - if_move_excitement_eq 0, AI_contest7D_4_081DC2AB - if_move_excitement_eq 1, AI_contest3D_081DC2AB + if_move_excitement_less_than 0, AI_CheckExcitement_Negative + if_move_excitement_eq 0, AI_CheckExcitement_Neutral + if_move_excitement_eq 1, AI_CheckExcitement_Positive end -AI_contest09_081DC2AB: - if_excitement_eq 4, AI_contest0F_1_081DC2AB - if_excitement_eq 3, AI_contest0F_2_081DC2AB - if_user_has_exciting_move AI_end_081DC2AB +AI_CheckExcitement_Negative: + if_excitement_eq 4, AI_CheckExcitement_Negative_1AwayFromMax + if_excitement_eq 3, AI_CheckExcitement_Negative_2AwayFromMax + if_user_has_exciting_move AI_CheckExcitement_End score +15 end -AI_contest0F_1_081DC2AB: - if_user_order_not_eq MON_1, AI_contest7D_1_081DC2AB - if_random_less_than 51, AI_end_081DC2AB +AI_CheckExcitement_Negative_1AwayFromMax: + if_user_order_not_eq MON_1, AI_CheckExcitement_Negative_1AwayFromMax_Not1stUp + if_random_less_than 51, AI_CheckExcitement_End score +20 end -AI_contest7D_1_081DC2AB: - if_random_less_than 127, AI_end_081DC2AB +AI_CheckExcitement_Negative_1AwayFromMax_Not1stUp: + if_random_less_than 127, AI_CheckExcitement_End score -10 end -AI_contest0F_2_081DC2AB: - if_user_order_not_eq MON_1, AI_contest7D_3_081DC2AB - if_last_appeal AI_score_081DC2AB -AI_contest7D_2_081DC2AB: - if_random_less_than 51, AI_end_081DC2AB +AI_CheckExcitement_Negative_2AwayFromMax: + if_user_order_not_eq MON_1, AI_CheckExcitement_Negative_2AwayFromMax_Not1stUp + if_last_appeal AI_CheckExcitement_Negative_2AwayFromMax_LastAppeal + if_random_less_than 51, AI_CheckExcitement_End score +10 end -AI_score_081DC2AB: +AI_CheckExcitement_Negative_2AwayFromMax_LastAppeal: score +15 end -AI_contest7D_3_081DC2AB: - if_random_less_than 127, AI_end_081DC2AB +AI_CheckExcitement_Negative_2AwayFromMax_Not1stUp: + if_random_less_than 127, AI_CheckExcitement_End score +10 end -AI_contest7D_4_081DC2AB: - if_random_less_than 127, AI_end_081DC2AB +AI_CheckExcitement_Neutral: + if_random_less_than 127, AI_CheckExcitement_End score +10 end -AI_contest3D_081DC2AB: - if_move_used_count_more_than 0, AI_contest29_081DC2AB - if_user_order_not_eq MON_1, AI_contest7D_5_081DC2AB - if_excitement_not_eq 4, AI_contest7D_5_081DC2AB +AI_CheckExcitement_Positive: + if_move_used_count_more_than 0, AI_CheckExcitement_Positive_Repeat + if_user_order_not_eq MON_1, AI_CheckExcitement_Positive_Not1stUpForMax + if_excitement_not_eq 4, AI_CheckExcitement_Positive_Not1stUpForMax score +30 end -AI_contest7D_5_081DC2AB: - if_random_less_than 100, AI_end_081DC2AB +AI_CheckExcitement_Positive_Not1stUpForMax: + if_random_less_than 100, AI_CheckExcitement_End score +10 end -AI_contest29_081DC2AB: - if_effect_not_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_end_081DC2AB - if_user_order_not_eq MON_1, AI_contest7D_5_081DC2AB - if_excitement_not_eq 4, AI_contest7D_5_081DC2AB +AI_CheckExcitement_Positive_Repeat: + if_effect_not_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CheckExcitement_End + if_user_order_not_eq MON_1, AI_CheckExcitement_Positive_Not1stUpForMax + if_excitement_not_eq 4, AI_CheckExcitement_Positive_Not1stUpForMax score +30 end -AI_end_081DC2AB: +AI_CheckExcitement_End: end -AI_CheckForCombo: - if_would_finish_combo AI_score_081DC348 - call AI_contest3F_081DC348 - call AI_contest45_081DC348 +@ Strongly encourages using a move if it would finish a combo +@ Encourages using a move if it would start a combo, esp if the user goes earlier +@ Discourages starting a combo in the last round +@ Discourages using a combo finisher when its combo starter hasnt been used yet +AI_CheckCombo: + if_would_finish_combo AI_CheckCombo_WouldFinish + call AI_CheckCombo_CheckStarter + call AI_CheckCombo_CheckFinisherWithoutStarter end -AI_contest3F_081DC348: - if_move_used_count_not_eq 0, AI_end_081DC348 - if_not_combo_starter AI_end_081DC348 - if_user_order_eq MON_1, AI_contest04_1_081DC348 - if_user_order_eq MON_2, AI_contest04_2_081DC348 - if_user_order_eq MON_3, AI_contest04_3_081DC348 - if_user_order_eq MON_4, AI_contest04_4_081DC348 +AI_CheckCombo_CheckStarter: + if_move_used_count_not_eq 0, AI_CheckCombo_End + if_not_combo_starter AI_CheckCombo_End + if_user_order_eq MON_1, AI_CheckCombo_Starter1stUp + if_user_order_eq MON_2, AI_CheckCombo_Starter2ndUp + if_user_order_eq MON_3, AI_CheckCombo_Starter3rdUp + if_user_order_eq MON_4, AI_CheckCombo_StarterLast end -AI_contest45_081DC348: - if_not_combo_finisher AI_end_081DC348 +AI_CheckCombo_CheckFinisherWithoutStarter: + if_not_combo_finisher AI_CheckCombo_End score -10 end -AI_score_081DC348: +AI_CheckCombo_WouldFinish: score +25 end -AI_contest04_1_081DC348: - if_last_appeal AI_contest7D_081DC348 - if_random_less_than 150, AI_end_081DC348 +AI_CheckCombo_Starter1stUp: + if_last_appeal AI_CheckCombo_StarterOnLastAppeal + if_random_less_than 150, AI_CheckCombo_End score +10 end -AI_contest04_2_081DC348: - if_last_appeal AI_contest7D_081DC348 - if_random_less_than 125, AI_end_081DC348 +AI_CheckCombo_Starter2ndUp: + if_last_appeal AI_CheckCombo_StarterOnLastAppeal + if_random_less_than 125, AI_CheckCombo_End score +10 end -AI_contest04_3_081DC348: - if_last_appeal AI_contest7D_081DC348 - if_random_less_than 50, AI_end_081DC348 +AI_CheckCombo_Starter3rdUp: + if_last_appeal AI_CheckCombo_StarterOnLastAppeal + if_random_less_than 50, AI_CheckCombo_End score +10 end -AI_contest04_4_081DC348: - if_last_appeal AI_contest7D_081DC348 +AI_CheckCombo_StarterLast: + if_last_appeal AI_CheckCombo_StarterOnLastAppeal score +10 end -AI_contest7D_081DC348: - if_random_less_than 125, AI_end_081DC348 +AI_CheckCombo_StarterOnLastAppeal: + if_random_less_than 125, AI_CheckCombo_End score -15 end -AI_end_081DC348: +AI_CheckCombo_End: end -AI_CheckForGoodMove: - if_effect_eq CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, ContestEffect39 - if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_EARLIER, ContestEffect40 - if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_LATER, ContestEffect41 - if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, ContestEffect3 - if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestEffect38 - if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, ContestEffect47 - if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, ContestEffect31 - if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, ContestEffect32 - if_effect_eq CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, ContestEffect46 - if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, ContestEffect27 - if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, ContestEffect16or17 - if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, ContestEffect16or17 - if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, ContestEffect_FollowingMonsNervous - if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, ContestEffect18 +@ Checks if move should be encouraged based on its effect +AI_CheckGoodMove: + if_effect_eq CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, AI_CGM_BetterWithGoodCondition + if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_EARLIER, AI_CGM_NextAppealEarlier + if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_LATER, AI_CGM_NextAppealLater + if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CGM_RepetitionNotBoring + if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, AI_CGM_ImproveCondition + if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, AI_CGM_DontExciteAudience + if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CGM_AppealAsGoodAsPrevOnes + if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, AI_CGM_AppealAsGoodAsPrevOne + if_effect_eq CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, AI_CGM_BetterWhenAudienceExcited + if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, AI_CGM_WorsenConditionOfPrevMons + if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, AI_CGM_TargetMonWithJudgesAttention + if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, AI_CGM_TargetMonWithJudgesAttention + if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, AI_CGM_MakeFollowingMonsNervous + if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_CGM_JamsOthersButMissOneTurn end -ContestEffect39: - if_user_condition_eq 3, ContestEffect39_score1 - if_user_condition_eq 2, ContestEffect39_score2 - if_user_condition_eq 1, ContestEffect39_score3 - if_user_condition_eq 0, ContestEffect39_score4 +AI_CGM_BetterWithGoodCondition: + if_user_condition_eq 3, AI_CGM_BetterWithGoodCondition_3 + if_user_condition_eq 2, AI_CGM_BetterWithGoodCondition_2 + if_user_condition_eq 1, AI_CGM_BetterWithGoodCondition_1 + if_user_condition_eq 0, AI_CGM_BetterWithGoodCondition_0 end -ContestEffect39_score1: +AI_CGM_BetterWithGoodCondition_3: score +20 end -ContestEffect39_score2: - if_random_less_than 125, ContestEffectEnd +AI_CGM_BetterWithGoodCondition_2: + if_random_less_than 125, AI_CGM_End score +15 end -ContestEffect39_score3: - if_random_less_than 125, ContestEffectEnd +AI_CGM_BetterWithGoodCondition_1: + if_random_less_than 125, AI_CGM_End score +5 end -ContestEffect39_score4: +AI_CGM_BetterWithGoodCondition_0: score -20 end -ContestEffect40: - if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_FIRST, ContestEffectEnd - if_random_less_than 50, ContestEffectEnd +AI_CGM_NextAppealEarlier: + if_user_doesnt_have_move CONTEST_EFFECT_BETTER_IF_FIRST, AI_CGM_End + if_random_less_than 50, AI_CGM_End score +20 end -ContestEffect41: - if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_LAST, ContestEffectEnd - if_random_less_than 50, ContestEffectEnd +AI_CGM_NextAppealLater: + if_user_doesnt_have_move CONTEST_EFFECT_BETTER_IF_LAST, AI_CGM_End + if_random_less_than 50, AI_CGM_End score +20 end -ContestEffect3: - if_user_order_not_eq MON_4, ContestEffectEnd - if_random_less_than 50, ContestEffectEnd +AI_CGM_RepetitionNotBoring: + if_user_order_not_eq MON_4, AI_CGM_End + if_random_less_than 50, AI_CGM_End score +15 end - if_last_appeal ContestEffect3_7D - if_random_less_than 220, ContestEffect3_score + +AI_CGM_Unused: + if_last_appeal AI_CGM_Unused_LastAppeal + if_random_less_than 220, AI_CGM_Unused_Discourage score +10 end -ContestEffect3_7D: - if_random_less_than 20, ContestEffectEnd +AI_CGM_Unused_LastAppeal: + if_random_less_than 20, AI_CGM_End score +15 end -ContestEffect3_score: +AI_CGM_Unused_Discourage: score -20 end -ContestEffect38: - if_effect_in_user_moveset CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, ContestEffect38_contest04 - if_user_condition_eq 3, ContestEffect38_score1 - if_random_less_than 50, ContestEffectEnd +@ Enourages improving condition, esp if user has moves better with good condition or on 1st appeal +@ Discourages improving condition if at max condition, or if last appeal +AI_CGM_ImproveCondition: + if_user_doesnt_have_move CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, AI_CGM_ImproveCondition_CheckAppealNum + if_user_condition_eq 3, AI_CGM_ImproveCondition_AtMax + if_random_less_than 50, AI_CGM_End score +15 end -ContestEffect38_score1: +AI_CGM_ImproveCondition_AtMax: score -10 end -ContestEffect38_contest04: - if_last_appeal ContestEffect38_score2 - if_appeal_num_eq 0, ContestEffect38_random - if_move_used_count_eq 1, ContestEffectEnd - if_random_less_than 125, ContestEffectEnd +AI_CGM_ImproveCondition_CheckAppealNum: + if_last_appeal AI_CGM_ImproveCondition_LastAppeal + if_appeal_num_eq 0, AI_CGM_ImproveCondition_FirstAppeal + if_move_used_count_eq 1, AI_CGM_End + if_random_less_than 125, AI_CGM_End score +10 end -ContestEffect38_random: - if_random_less_than 100, ContestEffectEnd +AI_CGM_ImproveCondition_FirstAppeal: + if_random_less_than 100, AI_CGM_End score +10 end -ContestEffect38_score2: +AI_CGM_ImproveCondition_LastAppeal: score -10 end -ContestEffect47: - if_move_used_count_eq 1, ContestEffectEnd - if_user_order_eq MON_1, ContestEffect47_random - if_user_order_eq MON_2, ContestEffect47_random - if_not_last_appeal ContestEffectEnd - if_user_has_exciting_move ContestEffectEnd - if_excitement_less_than 1, ContestEffectEnd +@ Encourage stopping audience excitement early in the appeal, or last appeal if no better options +AI_CGM_DontExciteAudience: + if_move_used_count_eq 1, AI_CGM_End + if_user_order_eq MON_1, AI_CGM_DontExciteAudience_EarlyTurn + if_user_order_eq MON_2, AI_CGM_DontExciteAudience_EarlyTurn + if_not_last_appeal AI_CGM_End + if_user_has_exciting_move AI_CGM_End + if_excitement_less_than 1, AI_CGM_End score +10 end -ContestEffect47_random: - if_random_less_than 127, ContestEffectEnd +AI_CGM_DontExciteAudience_EarlyTurn: + if_random_less_than 127, AI_CGM_End score +10 end -ContestEffect31: - if_user_order_eq MON_2, ContestEffect31_score1 - if_user_order_eq MON_3, ContestEffect31_score2 - if_user_order_eq MON_4, ContestEffect31_score3 +@ Encourages move the later the user goes +AI_CGM_AppealAsGoodAsPrevOnes: + if_user_order_eq MON_2, AI_CGM_AppealAsGoodAsPrevOnes_2ndUp + if_user_order_eq MON_3, AI_CGM_AppealAsGoodAsPrevOnes_3rdUp + if_user_order_eq MON_4, AI_CGM_AppealAsGoodAsPrevOnes_Last end -ContestEffect31_score1: +AI_CGM_AppealAsGoodAsPrevOnes_2ndUp: score +5 end -ContestEffect31_score2: +AI_CGM_AppealAsGoodAsPrevOnes_3rdUp: score +15 end -ContestEffect31_score3: +AI_CGM_AppealAsGoodAsPrevOnes_Last: score +20 end -ContestEffect32: - if_user_order_eq MON_1, ContestEffect32_score1 - if_user_order_eq MON_2, ContestEffect32_score2 - if_user_order_eq MON_3, ContestEffect32_score3 - if_user_order_eq MON_4, ContestEffect32_score5 +@ Encourages move more for each opponent who will have a turn before the user +AI_CGM_AppealAsGoodAsPrevOne: + if_user_order_eq MON_1, AI_CGM_AppealAsGoodAsPrevOne_1stUp + if_user_order_eq MON_2, AI_CGM_AppealAsGoodAsPrevOne_2ndUp + if_user_order_eq MON_3, AI_CGM_AppealAsGoodAsPrevOne_3rdUp + if_user_order_eq MON_4, AI_CGM_AppealAsGoodAsPrevOne_Last end -ContestEffect32_score1: +AI_CGM_AppealAsGoodAsPrevOne_1stUp: score -10 end -ContestEffect32_score2: - if_cannot_participate MON_1, ContestEffectEnd +AI_CGM_AppealAsGoodAsPrevOne_2ndUp: + if_cannot_participate MON_1, AI_CGM_End score +5 end -ContestEffect32_score3: - if_cannot_participate MON_1, ContestEffect32_score4 +AI_CGM_AppealAsGoodAsPrevOne_3rdUp: + if_cannot_participate MON_1, AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2 score +5 - goto ContestEffect32_score4 + goto AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2 end -ContestEffect32_score4: - if_cannot_participate MON_2, ContestEffectEnd +AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2: + if_cannot_participate MON_2, AI_CGM_End score +5 end -ContestEffect32_score5: - if_cannot_participate MON_1, ContestEffect32_score6 +AI_CGM_AppealAsGoodAsPrevOne_Last: + if_cannot_participate MON_1, AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2 score +5 - goto ContestEffect32_score6 + goto AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2 end -ContestEffect32_score6: - if_cannot_participate MON_2, ContestEffect32_score7 +AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2: + if_cannot_participate MON_2, AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3 score +5 - goto ContestEffect32_score7 + goto AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3 end -ContestEffect32_score7: - if_cannot_participate MON_3, ContestEffectEnd +AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3: + if_cannot_participate MON_3, AI_CGM_End score +5 end -ContestEffect46: - if_user_order_eq MON_1, ContestEffect46_05 - if_user_order_more_than MON_1, ContestEffect46_score4 +@ Encourage move if audience is close to full exictement and user goes first +@ See bug note, only does this on 1st appeal (when it will never happen) +AI_CGM_BetterWhenAudienceExcited: + if_user_order_eq MON_1, AI_CGM_BetterWhenAudienceExcited_1stUp + if_user_order_more_than MON_1, AI_CGM_BetterWhenAudienceExcited_Not1stUp end -ContestEffect46_05: - if_appeal_num_not_eq 0, ContestEffect46_score1 - if_excitement_eq 4, ContestEffect46_score2 - if_excitement_eq 3, ContestEffect46_score3 +AI_CGM_BetterWhenAudienceExcited_1stUp: + @ BUG: Should be if_appeal_num_eq 0 + @ 1st up on 1st appeal excitement will always be 0 + if_appeal_num_not_eq 0, AI_CGM_BetterWhenAudienceExcited_Not1stAppeal + if_excitement_eq 4, AI_CGM_BetterWhenAudienceExcited_1AwayFromMax + if_excitement_eq 3, AI_CGM_BetterWhenAudienceExcited_2AwayFromMax end -ContestEffect46_score1: - if_random_less_than 125, ContestEffectEnd +AI_CGM_BetterWhenAudienceExcited_Not1stAppeal: + if_random_less_than 125, AI_CGM_End score -15 end -ContestEffect46_score2: - if_random_less_than 125, ContestEffectEnd +AI_CGM_BetterWhenAudienceExcited_1AwayFromMax: + if_random_less_than 125, AI_CGM_End score +20 end -ContestEffect46_score3: - if_random_less_than 125, ContestEffectEnd +AI_CGM_BetterWhenAudienceExcited_2AwayFromMax: + if_random_less_than 125, AI_CGM_End score +15 end -ContestEffect46_score4: - if_random_less_than 178, ContestEffectEnd +AI_CGM_BetterWhenAudienceExcited_Not1stUp: + if_random_less_than 178, AI_CGM_End score +10 end -ContestEffect27: - if_user_order_eq MON_1, ContestEffectEnd - goto ContestEffect27_55_1 +@ Encourage move more for each condition star the prev mons have +AI_CGM_WorsenConditionOfPrevMons: + if_user_order_eq MON_1, AI_CGM_End + goto AI_CGM_WorsenConditionOfPrevMons_CheckMon1 end -ContestEffect27_55_1: - if_cannot_participate MON_1, ContestEffect27_noscore - if_condition_eq MON_1, 0, ContestEffect27_noscore - if_condition_eq MON_1, 1, ContestEffect27_score1 - if_condition_eq MON_1, 2, ContestEffect27_score2 - if_condition_eq MON_1, 3, ContestEffect27_score3 +AI_CGM_WorsenConditionOfPrevMons_CheckMon1: + if_cannot_participate MON_1, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon2 + if_condition_eq MON_1, 0, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon2 + if_condition_eq MON_1, 1, AI_CGM_WorsenConditionOfPrevMons_Mon1Has1Star + if_condition_eq MON_1, 2, AI_CGM_WorsenConditionOfPrevMons_Mon1Has2Stars + if_condition_eq MON_1, 3, AI_CGM_WorsenConditionOfPrevMons_Mon1Has3Stars end -ContestEffect27_score1: - if_random_less_than 125, ContestEffect27_55_2 +AI_CGM_WorsenConditionOfPrevMons_Mon1Has1Star: + if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2 score +5 - if_user_order_more_than MON_2, ContestEffect27_55_2 + if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2 end -ContestEffect27_score2: - if_random_less_than 125, ContestEffect27_55_2 +AI_CGM_WorsenConditionOfPrevMons_Mon1Has2Stars: + if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2 score +10 - if_user_order_more_than MON_2, ContestEffect27_55_2 + if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2 end -ContestEffect27_score3: - if_random_less_than 125, ContestEffect27_55_2 +AI_CGM_WorsenConditionOfPrevMons_Mon1Has3Stars: + if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2 score +15 - if_user_order_more_than MON_2, ContestEffect27_55_2 + if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2 end -ContestEffect27_noscore: - if_user_order_more_than MON_2, ContestEffect27_55_2 +AI_CGM_WorsenConditionOfPrevMons_TryCheckMon2: + if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2 end -ContestEffect27_55_2: - if_cannot_participate MON_2, ContestEffect27_noscore2 - if_condition_eq MON_2, 0, ContestEffect27_noscore2 - if_condition_eq MON_2, 1, ContestEffect27_score4 - if_condition_eq MON_2, 2, ContestEffect27_score5 - if_condition_eq MON_2, 3, ContestEffect27_score6 +AI_CGM_WorsenConditionOfPrevMons_CheckMon2: + if_cannot_participate MON_2, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon3 + if_condition_eq MON_2, 0, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon3 + if_condition_eq MON_2, 1, AI_CGM_WorsenConditionOfPrevMons_Mon2Has1Star + if_condition_eq MON_2, 2, AI_CGM_WorsenConditionOfPrevMons_Mon2Has2Stars + if_condition_eq MON_2, 3, AI_CGM_WorsenConditionOfPrevMons_Mon2Has3Stars end -ContestEffect27_score4: - if_random_less_than 125, ContestEffect27_55_3 +AI_CGM_WorsenConditionOfPrevMons_Mon2Has1Star: + if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3 score +5 - if_user_order_more_than MON_3, ContestEffect27_55_3 + if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3 end -ContestEffect27_score5: - if_random_less_than 125, ContestEffect27_55_3 +AI_CGM_WorsenConditionOfPrevMons_Mon2Has2Stars: + if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3 score +10 - if_user_order_more_than MON_3, ContestEffect27_55_3 + if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3 end -ContestEffect27_score6: - if_random_less_than 125, ContestEffect27_55_3 +AI_CGM_WorsenConditionOfPrevMons_Mon2Has3Stars: + if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3 score +15 - if_user_order_more_than MON_3, ContestEffect27_55_3 + if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3 end -ContestEffect27_noscore2: - if_user_order_more_than MON_3, ContestEffect27_55_3 +AI_CGM_WorsenConditionOfPrevMons_TryCheckMon3: + if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3 end -ContestEffect27_55_3: - if_cannot_participate MON_3, ContestEffect27_end - if_condition_eq MON_3, 0, ContestEffect27_end - if_condition_eq MON_3, 1, ContestEffect27_score7 - if_condition_eq MON_3, 2, ContestEffect27_score8 - if_condition_eq MON_3, 3, ContestEffect27_score9 +AI_CGM_WorsenConditionOfPrevMons_CheckMon3: + if_cannot_participate MON_3, AI_CGM_WorsenConditionOfPrevMons_end + if_condition_eq MON_3, 0, AI_CGM_WorsenConditionOfPrevMons_end + if_condition_eq MON_3, 1, AI_CGM_WorsenConditionOfPrevMons_Mon3Has1Star + if_condition_eq MON_3, 2, AI_CGM_WorsenConditionOfPrevMons_Mon3Has2Stars + if_condition_eq MON_3, 3, AI_CGM_WorsenConditionOfPrevMons_Mon3Has3Stars end -ContestEffect27_score7: - if_random_less_than 125, ContestEffectEnd +AI_CGM_WorsenConditionOfPrevMons_Mon3Has1Star: + if_random_less_than 125, AI_CGM_End score +5 end -ContestEffect27_score8: - if_random_less_than 125, ContestEffectEnd +AI_CGM_WorsenConditionOfPrevMons_Mon3Has2Stars: + if_random_less_than 125, AI_CGM_End score +10 end -ContestEffect27_score9: - if_random_less_than 125, ContestEffectEnd +AI_CGM_WorsenConditionOfPrevMons_Mon3Has3Stars: + if_random_less_than 125, AI_CGM_End score +15 end -ContestEffect27_end: +AI_CGM_WorsenConditionOfPrevMons_end: end -ContestEffect16or17: - if_user_order_eq MON_1, ContestEffectEnd - goto ContestEffect16or17_55 +@ Encourage if a prev mon has started a combo, esp if they havent completed it yet +@ BUG: Incorrectly uses if_used_combo_starter below, instead of if_not_used_combo_starter +@ As a result it encourages move if a prev mon has not begun a combo +AI_CGM_TargetMonWithJudgesAttention: + if_user_order_eq MON_1, AI_CGM_End + goto AI_CGM_TargetMonWithJudgesAttention_CheckMon1 end -ContestEffect16or17_55: - if_cannot_participate MON_1, ContestEffect16or17_0E_1 - if_used_combo_starter_eq MON_1, TRUE, ContestEffect16or17_0E_1 - if_random_less_than 125, ContestEffect16or17_0E_1 +AI_CGM_TargetMonWithJudgesAttention_CheckMon1: + if_cannot_participate MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 + if_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 + if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 score +2 - if_not_completed_combo MON_1, ContestEffect16or17_0E_1 + if_not_completed_combo MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 score +8 end -ContestEffect16or17_0E_1: - if_user_order_eq MON_2, ContestEffectEnd - if_cannot_participate MON_2, ContestEffect16or17_0E_2 - if_used_combo_starter_eq MON_2, TRUE, ContestEffect16or17_0E_2 - if_random_less_than 125, ContestEffect16or17_0E_2 +AI_CGM_TargetMonWithJudgesAttention_CheckMon2: + if_user_order_eq MON_2, AI_CGM_End + if_cannot_participate MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 + if_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 + if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 score +2 - if_not_completed_combo MON_2, ContestEffect16or17_0E_2 + if_not_completed_combo MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 score +8 end -ContestEffect16or17_0E_2: - if_user_order_eq MON_3, ContestEffectEnd - if_cannot_participate MON_3, ContestEffectEnd - if_used_combo_starter_eq MON_3, TRUE, ContestEffectEnd - if_random_less_than 125, ContestEffectEnd +AI_CGM_TargetMonWithJudgesAttention_CheckMon3: + if_user_order_eq MON_3, AI_CGM_End + if_cannot_participate MON_3, AI_CGM_End + if_used_combo_starter MON_3, AI_CGM_End + if_random_less_than 125, AI_CGM_End score +2 - if_not_completed_combo MON_3, ContestEffectEnd + if_not_completed_combo MON_3, AI_CGM_End score +8 end -ContestEffect_FollowingMonsNervous: - if_user_order_eq MON_4, ContestEffectEnd - goto ContestEffect_FollowingMonsNervous_CheckMon4 +@ Encourage making mons nervous that have started a combo and can appeal after the user +AI_CGM_MakeFollowingMonsNervous: + if_user_order_eq MON_4, AI_CGM_End + goto AI_CGM_MakeFollowingMonsNervous_CheckMon4 end -ContestEffect_FollowingMonsNervous_CheckMon4: - if_cannot_participate MON_4, ContestEffect_FollowingMonsNervous_CheckMon3 - if_used_combo_starter_eq MON_4, FALSE, ContestEffect_FollowingMonsNervous_CheckMon3 +AI_CGM_MakeFollowingMonsNervous_CheckMon4: + if_cannot_participate MON_4, AI_CGM_MakeFollowingMonsNervous_CheckMon3 + if_not_used_combo_starter MON_4, AI_CGM_MakeFollowingMonsNervous_CheckMon3 score +5 - if_random_less_than 125, ContestEffect16or17_0E_1 + if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 score +5 end -ContestEffect_FollowingMonsNervous_CheckMon3: - if_user_order_eq MON_3, ContestEffectEnd - if_cannot_participate MON_3, ContestEffect_FollowingMonsNervous_CheckMon2 - if_used_combo_starter_eq MON_3, FALSE, ContestEffect_FollowingMonsNervous_CheckMon2 +AI_CGM_MakeFollowingMonsNervous_CheckMon3: + if_user_order_eq MON_3, AI_CGM_End + if_cannot_participate MON_3, AI_CGM_MakeFollowingMonsNervous_CheckMon2 + if_not_used_combo_starter MON_3, AI_CGM_MakeFollowingMonsNervous_CheckMon2 score +5 - if_random_less_than 125, ContestEffect16or17_0E_2 + if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 score +5 end -ContestEffect_FollowingMonsNervous_CheckMon2: - if_user_order_eq MON_2, ContestEffectEnd - if_cannot_participate MON_2, ContestEffectEnd - if_used_combo_starter_eq MON_2, FALSE, ContestEffectEnd +AI_CGM_MakeFollowingMonsNervous_CheckMon2: + if_user_order_eq MON_2, AI_CGM_End + if_cannot_participate MON_2, AI_CGM_End + if_not_used_combo_starter MON_2, AI_CGM_End score +5 - if_random_less_than 125, ContestEffectEnd + if_random_less_than 125, AI_CGM_End score +5 end -ContestEffect18: - if_last_appeal ContestEffect18_score1 - goto ContestEffect18_0E +@ Encourages move if users turn is later, or if its the last appeal +AI_CGM_JamsOthersButMissOneTurn: + if_last_appeal AI_CGM_JamsOthersButMissOneTurn_LastAppeal + goto AI_CGM_JamsOthersButMissOneTurn_TurnOrder end -ContestEffect18_score1: +AI_CGM_JamsOthersButMissOneTurn_LastAppeal: score +5 - goto ContestEffect18_0E + goto AI_CGM_JamsOthersButMissOneTurn_TurnOrder end -ContestEffect18_0E: - if_user_order_eq MON_1, ContestEffect18_score2 - if_user_order_eq MON_2, ContestEffect18_random1 - if_user_order_eq MON_3, ContestEffect18_random2 - if_user_order_eq MON_4, ContestEffect18_random3 +AI_CGM_JamsOthersButMissOneTurn_TurnOrder: + if_user_order_eq MON_1, AI_CGM_JamsOthersButMissOneTurn_1stUp + if_user_order_eq MON_2, AI_CGM_JamsOthersButMissOneTurn_2ndUp + if_user_order_eq MON_3, AI_CGM_JamsOthersButMissOneTurn_3rdUp + if_user_order_eq MON_4, AI_CGM_JamsOthersButMissOneTurn_Last end -ContestEffect18_score2: +AI_CGM_JamsOthersButMissOneTurn_1stUp: score -15 end -ContestEffect18_random1: - if_random_less_than 125, ContestEffectEnd +AI_CGM_JamsOthersButMissOneTurn_2ndUp: + if_random_less_than 125, AI_CGM_End score -10 end -ContestEffect18_random2: - if_random_less_than 125, ContestEffectEnd +AI_CGM_JamsOthersButMissOneTurn_3rdUp: + if_random_less_than 125, AI_CGM_End score +5 end -ContestEffect18_random3: - if_random_less_than 125, ContestEffectEnd +AI_CGM_JamsOthersButMissOneTurn_Last: + if_random_less_than 125, AI_CGM_End score +15 end -ContestEffectEnd: +AI_CGM_End: end @ Randomly encourage moves in Cute, Smart, and Tough contests. AI_Erratic: - if_contest_type_eq CONTEST_CATEGORY_CUTE, Erratic_CuteSmartTough - if_contest_type_eq CONTEST_CATEGORY_SMART, Erratic_CuteSmartTough - if_contest_type_eq CONTEST_CATEGORY_TOUGH, Erratic_CuteSmartTough + if_contest_type_eq CONTEST_CATEGORY_CUTE, AI_Erratic_CuteSmartTough + if_contest_type_eq CONTEST_CATEGORY_SMART, AI_Erratic_CuteSmartTough + if_contest_type_eq CONTEST_CATEGORY_TOUGH, AI_Erratic_CuteSmartTough end -Erratic_CuteSmartTough: - if_random_less_than 125, Erratic_NoScoreIncrease +AI_Erratic_CuteSmartTough: + if_random_less_than 125, AI_Erratic_End score +10 end -Erratic_NoScoreIncrease: +AI_Erratic_End: end -AI_CheckForBadMove: - if_effect_eq CONTEST_EFFECT_STARTLE_FRONT_MON, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON_2, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_BETTER_IF_SAME_TYPE, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_BETTER_IF_DIFF_TYPE, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, ContestEffect2_8 - if_effect_eq CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS_2, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, ContestEffect2_9 - if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS, ContestEffect2_25 - if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, ContestEffect2_26 - if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, ContestEffect2_26 - if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestEffect2_38 - if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_ONCE, ContestEffect2_4 - if_effect_eq CONTEST_EFFECT_AVOID_STARTLE, ContestEffect2_4 - if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY, ContestEffect2_4 - if_effect_eq CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, ContestEffect2_2 +@ Checks if move should be discouraged based on its effect +AI_CheckBadMove: + if_effect_eq CONTEST_EFFECT_STARTLE_FRONT_MON, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON_2, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_BETTER_IF_SAME_TYPE, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_BETTER_IF_DIFF_TYPE, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, AI_CBM_DependsOnPrevMon + if_effect_eq CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS_2, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CBM_DependsOnPrevMons + if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS, AI_CBM_DependsOnNextMon + if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, AI_CBM_DependsOnNextMons + if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, AI_CBM_DependsOnNextMons + if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, AI_CBM_ImproveCondition + if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_ONCE, AI_CBM_AvoidStartle + if_effect_eq CONTEST_EFFECT_AVOID_STARTLE, AI_CBM_AvoidStartle + if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY, AI_CBM_AvoidStartle + if_effect_eq CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, AI_CBM_NoMoreMoves end -ContestEffect2_8: - if_user_order_eq MON_1, ContestEffect2_8_score1 - if_user_order_eq MON_2, ContestEffect2_8_score2 - if_user_order_eq MON_3, ContestEffect2_8_score3 - if_user_order_eq MON_4, ContestEffect2_8_score4 +@ If previous mon is skipping turn (or user is first), discourage move +AI_CBM_DependsOnPrevMon: + if_user_order_eq MON_1, AI_CBM_DependsOnPrevMon_1stUp + if_user_order_eq MON_2, AI_CBM_DependsOnPrevMon_2ndUp + if_user_order_eq MON_3, AI_CBM_DependsOnPrevMon_3rdUp + if_user_order_eq MON_4, AI_CBM_DependsOnPrevMon_Last end -ContestEffect2_8_score1: +AI_CBM_DependsOnPrevMon_1stUp: score -10 end -ContestEffect2_8_score2: - if_can_participate MON_1, ContestEffectEnd2 +AI_CBM_DependsOnPrevMon_2ndUp: + if_can_participate MON_1, AI_CBM_End score -10 end -ContestEffect2_8_score3: - if_can_participate MON_2, ContestEffectEnd2 +AI_CBM_DependsOnPrevMon_3rdUp: + if_can_participate MON_2, AI_CBM_End score -10 end -ContestEffect2_8_score4: - if_can_participate MON_3, ContestEffectEnd2 +AI_CBM_DependsOnPrevMon_Last: + if_can_participate MON_3, AI_CBM_End score -10 end -ContestEffect2_9: - if_user_order_eq MON_1, ContestEffect2_9_score1 - if_user_order_eq MON_2, ContestEffect2_9_score2 - if_user_order_eq MON_3, ContestEffect2_9_score3 - if_user_order_eq MON_4, ContestEffect2_9_score4 +@ If previous mons are all skipping turns (or user is first), discourage move +AI_CBM_DependsOnPrevMons: + if_user_order_eq MON_1, AI_CBM_DependsOnPrevMons_1stUp + if_user_order_eq MON_2, AI_CBM_DependsOnPrevMons_2ndUp + if_user_order_eq MON_3, AI_CBM_DependsOnPrevMons_3rdUp + if_user_order_eq MON_4, AI_CBM_DependsOnPrevMons_Last end -ContestEffect2_9_score1: +AI_CBM_DependsOnPrevMons_1stUp: score -20 end -ContestEffect2_9_score2: - if_can_participate MON_1, ContestEffectEnd2 +AI_CBM_DependsOnPrevMons_2ndUp: + if_can_participate MON_1, AI_CBM_End score -15 end -ContestEffect2_9_score3: - if_can_participate MON_1, ContestEffectEnd2 - if_can_participate MON_2, ContestEffectEnd2 +AI_CBM_DependsOnPrevMons_3rdUp: + if_can_participate MON_1, AI_CBM_End + if_can_participate MON_2, AI_CBM_End score -15 end -ContestEffect2_9_score4: - if_can_participate MON_1, ContestEffectEnd2 - if_can_participate MON_2, ContestEffectEnd2 - if_can_participate MON_3, ContestEffectEnd2 +AI_CBM_DependsOnPrevMons_Last: + if_can_participate MON_1, AI_CBM_End + if_can_participate MON_2, AI_CBM_End + if_can_participate MON_3, AI_CBM_End score -15 end -ContestEffect2_25: - if_user_order_eq MON_1, ContestEffect2_25_score1 - if_user_order_eq MON_2, ContestEffect2_25_score2 - if_user_order_eq MON_3, ContestEffect2_25_score3 +@ If next mon is skipping turn (or user is last), discourage move +AI_CBM_DependsOnNextMon: + if_user_order_eq MON_1, AI_CBM_DependsOnNextMon_1stUp + if_user_order_eq MON_2, AI_CBM_DependsOnNextMon_2ndUp + if_user_order_eq MON_3, AI_CBM_DependsOnNextMon_3rdUp score -10 end -ContestEffect2_25_score1: - if_can_participate MON_2, ContestEffectEnd2 +AI_CBM_DependsOnNextMon_1stUp: + if_can_participate MON_2, AI_CBM_End score -10 end -ContestEffect2_25_score2: - if_can_participate MON_3, ContestEffectEnd2 +AI_CBM_DependsOnNextMon_2ndUp: + if_can_participate MON_3, AI_CBM_End score -10 end -ContestEffect2_25_score3: - if_can_participate MON_4, ContestEffectEnd2 +AI_CBM_DependsOnNextMon_3rdUp: + if_can_participate MON_4, AI_CBM_End score -10 end -ContestEffect2_26: - if_user_order_eq MON_1, ContestEffect2_26_score1 - if_user_order_eq MON_2, ContestEffect2_26_score2 - if_user_order_eq MON_3, ContestEffect2_26_score3 +@ If next mons are all skipping turns (or user is last), discourage move +AI_CBM_DependsOnNextMons: + if_user_order_eq MON_1, AI_CBM_DependsOnNextMons_1stUp + if_user_order_eq MON_2, AI_CBM_DependsOnNextMons_2ndUp + if_user_order_eq MON_3, AI_CBM_DependsOnNextMons_3rdUp score -10 end -ContestEffect2_26_score1: - if_can_participate MON_2, ContestEffectEnd2 - if_can_participate MON_3, ContestEffectEnd2 - if_can_participate MON_4, ContestEffectEnd2 +AI_CBM_DependsOnNextMons_1stUp: + if_can_participate MON_2, AI_CBM_End + if_can_participate MON_3, AI_CBM_End + if_can_participate MON_4, AI_CBM_End score -10 end -ContestEffect2_26_score2: - if_can_participate MON_3, ContestEffectEnd2 - if_can_participate MON_4, ContestEffectEnd2 +AI_CBM_DependsOnNextMons_2ndUp: + if_can_participate MON_3, AI_CBM_End + if_can_participate MON_4, AI_CBM_End score -10 end -ContestEffect2_26_score3: - if_can_participate MON_4, ContestEffectEnd2 +AI_CBM_DependsOnNextMons_3rdUp: + if_can_participate MON_4, AI_CBM_End score -10 end -ContestEffect2_38: - if_user_condition_less_than 3, ContestEffectEnd2 +@ If at max condition, discourage move +AI_CBM_ImproveCondition: + if_user_condition_less_than 3, AI_CBM_End score -20 end -ContestEffect2_4: - if_user_order_eq MON_1, ContestEffect2_4_score1 - if_user_order_eq MON_2, ContestEffect2_4_score2 - if_user_order_eq MON_3, ContestEffect2_4_score3 +@ If there are no upcoming mons who can make an appeal (or if user is last), discourage move +@ Identical to AI_CBM_DependsOnNextMons +AI_CBM_AvoidStartle: + if_user_order_eq MON_1, AI_CBM_AvoidStartle_1stUp + if_user_order_eq MON_2, AI_CBM_AvoidStartle_2ndUp + if_user_order_eq MON_3, AI_CBM_AvoidStartle_3rdUp score -10 end -ContestEffect2_4_score1: - if_can_participate MON_2, ContestEffectEnd2 - if_can_participate MON_3, ContestEffectEnd2 - if_can_participate MON_4, ContestEffectEnd2 +AI_CBM_AvoidStartle_1stUp: + if_can_participate MON_2, AI_CBM_End + if_can_participate MON_3, AI_CBM_End + if_can_participate MON_4, AI_CBM_End score -10 end -ContestEffect2_4_score2: - if_can_participate MON_3, ContestEffectEnd2 - if_can_participate MON_4, ContestEffectEnd2 +AI_CBM_AvoidStartle_2ndUp: + if_can_participate MON_3, AI_CBM_End + if_can_participate MON_4, AI_CBM_End score -10 end -ContestEffect2_4_score3: - if_can_participate MON_4, ContestEffectEnd2 +AI_CBM_AvoidStartle_3rdUp: + if_can_participate MON_4, AI_CBM_End score -10 end -ContestEffect2_2: - if_appeal_num_eq 0, ContestEffect2_2_score1 - if_appeal_num_eq 1, ContestEffect2_2_score2 - if_appeal_num_eq 2, ContestEffect2_2_score3 - if_appeal_num_eq 3, ContestEffect2_2_score4 - if_last_appeal ContestEffect2_2_score5 +@ Very good if its the last appeal, otherwise discourage move +AI_CBM_NoMoreMoves: + if_appeal_num_eq 0, AI_CBM_NoMoreMoves_1stAppeal + if_appeal_num_eq 1, AI_CBM_NoMoreMoves_2ndAppeal + if_appeal_num_eq 2, AI_CBM_NoMoreMoves_3rdAppeal + if_appeal_num_eq 3, AI_CBM_NoMoreMoves_4thAppeal + if_last_appeal AI_CBM_NoMoreMoves_LastAppeal end -ContestEffect2_2_score1: - if_random_less_than 20, ContestEffectEnd2 +AI_CBM_NoMoreMoves_1stAppeal: + if_random_less_than 20, AI_CBM_End score -15 end -ContestEffect2_2_score2: - if_random_less_than 40, ContestEffectEnd2 +AI_CBM_NoMoreMoves_2ndAppeal: + if_random_less_than 40, AI_CBM_End score -15 end -ContestEffect2_2_score3: - if_random_less_than 60, ContestEffectEnd2 +AI_CBM_NoMoreMoves_3rdAppeal: + if_random_less_than 60, AI_CBM_End score -15 end -ContestEffect2_2_score4: - if_random_less_than 80, ContestEffectEnd2 +AI_CBM_NoMoreMoves_4thAppeal: + if_random_less_than 80, AI_CBM_End score -15 end -ContestEffect2_2_score5: - if_random_less_than 20, ContestEffectEnd2 +AI_CBM_NoMoreMoves_LastAppeal: + if_random_less_than 20, AI_CBM_End score +20 end -ContestEffectEnd2: +AI_CBM_End: end +@ Encourages/discourages move affected by the move order +@ e.g. use BETTER_IF_FIRST moves if user is first, dont use AVOID_STARTLE moves if last AI_CheckOrder: - if_user_order_eq MON_1, AI_effectcheck1_081DCA4C - if_user_order_eq MON_2, AI_effectcheck2_081DCA4C - if_user_order_eq MON_3, AI_effectcheck3_081DCA4C - if_user_order_eq MON_4, AI_effectcheck4_081DCA4C + if_user_order_eq MON_1, AI_CheckOrder_1stUp + if_user_order_eq MON_2, AI_CheckOrder_2ndUp + if_user_order_eq MON_3, AI_CheckOrder_3rdUp + if_user_order_eq MON_4, AI_CheckOrder_Last end -AI_effectcheck1_081DCA4C: - if_effect_eq CONTEST_EFFECT_BETTER_IF_FIRST, AI_score1_081DCA4C - if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score2_081DCA4C - if_effect_type_eq 1, AI_random1_081DCA4C +AI_CheckOrder_1stUp: + if_effect_eq CONTEST_EFFECT_BETTER_IF_FIRST, AI_CheckOrder_1stUp_Encourage + if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_1stUp_Discourage + if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_CheckOrder_1stUp_RandomEncourage end -AI_score1_081DCA4C: +AI_CheckOrder_1stUp_Encourage: score +15 end -AI_score2_081DCA4C: +AI_CheckOrder_1stUp_Discourage: score -15 end -AI_random1_081DCA4C: - if_random_less_than 100, ContestEffectEnd2 +AI_CheckOrder_1stUp_RandomEncourage: + if_random_less_than 100, AI_CBM_End score +10 end -AI_effectcheck2_081DCA4C: - if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score3_081DCA4C - if_effect_type_eq 1, AI_random2_081DCA4C +AI_CheckOrder_2ndUp: + if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_2ndUp_Discourage + if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_CheckOrder_2ndUp_RandomEncourage end -AI_score3_081DCA4C: +AI_CheckOrder_2ndUp_Discourage: score -5 end -AI_random2_081DCA4C: - if_random_less_than 125, ContestEffectEnd2 +AI_CheckOrder_2ndUp_RandomEncourage: + if_random_less_than 125, AI_CBM_End score +10 end -AI_effectcheck3_081DCA4C: - if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score4_081DCA4C - if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_score4_081DCA4C - if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_score4_081DCA4C +AI_CheckOrder_3rdUp: + if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_3rdUp_Encourage + if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CheckOrder_3rdUp_Encourage + if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_CheckOrder_3rdUp_Encourage end -AI_score4_081DCA4C: +AI_CheckOrder_3rdUp_Encourage: score +5 end -AI_effectcheck4_081DCA4C: - if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score5_081DCA4C - if_effect_eq CONTEST_EFFECT_BETTER_IF_LAST, AI_score5_081DCA4C - if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_score5_081DCA4C - if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_score5_081DCA4C - if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_score7_081DCA4C - if_effect_type_eq 1, AI_score6_081DCA4C - if_effect_type_eq 3, AI_random3_081DCA4C +AI_CheckOrder_Last: + if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_Last_StronglyEncourage + if_effect_eq CONTEST_EFFECT_BETTER_IF_LAST, AI_CheckOrder_Last_StronglyEncourage + if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CheckOrder_Last_StronglyEncourage + if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_CheckOrder_Last_StronglyEncourage + if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_CheckOrder_Last_Encourage + if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_CheckOrder_Last_Discourage + if_effect_type_eq CONTEST_EFFECT_TYPE_STARTLE_MONS, AI_CheckOrder_Last_RandomEncourage end -AI_score5_081DCA4C: +AI_CheckOrder_Last_StronglyEncourage: score +15 end -AI_score6_081DCA4C: +AI_CheckOrder_Last_Discourage: score -10 end -AI_random3_081DCA4C: - if_random_less_than 125, ContestEffectEnd2 +AI_CheckOrder_Last_RandomEncourage: + if_random_less_than 125, AI_CBM_End score +10 end -AI_score7_081DCA4C: +AI_CheckOrder_Last_Encourage: score +5 end diff --git a/include/constants/contest.h b/include/constants/contest.h index 5ec4c4f694..9eb6b26e41 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -52,6 +52,37 @@ #define CONTEST_AI_CHECK_ORDER (1 << 4) #define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5) #define CONTEST_AI_ERRATIC (1 << 6) +#define CONTEST_AI_DUMMY_1 (1 << 7) +#define CONTEST_AI_DUMMY_2 (1 << 8) +#define CONTEST_AI_DUMMY_3 (1 << 9) +#define CONTEST_AI_DUMMY_4 (1 << 10) +#define CONTEST_AI_DUMMY_5 (1 << 11) +#define CONTEST_AI_DUMMY_6 (1 << 12) +#define CONTEST_AI_DUMMY_7 (1 << 13) +#define CONTEST_AI_DUMMY_8 (1 << 14) +#define CONTEST_AI_DUMMY_9 (1 << 15) +#define CONTEST_AI_DUMMY_10 (1 << 16) +#define CONTEST_AI_DUMMY_11 (1 << 17) +#define CONTEST_AI_DUMMY_12 (1 << 18) +#define CONTEST_AI_DUMMY_13 (1 << 19) +#define CONTEST_AI_DUMMY_14 (1 << 20) +#define CONTEST_AI_DUMMY_15 (1 << 21) +#define CONTEST_AI_DUMMY_16 (1 << 22) +#define CONTEST_AI_DUMMY_17 (1 << 23) +#define CONTEST_AI_DUMMY_18 (1 << 24) +#define CONTEST_AI_DUMMY_19 (1 << 25) +#define CONTEST_AI_DUMMY_20 (1 << 26) +#define CONTEST_AI_DUMMY_21 (1 << 27) +#define CONTEST_AI_DUMMY_22 (1 << 28) +#define CONTEST_AI_DUMMY_23 (1 << 29) +#define CONTEST_AI_DUMMY_24 (1 << 30) +#define CONTEST_AI_DUMMY_25 (1 << 31) + +// The below scripts are used by every AI contest opponent +// It includes every non-dummy script +#define CONTEST_AI_COMMON (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | \ + CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC | \ + CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5) #define CONTEST_EFFECT_HIGHLY_APPEALING 0 #define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1 @@ -102,6 +133,16 @@ #define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46 #define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47 +// Each of the above effects is grouped into one of these effect type categories +// Only a few of these get checked by the AI, the rest go unused +#define CONTEST_EFFECT_TYPE_APPEAL 0 +#define CONTEST_EFFECT_TYPE_AVOID_STARTLE 1 +#define CONTEST_EFFECT_TYPE_STARTLE_MON 2 +#define CONTEST_EFFECT_TYPE_STARTLE_MONS 3 +#define CONTEST_EFFECT_TYPE_WORSEN 4 +#define CONTEST_EFFECT_TYPE_SPECIAL_APPEAL 5 +#define CONTEST_EFFECT_TYPE_TURN_ORDER 6 + #define COMBO_STARTER_RAIN_DANCE 1 #define COMBO_STARTER_RAGE 2 #define COMBO_STARTER_FOCUS_ENERGY 3 diff --git a/include/contest.h b/include/contest.h index d53aec2129..1dd4340bd8 100644 --- a/include/contest.h +++ b/include/contest.h @@ -90,7 +90,7 @@ struct ContestPokemon u8 nickname[POKEMON_NAME_LENGTH + 1]; u8 trainerName[PLAYER_NAME_LENGTH + 1]; u8 trainerGfxId; - u32 aiChecks; + u32 aiFlags; u8 whichRank:2; u8 aiPool_Cool:1; u8 aiPool_Beauty:1; @@ -231,8 +231,8 @@ struct ContestAIInfo /*0x05*/ u8 moveScores[MAX_MON_MOVES]; /*0x09*/ u8 aiAction; /*0x0A*/ u8 filler[6]; - /*0x10*/ u8 currentAICheck; - /*0x14*/ u32 aiChecks; + /*0x10*/ u8 currentAIFlag; + /*0x14*/ u32 aiFlags; /*0x18*/ s16 scriptResult; /*0x1A*/ s16 vars[3]; /*0x20*/ const u8 *stack[8]; diff --git a/src/contest.c b/src/contest.c index 32a8675e58..af9e734fa6 100644 --- a/src/contest.c +++ b/src/contest.c @@ -2789,7 +2789,7 @@ void CreateContestMonFromParty(u8 partyIndex) gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; else gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY; - gContestMons[gContestPlayerMonIndex].aiChecks = 0; + gContestMons[gContestPlayerMonIndex].aiFlags = 0; gContestMons[gContestPlayerMonIndex].highestRank = 0; gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); @@ -5620,7 +5620,7 @@ void ClearContestWinnerPicsInContestHall(void) s32 i; for (i = 0; i < 8; i++) - gSaveBlock1Ptr->contestWinners[i] = gUnknown_08587FA4[i]; + gSaveBlock1Ptr->contestWinners[i] = gDefaultContestWinners[i]; } static void SetContestLiveUpdateFlags(u8 contestant) diff --git a/src/contest_ai.c b/src/contest_ai.c index 4635539982..2f048718ff 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -7,7 +7,7 @@ #include "constants/moves.h" extern const u8 *gAIScriptPtr; -extern const u8 *gContestAIChecks[]; +extern const u8 *gContestAI_ScriptsTable[]; static void ContestAICmd_score(void); static void ContestAICmd_get_appeal_num(void); @@ -144,7 +144,7 @@ static void ContestAICmd_if_user_has_exciting_move(void); static void ContestAICmd_if_user_doesnt_have_exciting_move(void); static void ContestAICmd_check_user_has_move(void); static void ContestAICmd_if_user_has_move(void); -static void ContestAICmd_if_effect_in_user_moveset(void); +static void ContestAICmd_if_user_doesnt_have_move(void); typedef void (* ContestAICmdFunc)(void); @@ -285,7 +285,7 @@ static const ContestAICmdFunc sContestAICmdTable[] = ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84 ContestAICmd_check_user_has_move, // 0x85 ContestAICmd_if_user_has_move, // 0x86 - ContestAICmd_if_effect_in_user_moveset, // 0x87 + ContestAICmd_if_user_doesnt_have_move, // 0x87 }; static void ContestAI_DoAIProcessing(void); @@ -303,20 +303,20 @@ void ContestAI_ResetAI(u8 contestantAI) eContestAI.contestantId = contestantAI; eContestAI.stackSize = 0; - eContestAI.aiChecks = gContestMons[eContestAI.contestantId].aiChecks; + eContestAI.aiFlags = gContestMons[eContestAI.contestantId].aiFlags; } u8 ContestAI_GetActionToUse(void) { - while (eContestAI.aiChecks != 0) + while (eContestAI.aiFlags != 0) { - if (eContestAI.aiChecks & 1) + if (eContestAI.aiFlags & 1) { eContestAI.aiState = CONTESTAI_SETTING_UP; ContestAI_DoAIProcessing(); } - eContestAI.aiChecks >>= 1; - eContestAI.currentAICheck++; + eContestAI.aiFlags >>= 1; + eContestAI.currentAIFlag++; eContestAI.nextMoveIndex = 0; } @@ -346,7 +346,7 @@ static void ContestAI_DoAIProcessing(void) case CONTESTAI_DO_NOT_PROCESS: break; case CONTESTAI_SETTING_UP: - gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck]; + gAIScriptPtr = gContestAI_ScriptsTable[eContestAI.currentAIFlag]; if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE) eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist. @@ -1627,7 +1627,8 @@ static void ContestAICmd_if_not_eq_var(void) } // UB: Should just be comparing to gAIScriptPtr[1] in the functions below -// With the values passed to if_random_less_than this goes way OOB on vars +// The values passed via gAIScriptPtr[1] range from 0-255 +// and vars is an s16[3], so this goes way out of bounds static void ContestAICmd_if_random_less_than(void) { #ifndef UBFIX @@ -1729,6 +1730,12 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void) gAIScriptPtr += 4; } +// BUG: This is checking if the user has a specific move, but when it's used in the AI script +// they're checking for an effect. Checking for a specific effect would make more sense, +// but given that effects are normally read as a single byte and this reads 2 bytes, it +// seems reading a move was intended and the AI script is using it incorrectly. +// In any case, to fix it to correctly check for effects replace the u16 move assignment with +// u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect; static void ContestAICmd_check_user_has_move(void) { int hasMove = FALSE; @@ -1759,7 +1766,7 @@ static void ContestAICmd_if_user_has_move(void) gAIScriptPtr += 4; } -static void ContestAICmd_if_effect_in_user_moveset(void) +static void ContestAICmd_if_user_doesnt_have_move(void) { ContestAICmd_check_user_has_move(); diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 5460ac806f..658528210a 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -2838,289 +2838,289 @@ const struct ContestEffect gContestEffects[] = { [CONTEST_EFFECT_HIGHLY_APPEALING] = { - .effectType = 0, + .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 40, .jam = 0, }, [CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] = { - .effectType = 0, + .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 60, .jam = 0, }, [CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] = { - .effectType = 0, + .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 80, .jam = 0, }, [CONTEST_EFFECT_REPETITION_NOT_BORING] = { - .effectType = 0, + .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_AVOID_STARTLE_ONCE] = { - .effectType = 1, + .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 20, .jam = 0, }, [CONTEST_EFFECT_AVOID_STARTLE] = { - .effectType = 1, + .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] = { - .effectType = 1, + .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] = { - .effectType = 1, + .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_STARTLE_FRONT_MON] = { - .effectType = 2, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 30, .jam = 20, }, [CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 30, .jam = 10, }, [CONTEST_EFFECT_STARTLE_PREV_MON] = { - .effectType = 2, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 20, .jam = 30, }, [CONTEST_EFFECT_STARTLE_PREV_MONS] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 20, }, [CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] = { - .effectType = 2, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 10, .jam = 40, }, [CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 10, .jam = 30, }, [CONTEST_EFFECT_STARTLE_PREV_MON_2] = { - .effectType = 2, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 30, .jam = 20, }, [CONTEST_EFFECT_STARTLE_PREV_MONS_2] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 30, .jam = 10, }, [CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] = { - .effectType = 4, + .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 40, .jam = 40, }, [CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] = { - .effectType = 4, + .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 20, .jam = 0, }, [CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] = { - .effectType = 4, + .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 20, .jam = 0, }, [CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] = { - .effectType = 4, + .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 30, .jam = 10, }, [CONTEST_EFFECT_BETTER_IF_FIRST] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, }, [CONTEST_EFFECT_BETTER_IF_LAST] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, }, [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_BETTER_WHEN_LATER] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_BETTER_IF_SAME_TYPE] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, }, [CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, }, [CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_NEXT_APPEAL_EARLIER] = { - .effectType = 6, + .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_NEXT_APPEAL_LATER] = { - .effectType = 6, + .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] = { - .effectType = 6, + .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] = { - .effectType = 6, + .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, }, [CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] = { - .effectType = 3, + .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, }, [CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] = { - .effectType = 5, + .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, }, [CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] = { - .effectType = 4, + .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 30, .jam = 0, }, diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 53868fc84f..6de931ef20 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -100,7 +100,44 @@ #define CONTEST_OPPONENT_TREY 94 #define CONTEST_OPPONENT_LANE 95 -const struct ContestWinner gUnknown_08587FA4[] = +// All contest opponents have a common set of AI flags (which contains all of the actually +// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags. +// Seems that like the battle AI they had more plans for this than what ended up in the final game +#define CONTEST_AI_SET_1 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_2 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_3 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_4 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_5 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_6 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_7 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_8 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_9 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_24) +#define CONTEST_AI_SET_A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_11 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_22 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_24) +#define CONTEST_AI_SET_F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_10 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_11 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_12 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_13 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_14 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_15 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_16 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_17 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_23 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_18 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_19 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_1C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_1D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25) + +const struct ContestWinner gDefaultContestWinners[] = { { .personality = 0, @@ -183,7 +220,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("POOCHY"), .trainerName = _("JIMMY"), .trainerGfxId = OBJ_EVENT_GFX_BOY_1, - .aiChecks = 0xC000FFF, + .aiFlags = CONTEST_AI_SET_1, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -211,7 +248,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("MUSILLE"), .trainerName = _("EDITH"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -239,7 +276,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DUSTER"), .trainerName = _("EVAN"), .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, - .aiChecks = 0x21000FFF, + .aiFlags = CONTEST_AI_SET_3, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -267,7 +304,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DOTS"), .trainerName = _("KELSEY"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, - .aiChecks = 0x20800FFF, + .aiFlags = CONTEST_AI_SET_4, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -295,7 +332,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("TATAY"), .trainerName = _("MADISON"), .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, - .aiChecks = 0x80400FFF, + .aiFlags = CONTEST_AI_SET_5, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -323,7 +360,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("NINDA"), .trainerName = _("RAYMOND"), .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, - .aiChecks = 0x10200FFF, + .aiFlags = CONTEST_AI_SET_6, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -351,7 +388,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SMISH"), .trainerName = _("GRANT"), .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, - .aiChecks = 0x20100FFF, + .aiFlags = CONTEST_AI_SET_7, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -379,7 +416,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SLEAL"), .trainerName = _("PAIGE"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, - .aiChecks = 0x8080FFF, + .aiFlags = CONTEST_AI_SET_8, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -407,7 +444,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SLOKTH"), .trainerName = _("ALEC"), .trainerGfxId = OBJ_EVENT_GFX_CAMPER, - .aiChecks = 0x40040FFF, + .aiFlags = CONTEST_AI_SET_9, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -435,7 +472,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("WHIRIS"), .trainerName = _("SYDNEY"), .trainerGfxId = OBJ_EVENT_GFX_LASS, - .aiChecks = 0x80020FFF, + .aiFlags = CONTEST_AI_SET_A, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -463,7 +500,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("MAHITA"), .trainerName = _("MORRIS"), .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, - .aiChecks = 0x8010FFF, + .aiFlags = CONTEST_AI_SET_B, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -491,7 +528,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("RONAR"), .trainerName = _("MARIAH"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, - .aiChecks = 0x8008FFF, + .aiFlags = CONTEST_AI_SET_C, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -519,7 +556,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BATRO"), .trainerName = _("RUSSELL"), .trainerGfxId = OBJ_EVENT_GFX_MAN_3, - .aiChecks = 0x90004FFF, + .aiFlags = CONTEST_AI_SET_D, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -547,7 +584,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GULIN"), .trainerName = _("MELANIE"), .trainerGfxId = OBJ_EVENT_GFX_TWIN, - .aiChecks = 0x40002FFF, + .aiFlags = CONTEST_AI_SET_E, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -575,7 +612,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("RIKELEC"), .trainerName = _("CHANCE"), .trainerGfxId = OBJ_EVENT_GFX_RICH_BOY, - .aiChecks = 0x80001FFF, + .aiFlags = CONTEST_AI_SET_F, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -603,7 +640,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BULBY"), .trainerName = _("AGATHA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, - .aiChecks = 0xC000FFF, + .aiFlags = CONTEST_AI_SET_1, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -631,7 +668,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("FUTTERBE"), .trainerName = _("BEAU"), .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -659,7 +696,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("PIDEOT"), .trainerName = _("KAY"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, - .aiChecks = 0x21000FFF, + .aiFlags = CONTEST_AI_SET_3, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -687,7 +724,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DIGLE"), .trainerName = _("CALE"), .trainerGfxId = OBJ_EVENT_GFX_HIKER, - .aiChecks = 0x20800FFF, + .aiFlags = CONTEST_AI_SET_4, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -715,7 +752,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("WAGIL"), .trainerName = _("CAITLIN"), .trainerGfxId = OBJ_EVENT_GFX_TUBER_F, - .aiChecks = 0x80400FFF, + .aiFlags = CONTEST_AI_SET_5, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -743,7 +780,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("TOTDIL"), .trainerName = _("COLBY"), .trainerGfxId = OBJ_EVENT_GFX_NINJA_BOY, - .aiChecks = 0x10200FFF, + .aiFlags = CONTEST_AI_SET_6, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -771,7 +808,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BALEDY"), .trainerName = _("KYLIE"), .trainerGfxId = OBJ_EVENT_GFX_BEAUTY, - .aiChecks = 0x20100FFF, + .aiFlags = CONTEST_AI_SET_7, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -799,7 +836,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BIRDLY"), .trainerName = _("LIAM"), .trainerGfxId = OBJ_EVENT_GFX_MAN_5, - .aiChecks = 0x8080FFF, + .aiFlags = CONTEST_AI_SET_8, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -827,7 +864,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("TARVITAR"), .trainerName = _("MILO"), .trainerGfxId = OBJ_EVENT_GFX_MANIAC, - .aiChecks = 0x40040FFF, + .aiFlags = CONTEST_AI_SET_9, .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -855,7 +892,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("RELIA"), .trainerName = _("KARINA"), .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, - .aiChecks = 0x24000FFF, + .aiFlags = CONTEST_AI_SET_10, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -883,7 +920,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DUODO"), .trainerName = _("BOBBY"), .trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -911,7 +948,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("PINCHIN"), .trainerName = _("CLAIRE"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = 0x81000FFF, + .aiFlags = CONTEST_AI_SET_11, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -939,7 +976,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("NACAC"), .trainerName = _("WILLIE"), .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, - .aiChecks = 0x80800FFF, + .aiFlags = CONTEST_AI_SET_12, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -967,7 +1004,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SHRAND"), .trainerName = _("CASSIDY"), .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, - .aiChecks = 0x10400FFF, + .aiFlags = CONTEST_AI_SET_13, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -995,7 +1032,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("TOYBAL"), .trainerName = _("MORGAN"), .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, - .aiChecks = 0x8200FFF, + .aiFlags = CONTEST_AI_SET_14, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1023,7 +1060,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CHAMCHAM"), .trainerName = _("SUMMER"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, - .aiChecks = 0x10100FFF, + .aiFlags = CONTEST_AI_SET_15, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1051,7 +1088,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SPININ"), .trainerName = _("MILES"), .trainerGfxId = OBJ_EVENT_GFX_CAMPER, - .aiChecks = 0x80080FFF, + .aiFlags = CONTEST_AI_SET_16, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1079,7 +1116,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SWABY"), .trainerName = _("AUDREY"), .trainerGfxId = OBJ_EVENT_GFX_LASS, - .aiChecks = 0xA0040FFF, + .aiFlags = CONTEST_AI_SET_17, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1107,7 +1144,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("POINKER"), .trainerName = _("AVERY"), .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, - .aiChecks = 0x80020FFF, + .aiFlags = CONTEST_AI_SET_A, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1135,7 +1172,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("KECON"), .trainerName = _("ARIANA"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, - .aiChecks = 0x80010FFF, + .aiFlags = CONTEST_AI_SET_18, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1163,7 +1200,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GOLDEN"), .trainerName = _("ASHTON"), .trainerGfxId = OBJ_EVENT_GFX_MAN_3, - .aiChecks = 0x80008FFF, + .aiFlags = CONTEST_AI_SET_19, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1191,7 +1228,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BOBOACH"), .trainerName = _("SANDRA"), .trainerGfxId = OBJ_EVENT_GFX_TWIN, - .aiChecks = 0x80004FFF, + .aiFlags = CONTEST_AI_SET_1A, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1219,7 +1256,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CORPY"), .trainerName = _("CARSON"), .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, - .aiChecks = 0x8002FFF, + .aiFlags = CONTEST_AI_SET_1B, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1247,7 +1284,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("TADO"), .trainerName = _("KATRINA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, - .aiChecks = 0x8001FFF, + .aiFlags = CONTEST_AI_SET_1C, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1275,7 +1312,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BROWLO"), .trainerName = _("LUKE"), .trainerGfxId = OBJ_EVENT_GFX_FAT_MAN, - .aiChecks = 0xC000FFF, + .aiFlags = CONTEST_AI_SET_1, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1303,7 +1340,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("FETCHIN"), .trainerName = _("RAUL"), .trainerGfxId = OBJ_EVENT_GFX_MAN_5, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -1331,7 +1368,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SEELEY"), .trainerName = _("JADA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, - .aiChecks = 0x21000FFF, + .aiFlags = CONTEST_AI_SET_3, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1359,7 +1396,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DROWZIN"), .trainerName = _("ZEEK"), .trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M, - .aiChecks = 0x20800FFF, + .aiFlags = CONTEST_AI_SET_4, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1387,7 +1424,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("HITEMON"), .trainerName = _("DIEGO"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_M, - .aiChecks = 0x80400FFF, + .aiFlags = CONTEST_AI_SET_5, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -1415,7 +1452,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BLISS"), .trainerName = _("ALIYAH"), .trainerGfxId = OBJ_EVENT_GFX_TEALA, - .aiChecks = 0x10200FFF, + .aiFlags = CONTEST_AI_SET_6, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1443,7 +1480,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("KIDLEK"), .trainerName = _("NATALIA"), .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, - .aiChecks = 0x20100FFF, + .aiFlags = CONTEST_AI_SET_7, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -1471,7 +1508,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SNUBBINS"), .trainerName = _("DEVIN"), .trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN, - .aiChecks = 0x8080FFF, + .aiFlags = CONTEST_AI_SET_8, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1499,7 +1536,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DREAVIS"), .trainerName = _("TYLOR"), .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, - .aiChecks = 0x40040FFF, + .aiFlags = CONTEST_AI_SET_9, .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1527,7 +1564,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LAIRN"), .trainerName = _("RONNIE"), .trainerGfxId = OBJ_EVENT_GFX_HIKER, - .aiChecks = 0x84000FFF, + .aiFlags = CONTEST_AI_SET_1D, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1555,7 +1592,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SHIFTY"), .trainerName = _("CLAUDIA"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1583,7 +1620,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("NINAS"), .trainerName = _("ELIAS"), .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, - .aiChecks = 0x81000FFF, + .aiFlags = CONTEST_AI_SET_11, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1611,7 +1648,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("WELOW"), .trainerName = _("JADE"), .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, - .aiChecks = 0x80800FFF, + .aiFlags = CONTEST_AI_SET_12, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1639,7 +1676,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("YENA"), .trainerName = _("FRANCIS"), .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, - .aiChecks = 0x80400FFF, + .aiFlags = CONTEST_AI_SET_5, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1667,7 +1704,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("TIFLY"), .trainerName = _("ALISHA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, - .aiChecks = 0x80200FFF, + .aiFlags = CONTEST_AI_SET_1E, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1695,7 +1732,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("KINGSEA"), .trainerName = _("SAUL"), .trainerGfxId = OBJ_EVENT_GFX_CAMPER, - .aiChecks = 0x80100FFF, + .aiFlags = CONTEST_AI_SET_1F, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -1723,7 +1760,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CASTER"), .trainerName = _("FELICIA"), .trainerGfxId = OBJ_EVENT_GFX_LASS, - .aiChecks = 0x80080FFF, + .aiFlags = CONTEST_AI_SET_16, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1751,7 +1788,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CHOKEM"), .trainerName = _("EMILIO"), .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, - .aiChecks = 0x80040FFF, + .aiFlags = CONTEST_AI_SET_20, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -1779,7 +1816,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LOMBE"), .trainerName = _("KARLA"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, - .aiChecks = 0x80020FFF, + .aiFlags = CONTEST_AI_SET_A, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1807,7 +1844,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("VIPES"), .trainerName = _("DARRYL"), .trainerGfxId = OBJ_EVENT_GFX_MAN_3, - .aiChecks = 0x80010FFF, + .aiFlags = CONTEST_AI_SET_18, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1835,7 +1872,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("MERAIL"), .trainerName = _("SELENA"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_F, - .aiChecks = 0x80008FFF, + .aiFlags = CONTEST_AI_SET_19, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1863,7 +1900,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("KARPAG"), .trainerName = _("NOEL"), .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, - .aiChecks = 0x80004FFF, + .aiFlags = CONTEST_AI_SET_1A, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1891,7 +1928,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LUNONE"), .trainerName = _("LACEY"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, - .aiChecks = 0x80002FFF, + .aiFlags = CONTEST_AI_SET_21, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -1919,7 +1956,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("ABSO"), .trainerName = _("CORBIN"), .trainerGfxId = OBJ_EVENT_GFX_MANIAC, - .aiChecks = 0x80001FFF, + .aiFlags = CONTEST_AI_SET_F, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -1947,7 +1984,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("EGGSOR"), .trainerName = _("GRACIE"), .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, - .aiChecks = 0xC000FFF, + .aiFlags = CONTEST_AI_SET_1, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -1975,7 +2012,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CUBIN"), .trainerName = _("COLTIN"), .trainerGfxId = OBJ_EVENT_GFX_MAN_4, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2003,7 +2040,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("HITMON"), .trainerName = _("ELLIE"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_F, - .aiChecks = 0x21000FFF, + .aiFlags = CONTEST_AI_SET_3, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2031,7 +2068,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SURTLE"), .trainerName = _("MARCUS"), .trainerGfxId = OBJ_EVENT_GFX_SAILOR, - .aiChecks = 0x20800FFF, + .aiFlags = CONTEST_AI_SET_4, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2059,7 +2096,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("KHANKAN"), .trainerName = _("KIARA"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_3, - .aiChecks = 0x80400FFF, + .aiFlags = CONTEST_AI_SET_5, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2087,7 +2124,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("PINOC"), .trainerName = _("BRYCE"), .trainerGfxId = OBJ_EVENT_GFX_BUG_CATCHER, - .aiChecks = 0x10200FFF, + .aiFlags = CONTEST_AI_SET_6, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -2115,7 +2152,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DILTOT"), .trainerName = _("JAMIE"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, - .aiChecks = 0x20100FFF, + .aiFlags = CONTEST_AI_SET_7, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2143,7 +2180,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DOOMOND"), .trainerName = _("JORGE"), .trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN, - .aiChecks = 0x8080FFF, + .aiFlags = CONTEST_AI_SET_8, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2171,7 +2208,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("MILKAN"), .trainerName = _("DEVON"), .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_M, - .aiChecks = 0x40040FFF, + .aiFlags = CONTEST_AI_SET_9, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -2199,7 +2236,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("RADOS"), .trainerName = _("JUSTINA"), .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, - .aiChecks = 0x84000FFF, + .aiFlags = CONTEST_AI_SET_1D, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2227,7 +2264,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LOUDERD"), .trainerName = _("RALPH"), .trainerGfxId = OBJ_EVENT_GFX_EXPERT_M, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2255,7 +2292,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SITTY"), .trainerName = _("ROSA"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, - .aiChecks = 0x81000FFF, + .aiFlags = CONTEST_AI_SET_11, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -2283,7 +2320,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SLING"), .trainerName = _("KEATON"), .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, - .aiChecks = 0x80800FFF, + .aiFlags = CONTEST_AI_SET_12, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2311,7 +2348,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("TARIA"), .trainerName = _("MAYRA"), .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, - .aiChecks = 0x80400FFF, + .aiFlags = CONTEST_AI_SET_5, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2339,7 +2376,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LIRKI"), .trainerName = _("LAMAR"), .trainerGfxId = OBJ_EVENT_GFX_RICH_BOY, - .aiChecks = 0x80200FFF, + .aiFlags = CONTEST_AI_SET_1E, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2367,7 +2404,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("BLOSSOM"), .trainerName = _("AUBREY"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, - .aiChecks = 0x80100FFF, + .aiFlags = CONTEST_AI_SET_1F, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -2395,7 +2432,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("EYESAB"), .trainerName = _("NIGEL"), .trainerGfxId = OBJ_EVENT_GFX_CAMPER, - .aiChecks = 0x80080FFF, + .aiFlags = CONTEST_AI_SET_16, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2423,7 +2460,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("UTAN"), .trainerName = _("CAMILLE"), .trainerGfxId = OBJ_EVENT_GFX_LASS, - .aiChecks = 0x80040FFF, + .aiFlags = CONTEST_AI_SET_20, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2451,7 +2488,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("PEDOS"), .trainerName = _("DEON"), .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, - .aiChecks = 0x80020FFF, + .aiFlags = CONTEST_AI_SET_A, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2479,7 +2516,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("LUVIS"), .trainerName = _("JANELLE"), .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, - .aiChecks = 0x80010FFF, + .aiFlags = CONTEST_AI_SET_18, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2507,7 +2544,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("HEROSS"), .trainerName = _("HEATH"), .trainerGfxId = OBJ_EVENT_GFX_MAN_3, - .aiChecks = 0x80008FFF, + .aiFlags = CONTEST_AI_SET_19, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2535,7 +2572,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("RODLECT"), .trainerName = _("SASHA"), .trainerGfxId = OBJ_EVENT_GFX_TWIN, - .aiChecks = 0x80004FFF, + .aiFlags = CONTEST_AI_SET_1A, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2563,7 +2600,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("CHUPY"), .trainerName = _("FRANKIE"), .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, - .aiChecks = 0x80002FFF, + .aiFlags = CONTEST_AI_SET_21, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -2591,7 +2628,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("WOBET"), .trainerName = _("HELEN"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, - .aiChecks = 0x80001FFF, + .aiFlags = CONTEST_AI_SET_F, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2619,7 +2656,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GAREN"), .trainerName = _("CAMILE"), .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, - .aiChecks = 0xC000FFF, + .aiFlags = CONTEST_AI_SET_1, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2647,7 +2684,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GONPOR"), .trainerName = _("MARTIN"), .trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1, - .aiChecks = 0x82000FFF, + .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2675,7 +2712,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("DRITE"), .trainerName = _("SERGIO"), .trainerGfxId = OBJ_EVENT_GFX_BOY_1, - .aiChecks = 0x21000FFF, + .aiFlags = CONTEST_AI_SET_3, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, @@ -2703,7 +2740,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("MEOWY"), .trainerName = _("KAILEY"), .trainerGfxId = OBJ_EVENT_GFX_TWIN, - .aiChecks = 0x20800FFF, + .aiFlags = CONTEST_AI_SET_4, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2731,7 +2768,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("NYX"), .trainerName = _("PERLA"), .trainerGfxId = OBJ_EVENT_GFX_BEAUTY, - .aiChecks = 0x80400FFF, + .aiFlags = CONTEST_AI_SET_5, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, @@ -2759,7 +2796,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("GEPITO"), .trainerName = _("CLARA"), .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, - .aiChecks = 0x10200FFF, + .aiFlags = CONTEST_AI_SET_6, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2787,7 +2824,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SPEON"), .trainerName = _("JAKOB"), .trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M, - .aiChecks = 0x20100FFF, + .aiFlags = CONTEST_AI_SET_7, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, @@ -2815,7 +2852,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("SLOWGO"), .trainerName = _("TREY"), .trainerGfxId = OBJ_EVENT_GFX_SAILOR, - .aiChecks = 0x8080FFF, + .aiFlags = CONTEST_AI_SET_8, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, @@ -2843,7 +2880,7 @@ const struct ContestPokemon gContestOpponents[] = .nickname = _("URSING"), .trainerName = _("LANE"), .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, - .aiChecks = 0x40040FFF, + .aiFlags = CONTEST_AI_SET_9, .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, From a20745422bc9db472142f9825f4a0becfdcb38b5 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Tue, 28 Jul 2020 11:24:45 -0400 Subject: [PATCH 78/85] Remove unused variable remaining from ruby --- src/contest.c | 26 +++++++++----------------- src/fldeff_cut.c | 15 +++++---------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/contest.c b/src/contest.c index af9e734fa6..4470ec2a2c 100644 --- a/src/contest.c +++ b/src/contest.c @@ -999,8 +999,6 @@ void ResetLinkContestBoolean(void) static void SetupContestGpuRegs(void) { - u16 savedIme; - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -3410,8 +3408,7 @@ static void GetAllChosenMoves(void) static void RankContestants(void) { - s32 i; - s32 j; + s32 i, j; s16 arr[CONTESTANT_COUNT]; for (i = 0; i < CONTESTANT_COUNT; i++) @@ -3486,8 +3483,7 @@ static bool8 ContestantCanUseTurn(u8 contestant) { if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) return FALSE; - else - return TRUE; + return TRUE; } static void SetContestantStatusesForNextRound(void) @@ -3541,8 +3537,7 @@ bool8 Contest_IsMonsTurnDisabled(u8 contestant) { if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) return TRUE; - else - return FALSE; + return FALSE; } static void CalculateTotalPointsForContestant(u8 contestant) @@ -4485,17 +4480,14 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI } + else if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) + { + eContestantStatus[contestant].hasJudgesAttention = TRUE; + eContestantStatus[contestant].usedComboMove = TRUE; + } else { - if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) - { - eContestantStatus[contestant].hasJudgesAttention = TRUE; - eContestantStatus[contestant].usedComboMove = TRUE; - } - else - { - eContestantStatus[contestant].hasJudgesAttention = FALSE; - } + eContestantStatus[contestant].hasJudgesAttention = FALSE; } } if (eContestantStatus[contestant].repeatedMove) diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 34868342fb..1a4260900e 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -227,9 +227,7 @@ bool8 SetUpFieldMove_Cut(void) y = gPlayerFacingPosition.y + sHyperCutStruct[i].y; tileCuttable = TRUE; - j = 0; - do - { + for (j = 0; j < 2; ++j) { if (sHyperCutStruct[i].unk2[j] == 0) break; if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE) @@ -237,13 +235,13 @@ bool8 SetUpFieldMove_Cut(void) tileCuttable = FALSE; break; } - } while (++j <= 1); + } if (tileCuttable == TRUE) { if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height) { - u8 tileArrayId = ((sHyperCutStruct[i].y * 5) + 12) + (sHyperCutStruct[i].x); + const u8 tileArrayId = ((sHyperCutStruct[i].y * 5) + 12) + (sHyperCutStruct[i].x); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE) @@ -253,11 +251,8 @@ bool8 SetUpFieldMove_Cut(void) sHyperCutTiles[tileArrayId] = TRUE; ret = TRUE; } - else - { - if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) - sHyperCutTiles[tileArrayId] = TRUE; - } + else if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) + sHyperCutTiles[tileArrayId] = TRUE; } } } From cc018fe6c90ea84422af94cd5e613d0d9e52da95 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Sun, 23 Aug 2020 17:22:15 -0400 Subject: [PATCH 79/85] Remove const --- src/fldeff_cut.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 1a4260900e..939c15dbf0 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -241,7 +241,7 @@ bool8 SetUpFieldMove_Cut(void) { if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height) { - const u8 tileArrayId = ((sHyperCutStruct[i].y * 5) + 12) + (sHyperCutStruct[i].x); + u8 tileArrayId = ((sHyperCutStruct[i].y * 5) + 12) + (sHyperCutStruct[i].x); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE) From 3ddf7175bf5164e252139dd0864a59a1109e5f14 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Mon, 24 Aug 2020 16:32:21 -0400 Subject: [PATCH 80/85] Match sub_81D5F58 --- src/trainer_hill.c | 73 +++++++++------------------------------------- 1 file changed, 13 insertions(+), 60 deletions(-) diff --git a/src/trainer_hill.c b/src/trainer_hill.c index c5aea14d94..bed8df2e06 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -356,7 +356,7 @@ static void SetUpDataStruct(void) { if (sHillData == NULL) { - sHillData = AllocZeroed(sizeof(*sHillData)); + sHillData = AllocZeroed(sizeof(struct TrHillStruct2)); sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); nullsub_2(); @@ -672,70 +672,23 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void) return TRUE; } -// Functionally equivalent. -#ifdef NONMATCHING static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) { - u32 var0, var1, var2, var3; + u16 var0, var1; + #ifndef NONMATCHING + register u16 var2 asm("r3"); //compiler keeps wanting to "mov r3, 0x80" instead of "mov r2 0x80" and then later "add r3, r2, 0" + #else + u16 var2; + #endif + u16 var3; - var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1; - var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit]; - var3 = 0x200; - var2 = 0x3000; + var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit) & 1); + var1 = sHillData->floors[floorId].display.data[arg3 * arg2 + bit]; + var2 = 0x200; + var3 = 0x3000; - return ((var0 << 10) | var2) | (var1 | var3); + return ((var0 << 10) | var3) | (var1 | var2); } -#else -NAKED -static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) -{ - asm_unified("\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r4, =sHillData\n\ - ldr r4, [r4]\n\ - mov r12, r4\n\ - lsls r4, r2, 1\n\ - lsls r5, r0, 4\n\ - subs r5, r0\n\ - lsls r5, 3\n\ - subs r5, r0\n\ - lsls r5, 3\n\ - adds r4, r5\n\ - movs r0, 0xE8\n\ - lsls r0, 2\n\ - add r0, r12\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - movs r4, 0xF\n\ - subs r4, r1\n\ - asrs r0, r4\n\ - movs r4, 0x1\n\ - ands r0, r4\n\ - muls r2, r3\n\ - adds r2, r1\n\ - adds r2, r5\n\ - movs r1, 0xA8\n\ - lsls r1, 2\n\ - add r1, r12\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - movs r2, 0x80\n\ - lsls r2, 2\n\ - adds r3, r2, 0\n\ - movs r2, 0xC0\n\ - lsls r2, 6\n\ - lsls r0, 10\n\ - orrs r0, r2\n\ - orrs r1, r3\n\ - orrs r0, r1\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .pool"); -} -#endif // NONMATCHING void GenerateTrainerHillFloorLayout(u16 *mapArg) { From 96d2066abe917d81c3778b37cde604644bc46297 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Mon, 24 Aug 2020 17:28:55 -0400 Subject: [PATCH 81/85] Changed assignment from 136 to -120 --- src/list_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/list_menu.c b/src/list_menu.c index ebf02bab65..ef55f58723 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -1282,7 +1282,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st { subsprites[id] = sSubsprite_RedOutline3; subsprites[id].x = i - 120; - subsprites[id].y = 136; + subsprites[id].y = -120; id++; subsprites[id] = sSubsprite_RedOutline6; From d40870e5f899f0dfc3b706f64aeceb3ea159b5f7 Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Tue, 25 Aug 2020 14:23:12 -0400 Subject: [PATCH 82/85] Match InitContestMonPixels --- src/contest_painting.c | 119 +++-------------------------------------- 1 file changed, 6 insertions(+), 113 deletions(-) diff --git a/src/contest_painting.c b/src/contest_painting.c index 5dd4a70a53..0ea5e8000a 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -384,11 +384,9 @@ static void InitContestMonPixels(u16 species, u8 whichSprite) } } -#ifdef NONMATCHING -// functionally equivalent. static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) { - u16 tileY, tileX, pixelY, pixelX; + u16 tileY, tileX, pixelY, pixelX, temp; u8 colorIndex; for (tileY = 0; tileY < 8; tileY++) @@ -399,125 +397,20 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) { for (pixelX = 0; pixelX < 8; pixelX++) { - int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2); - colorIndex = spriteGfx[offset]; + colorIndex = spriteGfx[(((tileY * 8) + tileX) * 32) + (pixelY << 2) + (pixelX >> 1)]; if (pixelX & 1) colorIndex >>= 4; else - colorIndex &= 0xF; - - if (colorIndex == 0) // transparent pixel - (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000; + colorIndex &= 0xF; // %=16 works here too. Both match + if (colorIndex == 0) // transparent pixel + (*destPixels)[((tileY * 8) + pixelY)][((tileX * 8) + pixelX)] = 0x8000; else - (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; + (*destPixels)[((tileY * 8) + pixelY)][((tileX * 8) + pixelX)] = palette[colorIndex]; } } } } } -#else -NAKED -static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - mov r10, r0\n\ - mov r9, r1\n\ - str r2, [sp]\n\ - movs r0, 0\n\ -_08130394:\n\ - movs r3, 0\n\ - adds r1, r0, 0x1\n\ - str r1, [sp, 0x4]\n\ - lsls r0, 3\n\ - str r0, [sp, 0x8]\n\ -_0813039E:\n\ - movs r1, 0\n\ - adds r2, r3, 0x1\n\ - mov r8, r2\n\ - ldr r7, [sp, 0x8]\n\ - adds r0, r7, r3\n\ - lsls r0, 5\n\ - mov r12, r0\n\ - lsls r4, r3, 3\n\ -_081303AE:\n\ - movs r3, 0\n\ - lsls r0, r1, 2\n\ - adds r6, r1, 0x1\n\ - mov r2, r12\n\ - adds r5, r2, r0\n\ - ldr r7, [sp, 0x8]\n\ - adds r0, r7, r1\n\ - lsls r0, 7\n\ - ldr r1, [sp]\n\ - adds r2, r0, r1\n\ -_081303C2:\n\ - lsrs r0, r3, 1\n\ - adds r0, r5, r0\n\ - add r0, r10\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _081303D6\n\ - lsrs r1, 4\n\ - b _081303DA\n\ -_081303D6:\n\ - movs r0, 0xF\n\ - ands r1, r0\n\ -_081303DA:\n\ - cmp r1, 0\n\ - bne _081303EC\n\ - adds r0, r4, r3\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - movs r7, 0x80\n\ - lsls r7, 8\n\ - adds r1, r7, 0\n\ - b _081303F8\n\ -_081303EC:\n\ - adds r0, r4, r3\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - lsls r1, 1\n\ - add r1, r9\n\ - ldrh r1, [r1]\n\ -_081303F8:\n\ - strh r1, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x7\n\ - bls _081303C2\n\ - lsls r0, r6, 16\n\ - lsrs r1, r0, 16\n\ - cmp r1, 0x7\n\ - bls _081303AE\n\ - mov r1, r8\n\ - lsls r0, r1, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x7\n\ - bls _0813039E\n\ - ldr r2, [sp, 0x4]\n\ - lsls r0, r2, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x7\n\ - bls _08130394\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0"); -} -#endif #define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)]) From bf1e261177a4a7177173c631c2da68d3d218f7cd Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Tue, 25 Aug 2020 16:03:04 -0400 Subject: [PATCH 83/85] Fix mistakes --- src/contest_painting.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/contest_painting.c b/src/contest_painting.c index 0ea5e8000a..789d300067 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -386,7 +386,7 @@ static void InitContestMonPixels(u16 species, u8 whichSprite) static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) { - u16 tileY, tileX, pixelY, pixelX, temp; + u16 tileY, tileX, pixelY, pixelX; u8 colorIndex; for (tileY = 0; tileY < 8; tileY++) @@ -402,6 +402,7 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) colorIndex >>= 4; else colorIndex &= 0xF; // %=16 works here too. Both match + if (colorIndex == 0) // transparent pixel (*destPixels)[((tileY * 8) + pixelY)][((tileX * 8) + pixelX)] = 0x8000; else From ba853d6b39be12b8ce6954401d124c6f580a984d Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Tue, 25 Aug 2020 16:08:37 -0400 Subject: [PATCH 84/85] Removed unneeded parenthesis --- src/contest_painting.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/contest_painting.c b/src/contest_painting.c index 789d300067..5ec774d829 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -397,16 +397,16 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) { for (pixelX = 0; pixelX < 8; pixelX++) { - colorIndex = spriteGfx[(((tileY * 8) + tileX) * 32) + (pixelY << 2) + (pixelX >> 1)]; + colorIndex = spriteGfx[((tileY * 8) + tileX) * 32 + (pixelY << 2) + (pixelX >> 1)]; if (pixelX & 1) colorIndex >>= 4; else colorIndex &= 0xF; // %=16 works here too. Both match if (colorIndex == 0) // transparent pixel - (*destPixels)[((tileY * 8) + pixelY)][((tileX * 8) + pixelX)] = 0x8000; + (*destPixels)[(tileY * 8 + pixelY)][(tileX * 8 + pixelX)] = 0x8000; else - (*destPixels)[((tileY * 8) + pixelY)][((tileX * 8) + pixelX)] = palette[colorIndex]; + (*destPixels)[(tileY * 8 + pixelY)][(tileX * 8 + pixelX)] = palette[colorIndex]; } } } From a2efccd6d59050b46ab52e323a51e2327f52500f Mon Sep 17 00:00:00 2001 From: PokeCodec Date: Tue, 25 Aug 2020 16:11:23 -0400 Subject: [PATCH 85/85] remove outside parenthesis --- src/contest_painting.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contest_painting.c b/src/contest_painting.c index 5ec774d829..a0c39dfc7e 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -404,9 +404,9 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) colorIndex &= 0xF; // %=16 works here too. Both match if (colorIndex == 0) // transparent pixel - (*destPixels)[(tileY * 8 + pixelY)][(tileX * 8 + pixelX)] = 0x8000; + (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = 0x8000; else - (*destPixels)[(tileY * 8 + pixelY)][(tileX * 8 + pixelX)] = palette[colorIndex]; + (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; } } }