diff options
198 files changed, 7771 insertions, 7099 deletions
diff --git a/asm/macros/trainer_hill.inc b/asm/macros/trainer_hill.inc index d5c84fd02..65c8c6bef 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 4aef859d8..c57f19a04 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -5,73 +5,73 @@ .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_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 @@ -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,55 +114,55 @@ 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 field_eff_callnative FldEff_UseSecretPowerCave field_eff_end -gFieldEffectScript_BikeHopTallGrass:: @ 82DBB38 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_JumpTallGrass +gFieldEffectScript_JumpTallGrass:: @ 82DBB38 + 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_BikeHopBigSplash:: @ 82DBB4C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpBigSplash +gFieldEffectScript_JumpBigSplash:: @ 82DBB4C + 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_BikeHopSmallSplash:: @ 82DBB60 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_JumpSmallSplash +gFieldEffectScript_JumpSmallSplash:: @ 82DBB60 + 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_Unknown20:: @ 82DBB88 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo1, FldEff_Unknown20 +gFieldEffectScript_UnusedGrass2:: @ 82DBB88 + 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_Unknown22:: @ 82DBB9C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_Unknown22 +gFieldEffectScript_WaterSurfacing:: @ 82DBB9C + 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,28 +255,28 @@ 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_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_JumpOutOfAsh:: @ 82DBC6C - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_PopOutOfAsh +gFieldEffectScript_AshPuff:: @ 82DBC6C + field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshPuff field_eff_end -gFieldEffectScript_LavaridgeGymWarp:: @ 82DBC76 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_LavaridgeGymWarp +gFieldEffectScript_AshLaunch:: @ 82DBC76 + field_eff_loadfadedpal_callnative gSpritePalette_Ash, FldEff_AshLaunch field_eff_end gFieldEffectScript_SweetScent:: @ 82DBC80 @@ -284,31 +284,31 @@ 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 - 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 - 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 - field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo6, FldEff_CutGrass + field_eff_loadfadedpal_callnative gSpritePalette_CutGrass, FldEff_CutGrass field_eff_end gFieldEffectScript_FieldMoveShowMonInit:: @ 82DBCCC @@ -324,22 +324,22 @@ 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 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_Unknown65:: @ 82DBCF9 - field_eff_callnative sub_80B9ADC +gFieldEffectScript_DestroyDeoxysRock:: @ 82DBCF9 + field_eff_callnative FldEff_DestroyDeoxysRock field_eff_end gFieldEffectScript_MoveDeoxysRock:: @ 82DBCFF - field_eff_callnative Fldeff_MoveDeoxysRock + 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 0941b4345..000000000 --- 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 6bc902426..5c06e6f3a 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -71,9 +71,9 @@ BirthIsland_Exterior_EventScript_Deoxys:: @ 8267FC1 setfieldeffectargument 0, LOCALID_DEOXYS_ROCK 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 LOCALID_DEOXYS applymovement LOCALID_DEOXYS, BirthIsland_Exterior_Movement_DeoxysApproach waitmovement 0 diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index cad875b65..2a06ffdfa 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/maps/LavaridgeTown_HerbShop/scripts.inc b/data/maps/LavaridgeTown_HerbShop/scripts.inc index c08d37609..d98d6ef49 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/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index 9cf3be806..077709053 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -23,8 +23,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/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 56e3297b6..2d689348b 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_FldEffRockSmash:: @ 82907F0 +@ Use rock smash from party menu +EventScript_UseRockSmash:: @ 82907F0 lockall dofieldeffect FLDEFF_USE_ROCK_SMASH waitstate @@ -89,10 +92,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 @@ -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 916b50719..bb4ae84eb 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/data/scripts/trainer_hill.inc b/data/scripts/trainer_hill.inc index ca692e1ef..34d0462bb 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/data/specials.inc b/data/specials.inc index 0f78f981f..d7d1897d8 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/gflib/io_reg.c b/gflib/io_reg.c new file mode 100644 index 000000000..44364349d --- /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 000000000..82d2fc5ed --- /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/palettes/02.pal b/graphics/field_effects/palettes/ash.pal index e3a76c035..e3a76c035 100644 --- a/graphics/field_effects/palettes/02.pal +++ b/graphics/field_effects/palettes/ash.pal diff --git a/graphics/field_effects/palettes/06.pal b/graphics/field_effects/palettes/cut_grass.pal index e4a49a4b9..e4a49a4b9 100644 --- a/graphics/field_effects/palettes/06.pal +++ b/graphics/field_effects/palettes/cut_grass.pal diff --git a/graphics/field_effects/palettes/00.pal b/graphics/field_effects/palettes/general_0.pal index bbc9c778b..bbc9c778b 100644 --- a/graphics/field_effects/palettes/00.pal +++ b/graphics/field_effects/palettes/general_0.pal diff --git a/graphics/field_effects/palettes/01.pal b/graphics/field_effects/palettes/general_1.pal index 044e1c987..044e1c987 100644 --- a/graphics/field_effects/palettes/01.pal +++ b/graphics/field_effects/palettes/general_1.pal diff --git a/graphics/field_effects/palettes/05.pal b/graphics/field_effects/palettes/hof_monitor.pal index 468d7212c..468d7212c 100644 --- a/graphics/field_effects/palettes/05.pal +++ b/graphics/field_effects/palettes/hof_monitor.pal diff --git a/graphics/field_effects/palettes/10.pal b/graphics/field_effects/palettes/pokeball.pal index 6190709ed..6190709ed 100644 --- a/graphics/field_effects/palettes/10.pal +++ b/graphics/field_effects/palettes/pokeball.pal diff --git a/graphics/field_effects/palettes/04.pal b/graphics/field_effects/palettes/pokeball_glow.pal index 2dddefa5f..2dddefa5f 100644 --- a/graphics/field_effects/palettes/04.pal +++ b/graphics/field_effects/palettes/pokeball_glow.pal diff --git a/graphics/unknown/unknown_58E82C.pal b/graphics/field_effects/palettes/record_mix_lights.pal index 292acfd35..292acfd35 100644 --- a/graphics/unknown/unknown_58E82C.pal +++ b/graphics/field_effects/palettes/record_mix_lights.pal diff --git a/graphics/field_effects/palettes/07.pal b/graphics/field_effects/palettes/secret_power_cave.pal index 6d9e03c67..6d9e03c67 100644 --- a/graphics/field_effects/palettes/07.pal +++ b/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 index 4c41030f6..4c41030f6 100644 --- a/graphics/field_effects/palettes/08.pal +++ b/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 index b170eb1f5..b170eb1f5 100644 --- a/graphics/field_effects/palettes/03.pal +++ b/graphics/field_effects/palettes/small_sparkle.pal diff --git a/graphics/field_effects/pics/lavaridge_gym_warp.png b/graphics/field_effects/pics/ash_launch.png Binary files differindex 26b852200..26b852200 100644 --- a/graphics/field_effects/pics/lavaridge_gym_warp.png +++ b/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 Binary files differindex 3247b8169..3247b8169 100644 --- a/graphics/field_effects/pics/jump_out_of_ash.png +++ b/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 Binary files differindex 171d23457..171d23457 100644 --- a/graphics/field_effects/pics/bike_hop_big_splash.png +++ b/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 Binary files differindex e98ded025..e98ded025 100644 --- a/graphics/field_effects/pics/bike_hop_small_splash.png +++ b/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 Binary files differindex c43da9f28..c43da9f28 100755 --- a/graphics/field_effects/pics/bike_hop_tall_grass.png +++ b/graphics/field_effects/pics/jump_tall_grass.png diff --git a/graphics/field_effects/pics/record_mix_lights.png b/graphics/field_effects/pics/record_mix_lights.png Binary files differnew file mode 100644 index 000000000..b6d3d6537 --- /dev/null +++ b/graphics/field_effects/pics/record_mix_lights.png diff --git a/graphics/field_effects/pics/unknown_29.png b/graphics/field_effects/pics/sand_pile.png Binary files differindex 03f89a5f5..03f89a5f5 100644 --- a/graphics/field_effects/pics/unknown_29.png +++ b/graphics/field_effects/pics/sand_pile.png diff --git a/graphics/unknown/858E674/0.png b/graphics/field_effects/pics/sand_pillar/0.png Binary files differindex 64b61050f..64b61050f 100644 --- a/graphics/unknown/858E674/0.png +++ b/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 Binary files differindex 05cd8f396..05cd8f396 100644 --- a/graphics/unknown/858E674/1.png +++ b/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 Binary files differindex d5dd69078..d5dd69078 100644 --- a/graphics/unknown/858E674/2.png +++ b/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 Binary files differnew file mode 100644 index 000000000..445b275f3 --- /dev/null +++ b/graphics/field_effects/pics/secret_power_cave.png diff --git a/graphics/field_effects/pics/secret_power_shrub.png b/graphics/field_effects/pics/secret_power_shrub.png Binary files differnew file mode 100644 index 000000000..322643372 --- /dev/null +++ b/graphics/field_effects/pics/secret_power_shrub.png diff --git a/graphics/field_effects/pics/secret_power_tree.png b/graphics/field_effects/pics/secret_power_tree.png Binary files differnew file mode 100644 index 000000000..879741784 --- /dev/null +++ b/graphics/field_effects/pics/secret_power_tree.png diff --git a/graphics/field_effects/pics/unknown_35.png b/graphics/field_effects/pics/small_sparkle.png Binary files differindex b2072bd26..b2072bd26 100644 --- a/graphics/field_effects/pics/unknown_35.png +++ b/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 Binary files differindex 2910c2a49..2910c2a49 100644 --- a/graphics/field_effects/pics/berry_tree_growth_sparkle.png +++ b/graphics/field_effects/pics/sparkle.png diff --git a/graphics/field_effects/pics/unknown_18.png b/graphics/field_effects/pics/unused_grass_2.png Binary files differindex 65f4d97e2..65f4d97e2 100644 --- a/graphics/field_effects/pics/unknown_18.png +++ b/graphics/field_effects/pics/unused_grass_2.png diff --git a/graphics/field_effects/pics/unused_grass.png b/graphics/field_effects/pics/unused_grass_3.png Binary files differindex ffd68ec1d..ffd68ec1d 100644 --- a/graphics/field_effects/pics/unused_grass.png +++ b/graphics/field_effects/pics/unused_grass_3.png diff --git a/graphics/field_effects/pics/unknown_19.png b/graphics/field_effects/pics/unused_sand.png Binary files differindex 4ae851e58..4ae851e58 100644 --- a/graphics/field_effects/pics/unknown_19.png +++ b/graphics/field_effects/pics/unused_sand.png diff --git a/graphics/field_effects/pics/unknown_20.png b/graphics/field_effects/pics/water_surfacing.png Binary files differindex 7d6af5e0c..7d6af5e0c 100644 --- a/graphics/field_effects/pics/unknown_20.png +++ b/graphics/field_effects/pics/water_surfacing.png diff --git a/graphics/unknown/unknown_55C1B0.png b/graphics/misc/deoxys_rock_fragment_bottom_left.png Binary files differindex 3f5b8d5c3..3f5b8d5c3 100644 --- a/graphics/unknown/unknown_55C1B0.png +++ b/graphics/misc/deoxys_rock_fragment_bottom_left.png diff --git a/graphics/unknown/unknown_55C1D0.png b/graphics/misc/deoxys_rock_fragment_bottom_right.png Binary files differindex 7684451e4..7684451e4 100644 --- a/graphics/unknown/unknown_55C1D0.png +++ b/graphics/misc/deoxys_rock_fragment_bottom_right.png diff --git a/graphics/unknown/unknown_55C170.png b/graphics/misc/deoxys_rock_fragment_top_left.png Binary files differindex d601cb6e5..d601cb6e5 100644 --- a/graphics/unknown/unknown_55C170.png +++ b/graphics/misc/deoxys_rock_fragment_top_left.png diff --git a/graphics/unknown/unknown_55C190.png b/graphics/misc/deoxys_rock_fragment_top_right.png Binary files differindex 01f10cd07..01f10cd07 100644 --- a/graphics/unknown/unknown_55C190.png +++ b/graphics/misc/deoxys_rock_fragment_top_right.png diff --git a/graphics/misc/big_hof_monitor.png b/graphics/misc/hof_monitor_big.png Binary files differindex 510e6a232..510e6a232 100644 --- a/graphics/misc/big_hof_monitor.png +++ b/graphics/misc/hof_monitor_big.png diff --git a/graphics/misc/small_hof_monitor.png b/graphics/misc/hof_monitor_small.png Binary files differindex dcff33095..dcff33095 100644 --- a/graphics/misc/small_hof_monitor.png +++ b/graphics/misc/hof_monitor_small.png diff --git a/graphics/pokenav/862A5D4.pal b/graphics/misc/trainer_hill_ereader.pal index 4b0812f09..4b0812f09 100644 --- a/graphics/pokenav/862A5D4.pal +++ b/graphics/misc/trainer_hill_ereader.pal diff --git a/graphics/slot_machine/reel_time.png b/graphics/slot_machine/digital_display.png Binary files differindex 4ba92175f..8295aeca2 100644 --- a/graphics/slot_machine/reel_time.png +++ b/graphics/slot_machine/digital_display.png diff --git a/graphics/slot_machine/85A843E.pal b/graphics/slot_machine/flashing_lights_inside.pal index e4d2436c7..e4d2436c7 100644 --- a/graphics/slot_machine/85A843E.pal +++ b/graphics/slot_machine/flashing_lights_inside.pal diff --git a/graphics/slot_machine/85A845E.pal b/graphics/slot_machine/flashing_lights_middle.pal index db8703d47..db8703d47 100644 --- a/graphics/slot_machine/85A845E.pal +++ b/graphics/slot_machine/flashing_lights_middle.pal diff --git a/graphics/slot_machine/85A847E.pal b/graphics/slot_machine/flashing_lights_outside.pal index 4bb9a0b4d..4bb9a0b4d 100644 --- a/graphics/slot_machine/85A847E.pal +++ b/graphics/slot_machine/flashing_lights_outside.pal diff --git a/graphics/slot_machine/slots_layout.bin b/graphics/slot_machine/info_box.bin Binary files differindex 4009d8177..4009d8177 100644 --- a/graphics/slot_machine/slots_layout.bin +++ b/graphics/slot_machine/info_box.bin diff --git a/graphics/slot_machine/85A84B0.pal b/graphics/slot_machine/pokeball_shining_0.pal index 3e1dbc024..3e1dbc024 100644 --- a/graphics/slot_machine/85A84B0.pal +++ b/graphics/slot_machine/pokeball_shining_0.pal diff --git a/graphics/slot_machine/85A84D0.pal b/graphics/slot_machine/pokeball_shining_1.pal index 38b1c125d..38b1c125d 100644 --- a/graphics/slot_machine/85A84D0.pal +++ b/graphics/slot_machine/pokeball_shining_1.pal diff --git a/graphics/slot_machine/85A84F0.pal b/graphics/slot_machine/pokeball_shining_2.pal index f4abe23f1..f4abe23f1 100644 --- a/graphics/slot_machine/85A84F0.pal +++ b/graphics/slot_machine/pokeball_shining_2.pal diff --git a/graphics/unknown/unknown_DD19F8.bin b/graphics/slot_machine/reel_background.bin index 6338ade28..6338ade28 100644 --- a/graphics/unknown/unknown_DD19F8.bin +++ b/graphics/slot_machine/reel_background.bin diff --git a/graphics/slot_machine/reel_pikachu.png b/graphics/slot_machine/reel_pikachu.png Binary files differdeleted file mode 100644 index 29b004c84..000000000 --- a/graphics/slot_machine/reel_pikachu.png +++ /dev/null diff --git a/graphics/unknown/unknown_DD1A18.png b/graphics/slot_machine/reel_time_number_gap.png Binary files differindex 8b4a564bf..8b4a564bf 100644 --- a/graphics/unknown/unknown_DD1A18.png +++ b/graphics/slot_machine/reel_time_number_gap.png diff --git a/graphics/slot_machine/85A96E0.bin b/graphics/slot_machine/reel_time_window.bin index 3aa89e7b4..3aa89e7b4 100644 --- a/graphics/slot_machine/85A96E0.bin +++ b/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 4f74a3079..000000000 --- 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/graphics/unknown/858E588/0.png b/graphics/unknown/858E588/0.png Binary files differdeleted file mode 100644 index 70b0774b0..000000000 --- a/graphics/unknown/858E588/0.png +++ /dev/null diff --git a/graphics/unknown/858E588/1.png b/graphics/unknown/858E588/1.png Binary files differdeleted file mode 100644 index e176b5f73..000000000 --- a/graphics/unknown/858E588/1.png +++ /dev/null diff --git a/graphics/unknown/858E588/2.png b/graphics/unknown/858E588/2.png Binary files differdeleted file mode 100644 index c006bb660..000000000 --- a/graphics/unknown/858E588/2.png +++ /dev/null diff --git a/graphics/unknown/858E588/3.png b/graphics/unknown/858E588/3.png Binary files differdeleted file mode 100644 index 67a3cf769..000000000 --- a/graphics/unknown/858E588/3.png +++ /dev/null diff --git a/graphics/unknown/858E588/4.png b/graphics/unknown/858E588/4.png Binary files differdeleted file mode 100644 index e2a5aec4f..000000000 --- a/graphics/unknown/858E588/4.png +++ /dev/null diff --git a/graphics/unknown/858E5B0/0.png b/graphics/unknown/858E5B0/0.png Binary files differdeleted file mode 100644 index afd104d7c..000000000 --- a/graphics/unknown/858E5B0/0.png +++ /dev/null diff --git a/graphics/unknown/858E5B0/1.png b/graphics/unknown/858E5B0/1.png Binary files differdeleted file mode 100644 index 026b9b7af..000000000 --- a/graphics/unknown/858E5B0/1.png +++ /dev/null diff --git a/graphics/unknown/858E5B0/2.png b/graphics/unknown/858E5B0/2.png Binary files differdeleted file mode 100644 index 360e2ab63..000000000 --- a/graphics/unknown/858E5B0/2.png +++ /dev/null diff --git a/graphics/unknown/858E5B0/3.png b/graphics/unknown/858E5B0/3.png Binary files differdeleted file mode 100644 index 88672c182..000000000 --- a/graphics/unknown/858E5B0/3.png +++ /dev/null diff --git a/graphics/unknown/858E5B0/4.png b/graphics/unknown/858E5B0/4.png Binary files differdeleted file mode 100644 index 660ad331d..000000000 --- a/graphics/unknown/858E5B0/4.png +++ /dev/null diff --git a/graphics/unknown/858E5B0/5.png b/graphics/unknown/858E5B0/5.png Binary files differdeleted file mode 100644 index 7006e9cc9..000000000 --- a/graphics/unknown/858E5B0/5.png +++ /dev/null diff --git a/graphics/unknown/858E5D8/0.png b/graphics/unknown/858E5D8/0.png Binary files differdeleted file mode 100644 index 110b1dd0a..000000000 --- a/graphics/unknown/858E5D8/0.png +++ /dev/null diff --git a/graphics/unknown/858E5D8/1.png b/graphics/unknown/858E5D8/1.png Binary files differdeleted file mode 100644 index f50079de7..000000000 --- a/graphics/unknown/858E5D8/1.png +++ /dev/null diff --git a/graphics/unknown/858E5D8/2.png b/graphics/unknown/858E5D8/2.png Binary files differdeleted file mode 100644 index a54bb3d12..000000000 --- a/graphics/unknown/858E5D8/2.png +++ /dev/null diff --git a/graphics/unknown/858E5D8/3.png b/graphics/unknown/858E5D8/3.png Binary files differdeleted file mode 100644 index 0ea6e43c9..000000000 --- a/graphics/unknown/858E5D8/3.png +++ /dev/null diff --git a/graphics/unknown/858E5D8/4.png b/graphics/unknown/858E5D8/4.png Binary files differdeleted file mode 100644 index 4b4e300bb..000000000 --- a/graphics/unknown/858E5D8/4.png +++ /dev/null diff --git a/graphics/unknown/858E84C/0.png b/graphics/unknown/858E84C/0.png Binary files differdeleted file mode 100644 index 4673403e0..000000000 --- a/graphics/unknown/858E84C/0.png +++ /dev/null diff --git a/graphics/unknown/858E84C/1.png b/graphics/unknown/858E84C/1.png Binary files differdeleted file mode 100644 index c55f2146d..000000000 --- a/graphics/unknown/858E84C/1.png +++ /dev/null diff --git a/graphics/unknown/858E84C/2.png b/graphics/unknown/858E84C/2.png Binary files differdeleted file mode 100644 index 4f03b50ae..000000000 --- a/graphics/unknown/858E84C/2.png +++ /dev/null diff --git a/include/battle_transition.h b/include/battle_transition.h index 6581d6413..a33032fb4 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/battle_util.h b/include/battle_util.h index b77fa10ad..157ba8eb6 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 OpponentSwitchInResetSentPokesToOpponentValue(u8 battlerId); +void UpdateSentPokesToOpponentValue(u8 battlerId); void BattleScriptPush(const u8* bsPtr); void BattleScriptPushCursor(void); void BattleScriptPop(void); diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index 00ca60457..dc1085f7c 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -20,10 +20,10 @@ #define FLDEFF_JUMP_SMALL_SPLASH 16 #define FLDEFF_LONG_GRASS 17 #define FLDEFF_JUMP_LONG_GRASS 18 -#define FLDEFF_UNKNOWN_19 19 -#define FLDEFF_UNKNOWN_20 20 -#define FLDEFF_UNKNOWN_21 21 -#define FLDEFF_UNKNOWN_22 22 +#define FLDEFF_UNUSED_GRASS 19 +#define FLDEFF_UNUSED_GRASS_2 20 +#define FLDEFF_UNUSED_SAND 21 +#define FLDEFF_WATER_SURFACING 22 #define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23 #define FLDEFF_DEEP_SAND_FOOTPRINTS 24 #define FLDEFF_POKECENTER_HEAL 25 @@ -50,8 +50,8 @@ #define FLDEFF_HEART_ICON 46 #define FLDEFF_NOP_47 47 #define FLDEFF_NOP_48 48 -#define FLDEFF_POP_OUT_OF_ASH 49 -#define FLDEFF_LAVARIDGE_GYM_WARP 50 +#define FLDEFF_ASH_PUFF 49 +#define FLDEFF_ASH_LAUNCH 50 #define FLDEFF_SWEET_SCENT 51 #define FLDEFF_SAND_PILLAR 52 #define FLDEFF_BUBBLES 53 @@ -65,8 +65,59 @@ #define FLDEFF_PCTURN_ON 61 #define FLDEFF_HALL_OF_FAME_RECORD 62 #define FLDEFF_USE_TELEPORT 63 -#define FLDEFF_RAYQUAZA 64 -#define FLDEFF_65 65 +#define FLDEFF_RAYQUAZA_SPOTLIGHT 64 +#define FLDEFF_DESTROY_DEOXYS_ROCK 65 #define FLDEFF_MOVE_DEOXYS_ROCK 66 -#endif +#define FLDEFFOBJ_SHADOW_S 0 +#define FLDEFFOBJ_SHADOW_M 1 +#define FLDEFFOBJ_SHADOW_L 2 +#define FLDEFFOBJ_SHADOW_XL 3 +#define FLDEFFOBJ_TALL_GRASS 4 +#define FLDEFFOBJ_RIPPLE 5 +#define FLDEFFOBJ_ASH 6 +#define FLDEFFOBJ_SURF_BLOB 7 +#define FLDEFFOBJ_ARROW 8 +#define FLDEFFOBJ_GROUND_IMPACT_DUST 9 +#define FLDEFFOBJ_JUMP_TALL_GRASS 10 +#define FLDEFFOBJ_SAND_FOOTPRINTS 11 +#define FLDEFFOBJ_JUMP_BIG_SPLASH 12 +#define FLDEFFOBJ_SPLASH 13 +#define FLDEFFOBJ_JUMP_SMALL_SPLASH 14 +#define FLDEFFOBJ_LONG_GRASS 15 +#define FLDEFFOBJ_JUMP_LONG_GRASS 16 +#define FLDEFFOBJ_UNUSED_GRASS 17 +#define FLDEFFOBJ_UNUSED_GRASS_2 18 +#define FLDEFFOBJ_UNUSED_SAND 19 +#define FLDEFFOBJ_WATER_SURFACING 20 +#define FLDEFFOBJ_REFLECTION_DISTORTION 21 +#define FLDEFFOBJ_SPARKLE 22 +#define FLDEFFOBJ_DEEP_SAND_FOOTPRINTS 23 +#define FLDEFFOBJ_TREE_DISGUISE 24 +#define FLDEFFOBJ_MOUNTAIN_DISGUISE 25 +#define FLDEFFOBJ_BIRD 26 +#define FLDEFFOBJ_BIKE_TIRE_TRACKS 27 +#define FLDEFFOBJ_SAND_DISGUISE 28 +#define FLDEFFOBJ_SAND_PILE 29 +#define FLDEFFOBJ_SHORT_GRASS 30 +#define FLDEFFOBJ_HOT_SPRINGS_WATER 31 +#define FLDEFFOBJ_ASH_PUFF 32 +#define FLDEFFOBJ_ASH_LAUNCH 33 +#define FLDEFFOBJ_BUBBLES 34 +#define FLDEFFOBJ_SMALL_SPARKLE 35 +#define FLDEFFOBJ_RAYQUAZA 36 + +#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/constants/flags.h b/include/constants/flags.h index e1a88283a..485dd3058 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) diff --git a/include/constants/items.h b/include/constants/items.h index ba4d3c49e..9496a4c61 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -497,6 +497,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/constants/layouts.h b/include/constants/layouts.h index 3e876f499..500b82cd4 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 17fe7ab53..aef9924fa 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/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 586107687..f7405f46a 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/include/constants/slot_machine.h b/include/constants/slot_machine.h index 9ecf46d79..81848f208 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 +#endif // GUARD_CONSTANTS_SLOT_MACHINE_H diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h index afbcd4ace..27357e99c 100644 --- a/include/constants/trainer_hill.h +++ b/include/constants/trainer_hill.h @@ -22,7 +22,7 @@ #define TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS 6 #define TRAINER_HILL_FUNC_GET_CHALLENGE_TIME 7 #define TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED 8 -#define TRAINER_HILL_FUNC_CLEAR_RESULT 9 +#define TRAINER_HILL_FUNC_GET_IN_EREADER_MODE 9 #define TRAINER_HILL_FUNC_IN_CHALLENGE 10 #define TRAINER_HILL_FUNC_POST_BATTLE_TEXT 11 #define TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS 12 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 6ccd4759e..9b4d9302f 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -16,11 +16,7 @@ enum SpinnerRunnerFollowPatterns RUNFOLLOW_SOUTH_EAST_WEST }; -struct UnkStruct_085094AC -{ - const union AnimCmd *const *anims; - u8 animPos[4]; -}; +#define FIGURE_8_LENGTH 72 #define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0) #define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1) @@ -43,6 +39,12 @@ struct UnkStruct_085094AC #define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18) #define GROUND_EFFECT_FLAG_SEAWEED (1 << 19) +struct UnkStruct_085094AC +{ + const union AnimCmd *const *anims; + u8 animPos[4]; +}; + struct PairedPalettes { u16 tag; @@ -98,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); @@ -174,8 +176,6 @@ u8 sub_809785C(struct Sprite *); u8 sub_80978E4(struct Sprite *); void SetAndStartSpriteAnim(struct Sprite *, u8, u8); bool8 SpriteAnimEnded(struct Sprite *); -void sub_8097750(struct Sprite *); -bool8 sub_8097758(struct Sprite *); void CreateLevitateMovementTask(struct ObjectEvent *); void DestroyExtraMovementTask(u8); void UnfreezeObjectEvents(void); @@ -191,8 +191,8 @@ u8 GetLedgeJumpDirection(s16, s16, u8); void CameraObjectSetFollowedObjectId(u8 objectId); u16 GetObjectPaletteTag(u8 palSlot); void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible); -s16 sub_809773C(s16 a1); -s16 sub_8097728(s16 a1); +s16 GetFigure8XOffset(s16 idx); +s16 GetFigure8YOffset(s16 idx); void CameraObjectReset2(void); u8 GetObjectEventBerryTreeId(u8 objectEventId); void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup); diff --git a/include/event_scripts.h b/include/event_scripts.h index d147dd4f1..3c4380108 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_FldEffRockSmash[]; +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[]; @@ -587,4 +588,26 @@ extern u8 BerryTree_EventScript_ItemUsePlantBerry[]; extern u8 BerryTree_EventScript_ItemUseWailmerPail[]; extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[]; +// overworld +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[]; + #endif // GUARD_EVENT_SCRIPTS_H diff --git a/include/faraway_island.h b/include/faraway_island.h index 084b5a277..a5243c6a7 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/include/field_camera.h b/include/field_camera.h index fecea244e..2bed02b20 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -23,7 +23,7 @@ void DrawWholeMapView(void); void CurrentMapDrawMetatileAt(int x, int y); void sub_8089C08(s16 *a0, s16 *a1); void DrawDoorMetatileAt(int x, int y, u16 *arr); -void move_tilemap_camera_to_upper_left_corner(void); +void ResetFieldCamera(void); void sub_8057A58(void); void ResetCameraUpdateInfo(void); u32 InitCameraUpdateCallback(u8 a); diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index f722a6063..17e5afb63 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -34,7 +34,7 @@ bool8 sub_8068870(u16 a); bool8 sub_8068894(void); bool8 sub_8068A64(struct MapPosition *, u16); u8 sub_8068F18(void); -bool8 dive_warp(struct MapPosition *position, u16 b); +bool8 TryDoDiveWarp(struct MapPosition *position, u16 b); int SetCableClubWarp(void); u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); diff --git a/include/field_effect.h b/include/field_effect.h index 59f99ad93..731fb9c59 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -16,7 +16,7 @@ void ReturnToFieldFromFlyMapSelect(void); u8 AddNewGameBirchObject(s16, s16, u8); void FieldEffectStop(struct Sprite *sprite, u8 id); u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); -void CreateTeleportFieldEffectTask(void); +void FldEff_TeleportWarpOut(void); void FieldEffectActiveListRemove(u8 id); void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8); void FieldEffectActiveListAdd(u8 id); @@ -39,12 +39,8 @@ void StartEscalatorWarp(u8 metatileBehavior, u8 priority); void StartLavaridgeGymB1FWarp(u8 priority); void StartLavaridgeGym1FWarp(u8 priority); -void sub_80B9C28(s16*, u8); -void sub_80B9C54(s16*, u8); -void sub_80B9CDC(s16*, u8); - -void SpriteCB_PopOutOfAsh(struct Sprite*); -void SpriteCB_LavaridgeGymWarp(struct Sprite*); +void SpriteCB_AshPuff(struct Sprite*); +void SpriteCB_AshLaunch(struct Sprite*); void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId); diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 8257bc110..9b7b6ffd5 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -8,20 +8,22 @@ // Exported ROM declarations u8 CreateWarpArrowSprite(void); u8 sub_8155800(u8 oldSpriteId); -void sub_81555AC(u8, u8); +void SetSurfBobState(u8 spriteId, u8 value); +void SetSurfBobWhileFlyingOutState(u8 spriteId, u8 value); +void SetSurfBobWhileFishingState(u8 spriteId, u8 value, s16 data1); bool8 sub_8155DA0(struct ObjectEvent *); void sub_8155D78(struct ObjectEvent *); void StartAshFieldEffect(s16, s16, u16, s16); void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8); u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*); u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); -void sub_8155F80(struct Sprite*); +void UpdateRayquazaSpotlightEffect(struct Sprite*); void UpdateShadowFieldEffect(struct Sprite*); void UpdateTallGrassFieldEffect(struct Sprite*); void WaitFieldEffectSpriteAnim(struct Sprite*); void UpdateAshFieldEffect(struct Sprite*); void UpdateSurfBlobFieldEffect(struct Sprite*); -void sub_8156194(struct Sprite*); +void UpdateJumpImpactEffect(struct Sprite*); void UpdateFootprintsTireTracksFieldEffect(struct Sprite*); void UpdateSplashFieldEffect(struct Sprite*); void UpdateLongGrassFieldEffect(struct Sprite*); @@ -33,7 +35,5 @@ void UpdateBubblesFieldEffect(struct Sprite*); void UpdateSparkleFieldEffect(struct Sprite*); void SetSpriteInvisible(u8 spriteId); void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y); -void sub_8155604(u8 spriteId, u8 value, s16 data1); -void sub_81555D8(u8 spriteId, u8 value); #endif //GUARD_FIELD_EFFECT_HELPERS_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index bcee339d5..722fe4444 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -1,7 +1,7 @@ #ifndef GUARD_FIELD_PLAYER_AVATAR_H #define GUARD_FIELD_PLAYER_AVATAR_H -void player_step(u8 a, u16 b, u16 c); +void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys); void ClearPlayerAvatarInfo(void); void SetPlayerAvatarExtraStateTransition(u8, u8); u8 GetPlayerAvatarGenderByGraphicsId(u8); @@ -39,7 +39,7 @@ void sub_808BCF4(void); void sub_808D074(u8); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8); -void sub_808C114(void); +void SetPlayerAvatarFieldMove(void); u8 GetPlayerAvatarGraphicsIdByCurrentState(void); void SetPlayerAvatarStateMask(u8 a); u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); @@ -47,9 +47,9 @@ u8 GetJumpSpecialMovementAction(u32); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerFacingSurfableFishableWater(void); bool8 IsPlayerSurfingNorth(void); -void sub_808C228(u8 direction); +void SetPlayerAvatarWatering(u8 direction); u8 GetPlayerAvatarFlags(void); -void sub_808B578(void); +void UpdatePlayerAvatarTransitionState(void); u8 GetFRLGAvatarGraphicsIdByGender(u8); u8 GetRSAvatarGraphicsIdByGender(u8); void PlayerWheelieInPlace(u8 direction); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index e05e30378..951bf0788 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_SCREEN_EFFECT_H #define GUARD_FIELD_SCREEN_EFFECT_H +extern const s32 gMaxFlashLevel; + void WarpFadeInScreen(void); void WarpFadeOutScreen(void); void FadeInFromBlack(void); @@ -26,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/include/fieldmap.h b/include/fieldmap.h index aff458eb1..438fb4787 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -30,25 +30,21 @@ struct MapConnection *sub_8088950(u8 direction, int x, int y); bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection); bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset); void save_serialize_map(void); -void sub_8088B3C(u16 x, u16 y); +void SetCameraFocusCoords(u16 x, u16 y); void InitMap(void); void InitMapFromSavedGame(void); void InitTrainerHillMap(void); void InitBattlePyramidMap(bool8 setPlayerPosition); -void copy_map_tileset1_tileset2_to_vram(struct MapLayout const *mapLayout); -void apply_map_tileset1_tileset2_palette(struct MapLayout const *mapLayout); -void apply_map_tileset2_palette(struct MapLayout const *mapLayout); -void copy_map_tileset2_to_vram_2(struct MapLayout const *mapLayout); -void copy_map_tileset1_to_vram(const struct MapLayout *); -void copy_map_tileset2_to_vram(const struct MapLayout *); -struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection); +void CopyMapTilesetsToVram(struct MapLayout const *mapLayout); +void LoadMapTilesetPalettes(struct MapLayout const *mapLayout); +void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout); +void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout); +void CopyPrimaryTilesetToVram(const struct MapLayout *); +void CopySecondaryTilesetToVram(const struct MapLayout *); +struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection); struct MapConnection *GetConnectionAtCoords(s16 x, s16 y); void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable); -void SpriteCB_PokeballGlow(struct Sprite *); -void SpriteCB_PokecenterMonitor(struct Sprite *); -void SpriteCB_HallOfFameMonitor(struct Sprite *); - // field_region_map.c void FieldInitRegionMap(MainCallback callback); diff --git a/include/fldeff.h b/include/fldeff.h index deb54372c..597ce6f47 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -9,22 +9,13 @@ 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 sub_80E1558(u8 var); -void sub_80E1570(void); -bool8 sub_80E1584(void); +void StartEscalator(bool8 var); +void StopEscalator(void); +bool8 IsEscalatorMoving(void); // soft-boiled bool8 SetUpFieldMove_SoftBoiled(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); @@ -55,7 +46,7 @@ bool8 FldEff_UseDig(void); // rock smash bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId); -u8 oei_task_add(void); +u8 CreateFieldMoveTask(void); bool8 SetUpFieldMove_RockSmash(void); bool8 FldEff_UseRockSmash(void); diff --git a/include/fldeff_misc.h b/include/fldeff_misc.h index 6fd15c1ea..4acca7944 100644 --- a/include/fldeff_misc.h +++ b/include/fldeff_misc.h @@ -1,10 +1,10 @@ #ifndef GUARD_FLDEFF_MISC_H #define GUARD_FLDEFF_MISC_H -void sub_80F9BCC(u16 a0, u16 a1, u8 a2); -void sub_80F9BF4(u16 a0, u16 a1, u8 a2); -bool8 sub_80F9C1C(void); -bool8 sub_80F9C30(void); +void ComputerScreenOpenEffect(u16 a0, u16 a1, u8 a2); +void ComputerScreenCloseEffect(u16 a0, u16 a1, u8 a2); +bool8 IsComputerScreenOpenEffectActive(void); +bool8 IsComputerScreenCloseEffectActive(void); bool8 SetUpFieldMove_SecretPower(void); bool8 FldEff_UseSecretPowerCave(void); bool8 FldEff_SecretPowerCave(void); @@ -15,22 +15,22 @@ bool8 FldEff_SecretPowerShrub(void); bool8 FldEff_SecretBasePCTurnOn(void); void DoSecretBasePCTurnOffEffect(void); void PopSecretBaseBalloon(s16 metatileId, s16 x, s16 y); -bool8 FldEff_NopA6FC(void); -bool8 FldEff_NopA700(void); +bool8 FldEff_Nop47(void); +bool8 FldEff_Nop48(void); void ShatterSecretBaseBreakableDoor(s16 x, s16 y); void PlaySecretBaseMusicNoteMatSound(s16 metatileId); void DoSecretBaseGlitterMatSparkle(void); bool8 FldEff_SandPillar(void); void InteractWithShieldOrTVDecoration(void); -bool8 sub_80FADE4(u16 arg0, u8 arg1); +bool8 IsLargeBreakableDecoration(u16 arg0, u8 arg1); void FldEffPoison_Start(void); bool32 FldEffPoison_IsActive(void); void DoWateringBerryTreeAnim(void); -u8 CreateRecordMixingSprite(void); -void DestroyRecordMixingSprite(void); +u8 CreateRecordMixingLights(void); +void DestroyRecordMixingLights(void); -extern const struct SpritePalette gFieldEffectObjectPaletteInfo7; -extern const struct SpritePalette gFieldEffectObjectPaletteInfo8; +extern const struct SpritePalette gSpritePalette_SecretPower_Cave; +extern const struct SpritePalette gSpritePalette_SecretPower_Plant; extern const struct SpritePalette gFieldEffectObjectPaletteInfo9; extern const u16 gTilesetPalettes_SecretBase[][16]; diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 59610f9ad..4598e87fa 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -247,14 +247,14 @@ enum { PLAYER_AVATAR_STATE_WATERING, }; -#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << PLAYER_AVATAR_STATE_NORMAL) -#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << PLAYER_AVATAR_STATE_MACH_BIKE) -#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << PLAYER_AVATAR_STATE_ACRO_BIKE) -#define PLAYER_AVATAR_FLAG_SURFING (1 << PLAYER_AVATAR_STATE_SURFING) -#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << PLAYER_AVATAR_STATE_UNDERWATER) -#define PLAYER_AVATAR_FLAG_5 (1 << PLAYER_AVATAR_STATE_FIELD_MOVE) -#define PLAYER_AVATAR_FLAG_6 (1 << PLAYER_AVATAR_STATE_FISHING) -#define PLAYER_AVATAR_FLAG_DASH (1 << PLAYER_AVATAR_STATE_WATERING) +#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) +#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) +#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) +#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) +#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4) +#define PLAYER_AVATAR_FLAG_5 (1 << 5) +#define PLAYER_AVATAR_FLAG_FORCED_MOVE (1 << 6) +#define PLAYER_AVATAR_FLAG_DASH (1 << 7) enum { diff --git a/include/graphics.h b/include/graphics.h index 8514d49bd..106798892 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[]; @@ -4832,15 +4832,15 @@ extern const u8 gSlotMachineReelTimeNumber3[]; 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 gSlotMachineReelTimeNumberGap_Gfx[]; +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[]; @@ -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 gSlotMachineReelTime_Pal[]; -extern const u16 gUnknown_08DCF1F0[]; -extern const u16 gUnknown_08DCF210[]; -extern const u16 gUnknown_08DCF230[]; -extern const u16 gUnknown_08DCF190[]; +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 gSlotMachineReelTimePikachu_Pal[]; extern const u32 gBattleAnimBgTilemap_Sandstorm[]; extern const u32 gBattleAnimBgImage_Sandstorm[]; diff --git a/include/menu.h b/include/menu.h index 20eda0fce..a57b3718f 100644 --- a/include/menu.h +++ b/include/menu.h @@ -30,7 +30,7 @@ extern const u16 gUnknown_0860F074[]; void FreeAllOverworldWindowBuffers(void); void InitStandardTextBoxWindows(void); -void sub_8197200(void); +void InitTextBoxGfxAndPrinters(void); u16 RunTextPrintersAndIsPrinter0Active(void); void LoadMessageBoxAndBorderGfx(void); void DrawDialogueFrame(u8 windowId, bool8 copyToVram); @@ -64,8 +64,8 @@ void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirs void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); s8 Menu_ProcessInputNoWrapClearOnChoose(void); s8 ProcessMenuInput_other(void); -void do_scheduled_bg_tilemap_copies_to_vram(void); -void clear_scheduled_bg_copies_to_vram(void); +void DoScheduledBgTilemapCopiesToVram(void); +void ClearScheduledBgCopiesToVram(void); void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str); void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 a2, u8 a3); void sub_81995E4(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds); diff --git a/include/overworld.h b/include/overworld.h index 78a5b4ad0..a2eac7e29 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -24,6 +24,8 @@ #define MOVEMENT_MODE_FROZEN 1 #define MOVEMENT_MODE_SCRIPTED 2 +#define SKIP_OBJECT_EVENT_LOAD 1 + struct InitialPlayerAvatarState { u8 transitionFlags; @@ -99,8 +101,7 @@ void SetDefaultFlashLevel(void); void Overworld_SetFlashLevel(s32 flashLevel); u8 Overworld_GetFlashLevel(void); void SetCurrentMapLayout(u16 mapLayoutId); -void sub_8085540(u8 var); -u8 sub_808554C(void); +void SetObjectEventLoadFlag(u8 var); u16 GetLocationMusic(struct WarpData *warp); u16 GetCurrLocationDefaultMusic(void); u16 GetWarpDestinationMusic(void); @@ -135,11 +136,9 @@ void SetUnusedCallback(void *a0); void CB2_NewGame(void); void CB2_WhiteOut(void); void CB2_LoadMap(void); -void sub_8086024(void); +void CB2_ReturnToFieldContestHall(void); void CB2_ReturnToFieldCableClub(void); void CB2_ReturnToField(void); -void CB2_ReturnToFieldLocal(void); -void CB2_ReturnToFieldLink(void); void CB2_ReturnToFieldFromMultiplayer(void); void CB2_ReturnToFieldWithOpenMenu(void); void CB2_ReturnToFieldContinueScript(void); diff --git a/include/strings.h b/include/strings.h index 702392efa..50af23a40 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/include/trainer_hill.h b/include/trainer_hill.h index c849bcced..3f0644248 100644 --- a/include/trainer_hill.h +++ b/include/trainer_hill.h @@ -75,7 +75,7 @@ void FillHillTrainerParty(void); void FillHillTrainersParties(void); u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId); u8 GetNumFloorsInTrainerHillChallenge(void); -void sub_81D64C0(void); -bool32 sub_81D6534(void); +void TryLoadTrainerHillEReaderPalette(void); +bool32 OnTrainerHillEReaderChallengeFloor(void); #endif // GUARD_TRAINER_HILL_H diff --git a/include/tv.h b/include/tv.h index 8e9233c2b..e2c50cad2 100644 --- a/include/tv.h +++ b/include/tv.h @@ -30,12 +30,12 @@ void AlertTVThatPlayerPlayedSlotMachine(u16 nCoinsSpent); void AlertTVThatPlayerPlayedRoulette(u16 nCoinsSpent); void AlertTVOfNewCoinTotal(u16 nCoinsPaidOut); void TryPutSecretBaseSecretsOnAir(void); -void sub_80EDB44(void); +void TryPutTodaysRivalTrainerOnAir(void); 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/ld_script.txt b/ld_script.txt index 9b0a82d9c..f3e418c08 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -440,7 +440,7 @@ SECTIONS { gflib/window.o(.rodata); gflib/text.o(.rodata); gflib/sprite.o(.rodata); - data/io_reg.o(.rodata); + gflib/io_reg.o(.rodata); gflib/string_util.o(.rodata); src/link.o(.rodata); src/link.o(.rodata.str1.4); diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index 83a68b887..ae7971960 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -582,16 +582,16 @@ $(FLDEFFGFXDIR)/arrow.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/ash.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/berry_tree_growth_sparkle.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/sparkle.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/bike_hop_big_splash.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/jump_big_splash.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/bike_hop_small_splash.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/jump_small_splash.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 1 -$(FLDEFFGFXDIR)/bike_hop_tall_grass.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/jump_tall_grass.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 1 $(FLDEFFGFXDIR)/bike_tire_tracks.4bpp: %.4bpp: %.png @@ -606,7 +606,7 @@ $(FLDEFFGFXDIR)/deep_sand_footprints.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/ground_impact_dust.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 1 -$(FLDEFFGFXDIR)/jump_out_of_ash.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/ash_puff.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 $(FLDEFFGFXDIR)/long_grass.4bpp: %.4bpp: %.png @@ -642,23 +642,35 @@ $(FLDEFFGFXDIR)/unknown_16.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/unknown_17.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/unknown_18.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)/unknown_20.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/water_surfacing.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/unknown_29.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/sand_pile.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 1 -$(FLDEFFGFXDIR)/lavaridge_gym_warp.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/ash_launch.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/unknown_35.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/small_sparkle.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(FLDEFFGFXDIR)/unused_grass.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/unused_grass_3.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(FLDEFFGFXDIR)/secret_power_cave.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(FLDEFFGFXDIR)/secret_power_shrub.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(FLDEFFGFXDIR)/secret_power_tree.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(FLDEFFGFXDIR)/record_mix_lights.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 1 diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index e4127ee09..f6ebcc726 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/agb_flash.c b/src/agb_flash.c index a9cf13d5f..eeccf1116 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) { @@ -127,7 +127,8 @@ void SetReadFlash1(u16 *dest) } } -void ReadFlash_Core(u8 *src, u8 *dest, u32 size) +// Using volatile here to make sure the flash memory will ONLY be read as bytes, to prevent any compiler optimizations. +void ReadFlash_Core(vu8 *src, u8 *dest, u32 size) { while (size-- != 0) { @@ -142,7 +143,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) u16 readFlash_Core_Buffer[0x40]; u16 *funcSrc; u16 *funcDest; - void (*readFlash_Core)(u8 *, u8 *, u32); + void (*readFlash_Core)(vu8 *, u8 *, u32); REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; @@ -153,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) { @@ -164,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) i--; } - readFlash_Core = (void (*)(u8 *, 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; @@ -201,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) { @@ -212,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; @@ -238,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 = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1; while (i != 0) { @@ -249,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); @@ -292,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 ea3df8098..5e8a8b2a7 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 516c58e55..f4769145d 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; diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 7918698fc..25340f9c6 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 dcef7d483..bca669cc2 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/battle_anim_water.c b/src/battle_anim_water.c index 5810b6bdc..fa2f38c4b 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"); @@ -624,98 +624,24 @@ void AnimTask_RotateAuroraRingColors(u8 taskId) gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step; } -#ifdef NONMATCHING static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) { int i; u16 palIndex; - u16 *palPtr1; - u16 *palPtr2; - u16 rgbBuffer; if (++gTasks[taskId].data[10] == 3) { + u16 tempPlt; gTasks[taskId].data[10] = 0; palIndex = gTasks[taskId].data[2] + 1; - palPtr1 = &gPlttBufferFaded[palIndex]; - rgbBuffer = *palPtr1; - palPtr2 = &palPtr1[1]; - for (i = 0; i < 7; i++) - palPtr1[i] = palPtr2[i]; - gPlttBufferFaded[palIndex + 7] = rgbBuffer; + tempPlt = gPlttBufferFaded[palIndex]; + for (i = 1; i < 8; i++) + gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i]; + gPlttBufferFaded[palIndex + 7] = tempPlt; } if (++gTasks[taskId].data[11] == gTasks[taskId].data[0]) DestroyAnimVisualTask(taskId); } -#else -NAKED -static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r1, =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r2, r0, r1\n\ - ldrh r0, [r2, 0x1C]\n\ - adds r0, 0x1\n\ - strh r0, [r2, 0x1C]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - mov r12, r1\n\ - cmp r0, 0x3\n\ - bne _081075BE\n\ - movs r0, 0\n\ - strh r0, [r2, 0x1C]\n\ - ldrh r0, [r2, 0xC]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldr r1, =gPlttBufferFaded\n\ - lsls r0, r5, 1\n\ - adds r0, r1\n\ - ldrh r6, [r0]\n\ - adds r7, r1, 0\n\ - adds r3, r0, 0x2\n\ - movs r1, 0x6\n\ - adds r2, r0, 0\n\ -_081075A8:\n\ - ldrh r0, [r3]\n\ - strh r0, [r2]\n\ - adds r3, 0x2\n\ - adds r2, 0x2\n\ - subs r1, 0x1\n\ - cmp r1, 0\n\ - bge _081075A8\n\ - adds r0, r5, 0x7\n\ - lsls r0, 1\n\ - adds r0, r7\n\ - strh r6, [r0]\n\ -_081075BE:\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - add r0, r12\n\ - ldrh r1, [r0, 0x1E]\n\ - adds r1, 0x1\n\ - strh r1, [r0, 0x1E]\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - movs r2, 0x8\n\ - ldrsh r0, [r0, r2]\n\ - cmp r1, r0\n\ - bne _081075DE\n\ - adds r0, r4, 0\n\ - bl DestroyAnimVisualTask\n\ -_081075DE:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n"); -} -#endif // For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam) static void AnimToTargetInSinWave(struct Sprite *sprite) @@ -822,6 +748,7 @@ static void AnimHydroCannonBeam(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) gBattleAnimArgs[0] *= -1; } + if ((gBattleAnimArgs[5] & 0xFF00) == 0) animType = TRUE; else @@ -867,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); } @@ -2004,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 diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 5626dd7bc..33daed80c 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -402,7 +402,7 @@ static void sub_81C501C(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -424,7 +424,7 @@ static bool8 sub_81C5078(void) { case 0: SetVBlankHBlankCallbacksToNull(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c9c785773..6ccefd7be 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_transition.c b/src/battle_transition.c index 176be8e16..2ffa28645 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 = 4105, + .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 = 4106, + .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 = 4106, + .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, 0x1009 -}; +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, 0x100A -}; +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/battle_util.c b/src/battle_util.c index 38d6fb18a..699fd05bc 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 OpponentSwitchInResetSentPokesToOpponentValue(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); + OpponentSwitchInResetSentPokesToOpponentValue(battler); } else { @@ -1250,7 +1250,7 @@ bool8 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState = 3; break; case 2: - sub_803F9EC(gBattlerFainted); + OpponentSwitchInResetSentPokesToOpponentValue(gBattlerFainted); if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount) gBattleStruct->faintedActionsState = 3; else diff --git a/src/berry.c b/src/berry.c index 98264f37b..d70e8c353 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 a2a96c089..de3cc6275 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/berry_crush.c b/src/berry_crush.c index 90a299a74..cf4c99f5a 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1076,7 +1076,7 @@ int sub_802104C(void) return 0; InitStandardTextBoxWindows(); - sub_8197200(); + InitTextBoxGfxAndPrinters(); sub_8022588(var0); sub_8022600(var0); gPaletteFade.bufferTransferDisabled = TRUE; diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 38c2832ee..e5c89bdb7 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -186,7 +186,7 @@ static void CB2_BerryTagScreen(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -217,7 +217,7 @@ static bool8 InitBerryTagScreen(void) case 0: SetVBlankHBlankCallbacksToNull(); ResetVramOamAndBgCntRegs(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: diff --git a/src/bike.c b/src/bike.c index 3685ebfad..5cdf066a9 100644 --- a/src/bike.c +++ b/src/bike.c @@ -835,7 +835,7 @@ static void Bike_UpdateDirTimerHistory(u8 dir) gPlayerAvatar.directionHistory = (gPlayerAvatar.directionHistory << 4) | (dir & 0xF); - for (i = 7; i != 0; i--) + for (i = ARRAY_COUNT(gPlayerAvatar.dirTimerHistory) - 1; i != 0; i--) gPlayerAvatar.dirTimerHistory[i] = gPlayerAvatar.dirTimerHistory[i - 1]; gPlayerAvatar.dirTimerHistory[0] = 1; } @@ -846,7 +846,7 @@ static void Bike_UpdateABStartSelectHistory(u8 input) gPlayerAvatar.abStartSelectHistory = (gPlayerAvatar.abStartSelectHistory << 4) | (input & 0xF); - for (i = 7; i != 0; i--) + for (i = ARRAY_COUNT(gPlayerAvatar.abStartSelectTimerHistory) - 1; i != 0; i--) gPlayerAvatar.abStartSelectTimerHistory[i] = gPlayerAvatar.abStartSelectTimerHistory[i - 1]; gPlayerAvatar.abStartSelectTimerHistory[0] = 1; } @@ -1000,10 +1000,10 @@ void BikeClearState(int newDirHistory, int newAbStartHistory) gPlayerAvatar.directionHistory = newDirHistory; gPlayerAvatar.abStartSelectHistory = newAbStartHistory; - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(gPlayerAvatar.dirTimerHistory); i++) gPlayerAvatar.dirTimerHistory[i] = 0; - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(gPlayerAvatar.abStartSelectTimerHistory); i++) gPlayerAvatar.abStartSelectTimerHistory[i] = 0; } diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index f9f06823a..5dee9dd4b 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -86,12 +86,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); @@ -164,7 +164,7 @@ void DoBrailleRegisteelEffect(void) bool8 FldEff_UseFlyAncientTomb(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldMoveTask(); gTasks[taskId].data[8] = (u32)UseRegisteelHm_Callback >> 16; gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback; @@ -279,12 +279,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); @@ -318,12 +318,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); @@ -410,7 +410,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 de39e6db3..41d6271bf 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_Unknown17; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown21; -const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand; +const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing; +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_AshPuff; +const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch; 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_UNUSED_GRASS] = &gFieldEffectObjectTemplate_UnusedGrass, + [FLDEFFOBJ_UNUSED_GRASS_2] = &gFieldEffectObjectTemplate_UnusedGrass2, + [FLDEFFOBJ_UNUSED_SAND] = &gFieldEffectObjectTemplate_UnusedSand, + [FLDEFFOBJ_WATER_SURFACING] = &gFieldEffectObjectTemplate_WaterSurfacing, + [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_ASH_PUFF] = &gFieldEffectObjectTemplate_AshPuff, + [FLDEFFOBJ_ASH_LAUNCH] = &gFieldEffectObjectTemplate_AshLaunch, + [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 65f35107d..1626b9f32 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1,43 +1,74 @@ -const struct SpritePalette gFieldEffectObjectPaletteInfo0 = {gFieldEffectObjectPalette0, 0x1004}; +const struct SpritePalette gSpritePalette_GeneralFieldEffect0 = {gFieldEffectObjectPalette0, FLDEFF_PAL_TAG_GENERAL_0}; +const struct SpritePalette gSpritePalette_GeneralFieldEffect1 = {gFieldEffectObjectPalette1, FLDEFF_PAL_TAG_GENERAL_1}; -const struct SpritePalette gFieldEffectObjectPaletteInfo1 = {gFieldEffectObjectPalette1, 0x1005}; - -const union AnimCmd gFieldEffectObjectImageAnim_850C9D0[] = +static const union AnimCmd sAnim_Shadow[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Shadow[] = +static const union AnimCmd *const sAnimTable_Shadow[] = { - gFieldEffectObjectImageAnim_850C9D0, + sAnim_Shadow, }; -const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowSmall[] = { +static const struct SpriteFrameImage sPicTable_ShadowSmall[] = { obj_frame_tiles(gFieldEffectObjectPic_ShadowSmall), }; -const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowMedium[] = { +static const struct SpriteFrameImage sPicTable_ShadowMedium[] = { obj_frame_tiles(gFieldEffectObjectPic_ShadowMedium), }; -const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowLarge[] = { +static const struct SpriteFrameImage sPicTable_ShadowLarge[] = { obj_frame_tiles(gFieldEffectObjectPic_ShadowLarge), }; -const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowExtraLarge[] = { +static const struct SpriteFrameImage sPicTable_ShadowExtraLarge[] = { obj_frame_tiles(gFieldEffectObjectPic_ShadowExtraLarge), }; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_8x8, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowSmall, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_8x8, + .anims = sAnimTable_Shadow, + .images = sPicTable_ShadowSmall, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateShadowFieldEffect, +}; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowMedium, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_16x8, + .anims = sAnimTable_Shadow, + .images = sPicTable_ShadowMedium, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateShadowFieldEffect, +}; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x8, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_32x8, + .anims = sAnimTable_Shadow, + .images = sPicTable_ShadowLarge, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateShadowFieldEffect, +}; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_64x32, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowExtraLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_64x32, + .anims = sAnimTable_Shadow, + .images = sPicTable_ShadowExtraLarge, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateShadowFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_TallGrass[] = { +static const struct SpriteFrameImage sPicTable_TallGrass[] = { overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 2), @@ -45,7 +76,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_TallGrass[] = { overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 4), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CA84[] = +static const union AnimCmd sAnim_TallGrass[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(2, 10), @@ -55,14 +86,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CA84[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_TallGrass[] = +static const union AnimCmd *const sAnimTable_TallGrass[] = { - gFieldEffectObjectImageAnim_850CA84, + sAnim_TallGrass, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_TallGrass, gFieldEffectObjectPicTable_TallGrass, gDummySpriteAffineAnimTable, UpdateTallGrassFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_TallGrass, + .images = sPicTable_TallGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateTallGrassFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Ripple[] = { +static const struct SpriteFrameImage sPicTable_Ripple[] = { overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 2), @@ -70,7 +109,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Ripple[] = { overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 4), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CAE0[] = +static const union AnimCmd sAnim_Ripple[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 9), @@ -83,14 +122,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CAE0[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Ripple[] = +static const union AnimCmd *const sAnimTable_Ripple[] = { - gFieldEffectObjectImageAnim_850CAE0, + sAnim_Ripple, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Ripple, gFieldEffectObjectPicTable_Ripple, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_Ripple, + .images = sPicTable_Ripple, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = WaitFieldEffectSpriteAnim, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Ash[] = { +static const struct SpriteFrameImage sPicTable_Ash[] = { overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 2), @@ -98,7 +145,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Ash[] = { overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 4), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CB48[] = +static const union AnimCmd sAnim_Ash[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 12), @@ -108,54 +155,70 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CB48[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Ash[] = +static const union AnimCmd *const sAnimTable_Ash[] = { - gFieldEffectObjectImageAnim_850CB48, + sAnim_Ash, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Ash = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Ash, gFieldEffectObjectPicTable_Ash, gDummySpriteAffineAnimTable, UpdateAshFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Ash = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_Ash, + .images = sPicTable_Ash, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateAshFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_SurfBlob[] = { +static const struct SpriteFrameImage sPicTable_SurfBlob[] = { overworld_frame(gFieldEffectObjectPic_SurfBlob, 4, 4, 0), overworld_frame(gFieldEffectObjectPic_SurfBlob, 4, 4, 1), overworld_frame(gFieldEffectObjectPic_SurfBlob, 4, 4, 2), }; -const union AnimCmd gSurfBlobAnim_FaceSouth[] = +static const union AnimCmd sSurfBlobAnim_FaceSouth[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_JUMP(0), }; -const union AnimCmd gSurfBlobAnim_FaceNorth[] = +static const union AnimCmd sSurfBlobAnim_FaceNorth[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_JUMP(0), }; -const union AnimCmd gSurfBlobAnim_FaceWest[] = +static const union AnimCmd sSurfBlobAnim_FaceWest[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_JUMP(0), }; -const union AnimCmd gSurfBlobAnim_FaceEast[] = +static const union AnimCmd sSurfBlobAnim_FaceEast[] = { ANIMCMD_FRAME(2, 1, .hFlip = TRUE), ANIMCMD_JUMP(0), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_SurfBlob[] = +static const union AnimCmd *const sAnimTable_SurfBlob[] = { - gSurfBlobAnim_FaceSouth, - gSurfBlobAnim_FaceNorth, - gSurfBlobAnim_FaceWest, - gSurfBlobAnim_FaceEast, + sSurfBlobAnim_FaceSouth, + sSurfBlobAnim_FaceNorth, + sSurfBlobAnim_FaceWest, + sSurfBlobAnim_FaceEast, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x32, gFieldEffectObjectImageAnimTable_SurfBlob, gFieldEffectObjectPicTable_SurfBlob, gDummySpriteAffineAnimTable, UpdateSurfBlobFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_32x32, + .anims = sAnimTable_SurfBlob, + .images = sPicTable_SurfBlob, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSurfBlobFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Arrow[] = { +static const struct SpriteFrameImage sPicTable_Arrow[] = { overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 2), @@ -166,51 +229,59 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Arrow[] = { overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 7), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CC1C[] = +static const union AnimCmd sArrowAnim_South[] = { ANIMCMD_FRAME(3, 32), ANIMCMD_FRAME(7, 32), ANIMCMD_JUMP(0), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CC28[] = +static const union AnimCmd sArrowAnim_North[] = { ANIMCMD_FRAME(0, 32), ANIMCMD_FRAME(4, 32), ANIMCMD_JUMP(0), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CC34[] = +static const union AnimCmd sArrowAnim_West[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(5, 32), ANIMCMD_JUMP(0), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CC40[] = +static const union AnimCmd sArrowAnim_East[] = { ANIMCMD_FRAME(2, 32), ANIMCMD_FRAME(6, 32), ANIMCMD_JUMP(0), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Arrow[] = +static const union AnimCmd *const sAnimTable_Arrow[] = { - gFieldEffectObjectImageAnim_850CC1C, - gFieldEffectObjectImageAnim_850CC28, - gFieldEffectObjectImageAnim_850CC34, - gFieldEffectObjectImageAnim_850CC40, + sArrowAnim_South, + sArrowAnim_North, + sArrowAnim_West, + sArrowAnim_East, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Arrow, gFieldEffectObjectPicTable_Arrow, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_Arrow, + .images = sPicTable_Arrow, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_GroundImpactDust[] = { +static const struct SpriteFrameImage sPicTable_GroundImpactDust[] = { overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 0), overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 1), overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 2), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CC8C[] = +static const union AnimCmd sAnim_GroundImpactDust[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -218,21 +289,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CC8C[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_GroundImpactDust[] = +static const union AnimCmd *const sAnimTable_GroundImpactDust[] = { - gFieldEffectObjectImageAnim_850CC8C, + sAnim_GroundImpactDust, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_GroundImpactDust, gFieldEffectObjectPicTable_GroundImpactDust, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x8, + .anims = sAnimTable_GroundImpactDust, + .images = sPicTable_GroundImpactDust, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateJumpImpactEffect, +}; -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), +static const struct SpriteFrameImage sPicTable_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[] = +static const union AnimCmd sAnim_JumpTallGrass[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -241,171 +320,203 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CCD8[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopTallGrass[] = +static const union AnimCmd *const sAnimTable_JumpTallGrass[] = { - gFieldEffectObjectImageAnim_850CCD8, + sAnim_JumpTallGrass, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopTallGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_BikeHopTallGrass, gFieldEffectObjectPicTable_BikeHopTallGrass, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x8, + .anims = sAnimTable_JumpTallGrass, + .images = sPicTable_JumpTallGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateJumpImpactEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_SandFootprints[] = { +static const struct SpriteFrameImage sPicTable_SandFootprints[] = { overworld_frame(gFieldEffectObjectPic_SandFootprints, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_SandFootprints, 2, 2, 1), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD18[] = +static const union AnimCmd sSandFootprintsAnim_South[] = { ANIMCMD_FRAME(0, 1, .vFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD20[] = +static const union AnimCmd sSandFootprintsAnim_North[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD28[] = +static const union AnimCmd sSandFootprintsAnim_West[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD30[] = +static const union AnimCmd sSandFootprintsAnim_East[] = { ANIMCMD_FRAME(1, 1, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_SandFootprints[] = +static const union AnimCmd *const sAnimTable_SandFootprints[] = { - gFieldEffectObjectImageAnim_850CD18, - gFieldEffectObjectImageAnim_850CD18, - gFieldEffectObjectImageAnim_850CD20, - gFieldEffectObjectImageAnim_850CD28, - gFieldEffectObjectImageAnim_850CD30, + sSandFootprintsAnim_South, + sSandFootprintsAnim_South, + sSandFootprintsAnim_North, + sSandFootprintsAnim_West, + sSandFootprintsAnim_East, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_SandFootprints, gFieldEffectObjectPicTable_SandFootprints, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_SandFootprints, + .images = sPicTable_SandFootprints, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_DeepSandFootprints[] = { +static const struct SpriteFrameImage sPicTable_DeepSandFootprints[] = { overworld_frame(gFieldEffectObjectPic_DeepSandFootprints, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_DeepSandFootprints, 2, 2, 1), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD74[] = +static const union AnimCmd sDeepSandFootprintsAnim_South[] = { ANIMCMD_FRAME(0, 1, .vFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD7C[] = +static const union AnimCmd sDeepSandFootprintsAnim_North[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD84[] = +static const union AnimCmd sDeepSandFootprintsAnim_West[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CD8C[] = +static const union AnimCmd sDeepSandFootprintsAnim_East[] = { ANIMCMD_FRAME(1, 1, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_DeepSandFootprints[] = +static const union AnimCmd *const sAnimTable_DeepSandFootprints[] = { - gFieldEffectObjectImageAnim_850CD74, - gFieldEffectObjectImageAnim_850CD74, - gFieldEffectObjectImageAnim_850CD7C, - gFieldEffectObjectImageAnim_850CD84, - gFieldEffectObjectImageAnim_850CD8C, + sDeepSandFootprintsAnim_South, + sDeepSandFootprintsAnim_South, + sDeepSandFootprintsAnim_North, + sDeepSandFootprintsAnim_West, + sDeepSandFootprintsAnim_East, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_DeepSandFootprints, gFieldEffectObjectPicTable_DeepSandFootprints, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_DeepSandFootprints, + .images = sPicTable_DeepSandFootprints, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeTireTracks[] = { +static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = { overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 3), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CDE0[] = +static const union AnimCmd sBikeTireTracksAnim_South[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CDE8[] = +static const union AnimCmd sBikeTireTracksAnim_North[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CDF0[] = +static const union AnimCmd sBikeTireTracksAnim_West[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CDF8[] = +static const union AnimCmd sBikeTireTracksAnim_East[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CE00[] = +static const union AnimCmd sBikeTireTracksAnim_SECornerTurn[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CE08[] = +static const union AnimCmd sBikeTireTracksAnim_SWCornerTurn[] = { ANIMCMD_FRAME(0, 1, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CE10[] = +static const union AnimCmd sBikeTireTracksAnim_NWCornerTurn[] = { ANIMCMD_FRAME(3, 1, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CE18[] = +static const union AnimCmd sBikeTireTracksAnim_NECornerTurn[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeTireTracks[] = +static const union AnimCmd *const sAnimTable_BikeTireTracks[] = { - gFieldEffectObjectImageAnim_850CDE0, - gFieldEffectObjectImageAnim_850CDE0, - gFieldEffectObjectImageAnim_850CDE8, - gFieldEffectObjectImageAnim_850CDF0, - gFieldEffectObjectImageAnim_850CDF8, - gFieldEffectObjectImageAnim_850CE00, - gFieldEffectObjectImageAnim_850CE08, - gFieldEffectObjectImageAnim_850CE10, - gFieldEffectObjectImageAnim_850CE18, + sBikeTireTracksAnim_South, + sBikeTireTracksAnim_South, + sBikeTireTracksAnim_North, + sBikeTireTracksAnim_West, + sBikeTireTracksAnim_East, + sBikeTireTracksAnim_SECornerTurn, + sBikeTireTracksAnim_SWCornerTurn, + sBikeTireTracksAnim_NWCornerTurn, + sBikeTireTracksAnim_NECornerTurn, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BikeTireTracks, gFieldEffectObjectPicTable_BikeTireTracks, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_BikeTireTracks, + .images = sPicTable_BikeTireTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = 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), +static const struct SpriteFrameImage sPicTable_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[] = +static const union AnimCmd sAnim_JumpBigSplash[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -414,26 +525,34 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CE7C[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopBigSplash[] = +static const union AnimCmd *const sAnimTable_JumpBigSplash[] = { - gFieldEffectObjectImageAnim_850CE7C, + sAnim_JumpBigSplash, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopBigSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BikeHopBigSplash, gFieldEffectObjectPicTable_BikeHopBigSplash, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_JumpBigSplash, + .images = sPicTable_JumpBigSplash, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateJumpImpactEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Splash[] = { +static const struct SpriteFrameImage sPicTable_Splash[] = { overworld_frame(gFieldEffectObjectPic_Splash, 2, 1, 0), overworld_frame(gFieldEffectObjectPic_Splash, 2, 1, 1), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CEBC[] = +static const union AnimCmd sAnim_Splash_0[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850CEC8[] = +static const union AnimCmd sAnim_Splash_1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -446,21 +565,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CEC8[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Splash[] = +static const union AnimCmd *const sAnimTable_Splash[] = { - gFieldEffectObjectImageAnim_850CEBC, - gFieldEffectObjectImageAnim_850CEC8, + sAnim_Splash_0, + sAnim_Splash_1, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Splash, gFieldEffectObjectPicTable_Splash, gDummySpriteAffineAnimTable, UpdateSplashFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x8, + .anims = sAnimTable_Splash, + .images = sPicTable_Splash, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = 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), +static const struct SpriteFrameImage sPicTable_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[] = +static const union AnimCmd sAnim_JumpSmallSplash[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -468,21 +595,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CF24[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopSmallSplash[] = +static const union AnimCmd *const sAnimTable_JumpSmallSplash[] = { - gFieldEffectObjectImageAnim_850CF24, + sAnim_JumpSmallSplash, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopSmallSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_BikeHopSmallSplash, gFieldEffectObjectPicTable_BikeHopSmallSplash, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x8, + .anims = sAnimTable_JumpSmallSplash, + .images = sPicTable_JumpSmallSplash, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateJumpImpactEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_LongGrass[] = { +static const struct SpriteFrameImage sPicTable_LongGrass[] = { overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 3), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CF70[] = +static const union AnimCmd sAnim_LongGrass[] = { ANIMCMD_FRAME(1, 3), ANIMCMD_FRAME(2, 3), @@ -494,23 +629,31 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CF70[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_LongGrass[] = +static const union AnimCmd *const sAnimTable_LongGrass[] = { - gFieldEffectObjectImageAnim_850CF70, + sAnim_LongGrass, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_LongGrass, gFieldEffectObjectPicTable_LongGrass, gDummySpriteAffineAnimTable, UpdateLongGrassFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_LongGrass, + .images = sPicTable_LongGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = 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), +static const struct SpriteFrameImage sPicTable_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[] = +static const union AnimCmd sAnim_JumpLongGrass[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -521,15 +664,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CFDC[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown16[] = +static const union AnimCmd *const sAnimTable_JumpLongGrass[] = { - gFieldEffectObjectImageAnim_850CFDC, + sAnim_JumpLongGrass, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown16 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown16, gFieldEffectObjectPicTable_Unknown16, gDummySpriteAffineAnimTable, sub_8156194}; +const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_JumpLongGrass, + .images = sPicTable_JumpLongGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateJumpImpactEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown17[] = { - overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 6), +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), overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 2), @@ -540,7 +691,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown17[] = { overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 7), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D05C[] = +static const union AnimCmd sAnim_UnusedGrass[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 4), @@ -554,21 +705,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D05C[] = ANIMCMD_JUMP(7), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown17[] = +static const union AnimCmd *const sAnimTable_UnusedGrass[] = { - gFieldEffectObjectImageAnim_850D05C, + sAnim_UnusedGrass, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown17, gFieldEffectObjectPicTable_Unknown17, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_UnusedGrass, + .images = sPicTable_UnusedGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = 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), +static const struct SpriteFrameImage sPicTable_UnusedGrass2[] = { + overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 3), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D0C0[] = +static const union AnimCmd sAnim_UnusedGrass2[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -579,21 +738,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D0C0[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown18[] = +static const union AnimCmd *const sAnimTable_UnusedGrass2[] = { - gFieldEffectObjectImageAnim_850D0C0, + sAnim_UnusedGrass2, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown18, gFieldEffectObjectPicTable_Unknown18, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2 = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_UnusedGrass2, + .images = sPicTable_UnusedGrass2, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = WaitFieldEffectSpriteAnim, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_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), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D118[] = +static const union AnimCmd sAnim_UnusedSand[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -602,20 +769,28 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D118[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown19[] = +static const union AnimCmd *const sAnimTable_UnusedSand[] = { - gFieldEffectObjectImageAnim_850D118, + sAnim_UnusedSand, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown19, gFieldEffectObjectPicTable_Unknown19, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_UnusedSand, + .images = sPicTable_UnusedSand, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = 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), +static const struct SpriteFrameImage sPicTable_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[] = +static const union AnimCmd sAnim_SandPile[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -623,21 +798,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D160[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown29[] = +static const union AnimCmd *const sAnimTable_SandPile[] = { - gFieldEffectObjectImageAnim_850D160, + sAnim_SandPile, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown29 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Unknown29, gFieldEffectObjectPicTable_Unknown29, gDummySpriteAffineAnimTable, UpdateSandPileFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x8, + .anims = sAnimTable_SandPile, + .images = sPicTable_SandPile, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSandPileFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown20[] = { - overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 3), +static const struct SpriteFrameImage sPicTable_WaterSurfacing[] = { + overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 3), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D1AC[] = +static const union AnimCmd sAnim_WaterSurfacing[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -648,14 +831,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D1AC[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown20[] = +static const union AnimCmd *const sAnimTable_WaterSurfacing[] = { - gFieldEffectObjectImageAnim_850D1AC, + sAnim_WaterSurfacing, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown20, gFieldEffectObjectPicTable_Unknown20, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_WaterSurfacing, + .images = sPicTable_WaterSurfacing, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = WaitFieldEffectSpriteAnim, +}; -const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D1E4[] = +static const union AffineAnimCmd sAffineAnim_ReflectionDistortion_0[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), @@ -669,7 +860,7 @@ const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D1E4[] = AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D234[] = +static const union AffineAnimCmd sAffineAnim_ReflectionDistortion_1[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), @@ -683,24 +874,32 @@ const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D234[] = AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gFieldEffectObjectRotScalAnimTable_Unknown21[] = +static const union AffineAnimCmd *const sAffineAnims_ReflectionDistortion[] = { - gFieldEffectObjectRotScalAnim_850D1E4, - gFieldEffectObjectRotScalAnim_850D234, + sAffineAnim_ReflectionDistortion_0, + sAffineAnim_ReflectionDistortion_1, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown21 = {0x0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gFieldEffectObjectRotScalAnimTable_Unknown21, SpriteCallbackDummy}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion = { + .tileTag = 0x0, + .paletteTag = 0xFFFF, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sAffineAnims_ReflectionDistortion, + .callback = 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), +static const struct SpriteFrameImage sPicTable_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[] = +static const union AnimCmd sAnim_Sparkle[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -725,14 +924,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D2D4[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle[] = +static const union AnimCmd *const sAnimTable_Sparkle[] = { - gFieldEffectObjectImageAnim_850D2D4, + sAnim_Sparkle, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle, gFieldEffectObjectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_Sparkle, + .images = sPicTable_Sparkle, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = WaitFieldEffectSpriteAnim, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_TreeDisguise[] = { +static const struct SpriteFrameImage sPicTable_TreeDisguise[] = { overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 2), @@ -742,13 +949,13 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_TreeDisguise[] = { overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 6), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D37C[] = +static const union AnimCmd sAnim_TreeDisguise[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850D384[] = +static const union AnimCmd sAnim_TreeDisguiseReveal[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -760,15 +967,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D384[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_TreeDisguise[] = +static const union AnimCmd *const sAnimTable_TreeDisguise[] = { - gFieldEffectObjectImageAnim_850D37C, - gFieldEffectObjectImageAnim_850D384, + sAnim_TreeDisguise, + sAnim_TreeDisguiseReveal, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_TreeDisguise, gFieldEffectObjectPicTable_TreeDisguise, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_16x32, + .anims = sAnimTable_TreeDisguise, + .images = sPicTable_TreeDisguise, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateDisguiseFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_MountainDisguise[] = { +static const struct SpriteFrameImage sPicTable_MountainDisguise[] = { overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 2), @@ -778,13 +993,13 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_MountainDisguise[] = { overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 6), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D3FC[] = +static const union AnimCmd sAnim_MountainDisguise[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -const union AnimCmd gFieldEffectObjectImageAnim_850D404[] = +static const union AnimCmd sAnim_MountainDisguiseReveal[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -796,15 +1011,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D404[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_MountainDisguise[] = +static const union AnimCmd *const sAnimTable_MountainDisguise[] = { - gFieldEffectObjectImageAnim_850D3FC, - gFieldEffectObjectImageAnim_850D404, + sAnim_MountainDisguise, + sAnim_MountainDisguiseReveal, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_MountainDisguise, gFieldEffectObjectPicTable_MountainDisguise, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_16x32, + .anims = sAnimTable_MountainDisguise, + .images = sPicTable_MountainDisguise, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateDisguiseFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_SandDisguisePlaceholder[] = { +static const struct SpriteFrameImage sPicTable_SandDisguisePlaceholder[] = { overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 2), @@ -814,70 +1037,102 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_SandDisguisePlaceholder overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 6), }; -const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_TreeDisguise, gFieldEffectObjectPicTable_SandDisguisePlaceholder, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_16x32, + .anims = sAnimTable_TreeDisguise, + .images = sPicTable_SandDisguisePlaceholder, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateDisguiseFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Bird[] = { +static const struct SpriteFrameImage sPicTable_Bird[] = { obj_frame_tiles(gFieldEffectObjectPic_Bird), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D49C[] = +static const union AnimCmd sAnim_Bird[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Bird[] = +static const union AnimCmd *const sAnimTable_Bird[] = { - gFieldEffectObjectImageAnim_850D49C, + sAnim_Bird, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x32, gFieldEffectObjectImageAnimTable_Bird, gFieldEffectObjectPicTable_Bird, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_32x32, + .anims = sAnimTable_Bird, + .images = sPicTable_Bird, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_ShortGrass[] = { +static const struct SpriteFrameImage sPicTable_ShortGrass[] = { overworld_frame(gFieldEffectObjectPic_ShortGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_ShortGrass, 2, 2, 1), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D4D0[] = +static const union AnimCmd sAnim_ShortGrass[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_ShortGrass[] = +static const union AnimCmd *const sAnimTable_ShortGrass[] = { - gFieldEffectObjectImageAnim_850D4D0, + sAnim_ShortGrass, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_ShortGrass, gFieldEffectObjectPicTable_ShortGrass, gDummySpriteAffineAnimTable, UpdateShortGrassFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_ShortGrass, + .images = sPicTable_ShortGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateShortGrassFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_HotSpringsWater[] = { +static const struct SpriteFrameImage sPicTable_HotSpringsWater[] = { obj_frame_tiles(gFieldEffectObjectPic_HotSpringsWater), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D500[] = +static const union AnimCmd sAnim_HotSpringsWater[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_HotSpringsWater[] = +static const union AnimCmd *const sAnimTable_HotSpringsWater[] = { - gFieldEffectObjectImageAnim_850D500, + sAnim_HotSpringsWater, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_HotSpringsWater, gFieldEffectObjectPicTable_HotSpringsWater, gDummySpriteAffineAnimTable, UpdateHotSpringsWaterFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_HotSpringsWater, + .images = sPicTable_HotSpringsWater, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateHotSpringsWaterFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_JumpOutOfAsh[] = { - overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 3), - overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 4), +static const struct SpriteFrameImage sPicTable_AshPuff[] = { + overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 4), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D54C[] = +static const union AnimCmd sAnim_AshPuff[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), @@ -887,33 +1142,33 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D54C[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_JumpOutOfAsh[] = +static const union AnimCmd *const sAnimTable_AshPuff[] = { - gFieldEffectObjectImageAnim_850D54C, + sAnim_AshPuff, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh = +const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff = { .tileTag = 0xFFFF, - .paletteTag = 0x100D, + .paletteTag = FLDEFF_PAL_TAG_ASH, .oam = &gObjectEventBaseOam_16x16, - .anims = gFieldEffectObjectImageAnimTable_JumpOutOfAsh, - .images = gFieldEffectObjectPicTable_JumpOutOfAsh, + .anims = sAnimTable_AshPuff, + .images = sPicTable_AshPuff, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_PopOutOfAsh + .callback = SpriteCB_AshPuff }; -const struct SpritePalette gFieldEffectObjectPaletteInfo2 = {gFieldEffectObjectPalette2, 0x100D}; +const struct SpritePalette gSpritePalette_Ash = {gFieldEffectPal_Ash, FLDEFF_PAL_TAG_ASH}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_LavaridgeGymWarp[] = { - overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 3), - overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 4), +static const struct SpriteFrameImage sPicTable_AshLaunch[] = { + overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 4), }; -const union AnimCmd gFieldEffectObjectImageAnim_LavaridgeGymWarp[] = +static const union AnimCmd sAnim_AshLaunch[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), @@ -923,23 +1178,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_LavaridgeGymWarp[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_LavaridgeGymWarp[] = +static const union AnimCmd *const sAnimTable_AshLaunch[] = { - gFieldEffectObjectImageAnim_LavaridgeGymWarp, + sAnim_AshLaunch, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_LavaridgeGymWarp = +const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch = { .tileTag = 0xFFFF, - .paletteTag = 0x100D, + .paletteTag = FLDEFF_PAL_TAG_ASH, .oam = &gObjectEventBaseOam_16x16, - .anims = gFieldEffectObjectImageAnimTable_LavaridgeGymWarp, - .images = gFieldEffectObjectPicTable_LavaridgeGymWarp, + .anims = sAnimTable_AshLaunch, + .images = sPicTable_AshLaunch, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_LavaridgeGymWarp + .callback = SpriteCB_AshLaunch }; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Bubbles[] = { +static const struct SpriteFrameImage sPicTable_Bubbles[] = { overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 2), @@ -950,7 +1205,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Bubbles[] = { overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 7), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D624[] = +static const union AnimCmd sAnim_Bubbles[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -963,19 +1218,27 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D624[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Bubbles[] = +static const union AnimCmd *const sAnimTable_Bubbles[] = { - gFieldEffectObjectImageAnim_850D624, + sAnim_Bubbles, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_Bubbles, gFieldEffectObjectPicTable_Bubbles, gDummySpriteAffineAnimTable, UpdateBubblesFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x32, + .anims = sAnimTable_Bubbles, + .images = sPicTable_Bubbles, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateBubblesFieldEffect, +}; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown35[] = { - overworld_frame(gFieldEffectObjectPic_Unknown35, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_Unknown35, 2, 2, 1), +static const struct SpriteFrameImage sPicTable_SmallSparkle[] = { + overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 1), }; -const union AnimCmd gFieldEffectObjectImageAnim_850D674[] = +static const union AnimCmd sAnim_SmallSparkle[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(1, 5), @@ -983,28 +1246,44 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D674[] = ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown35[] = +static const union AnimCmd *const sAnimTable_SmallSparkle[] = { - gFieldEffectObjectImageAnim_850D674, + sAnim_SmallSparkle, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown35 = {0xFFFF, 0x100F, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown35, gFieldEffectObjectPicTable_Unknown35, gDummySpriteAffineAnimTable, UpdateSparkleFieldEffect}; +const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_SMALL_SPARKLE, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_SmallSparkle, + .images = sPicTable_SmallSparkle, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSparkleFieldEffect, +}; -const struct SpritePalette gFieldEffectObjectPaletteInfo3 = {gFieldEffectObjectPalette3, 0x100F}; +const struct SpritePalette gSpritePalette_SmallSparkle = {gFieldEffectPal_SmallSparkle, FLDEFF_PAL_TAG_SMALL_SPARKLE}; -const union AnimCmd gFieldEffectObjectImageAnim_850D6A8[] = { +static const union AnimCmd sAnim_Rayquaza[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd *const gFieldEffectObjectImageAnimTable_Rayquaza[] = { - gFieldEffectObjectImageAnim_850D6A8, +static const union AnimCmd *const sAnimTable_Rayquaza[] = { + sAnim_Rayquaza, }; -const struct SpriteFrameImage gFieldEffectObjectPicTable_Rayquaza[] = { +const struct SpriteFrameImage sPicTable_Rayquaza[] = { overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 0), }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x32, gFieldEffectObjectImageAnimTable_Rayquaza, gFieldEffectObjectPicTable_Rayquaza, gDummySpriteAffineAnimTable, sub_8155F80}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_32x32, + .anims = sAnimTable_Rayquaza, + .images = sPicTable_Rayquaza, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateRayquazaSpotlightEffect, +}; -const struct SpritePalette gFieldEffectObjectPaletteInfoUnused = {gObjectEventPalette2, 0x1011}; +static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPalette2, FLDEFF_PAL_TAG_UNKNOWN}; diff --git a/src/data/graphics/slot_machine.h b/src/data/graphics/slot_machine.h index a94f2b622..6500ad7f3 100644 --- a/src/data/graphics/slot_machine.h +++ b/src/data/graphics/slot_machine.h @@ -2,21 +2,15 @@ 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 gSlotMachineInfoBox_Tilemap[] = INCBIN_U16("graphics/slot_machine/info_box.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 gSlotMachineReelTime_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time.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 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 u8 gSlotMachineReelSymbol1Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/1.4bpp"); const u8 gSlotMachineReelSymbol2Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/2.4bpp"); @@ -26,7 +20,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 +33,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 +44,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"); @@ -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/data/items.h b/src/data/items.h index 4d262e683..30beb5352 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/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 769a6bb0a..50fc6715c 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"); @@ -293,43 +293,43 @@ 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_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/jump_tall_grass.4bpp"); +const u32 gUnusedGrass3[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_3.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_UnusedGrass2[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_2.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"); 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_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_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"); -const u32 gFieldEffectObjectPic_BikeHopSmallSplash[] = 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_JumpSmallSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_small_splash.4bpp"); +const u32 gFieldEffectObjectPic_WaterSurfacing[] = INCBIN_U32("graphics/field_effects/pics/water_surfacing.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"); 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 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 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_Unknown35[] = INCBIN_U32("graphics/field_effects/pics/unknown_35.4bpp"); -const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/field_effects/palettes/03.gbapal"); +const u32 gFieldEffectObjectPic_SmallSparkle[] = INCBIN_U32("graphics/field_effects/pics/small_sparkle.4bpp"); +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/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 0a89f20c8..131ac13d9 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -3,2202 +3,2202 @@ const struct MonCoords gMonBackPicCoords[] = [SPECIES_NONE] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_BULBASAUR] = { .size = 0x64, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_IVYSAUR] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_VENUSAUR] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_CHARMANDER] = { .size = 0x65, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_CHARMELEON] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_CHARIZARD] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SQUIRTLE] = { .size = 0x65, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_WARTORTLE] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_BLASTOISE] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_CATERPIE] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_METAPOD] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_BUTTERFREE] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_WEEDLE] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_KAKUNA] = { .size = 0x46, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_BEEDRILL] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_PIDGEY] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_PIDGEOTTO] = { .size = 0x85, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_PIDGEOT] = { .size = 0x78, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_RATTATA] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_RATICATE] = { .size = 0x75, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_SPEAROW] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_FEAROW] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_EKANS] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_ARBOK] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_PIKACHU] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_RAICHU] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SANDSHREW] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_SANDSLASH] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_NIDORAN_F] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_NIDORINA] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_NIDOQUEEN] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_NIDORAN_M] = { .size = 0x56, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_NIDORINO] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_NIDOKING] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_CLEFAIRY] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_CLEFABLE] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_VULPIX] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_NINETALES] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_JIGGLYPUFF] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_WIGGLYTUFF] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ZUBAT] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_GOLBAT] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_ODDISH] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_GLOOM] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_VILEPLUME] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_PARAS] = { .size = 0x63, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_PARASECT] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_VENONAT] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_VENOMOTH] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_DIGLETT] = { .size = 0x54, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_DUGTRIO] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_MEOWTH] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_PERSIAN] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_PSYDUCK] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_GOLDUCK] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_MANKEY] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_PRIMEAPE] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_GROWLITHE] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ARCANINE] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_POLIWAG] = { .size = 0x74, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_POLIWHIRL] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_POLIWRATH] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_ABRA] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_KADABRA] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ALAKAZAM] = { .size = 0x67, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_MACHOP] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_MACHOKE] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_MACHAMP] = { .size = 0x67, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_BELLSPROUT] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_WEEPINBELL] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_VICTREEBEL] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_TENTACOOL] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_TENTACRUEL] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_GEODUDE] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_GRAVELER] = { .size = 0x75, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_GOLEM] = { .size = 0x84, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_PONYTA] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_RAPIDASH] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_SLOWPOKE] = { .size = 0x85, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_SLOWBRO] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_MAGNEMITE] = { .size = 0x43, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_MAGNETON] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_FARFETCHD] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_DODUO] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_DODRIO] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SEEL] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_DEWGONG] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_GRIMER] = { .size = 0x75, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_MUK] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_SHELLDER] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_CLOYSTER] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_GASTLY] = { .size = 0x85, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_HAUNTER] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_GENGAR] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_ONIX] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_DROWZEE] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_HYPNO] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_KRABBY] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_KINGLER] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_VOLTORB] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_ELECTRODE] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_EXEGGCUTE] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_EXEGGUTOR] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_CUBONE] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_MAROWAK] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_HITMONLEE] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_HITMONCHAN] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_LICKITUNG] = { .size = 0x65, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_KOFFING] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_WEEZING] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_RHYHORN] = { .size = 0x85, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_RHYDON] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_CHANSEY] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_TANGELA] = { .size = 0x85, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_KANGASKHAN] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_HORSEA] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SEADRA] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_GOLDEEN] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SEAKING] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_STARYU] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_STARMIE] = { .size = 0x85, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_MR_MIME] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_SCYTHER] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_JYNX] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_ELECTABUZZ] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MAGMAR] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_PINSIR] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_TAUROS] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_MAGIKARP] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_GYARADOS] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_LAPRAS] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_DITTO] = { .size = 0x54, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_EEVEE] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_VAPOREON] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_JOLTEON] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_FLAREON] = { .size = 0x67, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_PORYGON] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_OMANYTE] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_OMASTAR] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_KABUTO] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_KABUTOPS] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_AERODACTYL] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SNORLAX] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_ARTICUNO] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_ZAPDOS] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_MOLTRES] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_DRATINI] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_DRAGONAIR] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_DRAGONITE] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_MEWTWO] = { .size = 0x78, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_MEW] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_CHIKORITA] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_BAYLEEF] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MEGANIUM] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CYNDAQUIL] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_QUILAVA] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_TYPHLOSION] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_TOTODILE] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_CROCONAW] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_FERALIGATR] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SENTRET] = { .size = 0x67, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_FURRET] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_HOOTHOOT] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_NOCTOWL] = { .size = 0x68, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_LEDYBA] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_LEDIAN] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_SPINARAK] = { .size = 0x73, - .y_offset = 0x15, + .y_offset = 21, }, [SPECIES_ARIADOS] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_CROBAT] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_CHINCHOU] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_LANTURN] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_PICHU] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_CLEFFA] = { .size = 0x65, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_IGGLYBUFF] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_TOGEPI] = { .size = 0x54, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_TOGETIC] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_NATU] = { .size = 0x54, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_XATU] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MAREEP] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_FLAAFFY] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_AMPHAROS] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_BELLOSSOM] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_MARILL] = { .size = 0x75, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_AZUMARILL] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SUDOWOODO] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_POLITOED] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_HOPPIP] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_SKIPLOOM] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_JUMPLUFF] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_AIPOM] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SUNKERN] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SUNFLORA] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_YANMA] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_WOOPER] = { .size = 0x85, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_QUAGSIRE] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ESPEON] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_UMBREON] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_MURKROW] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SLOWKING] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MISDREAVUS] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN] = { .size = 0x36, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_WOBBUFFET] = { .size = 0x75, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_GIRAFARIG] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_PINECO] = { .size = 0x65, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_FORRETRESS] = { .size = 0x84, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_DUNSPARCE] = { .size = 0x85, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_GLIGAR] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_STEELIX] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SNUBBULL] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_GRANBULL] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_QWILFISH] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_SCIZOR] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SHUCKLE] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_HERACROSS] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SNEASEL] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_TEDDIURSA] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_URSARING] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_SLUGMA] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MAGCARGO] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SWINUB] = { .size = 0x63, - .y_offset = 0x15, + .y_offset = 21, }, [SPECIES_PILOSWINE] = { .size = 0x75, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_CORSOLA] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_REMORAID] = { .size = 0x75, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_OCTILLERY] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_DELIBIRD] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_MANTINE] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_SKARMORY] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_HOUNDOUR] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_HOUNDOOM] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_KINGDRA] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_PHANPY] = { .size = 0x65, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_DONPHAN] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_PORYGON2] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_STANTLER] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_SMEARGLE] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_TYROGUE] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_HITMONTOP] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_SMOOCHUM] = { .size = 0x56, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_ELEKID] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MAGBY] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_MILTANK] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_BLISSEY] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_RAIKOU] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_ENTEI] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_SUICUNE] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_LARVITAR] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_PUPITAR] = { .size = 0x67, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_TYRANITAR] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_LUGIA] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_HO_OH] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_CELEBI] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_OLD_UNOWN_B] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_C] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_D] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_E] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_F] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_G] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_H] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_I] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_J] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_K] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_L] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_M] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_N] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_O] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_P] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_Q] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_R] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_S] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_T] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_U] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_V] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_W] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_X] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_Y] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_OLD_UNOWN_Z] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_TREECKO] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_GROVYLE] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SCEPTILE] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_TORCHIC] = { .size = 0x67, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_COMBUSKEN] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_BLAZIKEN] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_MUDKIP] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_MARSHTOMP] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SWAMPERT] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_POOCHYENA] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_MIGHTYENA] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_ZIGZAGOON] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_LINOONE] = { .size = 0x85, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_WURMPLE] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_SILCOON] = { .size = 0x83, - .y_offset = 0x15, + .y_offset = 21, }, [SPECIES_BEAUTIFLY] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CASCOON] = { .size = 0x73, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_DUSTOX] = { .size = 0x83, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_LOTAD] = { .size = 0x75, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_LOMBRE] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_LUDICOLO] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SEEDOT] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_NUZLEAF] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SHIFTRY] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_NINCADA] = { .size = 0x83, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_NINJASK] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SHEDINJA] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_TAILLOW] = { .size = 0x64, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_SWELLOW] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SHROOMISH] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_BRELOOM] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SPINDA] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_WINGULL] = { .size = 0x85, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_PELIPPER] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_SURSKIT] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_MASQUERAIN] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_WAILMER] = { .size = 0x83, - .y_offset = 0x15, + .y_offset = 21, }, [SPECIES_WAILORD] = { .size = 0x83, - .y_offset = 0x16, + .y_offset = 22, }, [SPECIES_SKITTY] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_DELCATTY] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_KECLEON] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_BALTOY] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_CLAYDOL] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_NOSEPASS] = { .size = 0x85, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_TORKOAL] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SABLEYE] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_BARBOACH] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_WHISCASH] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_LUVDISC] = { .size = 0x46, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_CORPHISH] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_CRAWDAUNT] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_FEEBAS] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_MILOTIC] = { .size = 0x68, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_CARVANHA] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_SHARPEDO] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_TRAPINCH] = { .size = 0x75, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_VIBRAVA] = { .size = 0x74, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_FLYGON] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_MAKUHITA] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_HARIYAMA] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_ELECTRIKE] = { .size = 0x84, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_MANECTRIC] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_NUMEL] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_CAMERUPT] = { .size = 0x84, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_SPHEAL] = { .size = 0x64, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_SEALEO] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_WALREIN] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_CACNEA] = { .size = 0x85, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_CACTURNE] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_SNORUNT] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_GLALIE] = { .size = 0x85, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_LUNATONE] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_SOLROCK] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_AZURILL] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SPOINK] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_GRUMPIG] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_PLUSLE] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MINUN] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MAWILE] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_MEDITITE] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_MEDICHAM] = { .size = 0x68, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_SWABLU] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_ALTARIA] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_WYNAUT] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_DUSKULL] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_DUSCLOPS] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ROSELIA] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SLAKOTH] = { .size = 0x85, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_VIGOROTH] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SLAKING] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_GULPIN] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_SWALOT] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_TROPIUS] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_WHISMUR] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_LOUDRED] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_EXPLOUD] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_CLAMPERL] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_HUNTAIL] = { .size = 0x68, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_GOREBYSS] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_ABSOL] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_SHUPPET] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_BANETTE] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_SEVIPER] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_ZANGOOSE] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_RELICANTH] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_ARON] = { .size = 0x54, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_LAIRON] = { .size = 0x84, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_AGGRON] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_CASTFORM] = { .size = 0x45, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_VOLBEAT] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ILLUMISE] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_LILEEP] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_CRADILY] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_ANORITH] = { .size = 0x83, - .y_offset = 0x17, + .y_offset = 23, }, [SPECIES_ARMALDO] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_RALTS] = { .size = 0x45, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_KIRLIA] = { .size = 0x57, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_GARDEVOIR] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_BAGON] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SHELGON] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_SALAMENCE] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_BELDUM] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_METANG] = { .size = 0x84, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_METAGROSS] = { .size = 0x83, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_REGIROCK] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_REGICE] = { .size = 0x85, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_REGISTEEL] = { .size = 0x85, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_KYOGRE] = { .size = 0x84, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_GROUDON] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_RAYQUAZA] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_LATIAS] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_LATIOS] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_JIRACHI] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_DEOXYS] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_CHIMECHO] = { .size = 0x47, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_EGG] = { .size = 0x36, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN_B] = { .size = 0x56, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_UNOWN_C] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_UNOWN_D] = { .size = 0x56, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_UNOWN_E] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN_F] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN_G] = { .size = 0x57, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_UNOWN_H] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_UNOWN_I] = { .size = 0x37, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_UNOWN_J] = { .size = 0x46, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_UNOWN_K] = { .size = 0x57, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_UNOWN_L] = { .size = 0x46, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN_M] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_UNOWN_N] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_UNOWN_O] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_UNOWN_P] = { .size = 0x46, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN_Q] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_UNOWN_R] = { .size = 0x45, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_UNOWN_S] = { .size = 0x57, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_UNOWN_T] = { .size = 0x45, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_UNOWN_U] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_UNOWN_V] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_UNOWN_W] = { .size = 0x55, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_UNOWN_X] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_UNOWN_Y] = { .size = 0x46, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN_Z] = { .size = 0x46, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_UNOWN_EMARK] = { .size = 0x37, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_UNOWN_QMARK] = { .size = 0x47, - .y_offset = 0x06, + .y_offset = 6, }, }; diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index 19de9a7dd..b787877b9 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -3,2201 +3,2201 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_NONE] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_BULBASAUR] = { .size = 0x45, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_IVYSAUR] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_VENUSAUR] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_CHARMANDER] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_CHARMELEON] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_CHARIZARD] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SQUIRTLE] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_WARTORTLE] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_BLASTOISE] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CATERPIE] = { .size = 0x45, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_METAPOD] = { .size = 0x54, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_BUTTERFREE] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_WEEDLE] = { .size = 0x54, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_KAKUNA] = { .size = 0x45, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_BEEDRILL] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_PIDGEY] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_PIDGEOTTO] = { .size = 0x67, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_PIDGEOT] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_RATTATA] = { .size = 0x44, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_RATICATE] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_SPEAROW] = { .size = 0x45, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_FEAROW] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_EKANS] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_ARBOK] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_PIKACHU] = { .size = 0x67, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_RAICHU] = { .size = 0x67, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SANDSHREW] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_SANDSLASH] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_NIDORAN_F] = { .size = 0x45, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_NIDORINA] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_NIDOQUEEN] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_NIDORAN_M] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_NIDORINO] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_NIDOKING] = { .size = 0x78, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_CLEFAIRY] = { .size = 0x55, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_CLEFABLE] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_VULPIX] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_NINETALES] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_JIGGLYPUFF] = { .size = 0x45, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_WIGGLYTUFF] = { .size = 0x67, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ZUBAT] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_GOLBAT] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_ODDISH] = { .size = 0x45, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_GLOOM] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_VILEPLUME] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_PARAS] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_PARASECT] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_VENONAT] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_VENOMOTH] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_DIGLETT] = { .size = 0x54, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_DUGTRIO] = { .size = 0x75, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_MEOWTH] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_PERSIAN] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_PSYDUCK] = { .size = 0x56, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_GOLDUCK] = { .size = 0x78, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_MANKEY] = { .size = 0x65, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_PRIMEAPE] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_GROWLITHE] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_ARCANINE] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_POLIWAG] = { .size = 0x74, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_POLIWHIRL] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_POLIWRATH] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ABRA] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_KADABRA] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_ALAKAZAM] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_MACHOP] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_MACHOKE] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_MACHAMP] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_BELLSPROUT] = { .size = 0x65, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_WEEPINBELL] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_VICTREEBEL] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_TENTACOOL] = { .size = 0x46, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_TENTACRUEL] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_GEODUDE] = { .size = 0x54, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_GRAVELER] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_GOLEM] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_PONYTA] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_RAPIDASH] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SLOWPOKE] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_SLOWBRO] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MAGNEMITE] = { .size = 0x43, - .y_offset = 0x15, + .y_offset = 21, }, [SPECIES_MAGNETON] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_FARFETCHD] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_DODUO] = { .size = 0x57, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_DODRIO] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SEEL] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_DEWGONG] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_GRIMER] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_MUK] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SHELLDER] = { .size = 0x55, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_CLOYSTER] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_GASTLY] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_HAUNTER] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_GENGAR] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_ONIX] = { .size = 0x78, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_DROWZEE] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_HYPNO] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_KRABBY] = { .size = 0x65, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_KINGLER] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_VOLTORB] = { .size = 0x44, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_ELECTRODE] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_EXEGGCUTE] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_EXEGGUTOR] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CUBONE] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_MAROWAK] = { .size = 0x76, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_HITMONLEE] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_HITMONCHAN] = { .size = 0x67, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_LICKITUNG] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_KOFFING] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_WEEZING] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_RHYHORN] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_RHYDON] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_CHANSEY] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_TANGELA] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_KANGASKHAN] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_HORSEA] = { .size = 0x45, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_SEADRA] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_GOLDEEN] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SEAKING] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_STARYU] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_STARMIE] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_MR_MIME] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SCYTHER] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_JYNX] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_ELECTABUZZ] = { .size = 0x78, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_MAGMAR] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_PINSIR] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_TAUROS] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_MAGIKARP] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_GYARADOS] = { .size = 0x88, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_LAPRAS] = { .size = 0x85, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_DITTO] = { .size = 0x54, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_EEVEE] = { .size = 0x56, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_VAPOREON] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_JOLTEON] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_FLAREON] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_PORYGON] = { .size = 0x55, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_OMANYTE] = { .size = 0x45, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_OMASTAR] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_KABUTO] = { .size = 0x54, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_KABUTOPS] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_AERODACTYL] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SNORLAX] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_ARTICUNO] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_ZAPDOS] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_MOLTRES] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_DRATINI] = { .size = 0x75, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_DRAGONAIR] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_DRAGONITE] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_MEWTWO] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_MEW] = { .size = 0x55, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_CHIKORITA] = { .size = 0x75, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_BAYLEEF] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_MEGANIUM] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CYNDAQUIL] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_QUILAVA] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_TYPHLOSION] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_TOTODILE] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_CROCONAW] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_FERALIGATR] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SENTRET] = { .size = 0x47, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_FURRET] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_HOOTHOOT] = { .size = 0x55, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_NOCTOWL] = { .size = 0x58, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_LEDYBA] = { .size = 0x56, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_LEDIAN] = { .size = 0x67, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SPINARAK] = { .size = 0x54, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_ARIADOS] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_CROBAT] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CHINCHOU] = { .size = 0x75, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_LANTURN] = { .size = 0x87, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_PICHU] = { .size = 0x45, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_CLEFFA] = { .size = 0x44, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_IGGLYBUFF] = { .size = 0x44, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_TOGEPI] = { .size = 0x34, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_TOGETIC] = { .size = 0x46, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_NATU] = { .size = 0x44, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_XATU] = { .size = 0x47, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_MAREEP] = { .size = 0x55, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_FLAAFFY] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_AMPHAROS] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_BELLOSSOM] = { .size = 0x45, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_MARILL] = { .size = 0x65, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_AZUMARILL] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SUDOWOODO] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_POLITOED] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_HOPPIP] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SKIPLOOM] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_JUMPLUFF] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_AIPOM] = { .size = 0x58, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_SUNKERN] = { .size = 0x44, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_SUNFLORA] = { .size = 0x56, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_YANMA] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_WOOPER] = { .size = 0x54, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_QUAGSIRE] = { .size = 0x77, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_ESPEON] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_UMBREON] = { .size = 0x67, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MURKROW] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_SLOWKING] = { .size = 0x58, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_MISDREAVUS] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_UNOWN] = { .size = 0x35, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_WOBBUFFET] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_GIRAFARIG] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_PINECO] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_FORRETRESS] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_DUNSPARCE] = { .size = 0x74, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_GLIGAR] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_STEELIX] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SNUBBULL] = { .size = 0x55, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_GRANBULL] = { .size = 0x57, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_QWILFISH] = { .size = 0x56, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SCIZOR] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SHUCKLE] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_HERACROSS] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_SNEASEL] = { .size = 0x67, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_TEDDIURSA] = { .size = 0x45, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_URSARING] = { .size = 0x78, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SLUGMA] = { .size = 0x45, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_MAGCARGO] = { .size = 0x57, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_SWINUB] = { .size = 0x43, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_PILOSWINE] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_CORSOLA] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_REMORAID] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_OCTILLERY] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_DELIBIRD] = { .size = 0x56, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MANTINE] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SKARMORY] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_HOUNDOUR] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_HOUNDOOM] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_KINGDRA] = { .size = 0x78, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_PHANPY] = { .size = 0x54, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_DONPHAN] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_PORYGON2] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_STANTLER] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SMEARGLE] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_TYROGUE] = { .size = 0x46, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_HITMONTOP] = { .size = 0x67, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_SMOOCHUM] = { .size = 0x35, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_ELEKID] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_MAGBY] = { .size = 0x45, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_MILTANK] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_BLISSEY] = { .size = 0x77, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_RAIKOU] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_ENTEI] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SUICUNE] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_LARVITAR] = { .size = 0x46, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_PUPITAR] = { .size = 0x56, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_TYRANITAR] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_LUGIA] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_HO_OH] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CELEBI] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_OLD_UNOWN_B] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_C] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_D] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_E] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_F] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_G] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_H] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_I] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_J] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_K] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_L] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_M] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_N] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_O] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_P] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_Q] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_R] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_S] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_T] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_U] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_V] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_W] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_X] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_Y] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_OLD_UNOWN_Z] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_TREECKO] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_GROVYLE] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SCEPTILE] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_TORCHIC] = { .size = 0x56, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_COMBUSKEN] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_BLAZIKEN] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_MUDKIP] = { .size = 0x56, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_MARSHTOMP] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_SWAMPERT] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_POOCHYENA] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_MIGHTYENA] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_ZIGZAGOON] = { .size = 0x85, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_LINOONE] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_WURMPLE] = { .size = 0x45, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_SILCOON] = { .size = 0x75, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_BEAUTIFLY] = { .size = 0x86, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_CASCOON] = { .size = 0x74, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_DUSTOX] = { .size = 0x86, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_LOTAD] = { .size = 0x65, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_LOMBRE] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_LUDICOLO] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SEEDOT] = { .size = 0x46, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_NUZLEAF] = { .size = 0x56, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SHIFTRY] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_NINCADA] = { .size = 0x74, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_NINJASK] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SHEDINJA] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_TAILLOW] = { .size = 0x64, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_SWELLOW] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_SHROOMISH] = { .size = 0x54, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_BRELOOM] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SPINDA] = { .size = 0x68, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_WINGULL] = { .size = 0x84, - .y_offset = 0x18, + .y_offset = 24, }, [SPECIES_PELIPPER] = { .size = 0x77, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_SURSKIT] = { .size = 0x65, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_MASQUERAIN] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_WAILMER] = { .size = 0x75, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_WAILORD] = { .size = 0x87, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_SKITTY] = { .size = 0x66, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_DELCATTY] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_KECLEON] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_BALTOY] = { .size = 0x55, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_CLAYDOL] = { .size = 0x78, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_NOSEPASS] = { .size = 0x56, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_TORKOAL] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_SABLEYE] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_BARBOACH] = { .size = 0x46, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_WHISCASH] = { .size = 0x76, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_LUVDISC] = { .size = 0x46, - .y_offset = 0x18, + .y_offset = 24, }, [SPECIES_CORPHISH] = { .size = 0x66, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_CRAWDAUNT] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_FEEBAS] = { .size = 0x46, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_MILOTIC] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CARVANHA] = { .size = 0x67, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_SHARPEDO] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_TRAPINCH] = { .size = 0x54, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_VIBRAVA] = { .size = 0x86, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_FLYGON] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_MAKUHITA] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_HARIYAMA] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_ELECTRIKE] = { .size = 0x64, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_MANECTRIC] = { .size = 0x67, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_NUMEL] = { .size = 0x65, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_CAMERUPT] = { .size = 0x87, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SPHEAL] = { .size = 0x65, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_SEALEO] = { .size = 0x86, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_WALREIN] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_CACNEA] = { .size = 0x74, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_CACTURNE] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SNORUNT] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_GLALIE] = { .size = 0x76, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_LUNATONE] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SOLROCK] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_AZURILL] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_SPOINK] = { .size = 0x46, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_GRUMPIG] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_PLUSLE] = { .size = 0x56, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_MINUN] = { .size = 0x66, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_MAWILE] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_MEDITITE] = { .size = 0x65, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_MEDICHAM] = { .size = 0x68, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_SWABLU] = { .size = 0x76, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_ALTARIA] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_WYNAUT] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_DUSKULL] = { .size = 0x66, - .y_offset = 0x0a, + .y_offset = 10, }, [SPECIES_DUSCLOPS] = { .size = 0x77, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_ROSELIA] = { .size = 0x76, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_SLAKOTH] = { .size = 0x74, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_VIGOROTH] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SLAKING] = { .size = 0x86, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_GULPIN] = { .size = 0x55, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_SWALOT] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_TROPIUS] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_WHISMUR] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_LOUDRED] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_EXPLOUD] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_CLAMPERL] = { .size = 0x55, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_HUNTAIL] = { .size = 0x78, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_GOREBYSS] = { .size = 0x86, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_ABSOL] = { .size = 0x68, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_SHUPPET] = { .size = 0x56, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_BANETTE] = { .size = 0x55, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_SEVIPER] = { .size = 0x77, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ZANGOOSE] = { .size = 0x87, - .y_offset = 0x05, + .y_offset = 5, }, [SPECIES_RELICANTH] = { .size = 0x77, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_ARON] = { .size = 0x43, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_LAIRON] = { .size = 0x75, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_AGGRON] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_CASTFORM] = { .size = 0x34, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_VOLBEAT] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ILLUMISE] = { .size = 0x56, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_LILEEP] = { .size = 0x67, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_CRADILY] = { .size = 0x78, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_ANORITH] = { .size = 0x66, - .y_offset = 0x08, + .y_offset = 8, }, [SPECIES_ARMALDO] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_RALTS] = { .size = 0x35, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_KIRLIA] = { .size = 0x47, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_GARDEVOIR] = { .size = 0x78, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_BAGON] = { .size = 0x56, - .y_offset = 0x0b, + .y_offset = 11, }, [SPECIES_SHELGON] = { .size = 0x66, - .y_offset = 0x09, + .y_offset = 9, }, [SPECIES_SALAMENCE] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_BELDUM] = { .size = 0x55, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_METANG] = { .size = 0x87, - .y_offset = 0x07, + .y_offset = 7, }, [SPECIES_METAGROSS] = { .size = 0x87, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_REGIROCK] = { .size = 0x78, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_REGICE] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_REGISTEEL] = { .size = 0x88, - .y_offset = 0x03, + .y_offset = 3, }, [SPECIES_KYOGRE] = { .size = 0x87, - .y_offset = 0x04, + .y_offset = 4, }, [SPECIES_GROUDON] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_RAYQUAZA] = { .size = 0x88, - .y_offset = 0x00, + .y_offset = 0, }, [SPECIES_LATIAS] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_LATIOS] = { .size = 0x88, - .y_offset = 0x02, + .y_offset = 2, }, [SPECIES_JIRACHI] = { .size = 0x66, - .y_offset = 0x0d, + .y_offset = 13, }, [SPECIES_DEOXYS] = { .size = 0x88, - .y_offset = 0x01, + .y_offset = 1, }, [SPECIES_CHIMECHO] = { .size = 0x37, - .y_offset = 0x06, + .y_offset = 6, }, [SPECIES_EGG] = { .size = 0x33, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_UNOWN_B] = { .size = 0x34, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_UNOWN_C] = { .size = 0x44, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_UNOWN_D] = { .size = 0x44, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_UNOWN_E] = { .size = 0x44, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_UNOWN_F] = { .size = 0x44, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_UNOWN_G] = { .size = 0x35, - .y_offset = 0x0e, + .y_offset = 14, }, [SPECIES_UNOWN_H] = { .size = 0x44, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_UNOWN_I] = { .size = 0x34, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_UNOWN_J] = { .size = 0x34, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_UNOWN_K] = { .size = 0x44, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_UNOWN_L] = { .size = 0x34, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_UNOWN_M] = { .size = 0x44, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_UNOWN_N] = { .size = 0x43, - .y_offset = 0x14, + .y_offset = 20, }, [SPECIES_UNOWN_O] = { .size = 0x44, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_UNOWN_P] = { .size = 0x34, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_UNOWN_Q] = { .size = 0x43, - .y_offset = 0x15, + .y_offset = 21, }, [SPECIES_UNOWN_R] = { .size = 0x34, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_UNOWN_S] = { .size = 0x45, - .y_offset = 0x0c, + .y_offset = 12, }, [SPECIES_UNOWN_T] = { .size = 0x34, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_UNOWN_U] = { .size = 0x44, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_UNOWN_V] = { .size = 0x44, - .y_offset = 0x12, + .y_offset = 18, }, [SPECIES_UNOWN_W] = { .size = 0x44, - .y_offset = 0x13, + .y_offset = 19, }, [SPECIES_UNOWN_X] = { .size = 0x33, - .y_offset = 0x15, + .y_offset = 21, }, [SPECIES_UNOWN_Y] = { .size = 0x34, - .y_offset = 0x11, + .y_offset = 17, }, [SPECIES_UNOWN_Z] = { .size = 0x34, - .y_offset = 0x10, + .y_offset = 16, }, [SPECIES_UNOWN_EMARK] = { .size = 0x35, - .y_offset = 0x0f, + .y_offset = 15, }, [SPECIES_UNOWN_QMARK] = { .size = 0x35, - .y_offset = 0x0d, + .y_offset = 13, }, }; diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c index fe5d49e69..f887dafb9 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/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 3ca7a1cf7..5f249abad 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/easy_chat.c b/src/easy_chat.c index 44a7b90c1..c839c0070 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 ad839e006..a076a2a22 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -130,6 +130,9 @@ static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void oamt_npc_ministep_reset(struct Sprite *, u8, u8); +static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *); +static void InitSpriteForFigure8Anim(struct Sprite *sprite); +static bool8 AnimateSpriteInFigure8(struct Sprite *sprite); static void UpdateObjectEventSprite(struct Sprite *); const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; @@ -1122,13 +1125,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); @@ -1220,7 +1223,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; @@ -1233,13 +1235,11 @@ 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); SetObjectEventDynamicGraphicsId(objectEvent); -#ifndef NONMATCHING - asm("":::"r5", "r6"); -#endif if (gRangedMovementTypes[objectEvent->movementType]) { if (objectEvent->range.as_nybbles.x == 0) @@ -1949,7 +1949,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; @@ -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); +#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; +#endif // UBFIX + return obj->flagId; } static u16 GetObjectEventFlagIdByObjectEventId(u8 objectEventId) @@ -6868,15 +6874,15 @@ bool8 MovementAction_UnusedAcroActionRight_Step0(struct ObjectEvent *objectEvent return FALSE; } -void sub_8095AF0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +void InitFigure8Anim(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8097750(sprite); + InitSpriteForFigure8Anim(sprite); sprite->animPaused = 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; @@ -6888,14 +6894,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; @@ -8098,33 +8104,33 @@ 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) { 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) @@ -8395,7 +8401,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, @@ -8407,7 +8413,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, @@ -8419,57 +8425,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; - } - if(++sprite->data[6] == 0x48) + 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] == 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[] = { @@ -8950,7 +8956,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 +8967,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 +8984,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/faraway_island.c b/src/faraway_island.c index 06e47cd21..e3d8444c9 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -6,32 +6,33 @@ #include "metatile_behavior.h" #include "sprite.h" #include "constants/event_objects.h" +#include "constants/field_effects.h" #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; 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] = { - {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 +42,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 +55,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 +103,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 +112,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 +126,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 +152,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 +161,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 +174,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 +279,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 +289,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 +357,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,38 +368,41 @@ 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; 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; 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[FLDEFFOBJ_LONG_GRASS], 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 +410,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 +427,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 +438,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 +449,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 +460,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]; } diff --git a/src/field_camera.c b/src/field_camera.c index 038b6932e..57be52221 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 e41b5a69a..3684b53e6 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) { @@ -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) @@ -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 07579f55d..582551a7e 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -39,195 +39,197 @@ 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 u8 CreatePokeballGlowSprite(s16, s16, s16, u16); +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 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 FieldCallback_Fly(void); -static void task00_8084310(u8); -static void mapldr_08084390(void); -static void c3_080843F8(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); +static void FieldCallback_FlyIntoMap(void); +static void Task_FlyIntoMap(u8); static void Task_FallWarpFieldEffect(u8); -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 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 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_Dive(u8); -static bool8 dive_1_lock(struct Task *); -static bool8 dive_2_unknown(struct Task *); -static bool8 dive_3_unknown(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 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 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_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_Init(struct Task *); +static bool8 DiveFieldEffect_ShowMon(struct Task *); +static bool8 DiveFieldEffect_TryWarp(struct Task *); static void Task_LavaridgeGymB1FWarp(u8); -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 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_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 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_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 mapldr_080859D4(void); -static void sub_80B7E94(u8); - -static void sub_80B7EC4(struct Task *); -static void sub_80B7EE8(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 mapldr_08085D88(void); -static void sub_80B8250(u8); - -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 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 sub_80B8AE0(void); -static void sub_80B8B28(struct Task *); -static bool8 sub_80B8B38(struct Task *); -static bool8 sub_80B8BF0(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 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 sub_80B9128(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 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 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 sub_80B9BE8(u8 taskId); -static void sub_80B9DB8(struct Sprite* sprite); -static void Fldeff_MoveDeoxysRock_Step(u8 taskId); +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 EscapeRopeWarpOutEffect_Init(struct Task *); +static void EscapeRopeWarpOutEffect_Spin(struct Task *); + +static void FieldCallback_EscapeRopeWarpIn(void); +static void Task_EscapeRopeWarpIn(u8); +static void EscapeRopeWarpInEffect_Init(struct Task *); +static void EscapeRopeWarpInEffect_Spin(struct Task *); + +static void Task_TeleportWarpOut(u8); +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_Init(struct Task *); +static void TeleportWarpInFieldEffect_SpinEnter(struct Task *); +static void TeleportWarpInFieldEffect_SpinGround(struct Task *); + +static void Task_FieldMoveShowMonOutdoors(u8); +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 LoadFieldMoveOutdoorStreaksTilemap(u16); + +static void Task_FieldMoveShowMonIndoors(u8); +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 AnimateIndoorShowMonBg(struct Task *); +static bool8 SlideIndoorBannerOnscreen(struct Task *); +static bool8 SlideIndoorBannerOffscreen(struct Task *); + +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_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_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 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_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 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 Task_MoveDeoxysRock(u8 taskId); // Static RAM declarations @@ -240,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 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 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. -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"); - -// 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"); - -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 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 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"); + +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 *) = { @@ -281,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, @@ -295,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, @@ -309,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, @@ -323,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, + .data = sNewGameBirch_Pal, .tag = 0x1006 }; -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 = 0x1006, + .oam = &sOam_64x64, + .anims = sAnimTable_NewGameBirch, + .images = sPicTable_NewGameBirch, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -const struct SpritePalette gFieldEffectObjectPaletteInfo4 = +const struct SpritePalette gSpritePalette_PokeballGlow = { - .data = gFieldEffectObjectPalette4, - .tag = 0x1007 + .data = sPokeballGlow_Pal, + .tag = FLDEFF_PAL_TAG_POKEBALL_GLOW }; -const struct SpritePalette gFieldEffectObjectPaletteInfo5 = +const struct SpritePalette gSpritePalette_HofMonitor = { - .data = gFieldEffectObjectPalette5, - .tag = 0x1010 + .data = sHofMonitor_Pal, + .tag = FLDEFF_PAL_TAG_HOF_MONITOR }; -const struct OamData gOamData_855C26C = +static const struct OamData sOam_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -382,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, @@ -439,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, @@ -477,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[] = { @@ -504,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_POKEBALL_GLOW, + .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_GENERAL_0, + .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_HOF_MONITOR, + .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_HOF_MONITOR, + .oam = &sOam_32x16, + .anims = sAnimTable_HofMonitor, + .images = sPicTable_HofMonitorSmall, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HallOfFameMonitor }; -void (*const gUnknown_0855C364[])(struct Task *) = +void (*const sPokecenterHealEffectFuncs[])(struct Task *) = { - PokecenterHealEffect_0, - PokecenterHealEffect_1, - PokecenterHealEffect_2, - PokecenterHealEffect_3 + PokecenterHealEffect_Init, + PokecenterHealEffect_WaitForBallPlacement, + PokecenterHealEffect_WaitForBallFlashing, + PokecenterHealEffect_WaitForSoundAndEnd }; -void (*const gUnknown_0855C374[])(struct Task *) = +void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = { - HallOfFameRecordEffect_0, - HallOfFameRecordEffect_1, - HallOfFameRecordEffect_2, - HallOfFameRecordEffect_3 + HallOfFameRecordEffect_Init, + HallOfFameRecordEffect_WaitForBallPlacement, + HallOfFameRecordEffect_WaitForBallFlashing, + HallOfFameRecordEffect_WaitForSoundAndEnd }; -void (*const gUnknown_0855C384[])(struct Sprite *) = +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}, @@ -591,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_1, - FallWarpEffect_2, - FallWarpEffect_3, - FallWarpEffect_4, - FallWarpEffect_5, - FallWarpEffect_6, - FallWarpEffect_7, + FallWarpEffect_Init, + FallWarpEffect_WaitWeather, + FallWarpEffect_StartFall, + FallWarpEffect_Fall, + FallWarpEffect_Land, + FallWarpEffect_CameraShake, + FallWarpEffect_End, }; -bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task *) = +bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = { - EscalatorWarpEffect_1, - EscalatorWarpEffect_2, - EscalatorWarpEffect_3, - EscalatorWarpEffect_4, - EscalatorWarpEffect_5, - EscalatorWarpEffect_6, + EscalatorWarpOut_Init, + EscalatorWarpOut_WaitForPlayer, + EscalatorWarpOut_Up_Ride, + EscalatorWarpOut_Up_End, + EscalatorWarpOut_Down_Ride, + EscalatorWarpOut_Down_End, }; -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, + EscalatorWarpIn_Init, + EscalatorWarpIn_Down_Init, + EscalatorWarpIn_Down_Ride, + EscalatorWarpIn_Up_Init, + EscalatorWarpIn_Up_Ride, + EscalatorWarpIn_WaitForMovement, + EscalatorWarpIn_End, }; -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_Init, + WaterfallFieldEffect_ShowMon, + WaterfallFieldEffect_WaitForShowMon, + WaterfallFieldEffect_RideUp, + WaterfallFieldEffect_ContinueRideOrEnd, }; -bool8 (*const gUnknown_0855C42C[])(struct Task *) = +bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) = { - dive_1_lock, - dive_2_unknown, - dive_3_unknown, + DiveFieldEffect_Init, + DiveFieldEffect_ShowMon, + DiveFieldEffect_TryWarp, }; bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { - LavaridgeGymB1FWarpEffect_1, - LavaridgeGymB1FWarpEffect_2, - LavaridgeGymB1FWarpEffect_3, - LavaridgeGymB1FWarpEffect_4, - LavaridgeGymB1FWarpEffect_5, - LavaridgeGymB1FWarpEffect_6, + LavaridgeGymB1FWarpEffect_Init, + LavaridgeGymB1FWarpEffect_CameraShake, + LavaridgeGymB1FWarpEffect_Launch, + LavaridgeGymB1FWarpEffect_Rise, + LavaridgeGymB1FWarpEffect_FadeOut, + LavaridgeGymB1FWarpEffect_Warp, }; bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { - LavaridgeGymB1FWarpExitEffect_1, - LavaridgeGymB1FWarpExitEffect_2, - LavaridgeGymB1FWarpExitEffect_3, - LavaridgeGymB1FWarpExitEffect_4, + LavaridgeGymB1FWarpExitEffect_Init, + LavaridgeGymB1FWarpExitEffect_StartPopOut, + LavaridgeGymB1FWarpExitEffect_PopOut, + LavaridgeGymB1FWarpExitEffect_End, }; bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { - LavaridgeGym1FWarpEffect_1, - LavaridgeGym1FWarpEffect_2, - LavaridgeGym1FWarpEffect_3, - LavaridgeGym1FWarpEffect_4, - LavaridgeGym1FWarpEffect_5, + LavaridgeGym1FWarpEffect_Init, + LavaridgeGym1FWarpEffect_AshPuff, + LavaridgeGym1FWarpEffect_Disappear, + LavaridgeGym1FWarpEffect_FadeOut, + LavaridgeGym1FWarpEffect_Warp, }; -void (*const gEscapeRopeFieldEffectFuncs[])(struct Task *) = +void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) = { - EscapeRopeFieldEffect_Step0, - EscapeRopeFieldEffect_Step1, + EscapeRopeWarpOutEffect_Init, + EscapeRopeWarpOutEffect_Spin, }; -// .text - u32 FieldEffectStart(u8 id) { u8 *script; @@ -881,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; @@ -897,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) @@ -911,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; @@ -974,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; @@ -981,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; } @@ -993,38 +1014,38 @@ static void Task_PokecenterHeal(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - gUnknown_0855C364[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)); } @@ -1037,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; } @@ -1047,51 +1068,50 @@ static void Task_HallOfFameRecord(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - gUnknown_0855C374[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; @@ -1099,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) { - gUnknown_0855C384[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) - { - 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]--; + u8 spriteId; + if (sprite->sTimer == 0 || (--sprite->sTimer) == 0) + { + 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_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + phase = (sprite->sCounter + 2) & 3; + 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_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + phase = sprite->sCounter; + 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->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_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_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) { @@ -1256,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) { @@ -1288,37 +1308,51 @@ 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) { 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]; if (!task->data[0]) { if (!IsWeatherNotFadingIn()) - { return; - } + gFieldEffectArguments[0] = GetCursorSelectionMonId(); - if ((int)gFieldEffectArguments[0] > 5) - { + if ((int)gFieldEffectArguments[0] > PARTY_SIZE - 1) gFieldEffectArguments[0] = 0; - } + FieldEffectStart(FLDEFF_USE_FLY); task->data[0]++; } @@ -1327,18 +1361,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 +1381,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]; @@ -1368,6 +1402,15 @@ static void c3_080843F8(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(); @@ -1382,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_1(struct Task *task) +static bool8 FallWarpEffect_Init(struct Task *task) { struct ObjectEvent *playerObject; struct Sprite *playerSprite; @@ -1395,59 +1438,57 @@ static bool8 FallWarpEffect_1(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_2(struct Task *task) +static bool8 FallWarpEffect_WaitWeather(struct Task *task) { if (IsWeatherNotFadingIn()) - { - task->data[0]++; - } + task->tState++; + return FALSE; } -static bool8 FallWarpEffect_3(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_4(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) @@ -1456,37 +1497,36 @@ static bool8 FallWarpEffect_4(struct Task *task) objectEvent->triggerGroundEffectsOnStop = 1; objectEvent->landingJump = 1; sprite->pos2.y = 0; - task->data[0]++; + task->tState++; } return FALSE; } -static bool8 FallWarpEffect_5(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_6(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_7(struct Task *task) +static bool8 FallWarpEffect_End(struct Task *task) { gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); @@ -1497,89 +1537,100 @@ static bool8 FallWarpEffect_7(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_EscalatorWarpFieldEffect, priority); - gTasks[taskId].data[1] = 0; + taskId = CreateTask(Task_EscalatorWarpOut, priority); + gTasks[taskId].tGoingUp = FALSE; if (metatileBehavior == MB_UP_ESCALATOR) { - gTasks[taskId].data[1] = 1; + gTasks[taskId].tGoingUp = 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->tState](task)); } -static bool8 EscalatorWarpEffect_1(struct Task *task) +static bool8 EscalatorWarpOut_Init(struct Task *task) { FreezeObjectEvents(); CameraObjectReset2(); - sub_80E1558(task->data[1]); - task->data[0]++; + StartEscalator(task->tGoingUp); + task->tState++; return FALSE; } -static bool8 EscalatorWarpEffect_2(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 EscalatorWarpEffect_3(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 EscalatorWarpEffect_4(struct Task *task) +static bool8 EscalatorWarpOut_Up_End(struct Task *task) { - sub_80B6FB8(task); - sub_80B7060(); + RideUpEscalatorOut(task); + WarpAtEndOfEscalator(); return FALSE; } -static bool8 EscalatorWarpEffect_5(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 EscalatorWarpEffect_6(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]; @@ -1592,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]; @@ -1605,41 +1656,46 @@ 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) { - 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) +#undef tState +#undef tGoingUp + +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) +#define tState data[0] + +static void Task_EscalatorWarpIn(u8 taskId) { struct Task *task; task = &gTasks[taskId]; - while (gUnknown_0855C3FC[task->data[0]](task)); + while (sEscalatorWarpInFieldEffectFuncs[task->tState](task)); } -static bool8 sub_80B7114(struct Task *task) +static bool8 EscalatorWarpIn_Init(struct Task *task) { struct ObjectEvent *objectEvent; s16 x; @@ -1650,31 +1706,35 @@ static bool8 sub_80B7114(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 == 0x6b) + + if (behavior == MB_DOWN_ESCALATOR) { - behavior = 1; - task->data[0] = 3; - } else + // If dest is down escalator tile, player is riding up + behavior = TRUE; + task->tState = 3; // jump to EscalatorWarpIn_Up_Init + } + else // MB_UP_ESCALATOR { - behavior = 0; + // If dest is up escalator tile, player is riding down + behavior = FALSE; } - sub_80E1558(behavior); + StartEscalator(behavior); return TRUE; } -static bool8 sub_80B7190(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 sub_80B71D0(struct Task *task) +static bool8 EscalatorWarpIn_Down_Ride(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1689,22 +1749,22 @@ static bool8 sub_80B71D0(struct Task *task) { sprite->pos2.x = 0; sprite->pos2.y = 0; - task->data[0] = 5; + task->tState = 5; } return FALSE; } -static bool8 sub_80B7230(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 sub_80B7270(struct Task *task) +static bool8 EscalatorWarpIn_Up_Ride(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1719,23 +1779,23 @@ static bool8 sub_80B7270(struct Task *task) { sprite->pos2.x = 0; sprite->pos2.y = 0; - task->data[0]++; + task->tState++; } return FALSE; } -static bool8 sub_80B72D0(struct Task *task) +static bool8 EscalatorWarpIn_WaitForMovement(struct Task *task) { - if (sub_80E1584()) + if (IsEscalatorMoving()) { return FALSE; } - sub_80E1570(); - task->data[0]++; + StopEscalator(); + task->tState++; return TRUE; } -static bool8 sub_80B72F4(struct Task *task) +static bool8 EscalatorWarpIn_End(struct Task *task) { struct ObjectEvent *objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1744,104 +1804,113 @@ 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; } +#undef tState + +#define tState data[0] +#define tMonId data[1] + bool8 FldEff_UseWaterfall(void) { u8 taskId; - taskId = CreateTask(sub_80B7384, 0xff); - gTasks[taskId].data[1] = gFieldEffectArguments[0]; - sub_80B7384(taskId); + taskId = CreateTask(Task_UseWaterfall, 0xff); + gTasks[taskId].tMonId = gFieldEffectArguments[0]; + 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].tState](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])); } -static bool8 sub_80B73D0(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 waterfall_1_do_anim_probably(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 waterfall_2_wait_anim_finish_probably(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 sub_80B7450(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 sub_80B7478(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)) { - task->data[0] = 3; + // Still ascending waterfall, back to WaterfallFieldEffect_RideUp + task->tState = 3; return TRUE; } + ScriptContext2_Disable(); gPlayerAvatar.preventStep = FALSE; - DestroyTask(FindTaskIdByFunc(sub_80B7384)); + DestroyTask(FindTaskIdByFunc(Task_UseWaterfall)); FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); return FALSE; } +#undef tState +#undef tMonId + 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_Init(struct Task *task) { gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } -static bool8 dive_2_unknown(struct Task *task) +static bool8 DiveFieldEffect_ShowMon(struct Task *task) { ScriptContext2_Enable(); gFieldEffectArguments[0] = task->data[15]; @@ -1850,14 +1919,16 @@ static bool8 dive_2_unknown(struct Task *task) return FALSE; } -static bool8 dive_3_unknown(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)) { - 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 +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_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -1885,7 +1956,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_CameraShake(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1898,7 +1969,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_Launch(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { sprite->pos2.y = 0; task->data[3] = 1; @@ -1906,13 +1977,13 @@ static bool8 LavaridgeGymB1FWarpEffect_3(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_4(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]); @@ -1955,7 +2026,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_FadeOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -1963,7 +2034,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_Warp(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1989,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_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { CameraObjectReset2(); FreezeObjectEvents(); @@ -1999,7 +2070,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_StartPopOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (IsWeatherNotFadingIn()) { @@ -2007,13 +2078,13 @@ static bool8 LavaridgeGymB1FWarpExitEffect_2(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_3(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) @@ -2027,7 +2098,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_End(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -2039,23 +2110,21 @@ static bool8 LavaridgeGymB1FWarpExitEffect_4(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; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], 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 = 1; + 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) @@ -2068,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_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -2078,7 +2147,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_AshPuff(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -2088,7 +2157,7 @@ static bool8 LavaridgeGym1FWarpEffect_2(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 { @@ -2100,7 +2169,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_Disappear(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (gSprites[task->data[1]].animCmdIndex == 2) { @@ -2110,9 +2179,9 @@ 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_FadeOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) + if (!FieldEffectActiveListContains(FLDEFF_ASH_PUFF)) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -2121,7 +2190,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_Warp(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -2133,48 +2202,53 @@ static bool8 LavaridgeGym1FWarpEffect_5(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; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], 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 = 1; + 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(); FreezeObjectEvents(); - CreateTask(DoEscapeRopeFieldEffect, 0x50); + CreateTask(Task_EscapeRopeWarpOut, 80); } -static void DoEscapeRopeFieldEffect(u8 taskId) +static void Task_EscapeRopeWarpOut(u8 taskId) { - gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); + sEscapeRopeWarpOutEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void EscapeRopeFieldEffect_Step0(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 EscapeRopeFieldEffect_Step1(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(); @@ -2182,32 +2256,31 @@ static void EscapeRopeFieldEffect_Step1(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 = mapldr_080859D4; + gFieldCallback = FieldCallback_EscapeRopeWarpIn; SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(DoEscapeRopeFieldEffect)); - } else if (task->data[1] == 0 || (--task->data[1]) == 0) + DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpOut)); + } + 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 gUnknown_0855C484[])(struct Task *) = { - sub_80B7EC4, - sub_80B7EE8 +void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = { + EscapeRopeWarpInEffect_Init, + EscapeRopeWarpInEffect_Spin }; -static void mapldr_080859D4(void) +static void FieldCallback_EscapeRopeWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); @@ -2215,78 +2288,84 @@ 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]); + sEscapeRopeWarpInEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void sub_80B7EC4(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 sub_80B7EE8(struct Task *task) +static void EscapeRopeWarpInEffect_Spin(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) + 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(); UnfreezeObjectEvents(); - DestroyTask(FindTaskIdByFunc(sub_80B7E94)); + DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpIn)); 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; } -void CreateTeleportFieldEffectTask(void) +#undef tState +#undef tSpinDelay +#undef tNumTurns +#undef tTimer +#undef tStartDir + +#define tState data[0] + +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_Init, + TeleportWarpOutFieldEffect_SpinGround, + TeleportWarpOutFieldEffect_SpinExit, + TeleportWarpOutFieldEffect_End }; -static void ExecuteTeleportFieldEffectTask(u8 taskId) +static void Task_TeleportWarpOut(u8 taskId) { - sTeleportFieldEffectTasks[gTasks[taskId].data[0]](&gTasks[taskId]); + sTeleportWarpOutFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void TeleportFieldEffectTask1(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 TeleportFieldEffectTask2(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]; @@ -2298,7 +2377,7 @@ static void TeleportFieldEffectTask2(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; @@ -2306,7 +2385,7 @@ static void TeleportFieldEffectTask2(struct Task *task) } } -static void TeleportFieldEffectTask3(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]; @@ -2328,13 +2407,13 @@ static void TeleportFieldEffectTask3(struct Task *task) } if (task->data[4] >= 0xa8) { - task->data[0]++; + task->tState++; TryFadeOutOldMapMusic(); WarpFadeOutScreen(); } } -static void TeleportFieldEffectTask4(struct Task *task) +static void TeleportWarpOutFieldEffect_End(struct Task *task) { if (!gPaletteFade.active) { @@ -2349,13 +2428,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 +2443,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_Init, + TeleportWarpInFieldEffect_SpinEnter, + TeleportWarpInFieldEffect_SpinGround }; -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_Init(struct Task *task) { struct Sprite *sprite; s16 centerToCornerVecY; @@ -2397,9 +2476,9 @@ static void sub_80B8280(struct Task *task) } } -static void sub_80B830C(struct Task *task) +static void TeleportWarpInFieldEffect_SpinEnter(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 +2515,9 @@ static void sub_80B830C(struct Task *task) } } -static void sub_80B8410(struct Task *task) +static void TeleportWarpInFieldEffect_SpinGround(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,22 +2528,39 @@ static void sub_80B8410(struct Task *task) ScriptContext2_Disable(); CameraObjectReset1(); UnfreezeObjectEvents(); - DestroyTask(FindTaskIdByFunc(sub_80B8250)); + DestroyTask(FindTaskIdByFunc(Task_TeleportWarpIn)); } } } +// 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(sub_80B8554, 0xff); - } else - { - taskId = CreateTask(sub_80B88B4, 0xff); - } - gTasks[taskId].data[15] = sub_80B8C60(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + taskId = CreateTask(Task_FieldMoveShowMonOutdoors, 0xff); + else + taskId = CreateTask(Task_FieldMoveShowMonIndoors, 0xff); + + gTasks[taskId].tMonSpriteId = InitFieldMoveMonSprite(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); return FALSE; } @@ -2482,240 +2578,248 @@ 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_Init, + FieldMoveShowMonOutdoorsEffect_LoadGfx, + FieldMoveShowMonOutdoorsEffect_CreateBanner, + FieldMoveShowMonOutdoorsEffect_WaitForMon, + FieldMoveShowMonOutdoorsEffect_ShrinkBanner, + FieldMoveShowMonOutdoorsEffect_RestoreBg, + FieldMoveShowMonOutdoorsEffect_End, }; -static void sub_80B8554(u8 taskId) +static void Task_FieldMoveShowMonOutdoors(u8 taskId) { - gUnknown_0855C4A8[gTasks[taskId].data[0]](&gTasks[taskId]); + sFieldMoveShowMonOutdoorsEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void sub_80B8584(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]); - SetVBlankCallback(sub_80B880C); - task->data[0]++; + StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); + 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); + SetGpuReg(REG_OFFSET_WIN0V, task->tWinVert); + SetGpuReg(REG_OFFSET_WININ, task->tWinIn); + SetGpuReg(REG_OFFSET_WINOUT, task->tWinOut); + SetVBlankCallback(VBlankCB_FieldMoveShowMonOutdoors); + task->tState++; } -static void sub_80B85F8(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 sub_80B8660(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) - { - 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) + 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 < DISPLAY_HEIGHT / 4) + vertHi = DISPLAY_HEIGHT / 4; + + 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 == DISPLAY_HEIGHT / 4 && vertLo == DISPLAY_WIDTH / 2) { - gSprites[task->data[15]].callback = sub_80B8CC0; - task->data[0]++; + gSprites[task->tMonSpriteId].callback = SpriteCB_FieldMoveMonSlideOnscreen; + task->tState++; } } -static void sub_80B86EC(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 sub_80B871C(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 > DISPLAY_HEIGHT / 2) + vertHi = DISPLAY_HEIGHT / 2; + + if (vertLo < DISPLAY_HEIGHT / 2 + 1) + vertLo = DISPLAY_HEIGHT / 2 + 1; + + task->tWinVert = (vertHi << 8) | vertLo; + + if (vertHi == DISPLAY_HEIGHT / 2 && vertLo == DISPLAY_HEIGHT / 2 + 1) + task->tState++; } -static void sub_80B8770(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 = DISPLAY_WIDTH + 1; + task->tWinVert = DISPLAY_HEIGHT + 1; + task->tWinIn = task->data[11]; + task->tWinOut = task->data[12]; + task->tState++; } -static void overworld_bg_setup_2(struct Task *task) +static void FieldMoveShowMonOutdoorsEffect_End(struct Task *task) { IntrCallback callback; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); SetVBlankCallback(callback); - sub_8197200(); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); + InitTextBoxGfxAndPrinters(); + FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId); 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]); - 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 = gFieldMoveStreaksTilemap[i] | METATILE_ELEVATION_MASK; - } -} - -void (*const gUnknown_0855C4C4[])(struct Task *) = { - sub_80B88E4, - sub_80B8920, - sub_80B898C, - sub_80B89DC, - sub_80B8A0C, - sub_80B8A44, - sub_80B8A64, + dest = (u16 *)(VRAM + ARRAY_COUNT(sFieldMoveStreaksOutdoors_Tilemap) + offs); + for (i = 0; i < ARRAY_COUNT(sFieldMoveStreaksOutdoors_Tilemap); i++, dest++) + { + *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_Init, + FieldMoveShowMonIndoorsEffect_LoadGfx, + FieldMoveShowMonIndoorsEffect_SlideBannerOn, + FieldMoveShowMonIndoorsEffect_WaitForMon, + FieldMoveShowMonIndoorsEffect_RestoreBg, + FieldMoveShowMonIndoorsEffect_SlideBannerOff, + FieldMoveShowMonIndoorsEffect_End, }; -static void sub_80B88B4(u8 taskId) +static void Task_FieldMoveShowMonIndoors(u8 taskId) { - gUnknown_0855C4C4[gTasks[taskId].data[0]](&gTasks[taskId]); + sFieldMoveShowMonIndoorsEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void sub_80B88E4(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(sub_80B8AE0); - task->data[0]++; + SetVBlankCallback(VBlankCB_FieldMoveShowMonIndoors); + task->tState++; } -static void sub_80B8920(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 sub_80B898C(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]++; + 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++; } - sub_80B8B28(task); + AnimateIndoorShowMonBg(task); } -static void sub_80B89DC(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 sub_80B8A0C(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_RestoreBg(struct Task *task) { - sub_80B8B28(task); - task->data[3] = task->data[1] & 7; - task->data[4] = 0; - SetGpuReg(REG_OFFSET_WIN1H, 0xffff); - SetGpuReg(REG_OFFSET_WIN1V, 0xffff); - task->data[0]++; + AnimateIndoorShowMonBg(task); + task->tBgOffsetIdx = task->tBgHoriz & 7; + task->tBgOffset = 0; + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0xFF, 0xFF)); + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0xFF, 0xFF)); + task->tState++; } -static void sub_80B8A44(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 sub_80B8A64(struct Task *task) +static void FieldMoveShowMonIndoorsEffect_End(struct Task *task) { IntrCallback intrCallback; u16 bg0cnt; @@ -2723,231 +2827,248 @@ static void sub_80B8A64(struct Task *task) CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); SetVBlankCallback(intrCallback); - sub_8197200(); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); + InitTextBoxGfxAndPrinters(); + FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId); 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]); - 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, 320, 80, 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) <= DISPLAY_WIDTH / 2) { - sprite->pos1.x = 0x78; - sprite->data[1] = 30; - sprite->callback = sub_80B8D04; + sprite->pos1.x = DISPLAY_WIDTH / 2; + 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) - { - sprite->callback = sub_80B8D20; - } + if ((--sprite->sOnscreenTimer) == 0) + sprite->callback = SpriteCB_FieldMoveMonSlideOffscreen; } -static void sub_80B8D20(struct Sprite *sprite) +static void SpriteCB_FieldMoveMonSlideOffscreen(struct Sprite *sprite) { - if (sprite->pos1.x < -0x40) - { - sprite->data[7] = 1; - } + if (sprite->pos1.x < -64) + sprite->sSlidOffscreen = TRUE; else - { sprite->pos1.x -= 20; - } } +#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(sub_80B8D84, 0xff); - gTasks[taskId].data[15] = gFieldEffectArguments[0]; + u8 taskId = CreateTask(Task_SurfFieldEffect, 0xff); + gTasks[taskId].tMonId = 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_Init, + SurfFieldEffect_FieldMovePose, + SurfFieldEffect_ShowMon, + SurfFieldEffect_JumpOnSurfBlob, + SurfFieldEffect_End, }; -static void sub_80B8D84(u8 taskId) +static void Task_SurfFieldEffect(u8 taskId) { - gUnknown_0855C4E0[gTasks[taskId].data[0]](&gTasks[taskId]); + sSurfFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void sub_80B8DB4(struct Task *task) +static void SurfFieldEffect_Init(struct Task *task) { ScriptContext2_Enable(); FreezeObjectEvents(); gPlayerAvatar.preventStep = TRUE; - SetPlayerAvatarStateMask(8); - PlayerGetDestCoords(&task->data[1], &task->data[2]); - MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->data[1], &task->data[2]); - task->data[0]++; + SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING); + PlayerGetDestCoords(&task->tDestX, &task->tDestY); + MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->tDestX, &task->tDestY); + task->tState++; } -static void sub_80B8E14(struct Task *task) +static void SurfFieldEffect_FieldMovePose(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]++; + task->tState++; } } -static void sub_80B8E60(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 sub_80B8EA8(struct Task *task) +static void SurfFieldEffect_JumpOnSurfBlob(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]; - 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 sub_80B8F24(struct Task *task) +static void SurfFieldEffect_End(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); + SetSurfBobState(objectEvent->fieldEffectSpriteId, 1); UnfreezeObjectEvents(); ScriptContext2_Disable(); FieldEffectActiveListRemove(FLDEFF_USE_SURF); - DestroyTask(FindTaskIdByFunc(sub_80B8D84)); + DestroyTask(FindTaskIdByFunc(Task_SurfFieldEffect)); } } -u8 sub_80B8F98(void) +#undef tState +#undef tDestX +#undef tDestY +#undef tMonId + +u8 FldEff_RayquazaSpotlight(void) { u8 i, j, k; - u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[36], 0x78, -0x18, 1); + u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RAYQUAZA], 120, -24, 1); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; @@ -2961,7 +3082,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++) { @@ -2974,8 +3095,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; @@ -2983,18 +3104,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,214 +3125,224 @@ 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; npcSprite->pos2.y = 0; } + if (sprite->data[2] >= 0x80) - { FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); - } } +// 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(sub_80B91D4, 0xfe); - gTasks[taskId].data[1] = gFieldEffectArguments[0]; + u8 taskId = CreateTask(Task_FlyOut, 254); + gTasks[taskId].tMonId = 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_FieldMovePose, + FlyOutFieldEffect_ShowMon, + FlyOutFieldEffect_BirdLeaveBall, + FlyOutFieldEffect_WaitBirdLeave, + FlyOutFieldEffect_BirdSwoopDown, + FlyOutFieldEffect_JumpOnBird, + FlyOutFieldEffect_FlyOffWithBird, + FlyOutFieldEffect_WaitFlyOff, + FlyOutFieldEffect_End, }; -static void sub_80B91D4(u8 taskId) +static void Task_FlyOut(u8 taskId) { - gUnknown_0855C4F4[gTasks[taskId].data[0]](&gTasks[taskId]); + sFlyOutFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void sub_80B9204(struct Task *task) +static void FlyOutFieldEffect_FieldMovePose(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]++; + task->tState++; } } -static void sub_80B925C(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 sub_80B92A0(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->data[15] & 0x08) + 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 sub_80B92F8(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 sub_80B933C(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 sub_80B9390(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(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]); } - task->data[0]++; - task->data[2] = 0; + task->tState++; + task->tTimer = 0; } } -static void sub_80B9418(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 = 0; - objectEvent->hasShadow = 0; - sub_80B9560(task->data[1], objectEvent->spriteId); + objectEvent->inanimate = FALSE; + objectEvent->hasShadow = FALSE; + SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId); CameraObjectReset2(); - task->data[0]++; + task->tState++; } } -static void sub_80B9474(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 sub_80B9494(struct Task *task) +static void FlyOutFieldEffect_End(struct Task *task) { if (!gPaletteFade.active) { FieldEffectActiveListRemove(FLDEFF_USE_FLY); - DestroyTask(FindTaskIdByFunc(sub_80B91D4)); + DestroyTask(FindTaskIdByFunc(Task_FlyOut)); } } -static u8 sub_80B94C4(void) +static u8 CreateFlyBirdSprite(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; - 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 = DISPLAY_WIDTH / 2; + 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; @@ -3229,7 +3360,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); @@ -3237,15 +3368,15 @@ 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]]; - sprite1->coordOffsetEnabled = 0; + 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; sprite1->pos2.x = 0; @@ -3253,18 +3384,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; @@ -3293,7 +3424,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; @@ -3301,80 +3432,80 @@ 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(sub_80B97D4, 0xfe); + CreateTask(Task_FlyIn, 254); 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_BirdSwoopDown, + FlyInFieldEffect_FlyInWithBird, + FlyInFieldEffect_JumpOffBird, + FlyInFieldEffect_FieldMovePose, + FlyInFieldEffect_BirdReturnToBall, + FlyInFieldEffect_WaitBirdReturn, + FlyInFieldEffect_End, }; -static void sub_80B97D4(u8 taskId) +static void Task_FlyIn(u8 taskId) { - gUnknown_0855C550[gTasks[taskId].data[0]](&gTasks[taskId]); + sFlyInFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]); } -static void sub_80B9804(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->data[15] = gPlayerAvatar.flags; + task->tState++; + task->tTimer = 17; + 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); + SetSurfBobState(objectEvent->fieldEffectSpriteId, 0); } - ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0x3)); + 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 sub_80B98B8(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 sub_80B9924(struct Task *task) +static void FlyInFieldEffect_JumpOffBird(struct Task *task) { - s16 unknown_0855C56C[18] = { + s16 sYPositions[18] = { -2, -4, -5, @@ -3395,227 +3526,257 @@ 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) - { - task->data[0]++; - } + sprite->pos2.y = sYPositions[task->tTimer]; + + if ((++task->tTimer) >= (int)ARRAY_COUNT(sYPositions)) + task->tState++; } -static void sub_80B9978(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]; - 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]++; + task->tState++; } } -static void sub_80B99F0(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 sub_80B9A28(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 sub_80B9A60(struct Task *task) +static void FlyInFieldEffect_End(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; - sub_81555AC(objectEvent->fieldEffectSpriteId, 1); + state = PLAYER_AVATAR_STATE_SURFING; + SetSurfBobState(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) +#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(sub_80B9BE8, 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 { - FieldEffectActiveListRemove(0x41); + FieldEffectActiveListRemove(FLDEFF_DESTROY_DEOXYS_ROCK); } return FALSE; } -void sub_80B9B3C(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 gUnknown_0855C590[])(s16*, u8) = { - sub_80B9C28, - sub_80B9C54, - sub_80B9CDC, +#undef tShakeDelay +#undef tShakeUp +#undef tShake +#undef tEndDelay +#undef tEnding + +void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = { + DestroyDeoxysRockEffect_CameraShake, + DestroyDeoxysRockEffect_RockFragments, + DestroyDeoxysRockEffect_WaitAndEnd, }; -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); + sDestroyDeoxysRockEffectFuncs[tState](data, taskId); } -void sub_80B9C28(s16* data, u8 taskId) +static void DestroyDeoxysRockEffect_CameraShake(s16* data, u8 taskId) { - u8 newTaskId = CreateTask(sub_80B9B3C, 0x5A); + u8 newTaskId = CreateTask(Task_DeoxysRockCameraShake, 90); PlaySE(SE_T_KAMI2); - data[5] = newTaskId; - data[1]++; + tCameraTaskId = newTaskId; + tState++; } -void sub_80B9D24(struct Sprite*); - -void sub_80B9C54(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++; } } -void sub_80B9CDC(s16* a0, u8 taskId) +static void DestroyDeoxysRockEffect_WaitAndEnd(s16* data, u8 taskId) { - if (!gPaletteFade.active && !FuncIsActiveTask(sub_80B9B3C)) + if (!gPaletteFade.active && !FuncIsActiveTask(Task_DeoxysRockCameraShake)) { InstallCameraPanAheadCallback(); - RemoveObjectEventByLocalIdAndMap(a0[6], a0[7], a0[8]); - FieldEffectActiveListRemove(0x41); + 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 }; -void sub_80B9D24(struct Sprite* sprite) +static void CreateDeoxysRockFragments(struct Sprite* sprite) { int i; int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x; @@ -3623,7 +3784,7 @@ 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); @@ -3633,8 +3794,9 @@ 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: @@ -3654,11 +3816,11 @@ 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) > DISPLAY_WIDTH + 8 || sprite->pos1.y < -4 || sprite->pos1.y > DISPLAY_HEIGHT + 4) 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 +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(Fldeff_MoveDeoxysRock_Step, 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; @@ -3682,7 +3844,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 +3873,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 e02de959b..6929485c4 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]; SetSpritePosToOffsetMapCoords(&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,14 +341,14 @@ u32 FldEff_JumpTallGrass(void) struct Sprite *sprite; SetSpritePosToOffsetMapCoords((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]; 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; } @@ -381,7 +381,7 @@ u32 FldEff_LongGrass(void) x = gFieldEffectArguments[0]; y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&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,14 +444,14 @@ u32 FldEff_JumpLongGrass(void) struct Sprite *sprite; SetSpritePosToOffsetMapCoords((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]; 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; } @@ -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; SetSpritePosToOffsetMapCoords((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; SetSpritePosToOffsetMapCoords((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; SetSpritePosToOffsetMapCoords((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; SetSpritePosToOffsetMapCoords((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; SetSpritePosToOffsetMapCoords((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]; @@ -800,70 +800,70 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) } } -u32 FldEff_Unknown19(void) +u32 FldEff_UnusedGrass(void) { u8 spriteId; struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[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; } -u32 FldEff_Unknown20(void) +u32 FldEff_UnusedGrass2(void) { u8 spriteId; struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], 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_UNKNOWN_20; + sprite->data[0] = FLDEFF_UNUSED_GRASS_2; } return 0; } -u32 FldEff_Unknown21(void) +u32 FldEff_UnusedSand(void) { u8 spriteId; struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[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; } -u32 FldEff_Unknown22(void) +u32 FldEff_WaterSurfacing(void) { u8 spriteId; struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[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; } @@ -889,7 +889,7 @@ u32 FldEff_Ash(void) x = gFieldEffectArguments[0]; y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&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; SetSpritePosToOffsetMapCoords((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]; @@ -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; @@ -1107,14 +1108,14 @@ u32 FldEff_Dust(void) struct Sprite *sprite; SetSpritePosToOffsetMapCoords((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]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = 10; + sprite->data[1] = FLDEFF_DUST; } return 0; } @@ -1129,7 +1130,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 +1184,7 @@ u32 FldEff_Bubbles(void) struct Sprite *sprite; SetSpritePosToOffsetMapCoords((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 +1212,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void) struct Sprite *sprite; SetSpritePosToOffsetMapCoords((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 +1226,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 +1249,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 +1332,7 @@ u32 FldEff_Sparkle(void) gFieldEffectArguments[0] += 7; gFieldEffectArguments[1] += 7; SetSpritePosToOffsetMapCoords((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]; @@ -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, DISPLAY_WIDTH / 2 - (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 f5f6e99f7..6ad92c2fb 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -25,6 +25,7 @@ #include "constants/event_objects.h" #include "constants/event_object_movement.h" #include "constants/field_effects.h" +#include "constants/items.h" #include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" @@ -100,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); @@ -120,22 +121,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); @@ -319,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]; @@ -378,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; } @@ -423,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; } @@ -440,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(); @@ -452,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; } @@ -469,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); } @@ -518,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); } @@ -566,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 { @@ -868,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) @@ -884,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()) @@ -1327,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; } @@ -1403,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)); @@ -1422,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)); @@ -1649,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; } @@ -1669,26 +1670,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] @@ -1698,6 +1679,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 @@ -1705,6 +1687,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); @@ -1719,7 +1721,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; @@ -1727,24 +1729,32 @@ 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); - playerObjEvent->enableAnim = 1; - sub_808C15C(playerObjEvent->facingDirection); + playerObjEvent->enableAnim = TRUE; + SetPlayerAvatarFishing(playerObjEvent->facingDirection); task->tStep++; return FALSE; } -static bool8 Fishing3(struct Task *task) +static bool8 Fishing_WaitBeforeDots(struct Task *task) { AlignFishingAnimationFrames(); @@ -1755,7 +1765,7 @@ static bool8 Fishing3(struct Task *task) return FALSE; } -static bool8 Fishing4(struct Task *task) +static bool8 Fishing_InitDots(struct Task *task) { u32 randVal; @@ -1773,8 +1783,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[] = _("·"); @@ -1809,8 +1818,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; @@ -1830,34 +1838,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); @@ -1867,9 +1866,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++; @@ -1881,13 +1884,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(); @@ -1901,13 +1904,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)); @@ -1917,7 +1920,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(); @@ -1933,7 +1936,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); @@ -1947,14 +1950,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())); @@ -1964,8 +1966,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())); @@ -1975,15 +1976,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) @@ -1993,7 +1993,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++; @@ -2001,7 +2001,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)) @@ -2010,7 +2010,7 @@ static bool8 Fishing16(struct Task *task) ScriptContext2_Disable(); UnfreezeObjectEvents(); ClearDialogWindowAndFrame(0, TRUE); - sub_80ED950(0); + RecordFishingAttemptForTV(FALSE); DestroyTask(FindTaskIdByFunc(Task_Fishing)); } return FALSE; @@ -2052,7 +2052,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_region_map.c b/src/field_region_map.c index b442675f3..fc6f0fa76 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 53057fc31..fd64fd8e9 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,18 +35,14 @@ #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 sub_808115C(u8); +static void Task_DoContestHallWarp(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); @@ -291,19 +288,19 @@ void FieldCB_WarpExitFadeFromWhite(void) void FieldCB_WarpExitFadeFromBlack(void) { - if (!sub_81D6534()) // sub_81D6534 always returns false + if (!OnTrainerHillEReaderChallengeFloor()) // always false Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); SetUpWarpExitTask(); 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(); } @@ -314,7 +311,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) @@ -546,19 +543,20 @@ 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) { - sub_8085540(1); + SetObjectEventLoadFlag(SKIP_OBJECT_EVENT_LOAD); ScriptContext2_Enable(); SaveObjectEvents(); TryFadeOutOldMapMusic(); @@ -576,19 +574,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 +598,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 +729,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 +748,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 +762,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) @@ -976,7 +978,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(); } @@ -985,18 +987,18 @@ 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); } -static void task0A_mpl_807E31C(u8 taskId) +static void Task_TeleportTileWarpExit(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1053,7 +1055,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/field_special_scene.c b/src/field_special_scene.c index 3a3367957..bb8e8b1d9 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -73,11 +73,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. @@ -116,11 +116,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); } } @@ -147,9 +147,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); } } @@ -215,9 +215,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); @@ -229,9 +229,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); @@ -242,9 +242,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/field_specials.c b/src/field_specials.c index 86b929491..98643b26e 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -655,9 +655,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); } } @@ -672,83 +672,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; } } @@ -762,7 +762,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++) @@ -771,42 +771,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; } } @@ -816,11 +816,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) @@ -1095,30 +1095,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); @@ -1152,15 +1152,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(); @@ -1195,13 +1195,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; @@ -1215,8 +1215,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(); } @@ -1750,38 +1750,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 901535677..49b6fbdd8 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -51,26 +51,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. @@ -105,10 +105,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) @@ -380,11 +380,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; } } @@ -397,11 +397,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; } } @@ -529,7 +529,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); } } } @@ -584,7 +584,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; @@ -600,7 +600,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; } @@ -620,10 +620,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)) { @@ -692,7 +692,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/fieldmap.c b/src/fieldmap.c index cfc7018bd..49337ebbe 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) { @@ -741,7 +741,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: @@ -812,7 +812,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: @@ -853,7 +853,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: @@ -900,7 +900,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; @@ -912,7 +912,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; @@ -945,12 +946,12 @@ 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; } -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) { @@ -961,7 +962,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) { @@ -982,7 +983,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; @@ -1007,45 +1008,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 88927959e..34868342f 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, 0x1000}; +const struct SpritePalette gSpritePalette_CutGrass = {gFieldEffectPal_CutGrass, FLDEFF_PAL_TAG_CUT_GRASS}; static const struct SpriteTemplate sSpriteTemplate_CutGrass = { .tileTag = 0xFFFF, - .paletteTag = 0x1000, + .paletteTag = FLDEFF_PAL_TAG_CUT_GRASS, .oam = &sOamData_CutGrass, .anims = sSpriteAnimTable_CutGrass, .images = sSpriteImageTable_CutGrass, @@ -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; @@ -292,12 +292,12 @@ bool8 FldEff_UseCutOnGrass(void) static void FieldCallback_CutTree(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_FldEffCut); + ScriptContext1_SetupScript(EventScript_UseCut); } 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; @@ -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_dig.c b/src/fldeff_dig.c index ee5caa0df..c3ab989cd 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); @@ -37,16 +37,16 @@ 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; + 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_escalator.c b/src/fldeff_escalator.c index 10fb78ee2..7a96eaa82 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); + +#define ESCALATOR_STAGES 3 +#define LAST_ESCALATOR_STAGE (ESCALATOR_STAGES - 1) + +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 sEscalatorMetatiles_1F_1[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator1F_Tile1_Frame2, + METATILE_PokemonCenter_Escalator1F_Tile1_Frame1, + METATILE_PokemonCenter_Escalator1F_Tile1_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 sEscalatorMetatiles_1F_3[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator1F_Tile3_Frame2, + METATILE_PokemonCenter_Escalator1F_Tile3_Frame1, + METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 +}; - if (gTasks[taskId].data[2] == 0) +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 sEscalatorMetatiles_2F_1[ESCALATOR_STAGES] = { + METATILE_PokemonCenter_Escalator2F_Tile1_Frame0, + METATILE_PokemonCenter_Escalator2F_Tile1_Frame1, + METATILE_PokemonCenter_Escalator2F_Tile1_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] +#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 x = gTasks[taskId].tPlayerX - 1; + s16 y = gTasks[taskId].tPlayerY - 1; + s16 transitionStage = gTasks[taskId].tTransitionStage; + s16 i; + s16 j; + + // Check all the escalator sections and only progress the selected one to the next stage + if (!gTasks[taskId].tGoingUp) { - for (y = 0; y < 3; y++) + for (i = 0; i < 3; i++) { - for (x = 0; x < 3; x++) + for (j = 0; j < 3; j++) { - s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y); + s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i); - if (list[r4] == metatileId) + if (metatileIds[transitionStage] == metatileId) { - if (r4 != 2) - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[r4 + 1]); + if (transitionStage != LAST_ESCALATOR_STAGE) + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[transitionStage + 1]); else - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[0]); + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[0]); } } } } else { - for (y = 0; y < 3; y++) + for (i = 0; i < 3; i++) { - for (x = 0; x < 3; x++) + for (j = 0; j < 3; j++) { - s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y); + s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i); - if (list[2 - r4] == metatileId) + if (metatileIds[LAST_ESCALATOR_STAGE - transitionStage] == metatileId) { - if (r4 != 2) - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[1 - r4]); + if (transitionStage != LAST_ESCALATOR_STAGE) + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[1 - transitionStage]); else - MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[2]); + MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[LAST_ESCALATOR_STAGE]); } } } } } -static const u16 sElevatorMetatiles_1F_0[] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame0) -}; - -static const u16 sElevatorMetatiles_1F_1[] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame0) -}; - -static const u16 sElevatorMetatiles_1F_2[] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame0) -}; - -static const u16 sElevatorMetatiles_1F_3[] = { - METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame2), - METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame1), - METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame0) -}; - -static const u16 sElevatorMetatiles_2F_0[] = { - METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame0), - METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame1), - METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame2) -}; - -static const u16 sElevatorMetatiles_2F_1[] = { - METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame0), - METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame1), - METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame2) -}; - -static const u16 sElevatorMetatiles_2F_2[] = { - METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame0), - METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame1), - METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame2) -}; - -static void sub_80E1444(u8 taskId) +static void Task_DrawEscalator(u8 taskId) { s16 *data = gTasks[taskId].data; - data[3] = 1; + tDrawingEscalator = TRUE; - switch (data[0]) + // Set tile for each section of the escalator in sequence for current transition stage + switch (tState) { case 0: - sub_80E12E8(taskId, sElevatorMetatiles_1F_0, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_0, 0); break; case 1: - sub_80E12E8(taskId, sElevatorMetatiles_1F_1, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0); break; case 2: - sub_80E12E8(taskId, sElevatorMetatiles_1F_2, METATILE_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, METATILE_COLLISION_MASK); break; case 3: - sub_80E12E8(taskId, sElevatorMetatiles_1F_3, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0); break; case 4: - sub_80E12E8(taskId, sElevatorMetatiles_2F_0, METATILE_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, METATILE_COLLISION_MASK); break; case 5: - sub_80E12E8(taskId, sElevatorMetatiles_2F_1, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0); break; case 6: - sub_80E12E8(taskId, sElevatorMetatiles_2F_2, 0); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_2, 0); break; } - data[0] = (data[0] + 1) & 7; - if (!data[0]) + tState = (tState + 1) & 7; + + // If all metatiles of the escalator have been set, draw map and progress to next stage + if (tState == 0) { DrawWholeMapView(); - data[1] = (data[1] + 1) % 3; - data[3] = 0; + tTransitionStage = (tTransitionStage + 1) % ESCALATOR_STAGES; + tDrawingEscalator = FALSE; } } -static u8 sub_80E150C(u16 var) +static u8 CreateEscalatorTask(bool16 goingUp) { - u8 taskId = CreateTask(sub_80E1444, 0); + u8 taskId = CreateTask(Task_DrawEscalator, 0); s16 *data = gTasks[taskId].data; - PlayerGetDestCoords(&data[4], &data[5]); - data[0] = 0; - data[1] = 0; - data[2] = var; - sub_80E1444(taskId); + 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 3cb91d4b1..2d25928b8 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; @@ -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 410af9fdd..6db44d752 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -27,68 +27,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 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 gUnusedEmptySpace_858DBF8[32] = {0}; - -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 void SpriteCB_SandPillar_BreakTop(struct Sprite *); +static void SpriteCB_SandPillar_BreakBase(struct Sprite *); +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/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/secret_power_plant.gbapal"); + +// 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"); + +static const struct OamData sOam_SecretPower = { .y = 0, .x = 0, @@ -100,7 +86,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), @@ -110,7 +96,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), @@ -120,7 +106,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), @@ -130,7 +116,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), @@ -140,7 +126,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), @@ -150,7 +136,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), @@ -160,88 +146,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 = 0x1003, - .oam = &gOamData_858E4D8, - .anims = gSpriteAnimTable_858E570, - .images = gUnknown_858E588, + .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_TREE, + .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 = 0x1008, - .oam = &gOamData_858E4D8, - .anims = gSpriteAnimTable_858E574, - .images = gUnknown_858E5B0, + .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT, + .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 = 0x1008, - .oam = &gOamData_858E4D8, - .anims = gSpriteAnimTable_858E584, - .images = gUnknown_858E5D8, + .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT, + .oam = &sOam_SecretPower, + .anims = sAnimTable_SecretPowerShrub, + .images = sPicTable_SecretPowerShrub, .affineAnims = gDummySpriteAffineAnimTable, - .callback = ShrubEntranceSpriteCallback1, + .callback = SpriteCB_ShrubEntranceInit, }; -const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, 0x1003}; -const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, 0x1008}; +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 gOamData_858E658 = +static const struct OamData sOam_SandPillar = { .x = 0, .y = 0, @@ -253,7 +240,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), @@ -261,47 +248,44 @@ 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, sizeof(sSandPillar0_Gfx)}, + {sSandPillar1_Gfx, sizeof(sSandPillar1_Gfx)}, + {sSandPillar2_Gfx, sizeof(sSandPillar2_Gfx)}, }; -static const struct SpriteTemplate gUnknown_0858E68C = +static const struct SpriteTemplate sSpriteTemplate_SandPillar = { .tileTag = 0xFFFF, - .paletteTag = 0x100E, - .oam = &gOamData_858E658, - .anims = gSpriteAnimTable_858E670, - .images = gUnknown_0858E674, + .paletteTag = FLDEFF_PAL_TAG_SAND_PILLAR, + .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], 0x100E}; +const struct SpritePalette gSpritePalette_SandPillar = {gTilesetPalettes_SecretBase[5], FLDEFF_PAL_TAG_SAND_PILLAR}; -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, 0x1000}; +static const struct SpritePalette sSpritePalette_RecordMixLights = {sRecordMixLights_Pal, 0x1000}; -static const union AnimCmd gSpriteAnim_858E86C[] = +static const union AnimCmd sAnim_RecordMixLights[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -309,173 +293,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 = 0x1000, .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) +#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] + +static void CreateComputerScreenEffectTask(void (*taskfunc) (u8), u16 increment, u16 unused, u8 priority) { - u8 taskId = CreateTask(taskfunc, a3); + u8 taskId = CreateTask(taskfunc, priority); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = a1 == 0 ? 16 : a1; - gTasks[taskId].data[2] = a1 == 0 ? 20 : a1; + 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: @@ -485,9 +478,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); @@ -496,7 +499,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]) { @@ -589,7 +592,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; @@ -606,22 +609,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) { @@ -631,11 +634,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(); @@ -649,7 +652,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; @@ -675,7 +678,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); @@ -686,16 +689,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]++; @@ -705,11 +708,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(); @@ -723,7 +726,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; @@ -741,7 +744,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); @@ -749,15 +752,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) { @@ -769,16 +772,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; @@ -787,9 +794,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; } @@ -798,30 +805,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; @@ -891,12 +902,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; } @@ -1009,7 +1020,7 @@ void DoSecretBaseGlitterMatSparkle(void) SetSpritePosToOffsetMapCoords(&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; @@ -1033,7 +1044,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); @@ -1041,7 +1052,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); @@ -1049,7 +1060,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); @@ -1057,7 +1068,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); @@ -1068,7 +1079,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); @@ -1082,10 +1093,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) { @@ -1096,11 +1107,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(); @@ -1166,12 +1177,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; @@ -1223,25 +1235,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)) { - sub_808C228(GetPlayerFacingDirection()); + // 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]; @@ -1249,15 +1262,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); @@ -1266,16 +1279,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) { @@ -1292,13 +1306,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 614fa6135..0c35ec74e 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -20,12 +20,13 @@ #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 sub_8135714(void); +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 FieldMove_RockSmash(void); // text bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) @@ -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_Init, 8); } -static void task08_080C9820(u8 taskId) +static void Task_DoFieldMove_Init(u8 taskId) { u8 objEventId; @@ -64,56 +65,61 @@ static void task08_080C9820(u8 taskId) { if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) { + // Skip field move pose underwater FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = sub_8135578; + gTasks[taskId].func = Task_DoFieldMove_WaitForMon; } else { - sub_808C114(); + // Do field move pose + SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); - gTasks[taskId].func = sub_813552C; + gTasks[taskId].func = Task_DoFieldMove_ShowMonAfterPose; } } } -static void sub_813552C(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 = sub_8135578; + gTasks[taskId].func = Task_DoFieldMove_WaitForMon; } } -static void sub_8135578(u8 taskId) +static void Task_DoFieldMove_WaitForMon(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_RunFunc; } } -static void sub_813561C(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, @@ -128,7 +134,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,23 +143,24 @@ bool8 SetUpFieldMove_RockSmash(void) } } -static void sub_81356C4(void) +static void FieldCallback_RockSmash(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_FldEffRockSmash); + ScriptContext1_SetupScript(EventScript_UseRockSmash); } 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; + 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/fldeff_strength.c b/src/fldeff_strength.c index f479ef68d..61960d0ff 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 = oei_task_add(); - gTasks[taskId].data[8] = (u32)sub_8145E74 >> 16; - gTasks[taskId].data[9] = (u32)sub_8145E74; + u8 taskId = CreateFieldMoveTask(); + 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(); diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 788310b5d..1ee82674e 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 cbf8ee6cc..3f087e5da 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 bf9850dec..f4c971b0b 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -824,7 +824,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++; } @@ -834,7 +834,7 @@ void CB2_DoHallOfFamePC(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - if (!sub_80F9C1C()) + if (!IsComputerScreenOpenEffectActive()) gMain.state++; break; case 5: @@ -1048,13 +1048,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; @@ -1324,7 +1324,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 591ebe018..ae09ec7ed 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/item_use.c b/src/item_use.c index 0aae441c8..2c9ffaf32 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -397,7 +397,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) { @@ -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 ddcad0fe9..ebf02bab6 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/menu.c b/src/menu.c index 7c90c4d93..ac2f7d85b 100644 --- a/src/menu.c +++ b/src/menu.c @@ -56,9 +56,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"); @@ -153,7 +153,7 @@ void FreeAllOverworldWindowBuffers(void) FreeAllWindowBuffers(); } -void sub_8197200(void) +void InitTextBoxGfxAndPrinters(void) { ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -1736,48 +1736,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) @@ -1786,13 +1786,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; } @@ -1805,7 +1805,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) @@ -1813,7 +1813,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/mirage_tower.c b/src/mirage_tower.c index e2f5cefb7..c1323c784 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -109,24 +109,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[] = @@ -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; } @@ -691,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/move_relearner.c b/src/move_relearner.c index 8c4cf7b2e..1c863804b 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 84b540e99..ab38db745 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -346,7 +346,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 ea0d633bc..2946c7d68 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,58 +84,36 @@ #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 mli4_mapscripts_and_other(void); +static void DoMapLoadLoop(u8 *state); +static bool32 LoadMapInStepsLocal(u8 *state, bool32); +static bool32 LoadMapInStepsLink(u8 *state); +static bool32 ReturnToFieldLocal(u8 *state); +static bool32 ReturnToFieldLink(u8 *state); +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 sub_8086A80(void); +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); @@ -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[] = @@ -547,11 +520,11 @@ void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType) } } -static void mapdata_load_assets_to_gpu_and_full_redraw(void) +static void InitMapView(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) @@ -963,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; @@ -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) { @@ -1444,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()) @@ -1456,7 +1433,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) } else { - player_step(inputStruct.dpadDirection, newKeys, heldKeys); + PlayerStep(inputStruct.dpadDirection, newKeys, heldKeys); } } } @@ -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); } @@ -1746,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(); @@ -1812,7 +1789,7 @@ static void InitCurrentFlashLevelScanlineEffect(void) } } -static bool32 map_loading_iteration_3(u8 *state) +static bool32 LoadMapInStepsLink(u8 *state) { switch (*state) { @@ -1820,47 +1797,47 @@ static bool32 map_loading_iteration_3(u8 *state) InitOverworldBgs(); ScriptContext1_Init(); ScriptContext2_Disable(); - sub_80867C8(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); (*state)++; break; case 1: - mli0_load_map(1); + LoadMapFromWarp(TRUE); (*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; 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,51 +1868,51 @@ 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: - sub_80867C8(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); (*state)++; break; case 2: - sub_8086988(a2); + ResumeMap(a2); (*state)++; break; case 3: - mli4_mapscripts_and_other(); - sub_8086A80(); + InitObjectEventsLocal(); + 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,25 +1940,25 @@ 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(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); - sub_8086988(0); + ResumeMap(FALSE); sub_8086A68(); - sub_8086A80(); + SetCameraToTrackPlayer(); (*state)++; break; case 1: - sub_8086860(); - sub_81D64C0(); + InitViewGraphics(); + TryLoadTrainerHillEReaderPalette(); (*state)++; break; case 2: - if (map_post_load_hook_exec()) + if (RunFieldCallback()) (*state)++; break; case 3: @@ -1991,18 +1968,18 @@ static bool32 sub_8086638(u8 *state) return FALSE; } -static bool32 map_loading_iteration_2_link(u8 *state) +static bool32 ReturnToFieldLink(u8 *state) { switch (*state) { case 0: FieldClearVBlankHBlankCallbacks(); - sub_80867C8(); + ResetMirageTowerAndSaveBlockPtrs(); sub_80867D8(); (*state)++; break; case 1: - sub_8086988(1); + ResumeMap(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,12 +2045,12 @@ 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) +static void ResetMirageTowerAndSaveBlockPtrs(void) { ClearMirageTowerPulseBlend(); MoveSaveBlocks_ResetHeap(); @@ -2090,17 +2067,17 @@ static void sub_80867D8(void) LoadOam(); } -static void sub_8086860(void) +static void InitViewGraphics(void) { InitCurrentFlashLevelScanlineEffect(); InitOverworldGraphicsRegisters(); - sub_8197200(); - mapdata_load_assets_to_gpu_and_full_redraw(); + InitTextBoxGfxAndPrinters(); + InitMapView(); } 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 ResumeMap(bool32 a1) { ResetTasks(); ResetSpriteData(); @@ -2156,7 +2133,7 @@ static void sub_8086988(u32 a1) TryStartMirageTowerPulseBlendEffect(); } -static void sub_80869DC(void) +static void InitObjectEventsLink(void) { gTotalCameraPixelOffsetX = 0; gTotalCameraPixelOffsetY = 0; @@ -2165,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; @@ -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); } @@ -2206,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; @@ -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(); @@ -3212,7 +3189,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 d5bc6dfb6..f61cbc5e6 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -462,7 +462,7 @@ static void CB2_UpdatePartyMenu(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } @@ -489,7 +489,7 @@ static bool8 ShowPartyMenu(void) case 0: SetVBlankHBlankCallbacksToNull(); ResetVramOamAndBgCntRegs(); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 1: @@ -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 fc0bd9f4c..2010d84f8 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/pokeblock.c b/src/pokeblock.c index 506c5e4c4..f654e0782 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 fa29ca981..e15a005e6 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/pokedex.c b/src/pokedex.c index 0541f3f2e..777cc52cd 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/pokemon.c b/src/pokemon.c index 6561e653b..44b5e55bb 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4628,7 +4628,7 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[battlerId].status2 = 0; - sub_803FA70(battlerId); + UpdateSentPokesToOpponentValue(battlerId); ClearTemporarySpeciesSpriteData(battlerId, FALSE); } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 703371ba9..59dc0acce 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); @@ -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/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e8b30f773..a3efe09d7 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 d902b7319..986a2d3a2 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/record_mixing.c b/src/record_mixing.c index 075bc6aee..ad8b5693c 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -326,7 +326,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); @@ -336,7 +336,7 @@ static void Task_RecordMixing_Main(u8 taskId) { tState = 2; FlagSet(FLAG_SYS_MIX_RECORD); - DestroyRecordMixingSprite(); + DestroyRecordMixingLights(); DestroyTask(tSndEffTaskId); } break; diff --git a/src/region_map.c b/src/region_map.c index b8e07c835..de3b04cb2 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1683,7 +1683,7 @@ void CB2_OpenFlyMap(void) break; case 3: LoadUserWindowBorderGfx(0, 0x65, 0xd0); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); gMain.state++; break; case 4: @@ -1746,7 +1746,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 2756aa861..c948cde4c 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 58e120cb5..1015687af 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 } }; @@ -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/save_failed_screen.c b/src/save_failed_screen.c index a2a2acc8d..7c824e82d 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/src/scrcmd.c b/src/scrcmd.c index 4a7f4ea73..643809789 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) @@ -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; } diff --git a/src/secret_base.c b/src/secret_base.c index 83626710f..3f69e0419 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(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/shop.c b/src/shop.c index 837ba1bca..4fc44beee 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/slot_machine.c b/src/slot_machine.c index d1cb05b18..8669b543b 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,225 @@ #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[]; - -struct SlotMachineEwramStruct +#define SLOTMACHINE_GFX_TILES 233 +#define MAX_BET 3 + +#define SYMBOLS_PER_REEL 21 +#define REEL_SYMBOL_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) + +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) + +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, +}; + +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, + MATCH_TOP_ROW, + MATCH_BOTTOM_ROW, + MATCH_NWSE_DIAG, + MATCH_NESW_DIAG, + NUM_MATCH_LINES, +}; + +enum { + LEFT_REEL, + MIDDLE_REEL, + RIGHT_REEL, + NUM_REELS, +}; + +enum { + SLOT_ACTION_UNFADE, + 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_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, + 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, +}; + +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 +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 +}; + +// 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, + 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; @@ -42,11 +243,11 @@ struct SlotMachineEwramStruct /*0x03*/ u8 luckyGame; /*0x04*/ u8 luckyFlags; /*0x05*/ u8 reelTimeDraw; - /*0x06*/ u8 luckySpinsLeft; // tentative + /*0x06*/ u8 isLuckySpin; /*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 +256,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]; - /*0x2E*/ s16 reelExtraTurns[3]; - /*0x34*/ s16 winnerRows[3]; - /*0x3A*/ u8 slotReelTasks[3]; - /*0x3D*/ u8 unkTaskPointer3D; - /*0x3E*/ u8 unkTaskPointer3E; - /*0x3F*/ u8 reelTimeSprite3F; - /*0x40*/ u8 unk40; - /*0x41*/ u8 unk41; - /*0x42*/ u8 unk42; - /*0x43*/ u8 unk43; - /*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]; + /*0x1C*/ s16 reelPixelOffsets[NUM_REELS]; + /*0x22*/ u16 reelPixelOffsetsWhileStopping[NUM_REELS]; + /*0x28*/ s16 reelPositions[NUM_REELS]; + /*0x2E*/ s16 reelExtraTurns[NUM_REELS]; + /*0x34*/ s16 winnerRows[NUM_REELS]; + /*0x3A*/ u8 slotReelTasks[NUM_REELS]; + /*0x3D*/ u8 digDisplayTaskId; + /*0x3E*/ u8 pikaPowerBoltTaskId; + /*0x3F*/ u8 reelTimePikachuSpriteId; + /*0x40*/ u8 reelTimeNumberGapSpriteId; + /*0x41*/ u8 reelTimeExplosionSpriteId; + /*0x42*/ u8 reelTimeBrokenMachineSpriteId; + /*0x43*/ u8 reelTimeSmokeSpriteId; + /*0x44*/ u8 flashMatchLineSpriteIds[NUM_MATCH_LINES]; + /*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,66 +284,62 @@ struct SlotMachineEwramStruct /*0x64*/ MainCallback prevMainCb; }; -struct UnkStruct1 +struct DigitalDisplaySprite { - /*0x00*/ u8 unk00; - /*0x01*/ u8 unk01; - /*0x02*/ s16 unk02; + /*0x00*/ u8 spriteTemplateId; + /*0x01*/ u8 dispInfoId; + /*0x02*/ s16 spriteId; }; -#define SLOTMACHINE_GFX_TILES 233 - 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 SlotMachineSetup_8_0(void); -static void SlotMachineSetup_9_0(void); -static void SlotMachineSetup_10_0(void); -static void SlotMachineSetupGameplayTasks(void); -static void GameplayTasks_Slots(void); -static void sub_8104DA4(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_AwaitPlayerInput(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_SeeIfPlayerQuits(struct Task *task); -static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task); -static bool8 SlotAction_ExitMessage_9999Coins(struct Task *task); -static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task); -static bool8 SlotAction_ExitMessage_NoMoreCoins(struct Task *task); -static bool8 SlotAction_EndGame(struct Task *task); -static bool8 SlotAction_FreeDataStructures(struct Task *task); +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 CreateSlotMachineSprites(void); +static void CreateGameplayTasks(void); +static void CreateSlotMachineTask(void); +static void DestroyDigitalDisplayScene(void); +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); @@ -153,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); @@ -189,243 +386,238 @@ 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 bool8 sub_81040C8(void); -static void sub_81040E8(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 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 *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 PressStopReelButton(u8); +static void Task_PressStopReelButton(u8); +static void LightenBetTiles(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); +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 AddPikaPowerBolt(u8); +static bool8 IsPikaPowerBoltAnimating(void); +static void Task_CreatePikaPowerBolt(u8); +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 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_8104B80(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_FreeTask(struct Task *task); -static void sub_8104C5C(void); -static void sub_8104CAC(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 sub_810545C(void); -static void sub_81054B8(void); -static void sub_8105524(void); -static void sub_8105554(void); -static void CreateReelTimeSprites1(void); -static void sub_8105688(s16 a0); -static void sub_81056C0(void); -static void CreateReelTimeSprite2(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 bool8 sub_8105ACC(void); -static void sub_8105AEC(void); -static u8 sub_8105B1C(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 void sub_81063C0(void); -static void sub_8106404(void); -static void sub_8106448(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 sub_812F958(void); -static void sub_812F968(void); -static void LoadSlotMachineWheelOverlay(void); -static u8 sub_8105BB4(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 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 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 ); +static bool8 IsDigitalDisplayAnimFinished(void); +static void DigitalDisplay_Idle(struct Task *); +static void Task_DigitalDisplay(u8); +static void CreateReelSymbolSprites(void); +static void CreateCreditPayoutNumberSprites(void); +static void CreateCoinNumberSprite(s16, s16, u8, s16); +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 CreateReelTimeNumberGapSprite(void); +static void DestroyReelTimeMachineSprites(void); +static void DestroyReelTimeShadowSprites(void); +static void DestroyBrokenReelTimeMachineSprite(void); +static void CreateReelTimeBoltSprites(void); +static void SetReelTimeBoltDelay(s16); +static void DestroyReelTimeBoltSprites(void); +static void CreateReelTimePikachuAuraSprites(void); +static void SetReelTimePikachuAuraFlashDelay(s16); +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 IsReelTimeSmokeAnimFinished(void); +static void DestroyReelTimeSmokeSprite(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 LoadMenuAndReelOverlayTilemaps(void); +static void SetReelButtonTilemap(s16, u16, u16, u16, u16); +static void LoadInfoBoxTilemap(void); +static void LoadSlotMachineMenuTilemap(void); +static void LoadSlotMachineReelOverlay(void); +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 *); +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 *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 u8 *sUnknown_0203AAD4 = NULL; -static EWRAM_DATA u8 *sUnknown_0203AAD8 = 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 SpriteSheet *sUnknown_0203AB2C = NULL; -static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL; -static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL; +static EWRAM_DATA u16 *sReelOverlay_Tilemap = NULL; +static EWRAM_DATA u8 *sDigitalDisplayGfxPtr = NULL; +static EWRAM_DATA u8 *sReelTimeGfxPtr = 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; +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 *sReelBackgroundSpriteSheet = NULL; +static EWRAM_DATA struct SpriteSheet *sSlotMachineSpritesheetsPtr = NULL; +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 u16 gPalette_83EDE24[]; -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 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 u8 gUnknown_083ECC58[2]; -static const struct SpriteTemplate gSpriteTemplate_83ED51C; -static const u16 gProbabilityTable_SkipToReeltimeAction14[]; -static const u16 *const gUnknown_083EDE10[]; -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 u32 gReelTimeGfx[]; -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 *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 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 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 BgTemplate gUnknown_085A7424[] = +static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[]; +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]; +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 struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura; +static const u16 sReelTimeExplodeProbability[]; +static const u16 *const sPokeballShiningPalTable[]; +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 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[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[]; +static const u16 sEmptyTilemap[]; +static void (*const sDigitalDisplaySceneExitCallbacks[])(void); +static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt; +static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumberGap; +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 sSubspriteTable_ReelTimeNumberGap[]; +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 sBgTemplates[] = { { .bg = 0, @@ -465,194 +657,212 @@ 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 = +static const struct WindowTemplate sWindowTemplate_InfoBox = { - 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 -}; - -bool8 (*const AwardPayoutActions[])(struct Task *task) = +static bool8 (*const sSlotActions[])(struct Task *task) = +{ + [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) = { AwardPayoutAction0, AwardPayoutAction_GivePayoutToPlayer, AwardPayoutAction_FreeTask }; -bool8 (*const SlotReelActions[])(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 // 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 gUnknown_083ECBA0[])(struct Task *task, u8 taskId) = +static void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) = { - sub_8103C78, - sub_8103CAC, - sub_8103CC8 + StopReelButton_Press, + StopReelButton_Wait, + StopReelButton_Unpress }; -const s16 gUnknown_083ECBAC[] = {5, 10, 15}; +static const s16 sReelButtonOffsets[NUM_REELS] = {5, 10, 15}; -void (*const gUnknown_083ECBB4[])(struct Task *task) = +static void (*const sPikaPowerBoltFuncs[])(struct Task *task) = { - nullsub_68, - sub_810411C, - sub_8104144, - sub_81041AC + PikaPowerBolt_Idle, + PikaPowerBolt_AddBolt, + PikaPowerBolt_WaitAnim, + PikaPowerBolt_ClearAll }; -const u16 pikaPowerTileTable[][2] = +static const u16 sPikaPowerTileTable[][2] = { {0x9e, 0x6e}, {0x9f, 0x6f}, {0xaf, 0x7f}, }; -void (*const ReeltimeActions[])(struct Task *task) = -{ - ReeltimeAction0, - ReeltimeAction1, - ReeltimeAction2, - ReeltimeAction3, - ReeltimeAction4, - ReeltimeAction5, - ReeltimeAction6, - ReelTimeAction_LandOnOutcome, - ReeltimeAction8, - ReeltimeAction9, - ReeltimeAction10, - ReeltimeAction11, - ReeltimeAction12, - ReeltimeAction13, - ReeltimeAction14, - ReeltimeAction15, - ReeltimeAction16, - ReeltimeAction10, - 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}; - -void (*const InfoBoxActions[])(struct Task *task) = -{ +static void (*const sReelTimeActions[])(struct Task *task) = +{ + 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}; +static const s16 sReelTimeBoltDelays[] = {64, 48, 24, 8}; +static const s16 sPikachuAuraFlashDelays[] = {10, 8, 6, 4}; + +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 +static void (*const sDigitalDisplayActions[])(struct Task *task) = { - nullsub_69, + DigitalDisplay_Idle, }; @@ -679,12 +889,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; } @@ -696,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: @@ -734,25 +944,25 @@ static void CB2_SlotMachineSetup(void) gMain.state++; break; case 8: - SlotMachineSetup_8_0(); + AllocDigitalDisplayGfx(); gMain.state++; break; case 9: - SlotMachineSetup_9_0(); + SetDigitalDisplayImagePtrs(); 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(); @@ -760,7 +970,7 @@ static void CB2_SlotMachineLoop(void) UpdatePaletteFade(); } -static void SlotMachine_VBlankCallback(void) +static void SlotMachine_VBlankCB(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -771,54 +981,54 @@ 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((u16 *)&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); 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(); } -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); @@ -832,48 +1042,48 @@ 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)); } // 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; 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; 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] = 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; } AlertTVThatPlayerPlayedSlotMachine(GetCoins()); } -static void SlotMachineSetup_3_0(void) +static void SlotMachineSetup_InitPalsSpritesTasks(void) { ResetPaletteFade(); ResetSpriteData(); @@ -882,69 +1092,70 @@ static void SlotMachineSetup_3_0(void) ResetTasks(); } -static void SlotMachineSetup_4_0(void) +static void SlotMachineSetup_InitTilemaps(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) +static void SlotMachineSetup_LoadGfxAndTilemaps(void) { - sub_8106448(); - sub_81064B8(); - sub_81063C0(); + LoadMenuGfx(); + LoadMenuAndReelOverlayTilemaps(); + LoadSlotMachineGfx(); LoadMessageBoxGfx(0, 0x200, 0xF0); LoadUserWindowBorderGfx(0, 0x214, 0xE0); PutWindowTilemap(0); } -static void SlotMachineSetup_10_0(void) +static void CreateSlotMachineSprites(void) { - sub_8104EA8(); - sub_8104F8C(); - sub_8103DC8(); - sub_81050C4(); + CreateReelSymbolSprites(); + CreateCreditPayoutNumberSprites(); + CreateInvisibleFlashMatchLineSprites(); + CreateReelBackgroundSprite(); } -// create gameplay tasks -static void SlotMachineSetupGameplayTasks(void) +static void CreateGameplayTasks(void) { - GameplayTask_PikaPower(); - GameplayTask_StopSlotReel(); - sub_8104C5C(); - GameplayTasks_Slots(); + CreatePikaPowerBoltTask(); + CreateSlotReelTasks(); + CreateDigitalDisplayTask(); + 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 (SlotActions[sSlotMachine->state](&gTasks[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)); - sub_810423C(sSlotMachine->pikaPower); - sSlotMachine->state++; + LoadPikaPowerMeter(sSlotMachine->pikaPower); + sSlotMachine->state++; // SLOT_ACTION_WAIT_FADE return FALSE; } +// SLOT_ACTION_WAIT_FADE static bool8 SlotAction_WaitForUnfade(struct Task *task) { if (!gPaletteFade.active) @@ -952,448 +1163,478 @@ static bool8 SlotAction_WaitForUnfade(struct Task *task) return FALSE; } -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 = 4; + sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET; 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_READY_NEW_RT_SPIN; + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); } return TRUE; } -static bool8 SlotAction3(struct Task *task) +// SLOT_ACTION_READY_NEW_RT_SPIN +static bool8 SlotAction_ReadyNewReelTimeSpin(struct Task *task) { - if (sub_8104E18()) - sSlotMachine->state = 4; + if (IsDigitalDisplayAnimFinished()) + sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET; return FALSE; } -static bool8 SlotAction4(struct Task *task) +// SLOT_ACTION_ASK_INSERT_BET +static bool8 SlotAction_AskInsertBet(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_WAIT_INFO_BOX; } - 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++) - LoadBetTiles(i); - sSlotMachine->coins -= (3 - sSlotMachine->bet); - sSlotMachine->bet = 3; - sSlotMachine->state = 9; + for (i = sSlotMachine->bet; i < MAX_BET; i++) + LightenBetTiles(i); + sSlotMachine->coins -= (MAX_BET - sSlotMachine->bet); + sSlotMachine->bet = MAX_BET; + sSlotMachine->state = SLOT_ACTION_START_SPIN; PlaySE(SE_REGI); } else // you didn't have enough coins to bet the max { - sSlotMachine->state = 6; + sSlotMachine->state = SLOT_ACTION_MSG_NEED_3_COINS; } } 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); + LightenBetTiles(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_START_SPIN; + + // Quit prompt + if (JOY_NEW(B_BUTTON)) + sSlotMachine->state = SLOT_ACTION_ASK_QUIT; } 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 = 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 (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = 5; + sSlotMachine->state = SLOT_ACTION_BET_INPUT; } 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 = 5; + 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(); - sub_8104DA4(); + DestroyDigitalDisplayScene(); - // for each reel... - ReelTasks_SetUnkTaskData(0); - ReelTasks_SetUnkTaskData(1); - ReelTasks_SetUnkTaskData(2); + SpinSlotReel(LEFT_REEL); + SpinSlotReel(MIDDLE_REEL); + SpinSlotReel(RIGHT_REEL); IncrementDailySlotsUses(); task->data[0] = 0; if (sSlotMachine->luckyFlags & LUCKY_BIAS_REELTIME) { - BeginReeltime(); - sSlotMachine->state = 10; + BeginReelTime(); + sSlotMachine->state = SLOT_ACTION_START_RT_SPIN; } else { - sub_8104CAC(1); - sSlotMachine->state = 11; + CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); + sSlotMachine->state = SLOT_ACTION_SET_LUCKY_SPINS; } sSlotMachine->reelIncrement = 8; - if (sSlotMachine->fairRollsLeft) + if (sSlotMachine->reelTimeSpinsLeft) sSlotMachine->reelIncrement = SlowReelSpeed(); 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()) { - sub_8104CAC(1); + CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); sSlotMachine->luckyFlags &= ~LUCKY_BIAS_REELTIME; - sSlotMachine->state = 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 = 12; + sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP; } return FALSE; } +// SLOT_ACTION_AWAIT_REEL_STOP static bool8 SlotAction_AwaitReelStop(struct Task *task) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_JYUNI); - sub_8102E1C(sSlotMachine->currReel); - sub_8103C14(sSlotMachine->currReel); - sSlotMachine->state = 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 = 12; - if (sSlotMachine->currReel > 2) + sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP; + if (sSlotMachine->currReel >= NUM_REELS) { - sSlotMachine->state = 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); 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_WAIT_PAYOUT; AwardPayout(); - sub_8103F70(); + FlashSlotMachineLights(); if ((sSlotMachine->netCoinLoss -= sSlotMachine->payout) < 0) { 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); - sub_8104CAC(6); + 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); - 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))) + 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->fairRollsLeft = 0; - sSlotMachine->fairRollsUsed = 0; + 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); + AddPikaPowerBolt(sSlotMachine->pikaPower); } } else { - sub_8104CAC(3); - sSlotMachine->state = 20; + CreateDigitalDisplayScene(DIG_DISPLAY_LOSE); + 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 = 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 (sub_8103FA0()) + if (TryStopSlotMachineLights()) { - sSlotMachine->state = 19; - if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE))) + 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 << SLOT_MACHINE_MATCHED_REPLAY)) + + if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { sSlotMachine->currReel = 0; - sSlotMachine->state = 9; + sSlotMachine->state = SLOT_ACTION_START_SPIN; } - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER)) - sSlotMachine->state = 17; - if (sSlotMachine->fairRollsLeft && sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + + if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER)) + sSlotMachine->state = SLOT_ACTION_MATCHED_POWER; + + if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { - sub_8104CAC(4); - sSlotMachine->state = 18; + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); + 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 = 19; - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; + if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { - sSlotMachine->state = 9; - if (sSlotMachine->fairRollsLeft) + sSlotMachine->state = SLOT_ACTION_START_SPIN; + if (sSlotMachine->reelTimeSpinsLeft) { - sub_8104CAC(4); - sSlotMachine->state = 18; + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); + 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 (sub_8104E18()) + if (IsDigitalDisplayAnimFinished()) { - sSlotMachine->state = 19; - if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; + if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) { - sSlotMachine->state = 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) { - sub_8103D8C(0); - sub_8103D8C(1); - sub_8103D8C(2); - sSlotMachine->state = 2; + DarkenBetTiles(0); + DarkenBetTiles(1); + DarkenBetTiles(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 = 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); 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) +// SLOT_ACTION_HANDLE_QUIT_INPUT +static bool8 SlotAction_HandleQuitInput(struct Task *task) { s8 input = Menu_ProcessInputNoWrapClearOnChoose(); 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 = 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; } -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); CopyWindowToVram(0, 3); - sSlotMachine->state = 24; + sSlotMachine->state = SLOT_ACTION_WAIT_MSG_MAX_COINS; return FALSE; } -static bool8 SlotAction_ExitMessage_9999Coins(struct Task *task) +// SLOT_ACTION_WAIT_MSG_MAX_COINS +static bool8 SlotAction_WaitMsg_9999Coins(struct Task *task) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = 5; + sSlotMachine->state = SLOT_ACTION_BET_INPUT; } 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); 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) +// SLOT_ACTION_WAIT_MSG_NO_MORE_COINS +static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *task) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = 27; + sSlotMachine->state = SLOT_ACTION_END; } return FALSE; } +// SLOT_ACTION_END 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; } +// SLOT_ACTION_FREE 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(sUnknown_0203AAC8); + 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(sMenuGfx); 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(sUnknown_0203AADC); - FREE_AND_SET_NULL(sUnknown_0203AAE0); - FREE_AND_SET_NULL(sUnknown_0203AB2C); - FREE_AND_SET_NULL(sUnknown_0203AB30); - + FREE_AND_SET_NULL(sReelOverlay_Tilemap); + FREE_AND_SET_NULL(sDigitalDisplayGfxPtr); + FREE_AND_SET_NULL(sReelTimeGfxPtr); + 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); } return FALSE; @@ -1403,7 +1644,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))) { @@ -1413,7 +1654,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; @@ -1424,7 +1665,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]; } } } @@ -1432,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) @@ -1444,7 +1685,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; @@ -1454,7 +1695,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; } @@ -1466,7 +1707,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; } @@ -1480,7 +1721,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) { @@ -1504,9 +1745,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) @@ -1527,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 < gProbabilityTable_SkipToReeltimeAction14[i]) + if (rval < sReelTimeExplodeProbability[i]) return TRUE; else return FALSE; @@ -1550,11 +1791,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->fairRollsUsed]; + value = sReelIncrementTable[i][1] + sReelTimeBonusIncrementTable[sSlotMachine->reelTimeSpinsUsed]; if (rval < value) return 2; return 8; @@ -1577,12 +1818,12 @@ 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); - if (match != SLOT_MACHINE_MATCHED_NONE) + match = GetMatchFromSymbols(c1, c2, c3); + if (match != MATCHED_NONE) { - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; - sub_8103E04(0); + sSlotMachine->payout += sSlotPayouts[match]; + sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + FlashMatchLine(MATCH_MIDDLE_ROW); } } @@ -1593,26 +1834,26 @@ 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); - if (match != SLOT_MACHINE_MATCHED_NONE) + match = GetMatchFromSymbols(c1, c2, c3); + if (match != MATCHED_NONE) { - if (match == SLOT_MACHINE_MATCHED_1CHERRY) - match = SLOT_MACHINE_MATCHED_2CHERRY; - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; - sub_8103E04(1); + 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) + match = GetMatchFromSymbols(c1, c2, c3); + if (match != MATCHED_NONE) { - if (match == SLOT_MACHINE_MATCHED_1CHERRY) - match = SLOT_MACHINE_MATCHED_2CHERRY; - sSlotMachine->payout += gSlotPayouts[match]; - sSlotMachine->matchedSymbols |= gSlotMatchFlags[match]; - sub_8103E04(2); + if (match == MATCHED_1CHERRY) + match = MATCHED_2CHERRY; + sSlotMachine->payout += sSlotPayouts[match]; + sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + FlashMatchLine(MATCH_BOTTOM_ROW); } } @@ -1623,42 +1864,42 @@ 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); - if (match != SLOT_MACHINE_MATCHED_NONE) + match = GetMatchFromSymbols(c1, c2, c3); + 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]; } - sub_8103E04(3); + FlashMatchLine(MATCH_NWSE_DIAG); } c1 = GetTagAtRest(LEFT_REEL, 3); c2 = GetTagAtRest(MIDDLE_REEL, 2); c3 = GetTagAtRest(RIGHT_REEL, 1); - match = GetMatchFromSymbolsInRow(c1, c2, c3); - if (match != SLOT_MACHINE_MATCHED_NONE) + match = GetMatchFromSymbols(c1, c2, c3); + 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]; } - sub_8103E04(4); + FlashMatchLine(MATCH_NESW_DIAG); } } -static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3) +static u8 GetMatchFromSymbols(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) - 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) - return SLOT_MACHINE_MATCHED_777_MIXED; - if (c1 == SLOT_MACHINE_TAG_CHERRY) - return SLOT_MACHINE_MATCHED_1CHERRY; - return SLOT_MACHINE_MATCHED_NONE; + return sSymToMatch[c1]; + if (c1 == GFXTAG_7_RED && c2 == GFXTAG_7_RED && c3 == GFXTAG_7_BLUE) + return MATCHED_777_MIXED; + if (c1 == GFXTAG_7_BLUE && c2 == GFXTAG_7_BLUE && c3 == GFXTAG_7_RED) + return MATCHED_777_MIXED; + if (c1 == GFXTAG_CHERRY) + return MATCHED_1CHERRY; + return MATCHED_NONE; } static void AwardPayout(void) @@ -1676,13 +1917,13 @@ 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])) ; } static bool8 AwardPayoutAction0(struct Task *task) { - if (sub_8103E38()) + if (IsMatchLineDoneFlashingBeforePayout()) { task->data[0]++; if (sSlotMachine->payout == 0) @@ -1707,7 +1948,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; @@ -1722,7 +1963,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; } @@ -1741,17 +1982,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 gReelSymbols[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); @@ -1762,25 +2003,25 @@ 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) { 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; } @@ -1805,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 < 3; 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 (SlotReelActions[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; @@ -1848,46 +2092,46 @@ 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]++; - // initialize data for that reel --> these will be changed if gBiasTags can be lined up - sSlotMachine->winnerRows[task->data[15]] = 0; - sSlotMachine->reelExtraTurns[task->data[15]] = 0; + task->tState++; + // initialize data for that reel --> these will be changed if sBiasTags can be lined up + sSlotMachine->winnerRows[task->tReelId] = 0; + sSlotMachine->reelExtraTurns[task->tReelId] = 0; - if (sSlotMachine->fairRollsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->luckySpinsLeft == 0 || !DecideReelTurns_BiasTag[task->data[15]]())) + if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || !sSlotMachine->isLuckySpin || !sDecideReelTurns_BiasTag[task->tReelId]())) { - sSlotMachine->luckySpinsLeft = 0; - DecideReelTurns_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; } // 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)); - reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % 24; + memcpy(reelStopShocks, sReelStopShocks, sizeof(sReelStopShocks)); + 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]] % 24; + 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; } @@ -1897,30 +2141,34 @@ 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); 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); + return sDecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2); } static bool8 AreTagsAtPosition_Reel1(s16 pos, u8 tag1, u8 tag2) @@ -1936,7 +2184,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; @@ -1959,7 +2209,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; } @@ -2020,7 +2270,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) @@ -2085,13 +2335,13 @@ 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); + return sDecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag); } static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 biasTag) @@ -2151,14 +2401,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; @@ -2166,7 +2416,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 @@ -2289,7 +2539,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; @@ -2297,8 +2547,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; @@ -2306,10 +2556,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; @@ -2319,7 +2569,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) @@ -2334,7 +2584,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++; } @@ -2465,273 +2715,312 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void) } } -static void sub_8103C14(u8 a0) +static void PressStopReelButton(u8 reelNum) { - u8 taskId = CreateTask(sub_8103C48, 5); - gTasks[taskId].data[15] = a0; - sub_8103C48(taskId); + u8 taskId = CreateTask(Task_PressStopReelButton, 5); + gTasks[taskId].data[15] = reelNum; + Task_PressStopReelButton(taskId); } -static void sub_8103C48(u8 taskId) +static void Task_PressStopReelButton(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) +static void StopReelButton_Press(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]++; } -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) { - 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 matchLineId) { - LoadPalette(gUnknown_083EDD08[tileId], gUnknown_083EDD30[tileId], 2); + LoadPalette(sLitMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 2); } -static void sub_8103D28(u8 a0) +static void DarkenMatchLine(u8 matchLineId) { - LoadPalette(gUnknown_083EDD1C[a0], gUnknown_083EDD30[a0], 2); + LoadPalette(sDarkMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 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->sColor >= maxColorChange) { + // Reached peak darkness, reverse + sprite->sColorIncr = -sprite->sColorIncr; } - else if (sprite->data[4] >= r4) - sprite->data[5] = -sprite->data[5]; - if (sprite->data[2]) - sprite->data[3] <<= 1; + 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); + LoadPalette(sSlotMachineMenu_Pal, 0x10, 0x20); return TRUE; } 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 + +#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->unkTaskPointer3E = CreateTask(sub_81040E8, 8); + sSlotMachine->pikaPowerBoltTaskId = CreateTask(Task_CreatePikaPowerBolt, 8); } -static void DisplayPikaPower(u8 pikaPower) +static void AddPikaPowerBolt(u8 pikaPower) { - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3E]; - ClearTaskDataFields_2orHigher(task); - task->data[0] = 1; - task->data[1]++; - task->data[15] = 1; // points to a reelIndex + struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; + ResetPikaPowerBoltTask(task); + task->tState = 1; + task->tNumBolts++; + task->tAnimating = TRUE; } -static void sub_8104098(void) +static void ResetPikaPowerBolts(void) { - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3E]; - ClearTaskDataFields_2orHigher(task); - task->data[0] = 3; - task->data[15] = 1; // points to a reelIndex + struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; + ResetPikaPowerBoltTask(task); + task->tState = 3; + task->tAnimating = TRUE; } -static bool8 sub_81040C8(void) +static bool8 IsPikaPowerBoltAnimating(void) { - return gTasks[sSlotMachine->unkTaskPointer3E].data[15]; + return gTasks[sSlotMachine->pikaPowerBoltTaskId].tAnimating; } -static void sub_81040E8(u8 taskId) +static void Task_CreatePikaPowerBolt(u8 taskId) { - gUnknown_083ECBB4[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] = sub_8105B1C((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] = pikaPowerTileTable[r3][0]; + sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][0]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40); - sub_8105B88(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] = pikaPowerTileTable[r3][1]; + 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; - for (i = 2; i < 16; i++) + for (i = 2; i < NUM_TASK_DATA; i++) 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; @@ -2743,7 +3032,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++) @@ -2753,40 +3042,47 @@ 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) +#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 - ReeltimeActions[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->fairRollsLeft = 0; + 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 @@ -2794,18 +3090,18 @@ static void ReeltimeAction0(struct Task *task) gSpriteCoordOffsetY = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); SetGpuReg(REG_OFFSET_BG1VOFS, 0); - sub_8104A40(REG_OFFSET_BG3VOFS, 0); - sub_81051C0(); - sub_8105100(); - sub_81052EC(); - sub_81053A0(); - sub_810545C(); + LoadReelTimeWindowTilemap(REG_OFFSET_BG3VOFS, 0); + CreateReelTimeMachineSprites(); + CreateReelTimePikachuSprite(); + CreateReelTimeNumberSprites(); + CreateReelTimeShadowSprites(); + CreateReelTimeNumberGapSprite(); GetReeltimeDraw(); StopMapMusic(); PlayNewMapMusic(MUS_BD_TIME); } -static void ReeltimeAction1(struct Task *task) +static void ReelTime_WindowEnter(struct Task *task) { s16 r3; gSpriteCoordOffsetX -= 8; @@ -2816,78 +3112,78 @@ 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) { - 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]++; - CreateReelTimeSprites1(); - CreateReelTimeSprite2(); + task->tState++; + CreateReelTimeBoltSprites(); + CreateReelTimePikachuAuraSprites(); } } -static void ReeltimeAction3(struct Task *task) +static void ReelTime_PikachuSpeedUp1(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->reelTimeSprite3F, 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) { - 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; - sub_81057E8(2); - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 3); + 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; @@ -2896,22 +3192,22 @@ static void ReeltimeAction6(struct Task *task) task->data[5] = 0; if (sSlotMachine->reelTimeDraw) { - if (sSlotMachine->fairRollsLeft <= task->data[6]) - task->data[0]++; + if (sSlotMachine->reelTimeSpinsLeft <= task->data[6]) + 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) @@ -2928,32 +3224,32 @@ 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(); - sub_81056C0(); - sub_8105804(); - task->data[0]++; + DestroyReelTimeBoltSprites(); + DestroyReelTimePikachuAuraSprites(); + task->tState++; 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(); + ResetPikaPowerBolts(); sSlotMachine->pikaPower = 0; } PlayFanfare(MUS_ME_B_SMALL); @@ -2961,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; @@ -2976,59 +3272,59 @@ 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]++; + task->tState++; } -static void ReeltimeAction11(struct Task *task) +static void ReelTime_DestroySprites(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)); + DestroyTask(FindTaskIdByFunc(Task_ReelTime)); } else { - sub_8104CAC(4); + CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); 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]++; - else if (sSlotMachine->reelPixelOffsets[0] % 24 == 0 && (++task->data[2]& 0x07) == 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 (sub_8104E18()) - DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); + if (IsDigitalDisplayAnimFinished()) + DestroyTask(FindTaskIdByFunc(Task_ReelTime)); } -static void ReeltimeAction14(struct Task *task) +static void ReelTime_ExplodeMachine(struct Task *task) { - sub_81054B8(); - sub_81056C0(); - sub_8105804(); - sub_8105854(); - gSprites[sSlotMachine->unk4E[0]].invisible = TRUE; - StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 5); - task->data[0]++; + DestroyReelTimeMachineSprites(); + DestroyReelTimeBoltSprites(); + DestroyReelTimePikachuAuraSprites(); + CreateReelTimeExplosionSprite(); + gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = TRUE; + StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5); + task->tState++; task->data[4] = 4; task->data[5] = 0; StopMapMusic(); @@ -3036,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]); @@ -3046,63 +3342,68 @@ 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; - task->data[0]++; + DestroyReelTimeExplosionSprite(); + CreateReelTimeDuckSprites(); + CreateBrokenReelTimeMachineSprite(); + CreateReelTimeSmokeSprite(); + gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = FALSE; + 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 (sub_8105ACC()) + if (IsReelTimeSmokeAnimFinished()) { - task->data[0]++; - sub_8105AEC(); + task->tState++; + DestroyReelTimeSmokeSprite(); } } -static void ReeltimeAction17(struct Task *task) +static void ReelTime_EndFailure(struct Task *task) { gSpriteCoordOffsetX = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); PlayNewMapMusic(sSlotMachine->backupMapMusic); - sub_810514C(); - sub_8105554(); - sub_8105524(); - sub_81059B8(); - DestroyTask(FindTaskIdByFunc(RunReeltimeActions)); + DestroyReelTimePikachuSprite(); + DestroyBrokenReelTimeMachineSprite(); + DestroyReelTimeShadowSprites(); + DestroyReelTimeDuckSprites(); + DestroyTask(FindTaskIdByFunc(Task_ReelTime)); } -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); } } -static void OpenInfoBox(u8 seemsUnused) +#undef tState + +#define tState data[0] + +// Info Box is the screen shown when Select is pressed +static void OpenInfoBox(u8 digDisplayId) { u8 taskId = CreateTask(RunInfoBoxActions, 1); - gTasks[taskId].data[1] = seemsUnused; + gTasks[taskId].data[1] = digDisplayId; RunInfoBoxActions(taskId); } @@ -3116,29 +3417,29 @@ static bool8 IsInfoBoxClosed(void) static void RunInfoBoxActions(u8 taskId) { - InfoBoxActions[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_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]++; + task->tState++; } static void InfoBox_AddText(struct Task *task) @@ -3146,40 +3447,40 @@ 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) { - if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); ClearWindowTilemap(1); CopyWindowToVram(1, 1); RemoveWindow(1); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - task->data[0]++; + task->tState++; } } -static void InfoBox_812DE14(struct Task *task) +static void InfoBox_LoadSlotMachineTilemap(struct Task *task) { - sub_812F968(); + LoadSlotMachineMenuTilemap(); ShowBg(3); - task->data[0]++; + task->tState++; } -static void InfoBox_812DE30(struct Task *task) +static void InfoBox_CreateDigitalDisplay(struct Task *task) { - sub_8104CAC(task->data[1]); - task->data[0]++; + CreateDigitalDisplayScene(task->data[1]); + task->tState++; } -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]++; + task->tState++; } static void InfoBox_FreeTask(struct Task *task) @@ -3187,62 +3488,68 @@ static void InfoBox_FreeTask(struct Task *task) DestroyTask(FindTaskIdByFunc(RunInfoBoxActions)); } -static void sub_8104C5C(void) +#undef tState + +#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 < 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; - sub_8104DA4(); + DestroyDigitalDisplayScene(); - task = &gTasks[sSlotMachine->unkTaskPointer3D]; - task->data[1] = arg0; + task = &gTasks[sSlotMachine->digDisplayTaskId]; + 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].dispInfoId, + sDigitalDisplayScenes[id][i].spriteId ); task->data[4 + i] = spriteId; } } -static void sub_8104D30(u8 a0, 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]; - for (i = 4; i < 16; i++) + struct Task *task = &gTasks[sSlotMachine->digDisplayTaskId]; + 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, 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]](); - for (i = 4; i < 16; i++) + sDigitalDisplaySceneExitCallbacks[task->data[1]](); + + for (i = 4; i < NUM_TASK_DATA; i++) { if (task->data[i] != MAX_SPRITES) { @@ -3252,31 +3559,31 @@ static void sub_8104DA4(void) } } -static bool8 sub_8104E18(void) +static bool8 IsDigitalDisplayAnimFinished(void) { u8 i; - struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D]; - for (i = 4; i < 16; i++) + 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) { } -static void sub_8104EA8(void) +static void CreateReelSymbolSprites(void) { s16 i; s16 j; @@ -3285,7 +3592,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 +3601,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 +3610,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 +3650,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, 88, 72, 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); - - 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; - - spriteTemplate = gSpriteTemplate_83ED45C; - spriteTemplate.images = sUnknown_0203AAE4; + if (sImageTable_ReelTimePikachu == NULL) + sImageTable_ReelTimePikachu = AllocZeroed(sizeof(struct SpriteFrameImage) * 5); + + 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 = 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 +3701,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; - spriteId = CreateSprite(&spriteTemplate, 0xa8 - gSpriteCoordOffsetX, 0x50, 7); + sImageTable_BrokenReelTimeMachine[0].data = sReelTimeGfxPtr + 0x3000; + sImageTable_BrokenReelTimeMachine[0].size = 0x600; + spriteTemplate = sSpriteTemplate_BrokenReelTimeMachine; + spriteTemplate.images = sImageTable_BrokenReelTimeMachine; + spriteId = CreateSprite(&spriteTemplate, 168 - gSpriteCoordOffsetX, 80, 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, 368, 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,92 +3780,98 @@ 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, 368, 100, 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, 288, 104, 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) +// 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 sub_81054B8(void) +static void DestroyReelTimeMachineSprites(void) { u8 i; - DestroySprite(&gSprites[sSlotMachine->unk40]); - for (i = 0; i < 2; i++) - DestroySprite(&gSprites[sSlotMachine->unk49[i]]); + DestroySprite(&gSprites[sSlotMachine->reelTimeNumberGapSpriteId]); + 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) +#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(&gSpriteTemplate_83ED504, 0x98, 0x20, 5); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 152, 32, 5); struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->hFlip = TRUE; - sSlotMachine->reelTimeSprites1[0] = spriteId; - sprite->data[0] = 8; - sprite->data[1] = -1; - sprite->data[2] = -1; - sprite->data[7] = 0x20; + sSlotMachine->reelTimeBoltSpriteIds[0] = spriteId; + sprite->sDelayTimer = 8; + sprite->sXDir = -1; + sprite->sYDir = -1; + sprite->sDelay = 32; - spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0xb8, 0x20, 5); + spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 184, 32, 5); sprite = &gSprites[spriteId]; sprite->oam.priority = 1; - sSlotMachine->reelTimeSprites1[1] = spriteId; - sprite->data[1] = 1; - sprite->data[2] = -1; - sprite->data[7] = 0x20; + sSlotMachine->reelTimeBoltSpriteIds[1] = spriteId; + sprite->sXDir = 1; + sprite->sYDir = -1; + sprite->sDelay = 32; } -static void sub_810562C(struct Sprite *sprite) +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; @@ -3563,104 +3879,123 @@ static void sub_810562C(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->reelTimeSprites1[0]].data[7] = a0; - gSprites[sSlotMachine->reelTimeSprites1[1]].data[7] = a0; + gSprites[sSlotMachine->reelTimeBoltSpriteIds[0]].sDelay = delay; + gSprites[sSlotMachine->reelTimeBoltSpriteIds[1]].sDelay = delay; } -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) +#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) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x48, 0x50, 3); + // Left half of electricity orb + 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; - sSlotMachine->reelTimeSprites2[0] = spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x68, 0x50, 3); + 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, 104, 80, 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) + 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->reelTimeSprites2[0]].data[7] = a0; + gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[0]].sDelay = delay; } -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]]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, 0, 0, 0); + for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimePikachuAuraSpriteIds); i++) + DestroySprite(&gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[i]]); } -static void sub_8105854(void) +#undef sFlashPal +#undef sColorIdx +#undef sDelayTimer +#undef sDelay + +static void CreateReelTimeExplosionSprite(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED534, 0xa8, 0x50, 6); + u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeExplosion, 168, 80, 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, 80 - gSpriteCoordOffsetX, 68, 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,67 +4013,77 @@ 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) +#define sState data[0] +#define sMoveY data[1] +#define sTimer data[2] +#define sAnimFinished data[7] + +static void CreateReelTimeSmokeSprite(void) { - u8 spriteId = CreateSprite(&gSpriteTemplate_83ED564, 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; 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) + 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->unk43].data[7]; + return gSprites[sSlotMachine->reelTimeSmokeSpriteId].sAnimFinished; } -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) +#undef sState +#undef sMoveY +#undef sTimer +#undef sAnimFinished + +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,153 +4091,159 @@ 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; + sprite->data[7] = TRUE; } -static void sub_8105B88(u8 spriteId) +static void DestroyPikaPowerBoltSprite(u8 spriteId) { struct Sprite *sprite = &gSprites[spriteId]; FreeOamMatrix(sprite->oam.matrixNum); DestroySprite(sprite); } -static u8 sub_8105BB4(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2) +static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 dispInfoId, s16 spriteId) { - return sub_8105BF8(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 sub_8105BF8(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; 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]); + 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->fairRollsLeft - 1); - sprite->data[0]++; + StartSpriteAnim(sprite, sSlotMachine->reelTimeSpinsLeft - 1); + 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: @@ -3900,54 +4251,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; } } @@ -3958,53 +4309,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); } @@ -4012,11 +4363,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]++; @@ -4025,34 +4376,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) @@ -4066,166 +4418,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(5, 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) +static void LoadSlotMachineGfx(void) { u8 i; - sub_8106404(); - sUnknown_0203AAD4 = Alloc(0x3200); - LZDecompressWram(gSlotMachineReelTime_Gfx, sUnknown_0203AAD4); - sUnknown_0203AAD8 = Alloc(0x3600); - LZDecompressWram(gReelTimeGfx, sUnknown_0203AAD8); - sUnknown_0203AB30 = AllocZeroed(sizeof(struct SpriteSheet) * ARRAY_COUNT(gSlotMachineSpriteSheets)); - for (i = 0; i < ARRAY_COUNT(gSlotMachineSpriteSheets); i++) + LoadReelBackground(); + sDigitalDisplayGfxPtr = Alloc(0x3200); + LZDecompressWram(gSlotMachineDigitalDisplay_Gfx, sDigitalDisplayGfxPtr); + sReelTimeGfxPtr = Alloc(0x3600); + LZDecompressWram(sReelTimeGfx, sReelTimeGfxPtr); + 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 = sUnknown_0203AAD4 + 0xA00; - sUnknown_0203AB30[18].data = sUnknown_0203AAD4 + 0x1400; - sUnknown_0203AB30[19].data = sUnknown_0203AAD4 + 0x1600; - sUnknown_0203AB30[20].data = sUnknown_0203AAD4 + 0x1900; - 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); + LoadPalette(sUnkPalette, 208, 32); } -static void sub_81064B8(void) +static void LoadMenuAndReelOverlayTilemaps(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; @@ -4233,226 +4587,227 @@ 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_9_0(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; -} - -static void SlotMachineSetup_8_0(void) -{ - sUnknown_0203AAF4 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAF4[0].data = sUnknown_0203AAD4; - sUnknown_0203AAF4[0].size = 0x600; - - sUnknown_0203AAF8 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAF8[0].data = sUnknown_0203AAD4 + 0x600; - sUnknown_0203AAF8[0].size = 0x200; - - sUnknown_0203AAFC = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AAFC[0].data = sUnknown_0203AAD4 + 0x800; - sUnknown_0203AAFC[0].size = 0x200; - - sUnknown_0203AB00 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB00[0].data = sUnknown_0203AAD4 + 0xA00; - sUnknown_0203AB00[0].size = 0x200; - - sUnknown_0203AB04 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB04[0].data = sUnknown_0203AAD4 + 0xC00; - sUnknown_0203AB04[0].size = 0x300; - - sUnknown_0203AB08 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB08[0].data = sUnknown_0203AAD4 + 0x1000; - sUnknown_0203AB08[0].size = 0x400; - - sUnknown_0203AB0C = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB0C[0].data = sUnknown_0203AAD4 + 0x1400; - sUnknown_0203AB0C[0].size = 0x200; - - sUnknown_0203AB10 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB10[0].data = sUnknown_0203AAD4 + 0x1600; - sUnknown_0203AB10[0].size = 0x300; - - sUnknown_0203AB14 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB14[0].data = sUnknown_0203AAD4 + 0x1900; - sUnknown_0203AB14[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; - - sUnknown_0203AB1C = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); - sUnknown_0203AB1C[0].data = sUnknown_0203AAD4 + 0x2000; - sUnknown_0203AB1C[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; - - 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; - - 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; -} - -static const u8 gReelSymbols[][REEL_NUM_TAGS] = -{ - { - 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 +static void SetDigitalDisplayImagePtrs(void) +{ + 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 AllocDigitalDisplayGfx(void) +{ + sImageTable_DigitalDisplay_Reel = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Reel[0].data = sDigitalDisplayGfxPtr; + sImageTable_DigitalDisplay_Reel[0].size = 0x600; + + sImageTable_DigitalDisplay_Time = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Time[0].data = sDigitalDisplayGfxPtr + 0x600; + sImageTable_DigitalDisplay_Time[0].size = 0x200; + + sImageTable_DigitalDisplay_Insert = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Insert[0].data = sDigitalDisplayGfxPtr + 0x800; + sImageTable_DigitalDisplay_Insert[0].size = 0x200; + + sImageTable_DigitalDisplay_Stop = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Stop[0].data = sDigitalDisplayGfxPtr + 0xA00; + sImageTable_DigitalDisplay_Stop[0].size = 0x200; + + sImageTable_DigitalDisplay_Win = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Win[0].data = sDigitalDisplayGfxPtr + 0xC00; + sImageTable_DigitalDisplay_Win[0].size = 0x300; + + sImageTable_DigitalDisplay_Lose = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Lose[0].data = sDigitalDisplayGfxPtr + 0x1000; + sImageTable_DigitalDisplay_Lose[0].size = 0x400; + + sImageTable_DigitalDisplay_Bonus = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Bonus[0].data = sDigitalDisplayGfxPtr + 0x1400; + sImageTable_DigitalDisplay_Bonus[0].size = 0x200; + + sImageTable_DigitalDisplay_Big = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Big[0].data = sDigitalDisplayGfxPtr + 0x1600; + sImageTable_DigitalDisplay_Big[0].size = 0x300; + + sImageTable_DigitalDisplay_Reg = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Reg[0].data = sDigitalDisplayGfxPtr + 0x1900; + sImageTable_DigitalDisplay_Reg[0].size = 0x300; + + 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; + + sImageTable_DigitalDisplay_Smoke = AllocZeroed(sizeof(struct SpriteFrameImage) * 1); + sImageTable_DigitalDisplay_Smoke[0].data = sDigitalDisplayGfxPtr + 0x2000; + sImageTable_DigitalDisplay_Smoke[0].size = 640; + + 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; + + 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; + + 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 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] = +{ + [LEFT_REEL] = { + 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 + [MIDDLE_REEL] = { + 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 + [RIGHT_REEL] = { + 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 }, }; -static const u8 gReelTimeTags[] = { +static const u8 sReelTimeTags[] = { 1, 0, 5, 4, 3, 2 }; -static const s16 gInitialReelPositions[][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}, @@ -4461,13 +4816,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}, @@ -4475,7 +4830,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}, @@ -4484,7 +4839,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}, @@ -4493,11 +4848,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 sReelTimeExplodeProbability[] = { 128, 175, 200, 225, 256 }; -static const u16 gReelIncrementTable[][2] = { +static const u16 sReelIncrementTable[][2] = { {10, 5}, {10, 10}, {10, 15}, @@ -4505,211 +4860,219 @@ 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[] = { - 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 +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 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 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 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 struct UnkStruct1 Unknown_83ECF98[] = { - {25, 34, 0}, - {2, 0, 0}, - {9, 16, 0}, - {255, 0, 0} -}; - -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 UnkStruct1 Unknown_83ECFC4[] = { - {3, 7, 0}, - {8, 17, 0}, - {255, 0, 0} -}; - -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 UnkStruct1 Unknown_83ECFE8[] = { - {0, 13, 0}, - {1, 14, 0}, - {7, 15, 0}, - {255, 0, 0} -}; - -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 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 UnkStruct1 *const gUnknown_083ED048[] = { - Unknown_83ECF98, - Unknown_83ECFA8, - Unknown_83ECFC4, - Unknown_83ECFD0, - Unknown_83ECFE8, - Unknown_83ED020, - Unknown_83ECFF8 -}; - -static void (*const gUnknown_083ED064[])(void) = { - sub_810639C, - sub_8106364, - sub_8106370, - nullsub_70, - nullsub_70, - sub_8106370, - sub_8106370 -}; - -static const struct OamData gUnknown_085A7A3C = +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 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 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_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 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, 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, 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, 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, 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, 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, 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, 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 +}; + +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 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 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -4726,7 +5089,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 +5106,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 +5123,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 +5140,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 +5157,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 +5174,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 +5191,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 +5208,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,151 +5218,151 @@ static const struct SpriteFrameImage gUnknown_085A7A7C[] = { gSlotMachineReelTimeNumber5, 0x80 }, }; -static const struct SpriteFrameImage gUnknown_085A7AAC[] = { gSlotMachineReelTimeShadow, 0x200 }; -static const struct SpriteFrameImage gUnknown_085A7AB4[] = { gUnknown_08DD1A18, 0x40 }; +static const struct SpriteFrameImage sImageTable_ReelTimeShadow[] = { gSlotMachineReelTimeShadow, 0x200 }; +static const struct SpriteFrameImage sImageTable_ReelTimeNumberGap[] = { gSlotMachineReelTimeNumberGap_Gfx, 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[] = +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) }; -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,110 +5371,110 @@ 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 }; -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 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 +5483,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,342 +5503,342 @@ 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, - .anims = gUnknown_085A7BF8, + .tileTag = GFXTAG_SYMBOLS_START, + .paletteTag = PALTAG_REEL, + .oam = &sOam_32x32, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .tileTag = GFXTAG_NUMBERS_START, + .paletteTag = PALTAG_MISC, + .oam = &sOam_8x16, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .tileTag = GFXTAG_REEL_BG, + .paletteTag = PALTAG_REEL, + .oam = &sOam_64x64, + .anims = sAnims_SingleFrame, .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, + .paletteTag = PALTAG_REEL_TIME_PIKACHU, + .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_REEL_TIME_MISC, + .oam = &sOam_8x16, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_REEL_TIME_MACHINE, + .oam = &sOam_8x16, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_REEL_TIME_MACHINE, + .oam = &sOam_8x16, + .anims = sAnims_SingleFrame, .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, + .paletteTag = PALTAG_MISC, + .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, - .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AAC, + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x16, + .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, - .oam = &gUnknown_085A7A4C, - .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AB4, + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x16, + .anims = sAnims_SingleFrame, + .images = sImageTable_ReelTimeNumberGap, .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, + .paletteTag = PALTAG_MISC, + .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, - .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7ACC, + .paletteTag = PALTAG_PIKA_AURA, + .oam = &sOam_32x64, + .anims = sAnims_SingleFrame, + .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, + .paletteTag = PALTAG_EXPLOSION, + .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, - .anims = gUnknown_085A7BFC, - .images = gUnknown_085A7AE4, + .paletteTag = PALTAG_MISC, + .oam = &sOam_8x8, + .anims = sAnims_ReelTimeDuck, + .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, - .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AEC, - .affineAnims = gUnknown_085A7C88, - .callback = sub_8105A38 + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x16, + .anims = sAnims_SingleFrame, + .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_64x32, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_64x32, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, + .paletteTag = PALTAG_DIG_DISPLAY, + .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, - .anims = gUnknown_085A7BF8, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, .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, + .paletteTag = PALTAG_DIG_DISPLAY, + .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, + .paletteTag = PALTAG_DIG_DISPLAY, + .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, + .paletteTag = PALTAG_DIG_DISPLAY, + .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, - .anims = gUnknown_085A7BF8, - .images = gUnknown_085A7AF4, - .affineAnims = gUnknown_085A7CDC, - .callback = sub_8105B70 + .paletteTag = PALTAG_MISC, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .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 +5874,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 +5931,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 +5964,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 +6013,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,12 +6054,12 @@ 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[] = +static const struct Subsprite sSubsprites_ReelTimeNumberGap[] = { { .x = -8, @@ -5723,12 +6087,12 @@ 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 gUnknown_085A8044[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Reel[] = { { .x = -32, @@ -5772,12 +6136,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 +6177,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 +6218,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 +6259,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 +6316,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 +6333,7 @@ static const struct Subsprite gUnknown_085A80C8[] = } }; -static const struct Subsprite gUnknown_085A80CC[] = +static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] = { { .x = -8, @@ -5981,17 +6345,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 +6455,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 +6488,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 +6513,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 +6538,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 +6563,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 +6588,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 +6613,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 +6638,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 +6663,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 +6688,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 +6713,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 +6770,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 +6803,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 +6860,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 +6917,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 +6950,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,190 +7007,196 @@ static const struct Subsprite gUnknown_085A8244[] = } }; -static const struct SubspriteTable gUnknown_085A825C[] = -{ - ARRAY_COUNT(gUnknown_085A8244), gUnknown_085A8244 -}; - -static const struct SpriteTemplate *const gUnknown_083EDB5C[] = -{ - &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 -}; - -static const struct SubspriteTable *const gUnknown_083EDBC4[] = -{ - 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 -}; - -static const struct SpriteSheet gSlotMachineSpriteSheets[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 }, +static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegG[] = +{ + ARRAY_COUNT(sSubsprites_DigitalDisplay_RegG), sSubsprites_DigitalDisplay_RegG +}; + +static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES] = +{ + [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 sSubspriteTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES] = +{ + [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 sSlotMachineSpriteSheets[22] = +{ + { .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] = +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, }; -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 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 gBettingTilesId[][2] = +static const u8 sBetToMatchLineIds[MAX_BET][2] = { - {0, 0}, - {1, 2}, - {3, 4}, + {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 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 u8 sMatchLinesPerBet[MAX_BET] = { 1, 2, 2 }; -static const u16 *const gUnknown_083EDDA0[] = +// 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_085A843E, - gUnknown_085A845E, - gUnknown_085A847E, + sFlashingLightsInside_Pal, + sFlashingLightsMiddle_Pal, + sFlashingLightsOutside_Pal, }; -static const u16 *const gUnknown_083EDDAC = {gSlotMachineMenu_Pal + 0x10}; - -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 sSlotMachineMenu_Pal = {gSlotMachineMenu_Pal + 16}; -static const u16 *const gUnknown_083EDE10[] = +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[] = { - gUnknown_085A84B0, - gUnknown_085A84D0, - gUnknown_085A84F0, - gUnknown_08DCF230, + 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 gUnknown_083EDE20 = gUnknown_08DCF230; -static const u16 gPalette_83EDE24[] = INCBIN_U16("graphics/slot_machine/85A8524.bin"); +static const u16 *const sDigitalDisplay_Pal = gSlotMachineDigitalDisplay_Pal; +static const u16 sUnkPalette[] = 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 = gSlotMachineReelTime_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 gReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz"); -static const u16 gReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/85A96E0.bin"); -static const u16 gUnknown_085A9898[] = {0}; +static const u32 sReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz"); // reel_time_machine and reel_time_pikachu +static const u16 sReelTimeWindow_Tilemap[] = INCBIN_U16("graphics/slot_machine/reel_time_window.bin"); +static const u16 sEmptyTilemap[] = {0}; diff --git a/src/start_menu.c b/src/start_menu.c index 88ad364c7..68a316185 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/starter_choose.c b/src/starter_choose.c index 6295e33ca..2585f3408 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -414,7 +414,7 @@ void CB2_ChooseStarter(void) DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 0x2A8, 0xD0); - clear_scheduled_bg_copies_to_vram(); + ClearScheduledBgCopiesToVram(); ScanlineEffect_Stop(); ResetTasks(); ResetSpriteData(); @@ -474,7 +474,7 @@ static void CB2_StarterChoose(void) RunTasks(); AnimateSprites(); BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); + DoScheduledBgTilemapCopiesToVram(); UpdatePaletteFade(); } diff --git a/src/trainer_hill.c b/src/trainer_hill.c index d6cb49837..c5aea14d9 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 68a16e208..c37f37262 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; @@ -603,14 +603,14 @@ 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); 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)); @@ -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) @@ -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; - } } } @@ -1930,7 +1924,7 @@ void sub_80EDA80(void) } } -void sub_80EDB44(void) +void TryPutTodaysRivalTrainerOnAir(void) { TVShow *show; u32 i; diff --git a/src/wallclock.c b/src/wallclock.c index 00ab65817..aa2bd8019 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(); } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 1c4fd24fd..492a10101 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; diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 8d959465f..4e85953fd 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: diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 55335e382..5e246ff24 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"; |