summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-01-21 19:49:52 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2018-01-21 19:49:52 -0500
commit79b322918594737d7dc8405e2ad823335693b9ae (patch)
tree4826b774febbed88a50d22116fd896c34447997e
parent5ffd006acfe8ad12e88fa53a93a55b6f59e77779 (diff)
parent68a402883f780a61f54c2f0c8740429d0b2b3a81 (diff)
Merge branch 'master' into pokemon_storage_system
-rw-r--r--Makefile16
-rw-r--r--asm/battle_9.s24
-rw-r--r--[-rwxr-xr-x]asm/current.s0
-rw-r--r--[-rwxr-xr-x]asm/dark.s0
-rw-r--r--[-rwxr-xr-x]asm/fight.s0
-rw-r--r--[-rwxr-xr-x]asm/flying.s0
-rw-r--r--[-rwxr-xr-x]asm/ghost.s0
-rw-r--r--[-rwxr-xr-x]asm/ground.s0
-rw-r--r--[-rwxr-xr-x]asm/ice.s0
-rw-r--r--[-rwxr-xr-x]asm/normal.s0
-rw-r--r--[-rwxr-xr-x]asm/pc_screen_effect.s0
-rw-r--r--asm/pokemon_item_effect.s1969
-rw-r--r--[-rwxr-xr-x]asm/psychic.s0
-rw-r--r--[-rwxr-xr-x]asm/rock.s0
-rw-r--r--[-rwxr-xr-x]asm/unk_text_8095904.s0
-rw-r--r--[-rwxr-xr-x]asm/water.s0
-rw-r--r--common_syms/battle/battle_anim.txt3
-rw-r--r--common_syms/debug/mori_debug_menu.txt1
-rw-r--r--common_syms/debug/sound_check_menu.txt2
-rw-r--r--common_syms/engine/link.txt46
-rw-r--r--common_syms/engine/load_save.txt1
-rw-r--r--common_syms/engine/main.txt9
-rw-r--r--common_syms/engine/random.txt1
-rw-r--r--common_syms/engine/record_mixing.txt1
-rw-r--r--common_syms/engine/rtc.txt1
-rw-r--r--common_syms/engine/save.txt9
-rw-r--r--common_syms/engine/sound.txt1
-rw-r--r--common_syms/engine/sprite.txt12
-rw-r--r--common_syms/engine/string_util.txt1
-rw-r--r--common_syms/engine/task.txt1
-rw-r--r--common_syms/field/field_camera.txt3
-rw-r--r--common_syms/field/field_control_avatar.txt1
-rw-r--r--common_syms/field/field_map_obj.txt1
-rw-r--r--common_syms/field/fieldmap.txt1
-rw-r--r--common_syms/field/overworld.txt4
-rw-r--r--common_syms/field/start_menu.txt1
-rw-r--r--common_syms/field/tv.txt1
-rw-r--r--common_syms/libs/agb_flash.txt10
-rw-r--r--common_syms/libs/m4a_2.txt12
-rw-r--r--common_syms/pokemon/pokeblock_feed.txt12
-rw-r--r--common_syms/pokemon/pokedex.txt2
-rw-r--r--common_syms/pokemon/pokemon_1.txt4
-rw-r--r--common_syms/pokemon/pokemon_menu.txt2
-rw-r--r--common_syms/rom3.txt1
-rw-r--r--common_syms/scanline_effect.txt2
-rw-r--r--common_syms/scene/berry_blender.txt4
-rw-r--r--common_syms/scene/contest_painting.txt5
-rw-r--r--common_syms/scene/cute_sketch.txt0
-rw-r--r--common_syms/scene/egg_hatch.txt1
-rw-r--r--common_syms/scene/evolution_scene.txt1
-rw-r--r--common_syms/scene/intro.txt2
-rw-r--r--data/battle_7.s25
-rw-r--r--data/battle_scripts_1.s6
-rw-r--r--data/btl_attrs.s337
-rw-r--r--data/data_8393054.s110
-rw-r--r--data/gray_sun.s21
-rw-r--r--[-rwxr-xr-x]data/maps/events/Route124_DivingTreasureHuntersHouse.inc0
-rw-r--r--data/mon_attrs.s (renamed from data/data2a.s)328
-rw-r--r--[-rwxr-xr-x]data/pc_screen_effect.s0
-rw-r--r--data/smokescreen.s (renamed from data/data2b.s)21
-rw-r--r--data/sparkle.s21
-rw-r--r--data/unused_hit.s29
-rw-r--r--data/unused_orb.s24
-rw-r--r--data/unused_orb2.s27
-rw-r--r--data/unused_paw.s8
-rw-r--r--[-rwxr-xr-x]graphics/birch_speech/blank_pal.pal0
-rw-r--r--include/battle.h148
-rw-r--r--include/battle_script_commands.h65
-rw-r--r--include/battle_string_ids.h387
-rw-r--r--include/battle_util.h4
-rw-r--r--include/constants/items.h15
-rw-r--r--include/constants/songs.h708
-rw-r--r--include/constants/weather.h4
-rw-r--r--[-rwxr-xr-x]include/contest_ai.h0
-rw-r--r--include/decoration.h1
-rw-r--r--include/easy_chat.h2
-rw-r--r--[-rwxr-xr-x]include/ewram.h4
-rw-r--r--include/field_effect.h1
-rw-r--r--include/field_weather.h99
-rw-r--r--[-rwxr-xr-x]include/gba/isagbprint.h0
-rw-r--r--include/gba/macro.h53
-rw-r--r--include/global.fieldmap.h3
-rw-r--r--include/item_menu.h2
-rw-r--r--include/matsuda_debug_menu.h1
-rw-r--r--include/menu_helpers.h27
-rw-r--r--include/money.h2
-rw-r--r--include/pokedex.h2
-rw-r--r--include/pokemon.h6
-rw-r--r--include/pokemon_item_effect.h2
-rw-r--r--[-rwxr-xr-x]include/region_map_sections.h0
-rw-r--r--include/shop.h27
-rw-r--r--ld_script.sed14
-rw-r--r--ld_script.txt24
-rw-r--r--sound/song_table.inc712
-rw-r--r--[-rwxr-xr-x]src/battle/anim/alert.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/angel.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/angel_kiss.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/anger.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/blow_kiss.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/bottle.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/brace.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/breath.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/bullet.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/copy_orb.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/cube.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/curtain.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/cutter.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/cyclone.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/dark.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/dragon.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/draw.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/drum.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/egg.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/espeed.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/evasion.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/fang.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/flash.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/flying_hearts.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/flying_path.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/flying_petals.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/glitter.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/glow.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/grip.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/grow.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/guillotine.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/heal.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/heart_1.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/homing.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/hop.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/hop_2.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/kiss_fountain.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/leaf.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/love_bg.c23
-rw-r--r--[-rwxr-xr-x]src/battle/anim/lunge_1.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/lunge_2.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/money.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/moon.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/note_rain.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/note_scatter.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/note_scatter_2.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/note_wave.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/orbit.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/orbit_fast.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/orbit_scatter.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/orbs.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/osmose.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/perceive.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/powder.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/ring.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/roots.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/scan.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/scary_face.c21
-rw-r--r--[-rwxr-xr-x]src/battle/anim/seed.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/shadow_enlarge.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/shadow_minimize.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/shield.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/shimmer.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/silhouette.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/slash.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/sleep.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/slice.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/smoke.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/sonic.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/sonic_task.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/spin_finger.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/spit.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/splash.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/startle.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/strike.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/switch.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/sword.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/taunt_finger.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/tendrils.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/thought.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/thrashing.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/tile_in.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/tile_out.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/twinkle.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_1.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_2.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_3.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_4.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_5.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_6.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_7.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_8.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/unused_9.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/wave_finger.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/whip.c0
-rw-r--r--[-rwxr-xr-x]src/battle/anim/withdraw.c0
-rw-r--r--src/battle/battle_2.c46
-rw-r--r--src/battle/battle_4.c3268
-rw-r--r--src/battle/battle_7.c15
-rw-r--r--src/battle/battle_ai.c18
-rw-r--r--src/battle/battle_anim.c126
-rw-r--r--src/battle/battle_controller_linkpartner.c10
-rw-r--r--src/battle/battle_controller_player.c33
-rw-r--r--src/battle/battle_controller_wally.c6
-rw-r--r--src/battle/battle_message.c75
-rw-r--r--src/battle/battle_party_menu.c6
-rw-r--r--src/battle/battle_setup.c36
-rw-r--r--src/battle/battle_transition.c4
-rw-r--r--src/battle/battle_util.c368
-rw-r--r--src/battle/post_battle_event_funcs.c6
-rw-r--r--src/contest.c46
-rw-r--r--[-rwxr-xr-x]src/contest_ai.c0
-rw-r--r--[-rwxr-xr-x]src/data/battle_strings_de.h2
-rw-r--r--[-rwxr-xr-x]src/data/battle_strings_en.h2
-rw-r--r--[-rwxr-xr-x]src/data/credits_de.h0
-rw-r--r--[-rwxr-xr-x]src/data/credits_en.h0
-rw-r--r--src/debug/crash.c55
-rw-r--r--src/debug/matsuda_debug_menu.c86
-rw-r--r--src/debug/mori_debug_menu.c8
-rw-r--r--src/debug/unknown_debug_menu.c6
-rw-r--r--src/easy_chat_2.c2
-rw-r--r--src/engine/cable_club.c4
-rw-r--r--src/engine/naming_screen.c27
-rw-r--r--src/engine/option_menu.c17
-rw-r--r--src/engine/palette.c4
-rw-r--r--src/engine/record_mixing.c2
-rw-r--r--src/engine/reset_rtc_screen.c20
-rw-r--r--src/engine/save.c4
-rw-r--r--src/engine/time_events.c2
-rw-r--r--src/engine/trade.c43
-rw-r--r--src/engine/trainer_card.c46
-rw-r--r--src/field/berry_tag_screen.c6
-rw-r--r--src/field/choose_party.c2
-rw-r--r--src/field/coord_event_weather.c4
-rw-r--r--src/field/decoration.c45
-rw-r--r--src/field/diploma.c2
-rw-r--r--src/field/field_control_avatar.c9
-rw-r--r--src/field/field_effect.c18
-rw-r--r--src/field/field_effect_helpers.c4
-rw-r--r--src/field/field_fadetransition.c14
-rw-r--r--src/field/field_player_avatar.c2
-rw-r--r--src/field/field_specials.c24
-rw-r--r--src/field/field_weather.c800
-rw-r--r--src/field/field_weather_effects.c85
-rw-r--r--src/field/fldeff_cut.c4
-rw-r--r--src/field/fldeff_escalator.c132
-rw-r--r--src/field/item_menu.c108
-rw-r--r--src/field/item_use.c26
-rw-r--r--src/field/menu_helpers.c139
-rw-r--r--src/field/money.c4
-rw-r--r--src/field/overworld.c25
-rw-r--r--src/field/party_menu.c35
-rw-r--r--src/field/pc_screen_effect.c2
-rw-r--r--src/field/player_pc.c62
-rw-r--r--src/field/pokeblock.c48
-rw-r--r--src/field/region_map.c9
-rw-r--r--src/field/safari_zone.c2
-rw-r--r--src/field/scrcmd.c10
-rw-r--r--src/field/secret_base.c36
-rw-r--r--src/field/shop.c662
-rw-r--r--src/field/slot_machine.c19
-rw-r--r--src/field/start_menu.c45
-rw-r--r--src/field/trader.c4
-rw-r--r--src/field/tv.c24
-rw-r--r--src/field/wallclock.c19
-rw-r--r--src/field/wild_encounter.c2
-rw-r--r--[-rwxr-xr-x]src/libs/libisagbprn.c0
-rw-r--r--src/pokemon/mon_markings.c3
-rw-r--r--src/pokemon/pokeblock_feed.c2
-rw-r--r--src/pokemon/pokedex.c48
-rw-r--r--src/pokemon/pokemon_3.c10
-rw-r--r--src/pokemon/pokemon_item_effect.c541
-rw-r--r--src/pokemon/pokemon_menu.c8
-rw-r--r--src/pokemon/pokemon_storage_system.c4
-rw-r--r--src/pokemon/pokemon_summary_screen.c27
-rw-r--r--src/rom3.c10
-rw-r--r--src/rom6.c2
-rw-r--r--src/rom_800D42C.c8
-rw-r--r--src/rom_8077ABC.c9
-rw-r--r--src/roulette.c6
-rw-r--r--src/scene/berry_blender.c59
-rw-r--r--src/scene/cable_car.c9
-rw-r--r--src/scene/contest_painting.c17
-rw-r--r--src/scene/egg_hatch.c34
-rw-r--r--src/scene/evolution_scene.c4
-rw-r--r--src/scene/hall_of_fame.c41
-rw-r--r--src/scene/intro.c4
-rw-r--r--[-rwxr-xr-x]src/scene/intro_credits_graphics.c7
-rw-r--r--src/script_pokemon_util_80C4BF0.c4
-rw-r--r--sym_bss.txt84
-rw-r--r--sym_common.txt555
-rw-r--r--sym_ewram.txt803
286 files changed, 5827 insertions, 8779 deletions
diff --git a/Makefile b/Makefile
index 13c91f71d..eda7fb2c2 100644
--- a/Makefile
+++ b/Makefile
@@ -109,16 +109,12 @@ tidy:
$(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@
%.elf: $(LD_SCRIPT) $(ALL_OBJECTS)
- cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ ../../$(LIBGCC) ../../$(LIBC)
-
-$(LD_SCRIPT): $(BUILD_DIR)/sym_bss.ld $(BUILD_DIR)/sym_common.ld $(BUILD_DIR)/sym_ewram.ld ld_script.txt
- cd $(BUILD_DIR) && sed -f ../../ld_script.sed ../../ld_script.txt | sed "s#tools/#../../tools/#g" >ld_script.ld
-$(BUILD_DIR)/sym_bss.ld: sym_bss.txt
- cd $(BUILD_DIR) && ../../$(RAMSCRGEN) .bss ../../sym_bss.txt $(GAME_LANGUAGE) >sym_bss.ld
-$(BUILD_DIR)/sym_common.ld: sym_common.txt $(C_OBJECTS) $(wildcard common_syms/*.txt)
- cd $(BUILD_DIR) && ../../$(RAMSCRGEN) COMMON ../../sym_common.txt $(GAME_LANGUAGE) -c src,../../common_syms >sym_common.ld
-$(BUILD_DIR)/sym_ewram.ld: sym_ewram.txt
- cd $(BUILD_DIR) && ../../$(RAMSCRGEN) ewram_data ../../sym_ewram.txt $(GAME_LANGUAGE) >sym_ewram.ld
+ cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) ../../$(LIBGCC) ../../$(LIBC) -o ../../$@
+
+$(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_common.ld $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_bss.ld
+ cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld
+$(BUILD_DIR)/sym_%.ld: sym_%.txt
+ $(CPP) -P $(CPPFLAGS) $< | sed -e "s#tools/#../../tools/#g" > $@
$(C_OBJECTS): $(BUILD_DIR)/%.o: %.c $$(C_DEP)
$(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i
diff --git a/asm/battle_9.s b/asm/battle_9.s
index fc4cbcf4b..9dbb7c619 100644
--- a/asm/battle_9.s
+++ b/asm/battle_9.s
@@ -273,7 +273,7 @@ sub_80361E8: @ 80361E8
beq _08036214
b _08036400
_08036214:
- ldr r1, _0803627C @ =gMoveHitWith
+ ldr r1, _0803627C @ =gLastLandedMoves
ldr r5, _08036280 @ =gActiveBank
ldrb r3, [r5]
lsls r0, r3, 1
@@ -326,7 +326,7 @@ _08036242:
ldrb r7, [r5]
b _080362B2
.align 2, 0
-_0803627C: .4byte gMoveHitWith
+_0803627C: .4byte gLastLandedMoves
_08036280: .4byte gActiveBank
_08036284: .4byte 0x0000ffff
_08036288: .4byte gBattleMoves
@@ -348,7 +348,7 @@ _080362AE:
mov r8, r7
_080362B2:
ldr r3, _080362D4 @ =gBattleMoves
- ldr r1, _080362D8 @ =gMoveHitWith
+ ldr r1, _080362D8 @ =gLastLandedMoves
ldr r2, _080362DC @ =gActiveBank
ldrb r0, [r2]
lsls r0, 1
@@ -366,7 +366,7 @@ _080362B2:
b _080362F2
.align 2, 0
_080362D4: .4byte gBattleMoves
-_080362D8: .4byte gMoveHitWith
+_080362D8: .4byte gLastLandedMoves
_080362DC: .4byte gActiveBank
_080362E0:
cmp r0, 0xB
@@ -548,7 +548,7 @@ AI_SwitchIfNaturalCure: @ 8036410
lsrs r0, 1
cmp r1, r0
bcc _080364D8
- ldr r1, _08036470 @ =gMoveHitWith
+ ldr r1, _08036470 @ =gLastLandedMoves
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r0]
@@ -568,11 +568,11 @@ _08036456:
.align 2, 0
_08036468: .4byte gBattleMons
_0803646C: .4byte gActiveBank
-_08036470: .4byte gMoveHitWith
+_08036470: .4byte gLastLandedMoves
_08036474: .4byte 0x0000ffff
_08036478:
ldr r2, _080364A4 @ =gBattleMoves
- ldr r1, _080364A8 @ =gMoveHitWith
+ ldr r1, _080364A8 @ =gLastLandedMoves
ldr r4, _080364AC @ =gActiveBank
ldrb r0, [r4]
lsls r0, 1
@@ -594,7 +594,7 @@ _08036478:
b _080364E0
.align 2, 0
_080364A4: .4byte gBattleMoves
-_080364A8: .4byte gMoveHitWith
+_080364A8: .4byte gLastLandedMoves
_080364AC: .4byte gActiveBank
_080364B0:
movs r0, 0x8
@@ -863,7 +863,7 @@ sub_80366A4: @ 80366A4
lsls r1, 24
lsrs r1, 24
str r1, [sp, 0x4]
- ldr r1, _08036730 @ =gMoveHitWith
+ ldr r1, _08036730 @ =gLastLandedMoves
ldr r5, _08036734 @ =gActiveBank
ldrb r3, [r5]
lsls r0, r3, 1
@@ -924,7 +924,7 @@ _080366F6:
mov r10, r5
b _0803679C
.align 2, 0
-_08036730: .4byte gMoveHitWith
+_08036730: .4byte gLastLandedMoves
_08036734: .4byte gActiveBank
_08036738: .4byte 0x0000ffff
_0803673C: .4byte gUnknown_02024C5C
@@ -1053,7 +1053,7 @@ _08036844:
adds r0, r2
ldrb r2, [r0, 0x16]
_08036850:
- ldr r1, _080368F0 @ =gMoveHitWith
+ ldr r1, _080368F0 @ =gLastLandedMoves
ldr r5, _080368F4 @ =gActiveBank
ldrb r0, [r5]
lsls r0, 1
@@ -1132,7 +1132,7 @@ _080368DA:
bx r1
.align 2, 0
_080368EC: .4byte gBaseStats
-_080368F0: .4byte gMoveHitWith
+_080368F0: .4byte gLastLandedMoves
_080368F4: .4byte gActiveBank
_080368F8: .4byte gUnknown_02024C5C
_080368FC: .4byte gBattleMons
diff --git a/asm/current.s b/asm/current.s
index 4ef537dc3..4ef537dc3 100755..100644
--- a/asm/current.s
+++ b/asm/current.s
diff --git a/asm/dark.s b/asm/dark.s
index 9f6ad3278..9f6ad3278 100755..100644
--- a/asm/dark.s
+++ b/asm/dark.s
diff --git a/asm/fight.s b/asm/fight.s
index e8e3299af..e8e3299af 100755..100644
--- a/asm/fight.s
+++ b/asm/fight.s
diff --git a/asm/flying.s b/asm/flying.s
index ce3fb050b..ce3fb050b 100755..100644
--- a/asm/flying.s
+++ b/asm/flying.s
diff --git a/asm/ghost.s b/asm/ghost.s
index 2934f6dbd..2934f6dbd 100755..100644
--- a/asm/ghost.s
+++ b/asm/ghost.s
diff --git a/asm/ground.s b/asm/ground.s
index 3d4b69a9f..3d4b69a9f 100755..100644
--- a/asm/ground.s
+++ b/asm/ground.s
diff --git a/asm/ice.s b/asm/ice.s
index 032da59c3..032da59c3 100755..100644
--- a/asm/ice.s
+++ b/asm/ice.s
diff --git a/asm/normal.s b/asm/normal.s
index fffbc3870..fffbc3870 100755..100644
--- a/asm/normal.s
+++ b/asm/normal.s
diff --git a/asm/pc_screen_effect.s b/asm/pc_screen_effect.s
index 9d36df66c..9d36df66c 100755..100644
--- a/asm/pc_screen_effect.s
+++ b/asm/pc_screen_effect.s
diff --git a/asm/pokemon_item_effect.s b/asm/pokemon_item_effect.s
deleted file mode 100644
index 6995dc62b..000000000
--- a/asm/pokemon_item_effect.s
+++ /dev/null
@@ -1,1969 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "include/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ExecuteTableBasedItemEffect_
-ExecuteTableBasedItemEffect_: @ 803E18C
- push {r4,lr}
- sub sp, 0x4
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- movs r4, 0
- str r4, [sp]
- bl sub_803E1B0
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ExecuteTableBasedItemEffect_
-
- thumb_func_start sub_803E1B0
-sub_803E1B0: @ 803E1B0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x3C
- mov r8, r0
- ldr r0, [sp, 0x5C]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x8]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0xC]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x10]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x14]
- movs r0, 0x1
- str r0, [sp, 0x1C]
- movs r1, 0x6
- str r1, [sp, 0x24]
- movs r2, 0
- str r2, [sp, 0x2C]
- movs r3, 0x4
- str r3, [sp, 0x34]
- mov r0, r8
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0803E240
- ldr r0, _0803E21C @ =gMain
- ldr r4, _0803E220 @ =0x0000043d
- adds r0, r4
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803E22C
- ldr r2, _0803E224 @ =gEnigmaBerries
- ldr r0, _0803E228 @ =gBankInMenu
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x7]
- b _0803E248
- .align 2, 0
-_0803E21C: .4byte gMain
-_0803E220: .4byte 0x0000043d
-_0803E224: .4byte gEnigmaBerries
-_0803E228: .4byte gBankInMenu
-_0803E22C:
- ldr r0, _0803E238 @ =gSaveBlock1
- ldr r5, _0803E23C @ =0x00003688
- adds r0, r5
- ldrb r0, [r0]
- b _0803E248
- .align 2, 0
-_0803E238: .4byte gSaveBlock1
-_0803E23C: .4byte 0x00003688
-_0803E240:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
-_0803E248:
- str r0, [sp, 0x30]
- ldr r1, _0803E2A4 @ =gStringBank
- ldr r0, _0803E2A8 @ =gBankInMenu
- ldrb r2, [r0]
- strb r2, [r1]
- ldr r0, _0803E2AC @ =gMain
- ldr r1, _0803E2B0 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _0803E2E8
- ldr r0, _0803E2B4 @ =gActiveBank
- strb r2, [r0]
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- negs r1, r0
- orrs r1, r0
- lsrs r1, 31
- str r1, [sp, 0x18]
- ldr r0, _0803E2B8 @ =gNoOfAllBanks
- ldr r4, [sp, 0x8]
- subs r4, 0xD
- ldrb r0, [r0]
- cmp r1, r0
- bge _0803E2F4
- ldr r2, _0803E2BC @ =gBattlePartyID
- lsls r0, r1, 1
- adds r0, r2
- ldrh r3, [r0]
- ldr r5, [sp, 0xC]
- lsls r0, r5, 16
- lsrs r1, r0, 16
- adds r5, r0, 0
- cmp r3, r1
- bne _0803E2C0
- ldr r0, [sp, 0x18]
- str r0, [sp, 0x34]
- b _0803E2F4
- .align 2, 0
-_0803E2A4: .4byte gStringBank
-_0803E2A8: .4byte gBankInMenu
-_0803E2AC: .4byte gMain
-_0803E2B0: .4byte 0x0000043d
-_0803E2B4: .4byte gActiveBank
-_0803E2B8: .4byte gNoOfAllBanks
-_0803E2BC: .4byte gBattlePartyID
-_0803E2C0:
- ldr r1, [sp, 0x18]
- adds r1, 0x2
- str r1, [sp, 0x18]
- ldr r0, _0803E2E4 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r1, r0
- bge _0803E2F4
- lsls r0, r1, 1
- adds r0, r2
- ldrh r1, [r0]
- lsrs r0, r5, 16
- cmp r1, r0
- bne _0803E2C0
- ldr r2, [sp, 0x18]
- lsls r0, r2, 24
- lsrs r0, 24
- str r0, [sp, 0x34]
- b _0803E2F4
- .align 2, 0
-_0803E2E4: .4byte gNoOfAllBanks
-_0803E2E8:
- ldr r0, _0803E310 @ =gActiveBank
- strb r1, [r0]
- movs r3, 0x4
- str r3, [sp, 0x34]
- ldr r4, [sp, 0x8]
- subs r4, 0xD
-_0803E2F4:
- lsls r0, r4, 16
- lsrs r0, 16
- cmp r0, 0xA5
- bhi _0803E36C
- ldr r1, _0803E314 @ =gItemEffectTable
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _0803E318
- ldr r4, [sp, 0x8]
- cmp r4, 0xAF
- beq _0803E31E
- b _0803E36C
- .align 2, 0
-_0803E310: .4byte gActiveBank
-_0803E314: .4byte gItemEffectTable
-_0803E318:
- ldr r5, [sp, 0x8]
- cmp r5, 0xAF
- bne _0803E372
-_0803E31E:
- ldr r0, _0803E340 @ =gMain
- ldr r1, _0803E344 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803E350
- ldr r0, _0803E348 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- ldr r1, _0803E34C @ =gUnknown_02024DF8
- adds r0, r1
- b _0803E372
- .align 2, 0
-_0803E340: .4byte gMain
-_0803E344: .4byte 0x0000043d
-_0803E348: .4byte gActiveBank
-_0803E34C: .4byte gUnknown_02024DF8
-_0803E350:
- ldr r2, _0803E358 @ =gSaveBlock1 + 0x3676
- str r2, [sp, 0x20]
- b _0803E374
- .align 2, 0
-_0803E358: .4byte gSaveBlock1 + 0x3676
-_0803E35C:
- mov r0, r8
- movs r2, 0
- ldr r3, [sp, 0xC]
- bl BeginEvolutionScene
- movs r0, 0
- bl _0803F15C
-_0803E36C:
- movs r0, 0x1
- bl _0803F15C
-_0803E372:
- str r0, [sp, 0x20]
-_0803E374:
- movs r3, 0
- str r3, [sp, 0x18]
-_0803E378:
- ldr r4, [sp, 0x18]
- cmp r4, 0x5
- bls _0803E382
- bl _0803F14C
-_0803E382:
- lsls r0, r4, 2
- ldr r1, _0803E38C @ =_0803E390
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803E38C: .4byte _0803E390
- .align 2, 0
-_0803E390:
- .4byte _0803E3A8
- .4byte _0803E474
- .4byte _0803E508
- .4byte _0803E59C
- .4byte _0803E77C
- .4byte _0803EE1E
-_0803E3A8:
- ldr r5, [sp, 0x20]
- ldr r0, [sp, 0x18]
- adds r2, r5, r0
- ldrb r1, [r2]
- movs r0, 0x80
- ands r0, r1
- adds r6, r2, 0
- cmp r0, 0
- beq _0803E3F0
- ldr r0, _0803E460 @ =gMain
- ldr r1, _0803E464 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803E3F0
- ldr r2, [sp, 0x34]
- cmp r2, 0x4
- beq _0803E3F0
- ldr r1, _0803E468 @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- beq _0803E3F0
- ldr r0, _0803E46C @ =0xfff0ffff
- ands r1, r0
- str r1, [r2]
- movs r3, 0
- str r3, [sp, 0x1C]
-_0803E3F0:
- ldrb r1, [r6]
- movs r0, 0x30
- ands r0, r1
- cmp r0, 0
- beq _0803E41E
- ldr r1, _0803E468 @ =gBattleMons
- ldr r0, _0803E470 @ =gActiveBank
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 13
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- bne _0803E41E
- orrs r1, r3
- str r1, [r2]
- movs r4, 0
- str r4, [sp, 0x1C]
-_0803E41E:
- ldrb r0, [r6]
- movs r3, 0xF
- ands r3, r0
- cmp r3, 0
- bne _0803E42C
- bl _0803F14C
-_0803E42C:
- ldr r6, _0803E468 @ =gBattleMons
- ldr r5, _0803E470 @ =gActiveBank
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r6
- ldrb r2, [r1, 0x19]
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0803E446
- bl _0803F14C
-_0803E446:
- adds r0, r2, r3
- strb r0, [r1, 0x19]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r6
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- bgt _0803E45A
- b _0803E74E
-_0803E45A:
- movs r0, 0xC
- strb r0, [r1, 0x19]
- b _0803E74E
- .align 2, 0
-_0803E460: .4byte gMain
-_0803E464: .4byte 0x0000043d
-_0803E468: .4byte gBattleMons
-_0803E46C: .4byte 0xfff0ffff
-_0803E470: .4byte gActiveBank
-_0803E474:
- ldr r0, [sp, 0x20]
- ldr r1, [sp, 0x18]
- adds r2, r0, r1
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- lsls r3, r0, 24
- adds r6, r2, 0
- cmp r3, 0
- beq _0803E4BA
- ldr r7, _0803E500 @ =gBattleMons
- ldr r5, _0803E504 @ =gActiveBank
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r7
- ldrb r2, [r1, 0x1A]
- movs r0, 0x1A
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- bgt _0803E4BA
- lsrs r0, r3, 28
- adds r0, r2, r0
- strb r0, [r1, 0x1A]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r7
- movs r0, 0x1A
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0803E4B6
- movs r0, 0xC
- strb r0, [r1, 0x1A]
-_0803E4B6:
- movs r2, 0
- str r2, [sp, 0x1C]
-_0803E4BA:
- ldrb r0, [r6]
- movs r3, 0xF
- ands r3, r0
- cmp r3, 0
- bne _0803E4C8
- bl _0803F14C
-_0803E4C8:
- ldr r6, _0803E500 @ =gBattleMons
- ldr r5, _0803E504 @ =gActiveBank
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r6
- ldrb r2, [r1, 0x1B]
- movs r0, 0x1B
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0803E4E2
- bl _0803F14C
-_0803E4E2:
- adds r0, r2, r3
- strb r0, [r1, 0x1B]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r6
- movs r0, 0x1B
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0803E4F8
- movs r0, 0xC
- strb r0, [r1, 0x1B]
-_0803E4F8:
- movs r3, 0
- str r3, [sp, 0x1C]
- bl _0803F14C
- .align 2, 0
-_0803E500: .4byte gBattleMons
-_0803E504: .4byte gActiveBank
-_0803E508:
- ldr r4, [sp, 0x20]
- ldr r5, [sp, 0x18]
- adds r2, r4, r5
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- lsls r3, r0, 24
- adds r6, r2, 0
- cmp r3, 0
- beq _0803E54E
- ldr r7, _0803E594 @ =gBattleMons
- ldr r5, _0803E598 @ =gActiveBank
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r7
- ldrb r2, [r1, 0x1E]
- movs r0, 0x1E
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- bgt _0803E54E
- lsrs r0, r3, 28
- adds r0, r2, r0
- strb r0, [r1, 0x1E]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r7
- movs r0, 0x1E
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0803E54A
- movs r0, 0xC
- strb r0, [r1, 0x1E]
-_0803E54A:
- movs r0, 0
- str r0, [sp, 0x1C]
-_0803E54E:
- ldrb r0, [r6]
- movs r3, 0xF
- ands r3, r0
- cmp r3, 0
- bne _0803E55C
- bl _0803F14C
-_0803E55C:
- ldr r6, _0803E594 @ =gBattleMons
- ldr r5, _0803E598 @ =gActiveBank
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r6
- ldrb r2, [r1, 0x1C]
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0803E576
- bl _0803F14C
-_0803E576:
- adds r0, r2, r3
- strb r0, [r1, 0x1C]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r6
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0803E58C
- movs r0, 0xC
- strb r0, [r1, 0x1C]
-_0803E58C:
- movs r1, 0
- str r1, [sp, 0x1C]
- bl _0803F14C
- .align 2, 0
-_0803E594: .4byte gBattleMons
-_0803E598: .4byte gActiveBank
-_0803E59C:
- ldr r3, [sp, 0x20]
- ldr r4, [sp, 0x18]
- adds r2, r3, r4
- ldrb r1, [r2]
- movs r0, 0x80
- ands r0, r1
- adds r6, r2, 0
- cmp r0, 0
- beq _0803E5E4
- ldr r5, _0803E758 @ =gSideTimers
- ldr r4, _0803E75C @ =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- bne _0803E5E4
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- movs r0, 0x5
- strb r0, [r1, 0x2]
- movs r5, 0
- str r5, [sp, 0x1C]
-_0803E5E4:
- ldrb r1, [r6]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803E646
- mov r0, r8
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- cmp r0, 0x64
- beq _0803E646
- ldr r5, _0803E760 @ =gExperienceTables
- mov r0, r8
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- mov r0, r8
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _0803E764 @ =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r4, r0
- adds r4, r5
- ldr r0, [r4]
- str r0, [sp]
- mov r0, r8
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- movs r0, 0
- str r0, [sp, 0x1C]
-_0803E646:
- ldrb r1, [r6]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0803E682
- mov r0, r8
- ldr r1, [sp, 0xC]
- movs r2, 0x7
- ldr r3, [sp, 0x34]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0803E682
- ldr r1, [sp, 0x34]
- cmp r1, 0x4
- beq _0803E67E
- ldr r1, _0803E768 @ =gBattleMons
- movs r0, 0x58
- ldr r3, [sp, 0x34]
- adds r2, r3, 0
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, _0803E76C @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
-_0803E67E:
- movs r4, 0
- str r4, [sp, 0x1C]
-_0803E682:
- ldrb r1, [r6]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0803E6A2
- ldr r2, _0803E770 @ =0x00000f88
- mov r0, r8
- ldr r1, [sp, 0xC]
- ldr r3, [sp, 0x34]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0803E6A2
- movs r5, 0
- str r5, [sp, 0x1C]
-_0803E6A2:
- ldrb r1, [r6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0803E6C2
- mov r0, r8
- ldr r1, [sp, 0xC]
- movs r2, 0x10
- ldr r3, [sp, 0x34]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0803E6C2
- movs r0, 0
- str r0, [sp, 0x1C]
-_0803E6C2:
- ldrb r1, [r6]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0803E6E2
- mov r0, r8
- ldr r1, [sp, 0xC]
- movs r2, 0x20
- ldr r3, [sp, 0x34]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0803E6E2
- movs r1, 0
- str r1, [sp, 0x1C]
-_0803E6E2:
- ldrb r1, [r6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803E702
- mov r0, r8
- ldr r1, [sp, 0xC]
- movs r2, 0x40
- ldr r3, [sp, 0x34]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0803E702
- movs r2, 0
- str r2, [sp, 0x1C]
-_0803E702:
- ldrb r1, [r6]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0803E710
- bl _0803F14C
-_0803E710:
- ldr r0, _0803E774 @ =gMain
- ldr r3, _0803E778 @ =0x0000043d
- adds r0, r3
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0803E724
- bl _0803F14C
-_0803E724:
- ldr r4, [sp, 0x34]
- cmp r4, 0x4
- bne _0803E72E
- bl _0803F14C
-_0803E72E:
- ldr r1, _0803E768 @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0803E746
- bl _0803F14C
-_0803E746:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
-_0803E74E:
- movs r5, 0
- str r5, [sp, 0x1C]
- bl _0803F14C
- .align 2, 0
-_0803E758: .4byte gSideTimers
-_0803E75C: .4byte gActiveBank
-_0803E760: .4byte gExperienceTables
-_0803E764: .4byte gBaseStats
-_0803E768: .4byte gBattleMons
-_0803E76C: .4byte 0xf7ffffff
-_0803E770: .4byte 0x00000f88
-_0803E774: .4byte gMain
-_0803E778: .4byte 0x0000043d
-_0803E77C:
- ldr r1, [sp, 0x20]
- ldr r2, [sp, 0x18]
- adds r0, r1, r2
- ldrb r0, [r0]
- mov r10, r0
- movs r0, 0x20
- mov r3, r10
- ands r0, r3
- cmp r0, 0
- beq _0803E854
- movs r0, 0xDF
- ands r3, r0
- mov r10, r3
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- ldr r1, _0803E880 @ =gUnknown_08208238
- ldr r4, [sp, 0x10]
- adds r1, r4, r1
- ldrb r1, [r1]
- ands r0, r1
- lsls r1, r4, 1
- lsrs r0, r1
- str r0, [sp]
- adds r5, r4, 0
- adds r5, 0xD
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x10]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x28]
- ldr r0, [sp]
- cmp r0, 0x2
- bhi _0803E854
- ldr r0, [sp, 0x28]
- cmp r0, 0x4
- bls _0803E854
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- ldr r1, _0803E884 @ =gUnknown_08208240
- ldr r2, [sp, 0x10]
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- movs r1, 0x15
- mov r2, sp
- bl SetMonData
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, [sp, 0x10]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [sp, 0x28]
- subs r0, r3
- str r0, [sp]
- ldr r4, [sp, 0x10]
- adds r4, 0x11
- mov r0, r8
- adds r1, r4, 0
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- movs r4, 0
- str r4, [sp, 0x1C]
-_0803E854:
- movs r5, 0
- str r5, [sp, 0x28]
- mov r0, r10
- cmp r0, 0
- bne _0803E862
- bl _0803F14C
-_0803E862:
- movs r0, 0x1
- mov r1, r10
- ands r0, r1
- cmp r0, 0
- bne _0803E86E
- b _0803EE0A
-_0803E86E:
- ldr r2, [sp, 0x28]
- cmp r2, 0x7
- bls _0803E876
- b _0803EE0A
-_0803E876:
- lsls r0, r2, 2
- ldr r1, _0803E888 @ =_0803E88C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803E880: .4byte gUnknown_08208238
-_0803E884: .4byte gUnknown_08208240
-_0803E888: .4byte _0803E88C
- .align 2, 0
-_0803E88C:
- .4byte _0803E8AC
- .4byte _0803E8AC
- .4byte _0803E934
- .4byte _0803EB5C
- .4byte _0803EE0A
- .4byte _0803EE0A
- .4byte _0803EE0A
- .4byte _0803EDF4
-_0803E8AC:
- mov r0, r8
- bl GetMonEVCount
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _0803E8EC @ =0x000001fd
- cmp r5, r0
- bls _0803E8BE
- b _0803E36C
-_0803E8BE:
- ldr r0, _0803E8F0 @ =gUnknown_082082F2
- ldr r3, [sp, 0x28]
- adds r0, r3, r0
- ldrb r1, [r0]
- mov r0, r8
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- str r1, [sp]
- cmp r1, 0x63
- bls _0803E8D8
- b _0803EE0A
-_0803E8D8:
- ldr r4, [sp, 0x20]
- ldr r2, [sp, 0x24]
- adds r0, r4, r2
- ldrb r0, [r0]
- adds r1, r0
- cmp r1, 0x64
- bls _0803E8F4
- adds r0, 0x64
- subs r4, r0, r1
- b _0803E8F6
- .align 2, 0
-_0803E8EC: .4byte 0x000001fd
-_0803E8F0: .4byte gUnknown_082082F2
-_0803E8F4:
- adds r4, r0, 0
-_0803E8F6:
- adds r1, r5, r4
- movs r0, 0xFF
- lsls r0, 1
- cmp r1, r0
- bls _0803E904
- adds r0, r4, r0
- subs r4, r0, r1
-_0803E904:
- ldr r0, [sp]
- adds r0, r4
- str r0, [sp]
- ldr r0, _0803E930 @ =gUnknown_082082F2
- ldr r3, [sp, 0x28]
- adds r0, r3, r0
- ldrb r1, [r0]
- mov r0, r8
- mov r2, sp
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- ldr r0, [sp, 0x24]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x24]
- movs r4, 0
- str r4, [sp, 0x1C]
- b _0803EE0A
- .align 2, 0
-_0803E930: .4byte gUnknown_082082F2
-_0803E934:
- movs r0, 0x10
- mov r5, r10
- ands r0, r5
- cmp r0, 0
- beq _0803E9F4
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0803E954
- ldr r0, [sp, 0x24]
- adds r0, 0x1
- lsls r0, 24
- b _0803EC9E
-_0803E954:
- ldr r0, _0803E99C @ =gMain
- ldr r1, _0803E9A0 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r4, 0x2
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803EA0A
- ldr r2, [sp, 0x34]
- cmp r2, 0x4
- beq _0803E9B4
- ldr r2, _0803E9A4 @ =gAbsentBankFlags
- ldr r1, _0803E9A8 @ =gBitTable
- ldr r3, [sp, 0x34]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldr r1, _0803E9AC @ =gBattlePartyID
- lsls r0, r3, 1
- adds r0, r1
- ldrb r0, [r0]
- bl pokemon_order_func
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, [sp, 0x34]
- bl CopyPlayerPartyMonToBattleData
- ldr r0, _0803E9B0 @ =gActiveBank
- ldrb r0, [r0]
- b _0803E9CC
- .align 2, 0
-_0803E99C: .4byte gMain
-_0803E9A0: .4byte 0x0000043d
-_0803E9A4: .4byte gAbsentBankFlags
-_0803E9A8: .4byte gBitTable
-_0803E9AC: .4byte gBattlePartyID
-_0803E9B0: .4byte gActiveBank
-_0803E9B4:
- ldr r3, _0803E9E4 @ =gAbsentBankFlags
- ldr r1, _0803E9E8 @ =gBitTable
- ldr r2, _0803E9EC @ =gActiveBank
- ldrb r0, [r2]
- eors r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r3]
- bics r0, r1
- strb r0, [r3]
- ldrb r0, [r2]
-_0803E9CC:
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0803EA0A
- ldr r1, _0803E9F0 @ =gBattleResults
- ldrb r0, [r1, 0x4]
- cmp r0, 0xFE
- bhi _0803EA0A
- adds r0, 0x1
- strb r0, [r1, 0x4]
- b _0803EA0A
- .align 2, 0
-_0803E9E4: .4byte gAbsentBankFlags
-_0803E9E8: .4byte gBitTable
-_0803E9EC: .4byte gActiveBank
-_0803E9F0: .4byte gBattleResults
-_0803E9F4:
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0803EA0A
- ldr r0, [sp, 0x24]
- adds r0, 0x1
- lsls r0, 24
- b _0803EC9E
-_0803EA0A:
- ldr r1, [sp, 0x24]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x24]
- ldr r4, [sp, 0x20]
- adds r1, r4, r1
- ldrb r1, [r1]
- str r1, [sp]
- adds r0, r1, 0
- cmp r0, 0xFE
- beq _0803EA4C
- cmp r0, 0xFE
- bhi _0803EA2C
- cmp r0, 0xFD
- beq _0803EA62
- b _0803EA6C
-_0803EA2C:
- cmp r1, 0xFF
- bne _0803EA6C
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- subs r4, r0
- str r4, [sp]
- b _0803EA6C
-_0803EA4C:
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- lsrs r0, 1
- str r0, [sp]
- cmp r0, 0
- bne _0803EA6C
- movs r0, 0x1
- b _0803EA6A
-_0803EA62:
- ldr r0, _0803EB24 @ =gSharedMem
- ldr r5, _0803EB28 @ =0x000160fa
- adds r0, r5
- ldrb r0, [r0]
-_0803EA6A:
- str r0, [sp]
-_0803EA6C:
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r4, r0
- beq _0803EB4C
- ldr r0, [sp, 0x14]
- cmp r0, 0
- bne _0803EB40
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- cmp r1, r0
- bls _0803EAB8
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- str r0, [sp]
-_0803EAB8:
- mov r0, r8
- movs r1, 0x39
- mov r2, sp
- bl SetMonData
- ldr r0, _0803EB2C @ =gMain
- ldr r1, _0803EB30 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803EB48
- ldr r2, [sp, 0x34]
- cmp r2, 0x4
- beq _0803EB48
- ldr r1, _0803EB34 @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldr r1, [sp]
- strh r1, [r0, 0x28]
- movs r0, 0x10
- mov r3, r10
- ands r0, r3
- cmp r0, 0
- bne _0803EB48
- ldr r4, _0803EB38 @ =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0803EB48
- ldr r1, _0803EB3C @ =gBattleResults
- ldrb r0, [r1, 0x3]
- cmp r0, 0xFE
- bhi _0803EB08
- adds r0, 0x1
- strb r0, [r1, 0x3]
-_0803EB08:
- ldrb r5, [r4]
- add r0, sp, 0x34
- ldrb r0, [r0]
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl EmitGetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- strb r5, [r4]
- b _0803EB48
- .align 2, 0
-_0803EB24: .4byte gSharedMem
-_0803EB28: .4byte 0x000160fa
-_0803EB2C: .4byte gMain
-_0803EB30: .4byte 0x0000043d
-_0803EB34: .4byte gBattleMons
-_0803EB38: .4byte gActiveBank
-_0803EB3C: .4byte gBattleResults
-_0803EB40:
- ldr r1, _0803EB58 @ =gBattleMoveDamage
- ldr r0, [sp]
- negs r0, r0
- str r0, [r1]
-_0803EB48:
- movs r1, 0
- str r1, [sp, 0x1C]
-_0803EB4C:
- movs r0, 0xEF
- mov r2, r10
- ands r2, r0
- mov r10, r2
- b _0803EE0A
- .align 2, 0
-_0803EB58: .4byte gBattleMoveDamage
-_0803EB5C:
- movs r7, 0x2
- mov r0, r10
- ands r0, r7
- cmp r0, 0
- beq _0803EB68
- b _0803ECB8
-_0803EB68:
- movs r5, 0
- ldr r3, [sp, 0x24]
- adds r3, 0x1
- str r3, [sp, 0x38]
-_0803EB70:
- movs r4, 0x11
- adds r4, r5
- mov r9, r4
- mov r0, r8
- mov r1, r9
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- adds r7, r5, 0
- adds r7, 0xD
- mov r0, r8
- adds r1, r7, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r5, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- adds r2, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp]
- cmp r1, r0
- beq _0803EC92
- ldr r2, [sp, 0x20]
- ldr r3, [sp, 0x24]
- adds r0, r2, r3
- ldrb r0, [r0]
- adds r0, r1, r0
- str r0, [sp]
- mov r0, r8
- adds r1, r7, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- adds r2, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp]
- cmp r1, r0
- bls _0803EC28
- mov r0, r8
- adds r1, r7, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- adds r2, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
-_0803EC28:
- mov r0, r8
- mov r1, r9
- mov r2, sp
- bl SetMonData
- ldr r0, _0803ECA4 @ =gMain
- ldr r4, _0803ECA8 @ =0x0000043d
- adds r0, r4
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803EC8E
- ldr r0, [sp, 0x34]
- cmp r0, 0x4
- beq _0803EC8E
- ldr r4, _0803ECAC @ =gBattleMons
- movs r0, 0x58
- ldr r1, [sp, 0x34]
- adds r3, r1, 0
- muls r3, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 14
- ands r1, r0
- cmp r1, 0
- bne _0803EC8E
- ldr r1, _0803ECB0 @ =gDisableStructs
- ldr r2, [sp, 0x34]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0803ECB4 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0803EC8E
- adds r0, r5, r3
- adds r1, r4, 0
- adds r1, 0x24
- adds r0, r1
- ldr r1, [sp]
- strb r1, [r0]
-_0803EC8E:
- movs r3, 0
- str r3, [sp, 0x1C]
-_0803EC92:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _0803EC9A
- b _0803EB70
-_0803EC9A:
- ldr r4, [sp, 0x38]
- lsls r0, r4, 24
-_0803EC9E:
- lsrs r0, 24
- str r0, [sp, 0x24]
- b _0803EE0A
- .align 2, 0
-_0803ECA4: .4byte gMain
-_0803ECA8: .4byte 0x0000043d
-_0803ECAC: .4byte gBattleMons
-_0803ECB0: .4byte gDisableStructs
-_0803ECB4: .4byte gBitTable
-_0803ECB8:
- ldr r6, [sp, 0x10]
- adds r6, 0x11
- mov r0, r8
- adds r1, r6, 0
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- ldr r5, [sp, 0x10]
- adds r5, 0xD
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x10]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [sp]
- cmp r2, r0
- bne _0803ED00
- b _0803EE0A
-_0803ED00:
- ldr r1, [sp, 0x24]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x24]
- ldr r0, [sp, 0x20]
- adds r1, r0, r1
- ldrb r0, [r1]
- adds r0, r2, r0
- str r0, [sp]
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x10]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp]
- cmp r1, r0
- bls _0803ED74
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x10]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
-_0803ED74:
- mov r0, r8
- adds r1, r6, 0
- mov r2, sp
- bl SetMonData
- ldr r0, _0803EDE0 @ =gMain
- ldr r1, _0803EDE4 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _0803EDD8
- ldr r2, [sp, 0x34]
- cmp r2, 0x4
- beq _0803EDD8
- ldr r4, _0803EDE8 @ =gBattleMons
- movs r0, 0x58
- adds r3, r2, 0
- muls r3, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0803EDD8
- ldr r1, _0803EDEC @ =gDisableStructs
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0803EDF0 @ =gBitTable
- ldr r5, [sp, 0x10]
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0803EDD8
- adds r0, r5, r3
- adds r1, r4, 0
- adds r1, 0x24
- adds r0, r1
- ldr r1, [sp]
- strb r1, [r0]
-_0803EDD8:
- movs r0, 0
- str r0, [sp, 0x1C]
- b _0803EE0A
- .align 2, 0
-_0803EDE0: .4byte gMain
-_0803EDE4: .4byte 0x0000043d
-_0803EDE8: .4byte gBattleMons
-_0803EDEC: .4byte gDisableStructs
-_0803EDF0: .4byte gBitTable
-_0803EDF4:
- mov r0, r8
- movs r1, 0x2
- ldr r2, [sp, 0x8]
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _0803EE0A
- bl _0803E35C
-_0803EE0A:
- ldr r1, [sp, 0x28]
- adds r1, 0x1
- str r1, [sp, 0x28]
- mov r2, r10
- lsrs r2, 1
- mov r10, r2
- cmp r2, 0
- beq _0803EE1C
- b _0803E862
-_0803EE1C:
- b _0803F14C
-_0803EE1E:
- ldr r3, [sp, 0x20]
- ldr r4, [sp, 0x18]
- adds r0, r3, r4
- ldrb r0, [r0]
- mov r10, r0
- movs r5, 0
- str r5, [sp, 0x28]
- cmp r0, 0
- bne _0803EE32
- b _0803F14C
-_0803EE32:
- movs r0, 0x1
- mov r1, r10
- ands r0, r1
- cmp r0, 0
- bne _0803EE3E
- b _0803F13A
-_0803EE3E:
- ldr r2, [sp, 0x28]
- cmp r2, 0x7
- bls _0803EE46
- b _0803F13A
-_0803EE46:
- lsls r0, r2, 2
- ldr r1, _0803EE50 @ =_0803EE54
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803EE50: .4byte _0803EE54
- .align 2, 0
-_0803EE54:
- .4byte _0803EE74
- .4byte _0803EE74
- .4byte _0803EE74
- .4byte _0803EE74
- .4byte _0803EEF8
- .4byte _0803EFCC
- .4byte _0803F026
- .4byte _0803F07C
-_0803EE74:
- mov r0, r8
- bl GetMonEVCount
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _0803EEBC @ =0x000001fd
- cmp r5, r0
- bls _0803EE88
- bl _0803E36C
-_0803EE88:
- ldr r0, _0803EEC0 @ =gUnknown_082082F2
- ldr r4, [sp, 0x28]
- adds r4, 0x2
- adds r0, r4, r0
- ldrb r1, [r0]
- mov r0, r8
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- str r1, [sp]
- adds r2, r4, 0
- cmp r1, 0x63
- bls _0803EEA6
- b _0803F13A
-_0803EEA6:
- ldr r3, [sp, 0x20]
- ldr r4, [sp, 0x24]
- adds r0, r3, r4
- ldrb r0, [r0]
- adds r1, r0
- cmp r1, 0x64
- bls _0803EEC4
- adds r0, 0x64
- subs r4, r0, r1
- b _0803EEC6
- .align 2, 0
-_0803EEBC: .4byte 0x000001fd
-_0803EEC0: .4byte gUnknown_082082F2
-_0803EEC4:
- adds r4, r0, 0
-_0803EEC6:
- adds r1, r5, r4
- movs r0, 0xFF
- lsls r0, 1
- cmp r1, r0
- bls _0803EED4
- adds r0, r4, r0
- subs r4, r0, r1
-_0803EED4:
- ldr r0, [sp]
- adds r0, r4
- str r0, [sp]
- ldr r0, _0803EEF4 @ =gUnknown_082082F2
- adds r0, r2, r0
- ldrb r1, [r0]
- mov r0, r8
- mov r2, sp
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- movs r5, 0
- str r5, [sp, 0x1C]
- b _0803F130
- .align 2, 0
-_0803EEF4: .4byte gUnknown_082082F2
-_0803EEF8:
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- ldr r1, _0803EFC0 @ =gUnknown_08208238
- ldr r2, [sp, 0x10]
- adds r1, r2, r1
- ldrb r1, [r1]
- ands r0, r1
- lsls r1, r2, 1
- lsrs r0, r1
- str r0, [sp]
- cmp r0, 0x2
- bls _0803EF18
- b _0803F13A
-_0803EF18:
- adds r5, r2, 0
- adds r5, 0xD
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x10]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r4, r0, 24
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- ldr r1, _0803EFC4 @ =gUnknown_0820823C
- ldr r3, [sp, 0x10]
- adds r1, r3, r1
- ldrb r2, [r1]
- ands r2, r0
- str r2, [sp]
- ldr r0, _0803EFC8 @ =gUnknown_08208240
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- adds r2, r0
- str r2, [sp]
- mov r0, r8
- movs r1, 0x15
- mov r2, sp
- bl SetMonData
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, [sp, 0x10]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- subs r0, r4
- str r0, [sp]
- ldr r4, [sp, 0x10]
- adds r4, 0x11
- mov r0, r8
- adds r1, r4, 0
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- movs r4, 0
- str r4, [sp, 0x1C]
- b _0803F13A
- .align 2, 0
-_0803EFC0: .4byte gUnknown_08208238
-_0803EFC4: .4byte gUnknown_0820823C
-_0803EFC8: .4byte gUnknown_08208240
-_0803EFCC:
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0x63
- bls _0803EFDC
- b _0803F130
-_0803EFDC:
- ldr r5, [sp, 0x1C]
- cmp r5, 0
- beq _0803EFE4
- b _0803F130
-_0803EFE4:
- ldr r0, [sp, 0x2C]
- cmp r0, 0
- beq _0803EFEC
- b _0803F130
-_0803EFEC:
- ldr r1, [sp, 0x20]
- ldr r2, [sp, 0x24]
- adds r0, r1, r2
- ldrb r0, [r0]
- str r0, [sp, 0x2C]
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- adds r5, r0, 0
- str r5, [sp, 0x4]
- ldr r3, [sp, 0x2C]
- lsls r4, r3, 24
- asrs r1, r4, 24
- cmp r1, 0
- ble _0803F0D0
- ldr r0, [sp, 0x30]
- cmp r0, 0x1B
- bne _0803F0D0
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, r5, r0
- str r0, [sp, 0x4]
- adds r2, r4, 0
- b _0803F0DC
-_0803F026:
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0x63
- bls _0803F130
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0xC7
- bhi _0803F130
- ldr r2, [sp, 0x1C]
- cmp r2, 0
- bne _0803F130
- ldr r3, [sp, 0x2C]
- cmp r3, 0
- bne _0803F130
- ldr r4, [sp, 0x20]
- ldr r5, [sp, 0x24]
- adds r0, r4, r5
- ldrb r0, [r0]
- str r0, [sp, 0x2C]
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- str r4, [sp, 0x4]
- ldr r0, [sp, 0x2C]
- lsls r5, r0, 24
- asrs r1, r5, 24
- cmp r1, 0
- ble _0803F076
- ldr r2, [sp, 0x30]
- cmp r2, 0x1B
- beq _0803F0BE
-_0803F076:
- ldr r3, [sp, 0x2C]
- lsls r2, r3, 24
- b _0803F0D4
-_0803F07C:
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0xC7
- bls _0803F130
- ldr r4, [sp, 0x1C]
- cmp r4, 0
- bne _0803F130
- ldr r5, [sp, 0x2C]
- cmp r5, 0
- bne _0803F130
- ldr r1, [sp, 0x20]
- ldr r2, [sp, 0x24]
- adds r0, r1, r2
- ldrb r0, [r0]
- str r0, [sp, 0x2C]
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- str r4, [sp, 0x4]
- ldr r3, [sp, 0x2C]
- lsls r5, r3, 24
- asrs r1, r5, 24
- cmp r1, 0
- ble _0803F0D0
- ldr r0, [sp, 0x30]
- cmp r0, 0x1B
- bne _0803F0D0
-_0803F0BE:
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, r4, r0
- str r0, [sp, 0x4]
- adds r2, r5, 0
- b _0803F0DC
-_0803F0D0:
- ldr r1, [sp, 0x2C]
- lsls r2, r1, 24
-_0803F0D4:
- asrs r1, r2, 24
- ldr r0, [sp, 0x4]
- adds r0, r1
- str r0, [sp, 0x4]
-_0803F0DC:
- cmp r2, 0
- ble _0803F112
- mov r0, r8
- movs r1, 0x26
- movs r2, 0
- bl GetMonData
- cmp r0, 0xB
- bne _0803F0F4
- ldr r0, [sp, 0x4]
- adds r0, 0x1
- str r0, [sp, 0x4]
-_0803F0F4:
- mov r0, r8
- movs r1, 0x23
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- bl sav1_map_get_name
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _0803F112
- ldr r0, [sp, 0x4]
- adds r0, 0x1
- str r0, [sp, 0x4]
-_0803F112:
- ldr r0, [sp, 0x4]
- cmp r0, 0
- bge _0803F11C
- movs r0, 0
- str r0, [sp, 0x4]
-_0803F11C:
- ldr r0, [sp, 0x4]
- cmp r0, 0xFF
- ble _0803F126
- movs r0, 0xFF
- str r0, [sp, 0x4]
-_0803F126:
- add r2, sp, 0x4
- mov r0, r8
- movs r1, 0x20
- bl SetMonData
-_0803F130:
- ldr r0, [sp, 0x24]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x24]
-_0803F13A:
- ldr r2, [sp, 0x28]
- adds r2, 0x1
- str r2, [sp, 0x28]
- mov r3, r10
- lsrs r3, 1
- mov r10, r3
- cmp r3, 0
- beq _0803F14C
- b _0803EE32
-_0803F14C:
- ldr r4, [sp, 0x18]
- adds r4, 0x1
- str r4, [sp, 0x18]
- cmp r4, 0x5
- bgt _0803F15A
- bl _0803E378
-_0803F15A:
- ldr r0, [sp, 0x1C]
-_0803F15C:
- add sp, 0x3C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_803E1B0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/psychic.s b/asm/psychic.s
index f91ce950e..f91ce950e 100755..100644
--- a/asm/psychic.s
+++ b/asm/psychic.s
diff --git a/asm/rock.s b/asm/rock.s
index 98afb53e6..98afb53e6 100755..100644
--- a/asm/rock.s
+++ b/asm/rock.s
diff --git a/asm/unk_text_8095904.s b/asm/unk_text_8095904.s
index 00c81faca..00c81faca 100755..100644
--- a/asm/unk_text_8095904.s
+++ b/asm/unk_text_8095904.s
diff --git a/asm/water.s b/asm/water.s
index 45fb7f82a..45fb7f82a 100755..100644
--- a/asm/water.s
+++ b/asm/water.s
diff --git a/common_syms/battle/battle_anim.txt b/common_syms/battle/battle_anim.txt
deleted file mode 100644
index a93ac9b5d..000000000
--- a/common_syms/battle/battle_anim.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-gSoundAnimFramesToWait
-gBattleAnimArgs
-gAnimSpriteIndexArray
diff --git a/common_syms/debug/mori_debug_menu.txt b/common_syms/debug/mori_debug_menu.txt
deleted file mode 100644
index 77ab5531c..000000000
--- a/common_syms/debug/mori_debug_menu.txt
+++ /dev/null
@@ -1 +0,0 @@
-gUnknown_03004DA0
diff --git a/common_syms/debug/sound_check_menu.txt b/common_syms/debug/sound_check_menu.txt
deleted file mode 100644
index e9e3032e6..000000000
--- a/common_syms/debug/sound_check_menu.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gUnknown_03005D30
-gSoundTestCryNum
diff --git a/common_syms/engine/link.txt b/common_syms/engine/link.txt
deleted file mode 100644
index faafda4d0..000000000
--- a/common_syms/engine/link.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-word_3002910
-gLinkDebugValue1
-localLinkPlayerBlock
-gLinkErrorOccurred
-4
-gLinkDebugValue2
-4
-#begin GERMAN
-deUnkValue1
-deUnkValue2
-#end
-gLinkPlayerPending
-gLinkPlayers
-gBlockReceived
-4
-gLinkHeldKeys
-gLinkTimeOutCounter
-4
-localLinkPlayer
-gRecvCmds
-gLinkStatus
-gLinkDummyBool
-byte_3002A68
-gBlockSendBuffer
-u8_array_3002B70
-gLinkType
-u8_array_3002B78
-gBlockRecvBuffer
-gSuppressLinkErrorMessage
-gSavedLinkPlayerCount
-gSendCmd
-gSavedMultiplayerId
-gReceivedRemoteLinkPlayers
-gLinkTestBGInfo
-gLinkCallback
-gSavedLinkPlayers
-gShouldAdvanceLinkState
-gLinkTestBlockChecksums
-4
-gBlockRequestType
-4
-4
-gLastSendQueueCount
-gLink
-gLastRecvQueueCount
-gLinkSavedIme
diff --git a/common_syms/engine/load_save.txt b/common_syms/engine/load_save.txt
deleted file mode 100644
index 3b969deca..000000000
--- a/common_syms/engine/load_save.txt
+++ /dev/null
@@ -1 +0,0 @@
-gFlashMemoryPresent
diff --git a/common_syms/engine/main.txt b/common_syms/engine/main.txt
deleted file mode 100644
index a620083d1..000000000
--- a/common_syms/engine/main.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-gKeyRepeatStartDelay
-gLinkTransferringData
-gMain
-gKeyRepeatContinueDelay
-gSoftResetDisabled
-gIntrTable
-gLinkVSyncDisabled
-IntrMain_Buffer
-gPcmDmaCounter
diff --git a/common_syms/engine/random.txt b/common_syms/engine/random.txt
deleted file mode 100644
index 794439ea5..000000000
--- a/common_syms/engine/random.txt
+++ /dev/null
@@ -1 +0,0 @@
-gRngValue
diff --git a/common_syms/engine/record_mixing.txt b/common_syms/engine/record_mixing.txt
deleted file mode 100644
index a6f4f8df3..000000000
--- a/common_syms/engine/record_mixing.txt
+++ /dev/null
@@ -1 +0,0 @@
-gUnknown_03005D2C
diff --git a/common_syms/engine/rtc.txt b/common_syms/engine/rtc.txt
deleted file mode 100644
index fa00a34d5..000000000
--- a/common_syms/engine/rtc.txt
+++ /dev/null
@@ -1 +0,0 @@
-gLocalTime
diff --git a/common_syms/engine/save.txt b/common_syms/engine/save.txt
deleted file mode 100644
index 4824255bf..000000000
--- a/common_syms/engine/save.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-gFirstSaveSector
-gPrevSaveCounter
-gLastKnownGoodSector
-gDamagedSaveSectors
-gSaveCounter
-gFastSaveSection
-gUnknown_03005EB4
-gSaveFileStatus
-gGameContinueCallback
diff --git a/common_syms/engine/sound.txt b/common_syms/engine/sound.txt
deleted file mode 100644
index 0f6f2fc75..000000000
--- a/common_syms/engine/sound.txt
+++ /dev/null
@@ -1 +0,0 @@
-gDisableMusic
diff --git a/common_syms/engine/sprite.txt b/common_syms/engine/sprite.txt
deleted file mode 100644
index fe38dc61f..000000000
--- a/common_syms/engine/sprite.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-gSpriteOrder
-gSpriteTileAllocBitmap
-gSpriteCoordOffsetX
-gOamLimit
-gReservedSpriteTileCount
-gSpriteCopyRequestCount
-gSpriteCopyRequests
-gSpriteCoordOffsetY
-gOamMatrices
-gShouldProcessSpriteCopyRequests
-gOamMatrixAllocBitmap
-gReservedSpritePaletteCount
diff --git a/common_syms/engine/string_util.txt b/common_syms/engine/string_util.txt
deleted file mode 100644
index 1ee62aaad..000000000
--- a/common_syms/engine/string_util.txt
+++ /dev/null
@@ -1 +0,0 @@
-gUnknownStringVar
diff --git a/common_syms/engine/task.txt b/common_syms/engine/task.txt
deleted file mode 100644
index 6601bd11b..000000000
--- a/common_syms/engine/task.txt
+++ /dev/null
@@ -1 +0,0 @@
-gTasks
diff --git a/common_syms/field/field_camera.txt b/common_syms/field/field_camera.txt
deleted file mode 100644
index 7aad967f8..000000000
--- a/common_syms/field/field_camera.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-gUnknown_03004880
-gUnknown_03004898
-gUnknown_0300489C
diff --git a/common_syms/field/field_control_avatar.txt b/common_syms/field/field_control_avatar.txt
deleted file mode 100644
index 040a9e6c1..000000000
--- a/common_syms/field/field_control_avatar.txt
+++ /dev/null
@@ -1 +0,0 @@
-gSelectedMapObject
diff --git a/common_syms/field/field_map_obj.txt b/common_syms/field/field_map_obj.txt
deleted file mode 100644
index 32d8b1915..000000000
--- a/common_syms/field/field_map_obj.txt
+++ /dev/null
@@ -1 +0,0 @@
-gMapObjects
diff --git a/common_syms/field/fieldmap.txt b/common_syms/field/fieldmap.txt
deleted file mode 100644
index 7819b3b40..000000000
--- a/common_syms/field/fieldmap.txt
+++ /dev/null
@@ -1 +0,0 @@
-gUnknown_03004870
diff --git a/common_syms/field/overworld.txt b/common_syms/field/overworld.txt
deleted file mode 100644
index ecdb190b2..000000000
--- a/common_syms/field/overworld.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-word_3004858
-gFieldCallback
-gUnknown_03004860
-gFieldLinkPlayerCount
diff --git a/common_syms/field/start_menu.txt b/common_syms/field/start_menu.txt
deleted file mode 100644
index bc0c247d1..000000000
--- a/common_syms/field/start_menu.txt
+++ /dev/null
@@ -1 +0,0 @@
-gCallback_03004AE8
diff --git a/common_syms/field/tv.txt b/common_syms/field/tv.txt
deleted file mode 100644
index 829139f8f..000000000
--- a/common_syms/field/tv.txt
+++ /dev/null
@@ -1 +0,0 @@
-gUnknown_03005D38
diff --git a/common_syms/libs/agb_flash.txt b/common_syms/libs/agb_flash.txt
deleted file mode 100644
index cb421ec80..000000000
--- a/common_syms/libs/agb_flash.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-gFlashTimeoutFlag
-PollFlashStatus
-WaitForFlashWrite
-ProgramFlashSector
-gFlash
-ProgramFlashByte
-gFlashNumRemainingBytes
-EraseFlashChip
-EraseFlashSector
-gFlashMaxTime
diff --git a/common_syms/libs/m4a_2.txt b/common_syms/libs/m4a_2.txt
deleted file mode 100644
index a80d8a79d..000000000
--- a/common_syms/libs/m4a_2.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-gSoundInfo
-gPokemonCrySongs
-gPokemonCryMusicPlayers
-gMPlayJumpTable
-gCgbChans
-gPokemonCryTracks
-gPokemonCrySong
-gMPlay_BGM
-gMPlay_SE1
-gMPlay_SE2
-gMPlayMemAccArea
-gMPlay_SE3
diff --git a/common_syms/pokemon/pokeblock_feed.txt b/common_syms/pokemon/pokeblock_feed.txt
deleted file mode 100644
index 827e6526e..000000000
--- a/common_syms/pokemon/pokeblock_feed.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-gPokeblockFeedPokeSprite
-gPokeblockFeedMonSpecies
-gPokeblockMonNotFlipped
-gPokeblockFeedMonSpriteID
-gPokeblockFeedMonNature
-gUnknown_03005F34
-gPokeblockFeedUnused0
-gUnknown_03005F3C
-gUnknown_03005F40
-gPokeblockFeedPokeSpriteCopy
-gUnknown_03005F94
-gUnknown_03005FA0
diff --git a/common_syms/pokemon/pokedex.txt b/common_syms/pokemon/pokedex.txt
deleted file mode 100644
index 18b14f3ed..000000000
--- a/common_syms/pokemon/pokedex.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gUnknown_03005CE8
-gUnknown_03005CEC
diff --git a/common_syms/pokemon/pokemon_1.txt b/common_syms/pokemon/pokemon_1.txt
deleted file mode 100644
index c588d53a7..000000000
--- a/common_syms/pokemon/pokemon_1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-gPlayerPartyCount
-gPlayerParty
-gEnemyPartyCount
-gEnemyParty
diff --git a/common_syms/pokemon/pokemon_menu.txt b/common_syms/pokemon/pokemon_menu.txt
deleted file mode 100644
index 98a1bf53b..000000000
--- a/common_syms/pokemon/pokemon_menu.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gLastFieldPokeMenuOpened
-gUnknown_03005CE4
diff --git a/common_syms/rom3.txt b/common_syms/rom3.txt
deleted file mode 100644
index 06a965ff6..000000000
--- a/common_syms/rom3.txt
+++ /dev/null
@@ -1 +0,0 @@
-gBattleBuffersTransferData
diff --git a/common_syms/scanline_effect.txt b/common_syms/scanline_effect.txt
deleted file mode 100644
index 280e7f891..000000000
--- a/common_syms/scanline_effect.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gScanlineEffect
-gScanlineEffectRegBuffers
diff --git a/common_syms/scene/berry_blender.txt b/common_syms/scene/berry_blender.txt
deleted file mode 100644
index 524a31411..000000000
--- a/common_syms/scene/berry_blender.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-gUnknown_03004830
-gInGameOpponentsNo
-gUnknown_03004840
-gBerryBlenderData
diff --git a/common_syms/scene/contest_painting.txt b/common_syms/scene/contest_painting.txt
deleted file mode 100644
index 2e8490348..000000000
--- a/common_syms/scene/contest_painting.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-gUnknown_03005E10
-gUnknown_03005E20
-gUnknown_03005E40
-gUnknown_03005E8C
-gUnknown_03005E90
diff --git a/common_syms/scene/cute_sketch.txt b/common_syms/scene/cute_sketch.txt
deleted file mode 100644
index e69de29bb..000000000
--- a/common_syms/scene/cute_sketch.txt
+++ /dev/null
diff --git a/common_syms/scene/egg_hatch.txt b/common_syms/scene/egg_hatch.txt
deleted file mode 100644
index 891ccc104..000000000
--- a/common_syms/scene/egg_hatch.txt
+++ /dev/null
@@ -1 +0,0 @@
-gEggHatchData
diff --git a/common_syms/scene/evolution_scene.txt b/common_syms/scene/evolution_scene.txt
deleted file mode 100644
index 137cd3e05..000000000
--- a/common_syms/scene/evolution_scene.txt
+++ /dev/null
@@ -1 +0,0 @@
-gCB2_AfterEvolution
diff --git a/common_syms/scene/intro.txt b/common_syms/scene/intro.txt
deleted file mode 100644
index d069b1014..000000000
--- a/common_syms/scene/intro.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gIntroFrameCounter
-gMultibootProgramStruct
diff --git a/data/battle_7.s b/data/battle_7.s
new file mode 100644
index 000000000..50fad468a
--- /dev/null
+++ b/data/battle_7.s
@@ -0,0 +1,25 @@
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gUnknown_081FAF24:: @ 81FAF24
+ obj_tiles gEnemyMonShadow_Gfx, 128, 0xD759
+
+ .align 2
+gOamData_81FAF2C:: @ 81FAF2C
+ .2byte 0x4000
+ .2byte 0x4000
+ .2byte 0x0C00
+
+ .align 2
+gSpriteTemplate_81FAF34:: @ 81FAF34
+ spr_template 55129, 55039, gOamData_81FAF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8032978
+
+ .align 2
+gUnknown_081FAF4C:: @ 81FAF4C
+ .4byte gSharedMem + 0x8000
+ .4byte gSharedMem + 0xA000
+ .4byte gSharedMem + 0xC000
+ .4byte gSharedMem + 0xE000
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index b04ebefe5..d309aea7e 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -2589,12 +2589,12 @@ BattleScript_EffectEndeavor: @ 81D8852
attackstring
ppreduce
setdamagetohealthdifference BattleScript_ButItFailed
- copyword gHP_dealt, gBattleMoveDamage
+ copyword gHpDealt, gBattleMoveDamage
accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE
typecalc
jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation
bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
- copyword gBattleMoveDamage, gHP_dealt
+ copyword gBattleMoveDamage, gHpDealt
adjustsetdamage
goto BattleScript_HitFromAtkAnimation
@@ -3314,7 +3314,7 @@ BattleScript_LeechSeedTurnDrain:: @ 81D904B
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
healthbarupdate USER
datahpupdate USER
- copyword gBattleMoveDamage, gHP_dealt
+ copyword gBattleMoveDamage, gHpDealt
jumpifability USER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze
manipulatedamage 0
setbyte cMULTISTRING_CHOOSER, 3
diff --git a/data/btl_attrs.s b/data/btl_attrs.s
new file mode 100644
index 000000000..1bd5ed6e5
--- /dev/null
+++ b/data/btl_attrs.s
@@ -0,0 +1,337 @@
+@ the second big chunk of data
+
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+@ 81ECAD8
+ .include "data/graphics/trainers/back_pic_coords.inc"
+
+@ 81ECAE4
+ .include "data/graphics/trainers/back_pic_table.inc"
+
+@ 81ECAFC
+ .include "data/graphics/trainers/back_pic_palette_table.inc"
+
+@ 81ECB14
+ .include "data/enemy_mon_elevation.inc"
+
+@ 81ECCB0
+ .include "data/trainer_parties.inc"
+
+@ 81F0208
+ .include "data/text/trainer_class_names.inc"
+
+@ 81F04FC
+ .include "data/trainers.inc"
+
+@ 81F716C
+ .include "data/text/species_names.inc"
+
+@ 81F8320
+ .include "data/text/move_names.inc"
+
+ .align 2
+@ 81F9528
+ .4byte 0x101 @ unknown data
+
+ .align 2
+gOamData_81F952C:: @ 81F952C
+ .2byte 0x0300
+ .2byte 0xC000
+ .2byte 0x0000
+
+ .align 2
+gOamData_81F9534:: @ 81F9534
+ .2byte 0x0300
+ .2byte 0xC000
+ .2byte 0x0040
+
+ .align 2
+gSpriteAffineAnim_81F953C:: @ 81F953C
+ obj_rot_scal_anim_frame 0x80, 0x80, 0, 0
+ obj_rot_scal_anim_end
+
+ .align 2
+gSpriteAffineAnim_81F954C:: @ 81F954C
+ obj_rot_scal_anim_frame 0x80, 0x80, 0, 0
+ obj_rot_scal_anim_frame 0x18, 0x18, 0, -128
+ obj_rot_scal_anim_frame 0x18, 0x18, 0, -128
+ obj_rot_scal_anim_end
+
+ .align 2
+gSpriteAffineAnimTable_81F956C:: @ 81F956C
+ .4byte gSpriteAffineAnim_81F953C
+ .4byte gSpriteAffineAnim_81F954C
+
+ .align 2
+gSpriteTemplate_81F9574:: @ 81F9574
+ spr_template 10000, 10000, gOamData_81F952C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_81F956C, nullsub_36
+
+ .align 2
+gSpriteTemplate_81F958C:: @ 81F958C
+ spr_template 10000, 10000, gOamData_81F9534, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_81F956C, nullsub_36
+
+ .align 2
+gUnknown_081F95A4:: @ 81F95A4
+ obj_tiles gUnknown_08E5DC2C, 4096, 0x2710
+
+ .align 2
+gBattleTerrainTable:: @ 81F95AC
+ @ tall_grass
+ .4byte gBattleTerrainTiles_TallGrass
+ .4byte gBattleTerrainTilemap_TallGrass
+ .4byte gBattleTerrainAnimTiles_TallGrass
+ .4byte gBattleTerrainAnimTilemap_TallGrass
+ .4byte gBattleTerrainPalette_TallGrass
+
+ @ long_grass
+ .4byte gBattleTerrainTiles_LongGrass
+ .4byte gBattleTerrainTilemap_LongGrass
+ .4byte gBattleTerrainAnimTiles_LongGrass
+ .4byte gBattleTerrainAnimTilemap_LongGrass
+ .4byte gBattleTerrainPalette_LongGrass
+
+ @ sand
+ .4byte gBattleTerrainTiles_Sand
+ .4byte gBattleTerrainTilemap_Sand
+ .4byte gBattleTerrainAnimTiles_Sand
+ .4byte gBattleTerrainAnimTilemap_Sand
+ .4byte gBattleTerrainPalette_Sand
+
+ @ underwater
+ .4byte gBattleTerrainTiles_Underwater
+ .4byte gBattleTerrainTilemap_Underwater
+ .4byte gBattleTerrainAnimTiles_Underwater
+ .4byte gBattleTerrainAnimTilemap_Underwater
+ .4byte gBattleTerrainPalette_Underwater
+
+ @ water
+ .4byte gBattleTerrainTiles_Water
+ .4byte gBattleTerrainTilemap_Water
+ .4byte gBattleTerrainAnimTiles_Water
+ .4byte gBattleTerrainAnimTilemap_Water
+ .4byte gBattleTerrainPalette_Water
+
+ @ pond_water
+ .4byte gBattleTerrainTiles_PondWater
+ .4byte gBattleTerrainTilemap_PondWater
+ .4byte gBattleTerrainAnimTiles_PondWater
+ .4byte gBattleTerrainAnimTilemap_PondWater
+ .4byte gBattleTerrainPalette_PondWater
+
+ @ rock
+ .4byte gBattleTerrainTiles_Rock
+ .4byte gBattleTerrainTilemap_Rock
+ .4byte gBattleTerrainAnimTiles_Rock
+ .4byte gBattleTerrainAnimTilemap_Rock
+ .4byte gBattleTerrainPalette_Rock
+
+ @ cave
+ .4byte gBattleTerrainTiles_Cave
+ .4byte gBattleTerrainTilemap_Cave
+ .4byte gBattleTerrainAnimTiles_Cave
+ .4byte gBattleTerrainAnimTilemap_Cave
+ .4byte gBattleTerrainPalette_Cave
+
+ @ building
+ .4byte gBattleTerrainTiles_Building
+ .4byte gBattleTerrainTilemap_Building
+ .4byte gBattleTerrainAnimTiles_Building
+ .4byte gBattleTerrainAnimTilemap_Building
+ .4byte gBattleTerrainPalette_Building
+
+ @ plain
+ .4byte gBattleTerrainTiles_Building
+ .4byte gBattleTerrainTilemap_Building
+ .4byte gBattleTerrainAnimTiles_Building
+ .4byte gBattleTerrainAnimTilemap_Building
+ .4byte gBattleTerrainPalette_Plain
+
+ .align 2
+gUnknown_081F9674:: @ 81F9674
+ .4byte REG_BG3HOFS
+ .4byte ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1
+ .4byte 1
+
+ .align 2
+gUnknown_081F9680:: @ 81F9680
+ .4byte gUnknown_030041D0
+ .2byte 0x20
+ .byte 0x13
+ .byte 0x10
+ .4byte BG_VRAM + 0xE104
+
+ .4byte gUnknown_03004250
+ .2byte 0x40
+ .byte 0x13
+ .byte 0x10
+ .4byte BG_VRAM + 0xF104
+
+ .4byte gUnknown_030041D0
+ .2byte 0x60
+ .byte 0x13
+ .byte 0x30
+ .4byte BG_VRAM + 0xE204
+
+ .4byte gUnknown_03004250
+ .2byte 0x80
+ .byte 0x13
+ .byte 0x30
+ .4byte BG_VRAM + 0xF204
+
+ .4byte gUnknown_030041D0
+ .2byte 0x20
+ .byte 0x13
+ .byte 0x18
+ .4byte BG_VRAM + 0xE1C4
+
+ .4byte gUnknown_03004250
+ .2byte 0x40
+ .byte 0x13
+ .byte 0x18
+ .4byte BG_VRAM + 0xF1C4
+
+gUnknown_081F96C8:: @ 81F96C8
+ .string "ヌケニン$" @ "Nukenin" (Shedinja)
+
+ .align 2
+gSpriteTemplate_81F96D0:: @ 81F96D0
+ spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_800F828
+
+ .align 2
+gOamData_81F96E8:: @ 81F96E8
+ .2byte 0x0100
+ .2byte 0xC000
+ .2byte 0x0800
+
+ .align 2
+gOamData_81F96F0:: @ 81F96F0
+ .2byte 0x0100
+ .2byte 0xC000
+ .2byte 0x2800
+
+ .align 2
+gSpriteAnim_81F96F8:: @ 81F96F8
+ obj_image_anim_frame 0, 5
+ obj_image_anim_jump 0
+
+ .align 2
+gSpriteAnimTable_81F9700:: @ 81F9700
+ .4byte gSpriteAnim_81F96F8
+
+ .align 2
+gSpriteAffineAnim_81F9704:: @ 81F9704
+ obj_rot_scal_anim_frame 0xFFF0, 0x0, 0, 4
+ obj_rot_scal_anim_frame 0x0, 0x0, 0, 60
+ obj_rot_scal_anim_jump 1
+
+ .align 2
+gSpriteAffineAnimTable_81F971C:: @ 81F971C
+ .4byte gSpriteAffineAnim_81F9704
+
+@ 81F9720
+ .include "data/type_effectiveness.inc"
+
+@ 81F9870
+ .include "data/text/type_names.inc"
+
+@ 81F98F0
+ .include "data/trainer_money.inc"
+
+@ 81F99CC
+ .include "data/text/ability_descriptions.inc"
+
+@ 81FA248
+ .include "data/text/ability_names.inc"
+
+ .align 2
+gUnknown_081FA640:: @ 81FA640
+ .4byte HandleAction_UseMove
+ .4byte HandleAction_UseItem
+ .4byte HandleAction_Switch
+ .4byte HandleAction_Run
+ .4byte HandleAction_WatchesCarefully
+ .4byte HandleAction_SafariZoneBallThrow
+ .4byte HandleAction_ThrowPokeblock
+ .4byte HandleAction_GoNear
+ .4byte HandleAction_SafriZoneRun
+ .4byte HandleAction_Action9
+ .4byte sub_801B594
+ .4byte HandleAction_Action11
+ .4byte HandleAction_ActionFinished
+ .4byte HandleAction_NothingIsFainted
+
+ .align 2
+gUnknown_081FA678:: @ 81FA678
+ .4byte bc_8013B1C
+ .4byte HandleEndTurn_BattleWon
+ .4byte HandleEndTurn_BattleLost
+ .4byte HandleEndTurn_BattleLost
+ .4byte HandleEndTurn_RanFromBattle
+ .4byte HandleEndTurn_FinishBattle
+ .4byte HandleEndTurn_MonFled
+ .4byte HandleEndTurn_FinishBattle
+ .4byte HandleEndTurn_FinishBattle
+
+gStatusConditionString_PoisonJpn:: @ 81FA69C
+ .string "どく$$$$$$"
+
+gStatusConditionString_SleepJpn:: @ 81FA6A4
+ .string "ねむり$$$$$"
+
+gStatusConditionString_ParalysisJpn:: @ 81FA6AC
+ .string "まひ$$$$$$"
+
+gStatusConditionString_BurnJpn:: @ 81FA6B4
+ .string "やけど$$$$$"
+
+gStatusConditionString_IceJpn:: @ 81FA6BC
+ .string "こおり$$$$$"
+
+gStatusConditionString_ConfusionJpn:: @ 81FA6C4
+ .string "こんらん$$$$"
+
+gStatusConditionString_LoveJpn:: @ 81FA6CC
+ .string "メロメロ$$$$"
+
+ .align 2
+gUnknown_081FA6D4:: @ 81FA6D4
+ .4byte gStatusConditionString_PoisonJpn, BattleText_PoisonStatus
+ .4byte gStatusConditionString_SleepJpn, BattleText_Sleep
+ .4byte gStatusConditionString_ParalysisJpn, BattleText_Paralysis
+ .4byte gStatusConditionString_BurnJpn, BattleText_Burn
+ .4byte gStatusConditionString_IceJpn, BattleText_IceStatus
+ .4byte gStatusConditionString_ConfusionJpn, BattleText_Confusion
+ .4byte gStatusConditionString_LoveJpn, BattleText_Love
+
+gUnknown_081FA70C:: @ 81FA70C
+ .byte 0, 0, 0
+ .byte 3, 5, 0
+ .byte 2, 3, 0
+ .byte 1, 2, 0
+ .byte 1, 1, 0
+
+gUnknown_081FA71B:: @ 81FA71B
+ .byte 4, 3, 2, 1
+
+gUnknown_081FA71F:: @ 81FA71F
+ .byte 4, 4, 4, 4
+
+ .align 1
+gSoundMovesTable:: @ 81FA724
+ .2byte 0x2D
+ .2byte 0x2E
+ .2byte 0x2F
+ .2byte 0x30
+ .2byte 0x67
+ .2byte 0xAD
+ .2byte 0xFD
+ .2byte 0x13F
+ .2byte 0x140
+ .2byte 0x130
+ .2byte 0xFFFF
diff --git a/data/data_8393054.s b/data/data_8393054.s
deleted file mode 100644
index 38ba47b63..000000000
--- a/data/data_8393054.s
+++ /dev/null
@@ -1,110 +0,0 @@
- .include "include/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSpriteAnim_8393054:: @ 8393054
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 4, 3
- obj_image_anim_frame 8, 3
- obj_image_anim_frame 12, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_8393068:: @ 8393068
- .4byte gSpriteAnim_8393054
-
- .align 2
-gSpriteTemplate_839306C:: @ 839306C
- spr_template 10004, 10004, gOamData_837DF2C, gSpriteAnimTable_8393068, NULL, gDummySpriteAffineAnimTable, sub_807A5C4
-
- .align 2
-gSpriteTemplate_8393084:: @ 8393084
- spr_template 10004, 10004, gOamData_837DF2C, gSpriteAnimTable_8393068, NULL, gDummySpriteAffineAnimTable, sub_807A544
-
- .align 2
-gSpriteAnim_839309C:: @ 839309C
- obj_image_anim_frame 0, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83930A4:: @ 83930A4
- .4byte gSpriteAnim_839309C
-
- .align 2
-gBattleAnimSpriteTemplate_83930A8:: @ 83930A8
- spr_template 10283, 10283, gOamData_837DF34, gSpriteAnimTable_83930A4, NULL, gDummySpriteAffineAnimTable, sub_807A908
-
- .align 2
-gBattleAnimSpriteTemplate_83930C0:: @ 83930C0
- spr_template 10283, 10283, gOamData_837DF34, gSpriteAnimTable_83930A4, NULL, gDummySpriteAffineAnimTable, sub_807A9BC
-
- .align 2
-gSpriteAnim_83930D8:: @ 83930D8
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_frame 64, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83930F0:: @ 83930F0
- .4byte gSpriteAnim_83930D8
-
- .align 2
-gBattleAnimSpriteTemplate_83930F4:: @ 83930F4
- spr_template 10071, 10071, gOamData_837DF34, gSpriteAnimTable_83930F0, NULL, gDummySpriteAffineAnimTable, sub_807A63C
-
- .align 2
-gSpriteTemplate_839310C:: @ 839310C
- spr_template 10051, 10051, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_807A5C4
-
- .align 2
-gSpriteAnim_8393124:: @ 8393124
- obj_image_anim_frame 0, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_839312C:: @ 839312C
- obj_image_anim_frame 0, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_8393134:: @ 8393134
- obj_image_anim_frame 0, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_839313C:: @ 839313C
- .4byte gSpriteAnim_8393124
- .4byte gSpriteAnim_839312C
- .4byte gSpriteAnim_8393134
-
- .align 2
-gSpriteTemplate_8393148:: @ 8393148
- spr_template 10135, 10135, gOamData_837DF34, gSpriteAnimTable_839313C, NULL, gDummySpriteAffineAnimTable, sub_807A5C4
-
- .align 2
-gSpriteAnim_8393160:: @ 8393160
- obj_image_anim_frame 0, 15
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_8393168:: @ 8393168
- .4byte gSpriteAnim_8393160
-
- .align 2
-gSpriteAffineAnim_839316C:: @ 839316C
- obj_rot_scal_anim_frame 0x60, 0x60, 0, 0
- obj_rot_scal_anim_frame 0x2, 0x2, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_8393184:: @ 8393184
- .4byte gSpriteAffineAnim_839316C
-
- .align 2
-gSpriteTemplate_8393188:: @ 8393188
- spr_template 10004, 10004, gOamData_837DFEC, gSpriteAnimTable_8393168, NULL, gSpriteAffineAnimTable_8393184, sub_807A544
diff --git a/data/gray_sun.s b/data/gray_sun.s
new file mode 100644
index 000000000..bee64873a
--- /dev/null
+++ b/data/gray_sun.s
@@ -0,0 +1,21 @@
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gSpriteAnim_839309C:: @ 839309C
+ obj_image_anim_frame 0, 3
+ obj_image_anim_jump 0
+
+ .align 2
+gSpriteAnimTable_83930A4:: @ 83930A4
+ .4byte gSpriteAnim_839309C
+
+ .align 2
+gBattleAnimSpriteTemplate_83930A8:: @ 83930A8
+ spr_template 10283, 10283, gOamData_837DF34, gSpriteAnimTable_83930A4, NULL, gDummySpriteAffineAnimTable, sub_807A908
+
+ .align 2
+gBattleAnimSpriteTemplate_83930C0:: @ 83930C0
+ spr_template 10283, 10283, gOamData_837DF34, gSpriteAnimTable_83930A4, NULL, gDummySpriteAffineAnimTable, sub_807A9BC
diff --git a/data/maps/events/Route124_DivingTreasureHuntersHouse.inc b/data/maps/events/Route124_DivingTreasureHuntersHouse.inc
index 17ec713de..17ec713de 100755..100644
--- a/data/maps/events/Route124_DivingTreasureHuntersHouse.inc
+++ b/data/maps/events/Route124_DivingTreasureHuntersHouse.inc
diff --git a/data/data2a.s b/data/mon_attrs.s
index c4d6343d8..ea47c8de6 100644
--- a/data/data2a.s
+++ b/data/mon_attrs.s
@@ -702,331 +702,3 @@ gUnknown_081ECACC:: @ 81ECACC
.4byte gSpriteAnimTable_81ECAB4
.4byte gSpriteAnimTable_81ECABC
.4byte gSpriteAnimTable_81ECAC4
-
-@ 81ECAD8
- .include "data/graphics/trainers/back_pic_coords.inc"
-
-@ 81ECAE4
- .include "data/graphics/trainers/back_pic_table.inc"
-
-@ 81ECAFC
- .include "data/graphics/trainers/back_pic_palette_table.inc"
-
-@ 81ECB14
- .include "data/enemy_mon_elevation.inc"
-
-@ 81ECCB0
- .include "data/trainer_parties.inc"
-
-@ 81F0208
- .include "data/text/trainer_class_names.inc"
-
-@ 81F04FC
- .include "data/trainers.inc"
-
-@ 81F716C
- .include "data/text/species_names.inc"
-
-@ 81F8320
- .include "data/text/move_names.inc"
-
- .align 2
-@ 81F9528
- .4byte 0x101 @ unknown data
-
- .align 2
-gOamData_81F952C:: @ 81F952C
- .2byte 0x0300
- .2byte 0xC000
- .2byte 0x0000
-
- .align 2
-gOamData_81F9534:: @ 81F9534
- .2byte 0x0300
- .2byte 0xC000
- .2byte 0x0040
-
- .align 2
-gSpriteAffineAnim_81F953C:: @ 81F953C
- obj_rot_scal_anim_frame 0x80, 0x80, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_81F954C:: @ 81F954C
- obj_rot_scal_anim_frame 0x80, 0x80, 0, 0
- obj_rot_scal_anim_frame 0x18, 0x18, 0, -128
- obj_rot_scal_anim_frame 0x18, 0x18, 0, -128
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_81F956C:: @ 81F956C
- .4byte gSpriteAffineAnim_81F953C
- .4byte gSpriteAffineAnim_81F954C
-
- .align 2
-gSpriteTemplate_81F9574:: @ 81F9574
- spr_template 10000, 10000, gOamData_81F952C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_81F956C, nullsub_36
-
- .align 2
-gSpriteTemplate_81F958C:: @ 81F958C
- spr_template 10000, 10000, gOamData_81F9534, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_81F956C, nullsub_36
-
- .align 2
-gUnknown_081F95A4:: @ 81F95A4
- obj_tiles gUnknown_08E5DC2C, 4096, 0x2710
-
- .align 2
-gBattleTerrainTable:: @ 81F95AC
- @ tall_grass
- .4byte gBattleTerrainTiles_TallGrass
- .4byte gBattleTerrainTilemap_TallGrass
- .4byte gBattleTerrainAnimTiles_TallGrass
- .4byte gBattleTerrainAnimTilemap_TallGrass
- .4byte gBattleTerrainPalette_TallGrass
-
- @ long_grass
- .4byte gBattleTerrainTiles_LongGrass
- .4byte gBattleTerrainTilemap_LongGrass
- .4byte gBattleTerrainAnimTiles_LongGrass
- .4byte gBattleTerrainAnimTilemap_LongGrass
- .4byte gBattleTerrainPalette_LongGrass
-
- @ sand
- .4byte gBattleTerrainTiles_Sand
- .4byte gBattleTerrainTilemap_Sand
- .4byte gBattleTerrainAnimTiles_Sand
- .4byte gBattleTerrainAnimTilemap_Sand
- .4byte gBattleTerrainPalette_Sand
-
- @ underwater
- .4byte gBattleTerrainTiles_Underwater
- .4byte gBattleTerrainTilemap_Underwater
- .4byte gBattleTerrainAnimTiles_Underwater
- .4byte gBattleTerrainAnimTilemap_Underwater
- .4byte gBattleTerrainPalette_Underwater
-
- @ water
- .4byte gBattleTerrainTiles_Water
- .4byte gBattleTerrainTilemap_Water
- .4byte gBattleTerrainAnimTiles_Water
- .4byte gBattleTerrainAnimTilemap_Water
- .4byte gBattleTerrainPalette_Water
-
- @ pond_water
- .4byte gBattleTerrainTiles_PondWater
- .4byte gBattleTerrainTilemap_PondWater
- .4byte gBattleTerrainAnimTiles_PondWater
- .4byte gBattleTerrainAnimTilemap_PondWater
- .4byte gBattleTerrainPalette_PondWater
-
- @ rock
- .4byte gBattleTerrainTiles_Rock
- .4byte gBattleTerrainTilemap_Rock
- .4byte gBattleTerrainAnimTiles_Rock
- .4byte gBattleTerrainAnimTilemap_Rock
- .4byte gBattleTerrainPalette_Rock
-
- @ cave
- .4byte gBattleTerrainTiles_Cave
- .4byte gBattleTerrainTilemap_Cave
- .4byte gBattleTerrainAnimTiles_Cave
- .4byte gBattleTerrainAnimTilemap_Cave
- .4byte gBattleTerrainPalette_Cave
-
- @ building
- .4byte gBattleTerrainTiles_Building
- .4byte gBattleTerrainTilemap_Building
- .4byte gBattleTerrainAnimTiles_Building
- .4byte gBattleTerrainAnimTilemap_Building
- .4byte gBattleTerrainPalette_Building
-
- @ plain
- .4byte gBattleTerrainTiles_Building
- .4byte gBattleTerrainTilemap_Building
- .4byte gBattleTerrainAnimTiles_Building
- .4byte gBattleTerrainAnimTilemap_Building
- .4byte gBattleTerrainPalette_Plain
-
- .align 2
-gUnknown_081F9674:: @ 81F9674
- .4byte REG_BG3HOFS
- .4byte ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1
- .4byte 1
-
- .align 2
-gUnknown_081F9680:: @ 81F9680
- .4byte gUnknown_030041D0
- .2byte 0x20
- .byte 0x13
- .byte 0x10
- .4byte BG_VRAM + 0xE104
-
- .4byte gUnknown_03004250
- .2byte 0x40
- .byte 0x13
- .byte 0x10
- .4byte BG_VRAM + 0xF104
-
- .4byte gUnknown_030041D0
- .2byte 0x60
- .byte 0x13
- .byte 0x30
- .4byte BG_VRAM + 0xE204
-
- .4byte gUnknown_03004250
- .2byte 0x80
- .byte 0x13
- .byte 0x30
- .4byte BG_VRAM + 0xF204
-
- .4byte gUnknown_030041D0
- .2byte 0x20
- .byte 0x13
- .byte 0x18
- .4byte BG_VRAM + 0xE1C4
-
- .4byte gUnknown_03004250
- .2byte 0x40
- .byte 0x13
- .byte 0x18
- .4byte BG_VRAM + 0xF1C4
-
-gUnknown_081F96C8:: @ 81F96C8
- .string "ヌケニン$" @ "Nukenin" (Shedinja)
-
- .align 2
-gSpriteTemplate_81F96D0:: @ 81F96D0
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_800F828
-
- .align 2
-gOamData_81F96E8:: @ 81F96E8
- .2byte 0x0100
- .2byte 0xC000
- .2byte 0x0800
-
- .align 2
-gOamData_81F96F0:: @ 81F96F0
- .2byte 0x0100
- .2byte 0xC000
- .2byte 0x2800
-
- .align 2
-gSpriteAnim_81F96F8:: @ 81F96F8
- obj_image_anim_frame 0, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_81F9700:: @ 81F9700
- .4byte gSpriteAnim_81F96F8
-
- .align 2
-gSpriteAffineAnim_81F9704:: @ 81F9704
- obj_rot_scal_anim_frame 0xFFF0, 0x0, 0, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 60
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_81F971C:: @ 81F971C
- .4byte gSpriteAffineAnim_81F9704
-
-@ 81F9720
- .include "data/type_effectiveness.inc"
-
-@ 81F9870
- .include "data/text/type_names.inc"
-
-@ 81F98F0
- .include "data/trainer_money.inc"
-
-@ 81F99CC
- .include "data/text/ability_descriptions.inc"
-
-@ 81FA248
- .include "data/text/ability_names.inc"
-
- .align 2
-gUnknown_081FA640:: @ 81FA640
- .4byte HandleAction_UseMove
- .4byte HandleAction_UseItem
- .4byte HandleAction_Switch
- .4byte HandleAction_Run
- .4byte HandleAction_WatchesCarefully
- .4byte HandleAction_SafariZoneBallThrow
- .4byte HandleAction_ThrowPokeblock
- .4byte HandleAction_GoNear
- .4byte HandleAction_SafriZoneRun
- .4byte HandleAction_Action9
- .4byte sub_801B594
- .4byte HandleAction_Action11
- .4byte HandleAction_ActionFinished
- .4byte HandleAction_NothingIsFainted
-
- .align 2
-gUnknown_081FA678:: @ 81FA678
- .4byte bc_8013B1C
- .4byte HandleEndTurn_BattleWon
- .4byte HandleEndTurn_BattleLost
- .4byte HandleEndTurn_BattleLost
- .4byte HandleEndTurn_RanFromBattle
- .4byte HandleEndTurn_FinishBattle
- .4byte HandleEndTurn_MonFled
- .4byte HandleEndTurn_FinishBattle
- .4byte HandleEndTurn_FinishBattle
-
-gStatusConditionString_PoisonJpn:: @ 81FA69C
- .string "どく$$$$$$"
-
-gStatusConditionString_SleepJpn:: @ 81FA6A4
- .string "ねむり$$$$$"
-
-gStatusConditionString_ParalysisJpn:: @ 81FA6AC
- .string "まひ$$$$$$"
-
-gStatusConditionString_BurnJpn:: @ 81FA6B4
- .string "やけど$$$$$"
-
-gStatusConditionString_IceJpn:: @ 81FA6BC
- .string "こおり$$$$$"
-
-gStatusConditionString_ConfusionJpn:: @ 81FA6C4
- .string "こんらん$$$$"
-
-gStatusConditionString_LoveJpn:: @ 81FA6CC
- .string "メロメロ$$$$"
-
- .align 2
-gUnknown_081FA6D4:: @ 81FA6D4
- .4byte gStatusConditionString_PoisonJpn, BattleText_PoisonStatus
- .4byte gStatusConditionString_SleepJpn, BattleText_Sleep
- .4byte gStatusConditionString_ParalysisJpn, BattleText_Paralysis
- .4byte gStatusConditionString_BurnJpn, BattleText_Burn
- .4byte gStatusConditionString_IceJpn, BattleText_IceStatus
- .4byte gStatusConditionString_ConfusionJpn, BattleText_Confusion
- .4byte gStatusConditionString_LoveJpn, BattleText_Love
-
-gUnknown_081FA70C:: @ 81FA70C
- .byte 0, 0, 0
- .byte 3, 5, 0
- .byte 2, 3, 0
- .byte 1, 2, 0
- .byte 1, 1, 0
-
-gUnknown_081FA71B:: @ 81FA71B
- .byte 4, 3, 2, 1
-
-gUnknown_081FA71F:: @ 81FA71F
- .byte 4, 4, 4, 4
-
- .align 1
-gSoundMovesTable:: @ 81FA724
- .2byte 0x2D
- .2byte 0x2E
- .2byte 0x2F
- .2byte 0x30
- .2byte 0x67
- .2byte 0xAD
- .2byte 0xFD
- .2byte 0x13F
- .2byte 0x140
- .2byte 0x130
- .2byte 0xFFFF
diff --git a/data/pc_screen_effect.s b/data/pc_screen_effect.s
index 1d6571149..1d6571149 100755..100644
--- a/data/pc_screen_effect.s
+++ b/data/pc_screen_effect.s
diff --git a/data/data2b.s b/data/smokescreen.s
index c7cd4dfcf..21cca5917 100644
--- a/data/data2b.s
+++ b/data/smokescreen.s
@@ -55,24 +55,3 @@ gSpriteAnimTable_81FAEFC:: @ 81FAEFC
.align 2
gSpriteTemplate_81FAF0C:: @ 81FAF0C
spr_template 55019, 55019, gOamData_81FAEB4, gSpriteAnimTable_81FAEFC, NULL, gDummySpriteAffineAnimTable, sub_80463CC
-
- .align 2
-gUnknown_081FAF24:: @ 81FAF24
- obj_tiles gEnemyMonShadow_Gfx, 128, 0xD759
-
- .align 2
-gOamData_81FAF2C:: @ 81FAF2C
- .2byte 0x4000
- .2byte 0x4000
- .2byte 0x0C00
-
- .align 2
-gSpriteTemplate_81FAF34:: @ 81FAF34
- spr_template 55129, 55039, gOamData_81FAF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8032978
-
- .align 2
-gUnknown_081FAF4C:: @ 81FAF4C
- .4byte gSharedMem + 0x8000
- .4byte gSharedMem + 0xA000
- .4byte gSharedMem + 0xC000
- .4byte gSharedMem + 0xE000
diff --git a/data/sparkle.s b/data/sparkle.s
new file mode 100644
index 000000000..0c2593fbd
--- /dev/null
+++ b/data/sparkle.s
@@ -0,0 +1,21 @@
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gSpriteAnim_83930D8:: @ 83930D8
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 16, 3
+ obj_image_anim_frame 32, 3
+ obj_image_anim_frame 48, 3
+ obj_image_anim_frame 64, 3
+ obj_image_anim_end
+
+ .align 2
+gSpriteAnimTable_83930F0:: @ 83930F0
+ .4byte gSpriteAnim_83930D8
+
+ .align 2
+gBattleAnimSpriteTemplate_83930F4:: @ 83930F4
+ spr_template 10071, 10071, gOamData_837DF34, gSpriteAnimTable_83930F0, NULL, gDummySpriteAffineAnimTable, sub_807A63C
diff --git a/data/unused_hit.s b/data/unused_hit.s
new file mode 100644
index 000000000..d7bdef912
--- /dev/null
+++ b/data/unused_hit.s
@@ -0,0 +1,29 @@
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gSpriteAnim_8393124:: @ 8393124
+ obj_image_anim_frame 0, 5
+ obj_image_anim_jump 0
+
+ .align 2
+gSpriteAnim_839312C:: @ 839312C
+ obj_image_anim_frame 0, 5
+ obj_image_anim_jump 0
+
+ .align 2
+gSpriteAnim_8393134:: @ 8393134
+ obj_image_anim_frame 0, 5
+ obj_image_anim_jump 0
+
+ .align 2
+gSpriteAnimTable_839313C:: @ 839313C
+ .4byte gSpriteAnim_8393124
+ .4byte gSpriteAnim_839312C
+ .4byte gSpriteAnim_8393134
+
+ .align 2
+gSpriteTemplate_8393148:: @ 8393148
+ spr_template 10135, 10135, gOamData_837DF34, gSpriteAnimTable_839313C, NULL, gDummySpriteAffineAnimTable, sub_807A5C4
diff --git a/data/unused_orb.s b/data/unused_orb.s
new file mode 100644
index 000000000..d49ddd908
--- /dev/null
+++ b/data/unused_orb.s
@@ -0,0 +1,24 @@
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gSpriteAnim_8393054:: @ 8393054
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 4, 3
+ obj_image_anim_frame 8, 3
+ obj_image_anim_frame 12, 3
+ obj_image_anim_jump 0
+
+ .align 2
+gSpriteAnimTable_8393068:: @ 8393068
+ .4byte gSpriteAnim_8393054
+
+ .align 2
+gSpriteTemplate_839306C:: @ 839306C
+ spr_template 10004, 10004, gOamData_837DF2C, gSpriteAnimTable_8393068, NULL, gDummySpriteAffineAnimTable, sub_807A5C4
+
+ .align 2
+gSpriteTemplate_8393084:: @ 8393084
+ spr_template 10004, 10004, gOamData_837DF2C, gSpriteAnimTable_8393068, NULL, gDummySpriteAffineAnimTable, sub_807A544
diff --git a/data/unused_orb2.s b/data/unused_orb2.s
new file mode 100644
index 000000000..899f41372
--- /dev/null
+++ b/data/unused_orb2.s
@@ -0,0 +1,27 @@
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gSpriteAnim_8393160:: @ 8393160
+ obj_image_anim_frame 0, 15
+ obj_image_anim_jump 0
+
+ .align 2
+gSpriteAnimTable_8393168:: @ 8393168
+ .4byte gSpriteAnim_8393160
+
+ .align 2
+gSpriteAffineAnim_839316C:: @ 839316C
+ obj_rot_scal_anim_frame 0x60, 0x60, 0, 0
+ obj_rot_scal_anim_frame 0x2, 0x2, 0, 1
+ obj_rot_scal_anim_jump 1
+
+ .align 2
+gSpriteAffineAnimTable_8393184:: @ 8393184
+ .4byte gSpriteAffineAnim_839316C
+
+ .align 2
+gSpriteTemplate_8393188:: @ 8393188
+ spr_template 10004, 10004, gOamData_837DFEC, gSpriteAnimTable_8393168, NULL, gSpriteAffineAnimTable_8393184, sub_807A544
diff --git a/data/unused_paw.s b/data/unused_paw.s
new file mode 100644
index 000000000..cb29168d7
--- /dev/null
+++ b/data/unused_paw.s
@@ -0,0 +1,8 @@
+ .include "include/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gSpriteTemplate_839310C:: @ 839310C
+ spr_template 10051, 10051, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_807A5C4
diff --git a/graphics/birch_speech/blank_pal.pal b/graphics/birch_speech/blank_pal.pal
index 7dc528e38..7dc528e38 100755..100644
--- a/graphics/birch_speech/blank_pal.pal
+++ b/graphics/birch_speech/blank_pal.pal
diff --git a/include/battle.h b/include/battle.h
index 27ed57045..d3cbd24f5 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -4,6 +4,30 @@
#include "sprite.h"
#include "constants/battle_constants.h"
+/*
+ Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
+ Each bank has a value consisting of two bits.
+ 0x1 bit is responsible for the side, 0 = player's side, 1 = opponent's side.
+ 0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.)
+*/
+
+#define BATTLE_BANKS_COUNT 4
+
+#define IDENTITY_PLAYER_MON1 0
+#define IDENTITY_OPPONENT_MON1 1
+#define IDENTITY_PLAYER_MON2 2
+#define IDENTITY_OPPONENT_MON2 3
+
+#define SIDE_PLAYER 0x0
+#define SIDE_OPPONENT 0x1
+
+#define BIT_SIDE 0x1
+#define BIT_MON 0x2
+
+#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank]))
+#define GET_BANK_SIDE(bank)((GetBankIdentity(bank) & BIT_SIDE))
+#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE))
+
enum
{
BATTLE_TERRAIN_GRASS,
@@ -49,16 +73,16 @@ struct AI_Stack
struct AI_ThinkingStruct /* 0x2016800 */
{
-/* 0x00 */ u8 aiState;
-/* 0x01 */ u8 movesetIndex;
-/* 0x02 */ u16 moveConsidered;
-/* 0x04 */ s8 score[4]; // score?
-/* 0x08 */ u32 funcResult;
-/* 0x0C */ u32 aiFlags;
-/* 0x10 */ u8 aiAction;
-/* 0x11 */ u8 aiLogicId;
-/* 0x12 */ u8 filler12[6];
-/* 0x18 */ u8 simulatedRNG[4];
+ /*0x00*/ u8 aiState;
+ /*0x01*/ u8 movesetIndex;
+ /*0x02*/ u16 moveConsidered;
+ /*0x04*/ s8 score[4]; // score?
+ /*0x08*/ u32 funcResult;
+ /*0x0C*/ u32 aiFlags;
+ /*0x10*/ u8 aiAction;
+ /*0x11*/ u8 aiLogicId;
+ /*0x12*/ u8 filler12[6];
+ /*0x18*/ u8 simulatedRNG[4];
};
struct BattleStruct /* 0x2000000 */
@@ -302,6 +326,18 @@ struct BattleStruct /* 0x2000000 */
/* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2;
};
+struct StatsArray
+{
+ u16 hp;
+ u16 atk;
+ u16 def;
+ u16 spd;
+ u16 spAtk;
+ u16 spDef;
+};
+
+#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
+
struct DisableStruct
{
/*0x00*/ u32 transformedMonPersonality;
@@ -473,7 +509,7 @@ struct sideTimer
u8 lightscreenTimer; //0x1
u8 mistTimer; //0x2
u8 field3; //0x3
- u16 field4; //0x4
+ u16 field4; //0x4
u8 spikesAmount; //0x6
u8 safeguardTimer; //0x7
u8 followmeTimer; //0x8
@@ -491,7 +527,7 @@ struct WishFutureKnock
u8 wishCounter[MAX_BANKS_BATTLE];
u8 wishUserID[MAX_BANKS_BATTLE];
u8 weatherDuration;
- u16 knockedOffPokes;
+ u8 knockedOffPokes[2];
};
extern struct UnkBattleStruct1 unk_2016A00;
@@ -504,6 +540,88 @@ extern struct WishFutureKnock gWishFutureKnock;
extern struct AI_ThinkingStruct gAIThinkingSpace;
extern struct Struct20238C8 gUnknown_020238C8;
+#define GET_MOVE_TYPE(move, typeArg) \
+{ \
+ if (gBattleStruct->dynamicMoveType) \
+ typeArg = gBattleStruct->dynamicMoveType & 0x3F; \
+ else \
+ typeArg = gBattleMoves[move].type; \
+}
+
+#define MOVE_EFFECT_SLEEP 0x1
+#define MOVE_EFFECT_POISON 0x2
+#define MOVE_EFFECT_BURN 0x3
+#define MOVE_EFFECT_FREEZE 0x4
+#define MOVE_EFFECT_PARALYSIS 0x5
+#define MOVE_EFFECT_TOXIC 0x6
+#define MOVE_EFFECT_CONFUSION 0x7
+#define MOVE_EFFECT_FLINCH 0x8
+#define MOVE_EFFECT_TRI_ATTACK 0x9
+#define MOVE_EFFECT_UPROAR 0xA
+#define MOVE_EFFECT_PAYDAY 0xB
+#define MOVE_EFFECT_CHARGING 0xC
+#define MOVE_EFFECT_WRAP 0xD
+#define MOVE_EFFECT_RECOIL_25 0xE
+#define MOVE_EFFECT_ATK_PLUS_1 0xF
+#define MOVE_EFFECT_DEF_PLUS_1 0x10
+#define MOVE_EFFECT_SPD_PLUS_1 0x11
+#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
+#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
+#define MOVE_EFFECT_ACC_PLUS_1 0x14
+#define MOVE_EFFECT_EVS_PLUS_1 0x15
+#define MOVE_EFFECT_ATK_MINUS_1 0x16
+#define MOVE_EFFECT_DEF_MINUS_1 0x17
+#define MOVE_EFFECT_SPD_MINUS_1 0x18
+#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
+#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
+#define MOVE_EFFECT_ACC_MINUS_1 0x1B
+#define MOVE_EFFECT_EVS_MINUS_1 0x1C
+#define MOVE_EFFECT_RECHARGE 0x1D
+#define MOVE_EFFECT_RAGE 0x1E
+#define MOVE_EFFECT_STEAL_ITEM 0x1F
+#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
+#define MOVE_EFFECT_NIGHTMARE 0x21
+#define MOVE_EFFECT_ALL_STATS_UP 0x22
+#define MOVE_EFFECT_RAPIDSPIN 0x23
+#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
+#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
+#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
+#define MOVE_EFFECT_ATK_PLUS_2 0x27
+#define MOVE_EFFECT_DEF_PLUS_2 0x28
+#define MOVE_EFFECT_SPD_PLUS_2 0x29
+#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
+#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
+#define MOVE_EFFECT_ACC_PLUS_2 0x2C
+#define MOVE_EFFECT_EVS_PLUS_2 0x2D
+#define MOVE_EFFECT_ATK_MINUS_2 0x2E
+#define MOVE_EFFECT_DEF_MINUS_2 0x2F
+#define MOVE_EFFECT_SPD_MINUS_2 0x30
+#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
+#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
+#define MOVE_EFFECT_ACC_MINUS_2 0x33
+#define MOVE_EFFECT_EVS_MINUS_2 0x34
+#define MOVE_EFFECT_THRASH 0x35
+#define MOVE_EFFECT_KNOCK_OFF 0x36
+#define MOVE_EFFECT_NOTHING_37 0x37
+#define MOVE_EFFECT_NOTHING_38 0x38
+#define MOVE_EFFECT_NOTHING_39 0x39
+#define MOVE_EFFECT_NOTHING_3A 0x3A
+#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
+#define MOVE_EFFECT_NOTHING_3C 0x3C
+#define MOVE_EFFECT_NOTHING_3D 0x3D
+#define MOVE_EFFECT_NOTHING_3E 0x3E
+#define MOVE_EFFECT_NOTHING_3F 0x3F
+#define MOVE_EFFECT_AFFECTS_USER 0x40
+#define MOVE_EFFECT_CERTAIN 0x80
+
+#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
+#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
+#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
+
+#define SET_STAT_BUFF_VALUE(n)(((s8)(((s8)(n) << 4)) & 0xF0))
+
+#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
+
// used in many battle files, it seems as though Hisashi Sogabe wrote
// some sort of macro to replace the use of actually calling memset.
// Perhaps it was thought calling memset was much slower?
@@ -540,7 +658,7 @@ struct funcStack
struct scriptsStack
{
- u8* ptr[8];
+ const u8 *ptr[8];
u8 size;
};
@@ -676,11 +794,11 @@ void nullsub_10(int);
void load_gfxc_health_bar();
u8 battle_load_something();
void sub_8031F88(u8);
-void sub_80324F8(struct Pokemon *, u8);
+void HandleLowHpMusicChange(struct Pokemon *, u8);
void sub_8032638();
void sub_8032AA8(u8, u8);
void SetBankFuncToOpponentBufferRunCommand(void);
-void BattleMusicStop(void);
+void BattleStopLowHpSound(void);
// asm/battle_9.o
void SetBankFuncToLinkOpponentBufferRunCommand(void);
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
new file mode 100644
index 000000000..030844ec3
--- /dev/null
+++ b/include/battle_script_commands.h
@@ -0,0 +1,65 @@
+#ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H
+#define GUARD_BATTLE_SCRIPT_COMMANDS_H
+
+#define NO_ACC_CALC 0xFFFE
+#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
+#define ACC_CURR_MOVE 0
+
+#define CMP_EQUAL 0x0
+#define CMP_NOT_EQUAL 0x1
+#define CMP_GREATER_THAN 0x2
+#define CMP_LESS_THAN 0x3
+#define CMP_COMMON_BITS 0x4
+#define CMP_NO_COMMON_BITS 0x5
+
+#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
+#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
+#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
+
+#define ATK48_STAT_NEGATIVE 0x1
+#define ATK48_STAT_BY_TWO 0x2
+#define ATK48_BIT_x4 0x4
+#define ATK48_LOWER_FAIL_CHECK 0x8
+
+#define ATK4F_DONT_CHECK_STATUSES 0x80
+
+#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
+#define VARIOUS_SET_MAGIC_COAT_TARGET 1
+#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
+#define VARIOUS_GET_MOVE_TARGET 3
+#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
+#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_EMIT_YESNOBOX 13
+#define VARIOUS_WAIT_CRY 18
+#define VARIOUS_RETURN_OPPONENT_MON1 19
+#define VARIOUS_RETURN_OPPONENT_MON2 20
+#define VARIOUS_SET_TELEPORT_OUTCOME 25
+#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
+
+#define ATK80_DMG_CHANGE_SIGN 0
+#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
+#define ATK80_DMG_DOUBLED 2
+
+#define STAT_CHANGE_BS_PTR 0x1
+#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
+
+#define STAT_CHANGE_WORKED 0
+#define STAT_CHANGE_DIDNT_WORK 1
+
+#define WINDOW_CLEAR 0x1
+#define WINDOW_x80 0x80
+
+void AI_CalcDmg(u8 bankAtk, u8 bankDef);
+u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
+u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
+u8 BankGetTurnOrder(u8 bank);
+void SetMoveEffect(bool8 primary, u8 certain);
+void BattleDestroyYesNoCursorAt(u8 cursorPosition);
+void BattleCreateYesNoCursorAt(u8 cursorPosition);
+void BufferMoveToLearnIntoBattleTextBuff2(void);
+void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
+bool8 UproarWakeUpCheck(u8 bank);
+
+extern void (* const gBattleScriptingCommandsTable[])(void);
+
+#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/battle_string_ids.h b/include/battle_string_ids.h
new file mode 100644
index 000000000..f242284b0
--- /dev/null
+++ b/include/battle_string_ids.h
@@ -0,0 +1,387 @@
+#ifndef GUARD_BATTLE_STRING_IDS_H
+#define GUARD_BATTLE_STRING_IDS_H
+
+#define BATTLESTRINGS_COUNT 369
+
+#define BATTLESTRINGS_ID_ADDER 12 // all battlestrings have its ID + 12, because first 5 are reserved
+
+#define STRINGID_INTROMSG 0
+#define STRINGID_INTROSENDOUT 1
+#define STRINGID_RETURNMON 2
+#define STRINGID_SWITCHINMON 3
+#define STRINGID_USEDMOVE 4
+#define STRINGID_BATTLEEND 5
+
+
+// todo: make some of those names less vague: attacker/target vs pkmn, etc.
+#define STRINGID_TRAINER1LOSETEXT 12
+#define STRINGID_PKMNGAINEDEXP 13
+#define STRINGID_PKMNGREWTOLV 14
+#define STRINGID_PKMNLEARNEDMOVE 15
+#define STRINGID_TRYTOLEARNMOVE1 16
+#define STRINGID_TRYTOLEARNMOVE2 17
+#define STRINGID_TRYTOLEARNMOVE3 18
+#define STRINGID_PKMNFORGOTMOVE 19
+#define STRINGID_STOPLEARNINGMOVE 20
+#define STRINGID_DIDNOTLEARNMOVE 21
+#define STRINGID_PKMNLEARNEDMOVE2 22
+#define STRINGID_ATTACKMISSED 23
+#define STRINGID_PKMNPROTECTEDITSELF 24
+#define STRINGID_STATSWONTINCREASE2 25
+#define STRINGID_AVOIDEDDAMAGE 26
+#define STRINGID_ITDOESNTAFFECT 27
+#define STRINGID_ATTACKERFAINTED 28
+#define STRINGID_TARGETFAINTED 29
+#define STRINGID_PLAYERGOTMONEY 30
+#define STRINGID_PLAYERWHITEOUT 31
+#define STRINGID_PLAYERWHITEOUT2 32
+#define STRINGID_PREVENTSESCAPE 33
+#define STRINGID_HITXTIMES 34
+#define STRINGID_PKMNFELLASLEEP 35
+#define STRINGID_PKMNMADESLEEP 36
+#define STRINGID_PKMNALREADYASLEEP 37
+#define STRINGID_PKMNALREADYASLEEP2 38
+#define STRINGID_PKMNWASNTAFFECTED 39
+#define STRINGID_PKMNWASPOISONED 40
+#define STRINGID_PKMNPOISONEDBY 41
+#define STRINGID_PKMNHURTBYPOISON 42
+#define STRINGID_PKMNALREADYPOISONED 43
+#define STRINGID_PKMNBADLYPOISONED 44
+#define STRINGID_PKMNENERGYDRAINED 45
+#define STRINGID_PKMNWASBURNED 46
+#define STRINGID_PKMNBURNEDBY 47
+#define STRINGID_PKMNHURTBYBURN 48
+#define STRINGID_PKMNWASFROZEN 49
+#define STRINGID_PKMNFROZENBY 50
+#define STRINGID_PKMNISFROZEN 51
+#define STRINGID_PKMNWASDEFROSTED 52
+#define STRINGID_PKMNWASDEFROSTED2 53
+#define STRINGID_PKMNWASDEFROSTEDBY 54
+#define STRINGID_PKMNWASPARALYZED 55
+#define STRINGID_PKMNWASPARALYZEDBY 56
+#define STRINGID_PKMNISPARALYZED 57
+#define STRINGID_PKMNISALREADYPARALYZED 58
+#define STRINGID_PKMNHEALEDPARALYSIS 59
+#define STRINGID_PKMNDREAMEATEN 60
+#define STRINGID_STATSWONTINCREASE 61
+#define STRINGID_STATSWONTDECREASE 62
+#define STRINGID_TEAMSTOPPEDWORKING 63
+#define STRINGID_FOESTOPPEDWORKING 64
+#define STRINGID_PKMNISCONFUSED 65
+#define STRINGID_PKMNHEALEDCONFUSION 66
+#define STRINGID_PKMNWASCONFUSED 67
+#define STRINGID_PKMNALREADYCONFUSED 68
+#define STRINGID_PKMNFELLINLOVE 69
+#define STRINGID_PKMNINLOVE 70
+#define STRINGID_PKMNIMMOBILIZEDBYLOVE 71
+#define STRINGID_PKMNBLOWNAWAY 72
+#define STRINGID_PKMNCHANGEDTYPE 73
+#define STRINGID_PKMNFLINCHED 74
+#define STRINGID_PKMNREGAINEDHEALTH 75
+#define STRINGID_PKMNHPFULL 76
+#define STRINGID_PKMNRAISEDSPDEF 77
+#define STRINGID_PKMNRAISEDDEF 78
+#define STRINGID_PKMNCOVEREDBYVEIL 79
+#define STRINGID_PKMNUSEDSAFEGUARD 80
+#define STRINGID_PKMNSAFEGUARDEXPIRED 81
+#define STRINGID_PKMNWENTTOSLEEP 82
+#define STRINGID_PKMNSLEPTHEALTHY 83
+#define STRINGID_PKMNWHIPPEDWHIRLWIND 84
+#define STRINGID_PKMNTOOKSUNLIGHT 85
+#define STRINGID_PKMNLOWEREDHEAD 86
+#define STRINGID_PKMNISGLOWING 87
+#define STRINGID_PKMNFLEWHIGH 88
+#define STRINGID_PKMNDUGHOLE 89
+#define STRINGID_PKMNSQUEEZEDBYBIND 90
+#define STRINGID_PKMNTRAPPEDINVORTEX 91
+#define STRINGID_PKMNWRAPPEDBY 92
+#define STRINGID_PKMNCLAMPED 93
+#define STRINGID_PKMNHURTBY 94
+#define STRINGID_PKMNFREEDFROM 95
+#define STRINGID_PKMNCRASHED 96
+#define STRINGID_PKMNSHROUDEDINMIST 97
+#define STRINGID_PKMNPROTECTEDBYMIST 98
+#define STRINGID_PKMNGETTINGPUMPED 99
+#define STRINGID_PKMNHITWITHRECOIL 100
+#define STRINGID_PKMNPROTECTEDITSELF2 101
+#define STRINGID_PKMNBUFFETEDBYSANDSTORM 102
+#define STRINGID_PKMNPELTEDBYHAIL 103
+#define STRINGID_PKMNSEEDED 104
+#define STRINGID_PKMNEVADEDATTACK 105
+#define STRINGID_PKMNSAPPEDBYLEECHSEED 106
+#define STRINGID_PKMNFASTASLEEP 107
+#define STRINGID_PKMNWOKEUP 108
+#define STRINGID_PKMNUPROARKEPTAWAKE 109
+#define STRINGID_PKMNWOKEUPINUPROAR 110
+#define STRINGID_PKMNCAUSEDUPROAR 111
+#define STRINGID_PKMNMAKINGUPROAR 112
+#define STRINGID_PKMNCALMEDDOWN 113
+#define STRINGID_PKMNCANTSLEEPINUPROAR 114
+#define STRINGID_PKMNSTOCKPILED 115
+#define STRINGID_PKMNCANTSTOCKPILE 116
+#define STRINGID_PKMNCANTSLEEPINUPROAR2 117
+#define STRINGID_UPROARKEPTPKMNAWAKE 118
+#define STRINGID_PKMNSTAYEDAWAKEUSING 119
+#define STRINGID_PKMNSTORINGENERGY 120
+#define STRINGID_PKMNUNLEASHEDENERGY 121
+#define STRINGID_PKMNFATIGUECONFUSION 122
+#define STRINGID_PKMNPICKEDUPITEM 123
+#define STRINGID_PKMNUNAFFECTED 124
+#define STRINGID_PKMNTRANSFORMEDINTO 125
+#define STRINGID_PKMNMADESUBSTITUTE 126
+#define STRINGID_PKMNHASSUBSTITUTE 127
+#define STRINGID_SUBSTITUTEDAMAGED 128
+#define STRINGID_PKMNSUBSTITUTEFADED 129
+#define STRINGID_PKMNMUSTRECHARGE 130
+#define STRINGID_PKMNRAGEBUILDING 131
+#define STRINGID_PKMNMOVEWASDISABLED 132
+#define STRINGID_PKMNMOVEISDISABLED 133
+#define STRINGID_PKMNMOVEDISABLEDNOMORE 134
+#define STRINGID_PKMNGOTENCORE 135
+#define STRINGID_PKMNENCOREENDED 136
+#define STRINGID_PKMNTOOKAIM 137
+#define STRINGID_PKMNSKETCHEDMOVE 138
+#define STRINGID_PKMNTRYINGTOTAKEFOE 139
+#define STRINGID_PKMNTOOKFOE 140
+#define STRINGID_PKMNREDUCEDPP 141
+#define STRINGID_PKMNSTOLEITEM 142
+#define STRINGID_TARGETCANTESCAPENOW 143
+#define STRINGID_PKMNFELLINTONIGHTMARE 144
+#define STRINGID_PKMNLOCKEDINNIGHTMARE 145
+#define STRINGID_PKMNLAIDCURSE 146
+#define STRINGID_PKMNAFFLICTEDBYCURSE 147
+#define STRINGID_SPIKESSCATTERED 148
+#define STRINGID_PKMNHURTBYSPIKES 149
+#define STRINGID_PKMNIDENTIFIED 150
+#define STRINGID_PKMNPERISHCOUNTFELL 151
+#define STRINGID_PKMNBRACEDITSELF 152
+#define STRINGID_PKMNENDUREDHIT 153
+#define STRINGID_MAGNITUDESTRENGTH 154
+#define STRINGID_PKMNCUTHPMAXEDATTACK 155
+#define STRINGID_PKMNCOPIEDSTATCHANGES 156
+#define STRINGID_PKMNGOTFREE 157
+#define STRINGID_PKMNSHEDLEECHSEED 158
+#define STRINGID_PKMNBLEWAWAYSPIKES 159
+#define STRINGID_PKMNFLEDFROMBATTLE 160
+#define STRINGID_PKMNFORESAWATTACK 161
+#define STRINGID_PKMNTOOKATTACK 162
+#define STRINGID_PKMNATTACK 163
+#define STRINGID_PKMNCENTERATTENTION 164
+#define STRINGID_PKMNCHARGINGPOWER 165
+#define STRINGID_NATUREPOWERTURNEDINTO 166
+#define STRINGID_PKMNSTATUSNORMAL 167
+#define STRINGID_PKMNHASNOMOVESLEFT 168
+#define STRINGID_PKMNSUBJECTEDTOTORMENT 169
+#define STRINGID_PKMNCANTUSEMOVETORMENT 170
+#define STRINGID_PKMNTIGHTENINGFOCUS 171
+#define STRINGID_PKMNFELLFORTAUNT 172
+#define STRINGID_PKMNCANTUSEMOVETAUNT 173
+#define STRINGID_PKMNREADYTOHELP 174
+#define STRINGID_PKMNSWITCHEDITEMS 175
+#define STRINGID_PKMNCOPIEDFOE 176
+#define STRINGID_PKMNMADEWISH 177
+#define STRINGID_PKMNWISHCAMETRUE 178
+#define STRINGID_PKMNPLANTEDROOTS 179
+#define STRINGID_PKMNABSORBEDNUTRIENTS 180
+#define STRINGID_PKMNANCHOREDITSELF 181
+#define STRINGID_PKMNWASMADEDROWSY 182
+#define STRINGID_PKMNKNOCKEDOFF 183
+#define STRINGID_PKMNSWAPPEDABILITIES 184
+#define STRINGID_PKMNSEALEDOPPONENTMOVE 185
+#define STRINGID_PKMNCANTUSEMOVESEALED 186
+#define STRINGID_PKMNWANTSGRUDGE 187
+#define STRINGID_PKMNLOSTPPGRUDGE 188
+#define STRINGID_PKMNSHROUDEDITSELF 189
+#define STRINGID_PKMNMOVEBOUNCED 190
+#define STRINGID_PKMNWAITSFORTARGET 191
+#define STRINGID_PKMNSNATCHEDMOVE 192
+#define STRINGID_PKMNMADEITRAIN 193
+#define STRINGID_PKMNRAISEDSPEED 194
+#define STRINGID_PKMNPROTECTEDBY 195
+#define STRINGID_PKMNPREVENTSUSAGE 196
+#define STRINGID_PKMNRESTOREDHPUSING 197
+#define STRINGID_PKMNCHANGEDTYPEWITH 198
+#define STRINGID_PKMNPREVENTSPARALYSISWITH 199
+#define STRINGID_PKMNPREVENTSROMANCEWITH 200
+#define STRINGID_PKMNPREVENTSPOISONINGWITH 201
+#define STRINGID_PKMNPREVENTSCONFUSIONWITH 202
+#define STRINGID_PKMNRAISEDFIREPOWERWITH 203
+#define STRINGID_PKMNANCHORSITSELFWITH 204
+#define STRINGID_PKMNCUTSATTACKWITH 205
+#define STRINGID_PKMNPREVENTSSTATLOSSWITH 206
+#define STRINGID_PKMNHURTSWITH 207
+#define STRINGID_PKMNTRACED 208
+#define STRINGID_STATSHARPLY 209
+#define STRINGID_STATROSE 210
+#define STRINGID_STATHARSHLY 211
+#define STRINGID_STATFELL 212
+#define STRINGID_PKMNSSTATCHANGED 213
+#define STRINGID_PKMNSSTATCHANGED2 214
+#define STRINGID_PKMNSSTATCHANGED3 215
+#define STRINGID_PKMNSSTATCHANGED4 216
+#define STRINGID_CRITICALHIT 217
+#define STRINGID_ONEHITKO 218
+#define STRINGID_123POOF 219
+#define STRINGID_ANDELLIPSIS 220
+#define STRINGID_NOTVERYEFFECTIVE 221
+#define STRINGID_SUPEREFFECTIVE 222
+#define STRINGID_GOTAWAYSAFELY 223
+#define STRINGID_WILDPKMNFLED 224
+#define STRINGID_NORUNNINGFROMTRAINERS 225
+#define STRINGID_CANTESCAPE 226
+#define STRINGID_DONTLEAVEBIRCH 227
+#define STRINGID_BUTNOTHINGHAPPENED 228
+#define STRINGID_BUTITFAILED 229
+#define STRINGID_ITHURTCONFUSION 230
+#define STRINGID_MIRRORMOVEFAILED 231
+#define STRINGID_STARTEDTORAIN 232
+#define STRINGID_DOWNPOURSTARTED 233
+#define STRINGID_RAINCONTINUES 234
+#define STRINGID_DOWNPOURCONTINUES 235
+#define STRINGID_RAINSTOPPED 236
+#define STRINGID_SANDSTORMBREWED 237
+#define STRINGID_SANDSTORMRAGES 238
+#define STRINGID_SANDSTORMSUBSIDED 239
+#define STRINGID_SUNLIGHTGOTBRIGHT 240
+#define STRINGID_SUNLIGHTSTRONG 241
+#define STRINGID_SUNLIGHTFADED 242
+#define STRINGID_STARTEDHAIL 243
+#define STRINGID_HAILCONTINUES 244
+#define STRINGID_HAILSTOPPED 245
+#define STRINGID_FAILEDTOSPITUP 246
+#define STRINGID_FAILEDTOSWALLOW 247
+#define STRINGID_WINDBECAMEHEATWAVE 248
+#define STRINGID_STATCHANGESGONE 249
+#define STRINGID_COINSSCATTERED 250
+#define STRINGID_TOOWEAKFORSUBSTITUTE 251
+#define STRINGID_SHAREDPAIN 252
+#define STRINGID_BELLCHIMED 253
+#define STRINGID_FAINTINTHREE 254
+#define STRINGID_NOPPLEFT 255
+#define STRINGID_BUTNOPPLEFT 256
+#define STRINGID_PLAYERUSEDITEM 257
+#define STRINGID_WALLYUSEDITEM 258
+#define STRINGID_TRAINERBLOCKEDBALL 259
+#define STRINGID_DONTBEATHIEF 260
+#define STRINGID_ITDODGEDBALL 261
+#define STRINGID_YOUMISSEDPKMN 262
+#define STRINGID_PKMNBROKEFREE 263
+#define STRINGID_ITAPPEAREDCAUGHT 264
+#define STRINGID_AARGHALMOSTHADIT 265
+#define STRINGID_SHOOTSOCLOSE 266
+#define STRINGID_GOTCHAPKMNCAUGHT 267
+#define STRINGID_GOTCHAPKMNCAUGHT2 268
+#define STRINGID_GIVENICKNAMECAPTURED 269
+#define STRINGID_PKMNSENTTOPC 270
+#define STRINGID_PKMNDATAADDEDTODEX 271
+#define STRINGID_ITISRAINING 272
+#define STRINGID_SANDSTORMISRAGING 273
+#define STRINGID_CANTESCAPE2 274
+#define STRINGID_PKMNIGNORESASLEEP 275
+#define STRINGID_PKMNIGNOREDORDERS 276
+#define STRINGID_PKMNBEGANTONAP 277
+#define STRINGID_PKMNLOAFING 278
+#define STRINGID_PKMNWONTOBEY 279
+#define STRINGID_PKMNTURNEDAWAY 280
+#define STRINGID_PKMNPRETENDNOTNOTICE 281
+#define STRINGID_ENEMYABOUTTOSWITCHPKMN 282
+#define STRINGID_CREPTCLOSER 283
+#define STRINGID_CANTGETCLOSER 284
+#define STRINGID_PKMNWATCHINGCAREFULLY 285
+#define STRINGID_PKMNCURIOUSABOUTX 286
+#define STRINGID_PKMNENTHRALLEDBYX 287
+#define STRINGID_PKMNIGNOREDX 288
+#define STRINGID_THREWPOKEBLOCKATPKMN 289
+#define STRINGID_OUTOFSAFARIBALLS 290
+#define STRINGID_PKMNSITEMCUREDPARALYSIS 291
+#define STRINGID_PKMNSITEMCUREDPOISON 292
+#define STRINGID_PKMNSITEMHEALEDBURN 293
+#define STRINGID_PKMNSITEMDEFROSTEDIT 294
+#define STRINGID_PKMNSITEMWOKEIT 295
+#define STRINGID_PKMNSITEMSNAPPEDOUT 296
+#define STRINGID_PKMNSITEMCUREDPROBLEM 297
+#define STRINGID_PKMNSITEMRESTOREDHEALTH 298
+#define STRINGID_PKMNSITEMRESTOREDPP 299
+#define STRINGID_PKMNSITEMRESTOREDSTATUS 300
+#define STRINGID_PKMNSITEMRESTOREDHPALITTLE 301
+#define STRINGID_ITEMALLOWSONLYYMOVE 302
+#define STRINGID_PKMNHUNGONWITHX 303
+#define STRINGID_EMPTYSTRING3 304
+#define STRINGID_PKMNSXPREVENTSBURNS 305
+#define STRINGID_PKMNSXBLOCKSY 306
+#define STRINGID_PKMNSXRESTOREDHPALITTLE2 307
+#define STRINGID_PKMNSXWHIPPEDUPSANDSTORM 308
+#define STRINGID_PKMNSXPREVENTSYLOSS 309
+#define STRINGID_PKMNSXINFATUATEDY 310
+#define STRINGID_PKMNSXMADEYINEFFECTIVE 311
+#define STRINGID_PKMNSXCUREDYPROBLEM 312
+#define STRINGID_ITSUCKEDLIQUIDOOZE 313
+#define STRINGID_PKMNTRANSFORMED 314
+#define STRINGID_ELECTRICITYWEAKENED 315
+#define STRINGID_FIREWEAKENED 316
+#define STRINGID_PKMNHIDUNDERWATER 317
+#define STRINGID_PKMNSPRANGUP 318
+#define STRINGID_HMMOVESCANTBEFORGOTTEN 319
+#define STRINGID_XFOUNDONEY 320
+#define STRINGID_PLAYERDEFEATEDTRAINER1 321
+#define STRINGID_SOOTHINGAROMA 322
+#define STRINGID_ITEMSCANTBEUSEDNOW 323
+#define STRINGID_FORXCOMMAYZ 324
+#define STRINGID_USINGXTHEYOFZN 325
+#define STRINGID_PKMNUSEDXTOGETPUMPED 326
+#define STRINGID_PKMNSXMADEYUSELESS 327
+#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328
+#define STRINGID_EMPTYSTRING4 329
+#define STRINGID_ABOOSTED 330
+#define STRINGID_PKMNSXINTENSIFIEDSUN 331
+#define STRINGID_PKMNMAKESGROUNDMISS 332
+#define STRINGID_YOUTHROWABALLNOWRIGHT 333
+#define STRINGID_PKMNSXTOOKATTACK 334
+#define STRINGID_PKMNCHOSEXASDESTINY 335
+#define STRINGID_PKMNLOSTFOCUS 336
+#define STRINGID_USENEXTPKMN 337
+#define STRINGID_PKMNFLEDUSINGITS 338
+#define STRINGID_PKMNFLEDUSING 339
+#define STRINGID_PKMNWASDRAGGEDOUT 340
+#define STRINGID_PREVENTEDFROMWORKING 341
+#define STRINGID_PKMNSITEMNORMALIZEDSTATUS 342
+#define STRINGID_TRAINER1USEDITEM 343
+#define STRINGID_BOXISFULL 344
+#define STRINGID_PKMNAVOIDEDATTACK 345
+#define STRINGID_PKMNSXMADEITINEFFECTIVE 346
+#define STRINGID_PKMNSXPREVENTSFLINCHING 347
+#define STRINGID_PKMNALREADYHASBURN 348
+#define STRINGID_STATSWONTDECREASE2 349
+#define STRINGID_PKMNSXBLOCKSY2 350
+#define STRINGID_PKMNSXWOREOFF 351
+#define STRINGID_PKMNRAISEDDEFALITTLE 352
+#define STRINGID_PKMNRAISEDSPDEFALITTLE 353
+#define STRINGID_THEWALLSHATTERED 354
+#define STRINGID_PKMNSXPREVENTSYSZ 355
+#define STRINGID_PKMNSXCUREDITSYPROBLEM 356
+#define STRINGID_ATTACKERCANTESCAPE 357
+#define STRINGID_PKMNOBTAINEDX 358
+#define STRINGID_PKMNOBTAINEDX2 359
+#define STRINGID_PKMNOBTAINEDXYOBTAINEDZ 360
+#define STRINGID_BUTNOEFFECT 361
+#define STRINGID_PKMNSXHADNOEFFECTONY 362
+#define STRINGID_TWOENEMIESDEFEATED 363
+#define STRINGID_TRAINER2LOSETEXT 364
+#define STRINGID_PKMNINCAPABLEOFPOWER 365
+#define STRINGID_GLINTAPPEARSINEYE 366
+#define STRINGID_PKMNGETTINGINTOPOSITION 367
+#define STRINGID_PKMNBEGANGROWLINGDEEPLY 368
+#define STRINGID_PKMNEAGERFORMORE 369
+#define STRINGID_DEFEATEDOPPONENTBYREFEREE 370
+#define STRINGID_LOSTTOOPPONENTBYREFEREE 371
+#define STRINGID_TIEDOPPONENTBYREFEREE 372
+#define STRINGID_QUESTIONFORFEITMATCH 373
+#define STRINGID_FORFEITEDMATCH 374
+#define STRINGID_PKMNTRANSFERREDSOMEONESPC 375
+#define STRINGID_PKMNTRANSFERREDLANETTESPC 376
+#define STRINGID_PKMNBOXSOMEONESPCFULL 377
+#define STRINGID_PKMNBOXLANETTESPCFULL 378
+#define STRINGID_TRAINER1WINTEXT 379
+#define STRINGID_TRAINER2WINTEXT 380
+
+#endif // GUARD_BATTLE_STRING_IDS_H
diff --git a/include/battle_util.h b/include/battle_util.h
index f47b00b2c..15fa39d1a 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -11,7 +11,7 @@
#define BS_GET_OPPONENT2 14
void TryClearRageStatuses(void);
-void BattleScriptPush(u8* BS_ptr);
+void BattleScriptPush(const u8* BS_ptr);
void PressurePPLoseOnUsingImprision(u8 bankAtk);
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
void sub_80155A4(u8);
@@ -22,7 +22,7 @@ void ResetSentPokesToOpponentValue(void);
void sub_8015740(u8 bank);
void sub_80157C4(u8 bank);
bool8 HandleWishPerishSongOnTurnEnd(void);
-void BattleScriptExecute(u8* BS_ptr);
+void BattleScriptExecute(const u8* BS_ptr);
void BattleScriptPushCursorAndCallback(u8* BS_ptr);
u8 IsMonDisobedient(void);
diff --git a/include/constants/items.h b/include/constants/items.h
index cde5c7141..9b88db1da 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -2,6 +2,8 @@
#define GUARD_CONSTANTS_ITEMS_H
#define ITEM_NONE 0
+
+// Balls
#define ITEM_MASTER_BALL 1
#define ITEM_ULTRA_BALL 2
#define ITEM_GREAT_BALL 3
@@ -14,6 +16,8 @@
#define ITEM_TIMER_BALL 10
#define ITEM_LUXURY_BALL 11
#define ITEM_PREMIER_BALL 12
+
+// Pokemon Items
#define ITEM_POTION 13
#define ITEM_ANTIDOTE 14
#define ITEM_BURN_HEAL 15
@@ -180,6 +184,8 @@
#define ITEM_0B0 176
#define ITEM_0B1 177
#define ITEM_0B2 178
+
+// hold items
#define ITEM_BRIGHT_POWDER 179
#define ITEM_WHITE_HERB 180
#define ITEM_MACHO_BRACE 181
@@ -260,6 +266,8 @@
#define ITEM_PINK_SCARF 256
#define ITEM_GREEN_SCARF 257
#define ITEM_YELLOW_SCARF 258
+
+// Key Items
#define ITEM_MACH_BIKE 259
#define ITEM_COIN_CASE 260
#define ITEM_ITEMFINDER 261
@@ -290,6 +298,8 @@
#define ITEM_ROOT_FOSSIL 286
#define ITEM_CLAW_FOSSIL 287
#define ITEM_DEVON_SCOPE 288
+
+// TMs/HMs
#define ITEM_TM01_FOCUS_PUNCH 289
#define ITEM_TM02_DRAGON_CLAW 290
#define ITEM_TM03_WATER_PULSE 291
@@ -348,6 +358,8 @@
#define ITEM_HM06_ROCK_SMASH 344
#define ITEM_HM07_WATERFALL 345
#define ITEM_HM08_DIVE 346
+
+// Unknown
#define ITEM_15B 347
#define ITEM_15C 348
@@ -386,4 +398,7 @@
#define NUM_TECHNICAL_MACHINES 50
#define NUM_HIDDEN_MACHINES 8
+// Check if the item is one that can be used on a Pokemon.
+#define IS_POKEMON_ITEM(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2)
+
#endif // GUARD_CONSTANTS_ITEMS_H
diff --git a/include/constants/songs.h b/include/constants/songs.h
index 5225f5899..920873a7c 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -2,371 +2,371 @@
#define GUARD_CONSTANTS_SONGS_H
#define SE_STOP 0
-#define SE_KAIFUKU 1
-#define SE_PC_LOGON 2
-#define SE_PC_OFF 3
-#define SE_PC_ON 4
-#define SE_SELECT 5
-#define SE_WIN_OPEN 6
-#define SE_WALL_HIT 7
-#define SE_DOOR 8
-#define SE_KAIDAN 9
-#define SE_DANSA 10
-#define SE_JITENSYA 11
-#define SE_KOUKA_L 12
-#define SE_KOUKA_M 13
-#define SE_KOUKA_H 14
-#define SE_BOWA2 15
-#define SE_POKE_DEAD 16
-#define SE_NIGERU 17
-#define SE_JIDO_DOA 18
-#define SE_NAMINORI 19
-#define SE_BAN 20
-#define SE_PIN 21
-#define SE_BOO 22
-#define SE_BOWA 23
-#define SE_JYUNI 24
-#define SE_A 25
-#define SE_I 26
-#define SE_U 27
-#define SE_E 28
-#define SE_O 29
-#define SE_N 30
-#define SE_SEIKAI 31
-#define SE_HAZURE 32
-#define SE_EXP 33
-#define SE_JITE_PYOKO 34
+#define SE_KAIFUKU 1 // Healing Item
+#define SE_PC_LOGON 2 // PC Logon
+#define SE_PC_OFF 3 // PC Shutdown
+#define SE_PC_ON 4 // PC Startup
+#define SE_SELECT 5 // Cursor Selection
+#define SE_WIN_OPEN 6 // Start Menu
+#define SE_WALL_HIT 7 // Wall Bump
+#define SE_DOOR 8 // Opening Door
+#define SE_KAIDAN 9 // Stairs
+#define SE_DANSA 10 // Ledge
+#define SE_JITENSYA 11 // Bicycle Bell
+#define SE_KOUKA_L 12 // Not Very Effective
+#define SE_KOUKA_M 13 // Normal Effectiveness
+#define SE_KOUKA_H 14 // Super Effective
+#define SE_BOWA2 15 // Pokémon Withdrawl
+#define SE_POKE_DEAD 16 // Pokémon Fainted
+#define SE_NIGERU 17 // Flee from Wild Battle
+#define SE_JIDO_DOA 18 // Pokémon Center Door
+#define SE_NAMINORI 19 // Briney's Ship
+#define SE_BAN 20 // Bang
+#define SE_PIN 21 // Exclamation Bubble
+#define SE_BOO 22 // Contest Jam
+#define SE_BOWA 23 // Giving Poké Ball to Nurse, Poké Ball Wiggle
+#define SE_JYUNI 24 // Places in Contest Appearing
+#define SE_A 25 // Bard A
+#define SE_I 26 // Bard I
+#define SE_U 27 // Bard U
+#define SE_E 28 // Bard E
+#define SE_O 29 // Bard O
+#define SE_N 30 // Bard N
+#define SE_SEIKAI 31 // Success
+#define SE_HAZURE 32 // Failure
+#define SE_EXP 33 // Exp. Bar
+#define SE_JITE_PYOKO 34 // Bunny Hop
#define SE_MU_PACHI 35
-#define SE_TK_KASYA 36
+#define SE_TK_KASYA 36 // Mossdeep Gym/Trick House Switch
#define SE_FU_ZAKU 37
#define SE_FU_ZAKU2 38
-#define SE_FU_ZUZUZU 39
-#define SE_RU_GASHIN 40
-#define SE_RU_GASYAN 41
-#define SE_RU_BARI 42
-#define SE_RU_HYUU 43
+#define SE_FU_ZUZUZU 39 // Lavaridge Gym Warp
+#define SE_RU_GASHIN 40 // Sootopolis Gym - Stairs Appear
+#define SE_RU_GASYAN 41 // Sootopolis Gym - Ice Breaking
+#define SE_RU_BARI 42 // Sootopolis Gym - Stepping on Ice
+#define SE_RU_HYUU 43 // Falling Down
#define SE_KI_GASYAN 44
-#define SE_TK_WARPIN 45
-#define SE_TK_WARPOUT 46
-#define SE_TU_SAA 47
-#define SE_HI_TURUN 48
-#define SE_TRACK_MOVE 49
-#define SE_TRACK_STOP 50
-#define SE_TRACK_HAIK 51
-#define SE_TRACK_DOOR 52
+#define SE_TK_WARPIN 45 // Warp In
+#define SE_TK_WARPOUT 46 // Warp Out
+#define SE_TU_SAA 47 // Repel
+#define SE_HI_TURUN 48 // Moving Obstacle in Fortree Gym
+#define SE_TRACK_MOVE 49 // Moving Truck
+#define SE_TRACK_STOP 50 // Moving Truck Stop
+#define SE_TRACK_HAIK 51 // Moving Truck Unload
+#define SE_TRACK_DOOR 52 // Moving Truck Door
#define SE_MOTER 53
#define SE_CARD 54
-#define SE_SAVE 55
-#define SE_KON 56
-#define SE_KON2 57
-#define SE_KON3 58
-#define SE_KON4 59
-#define SE_SUIKOMU 60
-#define SE_NAGERU 61
-#define SE_TOY_C 62
-#define SE_TOY_D 63
-#define SE_TOY_E 64
-#define SE_TOY_F 65
-#define SE_TOY_G 66
-#define SE_TOY_A 67
-#define SE_TOY_B 68
-#define SE_TOY_C1 69
-#define SE_MIZU 70
-#define SE_HASHI 71
-#define SE_DAUGI 72
-#define SE_PINPON 73
-#define SE_FUUSEN1 74
-#define SE_FUUSEN2 75
-#define SE_FUUSEN3 76
-#define SE_TOY_KABE 77
-#define SE_TOY_DANGO 78
-#define SE_DOKU 79
-#define SE_ESUKA 80
-#define SE_T_AME 81
-#define SE_T_AME_E 82
-#define SE_T_OOAME 83
-#define SE_T_OOAME_E 84
-#define SE_T_KOAME 85
-#define SE_T_KOAME_E 86
-#define SE_T_KAMI 87
-#define SE_T_KAMI2 88
-#define SE_ELEBETA 89
-#define SE_HINSI 90
-#define SE_EXPMAX 91
-#define SE_TAMAKORO 92
-#define SE_TAMAKORO_E 93
+#define SE_SAVE 55 // Save
+#define SE_KON 56 // Poké Ball Bounce 1
+#define SE_KON2 57 // Poké Ball Bounce 2
+#define SE_KON3 58 // Poké Ball Bounce 3
+#define SE_KON4 59 // Poké Ball Bounce 4
+#define SE_SUIKOMU 60 // Poké Ball Trade
+#define SE_NAGERU 61 // Poké Ball Throw
+#define SE_TOY_C 62 // Note C
+#define SE_TOY_D 63 // Note D
+#define SE_TOY_E 64 // Note E
+#define SE_TOY_F 65 // Note F
+#define SE_TOY_G 66 // Note G
+#define SE_TOY_A 67 // Note A
+#define SE_TOY_B 68 // Note B
+#define SE_TOY_C1 69 // Note High C
+#define SE_MIZU 70 // Puddle
+#define SE_HASHI 71 // Boardwalk
+#define SE_DAUGI 72 // Slots Credits
+#define SE_PINPON 73 // Ding-dong!
+#define SE_FUUSEN1 74 // Red Balloon
+#define SE_FUUSEN2 75 // Blue Balloon
+#define SE_FUUSEN3 76 // Yellow Balloon
+#define SE_TOY_KABE 77 // Breakable Door
+#define SE_TOY_DANGO 78 // Mud Ball
+#define SE_DOKU 79 // Overworld Poison Damage
+#define SE_ESUKA 80 // Escalator
+#define SE_T_AME 81 // Rain
+#define SE_T_AME_E 82 // Rain stop
+#define SE_T_OOAME 83 // Heavy Rain
+#define SE_T_OOAME_E 84 // Heavy Rain Stop
+#define SE_T_KOAME 85 // Light Rain
+#define SE_T_KOAME_E 86 // Light Rain Stop
+#define SE_T_KAMI 87 // Thunder
+#define SE_T_KAMI2 88 // Thunder 2
+#define SE_ELEBETA 89 // Elevator
+#define SE_HINSI 90 // Low Health
+#define SE_EXPMAX 91 // Exp. Max
+#define SE_TAMAKORO 92 // Roulette Ball
+#define SE_TAMAKORO_E 93 // Roulette Ball 2
#define SE_BASABASA 94
-#define SE_REGI 95
-#define SE_C_GAJI 96
-#define SE_C_MAKU_U 97
-#define SE_C_MAKU_D 98
+#define SE_REGI 95 // Cash Register
+#define SE_C_GAJI 96 // Contest Hearts
+#define SE_C_MAKU_U 97 // Contest Curtain rise
+#define SE_C_MAKU_D 98 // Contest Curtain fall
#define SE_C_PASI 99
#define SE_C_SYU 100
-#define SE_C_PIKON 101
-#define SE_REAPOKE 102
-#define SE_OP_BASYU 103
-#define SE_BT_START 104
-#define SE_DENDOU 105
-#define SE_JIHANKI 106
-#define SE_TAMA 107
-#define SE_Z_SCROLL 108
-#define SE_Z_PAGE 109
-#define SE_PN_ON 110
-#define SE_PN_OFF 111
-#define SE_Z_SEARCH 112
-#define SE_TAMAGO 113
-#define SE_TB_START 114
-#define SE_TB_KON 115
-#define SE_TB_KARA 116
+#define SE_C_PIKON 101 // Pokémon Appears in Contest
+#define SE_REAPOKE 102 // Shiny Pokémon
+#define SE_OP_BASYU 103 // Opening Movie -> Title Screen whoosh
+#define SE_BT_START 104 // Battle Mugshot whoosh
+#define SE_DENDOU 105 // Audience Cheering
+#define SE_JIHANKI 106 // Vending Machine
+#define SE_TAMA 107 // Orb Used
+#define SE_Z_SCROLL 108 // Pokédex Scrolling
+#define SE_Z_PAGE 109 // Pokédex Page
+#define SE_PN_ON 110 // PokéNav On
+#define SE_PN_OFF 111 // PokéNav Off
+#define SE_Z_SEARCH 112 // Pokédex Search
+#define SE_TAMAGO 113 // Egg hatch
+#define SE_TB_START 114 // Battle - Poké Ball Tray slide in
+#define SE_TB_KON 115 // Battle - Poké Ball Tray ball sound
+#define SE_TB_KARA 116 // Battle - Poké Ball Tray slide out
#define SE_BIDORO 117
-#define SE_W085 118
-#define SE_W085B 119
-#define SE_W231 120
-#define SE_W171 121
-#define SE_W233 122
-#define SE_W233B 123
-#define SE_W145 124
-#define SE_W145B 125
-#define SE_W145C 126
-#define SE_W240 127
-#define SE_W015 128
-#define SE_W081 129
-#define SE_W081B 130
-#define SE_W088 131
-#define SE_W016 132
-#define SE_W016B 133
-#define SE_W003 134
-#define SE_W104 135
-#define SE_W013 136
-#define SE_W196 137
-#define SE_W086 138
-#define SE_W004 139
-#define SE_W025 140
-#define SE_W025B 141
-#define SE_W152 142
-#define SE_W026 143
-#define SE_W172 144
-#define SE_W172B 145
-#define SE_W053 146
-#define SE_W007 147
-#define SE_W092 148
-#define SE_W221 149
-#define SE_W221B 150
-#define SE_W052 151
-#define SE_W036 152
-#define SE_W059 153
-#define SE_W059B 154
-#define SE_W010 155
-#define SE_W011 156
-#define SE_W017 157
-#define SE_W019 158
-#define SE_W028 159
-#define SE_W013B 160
-#define SE_W044 161
-#define SE_W029 162
-#define SE_W057 163
-#define SE_W056 164
-#define SE_W250 165
-#define SE_W030 166
-#define SE_W039 167
-#define SE_W054 168
-#define SE_W077 169
-#define SE_W020 170
-#define SE_W082 171
-#define SE_W047 172
-#define SE_W195 173
-#define SE_W006 174
-#define SE_W091 175
-#define SE_W146 176
-#define SE_W120 177
-#define SE_W153 178
-#define SE_W071B 179
-#define SE_W071 180
-#define SE_W103 181
-#define SE_W062 182
-#define SE_W062B 183
-#define SE_W048 184
-#define SE_W187 185
-#define SE_W118 186
-#define SE_W155 187
-#define SE_W122 188
-#define SE_W060 189
-#define SE_W185 190
-#define SE_W014 191
-#define SE_W043 192
-#define SE_W207 193
-#define SE_W207B 194
-#define SE_W215 195
-#define SE_W109 196
-#define SE_W173 197
-#define SE_W280 198
-#define SE_W202 199
-#define SE_W060B 200
-#define SE_W076 201
-#define SE_W080 202
-#define SE_W100 203
-#define SE_W107 204
-#define SE_W166 205
-#define SE_W129 206
-#define SE_W115 207
-#define SE_W112 208
-#define SE_W197 209
-#define SE_W199 210
-#define SE_W236 211
-#define SE_W204 212
-#define SE_W268 213
-#define SE_W070 214
-#define SE_W063 215
-#define SE_W127 216
-#define SE_W179 217
-#define SE_W151 218
-#define SE_W201 219
-#define SE_W161 220
-#define SE_W161B 221
-#define SE_W227 222
-#define SE_W227B 223
-#define SE_W226 224
-#define SE_W208 225
-#define SE_W213 226
-#define SE_W213B 227
-#define SE_W234 228
-#define SE_W260 229
-#define SE_W328 230
-#define SE_W320 231
-#define SE_W255 232
-#define SE_W291 233
-#define SE_W089 234
-#define SE_W239 235
-#define SE_W230 236
-#define SE_W281 237
-#define SE_W327 238
-#define SE_W287 239
-#define SE_W257 240
-#define SE_W253 241
-#define SE_W258 242
-#define SE_W322 243
-#define SE_W298 244
-#define SE_W287B 245
-#define SE_W114 246
-#define SE_W063B 247
+#define SE_W085 118 // Thunderbolt
+#define SE_W085B 119 // Thunderbolt 2
+#define SE_W231 120 // Harden
+#define SE_W171 121 // Nightmare
+#define SE_W233 122 // Vital Throw
+#define SE_W233B 123 // Vital Throw 2
+#define SE_W145 124 // Bubble
+#define SE_W145B 125 // Bubble 2
+#define SE_W145C 126 // Bubble 3
+#define SE_W240 127 // Rain Dance
+#define SE_W015 128 // Cut
+#define SE_W081 129 // String Shot
+#define SE_W081B 130 // String Shot 2
+#define SE_W088 131 // Rock Throw
+#define SE_W016 132 // Gust
+#define SE_W016B 133 // Gust 2
+#define SE_W003 134 // DoubleSlap
+#define SE_W104 135 // Double Team
+#define SE_W013 136 // Razor Wind
+#define SE_W196 137 // Icy Wind
+#define SE_W086 138 // Thunder Wave
+#define SE_W004 139 // Comet Punch
+#define SE_W025 140 // Mega Kick
+#define SE_W025B 141 // Mega Kick 2
+#define SE_W152 142 // Crabhammer
+#define SE_W026 143 // Jump Kick
+#define SE_W172 144 // Flame Wheel
+#define SE_W172B 145 // Flame Wheel 2
+#define SE_W053 146 // Flamethrower
+#define SE_W007 147 // Fire Punch
+#define SE_W092 148 // Toxic
+#define SE_W221 149 // Sacred Fire
+#define SE_W221B 150 // Sacred Fire 2
+#define SE_W052 151 // Ember
+#define SE_W036 152 // Take Down
+#define SE_W059 153 // Blizzard
+#define SE_W059B 154 // Blizzard 2
+#define SE_W010 155 // Scratch
+#define SE_W011 156 // Vicegrip
+#define SE_W017 157 // Wing Attack
+#define SE_W019 158 // Fly
+#define SE_W028 159 // Sand-Attack
+#define SE_W013B 160 // Razor Wind 2
+#define SE_W044 161 // Bite
+#define SE_W029 162 // Headbutt
+#define SE_W057 163 // Surf
+#define SE_W056 164 // Hydro Pump
+#define SE_W250 165 // Whirlpool
+#define SE_W030 166 // Horn Attack
+#define SE_W039 167 // Tail Whip
+#define SE_W054 168 // Mist
+#define SE_W077 169 // PoisonPowder
+#define SE_W020 170 // Bind
+#define SE_W082 171 // Dragon Rage
+#define SE_W047 172 // Sing
+#define SE_W195 173 // Perish Song
+#define SE_W006 174 // Pay Day
+#define SE_W091 175 // Dig
+#define SE_W146 176 // Dizzy Punch
+#define SE_W120 177 // Self-Destruct
+#define SE_W153 178 // Explosion
+#define SE_W071B 179 // Absorb 2
+#define SE_W071 180 // Absorb
+#define SE_W103 181 // Screech
+#define SE_W062 182 // BubbleBeam
+#define SE_W062B 183 // BubbleBeam 2
+#define SE_W048 184 // Supersonic
+#define SE_W187 185 // Belly Drum
+#define SE_W118 186 // Metronome
+#define SE_W155 187 // Bonemerang
+#define SE_W122 188 // Lick
+#define SE_W060 189 // Psybeam
+#define SE_W185 190 // Faint Attack
+#define SE_W014 191 // Swords Dance
+#define SE_W043 192 // Leer
+#define SE_W207 193 // Swagger
+#define SE_W207B 194 // Swagger 2
+#define SE_W215 195 // Heal Bell
+#define SE_W109 196 // Confuse Ray
+#define SE_W173 197 // Snore
+#define SE_W280 198 // Brick Break
+#define SE_W202 199 // Giga Drain
+#define SE_W060B 200 // Psybeam 2
+#define SE_W076 201 // SolarBeam
+#define SE_W080 202 // Petal Dance
+#define SE_W100 203 // Teleport
+#define SE_W107 204 // Minimize
+#define SE_W166 205 // Sketch
+#define SE_W129 206 // Swift
+#define SE_W115 207 // Reflect
+#define SE_W112 208 // Barrier
+#define SE_W197 209 // Detect
+#define SE_W199 210 // Lock-On
+#define SE_W236 211 // Moonlight
+#define SE_W204 212 // Charm
+#define SE_W268 213 // Charge
+#define SE_W070 214 // Strength
+#define SE_W063 215 // Hyper Beam
+#define SE_W127 216 // Waterfall
+#define SE_W179 217 // Reversal
+#define SE_W151 218 // Acid Armor
+#define SE_W201 219 // Sandstorm
+#define SE_W161 220 // Tri-Attack
+#define SE_W161B 221 // Tri-Attack 2
+#define SE_W227 222 // Encore
+#define SE_W227B 223 // Encore 2
+#define SE_W226 224 // Baton Pass
+#define SE_W208 225 // Milk Drink
+#define SE_W213 226 // Attract
+#define SE_W213B 227 // Attract 2
+#define SE_W234 228 // Morning Sun
+#define SE_W260 229 // Flatter
+#define SE_W328 230 // Sand Tomb
+#define SE_W320 231 // GrassWhistle
+#define SE_W255 232 // Spit Up
+#define SE_W291 233 // Dive
+#define SE_W089 234 // Earthquake
+#define SE_W239 235 // Twister
+#define SE_W230 236 // Sweet Scent
+#define SE_W281 237 // Yawn
+#define SE_W327 238 // Sky Uppercut
+#define SE_W287 239 // Stat Increased
+#define SE_W257 240 // Heat Wave
+#define SE_W253 241 // Uproar
+#define SE_W258 242 // Hail
+#define SE_W322 243 // Cosmic Power
+#define SE_W298 244 // Teeter Dance
+#define SE_W287B 245 // Stat Decreased
+#define SE_W114 246 // Haze
+#define SE_W063B 247 // Hyper Beam 2
#define BGM_STOP 349
-#define BGM_TETSUJI 350
-#define BGM_FIELD13 351
-#define BGM_KACHI22 352
-#define BGM_KACHI2 353
-#define BGM_KACHI3 354
-#define BGM_KACHI5 355
-#define BGM_PCC 356
-#define BGM_NIBI 357
-#define BGM_SUIKUN 358
-#define BGM_DOORO1 359
-#define BGM_DOORO_X1 360
-#define BGM_DOORO_X3 361
-#define BGM_MACHI_S2 362
-#define BGM_MACHI_S4 363
-#define BGM_GIM 364
-#define BGM_NAMINORI 365
-#define BGM_DAN01 366
-#define BGM_FANFA1 367
-#define BGM_ME_ASA 368
-#define BGM_ME_BACHI 369
-#define BGM_FANFA4 370
-#define BGM_FANFA5 371
-#define BGM_ME_WAZA 372
-#define BGM_BIJYUTU 373
-#define BGM_DOORO_X4 374
-#define BGM_FUNE_KAN 375
-#define BGM_ME_SHINKA 376
-#define BGM_SHINKA 377
-#define BGM_ME_WASURE 378
-#define BGM_SYOUJOEYE 379
-#define BGM_BOYEYE 380
-#define BGM_DAN02 381
-#define BGM_MACHI_S3 382
-#define BGM_ODAMAKI 383
-#define BGM_B_TOWER 384
-#define BGM_SWIMEYE 385
-#define BGM_DAN03 386
-#define BGM_ME_KINOMI 387
-#define BGM_ME_TAMA 388
-#define BGM_ME_B_BIG 389
-#define BGM_ME_B_SMALL 390
-#define BGM_ME_ZANNEN 391
-#define BGM_BD_TIME 392
-#define BGM_TEST1 393
-#define BGM_TEST2 394
-#define BGM_TEST3 395
-#define BGM_TEST4 396
-#define BGM_TEST 397
-#define BGM_GOMACHI0 398
-#define BGM_GOTOWN 399
-#define BGM_POKECEN 400
-#define BGM_NEXTROAD 401
-#define BGM_GRANROAD 402
-#define BGM_CYCLING 403
-#define BGM_FRIENDLY 404
-#define BGM_MISHIRO 405
-#define BGM_TOZAN 406
-#define BGM_GIRLEYE 407
-#define BGM_MINAMO 408
-#define BGM_ASHROAD 409
-#define BGM_EVENT0 410
-#define BGM_DEEPDEEP 411
-#define BGM_KACHI1 412
-#define BGM_TITLE3 413
-#define BGM_DEMO1 414
-#define BGM_GIRL_SUP 415
-#define BGM_HAGESHII 416
-#define BGM_KAKKOII 417
-#define BGM_KAZANBAI 418
-#define BGM_AQA_0 419
-#define BGM_TSURETEK 420
-#define BGM_BOY_SUP 421
-#define BGM_RAINBOW 422
-#define BGM_AYASII 423
-#define BGM_KACHI4 424
-#define BGM_ROPEWAY 425
-#define BGM_CASINO 426
-#define BGM_HIGHTOWN 427
-#define BGM_SAFARI 428
-#define BGM_C_ROAD 429
-#define BGM_AJITO 430
-#define BGM_M_BOAT 431
-#define BGM_M_DUNGON 432
-#define BGM_FINECITY 433
-#define BGM_MACHUPI 434
-#define BGM_P_SCHOOL 435
-#define BGM_DENDOU 436
-#define BGM_TONEKUSA 437
-#define BGM_MABOROSI 438
-#define BGM_CON_FAN 439
-#define BGM_CONTEST0 440
-#define BGM_MGM0 441
-#define BGM_T_BATTLE 442
-#define BGM_OOAME 443
-#define BGM_HIDERI 444
-#define BGM_RUNECITY 445
-#define BGM_CON_K 446
-#define BGM_EIKOU_R 447
-#define BGM_KARAKURI 448
-#define BGM_HUTAGO 449
-#define BGM_SITENNOU 450
-#define BGM_YAMA_EYE 451
-#define BGM_CONLOBBY 452
-#define BGM_INTER_V 453
-#define BGM_DAIGO 454
-#define BGM_THANKFOR 455
-#define BGM_END 456
-#define BGM_BATTLE27 457
-#define BGM_BATTLE31 458
-#define BGM_BATTLE20 459
-#define BGM_BATTLE32 460
-#define BGM_BATTLE33 461
-#define BGM_BATTLE36 462
-#define BGM_BATTLE34 463
-#define BGM_BATTLE35 464
-#define BGM_BATTLE38 465
-#define BGM_BATTLE30 466
+#define BGM_TETSUJI 350 // Littleroot Town Test 'TETSUJI'
+#define BGM_FIELD13 351 // GSC - Route 38
+#define BGM_KACHI22 352 // Wild Pokémon Defeated
+#define BGM_KACHI2 353 // Wild Pokémon Defeated with Intro
+#define BGM_KACHI3 354 // Gym Leader Defeated
+#define BGM_KACHI5 355 // Victory! Elite Four
+#define BGM_PCC 356 // Crystal - Pokémon Communication Center
+#define BGM_NIBI 357 // GSC - Viridian/Saffron/Pewter/etc
+#define BGM_SUIKUN 358 // Crystal - Battle! Legendary Beasts
+#define BGM_DOORO1 359 // Route 101
+#define BGM_DOORO_X1 360 // Route 110
+#define BGM_DOORO_X3 361 // Route 120
+#define BGM_MACHI_S2 362 // Petalburg City
+#define BGM_MACHI_S4 363 // Oldale Town
+#define BGM_GIM 364 // Gym
+#define BGM_NAMINORI 365 // Surfing
+#define BGM_DAN01 366 // Caves and Darkness
+#define BGM_FANFA1 367 // Level Up!
+#define BGM_ME_ASA 368 // Pokémon Healed
+#define BGM_ME_BACHI 369 // Obtained a Badge!
+#define BGM_FANFA4 370 // Obtained an Item!
+#define BGM_FANFA5 371 // Your Pokémon Just Evolved!
+#define BGM_ME_WAZA 372 // Obtained a TM/HM!
+#define BGM_BIJYUTU 373 // Lilycove Musseum
+#define BGM_DOORO_X4 374 // Route 122/Intro
+#define BGM_FUNE_KAN 375 // Slateport Museum
+#define BGM_ME_SHINKA 376 // Evolution Intro
+#define BGM_SHINKA 377 // Evolution
+#define BGM_ME_WASURE 378 // Move Deleted
+#define BGM_SYOUJOEYE 379 // Encounter! Tuber
+#define BGM_BOYEYE 380 // Encounter! Boy
+#define BGM_DAN02 381 // Abandoned Ship
+#define BGM_MACHI_S3 382 // Fortree City
+#define BGM_ODAMAKI 383 // Professor Birch's Lab
+#define BGM_B_TOWER 384 // Battle Tower (RS)
+#define BGM_SWIMEYE 385 // Encounter! Swimmer
+#define BGM_DAN03 386 // Meteor Falls
+#define BGM_ME_KINOMI 387 // Obtained a Berry!
+#define BGM_ME_TAMA 388 // Awakening the Super-Ancient Pokémon
+#define BGM_ME_B_BIG 389 // Slots Jackpot!
+#define BGM_ME_B_SMALL 390 // Slots Victory!
+#define BGM_ME_ZANNEN 391 // Too bad!
+#define BGM_BD_TIME 392 // Roulette!
+#define BGM_TEST1 393 // Contest Test 1
+#define BGM_TEST2 394 // Contest Test 2
+#define BGM_TEST3 395 // Contest Test 3
+#define BGM_TEST4 396 // Contest Test 4
+#define BGM_TEST 397 // Encounter! Gentleman (Test?)
+#define BGM_GOMACHI0 398 // Verdanturf Town
+#define BGM_GOTOWN 399 // Rustboro City
+#define BGM_POKECEN 400 // Pokémon Center
+#define BGM_NEXTROAD 401 // Route 104
+#define BGM_GRANROAD 402 // Route 119
+#define BGM_CYCLING 403 // Cycling
+#define BGM_FRIENDLY 404 // Pokémart
+#define BGM_MISHIRO 405 // Littleroot Town
+#define BGM_TOZAN 406 // Sky Pillar
+#define BGM_GIRLEYE 407 // Encounter! Girl
+#define BGM_MINAMO 408 // Lilycove City
+#define BGM_ASHROAD 409 // Route 111
+#define BGM_EVENT0 410 // Help me!
+#define BGM_DEEPDEEP 411 // Underwater
+#define BGM_KACHI1 412 // Victory! Trainer
+#define BGM_TITLE3 413 // Title Screen
+#define BGM_DEMO1 414 // Opening Movie
+#define BGM_GIRL_SUP 415 // Encounter! May
+#define BGM_HAGESHII 416 // Encounter! Biker
+#define BGM_KAKKOII 417 // Encounter! Electric Trainer
+#define BGM_KAZANBAI 418 // Route 113
+#define BGM_AQA_0 419 // Encounter! Team Aqua
+#define BGM_TSURETEK 420 // Follow Me!
+#define BGM_BOY_SUP 421 // Encounter! Brendan
+#define BGM_RAINBOW 422 // Ever Grande City
+#define BGM_AYASII 423 // Encounter! Psychic
+#define BGM_KACHI4 424 // Victory! Aqua/Magma Grunt
+#define BGM_ROPEWAY 425 // Cable Car
+#define BGM_CASINO 426 // Game Corner
+#define BGM_HIGHTOWN 427 // Dewford Town
+#define BGM_SAFARI 428 // Safari Zone
+#define BGM_C_ROAD 429 // Victory Toad
+#define BGM_AJITO 430 // Aqua/Magma Hideout
+#define BGM_M_BOAT 431 // Sailing
+#define BGM_M_DUNGON 432 // Mt. Pyre (Inside)
+#define BGM_FINECITY 433 // Slateport City
+#define BGM_MACHUPI 434 // Mt. Pyre (Outside)
+#define BGM_P_SCHOOL 435 // Pokémon Trainer's School
+#define BGM_DENDOU 436 // Hall of Fame
+#define BGM_TONEKUSA 437 // Lavaridge Town
+#define BGM_MABOROSI 438 // Sealed Chamber
+#define BGM_CON_FAN 439 // You are the Champion!
+#define BGM_CONTEST0 440 // Pokémon Contest
+#define BGM_MGM0 441 // Encounter! Team Magma
+#define BGM_T_BATTLE 442 // Opening Battle
+#define BGM_OOAME 443 // The Flood
+#define BGM_HIDERI 444 // The Drought
+#define BGM_RUNECITY 445 // Sootopolis City
+#define BGM_CON_K 446 // Berry Blending Results
+#define BGM_EIKOU_R 447 // Hall of Fame
+#define BGM_KARAKURI 448 // Trick House
+#define BGM_HUTAGO 449 // Encounter! Kid
+#define BGM_SITENNOU 450 // Encounter! Elite Four
+#define BGM_YAMA_EYE 451 // Encounter! Hiker
+#define BGM_CONLOBBY 452 // Contest Lobby
+#define BGM_INTER_V 453 // Encounter! Gabby and Ty
+#define BGM_DAIGO 454 // Encounter! Wallace
+#define BGM_THANKFOR 455 // Credits
+#define BGM_END 456 // The End
+#define BGM_BATTLE27 457 // Battle! Wild Pokémon
+#define BGM_BATTLE31 458 // Battle! Team Aqua/Magma
+#define BGM_BATTLE20 459 // Battle! Trainer
+#define BGM_BATTLE32 460 // Battle! Gym Leader
+#define BGM_BATTLE33 461 // Battle! Champion
+#define BGM_BATTLE36 462 // Battle! Regi Trio
+#define BGM_BATTLE34 463 // Battle! Legendary Pokémon
+#define BGM_BATTLE35 464 // Battle! Rival
+#define BGM_BATTLE38 465 // Battle! Elite Four
+#define BGM_BATTLE30 466 // Battle! Archie/Maxie
#define BGM_ROUTE_118 0x7FFF // What is this for?
diff --git a/include/constants/weather.h b/include/constants/weather.h
index 946316984..1110be7a2 100644
--- a/include/constants/weather.h
+++ b/include/constants/weather.h
@@ -12,7 +12,7 @@
#define WEATHER_SANDSTORM 8
#define WEATHER_FOG_2 9
#define WEATHER_FOG_3 10
-#define WEATHER_DARK 11
+#define WEATHER_SHADE 11
#define WEATHER_DROUGHT 12
#define WEATHER_RAIN_HEAVY 13
#define WEATHER_BUBBLES 14
@@ -31,7 +31,7 @@
#define COORD_EVENT_WEATHER_FOG_2 7
#define COORD_EVENT_WEATHER_ASH 8
#define COORD_EVENT_WEATHER_SANDSTORM 9
-#define COORD_EVENT_WEATHER_DARK 10
+#define COORD_EVENT_WEATHER_SHADE 10
#define COORD_EVENT_WEATHER_DROUGHT 11
#define COORD_EVENT_WEATHER_ROUTE119_CYCLE 20
#define COORD_EVENT_WEATHER_ROUTE123_CYCLE 21
diff --git a/include/contest_ai.h b/include/contest_ai.h
index da143b541..da143b541 100755..100644
--- a/include/contest_ai.h
+++ b/include/contest_ai.h
diff --git a/include/decoration.h b/include/decoration.h
index 4ac26998e..d7f26bd05 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -146,7 +146,6 @@ extern const struct YesNoFuncTable gUnknown_083EC634[];
extern const u8 gUnknown_083EC65A[];
extern const u8 gUnknown_083EC97C[];
extern const u8 gUnknown_083EC984[];
-extern void sub_80B3068(u8); // src/shop
extern const struct YesNoFuncTable gUnknown_083EC95C;
extern const struct YesNoFuncTable gUnknown_083EC964;
extern const struct YesNoFuncTable gUnknown_083EC9CC;
diff --git a/include/easy_chat.h b/include/easy_chat.h
index c68a3fa02..58750fa92 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -114,8 +114,6 @@ struct Shared1000
u8 unk9F8E[7]; // unknown length
};
-extern u8 gUnknown_020388AC;
-
// const pointer to shared1000. easy_chat might be two separate files.
extern struct Shared1000 *const gEasyChatStruct;
diff --git a/include/ewram.h b/include/ewram.h
index 23812cc4f..ba376440e 100755..100644
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -8,8 +8,8 @@ extern u8 gSharedMem[];
// regions overlap others but have different definitions. Until some
// dupes can be determined to be the same, they will be deliberate
// seperated.
-#define eWeatherPaletteData (*(struct WeatherPaletteData *)gSharedMem)
-#define BATTLE_STRUCT ((struct BattleStruct *) (gSharedMem + 0x0))
+#define eDroughtPaletteData (*(struct WeatherPaletteData *)gSharedMem)
+#define gBattleStruct ((struct BattleStruct *) (gSharedMem + 0x0))
#define ewram0_2 (*(struct Struct2000000 *)(gSharedMem + 0x0))
#define namingScreenData (*(struct NamingScreenData *)(gSharedMem + 0x0))
#define ewramBerryPic (gSharedMem + 0x0)
diff --git a/include/field_effect.h b/include/field_effect.h
index bb859074f..4d0e90767 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -103,7 +103,6 @@ void FieldEffectActiveListClear(void);
void FieldEffectActiveListAdd(u8 id);
void FieldEffectActiveListRemove(u8 id);
bool8 FieldEffectActiveListContains(u8 id);
-void sub_807DE38(u8 index);
void SpriteCB_PokeballGlow(struct Sprite *);
void SpriteCB_PokecenterMonitor(struct Sprite *);
diff --git a/include/field_weather.h b/include/field_weather.h
index 267650a2a..0bdebf747 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -1,7 +1,15 @@
#ifndef GUARD_WEATHER_H
#define GUARD_WEATHER_H
-struct Sprite;
+#include "sprite.h"
+
+// Controls how the weather should be changing the screen palettes.
+enum {
+ WEATHER_PAL_STATE_CHANGING_WEATHER,
+ WEATHER_PAL_STATE_SCREEN_FADING_IN,
+ WEATHER_PAL_STATE_SCREEN_FADING_OUT,
+ WEATHER_PAL_STATE_IDLE,
+};
struct Weather
{
@@ -23,21 +31,17 @@ struct Weather
struct Sprite *sandstormSprites2[5];
} s2;
} sprites;
- u8 unknown_200[2][32];
- u8 filler_240[0x460-0x240];
- u8 unk460[2][32];
- u8 filler4A0[0x6B6-0x4A0];
- s8 unknown_6B6;
- u8 filler_6B7[0xC0-0xB7];
- s8 unknown_6C0;
- s8 unknown_6C1;
- u8 unknown_6C2;
- u8 unknown_6C3;
- u16 unknown_6C4;
- u8 unknown_6C6;
- u8 unknown_6C7;
- u8 unknown_6C8;
- u8 unknown_6C9;
+ u8 gammaShifts[19][32];
+ u8 altGammaShifts[19][32];
+ s8 gammaIndex;
+ s8 gammaTargetIndex;
+ u8 gammaStepDelay;
+ u8 gammaStepFrameCounter;
+ u16 fadeDestColor;
+ u8 palProcessingState;
+ u8 fadeScreenCounter;
+ bool8 readyForInit;
+ u8 taskId;
u8 unknown_6CA;
u8 unknown_6CB;
u16 initStep;
@@ -45,9 +49,9 @@ struct Weather
u8 currWeather;
u8 nextWeather;
u8 weatherGfxLoaded;
- u8 unknown_6D3;
- u8 unknown_6D4;
- u8 unknown_6D5;
+ bool8 weatherChangeComplete;
+ u8 weatherPicSpritePalIndex;
+ u8 altGammaSpritePalIndex;
u16 unknown_6D6;
u8 unknown_6D8;
u8 unknown_6D9;
@@ -70,8 +74,8 @@ struct Weather
u16 fog1ScrollPosX;
u16 unknown_6F0;
u16 unknown_6F2;
- u8 unknown_6F4[6];
- u8 unknown_6FA;
+ u8 lightenedFogSpritePals[6];
+ u8 lightenedFogSpritePalsCount;
u8 fog1SpritesCreated;
u16 unknown_6FC;
u16 unknown_6FE;
@@ -104,8 +108,8 @@ struct Weather
u16 currBlendEVB;
u16 targetBlendEVA;
u16 targetBlendEVB;
- u8 unknown_738;
- u8 unknown_739;
+ u8 blendUpdateCounter;
+ u8 blendFrameCounter;
u8 blendDelay;
u8 filler_73B[0x3C-0x3B];
s16 unknown_73C;
@@ -113,42 +117,35 @@ struct Weather
s16 unknown_740;
s16 unknown_742;
u8 filler_744[0xD-4];
- s8 unknown_74D;
- u8 unknown_74E;
+ s8 loadDroughtPalsIndex;
+ u8 loadDroughtPalsOffset;
};
void StartWeather(void);
-void DoWeatherEffect(u8 effect);
+void ChangeWeather(u8 weather);
void sub_807C988(u8 effect);
void sub_807C9B4(u8 effect);
void Task_WeatherInit(u8);
void Task_WeatherMain(u8);
void sub_807CAE8(void);
void nullsub_38(void);
-void sub_807CB10(void);
-void sub_807CC24(void);
-void sub_807CCAC(void);
-u8 sub_807CDC4(void);
-u8 sub_807CE24(void);
-u8 sub_807CE7C(void);
-void nullsub_39(void);
+void SetWeatherScreenFadeOut(void);
-// ASM
-void sub_807CEBC(u8, u8, s8);
-//void sub_807D1BC(u8, u8, u8, u8, u16);
-void sub_807D1BC(u8 a, u8 a2, s8 c, u8 d, u16 e);
-void sub_807D304(s8 a, u8 arg2, u16 c);
-void sub_807D424(u8, u16);
-// ...
-void fade_screen(u8, u8);
+enum
+{
+ FADE_FROM_BLACK,
+ FADE_TO_BLACK,
+ FADE_FROM_WHITE,
+ FADE_TO_WHITE,
+};
+
+void FadeScreen(u8, u8);
// ...
-void sub_807D78C(u8 tag);
-void sub_807D874(u8);
+void UpdateSpritePaletteWithWeather(u8 tag);
+void ApplyWeatherGammaShiftToPal(u8);
// ...
void Weather_SetBlendCoeffs(u8, u8);
// ...
-void sub_807DE68(void);
-// ...
void PlayRainSoundEffect(void);
// ...
void SetSav1Weather(u32);
@@ -158,10 +155,18 @@ void SetSav1WeatherFromCurrMapHeader(void);
void DoCurrentWeather(void);
void sub_8080750();
-bool8 sub_807D770(void);
-bool8 sub_807DDFC(void);
+bool8 IsWeatherNotFadingIn(void);
+bool8 IsWeatherChangeComplete(void);
void SetWeather(u32);
void UpdateWeatherPerDay(u16);
+void PreservePaletteInWeather(u8 index);
+void ResetPreservedPalettesInWeather(void);
+extern void ResetDroughtWeatherPaletteLoading(void);
+void ResetDroughtWeatherPaletteLoading(void);
+bool8 LoadDroughtWeatherPalettes(void);
+u8 GetCurrentWeather(void);
+void LoadCustomWeatherSpritePalette(const u16 *palette);
+
extern struct Weather gWeather;
diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h
index c5eb456c3..c5eb456c3 100755..100644
--- a/include/gba/isagbprint.h
+++ b/include/gba/isagbprint.h
diff --git a/include/gba/macro.h b/include/gba/macro.h
index 59b22758e..ab42c9da3 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -167,4 +167,57 @@
#define DmaFill16Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 16)
#define DmaFill32Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 32)
+// from pokeemerald
+// Maximum amount of data we will transfer in one operation
+#define MAX_DMA_BLOCK_SIZE 0x1000
+
+#define MAX_DMA_REQUESTS 128
+
+#define DMA_REQUEST_COPY32 1
+#define DMA_REQUEST_FILL32 2
+#define DMA_REQUEST_COPY16 3
+#define DMA_REQUEST_FILL16 4
+
+#define Dma3CopyLarge_(src, dest, size, bit) \
+{ \
+ const void *_src = src; \
+ void *_dest = dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ if (_size <= MAX_DMA_BLOCK_SIZE) \
+ { \
+ DmaCopy##bit(3, _src, _dest, _size); \
+ break; \
+ } \
+ DmaCopy##bit(3, _src, _dest, MAX_DMA_BLOCK_SIZE); \
+ _src += MAX_DMA_BLOCK_SIZE; \
+ _dest += MAX_DMA_BLOCK_SIZE; \
+ _size -= MAX_DMA_BLOCK_SIZE; \
+ } \
+}
+
+#define Dma3CopyLarge16_(src, dest, size) Dma3CopyLarge_(src, dest, size, 16)
+#define Dma3CopyLarge32_(src, dest, size) Dma3CopyLarge_(src, dest, size, 32)
+
+#define Dma3FillLarge_(value, dest, size, bit) \
+{ \
+ void *_dest = dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ if (_size <= MAX_DMA_BLOCK_SIZE) \
+ { \
+ DmaFill##bit(3, value, _dest, _size); \
+ break; \
+ } \
+ DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \
+ _dest += MAX_DMA_BLOCK_SIZE; \
+ _size -= MAX_DMA_BLOCK_SIZE; \
+ } \
+}
+
+#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16)
+#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32)
+
#endif // GUARD_GBA_MACRO_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index a828cf131..30047c677 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -101,8 +101,7 @@ struct WarpEvent
struct CoordEvent
{
s16 x, y;
- u8 unk4;
- u8 filler_5;
+ u8 elevation;
u16 trigger;
u16 index;
u8 filler_A[0x2];
diff --git a/include/item_menu.h b/include/item_menu.h
index 29618f347..726d36789 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -27,7 +27,7 @@ void CleanUpItemMenuMessage(u8);
void CleanUpOverworldMessage(u8);
void ExecuteItemUseFromBlackPalette(void);
void sub_80A5D04(void);
-void sub_80A6300(void);
+void ItemMenu_LoadSellMenu(void);
void sub_80A68CC();
void sub_80A6A30(void);
bool32 sub_80A6D1C(void);
diff --git a/include/matsuda_debug_menu.h b/include/matsuda_debug_menu.h
index 60f2dc48c..ad877a014 100644
--- a/include/matsuda_debug_menu.h
+++ b/include/matsuda_debug_menu.h
@@ -3,7 +3,6 @@
#define BIT(n) (1 << (n))
-void sub_80AB184(void);
void sub_80AA280(u8);
void sub_80AA5E8(u8);
void sub_80AA658(u8);
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 993d698bd..a1c872c73 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -9,7 +9,22 @@ struct YesNoFuncTable
void (*noFunc)(u8);
};
-void sub_80F9020(void);
+// SetVerticalScrollIndicators enums
+enum
+{
+ TOP_ARROW,
+ BOTTOM_ARROW,
+ LEFT_ARROW, // Bag arrows
+ RIGHT_ARROW
+};
+
+enum
+{
+ VISIBLE,
+ INVISIBLE
+};
+
+void ClearBGTilemapBuffers(void);
void DisplayItemMessageOnField(u8, const u8 *, TaskFunc, u16);
void DoYesNoFuncWithChoice(u8, const struct YesNoFuncTable *);
void sub_80F914C(u8, const struct YesNoFuncTable *);
@@ -19,21 +34,21 @@ bool8 sub_80F92F4(u16);
bool8 sub_80F931C(u16);
bool8 sub_80F9344(void);
void sub_80F9368(void);
-void sub_80F9438(void);
-void sub_80F944C(void);
+void ClearVideoCallbacks(void);
+void ClearVerticalScrollIndicatorPalettes(void);
void sub_80F9480(u8 *, u8);
void sub_80F94A4(u8, u8 *, s16, s16);
void sub_80F94F8(u8 *);
void sub_80F9520(u8 *, u8);
void CreateVerticalScrollIndicators(u8, u16, u16);
-void sub_80F979C(u8, bool8);
+void SetVerticalScrollIndicators(u8, bool8);
void DestroyVerticalScrollIndicator(u8);
void LoadScrollIndicatorPalette(void);
void BuyMenuFreeMemory(void);
-void sub_80F98A4(u8);
+void StopVerticalScrollIndicators(u8);
void StartVerticalScrollIndicators(u8);
void sub_80F98DC(u8);
void PauseVerticalScrollIndicator(u8);
-void sub_80F9988(u8, u8);
+void SetVerticalScrollIndicatorPriority(u8, u8);
#endif // GUARD_MENU_HELPERS_H
diff --git a/include/money.h b/include/money.h
index 9f4ef71bc..e3a3f898d 100644
--- a/include/money.h
+++ b/include/money.h
@@ -7,7 +7,7 @@ void RemoveMoney(u32 *, u32);
void GetMoneyAmountText(u8 *buffer, u32 arg1, u8 arg2);
void PrintMoneyAmount(u32 arg0, u8 arg1, u8 x, u8 y);
void sub_80B7AEC(u32, u8 left, u8 top);
-void sub_80B7B34(u8, u8, int);
+void Draw10000Sprite(u8, u8, int);
void UpdateMoneyWindow(u32, u8, u8);
void OpenMoneyWindow(u32, u8, u8);
void CloseMoneyWindow(u8, u8);
diff --git a/include/pokedex.h b/include/pokedex.h
index d8416889a..73877bead 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -23,6 +23,6 @@ s8 GetSetPokedexFlag(u16, u8);
u16 GetNationalPokedexCount(u8);
u16 GetHoennPokedexCount(u8);
bool8 CompletedHoennPokedex(void);
-u16 sub_8090FF4(void);
+bool16 CompletedNationalPokedex(void);
#endif // GUARD_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 47d6bcfc7..169045c0c 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -258,7 +258,6 @@ struct BoxPokemon
/*0x13*/ u8 isBadEgg:1;
u8 hasSpecies:1;
u8 isEgg:1;
- u8 unused:5;
/*0x14*/ u8 otName[OT_NAME_LENGTH];
/*0x1B*/ u8 markings;
/*0x1C*/ u16 checksum;
@@ -351,6 +350,8 @@ struct BattlePokemon
/*0x54*/ u32 otId;
};
+// Shouldn't these be the same enum?
+
enum
{
STAT_STAGE_HP, // 0
@@ -417,7 +418,6 @@ struct BattleMove
u8 target;
s8 priority;
u8 flags;
- u8 pad[3];
};
#define FLAG_MAKES_CONTACT 0x1
@@ -629,4 +629,6 @@ void PartySpreadPokerus(struct Pokemon *party);
struct Sprite *sub_80F7920(u16, u16, const u16 *);
void BoxMonRestorePP(struct BoxPokemon *);
+bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId);
+
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_item_effect.h b/include/pokemon_item_effect.h
index c09649aff..014612b05 100644
--- a/include/pokemon_item_effect.h
+++ b/include/pokemon_item_effect.h
@@ -1,6 +1,6 @@
#ifndef GUARD_POKEMON_ITEM_EFFECT_H
#define GUARD_POKEMON_ITEM_EFFECT_H
-bool8 ExecuteTableBasedItemEffect_(struct Pokemon *mon, u16, u8, u16);
+bool8 ExecuteTableBasedItemEffect_(struct Pokemon *mon, u16, u8, u8);
#endif // GUARD_POKEMON_ITEM_EFFECT_H
diff --git a/include/region_map_sections.h b/include/region_map_sections.h
index a3bd60b59..a3bd60b59 100755..100644
--- a/include/region_map_sections.h
+++ b/include/region_map_sections.h
diff --git a/include/shop.h b/include/shop.h
index b785ca764..80602e26c 100644
--- a/include/shop.h
+++ b/include/shop.h
@@ -17,6 +17,14 @@ enum
ANIM_NUM
};
+// shop options
+enum
+{
+ SHOP_BUY,
+ SHOP_SELL,
+ SHOP_EXIT
+};
+
struct MartInfo
{
/* 0x0 */ void (* callback) (void);
@@ -29,20 +37,9 @@ struct MartInfo
/* 0xD */ u8 curItemCount; // if you are selling an item, this is the count of the current item stack you have.
};
-void sub_80B2E38(u8);
-void HandleShopMenuQuit(u8);
-void sub_80B2FA0(u8);
-void BuyMenuDrawGraphics(void);
-void sub_80B3240(void);
-void sub_80B3270(void);
-void BuyMenuDrawMapGraphics(void);
-void sub_80B3764(int, int);
-void sub_80B37EC(void);
-void sub_80B40E8(u8);
-void CreatePokemartMenu(u16 *);
-void CreateDecorationShop1Menu(u16 *);
-void CreateDecorationShop2Menu(u16 *);
-void sub_80B356C(void);
-void sub_80B368C(void);
+void Shop_CreatePokemartMenu(u16 *);
+void Shop_CreateDecorationShop1Menu(u16 *);
+void Shop_CreateDecorationShop2Menu(u16 *);
+void Shop_RunExitSellMenuTask(u8 taskId);
#endif // GUARD_SHOP_H
diff --git a/ld_script.sed b/ld_script.sed
deleted file mode 100644
index b91542b6f..000000000
--- a/ld_script.sed
+++ /dev/null
@@ -1,14 +0,0 @@
-/<EWRAM>/ {
- r sym_ewram.ld
- d
-}
-
-/<BSS>/ {
- r sym_bss.ld
- d
-}
-
-/<COMMON>/ {
- r sym_common.ld
- d
-}
diff --git a/ld_script.txt b/ld_script.txt
index d925d5c14..4931842d9 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -9,7 +9,7 @@ SECTIONS {
ewram (NOLOAD) :
ALIGN(4)
{
-<EWRAM>
+ INCLUDE "sym_ewram.ld"
. = 0x40000;
}
@@ -20,13 +20,13 @@ SECTIONS {
ALIGN(4)
{
/* .bss starts at 0x3000000 */
-<BSS>
+ INCLUDE "sym_bss.ld"
/* .bss.code starts at 0x3000F60 */
src/libs/m4a_2.o(.bss.code);
/* COMMON starts at 0x3001760 */
-<COMMON>
+ INCLUDE "sym_common.ld"
tools/agbcc/lib/libc.a:sbrkr.o(COMMON);
end = .;
. = 0x8000;
@@ -61,7 +61,7 @@ SECTIONS {
src/pokemon/pokemon_1.o(.text);
src/battle/calculate_base_damage.o(.text);
src/pokemon/pokemon_2.o(.text);
- asm/pokemon_item_effect.o(.text);
+ src/pokemon/pokemon_item_effect.o(.text);
src/pokemon/pokemon_3.o(.text);
src/de_rom_8040FE0.o(.text);
src/engine/trig.o(.text);
@@ -144,8 +144,10 @@ SECTIONS {
src/battle/battle_anim_80A7E7C.o(.text);
src/field/item.o(.text);
src/debug/matsuda_debug_menu.o(.text);
+ src/debug/crash.o(.text);
src/contest.o(.text);
src/field/shop.o(.text);
+ src/field/fldeff_escalator.o(.text);
src/field/berry.o(.text);
src/field/script_menu.o(.text);
src/engine/naming_screen.o(.text);
@@ -483,10 +485,12 @@ SECTIONS {
src/engine/link.o(.rodata);
src/engine/rtc.o(.rodata);
src/engine/main_menu.o(.rodata);
- data/data2a.o(.rodata);
+ data/mon_attrs.o(.rodata);
+ data/btl_attrs.o(.rodata);
src/battle/battle_4.o(.rodata);
src/battle/battle_controller_player.o(.rodata);
- data/data2b.o(.rodata);
+ data/smokescreen.o(.rodata); /* why is smokescreen rodata way up here and not in the correct location? */
+ data/battle_7.o(.rodata);
src/battle/battle_controller_opponent.o(.rodata);
src/battle/battle_controller_linkopponent.o(.rodata);
data/battle_moves.o(.rodata);
@@ -532,7 +536,12 @@ SECTIONS {
src/battle/battle_anim.o(.rodata);
src/rom_8077ABC.o(.rodata);
data/map_events.o(.rodata);
- data/data_8393054.o(.rodata);
+ data/unused_orb.o(.rodata); /* these files are clearly the rodata for latter part of rom_8077ABC, but the linker linked map_events before these objects for some reason. perhaps it was compiling and linking 2 folders at the same time? */
+ data/gray_sun.o(.rodata);
+ data/sparkle.o(.rodata);
+ data/unused_paw.o(.rodata);
+ data/unused_hit.o(.rodata);
+ data/unused_orb2.o(.rodata);
src/engine/task.o(.rodata);
src/battle/battle_anim_807B69C.o(.rodata);
src/scene/title_screen.o(.rodata);
@@ -565,6 +574,7 @@ SECTIONS {
src/debug/matsuda_debug_menu.o(.rodata);
data/contest.o(.rodata);
src/field/shop.o(.rodata);
+ src/field/fldeff_escalator.o(.rodata);
src/field/berry.o(.rodata);
src/field/script_menu.o(.rodata);
src/engine/naming_screen.o(.rodata);
diff --git a/sound/song_table.inc b/sound/song_table.inc
index ac2e3b494..d2aa7d327 100644
--- a/sound/song_table.inc
+++ b/sound/song_table.inc
@@ -1,253 +1,253 @@
.align 2
gSongTable:: @ 845548C
song se_stop, 0, 0
- song se_kaifuku, 1, 1
- song se_pc_logon, 1, 1
- song se_pc_off, 1, 1
- song se_pc_on, 1, 1
- song se_select, 2, 2
- song se_win_open, 1, 1
- song se_wall_hit, 2, 2
- song se_door, 1, 1
- song se_kaidan, 1, 1
- song se_dansa, 1, 1
- song se_jitensya, 1, 1
- song se_kouka_l, 1, 1
- song se_kouka_m, 1, 1
- song se_kouka_h, 1, 1
- song se_bowa2, 1, 1
- song se_poke_dead, 1, 1
- song se_nigeru, 1, 1
- song se_jido_doa, 1, 1
- song se_naminori, 1, 1
- song se_ban, 1, 1
- song se_pin, 1, 1
- song se_boo, 1, 1
- song se_bowa, 1, 1
- song se_jyuni, 2, 2
- song se_a, 1, 1
- song se_i, 1, 1
- song se_u, 1, 1
- song se_e, 1, 1
- song se_o, 1, 1
- song se_n, 1, 1
- song se_seikai, 1, 1
- song se_hazure, 1, 1
- song se_exp, 1, 1
- song se_jite_pyoko, 1, 1
+ song se_kaifuku, 1, 1 @ Healing Item
+ song se_pc_logon, 1, 1 @ PC Logon
+ song se_pc_off, 1, 1 @ PC Shutdown
+ song se_pc_on, 1, 1 @ PC Startup
+ song se_select, 2, 2 @ Cursor Selection
+ song se_win_open, 1, 1 @ Start Menu
+ song se_wall_hit, 2, 2 @ Wall Bump
+ song se_door, 1, 1 @ Opening Door
+ song se_kaidan, 1, 1 @ Stairs
+ song se_dansa, 1, 1 @ Ledge
+ song se_jitensya, 1, 1 @ Bicycle Bell
+ song se_kouka_l, 1, 1 @ Not Very Effective
+ song se_kouka_m, 1, 1 @ Normal Effectiveness
+ song se_kouka_h, 1, 1 @ Super Effective
+ song se_bowa2, 1, 1 @ Pokémon Withdrawl
+ song se_poke_dead, 1, 1 @ Pokémon Fainted
+ song se_nigeru, 1, 1 @ Flee from Wild Battle
+ song se_jido_doa, 1, 1 @ Pokémon Center Door
+ song se_naminori, 1, 1 @ Briney's Ship
+ song se_ban, 1, 1 @ Bang
+ song se_pin, 1, 1 @ Exclamation Bubble
+ song se_boo, 1, 1 @ Contest Jam
+ song se_bowa, 1, 1 @ Giving Poké Ball to Nurse, Poké Ball wiggle
+ song se_jyuni, 2, 2 @ Places in Contest Appearing
+ song se_a, 1, 1 @ Bard A
+ song se_i, 1, 1 @ Bard I
+ song se_u, 1, 1 @ Bard U
+ song se_e, 1, 1 @ Bard E
+ song se_o, 1, 1 @ Bard O
+ song se_n, 1, 1 @ Bard N
+ song se_seikai, 1, 1 @ Success
+ song se_hazure, 1, 1 @ Failure
+ song se_exp, 1, 1 @ Exp. Bar
+ song se_jite_pyoko, 1, 1 @ Bunny Hop
song se_mu_pachi, 1, 1
- song se_tk_kasya, 1, 1
+ song se_tk_kasya, 1, 1 @ Mossdeep Gym/Trick House Switch
song se_fu_zaku, 1, 1
song se_fu_zaku2, 1, 1
- song se_fu_zuzuzu, 1, 1
- song se_ru_gashin, 1, 1
- song se_ru_gasyan, 1, 1
- song se_ru_bari, 1, 1
- song se_ru_hyuu, 1, 1
+ song se_fu_zuzuzu, 1, 1 @ Lavaridge Gym Warp
+ song se_ru_gashin, 1, 1 @ Sootopolis Gym - Stairs Appear
+ song se_ru_gasyan, 1, 1 @ Sootopolis Gym - Ice Breaking
+ song se_ru_bari, 1, 1 @ Sootopolis Gym - Walking on Ice
+ song se_ru_hyuu, 1, 1 @ Falling Down
song se_ki_gasyan, 2, 2
- song se_tk_warpin, 1, 1
- song se_tk_warpout, 1, 1
- song se_tu_saa, 1, 1
- song se_hi_turun, 1, 1
- song se_track_move, 1, 1
- song se_track_stop, 1, 1
- song se_track_haik, 2, 2
- song se_track_door, 1, 1
+ song se_tk_warpin, 1, 1 @ Warp In
+ song se_tk_warpout, 1, 1 @ Warp Out
+ song se_tu_saa, 1, 1 @ Repel
+ song se_hi_turun, 1, 1 @ Moving Obstacle in Fortree Gym
+ song se_track_move, 1, 1 @ Moving Truck
+ song se_track_stop, 1, 1 @ Moving Truck Stop
+ song se_track_haik, 2, 2 @ Moving Truck Unload
+ song se_track_door, 1, 1 @ Moving Truck Door
song se_moter, 2, 2
song se_card, 1, 1
- song se_save, 1, 1
- song se_kon, 1, 1
- song se_kon2, 1, 1
- song se_kon3, 1, 1
- song se_kon4, 1, 1
- song se_suikomu, 2, 2
- song se_nageru, 1, 1
- song se_toy_c, 2, 2
- song se_toy_d, 2, 2
- song se_toy_e, 2, 2
- song se_toy_f, 2, 2
- song se_toy_g, 2, 2
- song se_toy_a, 2, 2
- song se_toy_b, 2, 2
- song se_toy_c1, 2, 2
- song se_mizu, 2, 2
- song se_hashi, 2, 2
- song se_daugi, 1, 1
- song se_pinpon, 1, 1
- song se_fuusen1, 2, 2
- song se_fuusen2, 2, 2
- song se_fuusen3, 2, 2
- song se_toy_kabe, 2, 2
- song se_toy_dango, 2, 2
- song se_doku, 1, 1
- song se_esuka, 1, 1
- song se_t_ame, 3, 3
- song se_t_ame_e, 3, 3
- song se_t_ooame, 3, 3
- song se_t_ooame_e, 3, 3
- song se_t_koame, 3, 3
- song se_t_koame_e, 3, 3
- song se_t_kami, 1, 1
- song se_t_kami2, 1, 1
- song se_elebeta, 1, 1
- song se_hinsi, 3, 3
- song se_expmax, 1, 1
- song se_tamakoro, 2, 2
- song se_tamakoro_e, 2, 2
+ song se_save, 1, 1 @ Save
+ song se_kon, 1, 1 @ Poke Ball Bounce 1
+ song se_kon2, 1, 1 @ Poké Ball Bounce 2
+ song se_kon3, 1, 1 @ Poké Ball Bounce 3
+ song se_kon4, 1, 1 @ Poké Ball Bounce 4
+ song se_suikomu, 2, 2 @ Poké Ball Trade
+ song se_nageru, 1, 1 @ Poké Ball Throw
+ song se_toy_c, 2, 2 @ Note C
+ song se_toy_d, 2, 2 @ Note D
+ song se_toy_e, 2, 2 @ Note E
+ song se_toy_f, 2, 2 @ Note F
+ song se_toy_g, 2, 2 @ Note G
+ song se_toy_a, 2, 2 @ Note A
+ song se_toy_b, 2, 2 @ Note B
+ song se_toy_c1, 2, 2 @ Note High C
+ song se_mizu, 2, 2 @ Puddle
+ song se_hashi, 2, 2 @ Boardwalk
+ song se_daugi, 1, 1 @ Slots Credits
+ song se_pinpon, 1, 1 @ Ding-dong!
+ song se_fuusen1, 2, 2 @ Red Balloon
+ song se_fuusen2, 2, 2 @ Blue Balloon
+ song se_fuusen3, 2, 2 @ Yellow Balloon
+ song se_toy_kabe, 2, 2 @ Breakable Door
+ song se_toy_dango, 2, 2 @ Mud Ball
+ song se_doku, 1, 1 @ Overworld Poison damage
+ song se_esuka, 1, 1 @ Escalator
+ song se_t_ame, 3, 3 @ Rain
+ song se_t_ame_e, 3, 3 @ Rain stop
+ song se_t_ooame, 3, 3 @ Heavy Rain
+ song se_t_ooame_e, 3, 3 @ Heavy Rain stop
+ song se_t_koame, 3, 3 @ Light Rain
+ song se_t_koame_e, 3, 3 @ Light Rain stop
+ song se_t_kami, 1, 1 @ Thunder
+ song se_t_kami2, 1, 1 @ Thunder 2
+ song se_elebeta, 1, 1 @ Elevator
+ song se_hinsi, 3, 3 @ Low Health
+ song se_expmax, 1, 1 @ Exp. Max
+ song se_tamakoro, 2, 2 @ Roulette Ball
+ song se_tamakoro_e, 2, 2 @ Roulette Ball 2
song se_basabasa, 1, 1
- song se_regi, 1, 1
- song se_c_gaji, 1, 1
- song se_c_maku_u, 1, 1
- song se_c_maku_d, 1, 1
+ song se_regi, 1, 1 @ Cash Register
+ song se_c_gaji, 1, 1 @ Contest Hearts
+ song se_c_maku_u, 1, 1 @ Contest Curtain rise
+ song se_c_maku_d, 1, 1 @ Contest Curtain fall
song se_c_pasi, 1, 1
song se_c_syu, 1, 1
- song se_c_pikon, 1, 1
- song se_reapoke, 1, 1
- song se_op_basyu, 1, 1
- song se_bt_start, 1, 1
- song se_dendou, 1, 1
- song se_jihanki, 1, 1
- song se_tama, 1, 1
- song se_z_scroll, 1, 1
- song se_z_page, 1, 1
- song se_pn_on, 1, 1
- song se_pn_off, 1, 1
- song se_z_search, 1, 1
- song se_tamago, 1, 1
- song se_tb_start, 1, 1
- song se_tb_kon, 1, 1
- song se_tb_kara, 2, 2
+ song se_c_pikon, 1, 1 @ Pokémon Appears in Contest
+ song se_reapoke, 1, 1 @ Shiny Pokémon
+ song se_op_basyu, 1, 1 @ Opening Movie -> Title Screen whoosh
+ song se_bt_start, 1, 1 @ Battle Mugshot whoosh
+ song se_dendou, 1, 1 @ Audience Cheering
+ song se_jihanki, 1, 1 @ Vending Machine
+ song se_tama, 1, 1 @ Orb Used
+ song se_z_scroll, 1, 1 @ Pokédex Scrolling
+ song se_z_page, 1, 1 @ Pokédex Page
+ song se_pn_on, 1, 1 @ PokéNav On
+ song se_pn_off, 1, 1 @ PokéNav Off
+ song se_z_search, 1, 1 @ Pokédex Search
+ song se_tamago, 1, 1 @ Egg hatch
+ song se_tb_start, 1, 1 @ Battle - Poké Ball Tray slide in
+ song se_tb_kon, 1, 1 @ Battle - Poké Ball Tray ball sound
+ song se_tb_kara, 2, 2 @ Battle - Poké Ball Tray slide out
song se_bidoro, 1, 1
- song se_w085, 2, 2
- song se_w085b, 1, 1
- song se_w231, 1, 1
- song se_w171, 1, 1
- song se_w233, 1, 1
- song se_w233b, 1, 1
- song se_w145, 1, 1
- song se_w145b, 1, 1
- song se_w145c, 1, 1
- song se_w240, 1, 1
- song se_w015, 1, 1
- song se_w081, 1, 1
- song se_w081b, 1, 1
- song se_w088, 1, 1
- song se_w016, 2, 2
- song se_w016b, 2, 2
- song se_w003, 1, 1
- song se_w104, 1, 1
- song se_w013, 1, 1
- song se_w196, 1, 1
- song se_w086, 1, 1
- song se_w004, 1, 1
- song se_w025, 1, 1
- song se_w025b, 1, 1
- song se_w152, 1, 1
- song se_w026, 1, 1
- song se_w172, 1, 1
- song se_w172b, 1, 1
- song se_w053, 1, 1
- song se_w007, 1, 1
- song se_w092, 1, 1
- song se_w221, 1, 1
- song se_w221b, 2, 2
- song se_w052, 1, 1
- song se_w036, 2, 2
- song se_w059, 1, 1
- song se_w059b, 1, 1
- song se_w010, 1, 1
- song se_w011, 1, 1
- song se_w017, 1, 1
- song se_w019, 1, 1
- song se_w028, 1, 1
- song se_w013b, 1, 1
- song se_w044, 1, 1
- song se_w029, 1, 1
- song se_w057, 1, 1
- song se_w056, 1, 1
- song se_w250, 1, 1
- song se_w030, 1, 1
- song se_w039, 2, 2
- song se_w054, 1, 1
- song se_w077, 1, 1
- song se_w020, 2, 2
- song se_w082, 1, 1
- song se_w047, 1, 1
- song se_w195, 1, 1
- song se_w006, 1, 1
- song se_w091, 1, 1
- song se_w146, 1, 1
- song se_w120, 1, 1
- song se_w153, 1, 1
- song se_w071b, 1, 1
- song se_w071, 1, 1
- song se_w103, 1, 1
- song se_w062, 1, 1
- song se_w062b, 1, 1
- song se_w048, 1, 1
- song se_w187, 1, 1
- song se_w118, 1, 1
- song se_w155, 1, 1
- song se_w122, 1, 1
- song se_w060, 1, 1
- song se_w185, 1, 1
- song se_w014, 1, 1
- song se_w043, 1, 1
- song se_w207, 1, 1
- song se_w207b, 1, 1
- song se_w215, 1, 1
- song se_w109, 1, 1
- song se_w173, 1, 1
- song se_w280, 1, 1
- song se_w202, 1, 1
- song se_w060b, 1, 1
- song se_w076, 2, 2
- song se_w080, 1, 1
- song se_w100, 1, 1
- song se_w107, 1, 1
- song se_w166, 1, 1
- song se_w129, 1, 1
- song se_w115, 1, 1
- song se_w112, 1, 1
- song se_w197, 2, 2
- song se_w199, 1, 1
- song se_w236, 1, 1
- song se_w204, 1, 1
- song se_w268, 1, 1
- song se_w070, 1, 1
- song se_w063, 1, 1
- song se_w127, 1, 1
- song se_w179, 1, 1
- song se_w151, 1, 1
- song se_w201, 1, 1
- song se_w161, 1, 1
- song se_w161b, 1, 1
- song se_w227, 1, 1
- song se_w227b, 2, 2
- song se_w226, 1, 1
- song se_w208, 1, 1
- song se_w213, 1, 1
- song se_w213b, 1, 1
- song se_w234, 1, 1
- song se_w260, 1, 1
- song se_w328, 1, 1
- song se_w320, 1, 1
- song se_w255, 1, 1
- song se_w291, 1, 1
- song se_w089, 2, 2
- song se_w239, 2, 2
- song se_w230, 1, 1
- song se_w281, 1, 1
- song se_w327, 2, 2
- song se_w287, 1, 1
- song se_w257, 1, 1
- song se_w253, 1, 1
- song se_w258, 1, 1
- song se_w322, 2, 2
- song se_w298, 1, 1
- song se_w287b, 1, 1
- song se_w114, 1, 1
- song se_w063b, 1, 1
+ song se_w085, 2, 2 @ Thunderbolt
+ song se_w085b, 1, 1 @ Thunderbolt 2
+ song se_w231, 1, 1 @ Harden
+ song se_w171, 1, 1 @ Nightmare
+ song se_w233, 1, 1 @ Vital Throw
+ song se_w233b, 1, 1 @ Vital Throw 2
+ song se_w145, 1, 1 @ Bubble
+ song se_w145b, 1, 1 @ Bubble 2
+ song se_w145c, 1, 1 @ Bubble 3
+ song se_w240, 1, 1 @ Rain Dance
+ song se_w015, 1, 1 @ Cut
+ song se_w081, 1, 1 @ String Shot
+ song se_w081b, 1, 1 @ String Shot 2
+ song se_w088, 1, 1 @ Rock Throw
+ song se_w016, 2, 2 @ Gust
+ song se_w016b, 2, 2 @ Gust 2
+ song se_w003, 1, 1 @ DoubleSlap
+ song se_w104, 1, 1 @ Double Team
+ song se_w013, 1, 1 @ Razor Wind
+ song se_w196, 1, 1 @ Icy Wind
+ song se_w086, 1, 1 @ Thunder Wave
+ song se_w004, 1, 1 @ Comet Punch
+ song se_w025, 1, 1 @ Mega Kick
+ song se_w025b, 1, 1 @ Mega Kick 2
+ song se_w152, 1, 1 @ Crabhammer
+ song se_w026, 1, 1 @ Jump Kick
+ song se_w172, 1, 1 @ Flame Wheel
+ song se_w172b, 1, 1 @ Flame Wheel 2
+ song se_w053, 1, 1 @ Flamethrower
+ song se_w007, 1, 1 @ Fire Punch
+ song se_w092, 1, 1 @ Toxic
+ song se_w221, 1, 1 @ Sacred Fire
+ song se_w221b, 2, 2 @ Sacred Fire 2
+ song se_w052, 1, 1 @ Ember
+ song se_w036, 2, 2 @ Take Down
+ song se_w059, 1, 1 @ Blizzard
+ song se_w059b, 1, 1 @ Blizzard 2
+ song se_w010, 1, 1 @ Scratch
+ song se_w011, 1, 1 @ Vicegrip
+ song se_w017, 1, 1 @ Wing Attack
+ song se_w019, 1, 1 @ Fly
+ song se_w028, 1, 1 @ Sand-Attack
+ song se_w013b, 1, 1 @ Razor Wind 2
+ song se_w044, 1, 1 @ Bite
+ song se_w029, 1, 1 @ Headbutt
+ song se_w057, 1, 1 @ Surf
+ song se_w056, 1, 1 @ Hydro Pump
+ song se_w250, 1, 1 @ Whirlpool
+ song se_w030, 1, 1 @ Horn Attack
+ song se_w039, 2, 2 @ Tail Whip
+ song se_w054, 1, 1 @ Mist
+ song se_w077, 1, 1 @ PoisonPowder
+ song se_w020, 2, 2 @ Bind
+ song se_w082, 1, 1 @ Dragon Rage
+ song se_w047, 1, 1 @ Sing
+ song se_w195, 1, 1 @ Perish Song
+ song se_w006, 1, 1 @ Pay Day
+ song se_w091, 1, 1 @ Dig
+ song se_w146, 1, 1 @ Dizzy Punch
+ song se_w120, 1, 1 @ Self-Destruct
+ song se_w153, 1, 1 @ Explosion
+ song se_w071b, 1, 1 @ Absorb 2
+ song se_w071, 1, 1 @ Absorb
+ song se_w103, 1, 1 @ Screech
+ song se_w062, 1, 1 @ BubbleBeam
+ song se_w062b, 1, 1 @ BubbleBeam 2
+ song se_w048, 1, 1 @ Supersonic
+ song se_w187, 1, 1 @ Belly Drum
+ song se_w118, 1, 1 @ Metronome
+ song se_w155, 1, 1 @ Bonemerang
+ song se_w122, 1, 1 @ Lick
+ song se_w060, 1, 1 @ Psybeam
+ song se_w185, 1, 1 @ Faint Attack
+ song se_w014, 1, 1 @ Swords Dance
+ song se_w043, 1, 1 @ Leer
+ song se_w207, 1, 1 @ Swagger
+ song se_w207b, 1, 1 @ Swagger 2
+ song se_w215, 1, 1 @ Heal Bell
+ song se_w109, 1, 1 @ Confuse Ray
+ song se_w173, 1, 1 @ Snore
+ song se_w280, 1, 1 @ Brick Break
+ song se_w202, 1, 1 @ Giga Drain
+ song se_w060b, 1, 1 @ Psybeam 2
+ song se_w076, 2, 2 @ SolarBeam
+ song se_w080, 1, 1 @ Petal Dance
+ song se_w100, 1, 1 @ Teleport
+ song se_w107, 1, 1 @ Minimize
+ song se_w166, 1, 1 @ Sketch
+ song se_w129, 1, 1 @ Swift
+ song se_w115, 1, 1 @ Reflect
+ song se_w112, 1, 1 @ Barrier
+ song se_w197, 2, 2 @ Detect
+ song se_w199, 1, 1 @ Lock-On
+ song se_w236, 1, 1 @ Moonlight
+ song se_w204, 1, 1 @ Charm
+ song se_w268, 1, 1 @ Charge
+ song se_w070, 1, 1 @ Strength
+ song se_w063, 1, 1 @ Hyper Beam
+ song se_w127, 1, 1 @ Waterfall
+ song se_w179, 1, 1 @ Reversal
+ song se_w151, 1, 1 @ Acid Armor
+ song se_w201, 1, 1 @ Sandstorm
+ song se_w161, 1, 1 @ Tri-Attack
+ song se_w161b, 1, 1 @ Tri-Attack 2
+ song se_w227, 1, 1 @ Encore
+ song se_w227b, 2, 2 @ Encore 2
+ song se_w226, 1, 1 @ Baton Pass
+ song se_w208, 1, 1 @ Milk Drink
+ song se_w213, 1, 1 @ Attract
+ song se_w213b, 1, 1 @ Attract 2
+ song se_w234, 1, 1 @ Morning Sun
+ song se_w260, 1, 1 @ Flatter
+ song se_w328, 1, 1 @ Sand Tomb
+ song se_w320, 1, 1 @ GrassWhistle
+ song se_w255, 1, 1 @ Spit Up
+ song se_w291, 1, 1 @ Dive
+ song se_w089, 2, 2 @ Earthquake
+ song se_w239, 2, 2 @ Twister
+ song se_w230, 1, 1 @ Sweet Scent
+ song se_w281, 1, 1 @ Yawn
+ song se_w327, 2, 2 @ Sky Uppercut
+ song se_w287, 1, 1 @ Stat Increased
+ song se_w257, 1, 1 @ Heat Wave
+ song se_w253, 1, 1 @ Uproar
+ song se_w258, 1, 1 @ Hail
+ song se_w322, 2, 2 @ Cosmic Power
+ song se_w298, 1, 1 @ Teeter Dance
+ song se_w287b, 1, 1 @ Stat Decreased
+ song se_w114, 1, 1 @ Haze
+ song se_w063b, 1, 1 @ Hyper Beam 2
song song_248, 2, 2
song song_249, 2, 2
song song_250, 2, 2
@@ -350,125 +350,125 @@ gSongTable:: @ 845548C
song dummy_song_header, 0, 0
song dummy_song_header, 0, 0
song dummy_song_header, 0, 0
- song bgm_tetsuji, 0, 0
- song bgm_field13, 0, 0
- song bgm_kachi22, 0, 0
- song bgm_kachi2, 0, 0
- song bgm_kachi3, 0, 0
- song bgm_kachi5, 0, 0
- song bgm_pcc, 0, 0
- song bgm_nibi, 0, 0
- song bgm_suikun, 0, 0
- song bgm_dooro1, 0, 0
- song bgm_dooro_x1, 0, 0
- song bgm_dooro_x3, 0, 0
- song bgm_machi_s2, 0, 0
- song bgm_machi_s4, 0, 0
- song bgm_gim, 0, 0
- song bgm_naminori, 0, 0
- song bgm_dan01, 0, 0
- song bgm_fanfa1, 2, 2
- song bgm_me_asa, 2, 2
- song bgm_me_bachi, 2, 2
- song bgm_fanfa4, 2, 2
- song bgm_fanfa5, 2, 2
- song bgm_me_waza, 2, 2
- song bgm_bijyutu, 0, 0
- song bgm_dooro_x4, 0, 0
- song bgm_fune_kan, 0, 0
- song bgm_me_shinka, 2, 2
- song bgm_shinka, 0, 0
- song bgm_me_wasure, 2, 2
- song bgm_syoujoeye, 0, 0
- song bgm_boyeye, 0, 0
- song bgm_dan02, 0, 0
- song bgm_machi_s3, 0, 0
- song bgm_odamaki, 0, 0
- song bgm_b_tower, 0, 0
- song bgm_swimeye, 0, 0
- song bgm_dan03, 0, 0
- song bgm_me_kinomi, 2, 2
- song bgm_me_tama, 2, 2
- song bgm_me_b_big, 2, 2
- song bgm_me_b_small, 2, 2
- song bgm_me_zannen, 2, 2
- song bgm_bd_time, 0, 0
- song bgm_test1, 0, 0
- song bgm_test2, 0, 0
- song bgm_test3, 0, 0
- song bgm_test4, 0, 0
- song bgm_test, 0, 0
- song bgm_gomachi0, 0, 0
- song bgm_gotown, 0, 0
- song bgm_pokecen, 0, 0
- song bgm_nextroad, 0, 0
- song bgm_granroad, 0, 0
- song bgm_cycling, 0, 0
- song bgm_friendly, 0, 0
- song bgm_mishiro, 0, 0
- song bgm_tozan, 0, 0
- song bgm_girleye, 0, 0
- song bgm_minamo, 0, 0
- song bgm_ashroad, 0, 0
- song bgm_event0, 0, 0
- song bgm_deepdeep, 0, 0
- song bgm_kachi1, 0, 0
- song bgm_title3, 0, 0
- song bgm_demo1, 0, 0
- song bgm_girl_sup, 0, 0
- song bgm_hageshii, 0, 0
- song bgm_kakkoii, 0, 0
- song bgm_kazanbai, 0, 0
- song bgm_aqa_0, 0, 0
- song bgm_tsuretek, 0, 0
- song bgm_boy_sup, 0, 0
- song bgm_rainbow, 0, 0
- song bgm_ayasii, 0, 0
- song bgm_kachi4, 0, 0
- song bgm_ropeway, 0, 0
- song bgm_casino, 0, 0
- song bgm_hightown, 0, 0
- song bgm_safari, 0, 0
- song bgm_c_road, 0, 0
- song bgm_ajito, 0, 0
- song bgm_m_boat, 0, 0
- song bgm_m_dungon, 0, 0
- song bgm_finecity, 0, 0
- song bgm_machupi, 0, 0
- song bgm_p_school, 0, 0
- song bgm_dendou, 0, 0
- song bgm_tonekusa, 0, 0
- song bgm_maborosi, 0, 0
- song bgm_con_fan, 0, 0
- song bgm_contest0, 0, 0
- song bgm_mgm0, 0, 0
- song bgm_t_battle, 0, 0
- song bgm_ooame, 0, 0
- song bgm_hideri, 0, 0
- song bgm_runecity, 0, 0
- song bgm_con_k, 0, 0
- song bgm_eikou_r, 0, 0
- song bgm_karakuri, 0, 0
- song bgm_hutago, 0, 0
- song bgm_sitennou, 0, 0
- song bgm_yama_eye, 0, 0
- song bgm_conlobby, 0, 0
- song bgm_inter_v, 0, 0
- song bgm_daigo, 0, 0
- song bgm_thankfor, 0, 0
- song bgm_end, 0, 0
- song bgm_battle27, 0, 0
- song bgm_battle31, 0, 0
- song bgm_battle20, 0, 0
- song bgm_battle32, 0, 0
- song bgm_battle33, 0, 0
- song bgm_battle36, 0, 0
- song bgm_battle34, 0, 0
- song bgm_battle35, 0, 0
- song bgm_battle38, 0, 0
- song bgm_battle30, 0, 0
- song bgm_radio_tower_occupied, 0, 0
+ song bgm_tetsuji, 0, 0 @ Littleroot Town Test 'TETSUJI'
+ song bgm_field13, 0, 0 @ GSC - Route 38
+ song bgm_kachi22, 0, 0 @ Wild Pokémon Defeated
+ song bgm_kachi2, 0, 0 @ Wild Pokémon Defeated with Intro
+ song bgm_kachi3, 0, 0 @ Gym Leader Defeated
+ song bgm_kachi5, 0, 0 @ Victory! Elite Four
+ song bgm_pcc, 0, 0 @ Crystal - Pokémon Communication Center
+ song bgm_nibi, 0, 0 @ GSC - Viridian/Saffron/Pewter/etc
+ song bgm_suikun, 0, 0 @ Crystal - Battle! Legendary Beasts
+ song bgm_dooro1, 0, 0 @ Route 101
+ song bgm_dooro_x1, 0, 0 @ Route 110
+ song bgm_dooro_x3, 0, 0 @ Route 120
+ song bgm_machi_s2, 0, 0 @ Petalburg City
+ song bgm_machi_s4, 0, 0 @ Oldale Town
+ song bgm_gim, 0, 0 @ Gym
+ song bgm_naminori, 0, 0 @ Surfing
+ song bgm_dan01, 0, 0 @ Caves and Darkness
+ song bgm_fanfa1, 2, 2 @ Level Up!
+ song bgm_me_asa, 2, 2 @ Pokémon Healed
+ song bgm_me_bachi, 2, 2 @ Obtained a Badge!
+ song bgm_fanfa4, 2, 2 @ Obtained an Item!
+ song bgm_fanfa5, 2, 2 @ Your Pokémon Just Evolved!
+ song bgm_me_waza, 2, 2 @ Obtained a TM/HM!
+ song bgm_bijyutu, 0, 0 @ Lilycove Museum
+ song bgm_dooro_x4, 0, 0 @ Route 122/Intro
+ song bgm_fune_kan, 0, 0 @ Slateport Museum
+ song bgm_me_shinka, 2, 2 @ Evolution Intro
+ song bgm_shinka, 0, 0 @ Evolution
+ song bgm_me_wasure, 2, 2 @ Move Deleted
+ song bgm_syoujoeye, 0, 0 @ Encounter! Tuber
+ song bgm_boyeye, 0, 0 @ Encounter! Boy
+ song bgm_dan02, 0, 0 @ Abandoned Ship
+ song bgm_machi_s3, 0, 0 @ Fortree City
+ song bgm_odamaki, 0, 0 @ Professor Birch's Lab
+ song bgm_b_tower, 0, 0 @ Battle Tower (RS)
+ song bgm_swimeye, 0, 0 @ Encounter! Swimmer
+ song bgm_dan03, 0, 0 @ Meteor Falls
+ song bgm_me_kinomi, 2, 2 @ Obtained a Berry!
+ song bgm_me_tama, 2, 2 @ Awakening the Super-Ancient Pokémon
+ song bgm_me_b_big, 2, 2 @ Slots Jackpot!
+ song bgm_me_b_small, 2, 2 @ Slots Victory!
+ song bgm_me_zannen, 2, 2 @ Too bad!
+ song bgm_bd_time, 0, 0 @ Roulette!
+ song bgm_test1, 0, 0 @ Contest Test 1
+ song bgm_test2, 0, 0 @ Contest Test 2
+ song bgm_test3, 0, 0 @ Contest Test 3
+ song bgm_test4, 0, 0 @ Contest Test 4
+ song bgm_test, 0, 0 @ Encounter! Gentleman (Test?)
+ song bgm_gomachi0, 0, 0 @ Verdanturf Town
+ song bgm_gotown, 0, 0 @ Rustboro City
+ song bgm_pokecen, 0, 0 @ Pokémon Center
+ song bgm_nextroad, 0, 0 @ Route 104
+ song bgm_granroad, 0, 0 @ Route 119
+ song bgm_cycling, 0, 0 @ Cycling
+ song bgm_friendly, 0, 0 @ Pokémart
+ song bgm_mishiro, 0, 0 @ Littleroot Town
+ song bgm_tozan, 0, 0 @ Sky Pillar
+ song bgm_girleye, 0, 0 @ Encounter! Girl
+ song bgm_minamo, 0, 0 @ Lilycove City
+ song bgm_ashroad, 0, 0 @ Route 111
+ song bgm_event0, 0, 0 @ Help me!
+ song bgm_deepdeep, 0, 0 @ Underwater
+ song bgm_kachi1, 0, 0 @ Victory! Trainer
+ song bgm_title3, 0, 0 @ Title Screen
+ song bgm_demo1, 0, 0 @ Opening Movie
+ song bgm_girl_sup, 0, 0 @ Encounter! May
+ song bgm_hageshii, 0, 0 @ Encounter! Biker
+ song bgm_kakkoii, 0, 0 @ Encounter! Electric Trainer
+ song bgm_kazanbai, 0, 0 @ Route 113
+ song bgm_aqa_0, 0, 0 @ Encounter! Team Aqua
+ song bgm_tsuretek, 0, 0 @ Follow Me!
+ song bgm_boy_sup, 0, 0 @ Encounter! Brendan
+ song bgm_rainbow, 0, 0 @ Ever Grande City
+ song bgm_ayasii, 0, 0 @ Encounter! Psychic
+ song bgm_kachi4, 0, 0 @ Victory! Aqua/Magma Grunt
+ song bgm_ropeway, 0, 0 @ Cable Car
+ song bgm_casino, 0, 0 @ Game Corner
+ song bgm_hightown, 0, 0 @ Dewford Town
+ song bgm_safari, 0, 0 @ Safari Zone
+ song bgm_c_road, 0, 0 @ Victory Road
+ song bgm_ajito, 0, 0 @ Aqua/Magma Hideout
+ song bgm_m_boat, 0, 0 @ Sailing
+ song bgm_m_dungon, 0, 0 @ Mt. Pyre (Inside)
+ song bgm_finecity, 0, 0 @ Slateport City
+ song bgm_machupi, 0, 0 @ Mt. Pyte (Outside)
+ song bgm_p_school, 0, 0 @ Pokémon Trainer's School
+ song bgm_dendou, 0, 0 @ Hall of Fame
+ song bgm_tonekusa, 0, 0 @ Lavaridge Town
+ song bgm_maborosi, 0, 0 @ Sealed Chamber
+ song bgm_con_fan, 0, 0 @ You are the Champion!
+ song bgm_contest0, 0, 0 @ Pokémon Contest
+ song bgm_mgm0, 0, 0 @ Encounter! Team Magma
+ song bgm_t_battle, 0, 0 @ Opening Battle
+ song bgm_ooame, 0, 0 @ The Flood
+ song bgm_hideri, 0, 0 @ The Drought
+ song bgm_runecity, 0, 0 @ Sootopolis City
+ song bgm_con_k, 0, 0 @ Berry Blending Results
+ song bgm_eikou_r, 0, 0 @ Hall of Fame
+ song bgm_karakuri, 0, 0 @ Trick House
+ song bgm_hutago, 0, 0 @ Encounter! Kid
+ song bgm_sitennou, 0, 0 @ Encounter! Elite Four
+ song bgm_yama_eye, 0, 0 @ Encounter! Hiker
+ song bgm_conlobby, 0, 0 @ Contest Lobby
+ song bgm_inter_v, 0, 0 @ Encounter! Gabby and Ty
+ song bgm_daigo, 0, 0 @ Encounter! Wallace
+ song bgm_thankfor, 0, 0 @ Credits
+ song bgm_end, 0, 0 @ The End
+ song bgm_battle27, 0, 0 @ Battle! Wild Pokémon
+ song bgm_battle31, 0, 0 @ Battle! Team Aqua/Magma
+ song bgm_battle20, 0, 0 @ Battle! Trainer
+ song bgm_battle32, 0, 0 @ Battle! Gym Leader
+ song bgm_battle33, 0, 0 @ Battle! Champion
+ song bgm_battle36, 0, 0 @ Battle! Regi Trio
+ song bgm_battle34, 0, 0 @ Battle! Legendary Pokémon (dupe)
+ song bgm_battle35, 0, 0 @ Battle! Rival
+ song bgm_battle38, 0, 0 @ Battle! Elite Four
+ song bgm_battle30, 0, 0 @ Battle! Archie/Maxie
+ song bgm_radio_tower_occupied, 0, 0 @ GSC - Radio Tower Takeover!
.align 2
-dummy_song_header: @ 845632C
+dummy_song_header: @ 845632C
.byte 0, 0, 0, 0
diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c
index 7cd42c17b..7cd42c17b 100755..100644
--- a/src/battle/anim/alert.c
+++ b/src/battle/anim/alert.c
diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c
index 5ec083887..5ec083887 100755..100644
--- a/src/battle/anim/angel.c
+++ b/src/battle/anim/angel.c
diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c
index d5be6e2af..d5be6e2af 100755..100644
--- a/src/battle/anim/angel_kiss.c
+++ b/src/battle/anim/angel_kiss.c
diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c
index 011aa68ce..011aa68ce 100755..100644
--- a/src/battle/anim/anger.c
+++ b/src/battle/anim/anger.c
diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c
index e7b49471d..e7b49471d 100755..100644
--- a/src/battle/anim/blow_kiss.c
+++ b/src/battle/anim/blow_kiss.c
diff --git a/src/battle/anim/bottle.c b/src/battle/anim/bottle.c
index 5485bcf5d..5485bcf5d 100755..100644
--- a/src/battle/anim/bottle.c
+++ b/src/battle/anim/bottle.c
diff --git a/src/battle/anim/brace.c b/src/battle/anim/brace.c
index 19ea4297b..19ea4297b 100755..100644
--- a/src/battle/anim/brace.c
+++ b/src/battle/anim/brace.c
diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c
index 831b222ad..831b222ad 100755..100644
--- a/src/battle/anim/breath.c
+++ b/src/battle/anim/breath.c
diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c
index 90b2021f1..90b2021f1 100755..100644
--- a/src/battle/anim/bullet.c
+++ b/src/battle/anim/bullet.c
diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c
index 4fa8ea163..4fa8ea163 100755..100644
--- a/src/battle/anim/copy_orb.c
+++ b/src/battle/anim/copy_orb.c
diff --git a/src/battle/anim/cube.c b/src/battle/anim/cube.c
index 9adf46e32..9adf46e32 100755..100644
--- a/src/battle/anim/cube.c
+++ b/src/battle/anim/cube.c
diff --git a/src/battle/anim/curtain.c b/src/battle/anim/curtain.c
index 3c9e4e84c..3c9e4e84c 100755..100644
--- a/src/battle/anim/curtain.c
+++ b/src/battle/anim/curtain.c
diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c
index 2234ebacb..2234ebacb 100755..100644
--- a/src/battle/anim/cutter.c
+++ b/src/battle/anim/cutter.c
diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c
index 0f83df211..0f83df211 100755..100644
--- a/src/battle/anim/cyclone.c
+++ b/src/battle/anim/cyclone.c
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c
index 8ceb00298..8ceb00298 100755..100644
--- a/src/battle/anim/dark.c
+++ b/src/battle/anim/dark.c
diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c
index bf39e01c0..bf39e01c0 100755..100644
--- a/src/battle/anim/dragon.c
+++ b/src/battle/anim/dragon.c
diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c
index f9e505bf2..f9e505bf2 100755..100644
--- a/src/battle/anim/draw.c
+++ b/src/battle/anim/draw.c
diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c
index 6306778ae..6306778ae 100755..100644
--- a/src/battle/anim/drum.c
+++ b/src/battle/anim/drum.c
diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c
index 8004b3bf5..8004b3bf5 100755..100644
--- a/src/battle/anim/egg.c
+++ b/src/battle/anim/egg.c
diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c
index 469522092..469522092 100755..100644
--- a/src/battle/anim/espeed.c
+++ b/src/battle/anim/espeed.c
diff --git a/src/battle/anim/evasion.c b/src/battle/anim/evasion.c
index ded8428d4..ded8428d4 100755..100644
--- a/src/battle/anim/evasion.c
+++ b/src/battle/anim/evasion.c
diff --git a/src/battle/anim/fang.c b/src/battle/anim/fang.c
index 5ed7372a8..5ed7372a8 100755..100644
--- a/src/battle/anim/fang.c
+++ b/src/battle/anim/fang.c
diff --git a/src/battle/anim/flash.c b/src/battle/anim/flash.c
index eaa38e5b7..eaa38e5b7 100755..100644
--- a/src/battle/anim/flash.c
+++ b/src/battle/anim/flash.c
diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c
index d2d22602a..d2d22602a 100755..100644
--- a/src/battle/anim/flying_hearts.c
+++ b/src/battle/anim/flying_hearts.c
diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c
index 441ac0e6d..441ac0e6d 100755..100644
--- a/src/battle/anim/flying_path.c
+++ b/src/battle/anim/flying_path.c
diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c
index 4eeaa5215..4eeaa5215 100755..100644
--- a/src/battle/anim/flying_petals.c
+++ b/src/battle/anim/flying_petals.c
diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c
index e4577f1e1..e4577f1e1 100755..100644
--- a/src/battle/anim/glitter.c
+++ b/src/battle/anim/glitter.c
diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c
index 63466c0ff..63466c0ff 100755..100644
--- a/src/battle/anim/glow.c
+++ b/src/battle/anim/glow.c
diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c
index c4d7b1cef..c4d7b1cef 100755..100644
--- a/src/battle/anim/grip.c
+++ b/src/battle/anim/grip.c
diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c
index 8788b32fe..8788b32fe 100755..100644
--- a/src/battle/anim/grow.c
+++ b/src/battle/anim/grow.c
diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c
index b3d842cdf..b3d842cdf 100755..100644
--- a/src/battle/anim/guillotine.c
+++ b/src/battle/anim/guillotine.c
diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c
index a8c14ea1c..a8c14ea1c 100755..100644
--- a/src/battle/anim/heal.c
+++ b/src/battle/anim/heal.c
diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c
index 5df89f929..5df89f929 100755..100644
--- a/src/battle/anim/heart_1.c
+++ b/src/battle/anim/heart_1.c
diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c
index 6fb4a76d8..6fb4a76d8 100755..100644
--- a/src/battle/anim/homing.c
+++ b/src/battle/anim/homing.c
diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c
index 4006e2d43..4006e2d43 100755..100644
--- a/src/battle/anim/hop.c
+++ b/src/battle/anim/hop.c
diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c
index 1bc3f46af..1bc3f46af 100755..100644
--- a/src/battle/anim/hop_2.c
+++ b/src/battle/anim/hop_2.c
diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c
index d3270ee65..d3270ee65 100755..100644
--- a/src/battle/anim/kiss_fountain.c
+++ b/src/battle/anim/kiss_fountain.c
diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c
index 676734717..676734717 100755..100644
--- a/src/battle/anim/leaf.c
+++ b/src/battle/anim/leaf.c
diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c
index bd3d22ca6..c3828c681 100755..100644
--- a/src/battle/anim/love_bg.c
+++ b/src/battle/anim/love_bg.c
@@ -25,7 +25,7 @@ static void sub_80D21F0(u8 taskId);
void sub_80D2100(u8 taskId)
{
struct Struct_sub_8078914 subStruct;
- u8* tempvar;
+
REG_BLDCNT = 0x3F42;
REG_BLDALPHA = 0x1000;
REG_BG1CNT_BITFIELD.priority = 3;
@@ -38,9 +38,8 @@ void sub_80D2100(u8 taskId)
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
sub_8078914(&subStruct);
- tempvar = subStruct.field_4;
- DmaFill32(3, 0x0, tempvar, 0x1000);
- LZDecompressVram(&gAttractTilemap, tempvar);
+ DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000);
+ LZDecompressVram(&gAttractTilemap, subStruct.field_4);
LZDecompressVram(&gAttractGfx, subStruct.field_0);
LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32);
if (IsContest())
@@ -90,21 +89,7 @@ void sub_80D21F0(u8 taskId)
break;
case 3:
sub_8078914(&subStruct);
- {
- u8 *addr = subStruct.field_0;
- u32 size = 0x2000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
- }
+ DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000);
DmaClear32(3, subStruct.field_4, 0x800);
if (!IsContest())
REG_BG1CNT_BITFIELD.charBaseBlock = 0;
diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c
index d379c8f09..d379c8f09 100755..100644
--- a/src/battle/anim/lunge_1.c
+++ b/src/battle/anim/lunge_1.c
diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c
index fe2470567..fe2470567 100755..100644
--- a/src/battle/anim/lunge_2.c
+++ b/src/battle/anim/lunge_2.c
diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c
index 8358d23db..8358d23db 100755..100644
--- a/src/battle/anim/money.c
+++ b/src/battle/anim/money.c
diff --git a/src/battle/anim/moon.c b/src/battle/anim/moon.c
index c532e8057..c532e8057 100755..100644
--- a/src/battle/anim/moon.c
+++ b/src/battle/anim/moon.c
diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c
index 715462d73..715462d73 100755..100644
--- a/src/battle/anim/note_rain.c
+++ b/src/battle/anim/note_rain.c
diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c
index 8564c58fe..8564c58fe 100755..100644
--- a/src/battle/anim/note_scatter.c
+++ b/src/battle/anim/note_scatter.c
diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c
index 524c51c08..524c51c08 100755..100644
--- a/src/battle/anim/note_scatter_2.c
+++ b/src/battle/anim/note_scatter_2.c
diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c
index 80ed2256f..80ed2256f 100755..100644
--- a/src/battle/anim/note_wave.c
+++ b/src/battle/anim/note_wave.c
diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c
index c8cf339d2..c8cf339d2 100755..100644
--- a/src/battle/anim/orbit.c
+++ b/src/battle/anim/orbit.c
diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c
index 92b67672b..92b67672b 100755..100644
--- a/src/battle/anim/orbit_fast.c
+++ b/src/battle/anim/orbit_fast.c
diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c
index 54c157839..54c157839 100755..100644
--- a/src/battle/anim/orbit_scatter.c
+++ b/src/battle/anim/orbit_scatter.c
diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c
index 6ca2fa71c..6ca2fa71c 100755..100644
--- a/src/battle/anim/orbs.c
+++ b/src/battle/anim/orbs.c
diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c
index 1140aa34a..1140aa34a 100755..100644
--- a/src/battle/anim/osmose.c
+++ b/src/battle/anim/osmose.c
diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c
index 3b3153428..3b3153428 100755..100644
--- a/src/battle/anim/perceive.c
+++ b/src/battle/anim/perceive.c
diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c
index a0be20d6f..a0be20d6f 100755..100644
--- a/src/battle/anim/powder.c
+++ b/src/battle/anim/powder.c
diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c
index 915cadcbc..915cadcbc 100755..100644
--- a/src/battle/anim/ring.c
+++ b/src/battle/anim/ring.c
diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c
index 68f8a3e2f..68f8a3e2f 100755..100644
--- a/src/battle/anim/roots.c
+++ b/src/battle/anim/roots.c
diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c
index 22bb26973..22bb26973 100755..100644
--- a/src/battle/anim/scan.c
+++ b/src/battle/anim/scan.c
diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c
index 47776a3cb..8d51521ee 100755..100644
--- a/src/battle/anim/scary_face.c
+++ b/src/battle/anim/scary_face.c
@@ -27,7 +27,7 @@ static void sub_80D24E0(u8 taskId);
void sub_80D23B4(u8 taskId)
{
struct Struct_sub_8078914 subStruct;
- u8* tempvar;
+
REG_BLDCNT = 0x3F42;
REG_BLDALPHA = 0x1000;
REG_BG1CNT_BITFIELD.priority = 1;
@@ -40,8 +40,7 @@ void sub_80D23B4(u8 taskId)
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
sub_8078914(&subStruct);
- tempvar = subStruct.field_4;
- DmaFill32(3, 0x0, tempvar, 0x1000);
+ DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000);
if (IsContest())
LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceContest, subStruct.field_4);
else if (GetBankSide(gAnimBankTarget) == 1)
@@ -98,21 +97,7 @@ void sub_80D24E0(u8 taskId)
break;
case 3:
sub_8078914(&subStruct);
- {
- u8 *addr = subStruct.field_0;
- u32 size = 0x2000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
- }
+ DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000);
DmaClear32(3, subStruct.field_4, 0x800);
if (!IsContest())
REG_BG1CNT_BITFIELD.charBaseBlock = 0;
diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c
index be8613a74..be8613a74 100755..100644
--- a/src/battle/anim/seed.c
+++ b/src/battle/anim/seed.c
diff --git a/src/battle/anim/shadow_enlarge.c b/src/battle/anim/shadow_enlarge.c
index 399cf1ba4..399cf1ba4 100755..100644
--- a/src/battle/anim/shadow_enlarge.c
+++ b/src/battle/anim/shadow_enlarge.c
diff --git a/src/battle/anim/shadow_minimize.c b/src/battle/anim/shadow_minimize.c
index 94069374f..94069374f 100755..100644
--- a/src/battle/anim/shadow_minimize.c
+++ b/src/battle/anim/shadow_minimize.c
diff --git a/src/battle/anim/shield.c b/src/battle/anim/shield.c
index 676318545..676318545 100755..100644
--- a/src/battle/anim/shield.c
+++ b/src/battle/anim/shield.c
diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c
index 9e7bea1e4..9e7bea1e4 100755..100644
--- a/src/battle/anim/shimmer.c
+++ b/src/battle/anim/shimmer.c
diff --git a/src/battle/anim/silhouette.c b/src/battle/anim/silhouette.c
index a3147f598..a3147f598 100755..100644
--- a/src/battle/anim/silhouette.c
+++ b/src/battle/anim/silhouette.c
diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c
index 6adcaf098..6adcaf098 100755..100644
--- a/src/battle/anim/slash.c
+++ b/src/battle/anim/slash.c
diff --git a/src/battle/anim/sleep.c b/src/battle/anim/sleep.c
index 0f0e54f80..0f0e54f80 100755..100644
--- a/src/battle/anim/sleep.c
+++ b/src/battle/anim/sleep.c
diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c
index fe8745483..fe8745483 100755..100644
--- a/src/battle/anim/slice.c
+++ b/src/battle/anim/slice.c
diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c
index 7ab873e63..7ab873e63 100755..100644
--- a/src/battle/anim/smoke.c
+++ b/src/battle/anim/smoke.c
diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c
index 0897ec6e3..0897ec6e3 100755..100644
--- a/src/battle/anim/sonic.c
+++ b/src/battle/anim/sonic.c
diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c
index 924b1b568..924b1b568 100755..100644
--- a/src/battle/anim/sonic_task.c
+++ b/src/battle/anim/sonic_task.c
diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c
index 8eb060358..8eb060358 100755..100644
--- a/src/battle/anim/spin_finger.c
+++ b/src/battle/anim/spin_finger.c
diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c
index 1e65ba53e..1e65ba53e 100755..100644
--- a/src/battle/anim/spit.c
+++ b/src/battle/anim/spit.c
diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c
index 570ef0dca..570ef0dca 100755..100644
--- a/src/battle/anim/splash.c
+++ b/src/battle/anim/splash.c
diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c
index 50e78af37..50e78af37 100755..100644
--- a/src/battle/anim/startle.c
+++ b/src/battle/anim/startle.c
diff --git a/src/battle/anim/strike.c b/src/battle/anim/strike.c
index bfa1dc4f7..bfa1dc4f7 100755..100644
--- a/src/battle/anim/strike.c
+++ b/src/battle/anim/strike.c
diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c
index c4082b6aa..c4082b6aa 100755..100644
--- a/src/battle/anim/switch.c
+++ b/src/battle/anim/switch.c
diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c
index b46fe6759..b46fe6759 100755..100644
--- a/src/battle/anim/sword.c
+++ b/src/battle/anim/sword.c
diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c
index 023e14e45..023e14e45 100755..100644
--- a/src/battle/anim/taunt_finger.c
+++ b/src/battle/anim/taunt_finger.c
diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c
index 9f57ffd45..9f57ffd45 100755..100644
--- a/src/battle/anim/tendrils.c
+++ b/src/battle/anim/tendrils.c
diff --git a/src/battle/anim/thought.c b/src/battle/anim/thought.c
index c3ab6f82c..c3ab6f82c 100755..100644
--- a/src/battle/anim/thought.c
+++ b/src/battle/anim/thought.c
diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c
index 3fde815ae..3fde815ae 100755..100644
--- a/src/battle/anim/thrashing.c
+++ b/src/battle/anim/thrashing.c
diff --git a/src/battle/anim/tile_in.c b/src/battle/anim/tile_in.c
index a4a544a0c..a4a544a0c 100755..100644
--- a/src/battle/anim/tile_in.c
+++ b/src/battle/anim/tile_in.c
diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c
index 50468a440..50468a440 100755..100644
--- a/src/battle/anim/tile_out.c
+++ b/src/battle/anim/tile_out.c
diff --git a/src/battle/anim/twinkle.c b/src/battle/anim/twinkle.c
index e26669f63..e26669f63 100755..100644
--- a/src/battle/anim/twinkle.c
+++ b/src/battle/anim/twinkle.c
diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c
index d7e5fbfe4..d7e5fbfe4 100755..100644
--- a/src/battle/anim/unused_1.c
+++ b/src/battle/anim/unused_1.c
diff --git a/src/battle/anim/unused_2.c b/src/battle/anim/unused_2.c
index 122f39e02..122f39e02 100755..100644
--- a/src/battle/anim/unused_2.c
+++ b/src/battle/anim/unused_2.c
diff --git a/src/battle/anim/unused_3.c b/src/battle/anim/unused_3.c
index 6dbcbfefe..6dbcbfefe 100755..100644
--- a/src/battle/anim/unused_3.c
+++ b/src/battle/anim/unused_3.c
diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c
index bda476a0a..bda476a0a 100755..100644
--- a/src/battle/anim/unused_4.c
+++ b/src/battle/anim/unused_4.c
diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c
index 421cdd6bf..421cdd6bf 100755..100644
--- a/src/battle/anim/unused_5.c
+++ b/src/battle/anim/unused_5.c
diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c
index 37e2031b0..37e2031b0 100755..100644
--- a/src/battle/anim/unused_6.c
+++ b/src/battle/anim/unused_6.c
diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c
index 2be6e7633..2be6e7633 100755..100644
--- a/src/battle/anim/unused_7.c
+++ b/src/battle/anim/unused_7.c
diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c
index 03772f951..03772f951 100755..100644
--- a/src/battle/anim/unused_8.c
+++ b/src/battle/anim/unused_8.c
diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c
index cf3ccb0d4..cf3ccb0d4 100755..100644
--- a/src/battle/anim/unused_9.c
+++ b/src/battle/anim/unused_9.c
diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c
index 2cf68c34c..2cf68c34c 100755..100644
--- a/src/battle/anim/wave_finger.c
+++ b/src/battle/anim/wave_finger.c
diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c
index cb3ce327e..cb3ce327e 100755..100644
--- a/src/battle/anim/whip.c
+++ b/src/battle/anim/whip.c
diff --git a/src/battle/anim/withdraw.c b/src/battle/anim/withdraw.c
index e67248b9f..e67248b9f 100755..100644
--- a/src/battle/anim/withdraw.c
+++ b/src/battle/anim/withdraw.c
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index 990535b4e..b00c35312 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -87,8 +87,8 @@ extern u8 gMultiHitCounter;
extern u8 gActionForBanks[];
extern u16 gUnknown_02024C2C[];
extern u16 gLastUsedMove[];
-extern u16 gMoveHitWith[];
-extern u16 gUnknown_02024C44[];
+extern u16 gLastLandedMoves[];
+extern u16 gLastHitByType[];
extern u16 gUnknown_02024C4C[];
extern u16 gLockedMoves[];
extern u8 gUnknown_02024C5C[];
@@ -301,8 +301,8 @@ void sub_800E9EC(void)
if (species != SPECIES_EGG && hp == 0)
r6 |= 3 << i * 2;
}
- BATTLE_STRUCT->unk2 = r6;
- BATTLE_STRUCT->unk3 = r6 >> 8;
+ gBattleStruct->unk2 = r6;
+ gBattleStruct->unk3 = r6 >> 8;
}
void sub_800EAAC(void)
@@ -398,11 +398,11 @@ void sub_800EC9C(void)
{
if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
{
- BATTLE_STRUCT->unk0 = 1;
- BATTLE_STRUCT->unk1 = 1;
+ gBattleStruct->unk0 = 1;
+ gBattleStruct->unk1 = 1;
sub_800E9EC();
sub_800EAAC();
- SendBlock(bitmask_all_link_players_but_self(), BATTLE_STRUCT, 32);
+ SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32);
gBattleCommunication[0] = 1;
}
}
@@ -458,7 +458,7 @@ void sub_800EC9C(void)
gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 0;
- gTasks[taskId].data[3] = BATTLE_STRUCT->unk2 | (BATTLE_STRUCT->unk3 << 8);
+ gTasks[taskId].data[3] = gBattleStruct->unk2 | (gBattleStruct->unk3 << 8);
gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1];
gBattleCommunication[0]++;
}
@@ -641,8 +641,8 @@ void sub_800F298(void)
case 0:
if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
{
- BATTLE_STRUCT->unk0 = 1;
- BATTLE_STRUCT->unk1 = 1;
+ gBattleStruct->unk0 = 1;
+ gBattleStruct->unk1 = 1;
sub_800E9EC();
sub_800EAAC();
SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20);
@@ -1579,8 +1579,8 @@ void sub_8010874(void)
gDisableStructs[i].isFirstTurn= 2;
gUnknown_02024C70[i] = 0;
gLastUsedMove[i] = 0;
- gMoveHitWith[i] = 0;
- gUnknown_02024C44[i] = 0;
+ gLastLandedMoves[i] = 0;
+ gLastHitByType[i] = 0;
gUnknown_02024C4C[i] = 0;
gUnknown_02024C5C[i] = 0xFF;
gLockedMoves[i] = 0;
@@ -1664,7 +1664,7 @@ void sub_8010874(void)
}
}
-void SwitchInClearStructs(void)
+void SwitchInClearSetData(void)
{
struct DisableStruct sp0 = gDisableStructs[gActiveBank];
s32 i;
@@ -1732,8 +1732,8 @@ void SwitchInClearStructs(void)
gDisableStructs[gActiveBank].isFirstTurn= 2;
gLastUsedMove[gActiveBank] = 0;
- gMoveHitWith[gActiveBank] = 0;
- gUnknown_02024C44[gActiveBank] = 0;
+ gLastLandedMoves[gActiveBank] = 0;
+ gLastHitByType[gActiveBank] = 0;
gUnknown_02024C4C[gActiveBank] = 0;
gUnknown_02024C2C[gActiveBank] = 0;
gUnknown_02024C5C[gActiveBank] = 0xFF;
@@ -1796,8 +1796,8 @@ void UndoEffectsAfterFainting(void)
gDisableStructs[gActiveBank].isFirstTurn= 2;
gLastUsedMove[gActiveBank] = 0;
- gMoveHitWith[gActiveBank] = 0;
- gUnknown_02024C44[gActiveBank] = 0;
+ gLastLandedMoves[gActiveBank] = 0;
+ gLastHitByType[gActiveBank] = 0;
gUnknown_02024C4C[gActiveBank] = 0;
gUnknown_02024C2C[gActiveBank] = 0;
gUnknown_02024C5C[gActiveBank] = 0xFF;
@@ -4222,7 +4222,7 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
+ gBattleStruct->dynamicMoveType = 0;
gBattleMainFunc = RunTurnActionsFunctions;
gBattleCommunication[3] = 0;
gBattleCommunication[4] = 0;
@@ -4235,7 +4235,7 @@ static void RunTurnActionsFunctions(void)
if (gBattleOutcome != 0)
gCurrentActionFuncId = 12;
- BATTLE_STRUCT->unk16057 = gCurrentTurnActionNumber;
+ gBattleStruct->unk16057 = gCurrentTurnActionNumber;
gUnknown_081FA640[gCurrentActionFuncId]();
if (gCurrentTurnActionNumber >= gNoOfAllBanks) // everyone did their actions, turn finished
@@ -4245,7 +4245,7 @@ static void RunTurnActionsFunctions(void)
}
else
{
- if (BATTLE_STRUCT->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank
+ if (gBattleStruct->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank
{
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
@@ -4270,7 +4270,7 @@ void HandleEndTurn_BattleWon(void)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
- BattleMusicStop();
+ BattleStopLowHpSound();
gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon;
switch (gTrainers[gTrainerBattleOpponent].trainerClass)
@@ -5378,8 +5378,8 @@ void HandleAction_ActionFinished(void)
gBattleMoveDamage = 0;
ewram16002 = 0;
ewram160A1 = 0;
- gMoveHitWith[gBankAttacker] = 0;
- gUnknown_02024C44[gBankAttacker] = 0;
+ gLastLandedMoves[gBankAttacker] = 0;
+ gLastHitByType[gBankAttacker] = 0;
eDynamicMoveType = 0;
gDynamicBasePower = 0;
ewram1600C = 0;
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index ae8f94130..3763fc309 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -1,5 +1,8 @@
#include "global.h"
#include "battle.h"
+#include "battle_message.h"
+#include "battle_string_ids.h"
+#include "battle_script_commands.h"
#include "battle_util.h"
#include "constants/battle_move_effects.h"
#include "constants/moves.h"
@@ -22,22 +25,89 @@
#include "pokemon_summary_screen.h"
#include "naming_screen.h"
#include "ewram.h"
+#include "util.h"
+
+// TODO: put this into battle_controllers.h
+
+#define RET_VALUE_LEVELLED_UP 11
+
+enum
+{
+ CONTROLLER_GETMONDATA,
+ CONTROLLER_GETRAWMONDATA,
+ CONTROLLER_SETMONDATA,
+ CONTROLLER_SETRAWMONDATA,
+ CONTROLLER_LOADMONSPRITE,
+ CONTROLLER_SWITCHINANIM,
+ CONTROLLER_RETURNMONTOBALL,
+ CONTROLLER_DRAWTRAINERPIC,
+ CONTROLLER_TRAINERSLIDE,
+ CONTROLLER_TRAINERSLIDEBACK,
+ CONTROLLER_FAINTANIMATION,
+ CONTROLLER_PALETTEFADE,
+ CONTROLLER_SUCCESSBALLTHROWANIM,
+ CONTROLLER_BALLTHROWANIM,
+ CONTROLLER_PAUSE,
+ CONTROLLER_MOVEANIMATION,
+ CONTROLLER_PRINTSTRING,
+ CONTROLLER_PRINTSTRINGPLAYERONLY,
+ CONTROLLER_CHOOSEACTION,
+ CONTROLLER_UNKNOWNYESNOBOX,
+ CONTROLLER_CHOOSEMOVE,
+ CONTROLLER_OPENBAG,
+ CONTROLLER_CHOOSEPOKEMON,
+ CONTROLLER_23,
+ CONTROLLER_HEALTHBARUPDATE,
+ CONTROLLER_EXPUPDATE,
+ CONTROLLER_STATUSICONUPDATE,
+ CONTROLLER_STATUSANIMATION,
+ CONTROLLER_STATUSXOR,
+ CONTROLLER_DATATRANSFER,
+ CONTROLLER_DMA3TRANSFER,
+ CONTROLLER_31,
+ CONTROLLER_32,
+ CONTROLLER_TWORETURNVALUES,
+ CONTROLLER_CHOSENMONRETURNVALUE,
+ CONTROLLER_ONERETURNVALUE,
+ CONTROLLER_ONERETURNVALUE_DUPLICATE,
+ CONTROLLER_37,
+ CONTROLLER_38,
+ CONTROLLER_39,
+ CONTROLLER_40,
+ CONTROLLER_HITANIMATION,
+ CONTROLLER_42,
+ CONTROLLER_EFFECTIVENESSSOUND,
+ CONTROLLER_PLAYFANFAREORBGM,
+ CONTROLLER_FAINTINGCRY,
+ CONTROLLER_INTROSLIDE,
+ CONTROLLER_INTROTRAINERBALLTHROW,
+ CONTROLLER_DRAWPARTYSTATUSSUMMARY,
+ CONTROLLER_49,
+ CONTROLLER_50,
+ CONTROLLER_SPRITEINVISIBILITY,
+ CONTROLLER_BATTLEANIMATION,
+ CONTROLLER_LINKSTANDBYMSG,
+ CONTROLLER_RESETACTIONMOVESELECTION,
+ CONTROLLER_55,
+ /*new controllers should go here*/
+ CONTROLLER_TERMINATOR_NOP,
+ CONTROLLER_CMDS_COUNT
+};
//extern needed variables
extern u8 gCritMultiplier;
extern s32 gBattleMoveDamage;
-extern u32 gStatuses3[4];
+extern u32 gStatuses3[BATTLE_BANKS_COUNT];
extern u16 gBattleTypeFlags;
-extern const u32 gBitTable[];
extern const struct BaseStats gBaseStats[];
-extern struct BattleEnigmaBerry gEnigmaBerries[4];
-extern struct BattlePokemon gBattleMons[4];
+extern struct BattleEnigmaBerry gEnigmaBerries[BATTLE_BANKS_COUNT];
+extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
extern u8 gActiveBank;
extern u32 gBattleExecBuffer;
extern u8 gNoOfAllBanks;
-extern u16 gBattlePartyID[4];
-extern u8 gBanksByTurnOrder[4];
-extern u8 gActionsByTurnOrder[4];
+extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
+extern u8 gBanksByTurnOrder[BATTLE_BANKS_COUNT];
+extern u8 gActionsByTurnOrder[BATTLE_BANKS_COUNT];
extern u16 gCurrentMove;
extern u8 gLastUsedAbility;
extern u16 gBattleWeather;
@@ -57,23 +127,23 @@ extern u8 gBattleTerrain;
extern u16 gTrainerBattleOpponent;
extern u8 gBankAttacker;
extern u8 gBankTarget;
-extern u8* gBattlescriptCurrInstr;
+extern const u8* gBattlescriptCurrInstr;
extern u8 gCurrMovePos;
extern u8 gCurrentActionFuncId;
extern u32 gHitMarker;
extern u8 gBattleMoveFlags;
extern u8 gBattleCommunication[];
-extern u16 gMoveHitWith[4];
-extern u16 gUnknown_02024C44[4];
+extern u16 gLastLandedMoves[4];
+extern u16 gLastHitByType[4];
extern u8 gStringBank;
extern u16 gDynamicBasePower;
extern const u8 gTypeEffectiveness[];
extern u16 gLastUsedItem;
extern u16 gBattleMovePower;
-extern s32 gHP_dealt;
-extern s32 gTakenDmg[4];
-extern u8 gTakenDmgBanks[4];
-extern const u16 gMissStrings[];
+extern s32 gHpDealt;
+extern s32 gTakenDmg[BATTLE_BANKS_COUNT];
+extern u8 gTakenDmgBanks[BATTLE_BANKS_COUNT];
+extern const u16 gMissStringIds[];
extern u8 gSentPokesToOpponent[2];
extern u8 gBank1;
extern u16 gExpShareExp;
@@ -98,32 +168,44 @@ extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one
extern u8 gCurrentTurnActionNumber;
extern u16 gTrappingMoves[];
+extern u8 BattleScript_MoveEffectSleep[];
+extern u8 BattleScript_MoveEffectPoison[];
+extern u8 BattleScript_MoveEffectBurn[];
+extern u8 BattleScript_MoveEffectFreeze[];
+extern u8 BattleScript_MoveEffectParalysis[];
+extern u8 BattleScript_MoveEffectToxic[];
+extern u8 BattleScript_MoveEffectConfusion[];
+extern u8 BattleScript_MoveEffectUproar[];
+extern u8 BattleScript_MoveEffectWrap[];
+extern u8 BattleScript_MoveEffectPayDay[];
+extern u8 BattleScript_MoveEffectRecoil33[];
+
//extern functions
u8 AtkCanceller_UnableToUseMove(void);
void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move);
void CancelMultiTurnMoves(u8 bank);
-void BattleScriptPush(u8* BS_ptr);
+void BattleScriptPush(const u8* BS_ptr);
void BattleScriptPushCursor(void);
void RecordAbilityBattle(u8 bank, u8 ability);
void RecordItemBattle(u8 bank, u8 holdEffect);
static bool8 IsTwoTurnsMove(u16 move);
-static void DestinyBondFlagUpdate(void);
-static void b_wonderguard_and_levitate(void);
+static void TrySetDestinyBondToHappen(void);
+static void CheckWonderGuardAndLevitate(void);
u8 GetBankIdentity(u8 bank);
u8 GetBankSide(u8 bank);
u8 GetBattleBank(u8 bankValue);
s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def);
static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2
void UndoEffectsAfterFainting(void);
-void BattleMusicStop(void);
+void BattleStopLowHpSound(void);
void PlayBGM(u16 songID);
void MonGainEVs(struct Pokemon*, u16 defeatedSpecies);
extern u8 gBattleBufferB[4][0x200];
-void sub_80324F8(struct Pokemon*, u8 bank);
+void HandleLowHpMusicChange(struct Pokemon*, u8 bank);
void AdjustFriendship(struct Pokemon*, u8 value);
bool8 IsTradedMon(struct Pokemon*);
void BattleScriptPop(void);
-void SwitchInClearStructs(void);
+void SwitchInClearSetData(void);
u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8);
u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID);
u16 SpeciesToNationalPokedexNum(u16 species);
@@ -147,7 +229,7 @@ void ReshowBattleScreenAfterMenu(void);
void BattleMainCB2(void);
void AddMoney(u32* moneySaveblock, u32 to_give);
u8 CountAliveMons(u8 caseID);
-void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp);
+void PokemonUseItemEffects(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp);
u8 CanRunFromBattle(void);
u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move
u8 CastformDataTypeChange(u8 bank);
@@ -225,7 +307,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[];
#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr))
-#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
+#define TARGET_PROTECT_AFFECTED ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
//array entries for battle communication
#define MOVE_EFFECT_BYTE 0x3
@@ -267,7 +349,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[];
#define RecordAbilitySetField6(ability, fieldValue) \
(gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability))
-#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special)))
+#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)))
#define HP_ON_SWITCHOUT (((u16*)(ewram_addr + 0x160BC)))
@@ -344,7 +426,7 @@ static void atk45_playanimation(void);
static void atk46_playanimation2(void);
static void atk47_setgraphicalstatchangevalues(void);
static void atk48_playstatchangeanimation(void);
-static void atk49_moveend(void);
+void atk49_moveend(void);
static void atk4A_typecalc2(void);
static void atk4B_returnatktoball(void);
static void atk4C_getswitchedmondata(void);
@@ -408,7 +490,7 @@ static void atk85_stockpile(void);
static void atk86_stockpiletobasedamage(void);
static void atk87_stockpiletohpheal(void);
static void atk88_negativedamage(void);
-static u8 ChangeStatBuffs(s8, u8, u8, u8*);
+static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr);
static void atk89_statbuffchange(void);
static void atk8A_normalisebuffs(void);
static void atk8B_setbide(void);
@@ -521,7 +603,7 @@ static void atkF5_removeattackerstatus1(void);
static void atkF6_finishaction(void);
static void atkF7_finishturn(void);
-const BattleCmdFunc gBattleScriptingCommandsTable[] =
+void (* const gBattleScriptingCommandsTable[])(void) =
{
atk00_attackcanceler,
atk01_accuracycheck,
@@ -773,13 +855,13 @@ const BattleCmdFunc gBattleScriptingCommandsTable[] =
atkF7_finishturn,
};
-struct statFractions
+struct StatFractions
{
u8 dividend;
u8 divisor;
};
-static const struct statFractions gAccuracyStageRatios[] =
+static const struct StatFractions gAccuracyStageRatios[] =
{
{ 33, 100}, // -6
{ 36, 100}, // -5
@@ -796,25 +878,25 @@ static const struct statFractions gAccuracyStageRatios[] =
{ 3, 1}, // +6
};
-//The chance is 1/N for each stage.
-static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2};
+// The chance is 1/N for each stage.
+static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2};
-static const u32 gStatusFlagsForMoveEffects[] =
+static const u32 sStatusFlagsForMoveEffects[] =
{
0x00000000,
- 0x00000007,
- 0x00000008,
- 0x00000010,
- 0x00000020,
- 0x00000040,
- 0x00000080,
- 0x00000007,
- 0x00000008,
+ STATUS_SLEEP,
+ STATUS_POISON,
+ STATUS_BURN,
+ STATUS_FREEZE,
+ STATUS_PARALYSIS,
+ STATUS_TOXIC_POISON,
+ STATUS2_CONFUSION,
+ STATUS2_FLINCHED,
0x00000000,
- 0x00000070,
+ STATUS2_UPROAR,
0x00000000,
- 0x00001000,
- 0x0000E000,
+ STATUS2_MULTIPLETURNS,
+ STATUS2_WRAPPED,
0x00000000,
0x00000000,
0x00000000,
@@ -830,11 +912,11 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000,
0x00000000,
0x00000000,
- 0x00400000,
+ STATUS2_RECHARGE,
0x00000000,
0x00000000,
- 0x04000000,
- 0x08000000,
+ STATUS2_ESCAPE_PREVENTION,
+ STATUS2_NIGHTMARE,
0x00000000,
0x00000000,
0x00000000,
@@ -854,7 +936,7 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000,
0x00000000,
0x00000000,
- 0x00000C00,
+ STATUS2_LOCK_CONFUSE,
0x00000000,
0x00000000,
0x00000000,
@@ -863,18 +945,6 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000
};
-extern u8 BattleScript_MoveEffectSleep[];
-extern u8 BattleScript_MoveEffectPoison[];
-extern u8 BattleScript_MoveEffectBurn[];
-extern u8 BattleScript_MoveEffectFreeze[];
-extern u8 BattleScript_MoveEffectParalysis[];
-extern u8 BattleScript_MoveEffectToxic[];
-extern u8 BattleScript_MoveEffectConfusion[];
-extern u8 BattleScript_MoveEffectUproar[];
-extern u8 BattleScript_MoveEffectWrap[];
-extern u8 BattleScript_MoveEffectPayDay[];
-extern u8 BattleScript_MoveEffectRecoil33[];
-
u8* const gMoveEffectBS_Ptrs[] =
{
BattleScript_MoveEffectSleep,
@@ -920,17 +990,25 @@ u8* const gMoveEffectBS_Ptrs[] =
const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
-const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED};
+const u8 gLevelUpStatBoxStats[] =
+{
+ MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK,
+ MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED
+};
static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF};
-static const u16 sUnknown_081FACFE[] = //banned moves to copy
+#define MIMIC_FORBIDDEN_END 0xFFFE
+#define METRONOME_FORBIDDEN_END 0xFFFF
+#define ASSIST_FORBIDDEN_END 0xFFFF
+
+static const u16 sMovesForbiddenToCopy[] =
{
MOVE_METRONOME,
MOVE_STRUGGLE,
MOVE_SKETCH,
MOVE_MIMIC,
- 0xFFFE,
+ MIMIC_FORBIDDEN_END,
MOVE_COUNTER,
MOVE_MIRROR_COAT,
MOVE_PROTECT,
@@ -945,10 +1023,10 @@ static const u16 sUnknown_081FACFE[] = //banned moves to copy
MOVE_COVET,
MOVE_TRICK,
MOVE_FOCUS_PUNCH,
- 0xFFFF
+ METRONOME_FORBIDDEN_END
};
-static const u8 sUnknown_081FAD26[] = //reversal+flail HP thresholds to power
+static const u8 sFlailHpScaleToPowerTable[] = //reversal+flail HP thresholds to power
{
1, 200,
4, 150,
@@ -972,16 +1050,16 @@ static const u16 sNaturePowerMoves[] =
MOVE_SWIFT
};
-//weight-based damage table for Low Kick
-//format: min. weight (hectograms), base power
-static const u16 sWeightDamage[] =
+// weight-based damage table for Low Kick
+// format: min. weight (hectograms), base power
+static const u16 sWeightToDamageTable[] =
{
100, 20,
250, 40,
500, 60,
1000, 80,
2000, 100,
- -1, -1
+ 0xFFFF, 0xFFFF
};
static const u16 sPickupItems[] =
@@ -1006,23 +1084,24 @@ static const u8 sTerrainToType[] =
TYPE_WATER, // underwater
TYPE_WATER, // water
TYPE_WATER, // pond water
- TYPE_ROCK , // rock
- TYPE_ROCK , // cave
+ TYPE_ROCK, // rock
+ TYPE_ROCK, // cave
TYPE_NORMAL, // building
TYPE_NORMAL, // plain
};
static const u8 sBallCatchBonuses[] =
{
- 20, 15, 10, 15 //Ultra, Great, Poke, Safari
+ 20, 15, 10, 15 // Ultra, Great, Poke, Safari
};
static void atk00_attackcanceler(void)
{
- int i;
- if (gBattleOutcome)
+ s32 i;
+
+ if (gBattleOutcome != 0)
{
- gCurrentActionFuncId = 0xC;
+ gCurrentActionFuncId = ACTION_FINISHED;
return;
}
if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
@@ -1033,7 +1112,7 @@ static void atk00_attackcanceler(void)
}
if (AtkCanceller_UnableToUseMove())
return;
- if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0))
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBankTarget, 0, 0, 0))
return;
if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200)
&& !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))
@@ -1042,22 +1121,27 @@ static void atk00_attackcanceler(void)
gBattleMoveFlags |= MOVESTATUS_MISSED;
return;
}
+
gHitMarker &= ~(HITMARKER_x800000);
+
if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))
{
- u8 disobedient = IsMonDisobedient();
- asm("":::"r0"); //It's impossible to match
- asm("":::"r1");
- if ((disobedient))
+ i = IsMonDisobedient(); // why use the 'i' variable...?
+ switch (i)
{
- if (disobedient == 2)
- gHitMarker |= HITMARKER_OBEYS;
- else
- gBattleMoveFlags |= MOVESTATUS_MISSED;
+ case 0:
+ break;
+ case 2:
+ gHitMarker |= HITMARKER_OBEYS;
+ return;
+ default:
+ gBattleMoveFlags |= MOVESTATUS_MISSED;
return;
}
}
+
gHitMarker |= HITMARKER_OBEYS;
+
if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED)
{
PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT);
@@ -1066,18 +1150,20 @@ static void atk00_attackcanceler(void)
gBattlescriptCurrInstr = BattleScript_MagicCoatBounce;
return;
}
+
for (i = 0; i < gNoOfAllBanks; i++)
{
if ((gProtectStructs[gBanksByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
{
PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH);
gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0;
- BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i];
+ gBattleStruct->scriptingActive = gBanksByTurnOrder[i];
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SnatchedMove;
return;
}
}
+
if (gSpecialStatuses[gBankTarget].lightningRodRedirected)
{
gSpecialStatuses[gBankTarget].lightningRodRedirected = 0;
@@ -1086,14 +1172,14 @@ static void atk00_attackcanceler(void)
gBattlescriptCurrInstr = BattleScript_TookAttack;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
- else if (TargetProtectAffected
+ else if (TARGET_PROTECT_AFFECTED
&& (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST))
&& ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS))))
{
CancelMultiTurnMoves(gBankAttacker);
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = 1;
gBattlescriptCurrInstr++;
}
@@ -1105,25 +1191,25 @@ static void atk00_attackcanceler(void)
static void JumpIfMoveFailed(u8 adder, u16 move)
{
- void* to_store = gBattlescriptCurrInstr + adder;
+ const u8 *BS_ptr = gBattlescriptCurrInstr + adder;
if (gBattleMoveFlags & MOVESTATUS_NOEFFECT)
{
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
- to_store = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- DestinyBondFlagUpdate();
- if (AbilityBattleEffects(3, gBankTarget, 0, 0, move))
+ TrySetDestinyBondToHappen();
+ if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBankTarget, 0, 0, move))
return;
}
- gBattlescriptCurrInstr = to_store;
+ gBattlescriptCurrInstr = BS_ptr;
}
static void atk40_jumpifaffectedbyprotect(void)
{
- if (TargetProtectAffected)
+ if (TARGET_PROTECT_AFFECTED)
{
gBattleMoveFlags |= MOVESTATUS_MISSED;
JumpIfMoveFailed(5, 0);
@@ -1137,13 +1223,13 @@ static void atk40_jumpifaffectedbyprotect(void)
static bool8 JumpIfMoveAffectedByProtect(u16 move)
{
- bool8 affected = 0;
- if (TargetProtectAffected)
+ bool8 affected = FALSE;
+ if (TARGET_PROTECT_AFFECTED)
{
gBattleMoveFlags |= MOVESTATUS_MISSED;
JumpIfMoveFailed(7, move);
gBattleCommunication[6] = 1;
- affected = 1;
+ affected = TRUE;
}
return affected;
}
@@ -1162,6 +1248,7 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
gHitMarker &= ~HITMARKER_IGNORE_ON_AIR;
if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND)
@@ -1170,6 +1257,7 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND;
if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER)
@@ -1178,6 +1266,7 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER;
if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER)
@@ -1186,12 +1275,14 @@ static bool8 AccuracyCalcHelper(u16 move)
JumpIfMoveFailed(7, move);
return TRUE;
}
+
return FALSE;
}
static void atk01_accuracycheck(void)
{
u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
+
if (move == 0xFFFE || move == 0xFFFF)
{
if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker)
@@ -1203,13 +1294,14 @@ static void atk01_accuracycheck(void)
}
else
{
- u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality;
- if (move == 0) {move = gCurrentMove;}
+ u8 type, moveAcc, holdEffect, quality;
+ s8 buff;
+ u16 calc;
- if (BATTLE_STRUCT->dynamicMoveType)
- type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
- else
- type = gBattleMoves[move].type;
+ if (move == 0)
+ move = gCurrentMove;
+
+ GET_MOVE_TYPE(move, type);
if (JumpIfMoveAffectedByProtect(move))
return;
@@ -1227,47 +1319,52 @@ static void atk01_accuracycheck(void)
buff = acc + 6 - gBattleMons[gBankTarget].statStages[STAT_STAGE_EVASION];
}
- if (buff < 0) {buff = 0;}
- if (buff > 0xC) {buff = 0xC;}
+ if (buff < 0)
+ buff = 0;
+ if (buff > 0xC)
+ buff = 0xC;
- MoveAcc = gBattleMoves[move].accuracy;
- //check Thunder on sunny weather
+ moveAcc = gBattleMoves[move].accuracy;
+ // check Thunder on sunny weather
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER)
- MoveAcc = 50;
+ moveAcc = 50;
- calc = gAccuracyStageRatios[buff].dividend * MoveAcc;
+ calc = gAccuracyStageRatios[buff].dividend * moveAcc;
calc /= gAccuracyStageRatios[buff].divisor;
if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES)
- calc = (calc * 130) / 100; //1.3 compound eyes boost
+ calc = (calc * 130) / 100; // 1.3 compound eyes boost
if (WEATHER_HAS_EFFECT && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY)
- calc = (calc * 80) / 100; //1.2 sand veil loss;
+ calc = (calc * 80) / 100; // 1.2 sand veil loss;
if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9)
- calc = (calc * 80) / 100; //1.2 hustle loss;
+ calc = (calc * 80) / 100; // 1.2 hustle loss;
if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
- hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ {
+ holdEffect = gEnigmaBerries[gBankTarget].holdEffect;
+ quality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ }
else
{
- hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item);
}
gStringBank = gBankTarget;
- if (hold_effect == HOLD_EFFECT_EVASION_UP)
+ if (holdEffect == HOLD_EFFECT_EVASION_UP)
calc = (calc * (100 - quality)) / 100;
- //final calculation
+ // final calculation
if ((Random() % 100 + 1) > calc)
{
gBattleMoveFlags |= MOVESTATUS_MISSED;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20))
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE &&
+ (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20))
gBattleCommunication[6] = 2;
else
gBattleCommunication[6] = 0;
- b_wonderguard_and_levitate();
-
+ CheckWonderGuardAndLevitate();
}
JumpIfMoveFailed(7, move);
}
@@ -1288,31 +1385,35 @@ static void atk02_attackstring(void)
static void atk03_ppreduce(void)
{
- int to_deduct = 1;
+ s32 ppToDeduct = 1;
+
if (gBattleExecBuffer)
return;
+
if (!gSpecialStatuses[gBankAttacker].flag20)
{
switch (gBattleMoves[gCurrentMove].target)
{
case TARGET_FOES_AND_ALLY:
- to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0);
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0);
break;
case TARGET_BOTH:
case TARGET_OPPONENTS_FIELD:
- to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0);
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0);
break;
default:
if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE)
- to_deduct++;
+ ppToDeduct++;
break;
}
}
+
if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos])
{
gProtectStructs[gBankAttacker].notFirstStrike = 1;
- if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct)
- gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct;
+
+ if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > ppToDeduct)
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] -= ppToDeduct;
else
gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0;
@@ -1324,56 +1425,45 @@ static void atk03_ppreduce(void)
MarkBufferBankForExecution(gBankAttacker);
}
}
+
gHitMarker &= ~(HITMARKER_NO_PPDEDUCT);
gBattlescriptCurrInstr++;
}
static void atk04_critcalc(void)
{
- u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12;
+ u8 holdEffect;
+ u16 item, critChance;
+
item = gBattleMons[gBankAttacker].item;
+
if (item == ITEM_ENIGMA_BERRY)
- hold_effect = gEnigmaBerries[gBankAttacker].holdEffect;
+ holdEffect = gEnigmaBerries[gBankAttacker].holdEffect;
else
- hold_effect = ItemId_GetHoldEffect(item);
+ holdEffect = ItemId_GetHoldEffect(item);
gStringBank = gBankAttacker;
- if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY)
- adderv3 = 2;
- else
- adderv3 = 0;
-
- if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;}
- adderv5 = adderv3;
- if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;}
-
- if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;}
- adderv6 = adderv5;
- if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;}
-
- adderv7 = 0;
- if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;}
- adderv8 = 2 * adderv7;
- adderv9 = 0;
- if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;}
- adderv11 = 2 * adderv9;
- if (hold_effect == HOLD_EFFECT_SCOPE_LENS)
- {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;}
- else
- {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;}
-
- crit_chance = adderv12;
+ critChance = 2 * ((gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL)
+ + (holdEffect == HOLD_EFFECT_SCOPE_LENS)
+ + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY)
+ + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD);
- if (crit_chance > 4) {crit_chance = 4;}
+ if (critChance > 4)
+ critChance = 4;
if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR)
&& !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT)
&& !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE))
- && !(Random() % gCriticalHitChance[crit_chance]))
+ && !(Random() % sCriticalHitChance[critChance]))
gCritMultiplier = 2;
else
gCritMultiplier = 1;
+
gBattlescriptCurrInstr++;
}
@@ -1382,8 +1472,8 @@ static void atk05_damagecalc(void)
u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1];
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove,
side_hword, gDynamicBasePower,
- BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget);
- gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier;
+ gBattleStruct->dynamicMoveType, gBankAttacker, gBankTarget);
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier;
if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
gBattleMoveDamage *= 2;
@@ -1398,9 +1488,9 @@ void AI_CalcDmg(u8 BankAtk, u8 BankDef)
u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1];
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove,
side_hword, gDynamicBasePower,
- BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef);
+ gBattleStruct->dynamicMoveType, BankAtk, BankDef);
gDynamicBasePower = 0;
- gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier;
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier;
if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
gBattleMoveDamage *= 2;
@@ -1448,8 +1538,8 @@ static void atk06_typecalc(void)
u8 move_type;
if (gCurrentMove != MOVE_STRUGGLE)
{
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ move_type = gBattleStruct->dynamicMoveType & 0x3F;
else
move_type = gBattleMoves[gCurrentMove].type;
@@ -1464,8 +1554,8 @@ static void atk06_typecalc(void)
{
gLastUsedAbility = gBattleMons[gBankTarget].ability;
gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = move_type;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -1501,8 +1591,8 @@ static void atk06_typecalc(void)
{
gLastUsedAbility = ABILITY_WONDER_GUARD;
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = 3;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -1511,7 +1601,7 @@ static void atk06_typecalc(void)
}
gBattlescriptCurrInstr++;
}
-static void b_wonderguard_and_levitate(void)
+static void CheckWonderGuardAndLevitate(void)
{
u8 flags = 0;
int i = 0;
@@ -1520,8 +1610,8 @@ static void b_wonderguard_and_levitate(void)
if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power)
return;
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ move_type = gBattleStruct->dynamicMoveType & 0x3F;
else
move_type = gBattleMoves[gCurrentMove].type;
@@ -1841,12 +1931,12 @@ static void atk09_attackanimation(void)
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_Pausex20;
- BATTLE_STRUCT->animTurn += 1;
- BATTLE_STRUCT->animTargetsHit += 1;
+ gBattleStruct->animTurn += 1;
+ gBattleStruct->animTargetsHit += 1;
}
else
{
- if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit)
+ if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && gBattleStruct->animTargetsHit)
{
gBattlescriptCurrInstr++;
return;
@@ -1855,9 +1945,9 @@ static void atk09_attackanimation(void)
{
gActiveBank = gBankAttacker;
- EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]);
- BATTLE_STRUCT->animTurn += 1;
- BATTLE_STRUCT->animTargetsHit += 1;
+ EmitMoveAnimation(0, gCurrentMove, gBattleStruct->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]);
+ gBattleStruct->animTurn += 1;
+ gBattleStruct->animTargetsHit += 1;
MarkBufferBankForExecution(gBankAttacker);
gBattlescriptCurrInstr++;
}
@@ -1879,49 +1969,60 @@ static void atk0B_healthbarupdate(void)
{
if (gBattleExecBuffer)
return;
- if (gBattleMoveFlags & MOVESTATUS_NOEFFECT)
- goto END;
-
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
- if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
{
- PrepareStringBattle(0x80, gActiveBank);
- goto END;
- }
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
- EmitHealthBarUpdate(0, gBattleMoveDamage);
- MarkBufferBankForExecution(gActiveBank);
+ if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {
+ PrepareStringBattle(0x80, gActiveBank);
+ }
+ else
+ {
+ // Emerald
+ /*
+ s16 healthValue;
- if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0)
- gBattleResults.unk5_0 = 1;
+ s32 currDmg = gBattleMoveDamage;
+ s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign
- END:
- gBattlescriptCurrInstr += 2;
+ if (currDmg <= maxPossibleDmgValue)
+ healthValue = currDmg;
+ else
+ healthValue = maxPossibleDmgValue;
+
+ EmitHealthBarUpdate(0, healthValue);
+ */
+
+ EmitHealthBarUpdate(0, gBattleMoveDamage);
+ MarkBufferBankForExecution(gActiveBank);
+
+ if (GetBankSide(gActiveBank) == SIDE_PLAYER && gBattleMoveDamage > 0)
+ gBattleResults.unk5_0 = 1;
+ }
+ }
+
+ gBattlescriptCurrInstr += 2;
}
static void atk0C_datahpupdate(void)
{
- register u32 move_type asm("r6"); //no idea how to match it otherwise
- u8 dynamic_move_type;
+ u32 moveType;
if (gBattleExecBuffer)
return;
- dynamic_move_type = BATTLE_STRUCT->dynamicMoveType;
- if (dynamic_move_type && !(dynamic_move_type & 0x40))
- {
- move_type = 0x3F;
- move_type &= dynamic_move_type;
- }
+ if (gBattleStruct->dynamicMoveType == 0)
+ moveType = gBattleMoves[gCurrentMove].type;
+ else if (!(gBattleStruct->dynamicMoveType & 0x40))
+ moveType = gBattleStruct->dynamicMoveType & 0x3F;
else
- {
- move_type = gBattleMoves[gCurrentMove].type;
- }
+ moveType = gBattleMoves[gCurrentMove].type;
if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
{
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
{
if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage)
@@ -1929,16 +2030,16 @@ static void atk0C_datahpupdate(void)
if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0)
gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage;
gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage;
- gHP_dealt = gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
}
else
{
if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0)
gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP;
- gHP_dealt = gDisableStructs[gActiveBank].substituteHP;
+ gHpDealt = gDisableStructs[gActiveBank].substituteHP;
gDisableStructs[gActiveBank].substituteHP = 0;
}
- //check substitute fading
+ // check substitute fading
if (gDisableStructs[gActiveBank].substituteHP == 0)
{
gBattlescriptCurrInstr += 2;
@@ -1950,14 +2051,14 @@ static void atk0C_datahpupdate(void)
else
{
gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE);
- if (gBattleMoveDamage < 0) //hp goes up
+ if (gBattleMoveDamage < 0) // hp goes up
{
gBattleMons[gActiveBank].hp -= gBattleMoveDamage;
if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP)
gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP;
}
- else //hp goes down
+ else // hp goes down
{
if (gHitMarker & HITMARKER_x20)
{
@@ -1966,7 +2067,7 @@ static void atk0C_datahpupdate(void)
else
{
gTakenDmg[gActiveBank] += gBattleMoveDamage;
- if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
+ if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
gTakenDmgBanks[gActiveBank] = gBankAttacker;
else
gTakenDmgBanks[gActiveBank] = gBankTarget;
@@ -1975,22 +2076,22 @@ static void atk0C_datahpupdate(void)
if (gBattleMons[gActiveBank].hp > gBattleMoveDamage)
{
gBattleMons[gActiveBank].hp -= gBattleMoveDamage;
- gHP_dealt = gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
}
else
{
- gHP_dealt = gBattleMons[gActiveBank].hp;
+ gHpDealt = gBattleMons[gActiveBank].hp;
gBattleMons[gActiveBank].hp = 0;
}
if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000))
- gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP = gHpDealt;
- if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
+ if (moveType <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
{
- gProtectStructs[gActiveBank].physicalDmg = gHP_dealt;
- gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt;
- if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
+ gProtectStructs[gActiveBank].physicalDmg = gHpDealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
{
gProtectStructs[gActiveBank].physicalBank = gBankAttacker;
gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker;
@@ -2001,11 +2102,11 @@ static void atk0C_datahpupdate(void)
gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget;
}
}
- else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000))
+ else if (moveType > 8 && !(gHitMarker & HITMARKER_x100000))
{
- gProtectStructs[gActiveBank].specialDmg = gHP_dealt;
- gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt;
- if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
+ gProtectStructs[gActiveBank].specialDmg = gHpDealt;
+ gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
{
gProtectStructs[gActiveBank].specialBank = gBankAttacker;
gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker;
@@ -2024,7 +2125,7 @@ static void atk0C_datahpupdate(void)
}
else
{
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0)
gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF;
}
@@ -2048,6 +2149,7 @@ static void atk0E_effectivenesssound(void)
{
if (gBattleExecBuffer)
return;
+
gActiveBank = gBankTarget;
if (!(gBattleMoveFlags & MOVESTATUS_MISSED))
{
@@ -2092,37 +2194,39 @@ static void atk0E_effectivenesssound(void)
static void atk0F_resultmessage(void)
{
- u16 stringID = 0;
+ u32 stringId = 0;
if (gBattleExecBuffer)
return;
if (gBattleMoveFlags & MOVESTATUS_MISSED && (!(gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) || gBattleCommunication[6] > 2))
{
- stringID = gMissStrings[gBattleCommunication[6]];
+ stringId = gMissStringIds[gBattleCommunication[6]];
gBattleCommunication[MSG_DISPLAY] = 1;
}
else
{
gBattleCommunication[MSG_DISPLAY] = 1;
- switch (gBattleMoveFlags & 0xFE)
+ switch (gBattleMoveFlags & (u8)(~(MOVESTATUS_MISSED)))
{
case MOVESTATUS_SUPEREFFECTIVE:
- stringID = 0xDE;
+ stringId = STRINGID_SUPEREFFECTIVE;
break;
case MOVESTATUS_NOTVERYEFFECTIVE:
- stringID = 0xDD;
+ stringId = STRINGID_NOTVERYEFFECTIVE;
break;
case MOVESTATUS_ONEHITKO:
- stringID = 0xDA;
+ stringId = STRINGID_ONEHITKO;
break;
case MOVESTATUS_ENDURED:
- stringID = 0x99;
+ stringId = STRINGID_PKMNENDUREDHIT;
break;
case MOVESTATUS_FAILED:
- goto FAILED;
+ stringId = STRINGID_BUTITFAILED;
+ break;
case MOVESTATUS_NOTAFFECTED:
- goto NOTAFFECTED;
+ stringId = STRINGID_ITDOESNTAFFECT;
+ break;
case MOVESTATUS_HUNGON:
gLastUsedItem = gBattleMons[gBankTarget].item;
gStringBank = gBankTarget;
@@ -2132,8 +2236,9 @@ static void atk0F_resultmessage(void)
return;
default:
if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED)
- NOTAFFECTED:
- stringID = 0x1B;
+ {
+ stringId = STRINGID_ITDOESNTAFFECT;
+ }
else if (gBattleMoveFlags & MOVESTATUS_ONEHITKO)
{
gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO);
@@ -2160,18 +2265,19 @@ static void atk0F_resultmessage(void)
return;
}
else if (gBattleMoveFlags & MOVESTATUS_FAILED)
- FAILED:
- stringID = 0xE5;
+ {
+ stringId = STRINGID_BUTITFAILED;
+ }
else
+ {
gBattleCommunication[MSG_DISPLAY] = 0;
+ }
}
}
- if (stringID)
- {
- register u16 dummy asm("r0") = stringID; //Can't match it otherwise
- PrepareStringBattle(dummy, gBankAttacker);
- }
+ if (stringId)
+ PrepareStringBattle(stringId, gBankAttacker);
+
gBattlescriptCurrInstr++;
}
@@ -2268,12 +2374,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gEffectBank = gBankAttacker; //bank that effects get applied on
gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser);
AffectsUser = EffectAffectsUser;
- BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker
+ gBattleStruct->scriptingActive = gBankTarget; //theoretically the attacker
}
else
{
gEffectBank = gBankTarget;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->scriptingActive = gBankAttacker;
}
if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
@@ -2293,7 +2399,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change
{
- switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
case STATUS_SLEEP:
//check active uproar
@@ -2342,7 +2448,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;}
if (gBattleMons[gEffectBank].status1) {break;}
if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;}
-
+
StatusChanged = 1;
break;
case STATUS_BURN:
@@ -2454,10 +2560,10 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (StatusChanged == 1)
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
- if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP)
+ if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP)
gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2);
else
- gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleMons[gEffectBank].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gActiveBank = gEffectBank;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1);
@@ -2471,7 +2577,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3)
{
- BATTLE_STRUCT->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
+ gBattleStruct->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
}
return;
@@ -2481,12 +2587,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
}
else
{
- if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ if (gBattleMons[gEffectBank].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
gBattlescriptCurrInstr++;
return;
}
- switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
case 7: //confusion
if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO)
@@ -2513,7 +2619,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
else
{
if (BankGetTurnOrder(gEffectBank) > gCurrentTurnActionNumber)
- gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleMons[gEffectBank].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr++; return;
}
break;
@@ -2553,9 +2659,9 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED)
{gBattlescriptCurrInstr++; return;}
gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD;
- BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove;
- (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask.
- BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker;
+ gBattleStruct->wrappedMove[gEffectBank*2] = (u8)gCurrentMove;
+ (1 + gBattleStruct->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask.
+ gBattleStruct->wrappedBy[gEffectBank] = gBankAttacker;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -2564,7 +2670,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattleCommunication[MULTISTRING_CHOOSER]++;
break;
case 14: //25% recoil
- gBattleMoveDamage = (gHP_dealt) / 4;
+ gBattleMoveDamage = (gHpDealt) / 4;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
BattleScriptPush(gBattlescriptCurrInstr + 1);
@@ -2574,8 +2680,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatUp;
}
@@ -2584,8 +2690,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatDown;
}
@@ -2594,8 +2700,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatUp;
}
@@ -2604,8 +2710,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (ChangeStatBuffs(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
- BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
+ gBattleStruct->animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatDown;
}
@@ -2695,7 +2801,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattlescriptCurrInstr = BattleScript_AtkDefDown;
return;
case 38: //33% recoil
- gBattleMoveDamage = gHP_dealt / 3;
+ gBattleMoveDamage = gHpDealt / 3;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
BattleScriptPush(gBattlescriptCurrInstr + 1);
@@ -2894,7 +3000,7 @@ _0801E50C:\n\
bls _0801E518\n\
b _0801EB4A\n\
_0801E518:\n\
- ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\
+ ldr r1, _0801E55C @ =sStatusFlagsForMoveEffects\n\
ldrb r0, [r7, 0x3]\n\
lsls r0, 2\n\
adds r0, r1\n\
@@ -2922,7 +3028,7 @@ _0801E54C: .4byte gBattleMons\n\
_0801E550: .4byte gHitMarker\n\
_0801E554: .4byte gSideAffecting\n\
_0801E558: .4byte gBattleCommunication\n\
-_0801E55C: .4byte gStatusFlagsForMoveEffects\n\
+_0801E55C: .4byte sStatusFlagsForMoveEffects\n\
_0801E560:\n\
cmp r0, 0x40\n\
bne _0801E566\n\
@@ -3552,7 +3658,7 @@ _0801EA1C:\n\
ldr r0, [r0]\n\
adds r0, 0x1\n\
bl BattleScriptPush\n\
- ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\
+ ldr r1, _0801EA60 @ =sStatusFlagsForMoveEffects\n\
ldr r0, _0801EA64 @ =gBattleCommunication\n\
ldrb r0, [r0, 0x3]\n\
lsls r0, 2\n\
@@ -3578,7 +3684,7 @@ _0801EA1C:\n\
.align 2, 0\n\
_0801EA58: .4byte gBattleMoveFlags\n\
_0801EA5C: .4byte gBattlescriptCurrInstr\n\
-_0801EA60: .4byte gStatusFlagsForMoveEffects\n\
+_0801EA60: .4byte sStatusFlagsForMoveEffects\n\
_0801EA64: .4byte gBattleCommunication\n\
_0801EA68: .4byte gBattleMons\n\
_0801EA6C: .4byte gEffectBank\n\
@@ -3688,7 +3794,7 @@ _0801EB4A:\n\
mov r0, r9\n\
adds r0, 0x50\n\
adds r1, r0\n\
- ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\
+ ldr r2, _0801EB84 @ =sStatusFlagsForMoveEffects\n\
ldrb r3, [r7, 0x3]\n\
lsls r0, r3, 2\n\
adds r0, r2\n\
@@ -3710,7 +3816,7 @@ _0801EB78:\n\
ldr r0, [r0]\n\
mov pc, r0\n\
.align 2, 0\n\
-_0801EB84: .4byte gStatusFlagsForMoveEffects\n\
+_0801EB84: .4byte sStatusFlagsForMoveEffects\n\
_0801EB88: .4byte _0801EB8C\n\
.align 2, 0\n\
_0801EB8C:\n\
@@ -3870,7 +3976,7 @@ _0801ED2E:\n\
mov r0, r9\n\
adds r0, 0x50\n\
adds r2, r0\n\
- ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\
+ ldr r1, _0801ED58 @ =sStatusFlagsForMoveEffects\n\
ldr r0, _0801ED5C @ =gBattleCommunication\n\
ldrb r0, [r0, 0x3]\n\
lsls r0, 2\n\
@@ -3882,7 +3988,7 @@ _0801ED2E:\n\
bl _0801F5DC\n\
.align 2, 0\n\
_0801ED54: .4byte gCurrentTurnActionNumber\n\
-_0801ED58: .4byte gStatusFlagsForMoveEffects\n\
+_0801ED58: .4byte sStatusFlagsForMoveEffects\n\
_0801ED5C: .4byte gBattleCommunication\n\
_0801ED60:\n\
mov r3, r8\n\
@@ -4156,7 +4262,7 @@ _0801EFA0: .4byte gBattleCommunication\n\
_0801EFA4: .4byte gTrappingMoves\n\
_0801EFA8:\n\
ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\
- ldr r0, _0801EFDC @ =gHP_dealt\n\
+ ldr r0, _0801EFDC @ =gHpDealt\n\
ldr r0, [r0]\n\
cmp r0, 0\n\
bge _0801EFB4\n\
@@ -4182,7 +4288,7 @@ _0801EFC0:\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801EFD8: .4byte gBattleMoveDamage\n\
-_0801EFDC: .4byte gHP_dealt\n\
+_0801EFDC: .4byte gHpDealt\n\
_0801EFE0: .4byte gBattlescriptCurrInstr\n\
_0801EFE4: .4byte gMoveEffectBS_Ptrs\n\
_0801EFE8: .4byte gBattleCommunication\n\
@@ -4711,7 +4817,7 @@ _0801F45C: .4byte gBattlescriptCurrInstr\n\
_0801F460: .4byte BattleScript_AtkDefDown\n\
_0801F464:\n\
ldr r4, _0801F494 @ =gBattleMoveDamage\n\
- ldr r0, _0801F498 @ =gHP_dealt\n\
+ ldr r0, _0801F498 @ =gHpDealt\n\
ldr r0, [r0]\n\
movs r1, 0x3\n\
bl __divsi3\n\
@@ -4734,7 +4840,7 @@ _0801F47A:\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801F494: .4byte gBattleMoveDamage\n\
-_0801F498: .4byte gHP_dealt\n\
+_0801F498: .4byte gHpDealt\n\
_0801F49C: .4byte gBattlescriptCurrInstr\n\
_0801F4A0: .4byte gMoveEffectBS_Ptrs\n\
_0801F4A4: .4byte gBattleCommunication\n\
@@ -4935,7 +5041,7 @@ static void atk15_seteffectwithchance(void)
else
gBattlescriptCurrInstr++;
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
- BATTLE_STRUCT->unk16112 = 0;
+ gBattleStruct->unk16112 = 0;
}
static void atk16_seteffectprimary(void)
@@ -4952,13 +5058,13 @@ static void atk18_clearstatusfromeffect(void)
{
gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6)
- gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ gBattleMons[gActiveBank].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
else
- gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ gBattleMons[gActiveBank].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
gBattlescriptCurrInstr += 2;
- BATTLE_STRUCT->unk16112 = 0;
+ gBattleStruct->unk16112 = 0;
}
static void atk19_tryfaintmon(void)
@@ -5250,282 +5356,262 @@ static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr
gBattlescriptCurrInstr += 7;
}
-//here we go again...
-#ifdef NONMATCHING
static void atk23_getexp(void)
{
- u8 hold_effect;
- int via_expshare = 0, sent_in;
- u16* exp = &BATTLE_STRUCT->exp;
- gBank1 = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
- sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1];
- switch (BATTLE_STRUCT->getexpStateTracker)
+ u16 item;
+ s32 i; // also used as stringId
+ u8 holdEffect;
+ s32 sentIn;
+
+ s32 viaExpShare = 0;
+ u16* exp = &gBattleStruct->exp;
+
+ gBank1 = GetBattleBank(gBattlescriptCurrInstr[1]);
+ sentIn = gSentPokesToOpponent[(gBank1 & 2) >> 1];
+
+ switch (gBattleStruct->getexpStateTracker)
{
- case 0: //check if should receive exp at all
- if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
- BATTLE_STRUCT->getexpStateTracker = 6; //goto last case
+ case 0: // check if should receive exp at all
+ if (GetBankSide(gBank1) != SIDE_OPPONENT || (gBattleTypeFlags &
+ (BATTLE_TYPE_LINK
+ | BATTLE_TYPE_SAFARI
+ | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_EREADER_TRAINER)))
+ {
+ gBattleStruct->getexpStateTracker = 6; // goto last case
+ }
else
{
- BATTLE_STRUCT->getexpStateTracker++;
- ((u8*)ewram)[0x16113] |= gBitTable[gBattlePartyID[gBank1]];
+ gBattleStruct->getexpStateTracker++;
+ gBattleStruct->unk16113 |= gBitTable[gBattlePartyID[gBank1]];
}
break;
- case 1: //calculate experience points to redistribute
+ case 1: // calculate experience points to redistribute
{
- int via_sent_in = 0;
u16 calculatedExp;
- int i;
- for (i = 0; i < 6; i++)
+ s32 viaSentIn;
+
+ for (viaSentIn = 0, i = 0; i < 6; i++)
{
- u16 item;
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
continue;
- if (gBitTable[i] & sent_in)
- via_sent_in++;
+ if (gBitTable[i] & sentIn)
+ viaSentIn++;
item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+
if (item == ITEM_ENIGMA_BERRY)
- hold_effect = gSaveBlock1.enigmaBerry.holdEffect;
+ holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
else
- hold_effect = ItemId_GetHoldEffect(item);
+ holdEffect = ItemId_GetHoldEffect(item);
- if (hold_effect == HOLD_EFFECT_EXP_SHARE)
- via_expshare++;
+ if (holdEffect == HOLD_EFFECT_EXP_SHARE)
+ viaExpShare++;
}
+
calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7;
- if (via_expshare) //at least one poke is getting exp via exp share
+
+ if (viaExpShare) // at least one mon is getting exp via exp share
{
- calculatedExp /= 2;
- *exp = calculatedExp / via_sent_in;
+ *exp = calculatedExp / 2 / viaSentIn;
if (*exp == 0)
*exp = 1;
- gExpShareExp = calculatedExp / via_expshare;
+ gExpShareExp = calculatedExp / 2 / viaExpShare;
if (gExpShareExp == 0)
gExpShareExp = 1;
}
else
{
- *exp = calculatedExp / via_sent_in;
+ *exp = calculatedExp / viaSentIn;
if (*exp == 0)
*exp = 1;
gExpShareExp = 0;
}
- BATTLE_STRUCT->getexpStateTracker++;
- BATTLE_STRUCT->expGetterID = 0;
- BATTLE_STRUCT->sentInPokes = sent_in;
- } //no break statement
- case 2: //loop; set exp value to the poke in expgetter_id and print message
+
+ gBattleStruct->getexpStateTracker++;
+ gBattleStruct->expGetterID = 0;
+ gBattleStruct->sentInPokes = sentIn;
+ }
+ // fall through
+ case 2: // set exp value to the poke in expgetter_id and print message
if (gBattleExecBuffer == 0)
{
- u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM);
- u8* tracker; u32 zero;
+ item = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HELD_ITEM);
+
if (item == ITEM_ENIGMA_BERRY)
- hold_effect = gSaveBlock1.enigmaBerry.holdEffect;
+ holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
else
- hold_effect = ItemId_GetHoldEffect(item);
+ holdEffect = ItemId_GetHoldEffect(item);
- if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1)))
+ if (holdEffect != HOLD_EFFECT_EXP_SHARE && !(gBattleStruct->sentInPokes & 1))
{
- BATTLE_STRUCT->sentInPokes >>= 1;
- tracker = &BATTLE_STRUCT->getexpStateTracker;
- zero = 0;
- *tracker = 5; //increment looper
- gBattleMoveDamage = zero; //used for exp
+ gBattleStruct->sentInPokes >>= 1;
+ gBattleStruct->getexpStateTracker = 5;
+ gBattleMoveDamage = 0; // used for exp
}
- else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100)
+ else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) == 100)
{
- BATTLE_STRUCT->sentInPokes >>= 1;
- tracker = &BATTLE_STRUCT->getexpStateTracker;
- zero = 0;
- *tracker = 5; //increment looper
- gBattleMoveDamage = zero; //used for exp
+ gBattleStruct->sentInPokes >>= 1;
+ gBattleStruct->getexpStateTracker = 5;
+ gBattleMoveDamage = 0; // used for exp
}
else
{
- //music change in wild battle after fainting a poke
- if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong)
+ // music change in wild battle after fainting a poke
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong)
{
- BattleMusicStop();
+ BattleStopLowHpSound();
PlayBGM(0x161);
- BATTLE_STRUCT->wildVictorySong++;
+ gBattleStruct->wildVictorySong++;
}
- if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP))
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP))
{
- s16 stringID;
- if (BATTLE_STRUCT->sentInPokes & 1)
+ if (gBattleStruct->sentInPokes & 1)
gBattleMoveDamage = *exp;
else
gBattleMoveDamage = 0;
- if (hold_effect == HOLD_EFFECT_EXP_SHARE)
+ if (holdEffect == HOLD_EFFECT_EXP_SHARE)
gBattleMoveDamage += gExpShareExp;
- if (hold_effect == HOLD_EFFECT_LUCKY_EGG)
+ if (holdEffect == HOLD_EFFECT_LUCKY_EGG)
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
- if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID]))
+ if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterID]))
{
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
- stringID = 0x14A;
+ i = 0x14A;
}
else
{
- stringID = 0x149;
- }
+ i = 0x149;
+ }
- //get exp getter bank
+ // get exp getter bank
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2]))
- BATTLE_STRUCT->expGetterBank = 2;
+ if (!(gBattlePartyID[2] != gBattleStruct->expGetterID) && !(gAbsentBankFlags & gBitTable[2]))
+ gBattleStruct->expGetterBank = 2;
else
{
if (!(gAbsentBankFlags & gBitTable[0]))
- BATTLE_STRUCT->expGetterBank = 0;
+ gBattleStruct->expGetterBank = 0;
else
- BATTLE_STRUCT->expGetterBank = 2;
+ gBattleStruct->expGetterBank = 2;
}
}
else
- BATTLE_STRUCT->expGetterBank = 0;
+ gBattleStruct->expGetterBank = 0;
- //buffer poke name
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 4;
- gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank;
- gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
- gBattleTextBuff1[4] = 0xFF;
-
- //buffer 'gained' or 'gained a boosted'
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = stringID;
- stringID = (stringID >> 8) & (0xFF); //this does not want to cooperate
- gBattleTextBuff2[3] = stringID;
- gBattleTextBuff2[4] = 0xFF;
-
- //buffer exp number
- gBattleTextBuff3[0] = 0xFD;
- gBattleTextBuff3[1] = 1;
- gBattleTextBuff3[2] = 4; //word
- gBattleTextBuff3[3] = 5; //max digits
- gBattleTextBuff3[4] = gBattleMoveDamage;
- gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage);
- gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage);
- gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage);
- gBattleTextBuff3[8] = 0xFF;
-
- PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank);
- MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species);
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBank, gBattleStruct->expGetterID)
+
+ // buffer 'gained' or 'gained a boosted'
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, i)
+
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage)
+
+ PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBank);
+ MonGainEVs(&gPlayerParty[gBattleStruct->expGetterID], gBattleMons[gBank1].species);
}
- BATTLE_STRUCT->sentInPokes >>= 1;
- BATTLE_STRUCT->getexpStateTracker++;
+ gBattleStruct->sentInPokes >>= 1;
+ gBattleStruct->getexpStateTracker++;
}
}
break;
- case 3: //Set Stats and give exp
+ case 3: // Set stats and give exp
if (gBattleExecBuffer == 0)
{
- gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0;
- if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100)
+ gBattleBufferB[gBattleStruct->expGetterBank][0] = 0;
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) != 100)
{
- // Doesn't match.
- BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
- BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
- BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
- BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED);
- BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
- BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF);
-
- gActiveBank = BATTLE_STRUCT->expGetterBank;
- EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage);
+ gBattleResources_statsBeforeLvlUp->hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP);
+ gBattleResources_statsBeforeLvlUp->atk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK);
+ gBattleResources_statsBeforeLvlUp->def = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF);
+ gBattleResources_statsBeforeLvlUp->spd = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleResources_statsBeforeLvlUp->spAtk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK);
+ gBattleResources_statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF);
+
+ gActiveBank = gBattleStruct->expGetterBank;
+ EmitExpBarUpdate(0, gBattleStruct->expGetterID, gBattleMoveDamage);
MarkBufferBankForExecution(gActiveBank);
}
- BATTLE_STRUCT->getexpStateTracker++;
+ gBattleStruct->getexpStateTracker++;
}
break;
- case 4: //lvl up if necessary
+ case 4: // lvl up if necessary
if (gBattleExecBuffer == 0)
{
- gActiveBank = BATTLE_STRUCT->expGetterBank;
- if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB)
+ gActiveBank = gBattleStruct->expGetterBank;
+ if (gBattleBufferB[gActiveBank][0] == CONTROLLER_TWORETURNVALUES
+ && gBattleBufferB[gActiveBank][1] == RET_VALUE_LEVELLED_UP)
{
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID)
- sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank);
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID)
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- //buff poke name
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 4;
- gBattleTextBuff1[2] = gActiveBank;
- gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
- gBattleTextBuff1[4] = 0xFF;
-
- //buff level
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 1;
- gBattleTextBuff2[2] = 1;
- gBattleTextBuff2[3] = 3;
- gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
- gBattleTextBuff2[5] = 0xFF;
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBank, gBattleStruct->expGetterID)
+
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL))
BattleScriptPushCursor();
- gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID];
+ gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterID];
gBattlescriptCurrInstr = BattleScript_LevelUp;
gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8));
- AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0);
+ AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterID], 0);
- //update battle mon structure after level up
- if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp)
+ // update battle mon structure after level up
+ if (gBattlePartyID[0] == gBattleStruct->expGetterID && gBattleMons[0].hp)
{
- gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
- gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP);
- gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
- gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
- gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
- gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED);
- gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
- gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF);
+ gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL);
+ gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP);
+ gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP);
+ gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK);
+ gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF);
+ // Why is this duplicated?
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK);
+ gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF);
}
- //What is else if? Guess it's too advanced for GameFreak
- if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ // What is else if?
+ if (gBattlePartyID[2] == gBattleStruct->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
- gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL);
- gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP);
- gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
- gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
- gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
- //There are no words...GF can't even copy&paste code properly
- gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED);
- gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED /*RIP*/);
- gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK);
+ gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL);
+ gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP);
+ gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP);
+ gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK);
+ gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF);
+ // Duplicated again, but this time there's no Sp Defense
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED);
+ gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK);
}
- BATTLE_STRUCT->getexpStateTracker = 5;
}
else
{
gBattleMoveDamage = 0;
- BATTLE_STRUCT->getexpStateTracker = 5;
}
+ gBattleStruct->getexpStateTracker = 5;
}
break;
- case 5: //looper increment
- if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp
- BATTLE_STRUCT->getexpStateTracker = 3;
+ case 5: // looper increment
+ if (gBattleMoveDamage) // there is exp to give, goto case 3 that gives exp
+ gBattleStruct->getexpStateTracker = 3;
else
{
- if (++BATTLE_STRUCT->expGetterID <= 5)
- BATTLE_STRUCT->getexpStateTracker = 2; //loop again
+ gBattleStruct->expGetterID++;
+ if (gBattleStruct->expGetterID <= 5)
+ gBattleStruct->getexpStateTracker = 2; // loop again
else
- BATTLE_STRUCT->getexpStateTracker = 6; //we're done
+ gBattleStruct->getexpStateTracker = 6; // we're done
}
break;
- case 6: //increment instruction
+ case 6: // increment instruction
if (gBattleExecBuffer == 0)
{
- //not even sure why gamefreak clears that data in this place
+ // not sure why gf clears the item and ability here
gBattleMons[gBank1].item = 0;
gBattleMons[gBank1].ability = 0;
gBattlescriptCurrInstr += 2;
@@ -5533,1138 +5619,6 @@ static void atk23_getexp(void)
break;
}
}
-#else
-__attribute__((naked))
-static void atk23_getexp(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- movs r6, 0\n\
- ldr r0, _0802004C @ =gSharedMem + 0x1605C\n\
- mov r10, r0\n\
- ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x1]\n\
- bl GetBattleBank\n\
- ldr r1, _08020054 @ =gBank1\n\
- strb r0, [r1]\n\
- ldr r2, _08020058 @ =gSentPokesToOpponent\n\
- movs r1, 0x2\n\
- ands r1, r0\n\
- lsls r1, 24\n\
- lsrs r1, 25\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- mov r8, r1\n\
- mov r0, r10\n\
- subs r0, 0x4D\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x6\n\
- bls _08020040\n\
- bl _08020996\n\
-_08020040:\n\
- lsls r0, 2\n\
- ldr r1, _0802005C @ =_08020060\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_0802004C: .4byte gSharedMem + 0x1605C\n\
-_08020050: .4byte gBattlescriptCurrInstr\n\
-_08020054: .4byte gBank1\n\
-_08020058: .4byte gSentPokesToOpponent\n\
-_0802005C: .4byte _08020060\n\
- .align 2, 0\n\
-_08020060:\n\
- .4byte _0802007C\n\
- .4byte _080200FC\n\
- .4byte _08020216\n\
- .4byte _0802055C\n\
- .4byte _08020648\n\
- .4byte _08020910\n\
- .4byte _0802096C\n\
-_0802007C:\n\
- ldr r4, _080200A8 @ =gBank1\n\
- ldrb r0, [r4]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _08020098\n\
- ldr r0, _080200AC @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- ldr r0, _080200B0 @ =0x00000982\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080200BC\n\
-_08020098:\n\
- ldr r0, _080200B4 @ =gSharedMem\n\
- ldr r1, _080200B8 @ =0x0001600f\n\
- adds r0, r1\n\
- movs r1, 0x6\n\
- strb r1, [r0]\n\
- bl _08020996\n\
- .align 2, 0\n\
-_080200A8: .4byte gBank1\n\
-_080200AC: .4byte gBattleTypeFlags\n\
-_080200B0: .4byte 0x00000982\n\
-_080200B4: .4byte gSharedMem\n\
-_080200B8: .4byte 0x0001600f\n\
-_080200BC:\n\
- ldr r2, _080200E8 @ =gSharedMem\n\
- ldr r3, _080200EC @ =0x0001600f\n\
- adds r1, r2, r3\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- ldr r0, _080200F0 @ =0x00016113\n\
- adds r2, r0\n\
- ldr r3, _080200F4 @ =gBitTable\n\
- ldr r1, _080200F8 @ =gBattlePartyID\n\
- ldrb r0, [r4]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldr r0, [r0]\n\
- ldrb r1, [r2]\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- bl _08020996\n\
- .align 2, 0\n\
-_080200E8: .4byte gSharedMem\n\
-_080200EC: .4byte 0x0001600f\n\
-_080200F0: .4byte 0x00016113\n\
-_080200F4: .4byte gBitTable\n\
-_080200F8: .4byte gBattlePartyID\n\
-_080200FC:\n\
- movs r5, 0\n\
- movs r7, 0\n\
- ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\
- mov r9, r1\n\
-_08020104:\n\
- movs r0, 0x64\n\
- adds r1, r7, 0\n\
- muls r1, r0\n\
- ldr r0, _08020154 @ =gPlayerParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0802016A\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0802016A\n\
- ldr r0, _08020158 @ =gBitTable\n\
- lsls r1, r7, 2\n\
- adds r1, r0\n\
- ldr r0, [r1]\n\
- mov r2, r8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _08020138\n\
- adds r5, 0x1\n\
-_08020138:\n\
- adds r0, r4, 0\n\
- movs r1, 0xC\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0xAF\n\
- bne _0802015C\n\
- mov r3, r9\n\
- ldrb r4, [r3]\n\
- b _08020164\n\
- .align 2, 0\n\
-_08020150: .4byte gSaveBlock1 + 0x3688\n\
-_08020154: .4byte gPlayerParty\n\
-_08020158: .4byte gBitTable\n\
-_0802015C:\n\
- bl ItemId_GetHoldEffect\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_08020164:\n\
- cmp r4, 0x19\n\
- bne _0802016A\n\
- adds r6, 0x1\n\
-_0802016A:\n\
- adds r7, 0x1\n\
- cmp r7, 0x5\n\
- ble _08020104\n\
- ldr r3, _080201D0 @ =gBaseStats\n\
- ldr r2, _080201D4 @ =gBattleMons\n\
- ldr r0, _080201D8 @ =gBank1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r1, r0\n\
- adds r1, r2\n\
- ldrh r2, [r1]\n\
- lsls r0, r2, 3\n\
- subs r0, r2\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldrb r2, [r0, 0x9]\n\
- adds r1, 0x2A\n\
- ldrb r0, [r1]\n\
- muls r0, r2\n\
- movs r1, 0x7\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- cmp r6, 0\n\
- beq _080201E0\n\
- lsrs r4, r0, 17\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl __divsi3\n\
- mov r1, r10\n\
- strh r0, [r1]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080201B6\n\
- movs r0, 0x1\n\
- strh r0, [r1]\n\
-_080201B6:\n\
- ldr r5, _080201DC @ =gExpShareExp\n\
- adds r0, r4, 0\n\
- adds r1, r6, 0\n\
- bl __divsi3\n\
- strh r0, [r5]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080201FA\n\
- movs r0, 0x1\n\
- strh r0, [r5]\n\
- b _080201FA\n\
- .align 2, 0\n\
-_080201D0: .4byte gBaseStats\n\
-_080201D4: .4byte gBattleMons\n\
-_080201D8: .4byte gBank1\n\
-_080201DC: .4byte gExpShareExp\n\
-_080201E0:\n\
- adds r0, r1, 0\n\
- adds r1, r5, 0\n\
- bl __divsi3\n\
- mov r2, r10\n\
- strh r0, [r2]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080201F6\n\
- movs r0, 0x1\n\
- strh r0, [r2]\n\
-_080201F6:\n\
- ldr r0, _08020248 @ =gExpShareExp\n\
- strh r6, [r0]\n\
-_080201FA:\n\
- ldr r1, _0802024C @ =gSharedMem\n\
- ldr r3, _08020250 @ =0x0001600f\n\
- adds r2, r1, r3\n\
- ldrb r0, [r2]\n\
- adds r0, 0x1\n\
- movs r3, 0\n\
- strb r0, [r2]\n\
- ldr r2, _08020254 @ =0x00016018\n\
- adds r0, r1, r2\n\
- strb r3, [r0]\n\
- ldr r3, _08020258 @ =0x0001605f\n\
- adds r1, r3\n\
- mov r0, r8\n\
- strb r0, [r1]\n\
-_08020216:\n\
- ldr r0, _0802025C @ =gBattleExecBuffer\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _08020220\n\
- b _08020996\n\
-_08020220:\n\
- ldr r0, _0802024C @ =gSharedMem\n\
- ldr r1, _08020254 @ =0x00016018\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020260 @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0xC\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0xAF\n\
- bne _0802026C\n\
- ldr r0, _08020264 @ =gSaveBlock1\n\
- ldr r2, _08020268 @ =0x00003688\n\
- adds r0, r2\n\
- ldrb r4, [r0]\n\
- b _08020274\n\
- .align 2, 0\n\
-_08020248: .4byte gExpShareExp\n\
-_0802024C: .4byte gSharedMem\n\
-_08020250: .4byte 0x0001600f\n\
-_08020254: .4byte 0x00016018\n\
-_08020258: .4byte 0x0001605f\n\
-_0802025C: .4byte gBattleExecBuffer\n\
-_08020260: .4byte gPlayerParty\n\
-_08020264: .4byte gSaveBlock1\n\
-_08020268: .4byte 0x00003688\n\
-_0802026C:\n\
- bl ItemId_GetHoldEffect\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_08020274:\n\
- ldr r5, _08020294 @ =gSharedMem\n\
- cmp r4, 0x19\n\
- beq _080202A0\n\
- ldr r3, _08020298 @ =0x0001605f\n\
- adds r1, r5, r3\n\
- ldrb r0, [r1]\n\
- movs r2, 0x1\n\
- ands r2, r0\n\
- cmp r2, 0\n\
- bne _080202A0\n\
- lsrs r0, 1\n\
- strb r0, [r1]\n\
- ldr r0, _0802029C @ =0x0001600f\n\
- adds r1, r5, r0\n\
- b _080202C8\n\
- .align 2, 0\n\
-_08020294: .4byte gSharedMem\n\
-_08020298: .4byte 0x0001605f\n\
-_0802029C: .4byte 0x0001600f\n\
-_080202A0:\n\
- ldr r1, _080202D4 @ =0x00016018\n\
- adds r0, r5, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _080202D8 @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- cmp r0, 0x64\n\
- bne _080202E8\n\
- ldr r2, _080202DC @ =0x0001605f\n\
- adds r1, r5, r2\n\
- ldrb r0, [r1]\n\
- lsrs r0, 1\n\
- movs r2, 0\n\
- strb r0, [r1]\n\
- ldr r3, _080202E0 @ =0x0001600f\n\
- adds r1, r5, r3\n\
-_080202C8:\n\
- movs r0, 0x5\n\
- strb r0, [r1]\n\
- ldr r0, _080202E4 @ =gBattleMoveDamage\n\
- str r2, [r0]\n\
- b _08020996\n\
- .align 2, 0\n\
-_080202D4: .4byte 0x00016018\n\
-_080202D8: .4byte gPlayerParty\n\
-_080202DC: .4byte 0x0001605f\n\
-_080202E0: .4byte 0x0001600f\n\
-_080202E4: .4byte gBattleMoveDamage\n\
-_080202E8:\n\
- ldr r0, _0802034C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08020316\n\
- ldr r0, _08020350 @ =gBattleMons\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _08020316\n\
- ldr r0, _08020354 @ =0x0001601b\n\
- adds r5, r0\n\
- ldrb r0, [r5]\n\
- cmp r0, 0\n\
- bne _08020316\n\
- bl BattleMusicStop\n\
- ldr r0, _08020358 @ =0x00000161\n\
- bl PlayBGM\n\
- ldrb r0, [r5]\n\
- adds r0, 0x1\n\
- strb r0, [r5]\n\
-_08020316:\n\
- ldr r5, _0802035C @ =gSharedMem\n\
- ldr r1, _08020360 @ =0x00016018\n\
- adds r0, r5, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020364 @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _08020332\n\
- b _0802051E\n\
-_08020332:\n\
- ldr r2, _08020368 @ =0x0001605f\n\
- adds r0, r5, r2\n\
- ldrb r0, [r0]\n\
- movs r3, 0x1\n\
- ands r3, r0\n\
- cmp r3, 0\n\
- beq _08020370\n\
- ldr r1, _0802036C @ =gBattleMoveDamage\n\
- mov r3, r10\n\
- ldrh r0, [r3]\n\
- str r0, [r1]\n\
- mov r8, r1\n\
- b _08020376\n\
- .align 2, 0\n\
-_0802034C: .4byte gBattleTypeFlags\n\
-_08020350: .4byte gBattleMons\n\
-_08020354: .4byte 0x0001601b\n\
-_08020358: .4byte 0x00000161\n\
-_0802035C: .4byte gSharedMem\n\
-_08020360: .4byte 0x00016018\n\
-_08020364: .4byte gPlayerParty\n\
-_08020368: .4byte 0x0001605f\n\
-_0802036C: .4byte gBattleMoveDamage\n\
-_08020370:\n\
- ldr r0, _080203EC @ =gBattleMoveDamage\n\
- str r3, [r0]\n\
- mov r8, r0\n\
-_08020376:\n\
- cmp r4, 0x19\n\
- bne _08020386\n\
- ldr r0, _080203F0 @ =gExpShareExp\n\
- ldrh r1, [r0]\n\
- mov r2, r8\n\
- ldr r0, [r2]\n\
- adds r0, r1\n\
- str r0, [r2]\n\
-_08020386:\n\
- cmp r4, 0x28\n\
- bne _0802039C\n\
- mov r3, r8\n\
- ldr r1, [r3]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
-_0802039C:\n\
- ldr r0, _080203F4 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080203B8\n\
- ldr r4, _080203EC @ =gBattleMoveDamage\n\
- ldr r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- str r0, [r4]\n\
-_080203B8:\n\
- ldr r0, _080203F8 @ =gSharedMem\n\
- ldr r2, _080203FC @ =0x00016018\n\
- adds r0, r2\n\
- ldrb r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020400 @ =gPlayerParty\n\
- adds r0, r1\n\
- bl IsTradedMon\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08020404\n\
- ldr r4, _080203EC @ =gBattleMoveDamage\n\
- ldr r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- str r0, [r4]\n\
- movs r7, 0xA5\n\
- lsls r7, 1\n\
- mov r8, r4\n\
- b _0802040A\n\
- .align 2, 0\n\
-_080203EC: .4byte gBattleMoveDamage\n\
-_080203F0: .4byte gExpShareExp\n\
-_080203F4: .4byte gBattleTypeFlags\n\
-_080203F8: .4byte gSharedMem\n\
-_080203FC: .4byte 0x00016018\n\
-_08020400: .4byte gPlayerParty\n\
-_08020404:\n\
- ldr r7, _0802043C @ =0x00000149\n\
- ldr r3, _08020440 @ =gBattleMoveDamage\n\
- mov r8, r3\n\
-_0802040A:\n\
- ldr r0, _08020444 @ =gBattleTypeFlags\n\
- ldrh r0, [r0]\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _08020488\n\
- ldr r1, _08020448 @ =gBattlePartyID\n\
- ldr r0, _0802044C @ =gSharedMem\n\
- ldr r3, _08020450 @ =0x00016018\n\
- adds r2, r0, r3\n\
- ldrh r1, [r1, 0x4]\n\
- adds r5, r0, 0\n\
- ldr r4, _08020454 @ =gBitTable\n\
- ldr r3, _08020458 @ =gAbsentBankFlags\n\
- ldrb r2, [r2]\n\
- cmp r1, r2\n\
- bne _08020460\n\
- ldrb r1, [r3]\n\
- ldr r0, [r4, 0x8]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _08020460\n\
- ldr r0, _0802045C @ =0x000160a2\n\
- adds r1, r5, r0\n\
- b _0802047C\n\
- .align 2, 0\n\
-_0802043C: .4byte 0x00000149\n\
-_08020440: .4byte gBattleMoveDamage\n\
-_08020444: .4byte gBattleTypeFlags\n\
-_08020448: .4byte gBattlePartyID\n\
-_0802044C: .4byte gSharedMem\n\
-_08020450: .4byte 0x00016018\n\
-_08020454: .4byte gBitTable\n\
-_08020458: .4byte gAbsentBankFlags\n\
-_0802045C: .4byte 0x000160a2\n\
-_08020460:\n\
- ldrb r2, [r3]\n\
- ldr r0, [r4]\n\
- ands r2, r0\n\
- cmp r2, 0\n\
- bne _08020478\n\
- ldr r1, _08020474 @ =0x000160a2\n\
- adds r0, r5, r1\n\
- strb r2, [r0]\n\
- b _08020490\n\
- .align 2, 0\n\
-_08020474: .4byte 0x000160a2\n\
-_08020478:\n\
- ldr r2, _08020484 @ =0x000160a2\n\
- adds r1, r5, r2\n\
-_0802047C:\n\
- movs r0, 0x2\n\
- strb r0, [r1]\n\
- b _08020490\n\
- .align 2, 0\n\
-_08020484: .4byte 0x000160a2\n\
-_08020488:\n\
- ldr r0, _08020530 @ =gSharedMem\n\
- ldr r3, _08020534 @ =0x000160a2\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
-_08020490:\n\
- ldr r1, _08020538 @ =gBattleTextBuff1\n\
- movs r3, 0\n\
- movs r2, 0xFD\n\
- strb r2, [r1]\n\
- movs r5, 0x4\n\
- strb r5, [r1, 0x1]\n\
- ldr r4, _08020530 @ =gSharedMem\n\
- ldr r0, _08020534 @ =0x000160a2\n\
- adds r6, r4, r0\n\
- ldrb r0, [r6]\n\
- strb r0, [r1, 0x2]\n\
- ldr r0, _0802053C @ =0x00016018\n\
- adds r4, r0\n\
- ldrb r0, [r4]\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08020540 @ =gBattleTextBuff2\n\
- strb r2, [r1]\n\
- strb r3, [r1, 0x1]\n\
- strb r7, [r1, 0x2]\n\
- movs r3, 0xFF\n\
- lsls r3, 8\n\
- ands r7, r3\n\
- asrs r0, r7, 8\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08020544 @ =gBattleTextBuff3\n\
- strb r2, [r1]\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x1]\n\
- strb r5, [r1, 0x2]\n\
- movs r0, 0x5\n\
- strb r0, [r1, 0x3]\n\
- mov r0, r8\n\
- ldr r2, [r0]\n\
- strb r2, [r1, 0x4]\n\
- adds r0, r2, 0\n\
- ands r0, r3\n\
- asrs r0, 8\n\
- strb r0, [r1, 0x5]\n\
- movs r0, 0xFF\n\
- lsls r0, 16\n\
- ands r0, r2\n\
- asrs r0, 16\n\
- strb r0, [r1, 0x6]\n\
- lsrs r2, 24\n\
- strb r2, [r1, 0x7]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r1, 0x8]\n\
- ldrb r1, [r6]\n\
- movs r0, 0xD\n\
- bl PrepareStringBattle\n\
- ldrb r1, [r4]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _08020548 @ =gPlayerParty\n\
- adds r0, r1\n\
- ldr r3, _0802054C @ =gBattleMons\n\
- ldr r1, _08020550 @ =gBank1\n\
- ldrb r2, [r1]\n\
- movs r1, 0x58\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrh r1, [r1]\n\
- bl MonGainEVs\n\
-_0802051E:\n\
- ldr r1, _08020530 @ =gSharedMem\n\
- ldr r3, _08020554 @ =0x0001605f\n\
- adds r2, r1, r3\n\
- ldrb r0, [r2]\n\
- lsrs r0, 1\n\
- strb r0, [r2]\n\
- ldr r0, _08020558 @ =0x0001600f\n\
- adds r1, r0\n\
- b _08020618\n\
- .align 2, 0\n\
-_08020530: .4byte gSharedMem\n\
-_08020534: .4byte 0x000160a2\n\
-_08020538: .4byte gBattleTextBuff1\n\
-_0802053C: .4byte 0x00016018\n\
-_08020540: .4byte gBattleTextBuff2\n\
-_08020544: .4byte gBattleTextBuff3\n\
-_08020548: .4byte gPlayerParty\n\
-_0802054C: .4byte gBattleMons\n\
-_08020550: .4byte gBank1\n\
-_08020554: .4byte 0x0001605f\n\
-_08020558: .4byte 0x0001600f\n\
-_0802055C:\n\
- ldr r0, _08020620 @ =gBattleExecBuffer\n\
- ldr r2, [r0]\n\
- cmp r2, 0\n\
- beq _08020566\n\
- b _08020996\n\
-_08020566:\n\
- ldr r1, _08020624 @ =gBattleBufferB\n\
- ldr r4, _08020628 @ =gSharedMem\n\
- ldr r3, _0802062C @ =0x000160a2\n\
- adds r3, r4\n\
- mov r8, r3\n\
- ldrb r0, [r3]\n\
- lsls r0, 9\n\
- adds r0, r1\n\
- strb r2, [r0]\n\
- ldr r0, _08020630 @ =0x00016018\n\
- adds r7, r4, r0\n\
- ldrb r0, [r7]\n\
- movs r6, 0x64\n\
- muls r0, r6\n\
- ldr r5, _08020634 @ =gPlayerParty\n\
- adds r0, r5\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08020612\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- cmp r0, 0x64\n\
- beq _08020612\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- ldr r1, _08020638 @ =0x00017180\n\
- adds r4, r1\n\
- strh r0, [r4]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3B\n\
- bl GetMonData\n\
- strh r0, [r4, 0x2]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3C\n\
- bl GetMonData\n\
- strh r0, [r4, 0x4]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- strh r0, [r4, 0x6]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3E\n\
- bl GetMonData\n\
- strh r0, [r4, 0x8]\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- movs r1, 0x3F\n\
- bl GetMonData\n\
- strh r0, [r4, 0xA]\n\
- ldr r4, _0802063C @ =gActiveBank\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- strb r0, [r4]\n\
- ldrb r1, [r7]\n\
- ldr r0, _08020640 @ =gBattleMoveDamage\n\
- ldrh r2, [r0]\n\
- movs r0, 0\n\
- bl EmitExpBarUpdate\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
-_08020612:\n\
- ldr r1, _08020628 @ =gSharedMem\n\
- ldr r3, _08020644 @ =0x0001600f\n\
- adds r1, r3\n\
-_08020618:\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020620: .4byte gBattleExecBuffer\n\
-_08020624: .4byte gBattleBufferB\n\
-_08020628: .4byte gSharedMem\n\
-_0802062C: .4byte 0x000160a2\n\
-_08020630: .4byte 0x00016018\n\
-_08020634: .4byte gPlayerParty\n\
-_08020638: .4byte 0x00017180\n\
-_0802063C: .4byte gActiveBank\n\
-_08020640: .4byte gBattleMoveDamage\n\
-_08020644: .4byte 0x0001600f\n\
-_08020648:\n\
- ldr r0, _080208AC @ =gBattleExecBuffer\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _08020652\n\
- b _08020996\n\
-_08020652:\n\
- ldr r1, _080208B0 @ =gActiveBank\n\
- ldr r4, _080208B4 @ =gSharedMem\n\
- ldr r2, _080208B8 @ =0x000160a2\n\
- adds r0, r4, r2\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r2, _080208BC @ =gBattleBufferB\n\
- ldrb r3, [r1]\n\
- lsls r1, r3, 9\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x21\n\
- beq _0802066E\n\
- b _080208F0\n\
-_0802066E:\n\
- adds r0, r2, 0x1\n\
- adds r0, r1, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xB\n\
- beq _0802067A\n\
- b _080208F0\n\
-_0802067A:\n\
- ldr r0, _080208C0 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080206A8\n\
- ldr r1, _080208C4 @ =gBattlePartyID\n\
- lsls r0, r3, 1\n\
- adds r2, r0, r1\n\
- ldr r0, _080208C8 @ =0x00016018\n\
- adds r1, r4, r0\n\
- ldrh r0, [r2]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bne _080206A8\n\
- adds r1, r0, 0\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _080208CC @ =gPlayerParty\n\
- adds r0, r1\n\
- adds r1, r3, 0\n\
- bl sub_80324F8\n\
-_080206A8:\n\
- ldr r1, _080208D0 @ =gBattleTextBuff1\n\
- movs r2, 0xFD\n\
- strb r2, [r1]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r5, _080208B0 @ =gActiveBank\n\
- ldrb r0, [r5]\n\
- strb r0, [r1, 0x2]\n\
- ldr r0, _080208B4 @ =gSharedMem\n\
- ldr r3, _080208C8 @ =0x00016018\n\
- adds r6, r0, r3\n\
- ldrb r0, [r6]\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r4, _080208D4 @ =gBattleTextBuff2\n\
- strb r2, [r4]\n\
- movs r0, 0x1\n\
- strb r0, [r4, 0x1]\n\
- strb r0, [r4, 0x2]\n\
- movs r0, 0x3\n\
- strb r0, [r4, 0x3]\n\
- ldrb r0, [r6]\n\
- movs r1, 0x64\n\
- mov r8, r1\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- ldr r7, _080208CC @ =gPlayerParty\n\
- adds r0, r7\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- strb r0, [r4, 0x4]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r4, 0x5]\n\
- bl BattleScriptPushCursor\n\
- ldr r2, _080208D8 @ =gLeveledUpInBattle\n\
- ldr r1, _080208DC @ =gBitTable\n\
- ldrb r0, [r6]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- ldrb r1, [r2]\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080208E4 @ =BattleScript_LevelUp\n\
- str r0, [r1]\n\
- ldr r4, _080208E8 @ =gBattleMoveDamage\n\
- ldr r2, _080208BC @ =gBattleBufferB\n\
- ldrb r1, [r5]\n\
- lsls r1, 9\n\
- adds r0, r2, 0x2\n\
- adds r0, r1, r0\n\
- ldrb r3, [r0]\n\
- adds r2, 0x3\n\
- adds r1, r2\n\
- ldrb r0, [r1]\n\
- lsls r0, 8\n\
- orrs r3, r0\n\
- str r3, [r4]\n\
- ldrb r0, [r6]\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r0, r7\n\
- movs r1, 0\n\
- bl AdjustFriendship\n\
- ldr r0, _080208C4 @ =gBattlePartyID\n\
- ldrb r1, [r6]\n\
- ldrh r0, [r0]\n\
- cmp r0, r1\n\
- bne _080207EC\n\
- ldr r4, _080208EC @ =gBattleMons\n\
- ldrh r0, [r4, 0x28]\n\
- cmp r0, 0\n\
- beq _080207EC\n\
- mov r0, r8\n\
- muls r0, r1\n\
- adds r0, r7\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- adds r1, r4, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r6]\n\
- mov r1, r8\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r7\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- strh r0, [r4, 0x28]\n\
- ldrb r0, [r6]\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r7\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- strh r0, [r4, 0x2C]\n\
- ldrb r0, [r6]\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r0, r7\n\
- movs r1, 0x3B\n\
- bl GetMonData\n\
- strh r0, [r4, 0x2]\n\
- ldrb r0, [r6]\n\
- mov r1, r8\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r7\n\
- movs r1, 0x3C\n\
- bl GetMonData\n\
- strh r0, [r4, 0x4]\n\
- ldrb r0, [r6]\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r7\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- strh r0, [r4, 0x6]\n\
- ldrb r0, [r6]\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r0, r7\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- strh r0, [r4, 0x6]\n\
- ldrb r0, [r6]\n\
- mov r1, r8\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r7\n\
- movs r1, 0x3E\n\
- bl GetMonData\n\
- strh r0, [r4, 0x8]\n\
- ldrb r0, [r6]\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r7\n\
- movs r1, 0x3F\n\
- bl GetMonData\n\
- strh r0, [r4, 0xA]\n\
-_080207EC:\n\
- ldr r0, _080208C4 @ =gBattlePartyID\n\
- ldr r1, _080208B4 @ =gSharedMem\n\
- ldr r3, _080208C8 @ =0x00016018\n\
- adds r7, r1, r3\n\
- ldrb r2, [r7]\n\
- ldrh r0, [r0, 0x4]\n\
- cmp r0, r2\n\
- bne _080208F6\n\
- ldr r6, _080208EC @ =gBattleMons\n\
- movs r0, 0xD8\n\
- adds r0, r6\n\
- mov r8, r0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- beq _080208F6\n\
- ldr r0, _080208C0 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080208F6\n\
- movs r5, 0x64\n\
- adds r0, r2, 0\n\
- muls r0, r5\n\
- ldr r4, _080208CC @ =gPlayerParty\n\
- adds r0, r4\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xDA\n\
- strb r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xDC\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3B\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xB2\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3C\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xB4\n\
- strh r0, [r1]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- movs r2, 0xB6\n\
- adds r2, r6\n\
- mov r8, r2\n\
- strh r0, [r2]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3D\n\
- bl GetMonData\n\
- mov r3, r8\n\
- strh r0, [r3]\n\
- ldrb r0, [r7]\n\
- muls r0, r5\n\
- adds r0, r4\n\
- movs r1, 0x3E\n\
- bl GetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xB8\n\
- strh r0, [r1]\n\
- b _080208F6\n\
- .align 2, 0\n\
-_080208AC: .4byte gBattleExecBuffer\n\
-_080208B0: .4byte gActiveBank\n\
-_080208B4: .4byte gSharedMem\n\
-_080208B8: .4byte 0x000160a2\n\
-_080208BC: .4byte gBattleBufferB\n\
-_080208C0: .4byte gBattleTypeFlags\n\
-_080208C4: .4byte gBattlePartyID\n\
-_080208C8: .4byte 0x00016018\n\
-_080208CC: .4byte gPlayerParty\n\
-_080208D0: .4byte gBattleTextBuff1\n\
-_080208D4: .4byte gBattleTextBuff2\n\
-_080208D8: .4byte gLeveledUpInBattle\n\
-_080208DC: .4byte gBitTable\n\
-_080208E0: .4byte gBattlescriptCurrInstr\n\
-_080208E4: .4byte BattleScript_LevelUp\n\
-_080208E8: .4byte gBattleMoveDamage\n\
-_080208EC: .4byte gBattleMons\n\
-_080208F0:\n\
- ldr r1, _08020904 @ =gBattleMoveDamage\n\
- movs r0, 0\n\
- str r0, [r1]\n\
-_080208F6:\n\
- ldr r0, _08020908 @ =gSharedMem\n\
- ldr r1, _0802090C @ =0x0001600f\n\
- adds r0, r1\n\
- movs r1, 0x5\n\
- strb r1, [r0]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020904: .4byte gBattleMoveDamage\n\
-_08020908: .4byte gSharedMem\n\
-_0802090C: .4byte 0x0001600f\n\
-_08020910:\n\
- ldr r0, _08020924 @ =gBattleMoveDamage\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _08020930\n\
- ldr r0, _08020928 @ =gSharedMem\n\
- ldr r2, _0802092C @ =0x0001600f\n\
- adds r0, r2\n\
- movs r1, 0x3\n\
- strb r1, [r0]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020924: .4byte gBattleMoveDamage\n\
-_08020928: .4byte gSharedMem\n\
-_0802092C: .4byte 0x0001600f\n\
-_08020930:\n\
- ldr r2, _08020950 @ =gSharedMem\n\
- ldr r3, _08020954 @ =0x00016018\n\
- adds r1, r2, r3\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x5\n\
- bhi _0802095C\n\
- ldr r0, _08020958 @ =0x0001600f\n\
- adds r1, r2, r0\n\
- movs r0, 0x2\n\
- strb r0, [r1]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020950: .4byte gSharedMem\n\
-_08020954: .4byte 0x00016018\n\
-_08020958: .4byte 0x0001600f\n\
-_0802095C:\n\
- ldr r3, _08020968 @ =0x0001600f\n\
- adds r1, r2, r3\n\
- movs r0, 0x6\n\
- strb r0, [r1]\n\
- b _08020996\n\
- .align 2, 0\n\
-_08020968: .4byte 0x0001600f\n\
-_0802096C:\n\
- ldr r0, _080209A4 @ =gBattleExecBuffer\n\
- ldr r5, [r0]\n\
- cmp r5, 0\n\
- bne _08020996\n\
- ldr r4, _080209A8 @ =gBattleMons\n\
- ldr r2, _080209AC @ =gBank1\n\
- ldrb r0, [r2]\n\
- movs r1, 0x58\n\
- muls r0, r1\n\
- adds r0, r4\n\
- movs r3, 0\n\
- strh r5, [r0, 0x2E]\n\
- ldrb r0, [r2]\n\
- muls r0, r1\n\
- adds r0, r4\n\
- adds r0, 0x20\n\
- strb r3, [r0]\n\
- ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x2\n\
- str r0, [r1]\n\
-_08020996:\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\
- .align 2, 0\n\
-_080209A4: .4byte gBattleExecBuffer\n\
-_080209A8: .4byte gBattleMons\n\
-_080209AC: .4byte gBank1\n\
-_080209B0: .4byte gBattlescriptCurrInstr\n\
- .syntax divided\n");
-}
-
-#endif // NONMATCHING
#ifdef NONMATCHING
static void atk24(void)
@@ -6952,7 +5906,7 @@ _08020B50: .4byte gBattlescriptCurrInstr\n\
static void MoveValuesCleanUp(void)
{
gBattleMoveFlags = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dmgMultiplier = 1;
gCritMultiplier = 1;
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
gBattleCommunication[6] = 0;
@@ -7417,7 +6371,7 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
static void atk47_setgraphicalstatchangevalues(void)
{
u8 to_add = 0;
- switch (BATTLE_STRUCT->statChanger & 0xF0)
+ switch (gBattleStruct->statChanger & 0xF0)
{
case 0x10: //+1
to_add = 0xF;
@@ -7432,8 +6386,8 @@ static void atk47_setgraphicalstatchangevalues(void)
to_add = 0x2E;
break;
}
- BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = (gBattleStruct->statChanger & 0xF) + to_add - 1;
+ gBattleStruct->animArg2 = 0;
gBattlescriptCurrInstr++;
}
@@ -7507,14 +6461,14 @@ static void atk48_playstatchangeanimation(void)
stat_animID = 0x38;
}
if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1)
- || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0)
+ || changeable_stats == 0 || gBattleStruct->filler2[0] != 0)
gBattlescriptCurrInstr += 4;
else
{
EmitBattleAnimation(0, 1, stat_animID);
MarkBufferBankForExecution(gActiveBank);
if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1)
- BATTLE_STRUCT->filler2[0] = 1;
+ gBattleStruct->filler2[0] = 1;
gBattlescriptCurrInstr += 4;
}
}
@@ -7807,14 +6761,14 @@ static void atk49_moveend(void)
hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item);
choiced_move_atk = (u16*)(gBankAttacker * (ewram_addr + 0x160E8));
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ move_type = gBattleStruct->dynamicMoveType & 0x3F;
else
move_type = gBattleMoves[gCurrentMove].type;
do
{
- switch (BATTLE_STRUCT->cmd49StateTracker)
+ switch (gBattleStruct->cmd49StateTracker)
{
case 0: //rage check
if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE
@@ -7828,7 +6782,7 @@ static void atk49_moveend(void)
gBattlescriptCurrInstr = BattleScript_RageIsBuilding;
effect = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 1: //defrosting check
if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE
@@ -7844,28 +6798,28 @@ static void atk49_moveend(void)
gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
effect = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 2: //target synchronize
if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBankTarget, 0, 0, 0))
effect = 1;
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 3: //contact abilities
if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBankTarget, 0, 0, 0))
effect = 1;
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 4: //status immunities
if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
effect = 1; //it loops through 4 banks, so we increment after its done with all banks
else
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 5: //attacker synchronize
if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0))
effect = 1;
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 6: //update choice band move
if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND
@@ -7877,7 +6831,7 @@ static void atk49_moveend(void)
if (i == 4)
*choiced_move_atk = 0;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 7: //changed held items
for (i = 0; i < gNoOfAllBanks; i++)
@@ -7886,7 +6840,7 @@ static void atk49_moveend(void)
if (CHANGED_ITEM(i))
gBattleMons[i].item = CHANGED_ITEM(i);
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 8: //make sprite invisible
if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)
@@ -7896,7 +6850,7 @@ static void atk49_moveend(void)
EmitSpriteInvisibility(0, 1);
MarkBufferBankForExecution(gActiveBank);
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 9: //semi-invlurneable attacker make visible
if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
@@ -7908,7 +6862,7 @@ static void atk49_moveend(void)
gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER);
gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 10: //semi-invlurneable target make visible
if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
@@ -7920,7 +6874,7 @@ static void atk49_moveend(void)
gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER);
gSpecialStatuses[gBankTarget].restored_bank_sprite = 1;
}
- BATTLE_STRUCT->cmd49StateTracker++;
+ gBattleStruct->cmd49StateTracker++;
break;
case 11: //
}
@@ -7929,7 +6883,7 @@ static void atk49_moveend(void)
}
#else
__attribute__((naked))
-static void atk49_moveend(void)
+void atk49_moveend(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -8865,7 +7819,7 @@ _08021FA0:\n\
ldr r0, _08021FD4 @ =0x0000ffff\n\
cmp r2, r0\n\
bne _08021FEC\n\
- ldr r1, _08021FE8 @ =gMoveHitWith\n\
+ ldr r1, _08021FE8 @ =gLastLandedMoves\n\
ldr r4, _08021FDC @ =gBankTarget\n\
ldrb r0, [r4]\n\
lsls r0, 1\n\
@@ -8879,9 +7833,9 @@ _08021FD8: .4byte gUnknown_02024C4C\n\
_08021FDC: .4byte gBankTarget\n\
_08021FE0: .4byte gUnknown_02024C5C\n\
_08021FE4: .4byte gBattleMoveFlags\n\
-_08021FE8: .4byte gMoveHitWith\n\
+_08021FE8: .4byte gLastLandedMoves\n\
_08021FEC:\n\
- ldr r0, _08022014 @ =gMoveHitWith\n\
+ ldr r0, _08022014 @ =gLastLandedMoves\n\
ldr r5, _08022018 @ =gBankTarget\n\
ldrb r1, [r5]\n\
lsls r1, 1\n\
@@ -8894,7 +7848,7 @@ _08021FEC:\n\
ldrb r3, [r0]\n\
cmp r3, 0\n\
beq _08022028\n\
- ldr r0, _08022024 @ =gUnknown_02024C44\n\
+ ldr r0, _08022024 @ =gLastHitByType\n\
ldrb r1, [r5]\n\
lsls r1, 1\n\
adds r1, r0\n\
@@ -8902,13 +7856,13 @@ _08021FEC:\n\
ands r0, r3\n\
b _08021C22\n\
.align 2, 0\n\
-_08022014: .4byte gMoveHitWith\n\
+_08022014: .4byte gLastLandedMoves\n\
_08022018: .4byte gBankTarget\n\
_0802201C: .4byte gCurrentMove\n\
_08022020: .4byte 0x0001601c\n\
-_08022024: .4byte gUnknown_02024C44\n\
+_08022024: .4byte gLastHitByType\n\
_08022028:\n\
- ldr r0, _08022044 @ =gUnknown_02024C44\n\
+ ldr r0, _08022044 @ =gLastHitByType\n\
ldr r1, _08022048 @ =gBankTarget\n\
ldrb r2, [r1]\n\
lsls r2, 1\n\
@@ -8922,10 +7876,10 @@ _08022028:\n\
strh r0, [r2]\n\
b _08022244\n\
.align 2, 0\n\
-_08022044: .4byte gUnknown_02024C44\n\
+_08022044: .4byte gLastHitByType\n\
_08022048: .4byte gBankTarget\n\
_0802204C:\n\
- ldr r0, _0802205C @ =gMoveHitWith\n\
+ ldr r0, _0802205C @ =gLastLandedMoves\n\
ldr r2, _08022060 @ =gBankTarget\n\
ldrb r1, [r2]\n\
lsls r1, 1\n\
@@ -8933,7 +7887,7 @@ _0802204C:\n\
ldr r0, _08022064 @ =0x0000ffff\n\
b _08021C22\n\
.align 2, 0\n\
-_0802205C: .4byte gMoveHitWith\n\
+_0802205C: .4byte gLastLandedMoves\n\
_08022060: .4byte gBankTarget\n\
_08022064: .4byte 0x0000ffff\n\
_08022068:\n\
@@ -9250,7 +8204,7 @@ static void atk4A_typecalc2(void)
{
gLastUsedAbility = gBattleMons[gBankTarget].ability;
gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gMoveHitWith[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
gBattleCommunication[6] = move_type;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -9305,7 +8259,7 @@ static void atk4A_typecalc2(void)
{
gLastUsedAbility = ABILITY_WONDER_GUARD;
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
gBattleCommunication[6] = 3;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -9340,27 +8294,19 @@ static void atk4C_getswitchedmondata(void)
gBattlescriptCurrInstr += 2;
}
-static inline u8 get_knocked_off_byte(u8 bank)
-{
- register u32 side asm("r2") = GetBankSide(bank);
- register struct WishFutureKnock* dummy = &gWishFutureKnock;
- register u8* aa = ((u8*)((u8*)(dummy)));
- register u8* bb = aa + 0x29;
- register u8* cc asm("r0") = side + bb;
- return *cc;
-}
-
static void atk4D_switchindataupdate(void)
{
- struct BattlePokemon OldData;
- int i;
+ struct BattlePokemon oldData;
+ s32 i;
u8 *monData;
+
if (gBattleExecBuffer)
return;
- gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
- OldData = gBattleMons[gActiveBank];
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ oldData = gBattleMons[gActiveBank];
monData = (u8*)(&gBattleMons[gActiveBank]);
+
for (i = 0; i < sizeof(struct BattlePokemon); i++)
{
monData[i] = gBattleBufferB[gActiveBank][4 + i];
@@ -9369,8 +8315,10 @@ static void atk4D_switchindataupdate(void)
gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1;
gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2;
gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility);
- //check knocked off item
- if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]])
+
+ // check knocked off item
+ i = GetBankSide(gActiveBank);
+ if (gWishFutureKnock.knockedOffPokes[i] & gBitTable[gBattlePartyID[gActiveBank]])
{
gBattleMons[gActiveBank].item = 0;
}
@@ -9379,17 +8327,16 @@ static void atk4D_switchindataupdate(void)
{
for (i = 0; i < 8; i++)
{
- gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i];
+ gBattleMons[gActiveBank].statStages[i] = oldData.statStages[i];
}
- gBattleMons[gActiveBank].status2 = OldData.status2;
+ gBattleMons[gActiveBank].status2 = oldData.status2;
}
- SwitchInClearStructs();
- BATTLE_STRUCT->scriptingActive = gActiveBank;
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 7;
- gBattleTextBuff1[2] = gActiveBank;
- gBattleTextBuff1[3] = gBattlePartyID[gActiveBank];
- gBattleTextBuff1[4] = EOS;
+
+ SwitchInClearSetData();
+
+ gBattleStruct->scriptingActive = gActiveBank;
+
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBank, gBattlePartyID[gActiveBank]);
gBattlescriptCurrInstr += 2;
}
@@ -9484,7 +8431,7 @@ static void atk4F_jumpifcantswitch(void)
void sub_8022A3C(u8 unkown)
{
BATTLE_PARTY_ID(gActiveBank) = gBattlePartyID[gActiveBank];
- EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]);
+ EmitChoosePokemon(0, 1, unkown, 0, gBattleStruct->unk1606C[gActiveBank]);
MarkBufferBankForExecution(gActiveBank);
}
@@ -10630,7 +9577,7 @@ static void atk52_switchineffects(void)
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattleStruct->scriptingActive = gActiveBank;
BattleScriptPushCursor();
if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0)
@@ -10737,9 +9684,9 @@ void atk59_handlelearnnewmove(void)
u8* loc1 = T1_READ_PTR(gBattlescriptCurrInstr + 1);
u8* loc2 = T1_READ_PTR(gBattlescriptCurrInstr + 5);
- u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9));
+ u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9));
while (ret == 0xFFFE)
- ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0);
+ ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], 0);
if (ret == 0)
{
@@ -10752,12 +9699,12 @@ void atk59_handlelearnnewmove(void)
else
{
gActiveBank = GetBankByIdentity(0);
- if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if
{
gActiveBank = GetBankByIdentity(2);
- if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
+ if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret);
}
gBattlescriptCurrInstr = loc1;
@@ -10781,11 +9728,11 @@ void sub_8023AD8(void)
static void atk5A_yesnoboxlearnmove(void)
{
gActiveBank = 0;
- switch (BATTLE_STRUCT->atk5A_StateTracker)
+ switch (gBattleStruct->atk5A_StateTracker)
{
case 0:
sub_8023A80();
- BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleStruct->atk5A_StateTracker++;
gBattleCommunication[1] = 0;
sub_802BC6C();
break;
@@ -10811,7 +9758,7 @@ static void atk5A_yesnoboxlearnmove(void)
{
sub_8023AD8();
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleStruct->atk5A_StateTracker++;
return;
}
goto state_tracker_4;
@@ -10820,14 +9767,14 @@ static void atk5A_yesnoboxlearnmove(void)
{
PlaySE(SE_SELECT);
state_tracker_4:
- BATTLE_STRUCT->atk5A_StateTracker = 4;
+ gBattleStruct->atk5A_StateTracker = 4;
}
break;
case 2:
if (!gPaletteFade.active)
{
- ShowSelectMovePokemonSummaryScreen(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
- BATTLE_STRUCT->atk5A_StateTracker++;
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gBattleStruct->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
+ gBattleStruct->atk5A_StateTracker++;
}
break;
case 3:
@@ -10836,15 +9783,15 @@ static void atk5A_yesnoboxlearnmove(void)
u8 move_pos = sub_809FA30();
if (move_pos == 4)
{
- BATTLE_STRUCT->atk5A_StateTracker = 4;
+ gBattleStruct->atk5A_StateTracker = 4;
}
else
{
- u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos);
+ u16 move = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MOVE1 + move_pos);
if (IsHMMove2(move))
{
PrepareStringBattle(0x13F, gActiveBank);
- BATTLE_STRUCT->atk5A_StateTracker = 5;
+ gBattleStruct->atk5A_StateTracker = 5;
}
else
{
@@ -10860,15 +9807,15 @@ static void atk5A_yesnoboxlearnmove(void)
ptr += 4;
}
ptr[0] = 0xFF;
- RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos);
- SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], gMoveToLearn, move_pos);
- if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
+ RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterID], move_pos);
+ SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterID], gMoveToLearn, move_pos);
+ if (gBattlePartyID[0] == gBattleStruct->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[0].unk18_b & gBitTable[move_pos]))
{
RemoveBattleMonPPBonus(&gBattleMons[0], move_pos);
SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, move_pos);
}
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == gBattleStruct->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[2].unk18_b & gBitTable[move_pos]))
{
RemoveBattleMonPPBonus(&gBattleMons[2], move_pos);
@@ -10885,7 +9832,7 @@ static void atk5A_yesnoboxlearnmove(void)
case 5:
if (gBattleExecBuffer == 0)
{
- BATTLE_STRUCT->atk5A_StateTracker = 2;
+ gBattleStruct->atk5A_StateTracker = 2;
}
break;
}
@@ -10893,11 +9840,11 @@ static void atk5A_yesnoboxlearnmove(void)
static void atk5B_yesnoboxstoplearningmove(void)
{
- switch (BATTLE_STRUCT->atk5A_StateTracker)
+ switch (gBattleStruct->atk5A_StateTracker)
{
case 0:
sub_8023A80();
- BATTLE_STRUCT->atk5A_StateTracker++;
+ gBattleStruct->atk5A_StateTracker++;
gBattleCommunication[1] = 0;
sub_802BC6C();
break;
@@ -10959,7 +9906,7 @@ static void atk5D_getmoneyreward(void)
u32 money_to_give;
if (gTrainerBattleOpponent == 0x400)
{
- money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN;
+ money_to_give = 2 * gBattleStruct->moneyMultiplier * MONEY_UNKNOWN;
}
else
{
@@ -10987,7 +9934,7 @@ static void atk5D_getmoneyreward(void)
}
for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {}
- money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier;
+ money_to_give = (r5 << 2) * gBattleStruct->moneyMultiplier;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give;
else
@@ -11207,6 +10154,76 @@ _08024190: .4byte gBattlescriptCurrInstr\n\
}
#endif //NONMATCHING
+/*
+static u32 GetTrainerMoneyToGive(u16 trainerId)
+{
+ u32 i = 0;
+ u32 lastMonLevel = 0;
+ u32 moneyReward = 0;
+
+ if (trainerId == SECRET_BASE_OPPONENT)
+ {
+ moneyReward = 20 * eSecretBaseRecord->partyLevels[0] * gBattleStruct->moneyMultiplier;
+ }
+ else
+ {
+ switch (gTrainers[trainerId].partyFlags)
+ {
+ case 0:
+ {
+ const struct TrainerMonNoItemDefaultMoves *party = gTrainers[trainerId].party.NoItemDefaultMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_CUSTOM_MOVESET:
+ {
+ const struct TrainerMonNoItemCustomMoves *party = gTrainers[trainerId].party.NoItemCustomMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemDefaultMoves *party = gTrainers[trainerId].party.ItemDefaultMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemCustomMoves *party = gTrainers[trainerId].party.ItemCustomMoves;
+ lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
+ }
+ break;
+ }
+
+ for (; gTrainerMoneyTable[i].classId != 0xFF; i++)
+ {
+ if (gTrainerMoneyTable[i].classId == gTrainers[trainerId].trainerClass)
+ break;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * gTrainerMoneyTable[i].value;
+ else
+ moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * gTrainerMoneyTable[i].value;
+ }
+
+ return moneyReward;
+}
+
+static void atk5D_getmoneyreward(void)
+{
+ u32 moneyReward = GetTrainerMoneyToGive(gTrainerBattleOpponent_A);
+ if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ moneyReward += GetTrainerMoneyToGive(gTrainerBattleOpponent_B);
+
+ AddMoney(&gSaveBlock1Ptr->money, moneyReward);
+
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward)
+
+ gBattlescriptCurrInstr++;
+}
+*/
+
static void atk5E_8025A70(void)
{
gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
@@ -11471,7 +10488,7 @@ static void atk6C_drawlvlupbox(void)
{
u8 r1 = 0;
u8 r7 = 0;
- switch (BATTLE_STRUCT->atk6C_statetracker)
+ switch (gBattleStruct->atk6C_statetracker)
{
case 0:
sub_802BBD4(0xB, 0, 0x1D, 0x7, r1);
@@ -11956,13 +10973,13 @@ static void atk73_hpthresholds(void)
result = 1;
if (result > 69 || !gBattleMons[opposing_bank].hp)
- BATTLE_STRUCT->hpScale = 0;
+ gBattleStruct->hpScale = 0;
else if (result > 39)
- BATTLE_STRUCT->hpScale = 1;
+ gBattleStruct->hpScale = 1;
else if (result > 9)
- BATTLE_STRUCT->hpScale = 2;
+ gBattleStruct->hpScale = 2;
else
- BATTLE_STRUCT->hpScale = 3;
+ gBattleStruct->hpScale = 3;
}
gBattlescriptCurrInstr += 2;
@@ -11977,17 +10994,17 @@ static void atk74_hpthresholds2(void)
{
gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1));
opposing_bank = gActiveBank ^ 1;
- hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)];
+ hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBankSide(opposing_bank)];
result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout;
if (gBattleMons[opposing_bank].hp >= hp_switchout)
- BATTLE_STRUCT->hpScale = 0;
+ gBattleStruct->hpScale = 0;
else if (result <= 29)
- BATTLE_STRUCT->hpScale = 1;
+ gBattleStruct->hpScale = 1;
else if (result <= 69)
- BATTLE_STRUCT->hpScale = 2;
+ gBattleStruct->hpScale = 2;
else
- BATTLE_STRUCT->hpScale = 3;
+ gBattleStruct->hpScale = 3;
}
gBattlescriptCurrInstr += 2;
@@ -11996,7 +11013,7 @@ static void atk74_hpthresholds2(void)
static void atk75_useitemonopponent(void)
{
gBankInMenu = gBankAttacker;
- sub_803E1B0(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1);
+ PokemonUseItemEffects(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1);
gBattlescriptCurrInstr += 1;
}
@@ -12039,9 +11056,9 @@ static void atk76_various(void)
{
int i;
u16* choiced_move;
- if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID)
+ if (gBattlePartyID[0] == gBattleStruct->expGetterID)
goto ACTIVE_0;
- if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID)
+ if (gBattlePartyID[2] != gBattleStruct->expGetterID)
break;
if (gBattlePartyID[0] == gBattlePartyID[2])
{
@@ -12355,7 +11372,7 @@ bool8 UproarWakeUpCheck(u8 bank)
{
if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop...
continue;
- BATTLE_STRUCT->scriptingActive = i;
+ gBattleStruct->scriptingActive = i;
if (gBankTarget == 0xFF)
gBankTarget = i;
else if (gBankTarget == i)
@@ -12424,7 +11441,7 @@ static void atk86_stockpiletobasedamage(void)
gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0,
0, gBankAttacker, gBankTarget)
* gDisableStructs[gBankAttacker].stockpileCounter;
- BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
+ gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
if (gProtectStructs[gBankAttacker].helpingHand)
gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
@@ -12455,7 +11472,7 @@ static void atk87_stockpiletohpheal(void)
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
gBattleMoveDamage *= -1;
- BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
+ gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter;
gDisableStructs[gBankAttacker].stockpileCounter = 0;
gBattlescriptCurrInstr += 5;
gBankTarget = gBankAttacker;
@@ -12464,767 +11481,186 @@ static void atk87_stockpiletohpheal(void)
static void atk88_negativedamage(void)
{
- gBattleMoveDamage = -(gHP_dealt / 2);
+ gBattleMoveDamage = -(gHpDealt / 2);
if (gBattleMoveDamage == 0)
gBattleMoveDamage = -1;
gBattlescriptCurrInstr++;
}
-#ifdef NONMATCHING
-u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr)
+static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
{
- u8 r9 = 0;
- u8 r10 = 0;
- u8 index;
- if (flags & 0x40)
+ bool8 certain = FALSE;
+ bool8 notProtectAffected = FALSE;
+ u32 index;
+
+ if (flags & MOVE_EFFECT_AFFECTS_USER)
gActiveBank = gBankAttacker;
else
gActiveBank = gBankTarget;
- flags &= ~(0x40);
- if (flags & 0x80)
- r9++;
- flags &= ~(0x80);
- if (flags & 0x20)
- r10++;
- flags &= ~(0x20);
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = stat;
- gBattleTextBuff1[3] = 0xFF;
+ flags &= ~(MOVE_EFFECT_AFFECTS_USER);
+
+ if (flags & MOVE_EFFECT_CERTAIN)
+ certain++;
+ flags &= ~(MOVE_EFFECT_CERTAIN);
+
+ if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED)
+ notProtectAffected++;
+ flags &= ~(STAT_CHANGE_NOT_PROTECT_AFFECTED);
- if ((statchanger << 0x18) < 0) //stat decrease
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, statId)
+
+ if ((statValue << 0x18) < 0) // stat decrease
{
- if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE)
+ if (gSideTimers[GET_BANK_SIDE(gActiveBank)].mistTimer
+ && !certain && gCurrentMove != MOVE_CURSE)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- if (gSpecialStatuses[gActiveBank].statloweringflag)
- gBattlescriptCurrInstr = bs_ptr;
+ if (gSpecialStatuses[gActiveBank].statLowered)
+ {
+ gBattlescriptCurrInstr = BS_ptr;
+ }
else
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_MistProtected;
- gSpecialStatuses[gActiveBank].statloweringflag = 1;
+ gSpecialStatuses[gActiveBank].statLowered = 1;
}
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0))
+ else if (gCurrentMove != MOVE_CURSE
+ && notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(0))
{
gBattlescriptCurrInstr = BattleScript_ButItFailed;
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE)
+ else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY
+ || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE)
+ && !certain && gCurrentMove != MOVE_CURSE)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- if (gSpecialStatuses[gActiveBank].statloweringflag)
- gBattlescriptCurrInstr = bs_ptr;
+ if (gSpecialStatuses[gActiveBank].statLowered)
+ {
+ gBattlescriptCurrInstr = BS_ptr;
+ }
else
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss;
gLastUsedAbility = gBattleMons[gActiveBank].ability;
RecordAbilityBattle(gActiveBank, gLastUsedAbility);
- gSpecialStatuses[gActiveBank].statloweringflag = 1;
+ gSpecialStatuses[gActiveBank].statLowered = 1;
}
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == STAT_STAGE_ACC)
+ else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE
+ && !certain && statId == STAT_STAGE_ACC)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
gLastUsedAbility = gBattleMons[gActiveBank].ability;
RecordAbilityBattle(gActiveBank, gLastUsedAbility);
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == STAT_STAGE_ATK)
+ else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER
+ && !certain && statId == STAT_STAGE_ATK)
{
- if (flags == 1)
+ if (flags == STAT_CHANGE_BS_PTR)
{
- BattleScriptPush(bs_ptr);
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ BattleScriptPush(BS_ptr);
+ gBattleStruct->scriptingActive = gActiveBank;
gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
gLastUsedAbility = gBattleMons[gActiveBank].ability;
RecordAbilityBattle(gActiveBank, gLastUsedAbility);
}
- return 1;
+ return STAT_CHANGE_DIDNT_WORK;
}
else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0)
- return 1;
- else //decrease
{
- statchanger = -((statchanger >> 4) & (7));
- gBattleTextBuff2[0] = 0xFD;
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else // try to decrease
+ {
+ statValue = -GET_STAT_BUFF_VALUE(statValue);
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
index = 1;
- if (statchanger == -2)
+ if (statValue == -2)
{
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = 0xD3; //harshly
- gBattleTextBuff2[3] = 0x0;
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATHARSHLY;
+ gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8;
index = 4;
}
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = B_BUFF_STRING;
index++;
- gBattleTextBuff2[index] = 0xD4; //fell
+ gBattleTextBuff2[index] = STRINGID_STATFELL;
index++;
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = STRINGID_STATFELL >> 8;
index++;
- gBattleTextBuff2[index] = 0xFF;
+ gBattleTextBuff2[index] = B_BUFF_EOS;
- if (gBattleMons[gActiveBank].statStages[stat] == 0)
- {
+ if (gBattleMons[gActiveBank].statStages[statId] == 0)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
- }
else
- {
- u8 stringID = 0;
- if (gBankTarget == gActiveBank)
- stringID = 1;
- gBattleCommunication[MULTISTRING_CHOOSER] = stringID;
- }
+ gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank);
+
}
}
- else //stat increase
+ else // stat increase
{
- statchanger = (statchanger >> 4) & (7);
- gBattleTextBuff2[0] = 0xFD;
+ statValue = GET_STAT_BUFF_VALUE(statValue);
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
index = 1;
- if (statchanger == 2)
+ if (statValue == 2)
{
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = 0xD1; //sharply
- gBattleTextBuff2[3] = 0x0;
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATSHARPLY;
+ gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
index = 4;
}
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = B_BUFF_STRING;
index++;
- gBattleTextBuff2[index] = 0xD2; //rose
+ gBattleTextBuff2[index] = STRINGID_STATROSE;
index++;
- gBattleTextBuff2[index] = 0;
+ gBattleTextBuff2[index] = STRINGID_STATROSE >> 8;
index++;
- gBattleTextBuff2[index] = 0xFF;
+ gBattleTextBuff2[index] = B_BUFF_EOS;
- if (gBattleMons[gActiveBank].statStages[stat] == 0xC)
- {
+ if (gBattleMons[gActiveBank].statStages[statId] == 0xC)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
- }
else
- {
- u8 stringID = 0;
- if (gBankTarget == gActiveBank)
- stringID = 1;
- gBattleCommunication[MULTISTRING_CHOOSER] = stringID;
- }
+ gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank);
}
- gBattleMons[gActiveBank].statStages[stat] += statchanger;
- if (gBattleMons[gActiveBank].statStages[stat] < 0)
- gBattleMons[gActiveBank].statStages[stat] = 0;
- if (gBattleMons[gActiveBank].statStages[stat] > 0xC)
- gBattleMons[gActiveBank].statStages[stat] = 0xC;
+ gBattleMons[gActiveBank].statStages[statId] += statValue;
+ if (gBattleMons[gActiveBank].statStages[statId] < 0)
+ gBattleMons[gActiveBank].statStages[statId] = 0;
+ if (gBattleMons[gActiveBank].statStages[statId] > 0xC)
+ gBattleMons[gActiveBank].statStages[statId] = 0xC;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == 2)
- {
- if (flags & 1)
- gBattleMoveFlags |= MOVESTATUS_MISSED;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak...
- return 1;
- }
- return 0;
-}
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_CHANGE_BS_PTR)
+ gBattleMoveFlags |= MOVESTATUS_MISSED;
-#else
-__attribute__((naked))
-u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- mov r8, r3\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r7, r1, 24\n\
- lsls r2, 24\n\
- lsrs r5, r2, 24\n\
- movs r0, 0\n\
- mov r9, r0\n\
- mov r10, r0\n\
- movs r0, 0x40\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- beq _08025E54\n\
- ldr r0, _08025E4C @ =gActiveBank\n\
- ldr r1, _08025E50 @ =gBankAttacker\n\
- b _08025E58\n\
- .align 2, 0\n\
-_08025E4C: .4byte gActiveBank\n\
-_08025E50: .4byte gBankAttacker\n\
-_08025E54:\n\
- ldr r0, _08025EF8 @ =gActiveBank\n\
- ldr r1, _08025EFC @ =gBankTarget\n\
-_08025E58:\n\
- ldrb r1, [r1]\n\
- strb r1, [r0]\n\
- movs r0, 0xBF\n\
- ands r5, r0\n\
- movs r0, 0x80\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- beq _08025E72\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
-_08025E72:\n\
- movs r0, 0x7F\n\
- ands r5, r0\n\
- movs r0, 0x20\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- beq _08025E88\n\
- mov r0, r10\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
-_08025E88:\n\
- movs r0, 0xDF\n\
- ands r5, r0\n\
- ldr r1, _08025F00 @ =gBattleTextBuff1\n\
- movs r4, 0\n\
- movs r2, 0xFD\n\
- strb r2, [r1]\n\
- movs r0, 0x5\n\
- strb r0, [r1, 0x1]\n\
- strb r7, [r1, 0x2]\n\
- movs r3, 0x1\n\
- negs r3, r3\n\
- mov r12, r3\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x3]\n\
- lsls r0, r6, 24\n\
- cmp r0, 0\n\
- blt _08025EAC\n\
- b _080261B0\n\
-_08025EAC:\n\
- ldr r4, _08025F04 @ =gSideTimers\n\
- ldr r1, _08025EF8 @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- bl GetBankIdentity\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r0, [r0, 0x2]\n\
- cmp r0, 0\n\
- beq _08025F54\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _08025F54\n\
- ldr r0, _08025F08 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xAE\n\
- beq _08025F84\n\
- cmp r5, 0x1\n\
- bne _08025F74\n\
- ldr r4, _08025F0C @ =gSpecialStatuses\n\
- ldr r3, _08025EF8 @ =gActiveBank\n\
- ldrb r0, [r3]\n\
- lsls r1, r0, 2\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r4\n\
- ldrb r0, [r1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08025F14\n\
- ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\
- mov r4, r8\n\
- str r4, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08025EF8: .4byte gActiveBank\n\
-_08025EFC: .4byte gBankTarget\n\
-_08025F00: .4byte gBattleTextBuff1\n\
-_08025F04: .4byte gSideTimers\n\
-_08025F08: .4byte gCurrentMove\n\
-_08025F0C: .4byte gSpecialStatuses\n\
-_08025F10: .4byte gBattlescriptCurrInstr\n\
-_08025F14:\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08025F40 @ =gSharedMem\n\
- ldr r6, _08025F44 @ =gActiveBank\n\
- ldrb r1, [r6]\n\
- ldr r2, _08025F48 @ =0x00016003\n\
- adds r0, r2\n\
- strb r1, [r0]\n\
- ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08025F50 @ =BattleScript_MistProtected\n\
- str r0, [r1]\n\
- ldrb r1, [r6]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08025F40: .4byte gSharedMem\n\
-_08025F44: .4byte gActiveBank\n\
-_08025F48: .4byte 0x00016003\n\
-_08025F4C: .4byte gBattlescriptCurrInstr\n\
-_08025F50: .4byte BattleScript_MistProtected\n\
-_08025F54:\n\
- ldr r0, _08025F78 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xAE\n\
- beq _08025F84\n\
- mov r3, r10\n\
- cmp r3, 0x1\n\
- beq _08025F84\n\
- movs r0, 0\n\
- bl JumpIfMoveAffectedByProtect\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08025F84\n\
- ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\
- str r0, [r1]\n\
-_08025F74:\n\
- movs r0, 0x1\n\
- b _080262A4\n\
- .align 2, 0\n\
-_08025F78: .4byte gCurrentMove\n\
-_08025F7C: .4byte gBattlescriptCurrInstr\n\
-_08025F80: .4byte BattleScript_ButItFailed\n\
-_08025F84:\n\
- ldr r2, _08025FCC @ =gBattleMons\n\
- ldr r1, _08025FD0 @ =gActiveBank\n\
- ldrb r3, [r1]\n\
- movs r4, 0x58\n\
- adds r0, r3, 0\n\
- muls r0, r4\n\
- adds r0, r2\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- mov r10, r2\n\
- cmp r0, 0x1D\n\
- beq _08025FA0\n\
- cmp r0, 0x49\n\
- bne _08026040\n\
-_08025FA0:\n\
- mov r0, r9\n\
- cmp r0, 0\n\
- bne _08026040\n\
- ldr r0, _08025FD4 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xAE\n\
- beq _08026040\n\
- cmp r5, 0x1\n\
- bne _08025F74\n\
- ldr r4, _08025FD8 @ =gSpecialStatuses\n\
- lsls r0, r3, 2\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r0, [r0]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08025FE0\n\
- ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\
- mov r1, r8\n\
- str r1, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08025FCC: .4byte gBattleMons\n\
-_08025FD0: .4byte gActiveBank\n\
-_08025FD4: .4byte gCurrentMove\n\
-_08025FD8: .4byte gSpecialStatuses\n\
-_08025FDC: .4byte gBattlescriptCurrInstr\n\
-_08025FE0:\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08026028 @ =gSharedMem\n\
- ldr r2, _0802602C @ =gActiveBank\n\
- ldrb r1, [r2]\n\
- ldr r3, _08026030 @ =0x00016003\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\
- str r0, [r1]\n\
- ldr r1, _0802603C @ =gLastUsedAbility\n\
- ldrb r0, [r2]\n\
- movs r6, 0x58\n\
- muls r0, r6\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldrb r0, [r2]\n\
- ldrb r1, [r1]\n\
- bl RecordAbilityBattle\n\
- ldr r0, _0802602C @ =gActiveBank\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrb r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08026028: .4byte gSharedMem\n\
-_0802602C: .4byte gActiveBank\n\
-_08026030: .4byte 0x00016003\n\
-_08026034: .4byte gBattlescriptCurrInstr\n\
-_08026038: .4byte BattleScript_AbilityNoStatLoss\n\
-_0802603C: .4byte gLastUsedAbility\n\
-_08026040:\n\
- ldr r1, _08026090 @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- movs r4, 0x58\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x33\n\
- bne _080260A8\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _080260A8\n\
- cmp r7, 0x6\n\
- bne _080260A8\n\
- cmp r5, 0x1\n\
- bne _08025F74\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08026094 @ =gSharedMem\n\
- ldr r3, _08026090 @ =gActiveBank\n\
- ldrb r1, [r3]\n\
- ldr r6, _08026098 @ =0x00016003\n\
- adds r0, r6\n\
- strb r1, [r0]\n\
- ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\
- ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\
- str r0, [r1]\n\
- ldr r1, _080260A4 @ =gLastUsedAbility\n\
- ldrb r0, [r3]\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- ldrb r1, [r1]\n\
- bl RecordAbilityBattle\n\
- b _08025F74\n\
- .align 2, 0\n\
-_08026090: .4byte gActiveBank\n\
-_08026094: .4byte gSharedMem\n\
-_08026098: .4byte 0x00016003\n\
-_0802609C: .4byte gBattlescriptCurrInstr\n\
-_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\
-_080260A4: .4byte gLastUsedAbility\n\
-_080260A8:\n\
- ldr r1, _080260FC @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- movs r4, 0x58\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x34\n\
- bne _08026114\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _08026114\n\
- cmp r7, 0x1\n\
- bne _08026114\n\
- cmp r5, 0x1\n\
- beq _080260CA\n\
- b _08025F74\n\
-_080260CA:\n\
- mov r0, r8\n\
- bl BattleScriptPush\n\
- ldr r0, _08026100 @ =gSharedMem\n\
- ldr r3, _080260FC @ =gActiveBank\n\
- ldrb r1, [r3]\n\
- ldr r6, _08026104 @ =0x00016003\n\
- adds r0, r6\n\
- strb r1, [r0]\n\
- ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\
- ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\
- str r0, [r1]\n\
- ldr r1, _08026110 @ =gLastUsedAbility\n\
- ldrb r0, [r3]\n\
- muls r0, r4\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- ldrb r1, [r1]\n\
- bl RecordAbilityBattle\n\
- b _08025F74\n\
- .align 2, 0\n\
-_080260FC: .4byte gActiveBank\n\
-_08026100: .4byte gSharedMem\n\
-_08026104: .4byte 0x00016003\n\
-_08026108: .4byte gBattlescriptCurrInstr\n\
-_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\
-_08026110: .4byte gLastUsedAbility\n\
-_08026114:\n\
- ldr r0, _080261A0 @ =gActiveBank\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- add r0, r10\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x13\n\
- bne _0802612C\n\
- cmp r5, 0\n\
- bne _0802612C\n\
- b _08025F74\n\
-_0802612C:\n\
- lsls r0, r6, 24\n\
- asrs r0, 28\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- negs r0, r0\n\
- lsls r0, 24\n\
- ldr r3, _080261A4 @ =gBattleTextBuff2\n\
- movs r4, 0\n\
- movs r1, 0xFD\n\
- strb r1, [r3]\n\
- movs r2, 0x1\n\
- lsrs r6, r0, 24\n\
- asrs r0, 24\n\
- subs r1, 0xFF\n\
- cmp r0, r1\n\
- bne _08026156\n\
- strb r4, [r3, 0x1]\n\
- movs r0, 0xD3\n\
- strb r0, [r3, 0x2]\n\
- strb r4, [r3, 0x3]\n\
- movs r2, 0x4\n\
-_08026156:\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- movs r0, 0xD4\n\
- strb r0, [r1]\n\
- adds r2, 0x1\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- movs r0, 0xFF\n\
- strb r0, [r1]\n\
- ldr r1, _080261A0 @ =gActiveBank\n\
- ldrb r2, [r1]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r7, r0\n\
- mov r1, r10\n\
- adds r1, 0x18\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0\n\
- beq _08026206\n\
- movs r1, 0\n\
- ldr r0, _080261A8 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- ldr r3, _080261AC @ =gBattleCommunication\n\
- mov r8, r3\n\
- cmp r0, r2\n\
- bne _0802619A\n\
- movs r1, 0x1\n\
-_0802619A:\n\
- mov r4, r8\n\
- strb r1, [r4, 0x5]\n\
- b _08026234\n\
- .align 2, 0\n\
-_080261A0: .4byte gActiveBank\n\
-_080261A4: .4byte gBattleTextBuff2\n\
-_080261A8: .4byte gBankTarget\n\
-_080261AC: .4byte gBattleCommunication\n\
-_080261B0:\n\
- asrs r6, r0, 28\n\
- movs r0, 0x7\n\
- ands r6, r0\n\
- ldr r3, _08026210 @ =gBattleTextBuff2\n\
- strb r2, [r3]\n\
- movs r2, 0x1\n\
- cmp r6, 0x2\n\
- bne _080261CA\n\
- strb r4, [r3, 0x1]\n\
- movs r0, 0xD1\n\
- strb r0, [r3, 0x2]\n\
- strb r4, [r3, 0x3]\n\
- movs r2, 0x4\n\
-_080261CA:\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- movs r0, 0xD2\n\
- strb r0, [r1]\n\
- adds r2, 0x1\n\
- adds r0, r2, r3\n\
- strb r4, [r0]\n\
- adds r2, 0x1\n\
- adds r1, r2, r3\n\
- ldrb r0, [r1]\n\
- mov r2, r12\n\
- orrs r0, r2\n\
- strb r0, [r1]\n\
- ldr r2, _08026214 @ =gBattleMons\n\
- ldr r4, _08026218 @ =gActiveBank\n\
- ldrb r3, [r4]\n\
- movs r0, 0x58\n\
- muls r0, r3\n\
- adds r0, r7, r0\n\
- adds r1, r2, 0\n\
- adds r1, 0x18\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- mov r10, r2\n\
- cmp r0, 0xC\n\
- bne _08026220\n\
-_08026206:\n\
- ldr r1, _0802621C @ =gBattleCommunication\n\
- movs r0, 0x2\n\
- strb r0, [r1, 0x5]\n\
- mov r8, r1\n\
- b _08026234\n\
- .align 2, 0\n\
-_08026210: .4byte gBattleTextBuff2\n\
-_08026214: .4byte gBattleMons\n\
-_08026218: .4byte gActiveBank\n\
-_0802621C: .4byte gBattleCommunication\n\
-_08026220:\n\
- movs r1, 0\n\
- ldr r0, _080262B4 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- ldr r2, _080262B8 @ =gBattleCommunication\n\
- mov r8, r2\n\
- cmp r0, r3\n\
- bne _08026230\n\
- movs r1, 0x1\n\
-_08026230:\n\
- mov r3, r8\n\
- strb r1, [r3, 0x5]\n\
-_08026234:\n\
- ldr r2, _080262BC @ =gActiveBank\n\
- ldrb r0, [r2]\n\
- movs r4, 0x58\n\
- adds r1, r0, 0\n\
- muls r1, r4\n\
- adds r1, r7, r1\n\
- mov r3, r10\n\
- adds r3, 0x18\n\
- adds r1, r3\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- ldrb r6, [r1]\n\
- adds r0, r6\n\
- strb r0, [r1]\n\
- ldrb r0, [r2]\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- adds r1, r0, r3\n\
- movs r0, 0\n\
- ldrsb r0, [r1, r0]\n\
- cmp r0, 0\n\
- bge _08026264\n\
- movs r0, 0\n\
- strb r0, [r1]\n\
-_08026264:\n\
- ldr r1, _080262BC @ =gActiveBank\n\
- ldrb r0, [r1]\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- adds r1, r0, r3\n\
- movs r0, 0\n\
- ldrsb r0, [r1, r0]\n\
- cmp r0, 0xC\n\
- ble _0802627A\n\
- movs r0, 0xC\n\
- strb r0, [r1]\n\
-_0802627A:\n\
- mov r2, r8\n\
- ldrb r0, [r2, 0x5]\n\
- cmp r0, 0x2\n\
- bne _080262A2\n\
- movs r3, 0x1\n\
- ands r3, r5\n\
- cmp r3, 0\n\
- beq _08026294\n\
- ldr r0, _080262C0 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
-_08026294:\n\
- mov r4, r8\n\
- ldrb r0, [r4, 0x5]\n\
- cmp r0, 0x2\n\
- bne _080262A2\n\
- cmp r3, 0\n\
- bne _080262A2\n\
- b _08025F74\n\
-_080262A2:\n\
- movs r0, 0\n\
-_080262A4:\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080262B4: .4byte gBankTarget\n\
-_080262B8: .4byte gBattleCommunication\n\
-_080262BC: .4byte gActiveBank\n\
-_080262C0: .4byte gBattleMoveFlags\n\
- .syntax divided");
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & STAT_CHANGE_BS_PTR))
+ return STAT_CHANGE_DIDNT_WORK;
+
+ return STAT_CHANGE_WORKED;
}
-#endif // NONMATCHING
static void atk89_statbuffchange(void)
{
u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0)
+ if (ChangeStatBuffs(gBattleStruct->statChanger & 0xF0, gBattleStruct->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0)
gBattlescriptCurrInstr += 6;
}
@@ -13456,7 +11892,7 @@ static void atk91_givepaydaymoney(void)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney)
{
- AddMoney(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier);
+ AddMoney(&gSaveBlock1.money, gPaydayMoney * gBattleStruct->moneyMultiplier);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 1;
gBattleTextBuff1[2] = 2;
@@ -14142,8 +12578,8 @@ static void atk9C_setsubstitute(void)
static bool8 IsMoveUncopyable(u16 move)
{
int i;
- for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {}
- return (sUnknown_081FACFE[i] != 0xFFFE);
+ for (i = 0; sMovesForbiddenToCopy[i] != 0xFFFE && sMovesForbiddenToCopy[i] != move; i++) {}
+ return (sMovesForbiddenToCopy[i] != 0xFFFE);
}
static void atk9D_mimicattackcopy(void)
@@ -14187,13 +12623,13 @@ static void atk9D_mimicattackcopy(void)
#ifdef NONMATCHING
static void atk9E_metronome(void)
{
- // sUnknown_081FACFE
+ // sMovesForbiddenToCopy
int i;
do
{
while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162);
- for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++);
- } while (sUnknown_081FACFE[i] != 0xFFFF);
+ for (i = 0; sMovesForbiddenToCopy[i] != gCurrentMove && sMovesForbiddenToCopy[i] != 0xFFFF; i++);
+ } while (sMovesForbiddenToCopy[i] != 0xFFFF);
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
@@ -14211,7 +12647,7 @@ static void atk9E_metronome(void)
ldr r7, _08027938 @ =gCurrentMove\n\
movs r6, 0xB1\n\
lsls r6, 1\n\
- ldr r5, _0802793C @ =sUnknown_081FACFE\n\
+ ldr r5, _0802793C @ =sMovesForbiddenToCopy\n\
ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\
mov r8, r0\n\
_080278CA:\n\
@@ -14273,7 +12709,7 @@ _080278F8:\n\
bx r0\n\
.align 2, 0\n\
_08027938: .4byte gCurrentMove\n\
-_0802793C: .4byte sUnknown_081FACFE\n\
+_0802793C: .4byte sMovesForbiddenToCopy\n\
_08027940: .4byte gBattlescriptCurrInstr\n\
_08027944: .4byte 0x000001ff\n\
_08027948: .4byte 0x0000ffff\n\
@@ -14398,10 +12834,10 @@ static void atkA5_painsplitdmgcalc(void)
{
s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2;
s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff;
- BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store);
- BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store);
- BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store);
- BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store);
+ gBattleStruct->unk16014 = sBYTE0_32(to_store);
+ gBattleStruct->unk16015 = sBYTE1_32(to_store);
+ gBattleStruct->unk16016 = sBYTE2_32(to_store);
+ gBattleStruct->unk16017 = sBYTE3_32(to_store);
gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff;
gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF;
@@ -14415,7 +12851,7 @@ static void atkA5_painsplitdmgcalc(void)
#ifdef NONMATCHING
static void atkA6_settypetorandomresistance(void)
{
- if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg))
+ if (gLastLandedMoves[gBankAttacker] == 0 || gLastLandedMoves[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gLastLandedMoves[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg))
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
{
@@ -14424,7 +12860,7 @@ static void atkA6_settypetorandomresistance(void)
{
while (((type = (Random() & 0x7F)) > 0x70));
type *= 3;
- if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
+ if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
{
gBattleMons[gBankAttacker].type1 = type;
gBattleMons[gBankAttacker].type2 = type;
@@ -14443,7 +12879,7 @@ static void atkA6_settypetorandomresistance(void)
{
if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF)
{
- if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
+ if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1])
{
gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1];
gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1];
@@ -14472,7 +12908,7 @@ static void atkA6_settypetorandomresistance(void)
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
- ldr r1, _08027FA8 @ =gMoveHitWith\n\
+ ldr r1, _08027FA8 @ =gLastLandedMoves\n\
ldr r4, _08027FAC @ =gBankAttacker\n\
ldrb r0, [r4]\n\
lsls r0, 1\n\
@@ -14518,7 +12954,7 @@ _08027F8C:\n\
str r1, [r3]\n\
b _08028110\n\
.align 2, 0\n\
-_08027FA8: .4byte gMoveHitWith\n\
+_08027FA8: .4byte gLastLandedMoves\n\
_08027FAC: .4byte gBankAttacker\n\
_08027FB0: .4byte 0x0000ffff\n\
_08027FB4: .4byte gProtectStructs\n\
@@ -14590,7 +13026,7 @@ _0802802C:\n\
adds r4, r0, r4\n\
ldr r6, _08028120 @ =gTypeEffectiveness\n\
adds r3, r4, r6\n\
- ldr r1, _08028124 @ =gUnknown_02024C44\n\
+ ldr r1, _08028124 @ =gLastHitByType\n\
ldr r2, _08028128 @ =gBankAttacker\n\
ldrb r5, [r2]\n\
lsls r0, r5, 1\n\
@@ -14651,7 +13087,7 @@ _080280AE:\n\
mov r4, r10\n\
ldrb r2, [r4]\n\
lsls r0, r2, 1\n\
- ldr r7, _08028124 @ =gUnknown_02024C44\n\
+ ldr r7, _08028124 @ =gLastHitByType\n\
adds r0, r7\n\
ldrh r0, [r0]\n\
cmp r1, r0\n\
@@ -14708,7 +13144,7 @@ _08028110:\n\
bx r0\n\
.align 2, 0\n\
_08028120: .4byte gTypeEffectiveness\n\
-_08028124: .4byte gUnknown_02024C44\n\
+_08028124: .4byte gLastHitByType\n\
_08028128: .4byte gBankAttacker\n\
_0802812C: .4byte gBattleMons\n\
_08028130: .4byte 0x000003e7\n\
@@ -14842,7 +13278,7 @@ static void atkAA_setdestinybond(void)
gBattlescriptCurrInstr++;
}
-static void DestinyBondFlagUpdate(void)
+static void TrySetDestinyBondToHappen(void)
{
u8 atk_side = GetBankSide(gBankAttacker);
u8 def_side = GetBankSide(gBankTarget);
@@ -14852,7 +13288,7 @@ static void DestinyBondFlagUpdate(void)
static void atkAB_trysetdestinybondtohappen(void)
{
- DestinyBondFlagUpdate();
+ TrySetDestinyBondToHappen();
gBattlescriptCurrInstr++;
}
@@ -14862,10 +13298,10 @@ static void atkAC_remaininghptopower(void)
int i;
for (i = 0; i < 12; i += 2)
{
- if (hp_fraction <= sUnknown_081FAD26[i])
+ if (hp_fraction <= sFlailHpScaleToPowerTable[i])
break;
}
- gDynamicBasePower = sUnknown_081FAD26[i + 1];
+ gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1];
gBattlescriptCurrInstr++;
}
@@ -14941,7 +13377,7 @@ static void atkAE_healpartystatus(void)
gBattleCommunication[MULTISTRING_CHOOSER] |= 1;
}
- gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2);
+ gActiveBank = gBattleStruct->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]))
{
if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF)
@@ -15250,7 +13686,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
}
gCurrentMove = MOVE_PURSUIT;
gBattlescriptCurrInstr += 5;
- BATTLE_STRUCT->animTurn = 1;
+ gBattleStruct->animTurn = 1;
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
}
else
@@ -16400,7 +14836,7 @@ static void atkD6_doubledamagedealtifdamaged(void)
{
if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget)
|| (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget))
- BATTLE_STRUCT->dmgMultiplier = 2;
+ gBattleStruct->dmgMultiplier = 2;
gBattlescriptCurrInstr++;
}
@@ -16509,13 +14945,13 @@ static void atkDC_trysetgrudge(void)
static void atkDD_weightdamagecalculation(void)
{
int i;
- for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2)
+ for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2)
{
- if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
+ if (sWeightToDamageTable[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
break;
}
- if (sWeightDamage[i] != 0xFFFF)
- gDynamicBasePower = sWeightDamage[i + 1];
+ if (sWeightToDamageTable[i] != 0xFFFF)
+ gDynamicBasePower = sWeightToDamageTable[i + 1];
else
gDynamicBasePower = 120;
gBattlescriptCurrInstr++;
@@ -16539,17 +14975,17 @@ static void atkDE_asistattackselect(void)
break;
if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
break;
- chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no];
+ chooseable_moves = &gBattleStruct->assistMove[chooseable_moves_no];
for (j = 0; j < 4; j++)
{
int k;
u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i);
if (IsMoveUnchoosable(move))
break;
- //sUnknown_081FACFE[k]
+ //sMovesForbiddenToCopy[k]
for (k = 0; ;k++)
{
- if (sUnknown_081FACFE[k] == 0xFFFF)
+ if (sMovesForbiddenToCopy[k] == 0xFFFF)
{
if (move)
{
@@ -16559,7 +14995,7 @@ static void atkDE_asistattackselect(void)
}
break;
}
- if (sUnknown_081FACFE[k] == move)
+ if (sMovesForbiddenToCopy[k] == move)
break;
}
}
@@ -16567,7 +15003,7 @@ static void atkDE_asistattackselect(void)
if (chooseable_moves_no)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
- gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no];
+ gRandomMove = gBattleStruct->assistMove[Random() % chooseable_moves_no];
gBankTarget = GetMoveTarget(gRandomMove, 0);
gBattlescriptCurrInstr += 5;
}
@@ -16652,7 +15088,7 @@ _0802AAF8:\n\
adds r1, r5, 0x1\n\
cmp r0, 0\n\
bne _0802AB4E\n\
- ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\
+ ldr r0, _0802ABB4 @ =sMovesForbiddenToCopy\n\
ldrh r2, [r0]\n\
adds r3, r0, 0\n\
cmp r2, r8\n\
@@ -16727,7 +15163,7 @@ _0802ABA4: .4byte gEnemyParty\n\
_0802ABA8: .4byte gBattlePartyID\n\
_0802ABAC: .4byte 0x0000ffff\n\
_0802ABB0: .4byte gSharedMem + 0x16024\n\
-_0802ABB4: .4byte sUnknown_081FACFE\n\
+_0802ABB4: .4byte sMovesForbiddenToCopy\n\
_0802ABB8: .4byte gHitMarker\n\
_0802ABBC: .4byte 0xfffffbff\n\
_0802ABC0: .4byte gRandomMove\n\
@@ -16792,11 +15228,11 @@ static void atkE1_trygetintimidatetarget(void)
{
u8 side;
- BATTLE_STRUCT->scriptingActive = ewram160DD;
- side = GetBankSide(BATTLE_STRUCT->scriptingActive);
+ gBattleStruct->scriptingActive = ewram160DD;
+ side = GetBankSide(gBattleStruct->scriptingActive);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 9;
- gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability;
+ gBattleTextBuff1[2] = gBattleMons[gBattleStruct->scriptingActive].ability;
gBattleTextBuff1[3] = 0xFF;
for (;gBankTarget < gNoOfAllBanks; gBankTarget++)
@@ -16901,10 +15337,10 @@ static void atkE5_pickup(void)
static void atkE6_docastformchangeanimation(void)
{
- gActiveBank = BATTLE_STRUCT->scriptingActive;
+ gActiveBank = gBattleStruct->scriptingActive;
if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE)
- BATTLE_STRUCT->castformToChangeInto |= 0x80;
- EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, BATTLE_STRUCT->castformToChangeInto);
+ gBattleStruct->castformToChangeInto |= 0x80;
+ EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, gBattleStruct->castformToChangeInto);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr++;
}
@@ -16913,11 +15349,11 @@ static void atkE7_trycastformdatachange(void)
{
u8 form;
gBattlescriptCurrInstr++;
- form = CastformDataTypeChange(BATTLE_STRUCT->scriptingActive);
+ form = CastformDataTypeChange(gBattleStruct->scriptingActive);
if (form)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->castformToChangeInto = form - 1;
+ gBattleStruct->castformToChangeInto = form - 1;
}
}
@@ -16953,17 +15389,17 @@ static void atkE9_setweatherballtype(void)
if (WEATHER_HAS_EFFECT)
{
if ((u8)(gBattleWeather))
- BATTLE_STRUCT->dmgMultiplier = 2;
+ gBattleStruct->dmgMultiplier = 2;
if (gBattleWeather & WEATHER_RAIN_ANY)
- BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_WATER | 0x80;
else if (gBattleWeather & WEATHER_SANDSTORM_ANY)
- BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_ROCK | 0x80;
else if (gBattleWeather & WEATHER_SUN_ANY)
- BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_FIRE | 0x80;
else if (gBattleWeather & WEATHER_HAIL)
- BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_ICE | 0x80;
else
- BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80;
+ gBattleStruct->dynamicMoveType = TYPE_NORMAL | 0x80;
}
gBattlescriptCurrInstr++;
}
@@ -17010,8 +15446,8 @@ static void atkEC_pursuitrelated(void)
gActionsByTurnOrder[gActiveBank] = 11;
gCurrentMove = MOVE_PURSUIT;
gBattlescriptCurrInstr += 5;
- BATTLE_STRUCT->animTurn = 1;
- BATTLE_STRUCT->unk160A7 = gBankAttacker;
+ gBattleStruct->animTurn = 1;
+ gBattleStruct->unk160A7 = gBankAttacker;
gBankAttacker = gActiveBank;
}
else
@@ -17022,10 +15458,10 @@ static void atkED_snatchsetbanks(void)
{
gEffectBank = gBankAttacker;
if (gBankAttacker == gBankTarget)
- gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive;
+ gBankAttacker = gBankTarget = gBattleStruct->scriptingActive;
else
- gBankTarget = BATTLE_STRUCT->scriptingActive;
- BATTLE_STRUCT->scriptingActive = gEffectBank;
+ gBankTarget = gBattleStruct->scriptingActive;
+ gBattleStruct->scriptingActive = gEffectBank;
gBattlescriptCurrInstr++;
}
@@ -17038,13 +15474,13 @@ static void atkEE_removelightscreenreflect(void) //brick break
gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN);
gSideTimers[side].reflectTimer = 0;
gSideTimers[side].lightscreenTimer = 0;
- BATTLE_STRUCT->animTurn = 1;
- BATTLE_STRUCT->animTargetsHit = 1;
+ gBattleStruct->animTurn = 1;
+ gBattleStruct->animTargetsHit = 1;
}
else
{
- BATTLE_STRUCT->animTurn = 0;
- BATTLE_STRUCT->animTargetsHit = 0;
+ gBattleStruct->animTurn = 0;
+ gBattleStruct->animTargetsHit = 0;
}
gBattlescriptCurrInstr++;
}
@@ -17074,7 +15510,7 @@ void atkEF_handleballthrow(void)
u32 odds;
u8 catch_rate;
if (gLastUsedItem == ITEM_SAFARI_BALL)
- catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate
+ catch_rate = gBattleStruct->unk16089 * 1275 / 100; //correct the name to safariFleeRate
else
catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate;
if (gLastUsedItem > 5)
@@ -17386,15 +15822,15 @@ static void atkF3_trygivecaughtmonnick(void)
case 2:
if (!gPaletteFade.active)
{
- GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick);
- DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2);
+ GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick);
+ DoNamingScreen(2, gBattleStruct->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2);
gBattleCommunication[0]++;
}
break;
case 3:
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active )
{
- SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick);
+ SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick);
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
break;
diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c
index 1c79d7ebf..b4c71b9c2 100644
--- a/src/battle/battle_7.c
+++ b/src/battle/battle_7.c
@@ -624,9 +624,6 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
}
else
{
- const void *src;
- void *dst;
-
if (IsContest())
{
r10 = 0;
@@ -676,9 +673,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
gTransformedPersonalities[a]);
}
}
- src = gUnknown_081FAF4C[r10];
- dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32);
- DmaCopy32(3, src, dst, 0x800);
+ DmaCopy32Defvars(3, gUnknown_081FAF4C[r10], (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32), 0x800);
paletteOffset = 0x100 + a * 16;
lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue);
LZDecompressWram(lzPaletteData, gSharedMem);
@@ -763,7 +758,7 @@ void sub_80324E0(u8 a)
ewram17800[a].substituteSprite = 0;
}
-void sub_80324F8(struct Pokemon *pkmn, u8 b)
+void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b)
{
u16 hp = GetMonData(pkmn, MON_DATA_HP);
u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP);
@@ -793,7 +788,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b)
}
}
-void BattleMusicStop(void)
+void BattleStopLowHpSound(void)
{
u8 r4 = GetBankByIdentity(0);
@@ -821,11 +816,11 @@ void sub_8032638(void)
u8 r5 = pokemon_order_func(gBattlePartyID[r9]);
if (GetMonData(&gPlayerParty[r4], MON_DATA_HP) != 0)
- sub_80324F8(&gPlayerParty[r4], r8);
+ HandleLowHpMusicChange(&gPlayerParty[r4], r8);
if (IsDoubleBattle())
{
if (GetMonData(&gPlayerParty[r5], MON_DATA_HP) != 0)
- sub_80324F8(&gPlayerParty[r5], r9);
+ HandleLowHpMusicChange(&gPlayerParty[r5], r9);
}
}
}
diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c
index 80848d2fd..2ac9df2b9 100644
--- a/src/battle/battle_ai.c
+++ b/src/battle/battle_ai.c
@@ -1422,8 +1422,8 @@ static void BattleAICmd_get_highest_possible_damage(void)
s32 i;
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
AI_THINKING_STRUCT->funcResult = 0;
@@ -1462,8 +1462,8 @@ static void BattleAICmd_if_damage_bonus(void)
u8 damageVar;
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
@@ -1669,8 +1669,8 @@ static void BattleAICmd_if_can_faint(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
@@ -1698,8 +1698,8 @@ static void BattleAICmd_if_cant_faint(void)
}
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
- BATTLE_STRUCT->dmgMultiplier = 1;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->dmgMultiplier = 1;
gBattleMoveFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
@@ -1907,7 +1907,7 @@ static void BattleAICmd_flee(void)
static void BattleAICmd_if_random_100(void)
{
- u8 safariFleeRate = BATTLE_STRUCT->safariFleeRate * 5; // safari flee rate, from 0-20
+ u8 safariFleeRate = gBattleStruct->safariFleeRate * 5; // safari flee rate, from 0-20
if ((u8)(Random() % 100) < safariFleeRate)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c
index 4549d1fcb..c71c12ce7 100644
--- a/src/battle/battle_anim.c
+++ b/src/battle/battle_anim.c
@@ -1910,36 +1910,19 @@ bool8 IsAnimBankSpriteVisible(u8 bank)
void sub_8076034(u8 a, u8 b)
{
- volatile u8 pointlessZero;
- u16 *addr2;
u8 spriteId;
if (b == 0)
{
+ volatile u8 pointlessZero;
struct UnknownStruct2 s;
- u8 *addr;
- u32 size;
u8 r2;
- u16 *addr3;
sub_8078914(&s);
- addr = s.unk0;
- size = 0x2000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
- pointlessZero = 0;
- pointlessZero = 0;
- addr2 = (void *)s.unk4;
- DmaFill16(3, 0xFF, addr2, 0x1000);
+ DmaFill32Large(3, 0, s.unk0, 0x2000, 0x1000);
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ DmaFill16Defvars(3, 0xFF, (void *)s.unk4, 0x1000);
REG_BG1CNT_BITFIELD.priority = 2;
REG_BG1CNT_BITFIELD.screenSize = 1;
@@ -1956,8 +1939,7 @@ void sub_8076034(u8 a, u8 b)
REG_BG1VOFS = gBattle_BG1_Y;
LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, s.unk8 * 16, 32);
- addr3 = (u16 *)PLTT + s.unk8 * 16;
- DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32);
+ DmaCopy32Defvars(3, gPlttBufferUnfaded + 0x100 + a * 16, (u16 *)PLTT + s.unk8 * 16, 32);
if (IsContest() != 0)
r2 = 0;
@@ -1969,27 +1951,12 @@ void sub_8076034(u8 a, u8 b)
}
else
{
- u8 *addr;
- u32 size;
- u16 *addr3;
+ volatile u8 pointlessZero;
- addr = (void *)(VRAM + 0x6000);
- size = 0x2000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
- pointlessZero = 0;
- pointlessZero = 0;
- addr2 = (void *)(VRAM + 0xF000);
- DmaFill32(3, 0, addr2, 0x800);
+ DmaFill32Large(3, 0, (void *)(VRAM + 0x6000), 0x2000, 0x1000);
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ DmaFill32Defvars(3, 0, (void *)(VRAM + 0xF000), 0x800);
REG_BG2CNT_BITFIELD.priority = 2;
REG_BG2CNT_BITFIELD.screenSize = 1;
@@ -2004,8 +1971,7 @@ void sub_8076034(u8 a, u8 b)
REG_BG2VOFS = gBattle_BG2_Y;
LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, 0x90, 32);
- addr3 = (void *)(PLTT + 0x120);
- DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32);
+ DmaCopy32Defvars(3, gPlttBufferUnfaded + 0x100 + a * 16, (void *)(PLTT + 0x120), 32);
sub_80E4EF8(0, 0, GetBankIdentity(a), 9, 0x6000, 0x1E, REG_BG2CNT_BITFIELD.charBaseBlock);
}
@@ -2060,57 +2026,25 @@ void sub_80763FC(u16 a, u16 *b, u32 c, u8 d)
void sub_8076464(u8 a)
{
- u8 *addr;
- u32 size;
volatile u8 pointlessZero;
struct UnknownStruct2 s;
sub_8078914(&s);
if (a == 0 || IsContest() != 0)
{
- u16 *addr2;
-
- addr = s.unk0;
- size = 0x2000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
- pointlessZero = 0;
- pointlessZero = 0;
- addr2 = s.unk4;
- DmaFill32(3, 0, addr2, 0x800);
+ DmaFill32Large(3, 0, s.unk0, 0x2000, 0x1000);
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ DmaFill32Defvars(3, 0, s.unk4, 0x800);
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
}
else
{
- u16 *addr2;
-
- addr = (void *)(VRAM + 0x6000);
- size = 0x2000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
- pointlessZero = 0;
- pointlessZero = 0;
- addr2 = (void *)(VRAM + 0xF000);
- DmaFill32(3, 0, addr2, 0x800);
+ DmaFill32Large(3, 0, (void *)(VRAM + 0x6000), 0x2000, 0x1000);
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
+ DmaFill32Defvars(3, 0, (void *)(VRAM + 0xF000), 0x800);
gBattle_BG2_X = 0;
gBattle_BG2_Y = 0;
}
@@ -2130,25 +2064,15 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
if (gTasks[taskId].data[5] == 0)
{
- u16 *src;
- u16 *dst;
-
gBattle_BG1_X = x + gTasks[taskId].data[3];
gBattle_BG1_Y = y + gTasks[taskId].data[4];
- src = gPlttBufferFaded + 0x100 + palIndex * 16;
- dst = gPlttBufferFaded + 0x100 + s.unk8 * 16 - 256;
- DmaCopy32(3, src, dst, 32);
+ DmaCopy32Defvars(3, gPlttBufferFaded + 0x100 + palIndex * 16, gPlttBufferFaded + 0x100 + s.unk8 * 16 - 256, 32);
}
else
{
- u16 *src;
- u16 *dst;
-
gBattle_BG2_X = x + gTasks[taskId].data[3];
gBattle_BG2_Y = y + gTasks[taskId].data[4];
- src = gPlttBufferFaded + 0x100 + palIndex * 16;
- dst = gPlttBufferFaded + 0x100 - 112;
- DmaCopy32(3, src, dst, 32);
+ DmaCopy32Defvars(3, gPlttBufferFaded + 0x100 + palIndex * 16, gPlttBufferFaded + 0x100 - 112, 32);
}
}
@@ -2492,14 +2416,10 @@ static void LoadMoveBg(u16 bgId)
if (IsContest())
{
void *tilemap = gBattleAnimBackgroundTable[bgId].tilemap;
- void *dmaSrc;
- void *dmaDest;
LZDecompressWram(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000);
sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0);
- dmaSrc = IsContest() ? EWRAM_14800 : EWRAM_18000;
- dmaDest = (void *)(VRAM + 0xD000);
- DmaCopy32(3, dmaSrc, dmaDest, 0x800);
+ DmaCopy32Defvars(3, IsContest() ? EWRAM_14800 : EWRAM_18000, (void *)(VRAM + 0xD000), 0x800);
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(VRAM + 0x2000));
LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80789BC() * 16, 32);
}
diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c
index e39d98997..3a16e12e6 100644
--- a/src/battle/battle_controller_linkpartner.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -94,7 +94,7 @@ extern void sub_804777C();
extern void sub_8043DFC();
//extern s16 sub_8045C78();
extern void sub_80440EC();
-extern void sub_80324F8();
+extern void HandleLowHpMusicChange();
extern void nullsub_9(u16);
extern void sub_8043DB0();
extern void move_anim_start_t4();
@@ -355,7 +355,7 @@ void bx_t3_healthbar_update(void)
}
else
{
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
LinkPartnerBufferExecCompleted();
}
}
@@ -434,7 +434,7 @@ void sub_811E0CC(void)
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
CreateTask(c3_0802FDF4, 10);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
sub_804777C(gActiveBank);
@@ -1084,7 +1084,7 @@ void sub_811EC68(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
break;
}
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
void LinkPartnerHandlecmd3(void)
@@ -1243,7 +1243,7 @@ void LinkPartnerHandlecmd10(void)
else if (!ewram17810[gActiveBank].unk0_6)
{
ewram17810[gActiveBank].unk4 = 0;
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlaySE12WithPanning(SE_POKE_DEAD, -64);
gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0;
gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5;
diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c
index 2bdf448db..f036e841f 100644
--- a/src/battle/battle_controller_player.c
+++ b/src/battle/battle_controller_player.c
@@ -87,7 +87,7 @@ extern void sub_802E220();
extern void sub_802E2D4();
extern void sub_802E004(void);
extern void sub_802DF30(void);
-extern void BattleMusicStop(void);
+extern void BattleStopLowHpSound(void);
extern void PlayerBufferExecCompleted(void);
extern void bx_t1_healthbar_update(void);
extern void nullsub_91(void);
@@ -1019,9 +1019,9 @@ void sub_802D31C(void)
m4aMPlayContinue(&gMPlay_BGM);
else
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
if (IsDoubleBattle())
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
ewram17810[gActiveBank].unk9 = 3;
gBattleBankFunc[gActiveBank] = sub_802D2E0;
}
@@ -1077,7 +1077,7 @@ void sub_802D730(void)
if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs())
{
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlayerBufferExecCompleted();
}
}
@@ -1118,7 +1118,7 @@ void bx_t1_healthbar_update(void)
}
else
{
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlayerBufferExecCompleted();
}
}
@@ -2278,7 +2278,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
break;
}
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
void PlayerHandlecmd3(void)
@@ -2438,7 +2438,7 @@ void PlayerHandlecmd10(void)
if (ewram17810[gActiveBank].unk0_6 == 0)
{
ewram17810[gActiveBank].unk4 = 0;
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
PlaySE12WithPanning(SE_POKE_DEAD, -64);
gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0;
gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5;
@@ -2655,7 +2655,7 @@ void PlayerHandlecmd22(void)
void PlayerHandlecmd23(void)
{
- BattleMusicStop();
+ BattleStopLowHpSound();
BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
PlayerBufferExecCompleted();
}
@@ -2749,22 +2749,7 @@ void PlayerHandleDMATransfer(void)
| (gBattleBufferA[gActiveBank][4] << 24);
u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8);
- const u8 *src = &gBattleBufferA[gActiveBank][7];
- u8 *dst = (u8 *)val1;
- u32 size = val2;
-
- while (1)
- {
- if (size <= 0x1000)
- {
- DmaCopy16(3, src, dst, size);
- break;
- }
- DmaCopy16(3, src, dst, 0x1000);
- src += 0x1000;
- dst += 0x1000;
- size -= 0x1000;
- }
+ Dma3CopyLarge16_(&gBattleBufferA[gActiveBank][7], (u8 *)val1, val2);
PlayerBufferExecCompleted();
}
diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c
index 4c0adab5e..49f530129 100644
--- a/src/battle/battle_controller_wally.c
+++ b/src/battle/battle_controller_wally.c
@@ -412,7 +412,7 @@ void sub_81376B8(void)
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
CreateTask(c3_0802FDF4, 10);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
WallyBufferExecCompleted();
}
}
@@ -429,7 +429,7 @@ void sub_81377B0(void)
}
else
{
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
WallyBufferExecCompleted();
}
}
@@ -1066,7 +1066,7 @@ void sub_8138294(u8 a)
SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
break;
}
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
void WallyHandlecmd3(void)
diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c
index d8efc09c5..ed7ab3a35 100644
--- a/src/battle/battle_message.c
+++ b/src/battle/battle_message.c
@@ -25,6 +25,8 @@
#include "../data/battle_strings_en.h"
#endif
+// This is four lists of moves which use a different attack string in Japanese
+// to the default. See the documentation for sub_8121D74 for more detail.
const u16 gUnknown_084016BC[] =
{
MOVE_SWORDS_DANCE,
@@ -69,7 +71,7 @@ const u16 gUnknown_084016BC[] =
MOVE_MUDDY_WATER,
MOVE_IRON_DEFENSE,
MOVE_BOUNCE,
- MOVE_NONE,
+ 0,
MOVE_TELEPORT,
MOVE_RECOVER,
MOVE_BIDE,
@@ -77,7 +79,7 @@ const u16 gUnknown_084016BC[] =
MOVE_FLAIL,
MOVE_TAUNT,
MOVE_BULK_UP,
- MOVE_NONE,
+ 0,
MOVE_MEDITATE,
MOVE_AGILITY,
MOVE_MIMIC,
@@ -96,7 +98,7 @@ const u16 gUnknown_084016BC[] =
MOVE_FAKE_TEARS,
MOVE_WATER_SPORT,
MOVE_CALM_MIND,
- MOVE_NONE,
+ 0,
MOVE_POUND,
MOVE_SCRATCH,
MOVE_VICE_GRIP,
@@ -144,7 +146,7 @@ const u16 gUnknown_084016BC[] =
MOVE_ENDEAVOR,
MOVE_TICKLE,
MOVE_COVET,
- MOVE_NONE,
+ 0,
};
const u8 gUnknown_084017A8[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // empty flags
@@ -158,7 +160,6 @@ extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gStringBank;
extern u8 gEffectBank;
-extern u8 gAbilitiesPerBank[4];
extern u8 gBattleTextBuff1[];
extern u8 gBattleTextBuff2[];
extern u8 gBattleTextBuff3[];
@@ -175,6 +176,8 @@ extern u16 gBattlePartyID[4];
extern struct BattleEnigmaBerry gEnigmaBerries[4];
extern u8 gBattleBufferA[4][0x200];
+EWRAM_DATA u8 gAbilitiesPerBank[4] = {0};
+
extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings
extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings
extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings
@@ -214,11 +217,11 @@ void BufferStringBattle(u16 stringID)
gStringInfo = (struct StringInfoBattle*)(&gBattleBufferA[gActiveBank][4]);
gLastUsedItem = gStringInfo->lastItem;
gLastUsedAbility = gStringInfo->lastAbility;
- BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive;
- BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E;
- BATTLE_STRUCT->hpScale = gStringInfo->hpScale;
+ gBattleStruct->scriptingActive = gStringInfo->scrActive;
+ gBattleStruct->unk1605E = gStringInfo->unk1605E;
+ gBattleStruct->hpScale = gStringInfo->hpScale;
gStringBank = gStringInfo->StringBank;
- BATTLE_STRUCT->stringMoveType = gStringInfo->moveType;
+ gBattleStruct->stringMoveType = gStringInfo->moveType;
for (i = 0; i < 4; i++)
{
gAbilitiesPerBank[i] = gStringInfo->abilities[i];
@@ -304,11 +307,11 @@ void BufferStringBattle(u16 stringID)
case 2: // sending poke to ball msg
if (GetBankSide(gActiveBank) == 0)
{
- if (BATTLE_STRUCT->hpScale == 0)
+ if (gBattleStruct->hpScale == 0)
stringPtr = BattleText_ComeBackSingle1;
- else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ else if (gBattleStruct->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
stringPtr = BattleText_ComeBackSingle2;
- else if (BATTLE_STRUCT->hpScale == 2)
+ else if (gBattleStruct->hpScale == 2)
stringPtr = BattleText_ComeBackSingle3;
else
stringPtr = BattleText_ComeBackSingle4;
@@ -332,13 +335,13 @@ void BufferStringBattle(u16 stringID)
}
break;
case 3: // switch-in msg
- if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0)
+ if (GetBankSide(gBattleStruct->scriptingActive) == 0)
{
- if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ if (gBattleStruct->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
stringPtr = BattleText_SentOutSingle7;
- else if (BATTLE_STRUCT->hpScale == 1)
+ else if (gBattleStruct->hpScale == 1)
stringPtr = BattleText_SentOutSingle8;
- else if (BATTLE_STRUCT->hpScale == 2)
+ else if (gBattleStruct->hpScale == 2)
stringPtr = BattleText_SentOutSingle9;
else
stringPtr = BattleText_SentOutSingle10;
@@ -364,7 +367,7 @@ void BufferStringBattle(u16 stringID)
case 4: // pokemon used a move msg
sub_8121D1C(gBattleTextBuff1);
if (gStringInfo->currentMove > 0x162)
- StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]);
+ StringCopy(gBattleTextBuff2, gUnknown_08401674[gBattleStruct->stringMoveType]);
else
StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
sub_8121D74(gBattleTextBuff2);
@@ -636,17 +639,17 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
HANDLE_NICKNAME_STRING_CASE(gActiveBank, gBattlePartyID[gActiveBank])
break;
case 16: // scripting active bank name with prefix
- HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, gBattlePartyID[BATTLE_STRUCT->scriptingActive])
+ HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattlePartyID[gBattleStruct->scriptingActive])
break;
case 17: // current move name
if (gStringInfo->currentMove > 0x162)
- toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
+ toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->currentMove];
break;
case 18: // last used move name
if (gStringInfo->lastMove > 0x162)
- toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
+ toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->lastMove];
break;
@@ -655,7 +658,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
{
if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank)
{
StringCopy(text, gEnigmaBerries[gStringBank].name);
#ifdef ENGLISH
@@ -690,7 +693,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]];
break;
case 23: // scripting active ability
- toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]];
+ toCpy = gAbilityNames[gAbilitiesPerBank[gBattleStruct->scriptingActive]];
break;
case 24: // effect bank ability
toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]];
@@ -750,7 +753,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
break;
case 31: // link scripting active name
- toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name;
+ toCpy = gLinkPlayers[sub_803FC34(gBattleStruct->scriptingActive)].name;
break;
case 32: // player name
toCpy = gSaveBlock2.playerName;
@@ -759,7 +762,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = GetTrainerLoseText();
break;
case 34: // ?
- HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E)
+ HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattleStruct->unk1605E)
break;
case 35: // lanette pc
if (FlagGet(FLAG_SYS_PC_LANETTE))
@@ -946,7 +949,7 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
{
if (hword == ITEM_ENIGMA_BERRY)
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank)
{
StringCopy(dst, gEnigmaBerries[gStringBank].name);
#ifdef ENGLISH
@@ -970,6 +973,10 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
}
}
+// Loads one of two text strings into the provided buffer. This is functionally
+// unused, since the value loaded into the buffer is not read; it loaded one of
+// two particles (either "は" or "の") which works in tandem with sub_8121D74
+// below to effect changes in the meaning of the line.
void sub_8121D1C(u8* textBuff)
{
s32 counter = 0;
@@ -992,6 +999,24 @@ void sub_8121D1C(u8* textBuff)
}
}
+// Appends "!" to the text buffer `dst`. In the original Japanese this looked
+// into the table of moves at gUnknown_084016BC and varied the line accordingly.
+//
+// BattleText_Exclamation was a plain "!", used for any attack not on the list.
+// It resulted in the translation "<NAME>'s <ATTACK>!".
+//
+// BattleText_Exclamation2 was "を つかった!". This resulted in the translation
+// "<NAME> used <ATTACK>!", which was used for all attacks in English.
+//
+// BattleText_Exclamation3 was "した!". This was used for those moves whose
+// names were verbs, such as Recover, and resulted in translations like "<NAME>
+// recovered itself!".
+//
+// BattleText_Exclamation4 was "を した!" This resulted in a translation of
+// "<NAME> did an <ATTACK>!".
+//
+// BattleText_Exclamation5 was " こうげき!" This resulted in a translation of
+// "<NAME>'s <ATTACK> attack!".
void sub_8121D74(u8* dst)
{
s32 counter = 0;
diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c
index 68a97c536..ed8cf4583 100644
--- a/src/battle/battle_party_menu.c
+++ b/src/battle/battle_party_menu.c
@@ -40,7 +40,7 @@ extern u8 gUnknown_0202E8F6;
extern u8 gUnknown_02038470[3];
extern u8 gUnknown_02038473;
extern u8 gUnknown_020384F0;
-extern void (*gUnknown_03004AE4)(); //don't know types yet
+extern void (*gPokemonItemUseCallback)(); //don't know types yet
extern struct PokemonStorage gPokemonStorage;
extern void nullsub_14();
@@ -466,7 +466,7 @@ void HandleBattlePartyMenu(u8 taskId)
{
if (gUnknown_02038473 == 3 && GetItemEffectType(gSpecialVar_ItemId) == 10)
{
- gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4);
+ gPokemonItemUseCallback(taskId, gSpecialVar_ItemId, Task_80952E4);
return;
}
@@ -480,7 +480,7 @@ void HandleBattlePartyMenu(u8 taskId)
else
{
sub_806D5A4();
- gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4);
+ gPokemonItemUseCallback(taskId, gSpecialVar_ItemId, Task_80952E4);
}
}
else
diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c
index b4ff407fc..892be1029 100644
--- a/src/battle/battle_setup.c
+++ b/src/battle/battle_setup.c
@@ -520,8 +520,8 @@ static void DoStandardWildBattle(void)
gMain.savedCallback = CB2_EndWildBattle;
gBattleTypeFlags = 0;
CreateBattleStartTask(GetWildBattleTransition(), 0);
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
void BattleSetup_StartRoamerBattle(void)
@@ -532,8 +532,8 @@ void BattleSetup_StartRoamerBattle(void)
gMain.savedCallback = CB2_EndWildBattle;
gBattleTypeFlags = BATTLE_TYPE_ROAMER;
CreateBattleStartTask(GetWildBattleTransition(), 0);
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
static void DoSafariBattle(void)
@@ -549,8 +549,8 @@ static void DoSafariBattle(void)
static void StartTheBattle(void)
{
CreateBattleStartTask(GetTrainerBattleTransition(), 0);
- IncrementGameStat(7);
- IncrementGameStat(9);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_TRAINER_BATTLES);
}
//Initiates battle where Wally catches Ralts
@@ -569,8 +569,8 @@ void BattleSetup_StartScriptedWildBattle(void)
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = 0;
CreateBattleStartTask(GetWildBattleTransition(), 0);
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
void ScrSpecial_StartSouthernIslandBattle(void)
@@ -579,8 +579,8 @@ void ScrSpecial_StartSouthernIslandBattle(void)
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
CreateBattleStartTask(GetWildBattleTransition(), 0);
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
void ScrSpecial_StartRayquazaBattle(void)
@@ -589,8 +589,8 @@ void ScrSpecial_StartRayquazaBattle(void)
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
CreateBattleStartTask(B_TRANSITION_BLUR, BGM_BATTLE34);
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
void ScrSpecial_StartGroudonKyogreBattle(void)
@@ -602,8 +602,8 @@ void ScrSpecial_StartGroudonKyogreBattle(void)
CreateBattleStartTask(B_TRANSITION_SHARDS, BGM_BATTLE34); // GROUDON
else
CreateBattleStartTask(B_TRANSITION_RIPPLE, BGM_BATTLE34); // KYOGRE
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
void ScrSpecial_StartRegiBattle(void)
@@ -612,8 +612,8 @@ void ScrSpecial_StartRegiBattle(void)
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI;
CreateBattleStartTask(B_TRANSITION_GRID_SQUARES, BGM_BATTLE36);
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
static void CB2_EndWildBattle(void)
@@ -879,8 +879,8 @@ static void CB2_StartFirstBattle(void)
SetMainCallback2(sub_800E7C4);
prev_quest_postbuffer_cursor_backup_reset();
overworld_poison_timer_set();
- IncrementGameStat(7);
- IncrementGameStat(8);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
}
diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c
index f7cdc0694..a94974b27 100644
--- a/src/battle/battle_transition.c
+++ b/src/battle/battle_transition.c
@@ -6,6 +6,7 @@
#include "palette.h"
#include "trig.h"
#include "field_effect.h"
+#include "field_weather.h"
#include "random.h"
#include "sprite.h"
#include "sound.h"
@@ -15,7 +16,6 @@
#include "ewram.h"
#include "scanline_effect.h"
-void sub_807DE10(void);
void ScanlineEffect_Clear(void);
extern const struct OamData gFieldOamData_32x32;
@@ -567,7 +567,7 @@ static void Task_BattleTransitionMain(u8 taskID)
static bool8 Transition_Phase1(struct Task* task)
{
- sub_807DE10();
+ SetWeatherScreenFadeOut();
CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
if (sPhase1_Tasks[task->tTransitionID] != NULL)
{
diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c
index 9dc030a1a..87b6952ff 100644
--- a/src/battle/battle_util.c
+++ b/src/battle/battle_util.c
@@ -4,6 +4,7 @@
#include "data2.h"
#include "event_data.h"
#include "ewram.h"
+#include "field_weather.h"
#include "item.h"
#include "link.h"
#include "pokemon.h"
@@ -21,7 +22,7 @@
#include "constants/species.h"
#include "constants/weather.h"
-extern u8* gBattlescriptCurrInstr;
+extern const u8* gBattlescriptCurrInstr;
extern u8 gActiveBank;
extern u8 gBattleBufferB[4][0x200];
extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to
@@ -85,7 +86,6 @@ u8 CountTrailingZeroBits(u32 a);
u8 GetMoveTarget(u16 move, u8 useMoveTarget);
u8 sub_803FC34(u8 bank);
u16 sub_803FBFC(u8 a);
-u8 weather_get_current(void);
void RecordAbilityBattle(u8 bank, u8 ability);
void RecordItemBattle(u8 bank, u8 holdEffect);
s8 GetPokeFlavourRelation(u32 pid, u8 flavor);
@@ -454,7 +454,7 @@ void sub_80157C4(u8 bank)
}
}
-void BattleScriptPush(u8* BS_ptr)
+void BattleScriptPush(const u8* BS_ptr)
{
B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr;
}
@@ -477,7 +477,7 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move
u16* choicedMove = CHOICED_MOVE(gActiveBank);
if (gDisableStructs[gActiveBank].disabledMove == move && move)
{
- BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gBattleStruct->scriptingActive = gActiveBank;
gCurrentMove = move;
gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionDisabledMove;
limitations++;
@@ -615,7 +615,7 @@ u8 UpdateTurnCounters(void)
{
u8 sideBank;
- switch (BATTLE_STRUCT->turncountersTracker)
+ switch (gBattleStruct->turncountersTracker)
{
case 0:
for (i = 0; i < gNoOfAllBanks; i++)
@@ -631,12 +631,12 @@ u8 UpdateTurnCounters(void)
SwapTurnOrder(i, j);
}
}
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
case 1:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT)
{
@@ -653,20 +653,20 @@ u8 UpdateTurnCounters(void)
effect++;
}
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 2:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN)
{
if (--gSideTimers[sideBank].lightscreenTimer == 0)
@@ -682,20 +682,20 @@ u8 UpdateTurnCounters(void)
effect++;
}
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 3:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0)
{
gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST;
@@ -708,20 +708,20 @@ u8 UpdateTurnCounters(void)
gBattleTextBuff1[4] = EOS;
effect++;
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 4:
- while (BATTLE_STRUCT->turnSideTracker < 2)
+ while (gBattleStruct->turnSideTracker < 2)
{
- gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker;
if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD)
{
if (--gSideTimers[sideBank].safeguardTimer == 0)
@@ -731,33 +731,33 @@ u8 UpdateTurnCounters(void)
effect++;
}
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
- BATTLE_STRUCT->turnSideTracker = 0;
+ gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
}
break;
case 5:
- while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks)
+ while (gBattleStruct->turnSideTracker < gNoOfAllBanks)
{
- gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker];
+ gActiveBank = gBanksByTurnOrder[gBattleStruct->turnSideTracker];
if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp)
{
gBankTarget = gActiveBank;
BattleScriptExecute(BattleScript_WishComesTrue);
effect++;
}
- BATTLE_STRUCT->turnSideTracker++;
+ gBattleStruct->turnSideTracker++;
if (effect)
break;
}
if (!effect)
{
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
}
break;
case 6:
@@ -783,7 +783,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(BattleScript_RainContinuesOrEnds);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 7:
if (gBattleWeather & WEATHER_SANDSTORM_ANY)
@@ -796,12 +796,12 @@ u8 UpdateTurnCounters(void)
else
gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
- BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 8:
if (gBattleWeather & WEATHER_SUN_ANY)
@@ -817,7 +817,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 9:
if (gBattleWeather & WEATHER_HAIL)
@@ -830,12 +830,12 @@ u8 UpdateTurnCounters(void)
else
gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
- BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES;
+ gBattleStruct->animArg1 = B_ANIM_HAIL_CONTINUES;
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turncountersTracker++;
+ gBattleStruct->turncountersTracker++;
break;
case 10:
effect++;
@@ -852,16 +852,16 @@ u8 TurnBasedEffects(void)
u8 effect = 0;
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
- while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE)
+ while (gBattleStruct->turnEffectsBank < gNoOfAllBanks && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
{
- gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank];
+ gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->turnEffectsBank];
if (gAbsentBankFlags & gBitTable[gActiveBank])
{
- BATTLE_STRUCT->turnEffectsBank++;
+ gBattleStruct->turnEffectsBank++;
}
else
{
- switch (BATTLE_STRUCT->turnEffectsTracker)
+ switch (gBattleStruct->turnEffectsTracker)
{
case 0: // ingrain
if ((gStatuses3[gActiveBank] & STATUS3_ROOTED)
@@ -875,22 +875,22 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_IngrainTurnHeal);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 1: // end turn abilities
if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBank, 0, 0, 0))
effect++;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 2: // item effects
if (ItemBattleEffects(1, gActiveBank, 0))
effect++;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 18: // item effects again
if (ItemBattleEffects(1, gActiveBank, 1))
effect++;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 3: // leech seed
if (gStatuses3[gActiveBank] & STATUS3_LEECHSEED && gBattleMons[gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gActiveBank].hp != 0)
@@ -899,12 +899,12 @@ u8 TurnBasedEffects(void)
gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- BATTLE_STRUCT->animArg1 = gBankTarget;
- BATTLE_STRUCT->animArg2 = gBankAttacker;
+ gBattleStruct->animArg1 = gBankTarget;
+ gBattleStruct->animArg2 = gBankAttacker;
BattleScriptExecute(BattleScript_LeechSeedTurnDrain);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 4: // poison
if ((gBattleMons[gActiveBank].status1 & STATUS_POISON) && gBattleMons[gActiveBank].hp != 0)
@@ -915,7 +915,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_PoisonTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 5: // toxic poison
if ((gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON) && gBattleMons[gActiveBank].hp != 0)
@@ -929,7 +929,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_PoisonTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 6: // burn
if ((gBattleMons[gActiveBank].status1 & STATUS_BURN) && gBattleMons[gActiveBank].hp != 0)
@@ -940,7 +940,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_BurnTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 7: // spooky nightmares
if ((gBattleMons[gActiveBank].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBank].hp != 0)
@@ -952,7 +952,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_NightmareTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 8: // curse
if ((gBattleMons[gActiveBank].status2 & STATUS2_CURSED) && gBattleMons[gActiveBank].hp != 0)
@@ -963,7 +963,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(BattleScript_CurseTurnDmg);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 9: // wrap
if ((gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBank].hp != 0)
@@ -971,8 +971,8 @@ u8 TurnBasedEffects(void)
gBattleMons[gActiveBank].status2 -= 0x2000;
if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap
{
- BATTLE_STRUCT->animArg1 = ewram16004arr(0, gActiveBank);
- BATTLE_STRUCT->animArg2 = ewram16004arr(1, gActiveBank);
+ gBattleStruct->animArg1 = ewram16004arr(0, gActiveBank);
+ gBattleStruct->animArg2 = ewram16004arr(1, gActiveBank);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 2;
gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank);
@@ -995,7 +995,7 @@ u8 TurnBasedEffects(void)
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 10: // uproar
if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR)
@@ -1044,7 +1044,7 @@ u8 TurnBasedEffects(void)
}
}
if (effect != 2)
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 11: // thrash
if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE)
@@ -1066,7 +1066,7 @@ u8 TurnBasedEffects(void)
}
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 12: // disable
if (gDisableStructs[gActiveBank].disableTimer1 != 0)
@@ -1089,7 +1089,7 @@ u8 TurnBasedEffects(void)
effect++;
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 13: // encore
if (gDisableStructs[gActiveBank].encoreTimer1 != 0)
@@ -1108,22 +1108,22 @@ u8 TurnBasedEffects(void)
effect++;
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 14: // lock-on decrement
if (gStatuses3[gActiveBank] & STATUS3_ALWAYS_HITS)
gStatuses3[gActiveBank] -= 0x8;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 15: // charge
if (gDisableStructs[gActiveBank].chargeTimer1 && --gDisableStructs[gActiveBank].chargeTimer1 == 0)
gStatuses3[gActiveBank] &= ~STATUS3_CHARGED_UP;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 16: // taunt
if (gDisableStructs[gActiveBank].tauntTimer1)
gDisableStructs[gActiveBank].tauntTimer1--;
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 17: // yawn
if (gStatuses3[gActiveBank] & STATUS3_YAWN)
@@ -1142,11 +1142,11 @@ u8 TurnBasedEffects(void)
effect++;
}
}
- BATTLE_STRUCT->turnEffectsTracker++;
+ gBattleStruct->turnEffectsTracker++;
break;
case 19: // done
- BATTLE_STRUCT->turnEffectsTracker = 0;
- BATTLE_STRUCT->turnEffectsBank++;
+ gBattleStruct->turnEffectsTracker = 0;
+ gBattleStruct->turnEffectsBank++;
break;
}
if (effect != 0)
@@ -1160,17 +1160,17 @@ u8 TurnBasedEffects(void)
bool8 HandleWishPerishSongOnTurnEnd(void)
{
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
- switch (BATTLE_STRUCT->sub80170DC_Tracker)
+ switch (gBattleStruct->sub80170DC_Tracker)
{
case 0: // future sight
- while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks)
+ while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks)
{
- gActiveBank = BATTLE_STRUCT->sub80170DC_Bank;
+ gActiveBank = gBattleStruct->sub80170DC_Bank;
if (gAbsentBankFlags & gBitTable[gActiveBank])
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
else
{
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
if (gWishFutureKnock.futureSightCounter[gActiveBank] && --gWishFutureKnock.futureSightCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp)
{
if (gWishFutureKnock.futureSightMove[gActiveBank] == MOVE_FUTURE_SIGHT)
@@ -1191,17 +1191,17 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
}
}
}
- BATTLE_STRUCT->sub80170DC_Tracker = 1;
- BATTLE_STRUCT->sub80170DC_Bank = 0;
+ gBattleStruct->sub80170DC_Tracker = 1;
+ gBattleStruct->sub80170DC_Bank = 0;
case 1: // perish song
- while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks)
+ while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks)
{
- gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank];
+ gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->sub80170DC_Bank];
if (gAbsentBankFlags & gBitTable[gActiveBank])
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
else
{
- BATTLE_STRUCT->sub80170DC_Bank++;
+ gBattleStruct->sub80170DC_Bank++;
if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG)
{
gBattleTextBuff1[0] = 0xFD;
@@ -1241,11 +1241,11 @@ bool8 HandleFaintedMonActions(void)
do
{
int i;
- switch (BATTLE_STRUCT->sub80173A4_Tracker)
+ switch (gBattleStruct->sub80173A4_Tracker)
{
case 0:
- BATTLE_STRUCT->unk1605A = 0;
- BATTLE_STRUCT->sub80173A4_Tracker++;
+ gBattleStruct->unk1605A = 0;
+ gBattleStruct->sub80173A4_Tracker++;
for (i = 0; i < gNoOfAllBanks; i++)
{
if (gAbsentBankFlags & gBitTable[i] && !sub_8018018(i, 6, 6))
@@ -1254,54 +1254,54 @@ bool8 HandleFaintedMonActions(void)
case 1:
do
{
- gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A;
- if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A]))
+ gBank1 = gBankTarget = gBattleStruct->unk1605A;
+ if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->unk16113 & gBitTable[gBattlePartyID[gBattleStruct->unk1605A]]) && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A]))
{
BattleScriptExecute(BattleScript_GiveExp);
- BATTLE_STRUCT->sub80173A4_Tracker = 2;
+ gBattleStruct->sub80173A4_Tracker = 2;
return 1;
}
- } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks);
- BATTLE_STRUCT->sub80173A4_Tracker = 3;
+ } while (++gBattleStruct->unk1605A != gNoOfAllBanks);
+ gBattleStruct->sub80173A4_Tracker = 3;
break;
case 2:
sub_8015740(gBank1);
- if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks)
- BATTLE_STRUCT->sub80173A4_Tracker = 3;
+ if (++gBattleStruct->unk1605A == gNoOfAllBanks)
+ gBattleStruct->sub80173A4_Tracker = 3;
else
- BATTLE_STRUCT->sub80173A4_Tracker = 1;
+ gBattleStruct->sub80173A4_Tracker = 1;
break;
case 3:
- BATTLE_STRUCT->unk1605A = 0;
- BATTLE_STRUCT->sub80173A4_Tracker++;
+ gBattleStruct->unk1605A = 0;
+ gBattleStruct->sub80173A4_Tracker++;
case 4:
do
{
- gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched?
- if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A]))
+ gBank1 = gBankTarget = gBattleStruct->unk1605A; //or should banks be switched?
+ if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A]))
{
BattleScriptExecute(BattleScript_HandleFaintedMon);
- BATTLE_STRUCT->sub80173A4_Tracker = 5;
+ gBattleStruct->sub80173A4_Tracker = 5;
return 1;
}
- } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks);
- BATTLE_STRUCT->sub80173A4_Tracker = 6;
+ } while (++gBattleStruct->unk1605A != gNoOfAllBanks);
+ gBattleStruct->sub80173A4_Tracker = 6;
break;
case 5:
- if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks)
- BATTLE_STRUCT->sub80173A4_Tracker = 6;
+ if (++gBattleStruct->unk1605A == gNoOfAllBanks)
+ gBattleStruct->sub80173A4_Tracker = 6;
else
- BATTLE_STRUCT->sub80173A4_Tracker = 4;
+ gBattleStruct->sub80173A4_Tracker = 4;
break;
case 6:
if (AbilityBattleEffects(9, 0, 0, 0, 0) || AbilityBattleEffects(0xB, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(6, 0, 0, 0, 0))
return 1;
- BATTLE_STRUCT->sub80173A4_Tracker++;
+ gBattleStruct->sub80173A4_Tracker++;
break;
case 7:
break;
}
- } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE);
+ } while (gBattleStruct->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE);
return 0;
}
@@ -1320,15 +1320,15 @@ void TryClearRageStatuses(void)
u8 AtkCanceller_UnableToUseMove(void)
{
u8 effect = 0;
- s32* bideDmg = &BATTLE_STRUCT->bideDmg;
+ s32* bideDmg = &gBattleStruct->bideDmg;
do
{
- switch (BATTLE_STRUCT->atkCancellerTracker)
+ switch (gBattleStruct->atkCancellerTracker)
{
case 0: // flags clear
gBattleMons[gBankAttacker].status2 &= ~(STATUS2_DESTINY_BOND);
gStatuses3[gBankAttacker] &= ~(STATUS3_GRUDGE);
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 1: // check being asleep
if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP)
@@ -1372,7 +1372,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
}
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 2: // check being frozen
if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE)
@@ -1386,7 +1386,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
else
{
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
}
}
@@ -1399,7 +1399,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 2;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 3: // truant
if (gBattleMons[gBankAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBankAttacker].truantCounter)
@@ -1411,7 +1411,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleMoveFlags |= MOVESTATUS_MISSED;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 4: // recharge
if (gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE)
@@ -1423,7 +1423,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 5: // flinch
if (gBattleMons[gBankAttacker].status2 & STATUS2_FLINCHED)
@@ -1435,19 +1435,19 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 6: // disabled move
if (gDisableStructs[gBankAttacker].disabledMove == gCurrentMove && gDisableStructs[gBankAttacker].disabledMove != 0)
{
gProtectStructs[gBankAttacker].usedDisabledMove = 1;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->scriptingActive = gBankAttacker;
CancelMultiTurnMoves(gBankAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 7: // taunt
if (gDisableStructs[gBankAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0)
@@ -1458,7 +1458,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 8: // imprisoned
if (IsImprisoned(gBankAttacker, gCurrentMove))
@@ -1469,7 +1469,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 9: // confusion
if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION)
@@ -1499,7 +1499,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 10: // paralysis
if (gBattleMons[gBankAttacker].status1 & STATUS_PARALYSIS && (Random() % 4) == 0)
@@ -1510,12 +1510,12 @@ u8 AtkCanceller_UnableToUseMove(void)
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 11: // infatuation
if (gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION)
{
- BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
+ gBattleStruct->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
if (Random() & 1)
BattleScriptPushCursor();
else
@@ -1528,7 +1528,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 12: // bide
if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE)
@@ -1553,7 +1553,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 1;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 13: // move thawing
if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE)
@@ -1567,13 +1567,13 @@ u8 AtkCanceller_UnableToUseMove(void)
}
effect = 2;
}
- BATTLE_STRUCT->atkCancellerTracker++;
+ gBattleStruct->atkCancellerTracker++;
break;
case 14: // last case
break;
}
- } while (BATTLE_STRUCT->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0);
+ } while (gBattleStruct->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0);
if (effect == 2)
{
@@ -1731,8 +1731,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
else
move = gCurrentMove;
- if (BATTLE_STRUCT->dynamicMoveType)
- moveType = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ if (gBattleStruct->dynamicMoveType)
+ moveType = gBattleStruct->dynamicMoveType & 0x3F;
else
moveType = gBattleMoves[move].type;
@@ -1747,7 +1747,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
case 0xFF: //weather from overworld
//_08018586
- switch (weather_get_current())
+ switch (GetCurrentWeather())
{
case WEATHER_RAIN_LIGHT:
case WEATHER_RAIN_MED:
@@ -1755,8 +1755,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (!(gBattleWeather & WEATHER_RAIN_ANY))
{
gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT);
- BATTLE_STRUCT->animArg1 = B_ANIM_RAIN_CONTINUES;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->animArg1 = B_ANIM_RAIN_CONTINUES;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1764,8 +1764,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (!(gBattleWeather & WEATHER_SANDSTORM_ANY))
{
gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
- BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1773,15 +1773,15 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (!(gBattleWeather & WEATHER_SUN_ANY))
{
gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
- BATTLE_STRUCT->animArg1 = B_ANIM_SUN_CONTINUES;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->animArg1 = B_ANIM_SUN_CONTINUES;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
}
if (effect)
{
- gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current();
+ gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather();
BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
}
break;
@@ -1791,7 +1791,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY);
BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1801,7 +1801,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1811,7 +1811,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -1829,8 +1829,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (effect != 0)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = bank;
- BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ gBattleStruct->scriptingActive = bank;
+ gBattleStruct->castformToChangeInto = effect - 1;
}
break;
case ABILITY_TRACE:
@@ -1852,8 +1852,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (effect != 0)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = target1;
- BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ gBattleStruct->scriptingActive = target1;
+ gBattleStruct->castformToChangeInto = effect - 1;
break;
}
}
@@ -1897,7 +1897,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
gBattleMons[bank].status1 = 0;
// BUG: The nightmare status does not get cleared here. This was fixed in Emerald.
//gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
- BATTLE_STRUCT->scriptingActive = gActiveBank = bank;
+ gBattleStruct->scriptingActive = gActiveBank = bank;
BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates);
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1);
MarkBufferBankForExecution(gActiveBank);
@@ -1908,10 +1908,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[bank].isFirstTurn != 2)
{
gBattleMons[bank].statStages[STAT_STAGE_SPEED]++;
- BATTLE_STRUCT->animArg1 = 0x11;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->animArg1 = 0x11;
+ gBattleStruct->animArg2 = 0;
BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates);
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
effect++;
}
break;
@@ -2218,7 +2218,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
}
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gActiveBank = bank;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
MarkBufferBankForExecution(gActiveBank);
@@ -2238,8 +2238,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (effect)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- BATTLE_STRUCT->scriptingActive = bank;
- BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ gBattleStruct->scriptingActive = bank;
+ gBattleStruct->castformToChangeInto = effect - 1;
return effect;
}
}
@@ -2251,11 +2251,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
{
gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
- BATTLE_STRUCT->synchroniseEffect &= 0x3F;
- if (BATTLE_STRUCT->synchroniseEffect == 6)
- BATTLE_STRUCT->synchroniseEffect = 2;
- gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40;
- BATTLE_STRUCT->scriptingActive = gBankTarget;
+ gBattleStruct->synchroniseEffect &= 0x3F;
+ if (gBattleStruct->synchroniseEffect == 6)
+ gBattleStruct->synchroniseEffect = 2;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect + 0x40;
+ gBattleStruct->scriptingActive = gBankTarget;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
@@ -2267,11 +2267,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
{
gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
- BATTLE_STRUCT->synchroniseEffect &= 0x3F;
- if (BATTLE_STRUCT->synchroniseEffect == 6)
- BATTLE_STRUCT->synchroniseEffect = 2;
- gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->synchroniseEffect &= 0x3F;
+ if (gBattleStruct->synchroniseEffect == 6)
+ gBattleStruct->synchroniseEffect = 2;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect;
+ gBattleStruct->scriptingActive = gBankAttacker;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
@@ -2287,7 +2287,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursorAndCallback(gUnknown_081D978C);
- BATTLE_STRUCT->intimidateBank = i;
+ gBattleStruct->intimidateBank = i;
effect++;
break;
}
@@ -2346,7 +2346,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
BattleScriptPushCursorAndCallback(BattleScript_TraceActivates);
gStatuses3[i] &= ~(STATUS3_TRACE);
- BATTLE_STRUCT->scriptingActive = i;
+ gBattleStruct->scriptingActive = i;
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 4;
@@ -2373,7 +2373,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursor();
gBattlescriptCurrInstr = gUnknown_081D9795;
- BATTLE_STRUCT->intimidateBank = i;
+ gBattleStruct->intimidateBank = i;
effect++;
break;
}
@@ -2499,7 +2499,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
return effect;
}
-void BattleScriptExecute(u8* BS_ptr)
+void BattleScriptExecute(const u8* BS_ptr)
{
gBattlescriptCurrInstr = BS_ptr;
B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc;
@@ -2586,7 +2586,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
switch (bankHoldEffect)
{
case HOLD_EFFECT_DOUBLE_PRIZE:
- BATTLE_STRUCT->moneyMultiplier = 2;
+ gBattleStruct->moneyMultiplier = 2;
break;
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < 8; i++)
@@ -2599,7 +2599,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = gBankAttacker = bank;
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
@@ -2672,7 +2672,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = gBankAttacker = bank;
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
@@ -2809,9 +2809,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff2[4] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_ATK;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_ATK;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2825,9 +2825,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_DEF;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_DEF;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2841,9 +2841,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPEED;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPEED;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2857,9 +2857,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPATK;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPATK;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2873,9 +2873,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff1[3] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF;
- BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPDEF;
+ gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPDEF;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -2918,9 +2918,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff2[7] = EOS;
gEffectBank = bank;
- BATTLE_STRUCT->statChanger = 0x21 + i;
- BATTLE_STRUCT->animArg1 = 0x21 + i + 6;
- BATTLE_STRUCT->animArg2 = 0;
+ gBattleStruct->statChanger = 0x21 + i;
+ gBattleStruct->animArg1 = 0x21 + i + 6;
+ gBattleStruct->animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
@@ -3033,7 +3033,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = gBankAttacker = bank;
switch (effect)
@@ -3181,7 +3181,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_WhiteHerbRet;
@@ -3191,7 +3191,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- BATTLE_STRUCT->scriptingActive = bank;
+ gBattleStruct->scriptingActive = bank;
gStringBank = bank;
gActiveBank = bank;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
@@ -3228,7 +3228,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
{
gLastUsedItem = atkItem;
gStringBank = gBankAttacker;
- BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleStruct->scriptingActive = gBankAttacker;
gBattleMoveDamage = (gSpecialStatuses[gBankTarget].moveturnLostHP / atkQuality) * -1;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = -1;
@@ -3433,7 +3433,7 @@ u8 IsMonDisobedient(void)
gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
gBattleCommunication[3] = 0;
gDynamicBasePower = 0;
- BATTLE_STRUCT->dynamicMoveType = 0;
+ gBattleStruct->dynamicMoveType = 0;
gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove;
gBankTarget = GetMoveTarget(gRandomMove, 0);
gHitMarker |= HITMARKER_x200000;
diff --git a/src/battle/post_battle_event_funcs.c b/src/battle/post_battle_event_funcs.c
index 0617763f6..a44cf028b 100644
--- a/src/battle/post_battle_event_funcs.c
+++ b/src/battle/post_battle_event_funcs.c
@@ -26,8 +26,8 @@ int GameClear(void)
FlagSet(FLAG_SYS_GAME_CLEAR);
}
- if (!GetGameStat(1))
- SetGameStat(1, (gSaveBlock2.playTimeHours << 16) | (gSaveBlock2.playTimeMinutes << 8) | gSaveBlock2.playTimeSeconds);
+ if (!GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME))
+ SetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME, (gSaveBlock2.playTimeHours << 16) | (gSaveBlock2.playTimeMinutes << 8) | gSaveBlock2.playTimeSeconds);
SetSecretBase2Field_9();
@@ -54,7 +54,7 @@ int GameClear(void)
if (ribbonGet == TRUE)
{
- IncrementGameStat(42);
+ IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS);
FlagSet(FLAG_SYS_RIBBON_GET);
}
diff --git a/src/contest.c b/src/contest.c
index df4bb361d..93d1a8efc 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -39,8 +39,6 @@ extern void sub_80C8AD0(u8);
extern void sub_80C8C80(u8);
extern struct MusicPlayerInfo gMPlay_SE1;
-extern u16 gSpecialVar_ContestCategory;
-extern u16 gSpecialVar_ContestRank;
extern u8 gBattleMonForms[];
extern u8 gDisplayedStringBattle[];
extern u16 gBattleTypeFlags;
@@ -48,8 +46,6 @@ extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBanksBySide[];
extern u8 gObjectBankIDs[];
-extern u8 gIsLinkContest;
-extern u8 gContestPlayerMonIndex;
extern u16 gBattle_BG3_X;
extern s16 gBattle_BG1_Y;
extern u16 gBattle_BG3_Y;
@@ -65,14 +61,6 @@ extern u16 gBattle_BG1_X;
extern u16 gBattle_WIN0H;
extern u32 gUnknown_03005D28; // saved RNG value
-extern s16 gUnknown_02038680[];
-extern u16 gUnknown_02038688[];
-extern u8 gUnknown_02038694;
-extern u8 gUnknown_02038696[];
-extern u8 gUnknown_0203869B;
-extern s16 gUnknown_02038670[];
-extern s16 gUnknown_02038678[];
-extern u8 gContestFinalStandings[]; // What "place" each participant came in.
extern struct SpriteTemplate gUnknown_02024E8C;
@@ -292,6 +280,20 @@ void sub_80B292C(void);
void sub_80B2968(void);
void SelectContestMoveBankTarget(u16);
+EWRAM_DATA u8 gUnknown_0203856C = 0;
+EWRAM_DATA struct ContestPokemon gContestMons[4] = {0};
+EWRAM_DATA s16 gUnknown_02038670[4] = {0};
+EWRAM_DATA s16 gUnknown_02038678[4] = {0};
+EWRAM_DATA s16 gUnknown_02038680[4] = {0};
+EWRAM_DATA u16 gUnknown_02038688[4] = {0};
+EWRAM_DATA u8 gContestFinalStandings[4] = {0}; // What "place" each participant came in.
+EWRAM_DATA u8 gUnknown_02038694 = 0;
+EWRAM_DATA u8 gContestPlayerMonIndex = 0;
+EWRAM_DATA u8 gUnknown_02038696[4] = {0};
+EWRAM_DATA u8 gIsLinkContest = 0;
+EWRAM_DATA u8 gUnknown_0203869B = 0;
+EWRAM_DATA u16 gSpecialVar_ContestCategory = 0;
+EWRAM_DATA u16 gSpecialVar_ContestRank = 0;
void nullsub_89(u8 taskId)
{
@@ -3671,12 +3673,8 @@ void sub_80B0748(u8 taskId)
{
// What the hell? These aren't pointers.
// This code would crash if run.
- {
- void *src = (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1];
- void *dest = (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1];
- u32 size = 6;
- DmaCopy16(3, src, dest, size);
- }
+ DmaCopy16Defvars(3, (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1],
+ (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1], 6);
gTasks[taskId].data[r1 + 0] = 0;
}
}
@@ -4046,21 +4044,13 @@ u8 sub_80B09E4(u8 a)
CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32));
CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32));
- {
- void *dest = (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32);
- u32 size = 0x300;
- DmaFill32(3, 0, dest, size);
- }
+ DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32), 0x300);
// What is this?
zero = 0;
zero = 0;
- {
- void *dest = (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32);
- u32 size = 0x300;
- DmaFill32(3, 0, dest, size);
- }
+ DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32), 0x300);
gSprites[r8].data[0] = r6;
gSprites[r6].data[0] = r8;
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 66b387270..66b387270 100755..100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h
index a3d51f2a5..a19c0fc6c 100755..100644
--- a/src/data/battle_strings_de.h
+++ b/src/data/battle_strings_de.h
@@ -1218,7 +1218,7 @@ const u8 *const gBattleStringsTable[] =
};
// below are lists of battle string enums and NOT pointers to the strings.
-const u16 gMissStrings[] =
+const u16 gMissStringIds[] =
{
BATTLE_TEXT_AttackMissed,
BATTLE_TEXT_ProtectedItself,
diff --git a/src/data/battle_strings_en.h b/src/data/battle_strings_en.h
index f29e48410..67eb70ee1 100755..100644
--- a/src/data/battle_strings_en.h
+++ b/src/data/battle_strings_en.h
@@ -1218,7 +1218,7 @@ const u8 *const gBattleStringsTable[] =
};
// below are lists of battle string enums and NOT pointers to the strings.
-const u16 gMissStrings[] =
+const u16 gMissStringIds[] =
{
BATTLE_TEXT_AttackMissed,
BATTLE_TEXT_ProtectedItself,
diff --git a/src/data/credits_de.h b/src/data/credits_de.h
index 570c0d4c5..570c0d4c5 100755..100644
--- a/src/data/credits_de.h
+++ b/src/data/credits_de.h
diff --git a/src/data/credits_en.h b/src/data/credits_en.h
index 8ce0bad03..8ce0bad03 100755..100644
--- a/src/data/credits_en.h
+++ b/src/data/credits_en.h
diff --git a/src/debug/crash.c b/src/debug/crash.c
new file mode 100644
index 000000000..85058d285
--- /dev/null
+++ b/src/debug/crash.c
@@ -0,0 +1,55 @@
+#include "global.h"
+#include "main.h"
+#include "task.h"
+#include "text.h"
+#include "palette.h"
+
+extern struct Window gUnknown_03004210;
+
+static void CB2_CrashIdle(void);
+
+// unused exception handler. Takes a string input describing the exception
+// and halts on a black screen. Used in German Debug Ruby.
+void Crash(u8 *text)
+{
+ u16 savedIme;
+
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ REG_WIN0H = 0;
+ REG_WIN0V = 0;
+ REG_WIN1H = 0;
+ REG_WIN1V = 0;
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = savedIme;
+ REG_DISPSTAT = 8;
+ ResetTasks();
+ ResetSpriteData();
+ SetMainCallback2(CB2_CrashIdle);
+ DmaFill32Large(3, 0, (void *)VRAM, 0x18000, 0x1000);
+ Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8);
+ Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8);
+ LoadFontDefaultPalette(&gWindowTemplate_81E6FD8);
+ Text_InitWindowAndPrintText(&gUnknown_03004210, text, 1, 9, 7);
+}
+
+static void CB2_CrashIdle(void)
+{
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+}
diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c
index 1da337b04..da1937adb 100644
--- a/src/debug/matsuda_debug_menu.c
+++ b/src/debug/matsuda_debug_menu.c
@@ -37,8 +37,8 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
-extern struct Window gUnknown_03004210;
-extern u8 (*gCallback_03004AE8)(void);
+
+extern u8 (*gMenuCallback)(void);
extern bool8 gReceivedRemoteLinkPlayers;
@@ -251,7 +251,7 @@ u8 unref_sub_80A9B28(void)
Menu_DrawStdWindowFrame(0, 0, 17, 18);
Menu_PrintItems(1, 1, 7, gMatsudaDebugMenuActions);
InitMenu(0, 1, 1, 7, 0, 16);
- gCallback_03004AE8 = sub_80A9B78;
+ gMenuCallback = sub_80A9B78;
return 0;
}
@@ -264,7 +264,7 @@ static bool8 sub_80A9B78(void)
case -2:
return FALSE;
default:
- gCallback_03004AE8 = gMatsudaDebugMenuActions[choice].func;
+ gMenuCallback = gMatsudaDebugMenuActions[choice].func;
return FALSE;
case -1:
CloseMenu();
@@ -469,26 +469,10 @@ static void sub_80A9F50(void)
static void sub_80A9FE4(void)
{
- u8 *addr;
- u32 i;
u8 ptr[5];
memcpy(ptr, gMatsudaDebugMenu_UnknownByteArray, 5);
-
- addr = (void *)VRAM;
- i = VRAM_SIZE;
-
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- i -= 0x1000;
- if (i <= 0x1000)
- {
- DmaFill32(3, 0, addr, i);
- break;
- }
- }
+ DmaFill32Large(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
sub_80034D4((void *)VRAM, ptr);
LoadFontDefaultPalette(&gWindowTemplate_81E6C3C);
}
@@ -1032,63 +1016,3 @@ u8 MatsudaDebugMenu_SetArtMuseumItems(void)
CloseMenu();
return 1;
}
-
-void unref_sub_80AB084(u8 *text)
-{
- u16 savedIme;
- u8 *addr;
- size_t size;
-
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WIN1H = 0;
- REG_WIN1V = 0;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
-
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_IME = savedIme;
- REG_DISPSTAT = 8;
- ResetTasks();
- ResetSpriteData();
- SetMainCallback2(sub_80AB184);
-
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
- Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8);
- Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8);
- LoadFontDefaultPalette(&gWindowTemplate_81E6FD8);
- Text_InitWindowAndPrintText(&gUnknown_03004210, text, 1, 9, 7);
-}
-
-void sub_80AB184(void)
-{
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
-}
diff --git a/src/debug/mori_debug_menu.c b/src/debug/mori_debug_menu.c
index 7b9a579a7..767f4cda0 100644
--- a/src/debug/mori_debug_menu.c
+++ b/src/debug/mori_debug_menu.c
@@ -12,7 +12,7 @@
#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT)
-extern u8 (*gCallback_03004AE8)(void);
+extern u8 (*gMenuCallback)(void);
u8 gUnknown_03004DA0[0x20];
@@ -98,7 +98,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
Menu_EraseScreen();
Menu_DrawStdWindowFrame(0, 14, 30, 19);
Menu_PrintText(localPtr, 1, 15);
- gCallback_03004AE8 = sub_8083D4C;
+ gMenuCallback = sub_8083D4C;
return 0;
}
@@ -184,7 +184,7 @@ bool8 MoriDebugMenuProcessInput(void)
switch (choice)
{
default:
- gCallback_03004AE8 = gMoriDebugMenuActions[choice].func;
+ gMenuCallback = gMoriDebugMenuActions[choice].func;
return FALSE;
case -2:
return FALSE;
@@ -200,6 +200,6 @@ s8 InitMoriDebugMenu(void)
Menu_DrawStdWindowFrame(0, 0, 10, 19);
Menu_PrintItems(1, 1, 9, gMoriDebugMenuActions);
InitMenu(0, 1, 1, 9, 0, 9);
- gCallback_03004AE8 = MoriDebugMenuProcessInput;
+ gMenuCallback = MoriDebugMenuProcessInput;
return 0;
}
diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c
index 9cece924d..ef3e0e66c 100644
--- a/src/debug/unknown_debug_menu.c
+++ b/src/debug/unknown_debug_menu.c
@@ -4,7 +4,7 @@
extern u8 gBattleCommunication[];
-extern u8 (*gCallback_03004AE8)(void);
+extern u8 (*gMenuCallback)(void);
static u8 sub_814A4B8(void);
static u8 sub_814A464(void);
@@ -36,7 +36,7 @@ int unref_sub_814A414(void)
Menu_DrawStdWindowFrame(0, 0, 16, 18);
Menu_PrintItems(2, 1, 8, gUnknown_0842C29C);
InitMenu(0, 1, 1, 8, 0, 15);
- gCallback_03004AE8 = sub_814A464;
+ gMenuCallback = sub_814A464;
return 0;
}
@@ -55,7 +55,7 @@ static u8 sub_814A464(void)
else
{
gBattleCommunication[0] = result;
- gCallback_03004AE8 = gUnknown_0842C29C[result].func;
+ gMenuCallback = gUnknown_0842C29C[result].func;
return 0;
}
}
diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c
index dc8bddd5a..c56fe7576 100644
--- a/src/easy_chat_2.c
+++ b/src/easy_chat_2.c
@@ -70,6 +70,8 @@ static u16 sub_80EB960(void);
u8 sub_80EB9C8(void);
static u16 sub_80EB9D8(void);
+EWRAM_DATA u8 gUnknown_020388AC = 0;
+
static u8 gUnknown_03000740;
const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal");
diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c
index 44d832e2b..e7c504c7b 100644
--- a/src/engine/cable_club.c
+++ b/src/engine/cable_club.c
@@ -676,7 +676,7 @@ static void sub_808382C(u8 taskId)
switch (task->data[0])
{
case 0:
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gLinkType = 0x2211;
ClearLinkCallback_2();
task->data[0]++;
@@ -812,7 +812,7 @@ static void sub_8083AAC(u8 taskId)
{
case 0:
ScriptContext2_Enable();
- fade_screen(1, 0);
+ FadeScreen(1, 0);
ClearLinkCallback_2();
task->data[0]++;
break;
diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c
index 6aa706893..ca77c5483 100644
--- a/src/engine/naming_screen.c
+++ b/src/engine/naming_screen.c
@@ -256,20 +256,7 @@ static void NamingScreen_InitDisplayMode(void)
static void NamingScreen_ClearVram(void)
{
- u8 *addr = (void *)VRAM;
- u32 size = 0x10000;
-
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaFill16Large(3, 0, (void *)VRAM, 0x10000, 0x1000);
}
static void NamingScreen_ClearOam(void)
@@ -1627,16 +1614,8 @@ static void sub_80B7558(void)
static void sub_80B7568(void)
{
- const void *src;
- void *dst;
-
- src = gNamingScreenMenu_Gfx;
- dst = (void *)(VRAM + gMenuMessageBoxContentTileOffset * 32);
- DmaCopy16(3, src, dst, 0x800);
-
- src = gNamingScreenMenu_Gfx;
- dst = (void *)(VRAM + 0x8000 + gMenuMessageBoxContentTileOffset * 32);
- DmaCopy16(3, src, dst, 0x800);
+ DmaCopy16Defvars(3, gNamingScreenMenu_Gfx, (void *)(VRAM + gMenuMessageBoxContentTileOffset * 32), 0x800);
+ DmaCopy16Defvars(3, gNamingScreenMenu_Gfx, (void *)(VRAM + 0x8000 + gMenuMessageBoxContentTileOffset * 32), 0x800);
}
static void sub_80B75B0(void)
diff --git a/src/engine/option_menu.c b/src/engine/option_menu.c
index 1fc78efaa..d4e921a0e 100644
--- a/src/engine/option_menu.c
+++ b/src/engine/option_menu.c
@@ -76,9 +76,6 @@ void CB2_InitOptionMenu(void)
default:
case 0:
{
- u8 *addr;
- u32 size;
-
SetVBlankCallback(NULL);
REG_DISPCNT = 0;
REG_BG2CNT = 0;
@@ -90,19 +87,7 @@ void CB2_InitOptionMenu(void)
REG_BG1VOFS = 0;
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
- addr = (u8 *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaFill16Large(3, 0, (u8 *)VRAM, 0x18000, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
gMain.state++;
diff --git a/src/engine/palette.c b/src/engine/palette.c
index 17e9ca178..2a6602503 100644
--- a/src/engine/palette.c
+++ b/src/engine/palette.c
@@ -827,8 +827,6 @@ void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color)
void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color)
{
- void *src = gPlttBufferUnfaded;
- void *dest = gPlttBufferFaded;
- DmaCopy32(3, src, dest, PLTT_SIZE);
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, gPlttBufferFaded, PLTT_SIZE);
BlendPalettes(selectedPalettes, coeff, color);
}
diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c
index 75ca92e6a..a2660bf82 100644
--- a/src/engine/record_mixing.c
+++ b/src/engine/record_mixing.c
@@ -26,7 +26,7 @@
#include "tv.h"
#include "ewram.h"
-extern struct RecordMixingDayCareMail gUnknown_02038738;
+EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02038738 = {0};
extern u16 gSpecialVar_0x8005;
u32 gUnknown_03005D2C;
diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c
index c7d45e929..ce4afe922 100644
--- a/src/engine/reset_rtc_screen.c
+++ b/src/engine/reset_rtc_screen.c
@@ -414,28 +414,10 @@ void Task_ResetRtc_0(u8 taskId)
void CB2_InitResetRtcScreen(void)
{
- u8 *addr;
- u32 size;
-
REG_DISPCNT = 0;
SetVBlankCallback(NULL);
-
DmaClear16(3, PLTT, PLTT_SIZE);
-
- addr = (u8 *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, (u8 *)VRAM, 0x18000, 0x1000);
ResetOamRange(0, 128);
LoadOam();
ScanlineEffect_Stop();
diff --git a/src/engine/save.c b/src/engine/save.c
index be907edcc..250b29a87 100644
--- a/src/engine/save.c
+++ b/src/engine/save.c
@@ -674,8 +674,8 @@ u8 Save_WriteDataInternal(u8 saveType)
EraseFlashSector(i);
// fall through
case SAVE_HALL_OF_FAME: // hall of fame.
- if (GetGameStat(10) < 999)
- IncrementGameStat(10);
+ if (GetGameStat(GAME_STAT_ENTERED_HOF) < 999)
+ IncrementGameStat(GAME_STAT_ENTERED_HOF);
for (i = 0; i < NUM_HALL_OF_FAME_SECTORS; i++)
HandleWriteSectorNBytes(HALL_OF_FAME_SECTOR + i, sHallOfFameChunks[i].data, sHallOfFameChunks[i].size);
SaveSerializedGame();
diff --git a/src/engine/time_events.c b/src/engine/time_events.c
index 3e3054aa3..4bd732788 100644
--- a/src/engine/time_events.c
+++ b/src/engine/time_events.c
@@ -93,7 +93,7 @@ void UpdateShoalTideFlag(void)
static void Task_WaitWeather(u8 taskId)
{
- if (sub_807DDFC())
+ if (IsWeatherChangeComplete())
{
EnableBothScriptContexts();
DestroyTask(taskId);
diff --git a/src/engine/trade.c b/src/engine/trade.c
index 3a14adaca..4dc27ea6f 100644
--- a/src/engine/trade.c
+++ b/src/engine/trade.c
@@ -213,12 +213,14 @@ static
#endif
void sub_804DB84(void);
-extern u8 gUnknown_020297D8[2];
-extern u8 *gUnknown_020296CC[13];
+EWRAM_DATA u8 *gUnknown_020296CC[13] = {0};
+EWRAM_DATA struct MailStruct gUnknown_02029700[6] = {0};
+EWRAM_DATA u8 gUnknown_020297D8[2] = {0};
+
extern struct TradeEwramSubstruct *gUnknown_03004824;
-extern struct MailStruct gUnknown_02029700[16];
-const u32 unref_data_820ABD4[] = {
+const u32 unref_data_820ABD4[] =
+{
0x00000890,
0x00003AC0,
0x0000001C,
@@ -1453,9 +1455,7 @@ static void sub_8048AB4(void)
static void sub_8048B0C(u8 a0)
{
int i;
- u16 *dest;
- const u16 *src;
- u32 size;
+
switch (a0)
{
case 0:
@@ -1464,30 +1464,13 @@ static void sub_8048B0C(u8 a0)
gPlttBufferUnfaded[i] = *(gUnknown_08EA02C8 + i);
gPlttBufferFaded[i] = *(gUnknown_08EA02C8 + i);
}
- src = gUnknown_08EA0348;
- dest = (u16 *)BG_VRAM;
- size = 0x1280;
- while (1)
- {
- DmaCopy16(3, src, dest, BLOCKSIZE * sizeof(u16));
- src += BLOCKSIZE;
- dest += BLOCKSIZE;
- size -= BLOCKSIZE * sizeof(u16);
- if (size <= BLOCKSIZE * sizeof(u16))
- {
- DmaCopy16(3, src, dest, size);
- break;
- }
- }
+ DmaCopyLarge16(3, gUnknown_08EA0348, (void *)BG_VRAM, 0x1280, 0x1000);
for (i = 0; i < 0x400; i ++)
gUnknown_03004824->unk_00c8.unk_12[i] = gUnknown_08EA15C8[i];
- dest = BG_SCREEN_ADDR(6);
- DmaCopy16(3, gTradeStripesBG2Tilemap, dest, 0x800);
+ DmaCopy16Defvars(3, gTradeStripesBG2Tilemap, BG_SCREEN_ADDR(6), 0x800);
break;
case 1:
- src = gTradeStripesBG3Tilemap;
- dest = BG_SCREEN_ADDR(7);
- DmaCopy16(3, src, dest, 0x800);
+ DmaCopy16Defvars(3, gTradeStripesBG3Tilemap, BG_SCREEN_ADDR(7), 0x800);
sub_804A6DC(0);
sub_804A6DC(1);
sub_804A938(&gUnknown_03004824->unk_00c8);
@@ -5701,13 +5684,9 @@ static void sub_804E1DC(void)
void sub_804E22C(void)
{
- const u16 *src;
- u16 *dest;
LZDecompressVram(gUnknown_08D00000, (void *)VRAM);
CpuCopy16(gUnknown_08D00524, gSharedMem, 0x1000);
- src = (const u16 *)gSharedMem;
- dest = BG_SCREEN_ADDR(5);
- DmaCopy16(3, src, dest, 0x500)
+ DmaCopy16Defvars(3, gSharedMem, BG_SCREEN_ADDR(5), 0x500);
LoadCompressedPalette(gUnknown_08D004E0, 0, 32);
REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5);
}
diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c
index 9d09575c8..b49628bfa 100644
--- a/src/engine/trainer_card.c
+++ b/src/engine/trainer_card.c
@@ -441,27 +441,12 @@ static void sub_8093550(void)
void sub_8093598(void)
{
- u8 *addr = (void *)VRAM;
- u32 size = 0x10000;
-
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaFill16Large(3, 0, (void *)VRAM, 0x10000, 0x1000);
}
void sub_80935EC(void)
{
- void *addr = (void *)OAM;
-
- DmaFill16(3, 0, addr, 0x400);
+ DmaFill16Defvars(3, 0, (void *)OAM, 0x400);
}
void sub_8093610(void)
@@ -1163,33 +1148,10 @@ static void TrainerCard_ResetOffsetRegisters(void)
static void TrainerCard_CopyGraphics(void)
{
- const u8 *src;
- u8 *dst;
- u32 size;
-
TrainerCard_LoadPalettes();
LoadPalette(gUnknown_083B5F6C, 0xE0, 32);
- src = gMenuTrainerCard_Gfx;
- dst = (void *)VRAM;
- size = 0x1480;
- while (1)
- {
- DmaCopy16(3, src, dst, 0x1000);
- src += 0x1000;
- dst += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaCopy16(3, src, dst, size);
- break;
- }
- }
- {
- const void *src = gBadgesTiles;
- void *dst = (void *)(VRAM + 0x1480);
-
- DmaCopy16(3, src, dst, 0x400);
- }
+ DmaCopyLarge16(3, gMenuTrainerCard_Gfx, (void *)VRAM, 0x1480, 0x1000);
+ DmaCopy16Defvars(3, gBadgesTiles, (void *)(VRAM + 0x1480), 0x400);
}
extern const u16 *const gTrainerCardPalettes[];
diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c
index a05d9bf87..bb937ea43 100644
--- a/src/field/berry_tag_screen.c
+++ b/src/field/berry_tag_screen.c
@@ -93,7 +93,7 @@ static bool8 sub_8146058(void)
switch (gMain.state)
{
case 0:
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80F9368();
sub_8146288();
REG_BLDCNT = 0;
@@ -189,7 +189,6 @@ static void sub_8146288(void)
bool8 sub_81462B8(void)
{
u16 i;
- void *addr;
switch (gSharedMem.var_1FFFF)
{
@@ -213,8 +212,7 @@ bool8 sub_81462B8(void)
else
gBGTilemapBuffers[2][i] = 0x5042;
}
- addr = (void *)(VRAM + 0x3800);
- DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x3800), 0x800);
gSharedMem.var_1FFFF += 1;
break;
case 4:
diff --git a/src/field/choose_party.c b/src/field/choose_party.c
index 1d6b6541a..73470d3d2 100644
--- a/src/field/choose_party.c
+++ b/src/field/choose_party.c
@@ -931,7 +931,7 @@ void sub_81231AC(void)
static void sub_81231C4(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
DestroyTask(taskId);
ScriptContext2_Disable();
diff --git a/src/field/coord_event_weather.c b/src/field/coord_event_weather.c
index db4e9c161..60b87fa30 100644
--- a/src/field/coord_event_weather.c
+++ b/src/field/coord_event_weather.c
@@ -34,7 +34,7 @@ static const struct CoordEventWeather sCoordEventWeatherFuncs[] =
{ COORD_EVENT_WEATHER_FOG_2, CoordEventWeather_DiagonalFog },
{ COORD_EVENT_WEATHER_ASH, CoordEventWeather_Ash },
{ COORD_EVENT_WEATHER_SANDSTORM, CoordEventWeather_Sandstorm },
- { COORD_EVENT_WEATHER_DARK, CoordEventWeather_Dark },
+ { COORD_EVENT_WEATHER_SHADE, CoordEventWeather_Dark },
{ COORD_EVENT_WEATHER_DROUGHT, CoordEventWeather_Drought },
{ COORD_EVENT_WEATHER_ROUTE119_CYCLE, CoordEventWeather_Route119Cycle },
{ COORD_EVENT_WEATHER_ROUTE123_CYCLE, CoordEventWeather_Route123Cycle },
@@ -87,7 +87,7 @@ static void CoordEventWeather_Sandstorm(void)
static void CoordEventWeather_Dark(void)
{
- SetWeather(WEATHER_DARK);
+ SetWeather(WEATHER_SHADE);
}
static void CoordEventWeather_Drought(void)
diff --git a/src/field/decoration.c b/src/field/decoration.c
index a6c0bd21f..0e7fa5f41 100644
--- a/src/field/decoration.c
+++ b/src/field/decoration.c
@@ -19,6 +19,7 @@
#include "event_data.h"
#include "field_weather.h"
#include "decoration.h"
+#include "shop.h"
#include "ewram.h"
EWRAM_DATA u8 *gUnknown_020388D0 = NULL;
@@ -1614,7 +1615,7 @@ void sub_80FE604(u8 taskId)
sub_8134104(gUnknown_020388F6);
gUnknown_020388D0 = gDecorationInventories[gUnknown_020388F6].items;
sub_80FEF50(taskId);
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
sub_80F9480(gUnknown_020388F7, 8);
LoadScrollIndicatorPalette();
gTasks[taskId].func = sub_80FE868;
@@ -1659,7 +1660,7 @@ void sub_80FE758(u8 taskId)
gTasks[taskId].func = Task_DecorationPCProcessMenuInput;
} else
{
- sub_80B3068(taskId);
+ Shop_RunExitSellMenuTask(taskId);
}
}
@@ -1783,17 +1784,17 @@ void sub_80FEABC(u8 taskId, u8 dummy1)
u16 i;
u16 j;
u8 ni;
- if (gUnknown_020388F4 != 0 || (DestroyVerticalScrollIndicator(0), gUnknown_020388F4 != 0))
+ if (gUnknown_020388F4 != 0 || (DestroyVerticalScrollIndicator(TOP_ARROW), gUnknown_020388F4 != 0))
{
- CreateVerticalScrollIndicators(0, 0x3c, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0x3c, 0x08);
}
if (gUnknown_020388F4 + 7 == gUnknown_020388D5)
{
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
if (gUnknown_020388F4 + 7 < gUnknown_020388D5)
{
- CreateVerticalScrollIndicators(1, 0x3c, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0x3c, 0x98);
}
for (i=gUnknown_020388F4; i<gUnknown_020388F4+8; i++)
{
@@ -2003,8 +2004,8 @@ void sub_80FEF50(u8 taskId)
void sub_80FEF74(void)
{
sub_80F9520(gUnknown_020388F7, 8);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 14, 19);
}
@@ -2043,8 +2044,8 @@ void sub_80FF034(u8 taskId)
void sub_80FF058(u8 taskId)
{
sub_80F9520(gUnknown_020388F7, 8);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
BuyMenuFreeMemory();
gTasks[taskId].func = sub_80FF034;
}
@@ -2238,7 +2239,7 @@ void sub_80FF5BC(u8 taskId)
{
if (sub_80FF58C() == TRUE)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_80FF6AC;
} else
@@ -2271,8 +2272,8 @@ void sub_80FF6AC(u8 taskId)
if (!gPaletteFade.active)
{
sub_80FF0E0(taskId);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
sub_80F9520(gUnknown_020388F7, 8);
BuyMenuFreeMemory();
gTasks[taskId].data[2] = 1;
@@ -2288,7 +2289,7 @@ void sub_80FF6AC(u8 taskId)
gTasks[taskId].data[2] = 2;
break;
case 2:
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].data[12] = 0;
sub_810065C(taskId);
@@ -3192,7 +3193,7 @@ void sub_810026C(u8 taskId)
void sub_810028C(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = c1_overworld_prev_quest;
}
@@ -3221,7 +3222,7 @@ void c1_overworld_prev_quest(u8 taskId)
void sub_8100334(u8 taskId)
{
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].func = sub_80FE948;
}
@@ -3628,7 +3629,7 @@ void sub_8100A0C(u8 taskId)
{
if (sub_8100D38(taskId) == 1)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_8100E70;
} else
@@ -3734,7 +3735,7 @@ void sub_8100C88(u8 taskId)
gTasks[taskId].data[2] = 3;
break;
case 3:
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].data[13] = -1;
DisplayItemMessageOnField(taskId, gSecretBaseText_DecorReturned, sub_81010F0, 0);
@@ -3799,7 +3800,7 @@ void sub_8100E70(u8 taskId)
data[2] = 2;
break;
case 2:
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
data[12] = 1;
sub_8100EEC(taskId);
@@ -4137,7 +4138,7 @@ void sub_8101518(u8 taskId)
void sub_810153C(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_8100C88;
}
@@ -4156,7 +4157,7 @@ void sub_8101590(u8 taskId)
void sub_81015B0(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_81015E0;
}
@@ -4183,7 +4184,7 @@ void sub_81015E0(u8 taskId)
void sub_8101648(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].func = Task_DecorationPCProcessMenuInput;
}
diff --git a/src/field/diploma.c b/src/field/diploma.c
index 978eca7eb..b31fc7dec 100644
--- a/src/field/diploma.c
+++ b/src/field/diploma.c
@@ -125,7 +125,7 @@ static void Task_DiplomaFadeOut(u8 taskId)
static void DisplayDiplomaText(void)
{
- if (sub_8090FF4())
+ if (CompletedNationalPokedex())
{
REG_BG3HOFS = 256;
StringCopy(gStringVar1, gOtherText_NationalDex);
diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c
index 52e66f16e..bf96c724f 100644
--- a/src/field/field_control_avatar.c
+++ b/src/field/field_control_avatar.c
@@ -181,7 +181,7 @@ int sub_8068024(struct FieldInput *input)
return TRUE;
if (input->input_field_0_6)
{
- IncrementGameStat(5);
+ IncrementGameStat(GAME_STAT_STEPS);
if (sub_80687E4(&position, r4, r6) == 1)
return TRUE;
}
@@ -767,20 +767,19 @@ static u8 *trigger_activate(struct CoordEvent *coordEvent)
return NULL;
}
-static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 x, u16 y, u8 d)
+static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation)
{
s32 i;
struct CoordEvent *coordEvents = mapHeader->events->coordEvents;
u8 coordEventCount = mapHeader->events->coordEventCount;
- u8 *script;
for (i = 0; i < coordEventCount; i++)
{
if ((u16)coordEvents[i].x == x && (u16)coordEvents[i].y == y)
{
- if (coordEvents[i].unk4 == d || coordEvents[i].unk4 == 0)
+ if (coordEvents[i].elevation == elevation || coordEvents[i].elevation == 0)
{
- script = trigger_activate(&coordEvents[i]);
+ u8 *script = trigger_activate(&coordEvents[i]);
if (script != NULL)
return script;
}
diff --git a/src/field/field_effect.c b/src/field/field_effect.c
index 435978034..e1389c378 100644
--- a/src/field/field_effect.c
+++ b/src/field/field_effect.c
@@ -408,7 +408,7 @@ void FieldEffectScript_LoadFadedPalette(u8 **script)
{
struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script);
LoadSpritePalette(palette);
- sub_807D78C(IndexOfSpritePaletteTag(palette->tag));
+ UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(palette->tag));
(*script) += 4;
}
@@ -544,7 +544,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
LoadCompressedObjectPalette(&gMonPaletteTable[species]);
GetMonSpriteTemplate_803C56C(species, 3);
gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag;
- sub_807DE38(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10);
return CreateSprite(&gUnknown_02024E8C, x, y, subpriority);
}
@@ -557,13 +557,13 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
LoadCompressedObjectPalette(spritePalette);
GetMonSpriteTemplate_803C56C(species, 3);
gUnknown_02024E8C.paletteTag = spritePalette->tag;
- sub_807DE38(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
return CreateSprite(&gUnknown_02024E8C, x, y, subpriority);
}
void FreeResourcesAndDestroySprite(struct Sprite *sprite)
{
- sub_807DE68();
+ ResetPreservedPalettesInWeather();
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
if (sprite->oam.affineMode != 0)
{
@@ -1092,7 +1092,7 @@ void task00_8084310(u8 taskId)
task = &gTasks[taskId];
if (!task->data[0])
{
- if (!sub_807D770())
+ if (!IsWeatherNotFadingIn())
{
return;
}
@@ -1192,7 +1192,7 @@ bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0]
bool8 sub_8086854(struct Task *task) // gUnknown_0839F2CC[1]
{
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
task->data[0]++;
}
@@ -1814,7 +1814,7 @@ bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite
bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
{
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
gFieldEffectArguments[0] = mapObject->coords2.x;
gFieldEffectArguments[1] = mapObject->coords2.y;
@@ -2047,7 +2047,7 @@ void sub_8087A74(u8 taskId)
void sub_8087AA4(struct Task *task)
{
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
task->data[0]++;
task->data[15] = player_get_direction_lower_nybble();
@@ -2200,7 +2200,7 @@ void sub_8087E4C(struct Task *task)
{
struct Sprite *sprite;
s16 centerToCornerVecY;
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
sprite = &gSprites[gPlayerAvatar.spriteId];
centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c
index 165829a55..93fc62bd5 100644
--- a/src/field/field_effect_helpers.c
+++ b/src/field/field_effect_helpers.c
@@ -95,7 +95,7 @@ static void npc_pal_op_B(struct MapObject *mapObject, u8 paletteNum)
{
pal_patch_for_npc(npc_paltag_by_palslot(paletteNum), paletteNum);
}
- sub_807D78C(paletteNum);
+ UpdateSpritePaletteWithWeather(paletteNum);
}
}
@@ -107,7 +107,7 @@ static void npc_pal_op_A(struct MapObject *mapObject, u8 paletteNum)
if (graphicsInfo->paletteTag2 != 0x11ff)
{
pal_patch_for_npc(graphicsInfo->paletteTag2, paletteNum);
- sub_807D78C(paletteNum);
+ UpdateSpritePaletteWithWeather(paletteNum);
}
}
diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c
index 5014e97e3..ad1cd4a59 100644
--- a/src/field/field_fadetransition.c
+++ b/src/field/field_fadetransition.c
@@ -44,18 +44,18 @@ void pal_fill_for_map_transition(void)
switch (fade_type_for_given_maplight_pair(map_light, Overworld_GetMapTypeOfSaveblockLocation()))
{
case 0:
- fade_screen(0, 0);
+ FadeScreen(0, 0);
palette_bg_fill_black();
break;
case 1:
- fade_screen(2, 0);
+ FadeScreen(2, 0);
palette_bg_fill_white();
}
}
void pal_fill_black(void)
{
- fade_screen(0, 0);
+ FadeScreen(0, 0);
palette_bg_fill_black();
}
@@ -65,10 +65,10 @@ void fade_8080918(void)
switch (sub_810CDB8(light_level, warp1_get_mapheader()->mapType))
{
case 0:
- fade_screen(1, 0);
+ FadeScreen(1, 0);
break;
case 1:
- fade_screen(3, 0);
+ FadeScreen(3, 0);
}
}
@@ -366,7 +366,7 @@ bool32 sub_8080E64(void)
bool32 sub_8080E70(void)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
return TRUE;
else
return FALSE;
@@ -483,7 +483,7 @@ void sub_8081050(u8 taskId)
{
case 0:
ClearLinkCallback_2();
- fade_screen(1, 0);
+ FadeScreen(1, 0);
sub_8053FF8();
PlaySE(SE_KAIDAN);
data[0]++;
diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c
index 9a29e2e92..ba45e506d 100644
--- a/src/field/field_player_avatar.c
+++ b/src/field/field_player_avatar.c
@@ -523,7 +523,7 @@ u8 CheckForFieldObjectCollision(struct MapObject *a, s16 x, s16 y, u8 direction,
return 5;
if (ShouldJumpLedge(x, y, direction))
{
- IncrementGameStat(0x2B);
+ IncrementGameStat(GAME_STAT_JUMPED_DOWN_LEDGES);
return COLLISION_LEDGE_JUMP;
}
if (collision == 4 && sub_8058F6C(x, y, direction))
diff --git a/src/field/field_specials.c b/src/field/field_specials.c
index aade7cffd..e56d9ddbb 100644
--- a/src/field/field_specials.c
+++ b/src/field/field_specials.c
@@ -1061,7 +1061,7 @@ static void sub_810E874(void)
Menu_DrawStdWindowFrame(0, 0, 8, 11);
InitMenu(0, 1, 1, 5, 0, 7);
gUnknown_0203925C = 0;
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
sub_810ECD4();
}
@@ -1283,7 +1283,7 @@ void sub_810EB90(u8 newPos, u8 maxItems)
if (newPos == 0)
{
gUnknown_0203925C ^= 0x02;
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
}
else
{
@@ -1296,7 +1296,7 @@ void sub_810EB90(u8 newPos, u8 maxItems)
else if (newPos + maxItems == gUnknown_0203925A)
{
gUnknown_0203925C ^= 0x01;
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
}
@@ -1347,7 +1347,7 @@ void sub_810ECB0(void)
if (gUnknown_0203925C >> 1 != 1)
{
gUnknown_0203925C |= 0x2;
- CreateVerticalScrollIndicators(0, 0x24, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0x24, 0x08);
}
}
@@ -1356,7 +1356,7 @@ void sub_810ECD4(void)
if ((gUnknown_0203925C & 1) == 0)
{
gUnknown_0203925C |= 0x1;
- CreateVerticalScrollIndicators(1, 0x24, 0x48);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0x24, 0x48);
}
}
@@ -1428,11 +1428,11 @@ void sub_810EEDC(void)
{
if ((gUnknown_0203925C & 1) != 0)
{
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
if ((gUnknown_0203925C >> 1) == 1)
{
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
}
BuyMenuFreeMemory();
}
@@ -1542,7 +1542,7 @@ void ShowGlassWorkshopMenu(void)
Menu_DrawStdWindowFrame(0, 0, 10, 11);
InitMenu(0, 1, 1, 5, 0, 9);
gUnknown_0203925C = 0;
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
sub_810F2B4();
for (i=0; i<5; i++)
@@ -1721,7 +1721,7 @@ void sub_810F290(void)
if (gUnknown_0203925C >> 1 != 1)
{
gUnknown_0203925C |= 0x02;
- CreateVerticalScrollIndicators(0, 0x2c, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0x2c, 0x08);
}
}
@@ -1730,7 +1730,7 @@ void sub_810F2B4(void)
if (!(gUnknown_0203925C & 0x01))
{
gUnknown_0203925C |= 0x01;
- CreateVerticalScrollIndicators(1, 0x2c, 0x58);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0x2c, 0x58);
}
}
@@ -1739,7 +1739,7 @@ void GlassWorkshopUpdateScrollIndicators(u8 newPos, u8 maxItems)
if (newPos == 0)
{
gUnknown_0203925C ^= 0x02;
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
}
else
{
@@ -1752,7 +1752,7 @@ void GlassWorkshopUpdateScrollIndicators(u8 newPos, u8 maxItems)
else if (newPos + maxItems == gUnknown_0203925A)
{
gUnknown_0203925C ^= 0x01;
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
}
diff --git a/src/field/field_weather.c b/src/field/field_weather.c
index c954242a1..7beb1b440 100644
--- a/src/field/field_weather.c
+++ b/src/field/field_weather.c
@@ -13,7 +13,13 @@
#include "trig.h"
#include "ewram.h"
-#define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00))
+#define MACRO1(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00))
+
+enum {
+ GAMMA_NONE,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+};
struct RGBColor
{
@@ -24,7 +30,7 @@ struct RGBColor
struct WeatherPaletteData
{
- u16 data[0][0x1000]; // unknown length
+ u16 gammaShiftColors[8][0x1000]; // 0x1000 is the number of bytes that make up all palettes.
};
struct WeatherCallbacks
@@ -35,10 +41,11 @@ struct WeatherCallbacks
bool8 (*finish)(void);
};
-extern struct Weather gWeather;
-extern u8 gUnknown_0202FF38[];
-extern u16 gUnknown_0202FF58;
-IWRAM_DATA const u8 *gUnknown_030006DC;
+EWRAM_DATA struct Weather gWeather = {0};
+EWRAM_DATA u8 gFieldEffectPaletteGammaTypes[32] = {0};
+EWRAM_DATA u16 gUnknown_0202FF58 = {0};
+
+static const u8 *sPaletteGammaTypes;
const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz");
const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz");
@@ -47,9 +54,6 @@ const u8 DroughtPaletteData_3[] = INCBIN_U8("graphics/weather/drought3.bin.lz");
const u8 DroughtPaletteData_4[] = INCBIN_U8("graphics/weather/drought4.bin.lz");
const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz");
-extern u8 (*gUnknown_0202FC48)[32];
-extern u8 gUnknown_0202F9E8[32];
-
static const u8 *const sCompressedDroughtPalettes[] =
{
DroughtPaletteData_0,
@@ -58,7 +62,7 @@ static const u8 *const sCompressedDroughtPalettes[] =
DroughtPaletteData_3,
DroughtPaletteData_4,
DroughtPaletteData_5,
- gSharedMem,
+ (u8*)eDroughtPaletteData.gammaShiftColors,
};
// This is a pointer to gWeather. All code in this file accesses gWeather directly,
@@ -67,6 +71,18 @@ static const u8 *const sCompressedDroughtPalettes[] =
// this file produces the same result as accessing gWeather directly.
struct Weather *const gWeatherPtr = &gWeather;
+static bool8 LightenSpritePaletteInFog(u8);
+static void BuildGammaShiftTables(void);
+static void UpdateWeatherGammaShift(void);
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex);
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor);
+static bool8 FadeInScreen_RainShowShade(void);
+static bool8 FadeInScreen_Drought(void);
+static bool8 FadeInScreen_Fog1(void);
+static void FadeInScreenWithWeather(void);
+static void DoNothing(void);
void None_Init(void);
void None_Main(void);
bool8 None_Finish(void);
@@ -110,10 +126,10 @@ void Fog1_InitVars(void);
void Fog1_Main(void);
void Fog1_InitAll(void);
bool8 Fog1_Finish(void);
-void Weather11_InitVars(void);
-void Weather11_Main(void);
-void Weather11_InitAll(void);
-bool8 Weather11_Finish(void);
+void Shade_InitVars(void);
+void Shade_Main(void);
+void Shade_InitAll(void);
+bool8 Shade_Finish(void);
void Drought_InitVars(void);
void Drought_Main(void);
void Drought_InitAll(void);
@@ -132,7 +148,7 @@ static const struct WeatherCallbacks sWeatherFuncs[] =
{None_Init, None_Main, None_Init, None_Finish},
{Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
{Weather2_InitVars, Weather2_Main, Weather2_InitAll, Weather2_Finish},
- {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, // light rain
+ {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish},
{Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
{MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish},
{Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
@@ -140,54 +156,58 @@ static const struct WeatherCallbacks sWeatherFuncs[] =
{Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
{Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish},
{Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
- {Weather11_InitVars, Weather11_Main, Weather11_InitAll, Weather11_Finish},
+ {Shade_InitVars, Shade_Main, Shade_InitAll, Shade_Finish},
{Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
{HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish},
{Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
};
-void (*const gUnknown_083970B8[])(void) =
+void (*const gWeatherPalStateFuncs[])(void) =
{
- sub_807CC24,
- sub_807CCAC,
- nullsub_39,
- nullsub_39,
+ UpdateWeatherGammaShift, // WEATHER_PAL_STATE_CHANGING_WEATHER
+ FadeInScreenWithWeather, // WEATHER_PAL_STATE_SCREEN_FADING_IN
+ DoNothing, // WEATHER_PAL_STATE_SCREEN_FADING_OUT
+ DoNothing, // WEATHER_PAL_STATE_IDLE
};
-const u8 gUnknown_083970C8[] =
+// This table specifies which of the gamma shift tables should be
+// applied to each of the background and sprite palettes.
+static const u8 sBasePaletteGammaTypes[32] =
{
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 0,
- 2,
- 1,
- 2,
- 2,
- 2,
- 2,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
+ // background palettes
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NONE,
+ GAMMA_NONE,
+ // sprite palettes
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
};
const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal");
@@ -195,13 +215,14 @@ const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal");
void StartWeather(void)
{
u8 index;
+
if (!FuncIsActiveTask(Task_WeatherMain))
{
index = AllocSpritePalette(0x1200);
CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32);
- sub_807CB10();
- gWeatherPtr->unknown_6D5 = index;
- gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201);
+ BuildGammaShiftTables();
+ gWeatherPtr->altGammaSpritePalIndex = index;
+ gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(0x1201);
gWeatherPtr->rainSpriteCount = 0;
gWeatherPtr->unknown_6D8 = 0;
gWeatherPtr->cloudSpritesCreated = 0;
@@ -212,49 +233,53 @@ void StartWeather(void)
gWeatherPtr->sandstormSprites1Created = 0;
gWeatherPtr->sandstormSprites2Created = 0;
gWeatherPtr->unknown_72E = 0;
- gWeatherPtr->unknown_6FA = 0;
+ gWeatherPtr->lightenedFogSpritePalsCount = 0;
Weather_SetBlendCoeffs(16, 0);
gWeatherPtr->currWeather = 0;
- gWeatherPtr->unknown_6C6 = 3;
- gWeatherPtr->unknown_6C8 = 0;
- gWeatherPtr->unknown_6D3 = 1;
- gWeatherPtr->unknown_6C9 = CreateTask(Task_WeatherInit, 80);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ gWeatherPtr->readyForInit = FALSE;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ gWeatherPtr->taskId = CreateTask(Task_WeatherInit, 80);
}
}
-void DoWeatherEffect(u8 effect)
+void ChangeWeather(u8 weather)
{
- if (effect != WEATHER_RAIN_LIGHT && effect != WEATHER_RAIN_MED && effect != WEATHER_RAIN_HEAVY)
+ if (weather != WEATHER_RAIN_LIGHT && weather != WEATHER_RAIN_MED && weather != WEATHER_RAIN_HEAVY)
{
PlayRainSoundEffect();
}
- if (gWeatherPtr->nextWeather != effect && gWeatherPtr->currWeather == effect)
+
+ if (gWeatherPtr->nextWeather != weather && gWeatherPtr->currWeather == weather)
{
- sWeatherFuncs[effect].initVars();
+ sWeatherFuncs[weather].initVars();
}
- gWeatherPtr->unknown_6D3 = 0;
- gWeatherPtr->nextWeather = effect;
+
+ gWeatherPtr->weatherChangeComplete = FALSE;
+ gWeatherPtr->nextWeather = weather;
gWeatherPtr->finishStep = 0;
}
-void sub_807C988(u8 effect)
+void sub_807C988(u8 weather)
{
PlayRainSoundEffect();
- gWeatherPtr->currWeather = effect;
- gWeatherPtr->nextWeather = effect;
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
}
-void sub_807C9B4(u8 effect)
+void sub_807C9B4(u8 weather)
{
PlayRainSoundEffect();
- gWeatherPtr->currWeather = effect;
- gWeatherPtr->nextWeather = effect;
- gWeatherPtr->unknown_6C8 = 1;
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+ gWeatherPtr->readyForInit = TRUE;
}
void Task_WeatherInit(u8 taskId)
{
- if (gWeatherPtr->unknown_6C8)
+ // Waits until it's ok to initialize weather.
+ // When the screen fades in, this is set to TRUE.
+ if (gWeatherPtr->readyForInit)
{
sWeatherFuncs[gWeatherPtr->currWeather].initAll();
gTasks[taskId].func = Task_WeatherMain;
@@ -267,24 +292,26 @@ void Task_WeatherMain(u8 taskId)
{
if (!sWeatherFuncs[gWeatherPtr->currWeather].finish())
{
+ // Finished cleaning up previous weather. Now transition to next weather.
sWeatherFuncs[gWeatherPtr->nextWeather].initVars();
- gWeatherPtr->unknown_6C3 = 0;
- gWeatherPtr->unknown_6C6 = 0;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
gWeatherPtr->currWeather = gWeatherPtr->nextWeather;
- gWeatherPtr->unknown_6D3 = 1;
+ gWeatherPtr->weatherChangeComplete = TRUE;
}
}
else
{
sWeatherFuncs[gWeatherPtr->currWeather].main();
}
- gUnknown_083970B8[gWeatherPtr->unknown_6C6]();
+
+ gWeatherPalStateFuncs[gWeatherPtr->palProcessingState]();
}
void None_Init(void)
{
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
}
void None_Main(void)
@@ -296,7 +323,10 @@ u8 None_Finish(void)
return 0;
}
-void sub_807CB10(void)
+// Builds two tables that contain gamma shifts for palette colors.
+// It's unclear why the two tables aren't declared as const arrays, since
+// this function always builds the same two tables.
+static void BuildGammaShiftTables(void)
{
u16 v0;
u8 (*v1)[32];
@@ -309,15 +339,15 @@ void sub_807CB10(void)
u16 v11;
s16 dunno;
- gUnknown_030006DC = gUnknown_083970C8;
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
for (v0 = 0; v0 <= 1; v0++)
{
if (v0 == 0)
- v1 = gWeatherPtr->unknown_200;
+ v1 = gWeatherPtr->gammaShifts;
else
- v1 = gWeatherPtr->unk460;
+ v1 = gWeatherPtr->altGammaShifts;
- for (v2 = 0; (u16)v2 <= 0x1f; v2++)
+ for (v2 = 0; v2 < 32; v2++)
{
v4 = v2 << 8;
if (v0 == 0)
@@ -336,88 +366,86 @@ void sub_807CB10(void)
v10 += 0xf;
}
v11 = v10 >> 4;
- if (v2 <= 0xb)
+ if (v2 < 12)
{
- for (; v6 <= 0x12; v6++)
+ for (; v6 < 19; v6++)
{
v4 += v11;
dunno = v4 - v9;
if (dunno > 0)
- {
v4 -= (dunno + ((u16)dunno >> 15)) >> 1;
- }
v1[v6][v2] = v4 >> 8;
if (v1[v6][v2] > 0x1f)
- {
v1[v6][v2] = 0x1f;
- }
}
}
else
{
- for (; v6 <= 0x12; v6++)
+ for (; v6 < 19; v6++)
{
v4 += v11;
v1[v6][v2] = v4 >> 8;
if (v1[v6][v2] > 0x1f)
- {
v1[v6][v2] = 0x1f;
- }
}
}
}
}
}
-void sub_807CC24(void)
+// When the weather is changing, it gradually updates the palettes
+// towards the desired gamma shift.
+static void UpdateWeatherGammaShift(void)
{
- if (gWeatherPtr->unknown_6C0 == gWeatherPtr->unknown_6C1)
+ if (gWeatherPtr->gammaIndex == gWeatherPtr->gammaTargetIndex)
{
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
else
{
- if (++gWeatherPtr->unknown_6C3 >= gWeatherPtr->unknown_6C2)
+ if (++gWeatherPtr->gammaStepFrameCounter >= gWeatherPtr->gammaStepDelay)
{
- gWeatherPtr->unknown_6C3 = 0;
- if (gWeatherPtr->unknown_6C0 < gWeatherPtr->unknown_6C1)
- gWeatherPtr->unknown_6C0++;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ if (gWeatherPtr->gammaIndex < gWeatherPtr->gammaTargetIndex)
+ gWeatherPtr->gammaIndex++;
else
- gWeatherPtr->unknown_6C0--;
- sub_807CEBC(0, 0x20, gWeatherPtr->unknown_6C0);
+ gWeatherPtr->gammaIndex--;
+
+ ApplyGammaShift(0, 32, gWeatherPtr->gammaIndex);
}
}
}
-void sub_807CCAC(void)
+static void FadeInScreenWithWeather(void)
{
if (++gWeatherPtr->unknown_6CB > 1)
gWeatherPtr->unknown_6CA = 0;
+
switch (gWeatherPtr->currWeather)
{
case WEATHER_RAIN_LIGHT:
case WEATHER_RAIN_MED:
case WEATHER_RAIN_HEAVY:
case WEATHER_SNOW:
- case WEATHER_DARK:
- if (sub_807CDC4() == 0)
+ case WEATHER_SHADE:
+ if (FadeInScreen_RainShowShade() == FALSE)
{
- gWeatherPtr->unknown_6C0 = 3;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
case WEATHER_DROUGHT:
- if (sub_807CE24() == 0)
+ if (FadeInScreen_Drought() == FALSE)
{
- gWeatherPtr->unknown_6C0 = -6;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = -6;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
case WEATHER_FOG_1:
- if (sub_807CE7C() == 0)
+ if (FadeInScreen_Fog1() == FALSE)
{
- gWeatherPtr->unknown_6C0 = 0;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
case WEATHER_ASH:
@@ -427,71 +455,78 @@ void sub_807CCAC(void)
default:
if (!gPaletteFade.active)
{
- gWeatherPtr->unknown_6C0 = gWeatherPtr->unknown_6C1;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = gWeatherPtr->gammaTargetIndex;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
}
}
-u8 sub_807CDC4(void)
+bool8 FadeInScreen_RainShowShade(void)
{
- if (gWeatherPtr->unknown_6C7 == 0x10)
- return 0;
- if (++gWeatherPtr->unknown_6C7 >= 0x10)
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
{
- sub_807CEBC(0, 0x20, 3);
- gWeatherPtr->unknown_6C7 = 0x10;
- return 0;
+ ApplyGammaShift(0, 32, 3);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
}
- sub_807D1BC(0, 0x20, 3, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
- return 1;
+
+ ApplyGammaShiftWithBlend(0, 32, 3, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
}
-u8 sub_807CE24(void)
+bool8 FadeInScreen_Drought(void)
{
- if (gWeatherPtr->unknown_6C7 == 0x10)
- return 0;
- if (++gWeatherPtr->unknown_6C7 >= 0x10)
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
{
- sub_807CEBC(0, 0x20, -6);
- gWeatherPtr->unknown_6C7 = 0x10;
- return 0;
+ ApplyGammaShift(0, 32, -6);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
}
- sub_807D304(-6, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
- return 1;
-}
-u8 sub_807CE7C(void)
-{
- if (gWeatherPtr->unknown_6C7 == 0x10)
- return 0;
- ++gWeatherPtr->unknown_6C7;
- sub_807D424(0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
- return 1;
+ ApplyDroughtGammaShiftWithBlend(-6, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
}
-void nullsub_39(void)
+bool8 FadeInScreen_Fog1(void)
{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ gWeatherPtr->fadeScreenCounter++;
+ ApplyFogBlend(16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
}
-void sub_807CEBC(u8 a, u8 b, s8 c)
+static void DoNothing(void)
+{ }
+
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
{
- u16 r4;
+ u16 curPalIndex;
u16 palOffset;
- u8 *r6;
+ u8 *gammaTable;
u16 i;
- if (c > 0)
+ if (gammaIndex > 0)
{
- c = c - 1;
- palOffset = a * 16;
- b += a;
- r4 = a;
- while (r4 < b)
+ gammaIndex--;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ // Loop through the speficied palette range and apply necessary gamma shifts to the colors.
+ while (curPalIndex < numPalettes)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
+ // No palette change.
CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
palOffset += 16;
}
@@ -499,25 +534,27 @@ void sub_807CEBC(u8 a, u8 b, s8 c)
{
u8 r, g, b;
- if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeatherPtr->unknown_6D5)
- r6 = gWeatherPtr->unk460[c];
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_ALT || curPalIndex - 16 == gWeatherPtr->altGammaSpritePalIndex)
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
else
- r6 = gWeatherPtr->unknown_200[c];
- if (r4 == 16 || r4 > 0x1B)
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+
+ if (curPalIndex == 16 || curPalIndex > 27)
{
for (i = 0; i < 16; i++)
{
- if (gPlttBufferUnfaded[palOffset] == 0x2D9F)
+ if (gPlttBufferUnfaded[palOffset] == RGB(31, 12, 11))
{
+ // Skip gamma shift for this specific color. (Why?)
palOffset++;
}
else
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
-
- r = r6[color.r];
- g = r6[color.g];
- b = r6[color.b];
+ // Apply gamma shift to the original color.
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r = gammaTable[baseColor.r];
+ g = gammaTable[baseColor.g];
+ b = gammaTable[baseColor.b];
gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
@@ -526,39 +563,45 @@ void sub_807CEBC(u8 a, u8 b, s8 c)
{
for (i = 0; i < 16; i++)
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
-
- r = r6[color.r];
- g = r6[color.g];
- b = r6[color.b];
+ // Apply gamma shift to the original color.
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r = gammaTable[baseColor.r];
+ g = gammaTable[baseColor.g];
+ b = gammaTable[baseColor.b];
gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
}
- r4++;
+
+ curPalIndex++;
}
}
- else if (c < 0)
+ else if (gammaIndex < 0)
{
- c = -c - 1;
- palOffset = a * 16;
- b += a;
- r4 = a;
- while (r4 < b)
+ // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables.
+ gammaIndex = -gammaIndex - 1;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
+ // No palette change.
CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
palOffset += 16;
}
else
{
- if (r4 == 16 || r4 > 0x1B)
+ if (curPalIndex == 16 || curPalIndex > 27)
{
for (i = 0; i < 16; i++)
{
- if (gPlttBufferUnfaded[palOffset] != 0x2D9F)
- gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ // Skip gamma shift for this specific color. (Why?)
+ if (gPlttBufferUnfaded[palOffset] != RGB(31, 12, 11))
+ gPlttBufferFaded[palOffset] = eDroughtPaletteData.gammaShiftColors[gammaIndex][MACRO1(gPlttBufferUnfaded[palOffset])];
+
palOffset++;
}
}
@@ -566,93 +609,100 @@ void sub_807CEBC(u8 a, u8 b, s8 c)
{
for (i = 0; i < 16; i++)
{
- gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ gPlttBufferFaded[palOffset] = eDroughtPaletteData.gammaShiftColors[gammaIndex][MACRO1(gPlttBufferUnfaded[palOffset])];
palOffset++;
}
}
}
- r4++;
+
+ curPalIndex++;
}
}
else
{
- CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16));
+ // No palette blending.
+ CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16));
}
}
-void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e)
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor)
{
u16 palOffset;
- u16 r4;
+ u16 curPalIndex;
u16 i;
- struct RGBColor color = *(struct RGBColor *)&e;
- u8 r_ = color.r;
- u8 g_ = color.g;
- u8 b_ = color.b;
-
- palOffset = a1 * 16;
- a2 += a1;
- c = c - 1;
- r4 = a1;
- while (r4 < a2)
+ struct RGBColor color = *(struct RGBColor *)&blendColor;
+ u8 rBlend = color.r;
+ u8 gBlend = color.g;
+ u8 bBlend = color.b;
+
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ gammaIndex--;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
- BlendPalette(palOffset, 16, d, e);
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
palOffset += 16;
}
else
{
- u8 *r5;
+ u8 *gammaTable;
- if (gUnknown_030006DC[r4] == 1)
- r5 = gWeatherPtr->unknown_200[c];
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NORMAL)
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
else
- r5 = gWeatherPtr->unk460[c];
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
for (i = 0; i < 16; i++)
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
- u8 r = r5[color.r];
- u8 g = r5[color.g];
- u8 b = r5[color.b];
-
- r += ((r_ - r) * d) >> 4;
- g += ((g_ - g) * d) >> 4;
- b += ((b_ - b) * d) >> 4;
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = gammaTable[baseColor.r];
+ u8 g = gammaTable[baseColor.g];
+ u8 b = gammaTable[baseColor.b];
+
+ // Apply gamma shift and target blend color to the original color.
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
- r4++;
+
+ curPalIndex++;
}
}
-void sub_807D304(s8 a, u8 coeff, u16 c)
+void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor)
{
struct RGBColor color;
- u8 r_;
- u8 g_;
- u8 b_;
- u16 r4;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
u16 palOffset;
- u16 r12;
+ u16 i;
- a = -a - 1;
- color = *(struct RGBColor *)&c;
- r_ = color.r;
- g_ = color.g;
- b_ = color.b;
+ gammaIndex = -gammaIndex - 1;
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
palOffset = 0;
- for (r4 = 0; r4 < 32; r4++)
+ for (curPalIndex = 0; curPalIndex < 32; curPalIndex++)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
- BlendPalette(palOffset, 16, coeff, c);
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
palOffset += 16;
}
else
{
- for (r12 = 0; r12 < 16; r12++)
+ for (i = 0; i < 16; i++)
{
u32 offset;
struct RGBColor color1;
@@ -666,14 +716,14 @@ void sub_807D304(s8 a, u8 coeff, u16 c)
b1 = color1.b;
offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1);
- color2 = *(struct RGBColor *)&eWeatherPaletteData.data[a][offset];
+ color2 = *(struct RGBColor *)&eDroughtPaletteData.gammaShiftColors[gammaIndex][offset];
r2 = color2.r;
g2 = color2.g;
b2 = color2.b;
- r2 += ((r_ - r2) * coeff) >> 4;
- g2 += ((g_ - g2) * coeff) >> 4;
- b2 += ((b_ - b2) * coeff) >> 4;
+ r2 += ((rBlend - r2) * blendCoeff) >> 4;
+ g2 += ((gBlend - g2) * blendCoeff) >> 4;
+ b2 += ((bBlend - b2) * blendCoeff) >> 4;
gPlttBufferFaded[palOffset++] = (b2 << 10) | (g2 << 5) | r2;
}
@@ -681,33 +731,30 @@ void sub_807D304(s8 a, u8 coeff, u16 c)
}
}
-bool8 sub_807D574(u8);
-
-void sub_807D424(u8 a, u16 b)
+void ApplyFogBlend(u8 blendCoeff, u16 blendColor)
{
struct RGBColor color;
- u8 r_;
- u8 g_;
- u8 b_;
- u16 r4;
-
- BlendPalette(0, 0x100, a, b);
- color = *(struct RGBColor *)&b;
- r_ = color.r;
- g_ = color.g;
- b_ = color.b;
-
- r4 = 16;
- while (r4 < 32)
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+
+ BlendPalette(0, 0x100, blendCoeff, blendColor);
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+
+ for (curPalIndex = 16; curPalIndex < 32; curPalIndex++)
{
- if (sub_807D574(r4))
+ if (LightenSpritePaletteInFog(curPalIndex))
{
- u16 r12 = (r4 + 1) * 16;
- u16 r6 = r4 * 16;
+ u16 palEnd = (curPalIndex + 1) * 16;
+ u16 palOffset = curPalIndex * 16;
- while (r6 < r12)
+ while (palOffset < palEnd)
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[r6];
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
u8 r = color.r;
u8 g = color.g;
u8 b = color.b;
@@ -716,88 +763,88 @@ void sub_807D424(u8 a, u16 b)
g += ((31 - g) * 3) >> 2;
b += ((28 - b) * 3) >> 2;
- r += ((r_ - r) * a) >> 4;
- g += ((g_ - g) * a) >> 4;
- b += ((b_ - b) * a) >> 4;
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
- gPlttBufferFaded[r6] = (b << 10) | (g << 5) | r;
- r6++;
+ gPlttBufferFaded[palOffset] = (b << 10) | (g << 5) | r;
+ palOffset++;
}
}
else
{
- BlendPalette(r4 * 16, 16, a, b);
+ BlendPalette(curPalIndex * 16, 16, blendCoeff, blendColor);
}
- r4++;
}
}
-void sub_807D540(u8 a)
+static void MarkFogSpritePalToLighten(u8 paletteIndex)
{
- if (gWeatherPtr->unknown_6FA < 6)
+ if (gWeatherPtr->lightenedFogSpritePalsCount < 6)
{
- gWeatherPtr->unknown_6F4[gWeatherPtr->unknown_6FA] = a;
- gWeatherPtr->unknown_6FA++;
+ gWeatherPtr->lightenedFogSpritePals[gWeatherPtr->lightenedFogSpritePalsCount] = paletteIndex;
+ gWeatherPtr->lightenedFogSpritePalsCount++;
}
}
-bool8 sub_807D574(u8 a)
+static bool8 LightenSpritePaletteInFog(u8 paletteIndex)
{
u16 i;
- for (i = 0; i < gWeatherPtr->unknown_6FA; i++)
+ for (i = 0; i < gWeatherPtr->lightenedFogSpritePalsCount; i++)
{
- if (gWeatherPtr->unknown_6F4[i] == a)
+ if (gWeatherPtr->lightenedFogSpritePals[i] == paletteIndex)
return TRUE;
}
+
return FALSE;
}
-void sub_807D5BC(s8 a)
+void sub_807D5BC(s8 gammaIndex)
{
- if (gWeatherPtr->unknown_6C6 == 3)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
{
- sub_807CEBC(0, 32, a);
- gWeatherPtr->unknown_6C0 = a;
+ ApplyGammaShift(0, 32, gammaIndex);
+ gWeatherPtr->gammaIndex = gammaIndex;
}
}
-void sub_807D5F0(u8 a, u8 b, u8 c)
+void sub_807D5F0(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
{
- if (gWeatherPtr->unknown_6C6 == 3)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
{
- gWeatherPtr->unknown_6C6 = 0;
- gWeatherPtr->unknown_6C0 = a;
- gWeatherPtr->unknown_6C1 = b;
- gWeatherPtr->unknown_6C3 = 0;
- gWeatherPtr->unknown_6C2 = c;
- sub_807D5BC(a);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->gammaIndex = gammaIndex;
+ gWeatherPtr->gammaTargetIndex = gammaTargetIndex;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->gammaStepDelay = gammaStepDelay;
+ sub_807D5BC(gammaIndex);
}
}
-void fade_screen(u8 a, u8 delay)
+void FadeScreen(u8 mode, u8 delay)
{
u32 fadeColor;
- u32 r1;
- u32 r2;
+ bool8 fadeOut;
+ bool8 useWeatherPal;
- switch (a)
+ switch (mode)
{
- case 0:
+ case FADE_FROM_BLACK:
fadeColor = 0;
- r1 = 0;
+ fadeOut = FALSE;
break;
- case 2:
+ case FADE_FROM_WHITE:
fadeColor = 0xFFFF;
- r1 = 0;
+ fadeOut = FALSE;
break;
- case 1:
+ case FADE_TO_BLACK:
fadeColor = 0;
- r1 = 1;
+ fadeOut = TRUE;
break;
- case 3:
+ case FADE_TO_WHITE:
fadeColor = 0xFFFF;
- r1 = 1;
+ fadeOut = TRUE;
break;
default:
return;
@@ -810,145 +857,149 @@ void fade_screen(u8 a, u8 delay)
case WEATHER_RAIN_HEAVY:
case WEATHER_SNOW:
case WEATHER_FOG_1:
- case WEATHER_DARK:
+ case WEATHER_SHADE:
case WEATHER_DROUGHT:
- r2 = 1;
+ useWeatherPal = TRUE;
break;
default:
- r2 = 0;
+ useWeatherPal = FALSE;
break;
}
- if (r1 != 0)
+ if (fadeOut)
{
- if (r2 != 0)
+ if (useWeatherPal)
CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+
BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
- gWeatherPtr->unknown_6C6 = 2;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
}
else
{
- gWeatherPtr->unknown_6C4 = fadeColor;
- if (r2 != 0)
- gWeatherPtr->unknown_6C7 = 0;
+ gWeatherPtr->fadeDestColor = fadeColor;
+ if (useWeatherPal)
+ gWeatherPtr->fadeScreenCounter = 0;
else
BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
- gWeatherPtr->unknown_6C6 = 1;
+
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
gWeatherPtr->unknown_6CA = 1;
gWeatherPtr->unknown_6CB = 0;
Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
- gWeatherPtr->unknown_6C8 = 1;
+ gWeatherPtr->readyForInit = TRUE;
}
}
-bool8 sub_807D770(void)
+bool8 IsWeatherNotFadingIn(void)
{
- return gWeatherPtr->unknown_6C6 ^ 1 ? TRUE : FALSE;
+ return (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_IN);
}
-void sub_807D78C(u8 a)
+void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
{
- u16 r4 = 16 + a;
+ u16 paletteIndex = 16 + spritePaletteIndex;
u16 i;
- switch (gWeatherPtr->unknown_6C6)
+ switch (gWeatherPtr->palProcessingState)
{
- case 1:
+ case WEATHER_PAL_STATE_SCREEN_FADING_IN:
if (gWeatherPtr->unknown_6CA != 0)
{
if (gWeatherPtr->currWeather == WEATHER_FOG_1)
- sub_807D540(r4);
- r4 *= 16;
+ MarkFogSpritePalToLighten(paletteIndex);
+ paletteIndex *= 16;
for (i = 0; i < 16; i++)
- gPlttBufferFaded[r4 + i] = gWeatherPtr->unknown_6C4;
+ gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor;
}
break;
- case 2:
- r4 *= 16;
- CpuFastCopy(gPlttBufferFaded + r4, gPlttBufferUnfaded + r4, 32);
- BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor);
+ case WEATHER_PAL_STATE_SCREEN_FADING_OUT:
+ paletteIndex *= 16;
+ CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, 32);
+ BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor);
break;
+ // WEATHER_PAL_STATE_CHANGING_WEATHER
+ // WEATHER_PAL_STATE_CHANGING_IDLE
default:
if (gWeatherPtr->currWeather != WEATHER_FOG_1)
{
- sub_807CEBC(r4, 1, gWeatherPtr->unknown_6C0);
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
}
else
{
- r4 *= 16;
- BlendPalette(r4, 16, 12, 0x73FC);
+ paletteIndex *= 16;
+ BlendPalette(paletteIndex, 16, 12, 0x73FC);
}
break;
}
}
-void sub_807D874(u8 a)
+void ApplyWeatherGammaShiftToPal(u8 paletteIndex)
{
- sub_807CEBC(a, 1, gWeatherPtr->unknown_6C0);
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
}
u8 unref_sub_807D894(void)
{
- if (gWeatherPtr->unknown_6C6 == 1)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN)
return gWeatherPtr->unknown_6CA;
else
return 0;
}
-void sub_807D8C0(const u16 *palette)
+void LoadCustomWeatherSpritePalette(const u16 *palette)
{
- LoadPalette(palette, 0x100 + gWeatherPtr->unknown_6D4 * 16, 32);
- sub_807D78C(gWeatherPtr->unknown_6D4);
+ LoadPalette(palette, 0x100 + gWeatherPtr->weatherPicSpritePalIndex * 16, 32);
+ UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex);
}
-void sub_807D8F0(u8 *a, u8 *b)
+static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *b)
{
- u8 r4 = *a;
+ u8 gammaIndex = *gammaIndexPtr;
u16 i;
- if (r4 < 7)
+ if (gammaIndex < 7)
{
- r4--;
- LZ77UnCompWram(sCompressedDroughtPalettes[r4], eWeatherPaletteData.data[r4]);
- if (r4 == 0)
+ gammaIndex--;
+ LZ77UnCompWram(sCompressedDroughtPalettes[gammaIndex], eDroughtPaletteData.gammaShiftColors[gammaIndex]);
+ if (gammaIndex == 0)
{
- eWeatherPaletteData.data[r4][0] = 0x421;
+ eDroughtPaletteData.gammaShiftColors[gammaIndex][0] = RGB(1, 1, 1);
for (i = 1; i < 0x1000; i++)
- eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4][i - 1];
+ eDroughtPaletteData.gammaShiftColors[gammaIndex][i] += eDroughtPaletteData.gammaShiftColors[gammaIndex][i - 1];
}
else
{
for (i = 0; i < 0x1000; i++)
- eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4 - 1][i];
+ eDroughtPaletteData.gammaShiftColors[gammaIndex][i] += eDroughtPaletteData.gammaShiftColors[gammaIndex - 1][i];
}
- if (++(*a) == 7)
+ if (++(*gammaIndexPtr) == 7)
{
- *a = 32;
+ *gammaIndexPtr = 32;
*b = 32;
}
}
}
-void sub_807D9A8(void)
+void ResetDroughtWeatherPaletteLoading(void)
{
- gWeatherPtr->unknown_74D = 1;
- gWeatherPtr->unknown_74E = 1;
+ gWeatherPtr->loadDroughtPalsIndex = 1;
+ gWeatherPtr->loadDroughtPalsOffset = 1;
}
-bool8 sub_807D9C8(void)
+bool8 LoadDroughtWeatherPalettes(void)
{
- if (gWeatherPtr->unknown_74D < 32)
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
{
- sub_807D8F0(&gWeatherPtr->unknown_74D, &gWeatherPtr->unknown_74E);
- if (gWeatherPtr->unknown_74D < 32)
+ LoadDroughtWeatherPalette(&gWeatherPtr->loadDroughtPalsIndex, &gWeatherPtr->loadDroughtPalsOffset);
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
return TRUE;
}
return FALSE;
}
-void sub_807DA04(s8 a)
+void sub_807DA04(s8 gammaIndex)
{
- sub_807D5BC(-a - 1);
+ sub_807D5BC(-gammaIndex - 1);
}
void sub_807DA14(void)
@@ -1010,8 +1061,8 @@ void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay)
gWeatherPtr->targetBlendEVA = eva;
gWeatherPtr->targetBlendEVB = evb;
gWeatherPtr->blendDelay = delay;
- gWeatherPtr->unknown_739 = 0;
- gWeatherPtr->unknown_738 = 0;
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter = 0;
}
bool8 Weather_UpdateBlend(void)
@@ -1020,13 +1071,13 @@ bool8 Weather_UpdateBlend(void)
&& gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
return TRUE;
- if (++gWeatherPtr->unknown_739 > gWeatherPtr->blendDelay)
+ if (++gWeatherPtr->blendFrameCounter > gWeatherPtr->blendDelay)
{
- gWeatherPtr->unknown_739 = 0;
- gWeatherPtr->unknown_738++;
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter++;
// Update currBlendEVA and currBlendEVB on alternate frames
- if (gWeatherPtr->unknown_738 & 1)
+ if (gWeatherPtr->blendUpdateCounter & 1)
{
if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA)
gWeatherPtr->currBlendEVA++;
@@ -1056,48 +1107,48 @@ void unref_sub_807DCB4(u8 a)
switch (a)
{
case 1:
- SetWeather(1);
+ SetWeather(WEATHER_CLOUDS);
break;
case 2:
- SetWeather(2);
+ SetWeather(WEATHER_SUNNY);
break;
case 3:
- SetWeather(3);
+ SetWeather(WEATHER_RAIN_LIGHT);
break;
case 4:
- SetWeather(4);
+ SetWeather(WEATHER_SNOW);
break;
case 5:
- SetWeather(5);
+ SetWeather(WEATHER_RAIN_MED);
break;
case 6:
- SetWeather(6);
+ SetWeather(WEATHER_FOG_1);
break;
case 7:
- SetWeather(9);
+ SetWeather(WEATHER_FOG_2);
break;
case 8:
- SetWeather(7);
+ SetWeather(WEATHER_ASH);
break;
case 9:
- SetWeather(8);
+ SetWeather(WEATHER_SANDSTORM);
break;
case 10:
- SetWeather(11);
+ SetWeather(WEATHER_SHADE);
break;
}
}
-u8 weather_get_current(void)
+u8 GetCurrentWeather(void)
{
return gWeatherPtr->currWeather;
}
-void SetRainStrengthFromSoundEffect(u16 sndEff)
+void SetRainStrengthFromSoundEffect(u16 soundEffect)
{
- if (gWeatherPtr->unknown_6C6 != 2)
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
{
- switch (sndEff)
+ switch (soundEffect)
{
case SE_T_KOAME:
gWeatherPtr->rainStrength = 0;
@@ -1111,7 +1162,8 @@ void SetRainStrengthFromSoundEffect(u16 sndEff)
default:
return;
}
- PlaySE(sndEff);
+
+ PlaySE(soundEffect);
}
}
@@ -1135,29 +1187,29 @@ void PlayRainSoundEffect(void)
}
}
-u8 sub_807DDFC(void)
+u8 IsWeatherChangeComplete(void)
{
- return gWeatherPtr->unknown_6D3;
+ return gWeatherPtr->weatherChangeComplete;
}
-void sub_807DE10(void)
+void SetWeatherScreenFadeOut(void)
{
- gWeatherPtr->unknown_6C6 = 2;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
}
void unref_sub_807DE24(void)
{
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
-void sub_807DE38(u8 a)
+void PreservePaletteInWeather(u8 preservedPalIndex)
{
- CpuCopy16(gUnknown_083970C8, gUnknown_0202FF38, 32);
- gUnknown_0202FF38[a] = 0;
- gUnknown_030006DC = gUnknown_0202FF38;
+ CpuCopy16(sBasePaletteGammaTypes, gFieldEffectPaletteGammaTypes, 32);
+ gFieldEffectPaletteGammaTypes[preservedPalIndex] = GAMMA_NONE;
+ sPaletteGammaTypes = gFieldEffectPaletteGammaTypes;
}
-void sub_807DE68(void)
+void ResetPreservedPalettesInWeather(void)
{
- gUnknown_030006DC = gUnknown_083970C8;
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
}
diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c
index 5a59d6c2a..eff702f8c 100644
--- a/src/field/field_weather_effects.c
+++ b/src/field/field_weather_effects.c
@@ -74,10 +74,7 @@ static const struct SpriteTemplate sCloudSpriteTemplate =
.callback = sub_807E0F4,
};
-extern void sub_807D5BC(s8 a);
-extern void sub_807D8C0(const u16 *palette);
-extern void sub_807D9A8(void);
-extern bool8 sub_807D9C8(void);
+extern void sub_807D5BC(s8 gammaIndex);
extern void sub_807DA14(void);
extern void sub_807DA4C(void);
extern void Weather_SetTargetBlendCoeffs(u8 a, u8 b, int c);
@@ -91,8 +88,8 @@ extern void sub_807D5F0(u8 a, u8 b, u8 c);
void Clouds_InitVars(void)
{
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE;
gWeatherPtr->initStep = 0;
if (gWeatherPtr->cloudSpritesCreated == FALSE)
@@ -159,8 +156,8 @@ bool8 Clouds_Finish(void)
void Weather2_InitVars(void)
{
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
}
void Weather2_InitAll(void)
@@ -184,7 +181,7 @@ void CreateCloudSprites(void)
if (gWeatherPtr->cloudSpritesCreated == TRUE)
return;
LoadSpriteSheet(&sCloudSpriteSheet);
- sub_807D8C0(gUnknown_08397108);
+ LoadCustomWeatherSpritePalette(gUnknown_08397108);
for (i = 0; i < 3; i++)
{
u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF);
@@ -236,8 +233,8 @@ void Drought_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
}
void Drought_Main(void);
@@ -254,15 +251,15 @@ void Drought_Main(void)
switch (gWeatherPtr->initStep)
{
case 0:
- if (gWeatherPtr->unknown_6C6 != 0)
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
gWeatherPtr->initStep++;
break;
case 1:
- sub_807D9A8();
+ ResetDroughtWeatherPaletteLoading();
gWeatherPtr->initStep++;
break;
case 2:
- if (sub_807D9C8() == FALSE)
+ if (LoadDroughtWeatherPalettes() == FALSE)
gWeatherPtr->initStep++;
break;
case 3:
@@ -368,8 +365,8 @@ void LightRain_InitVars(void)
gWeatherPtr->unknown_6DB = 8;
gWeatherPtr->unknown_6DC = 0;
gWeatherPtr->unknown_6D9 = 10;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
SetRainStrengthFromSoundEffect(SE_T_KOAME);
}
@@ -885,8 +882,8 @@ void Snow_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->unknown_6E5 = 16;
gWeatherPtr->unknown_6E0 = 0;
}
@@ -1074,8 +1071,8 @@ void MedRain_InitVars(void)
gWeatherPtr->unknown_6DB = 4;
gWeatherPtr->unknown_6DC = 0;
gWeatherPtr->unknown_6D9 = 16;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
gWeatherPtr->unknown_6ED = 0;
SetRainStrengthFromSoundEffect(SE_T_AME);
@@ -1102,8 +1099,8 @@ void HeavyRain_InitVars(void)
gWeatherPtr->unknown_6DB = 4;
gWeatherPtr->unknown_6DC = 1;
gWeatherPtr->unknown_6D9 = 24;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
SetRainStrengthFromSoundEffect(SE_T_OOAME);
}
@@ -1139,7 +1136,7 @@ void Rain_Main(void)
gWeatherPtr->initStep++;
break;
case 3:
- if (gWeatherPtr->unknown_6C6 == 0)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_CHANGING_WEATHER)
break;
gWeatherPtr->initStep = 6;
break;
@@ -1213,7 +1210,7 @@ void Rain_Main(void)
gWeatherPtr->initStep++;
break;
case 14:
- if (gWeatherPtr->unknown_6C6 != 3)
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_IDLE)
break;
gWeatherPtr->unknown_6EA = 1;
gWeatherPtr->initStep = 4;
@@ -1296,8 +1293,8 @@ void Fog1_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
if (gWeatherPtr->fog1SpritesCreated == 0)
{
gWeatherPtr->unknown_6F0 = 0;
@@ -1446,8 +1443,8 @@ void Ash_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->unknown_6FE = 20;
if (!gWeatherPtr->ashSpritesCreated)
{
@@ -1634,8 +1631,8 @@ void Fog2_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = 0;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->unknown_6F0 = 0;
gWeatherPtr->unknown_6F2 = 1;
if (gWeatherPtr->fog2SpritesCreated == 0)
@@ -1835,8 +1832,8 @@ void Sandstorm_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = 0;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
if (gWeatherPtr->sandstormSprites1Created == 0)
{
gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0;
@@ -2015,7 +2012,7 @@ void CreateSandstormSprites_1(void)
if (!gWeatherPtr->sandstormSprites1Created)
{
LoadSpriteSheet(&sSandstormSpriteSheet);
- sub_807D8C0(gUnknown_08397128);
+ LoadCustomWeatherSpritePalette(gUnknown_08397128);
for (i = 0; i < 20; i++)
{
u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
@@ -2113,26 +2110,26 @@ void SandstormSpriteCallback3(struct Sprite *sprite)
}
//------------------------------------------------------------------------------
-// Weather 11
+// Shade
//------------------------------------------------------------------------------
-void Weather11_InitVars(void)
+void Shade_InitVars(void)
{
gWeatherPtr->initStep = 0;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
}
-void Weather11_InitAll(void)
+void Shade_InitAll(void)
{
- Weather11_InitVars();
+ Shade_InitVars();
}
-void Weather11_Main(void)
+void Shade_Main(void)
{
}
-bool8 Weather11_Finish(void)
+bool8 Shade_Finish(void)
{
return FALSE;
}
@@ -2322,7 +2319,7 @@ void SetSav1WeatherFromCurrMapHeader(void)
void SetWeather(u32 weather)
{
SetSav1Weather(weather);
- DoWeatherEffect(GetSav1Weather());
+ ChangeWeather(GetSav1Weather());
}
void SetWeather_Unused(u32 weather)
@@ -2333,7 +2330,7 @@ void SetWeather_Unused(u32 weather)
void DoCurrentWeather(void)
{
- DoWeatherEffect(GetSav1Weather());
+ ChangeWeather(GetSav1Weather());
}
void sub_8080750(void)
@@ -2380,5 +2377,5 @@ void UpdateRainCounter(u8 newWeather, u8 oldWeather)
{
if (newWeather != oldWeather
&& (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED))
- IncrementGameStat(0x28);
+ IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
}
diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c
index e4328acfc..513107729 100644
--- a/src/field/fldeff_cut.c
+++ b/src/field/fldeff_cut.c
@@ -122,7 +122,7 @@ bool8 FldEff_UseCutOnGrass(void)
gTasks[taskId].data[8] = (u32)sub_80A2684 >> 16;
gTasks[taskId].data[9] = (u32)sub_80A2684;
- IncrementGameStat(0x12);
+ IncrementGameStat(GAME_STAT_USED_CUT);
return FALSE;
}
@@ -138,7 +138,7 @@ bool8 FldEff_UseCutOnTree(void)
gTasks[taskId].data[8] = (u32)sub_80A2B00 >> 16;
gTasks[taskId].data[9] = (u32)sub_80A2B00;
- IncrementGameStat(0x12);
+ IncrementGameStat(GAME_STAT_USED_CUT);
return FALSE;
}
diff --git a/src/field/fldeff_escalator.c b/src/field/fldeff_escalator.c
new file mode 100644
index 000000000..981233480
--- /dev/null
+++ b/src/field/fldeff_escalator.c
@@ -0,0 +1,132 @@
+#include "global.h"
+#include "task.h"
+#include "fieldmap.h"
+#include "field_camera.h"
+#include "field_player_avatar.h"
+
+extern u8 gUnknown_02038731;
+
+void sub_80B45B4(u8 taskId, const s16 *list, u16 c)
+{
+ s16 r5 = gTasks[taskId].data[4] - 1;
+ s16 r3 = gTasks[taskId].data[5] - 1;
+ s16 r4 = gTasks[taskId].data[1];
+ s16 y;
+ s16 x;
+
+ if (gTasks[taskId].data[2] == 0)
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[2 - r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
+ }
+ }
+ }
+ }
+}
+
+const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280};
+const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281};
+const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288};
+const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289};
+const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4};
+const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5};
+const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC};
+
+void sub_80B4710(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[3] = 1;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_80B45B4(taskId, gUnknown_083CC714, 0);
+ break;
+ case 1:
+ sub_80B45B4(taskId, gUnknown_083CC71A, 0);
+ break;
+ case 2:
+ sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
+ break;
+ case 3:
+ sub_80B45B4(taskId, gUnknown_083CC726, 0);
+ break;
+ case 4:
+ sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
+ break;
+ case 5:
+ sub_80B45B4(taskId, gUnknown_083CC732, 0);
+ break;
+ case 6:
+ sub_80B45B4(taskId, gUnknown_083CC738, 0);
+ break;
+ }
+
+ data[0] = (data[0] + 1) & 7;
+ if (!data[0])
+ {
+ DrawWholeMapView();
+ data[1] = (data[1] + 1) % 3;
+ data[3] = 0;
+ }
+}
+
+u8 sub_80B47D8(u16 var)
+{
+ u8 taskId = CreateTask(sub_80B4710, 0);
+ s16 *data = gTasks[taskId].data;
+
+ PlayerGetDestCoords(&data[4], &data[5]);
+ data[0] = 0;
+ data[1] = 0;
+ data[2] = var;
+ sub_80B4710(taskId);
+ return taskId;
+}
+
+void sub_80B4824(u8 var)
+{
+ gUnknown_02038731 = sub_80B47D8(var);
+}
+
+void sub_80B483C(void)
+{
+ DestroyTask(gUnknown_02038731);
+}
+
+bool8 sub_80B4850(void)
+{
+ if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
+ return FALSE;
+ else
+ return TRUE;
+}
diff --git a/src/field/item_menu.c b/src/field/item_menu.c
index e0575af4c..959eb09ae 100644
--- a/src/field/item_menu.c
+++ b/src/field/item_menu.c
@@ -34,12 +34,12 @@
#include "task.h"
#include "text.h"
#include "scanline_effect.h"
+#include "menu_helpers.h"
#include "ewram.h"
// External stuff
extern void gpu_pal_allocator_reset__manage_upper_four(void);
-extern void sub_80F9020(void);
-extern void sub_80F9988();
+extern void SetVerticalScrollIndicatorPriority();
extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16);
extern void PauseVerticalScrollIndicator();
extern u8 sub_80F9284(void);
@@ -47,10 +47,10 @@ extern void sub_808B5B4();
extern u8 sub_80F92F4();
extern void sub_80C9C7C(u8);
extern void pal_fill_black(void);
-extern bool8 sub_807D770(void);
+extern bool8 IsWeatherNotFadingIn(void);
extern u8 sub_80F931C();
extern void sub_808A3F8(u8);
-extern void sub_80B3050(void);
+extern void Shop_FadeReturnToMartMenu(void);
extern void sub_80546B8(u8);
extern void sub_804E990(u8);
extern void sub_802E424(u8);
@@ -368,20 +368,8 @@ static void sub_80A3134(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
-
- {
- const void *src = gBGTilemapBuffers[1];
- void *dst = (void *)(VRAM + 0x2000);
-
- DmaCopy16(3, src, dst, 0x800);
- }
-
- {
- const void *src = gBGTilemapBuffers[2];
- void *dst = (void *)(VRAM + 0x6000);
-
- DmaCopy16(3, src, dst, 0x800);
- }
+ DmaCopy16Defvars(3, gBGTilemapBuffers[1], (void *)(VRAM + 0x2000), 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x6000), 0x800);
}
static bool8 SetupBagMultistep(void)
@@ -392,7 +380,7 @@ static bool8 SetupBagMultistep(void)
switch (gMain.state)
{
case 0:
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80A34E8();
gMain.state++;
break;
@@ -405,7 +393,7 @@ static bool8 SetupBagMultistep(void)
gMain.state++;
break;
case 3:
- sub_80F9020();
+ ClearBGTilemapBuffers();
ewramBagSetupStep = 0;
gMain.state++;
break;
@@ -437,20 +425,20 @@ static bool8 SetupBagMultistep(void)
gMain.state++;
break;
case 10:
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
- CreateVerticalScrollIndicators(0, 172, 12);
- CreateVerticalScrollIndicators(1, 172, 148);
- CreateVerticalScrollIndicators(2, 28, 88);
- CreateVerticalScrollIndicators(3, 100, 88);
- sub_80F9988(0, 2);
- sub_80F9988(1, 2);
- sub_80F9988(2, 2);
- sub_80F9988(3, 2);
+ CreateVerticalScrollIndicators(TOP_ARROW, 172, 12);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 172, 148);
+ CreateVerticalScrollIndicators(LEFT_ARROW, 28, 88);
+ CreateVerticalScrollIndicators(RIGHT_ARROW, 100, 88);
+ SetVerticalScrollIndicatorPriority(TOP_ARROW, 2);
+ SetVerticalScrollIndicatorPriority(BOTTOM_ARROW, 2);
+ SetVerticalScrollIndicatorPriority(LEFT_ARROW, 2);
+ SetVerticalScrollIndicatorPriority(RIGHT_ARROW, 2);
if (sReturnLocation == RETURN_TO_FIELD_4 || sReturnLocation == RETURN_TO_FIELD_5)
{
- sub_80F979C(2, 1);
- sub_80F979C(3, 1);
+ SetVerticalScrollIndicators(LEFT_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(RIGHT_ARROW, INVISIBLE);
}
gMain.state++;
break;
@@ -657,10 +645,10 @@ static void sub_80A3770(void)
static void sub_80A37C0(u8 taskId)
{
gTasks[taskId].func = sub_80A50C8;
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
- StartVerticalScrollIndicators(2);
- StartVerticalScrollIndicators(3);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
+ StartVerticalScrollIndicators(LEFT_ARROW);
+ StartVerticalScrollIndicators(RIGHT_ARROW);
}
static void sub_80A37F8(u8 taskId)
@@ -702,8 +690,8 @@ static void sub_80A37F8(u8 taskId)
sub_80A37C0(FindTaskIdByFunc(sub_80A4F68));
DestroyTask(taskId);
ItemListMenu_InitMenu();
- sub_80F979C(2, 0);
- sub_80F979C(3, 0);
+ SetVerticalScrollIndicators(LEFT_ARROW, VISIBLE);
+ SetVerticalScrollIndicators(RIGHT_ARROW, VISIBLE);
}
}
@@ -1505,14 +1493,14 @@ static void sub_80A47E8(u16 a, int b, int c, int d)
break;
}
if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0)
- sub_80F979C(0, 0);
+ SetVerticalScrollIndicators(TOP_ARROW, VISIBLE);
else
- sub_80F979C(0, 1);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
if ((sReturnLocation != RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots + 1)
|| (sReturnLocation == RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots))
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
else
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
}
static void sub_80A48E8(u16 taskId, int b, int c)
@@ -1707,14 +1695,14 @@ static void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 digits)
static void sub_80A4E8C(s8 delta, u8 b)
{
PlaySE(SE_SELECT);
- sub_80F979C(0, 1);
- sub_80F979C(1, 1);
- sub_80F979C(2, 1);
- sub_80F979C(3, 1);
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1);
- PauseVerticalScrollIndicator(2);
- PauseVerticalScrollIndicator(3);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(LEFT_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(RIGHT_ARROW, INVISIBLE);
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
+ PauseVerticalScrollIndicator(LEFT_ARROW);
+ PauseVerticalScrollIndicator(RIGHT_ARROW);
ChangePocket(gBGTilemapBuffers[2], delta);
DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket);
sub_80A3770();
@@ -1866,10 +1854,10 @@ static void sub_80A50C8(u8 taskId)
gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos;
gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId;
gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId);
- sub_80F98A4(0);
- sub_80F98A4(1);
- sub_80F98A4(2);
- sub_80F98A4(3);
+ StopVerticalScrollIndicators(TOP_ARROW);
+ StopVerticalScrollIndicators(BOTTOM_ARROW);
+ StopVerticalScrollIndicators(LEFT_ARROW);
+ StopVerticalScrollIndicators(RIGHT_ARROW);
sub_80A797C();
}
else
@@ -1901,7 +1889,7 @@ static void sub_80A50C8(u8 taskId)
}
}
-bool8 sub_80A52C4(u8 taskId, u16 b)
+bool8 SellMenu_QuantityRoller(u8 taskId, u16 b)
{
s16 *taskData = gTasks[taskId].data;
@@ -1948,7 +1936,7 @@ static bool8 sub_80A5350(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- if (sub_80A52C4(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE)
+ if (SellMenu_QuantityRoller(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE)
{
// if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way
if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1)
@@ -2711,7 +2699,7 @@ void ExecuteItemUseFromBlackPalette(void)
static void Task_CallItemUseOnFieldCallback(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
gFieldItemUseCallback(taskId);
}
@@ -2963,7 +2951,7 @@ static void sub_80A62D8(void)
gUnknown_02038563 = CreateTask(sub_80A50C8, 0);
}
-void sub_80A6300(void)
+void ItemMenu_LoadSellMenu(void)
{
sReturnLocation = RETURN_TO_SHOP;
SetMainCallback2(sub_80A62D8);
@@ -2971,7 +2959,7 @@ void sub_80A6300(void)
static void OnBagClose_Shop(u8 taskId)
{
- gFieldCallback = sub_80B3050;
+ gFieldCallback = Shop_FadeReturnToMartMenu;
gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16;
gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch;
sub_80A5AE4(taskId);
@@ -3523,8 +3511,8 @@ static void sub_80A7230(u8 taskId)
break;
case 204:
PlaySE(SE_SELECT);
- sub_80F98A4(2);
- sub_80F98A4(3);
+ StopVerticalScrollIndicators(LEFT_ARROW);
+ StopVerticalScrollIndicators(RIGHT_ARROW);
gSpecialVar_ItemId = ITEM_POKE_BALL;
sPopupMenuActionList = gUnknown_083C1708;
gUnknown_02038564 = 2;
diff --git a/src/field/item_use.c b/src/field/item_use.c
index 55fb21814..219ef5080 100644
--- a/src/field/item_use.c
+++ b/src/field/item_use.c
@@ -40,7 +40,7 @@
extern void (*gFieldItemUseCallback)(u8);
extern void (*gFieldCallback)(void);
extern void (*gUnknown_0300485C)(void);
-extern void (*gUnknown_03004AE4)(u8, u16, TaskFunc);
+extern void (*gPokemonItemUseCallback)(u8, u16, TaskFunc);
extern u8 gUnknown_02038561;
extern u8 gLastFieldPokeMenuOpened;
@@ -100,7 +100,7 @@ void ItemMenu_ConfirmNormalFade(u8 var)
void ItemMenu_ConfirmComplexFade(u8 var)
{
ExecuteSwitchToOverworldFromItemUse(var);
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
void SetUpItemUseOnFieldCallback(u8 taskId)
@@ -259,7 +259,7 @@ void ItemUseOnFieldCB_Rod(u8 taskId)
void ItemUseOutOfBattle_Itemfinder(u8 var)
{
- IncrementGameStat(0x27);
+ IncrementGameStat(GAME_STAT_USED_ITEMFINDER);
gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Itemfinder;
SetUpItemUseOnFieldCallback(var);
}
@@ -832,7 +832,7 @@ void sub_80C9D98(u8 taskId)
void ItemUseOutOfBattle_Medicine(u8 taskId)
{
- gUnknown_03004AE4 = UseMedicine;
+ gPokemonItemUseCallback = UseMedicine;
sub_80C9D98(taskId);
}
@@ -850,26 +850,26 @@ void ItemUseOutOfBattle_SacredAsh(u8 taskId)
break;
}
}
- gUnknown_03004AE4 = sub_8070048;
+ gPokemonItemUseCallback = sub_8070048;
gUnknown_02038561 = 4;
ItemMenu_ConfirmNormalFade(taskId);
}
void ItemUseOutOfBattle_PPRecovery(u8 taskId)
{
- gUnknown_03004AE4 = DoPPRecoveryItemEffect;
+ gPokemonItemUseCallback = DoPPRecoveryItemEffect;
sub_80C9D98(taskId);
}
void ItemUseOutOfBattle_PPUp(u8 taskId)
{
- gUnknown_03004AE4 = DoPPUpItemEffect;
+ gPokemonItemUseCallback = DoPPUpItemEffect;
sub_80C9D98(taskId);
}
void ItemUseOutOfBattle_RareCandy(u8 taskId)
{
- gUnknown_03004AE4 = DoRareCandyItemEffect;
+ gPokemonItemUseCallback = DoRareCandyItemEffect;
sub_80C9D98(taskId);
}
@@ -908,7 +908,7 @@ void sub_80C9F80(u8 var)
void sub_80C9FC0(u8 var)
{
- gUnknown_03004AE4 = TeachMonTMMove;
+ gPokemonItemUseCallback = TeachMonTMMove;
sub_80C9D98(var);
}
@@ -1009,7 +1009,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
void ItemUseOutOfBattle_EvolutionStone(u8 var)
{
- gUnknown_03004AE4 = DoEvolutionStoneItemEffect;
+ gPokemonItemUseCallback = DoEvolutionStoneItemEffect;
sub_80C9D98(var);
}
@@ -1078,19 +1078,19 @@ void sub_80CA3C0(u8 taskId)
void ItemUseInBattle_Medicine(u8 var)
{
- gUnknown_03004AE4 = UseMedicine;
+ gPokemonItemUseCallback = UseMedicine;
sub_80CA3C0(var);
}
void unref_sub_80CA410(u8 var)
{
- gUnknown_03004AE4 = sub_8070048;
+ gPokemonItemUseCallback = sub_8070048;
sub_80CA3C0(var);
}
void ItemUseInBattle_PPRecovery(u8 var)
{
- gUnknown_03004AE4 = DoPPRecoveryItemEffect;
+ gPokemonItemUseCallback = DoPPRecoveryItemEffect;
sub_80CA3C0(var);
}
diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c
index 76f0d367e..388d98ec7 100644
--- a/src/field/menu_helpers.c
+++ b/src/field/menu_helpers.c
@@ -18,7 +18,7 @@
static void sub_80F9834(struct Sprite *sprite);
-static EWRAM_DATA u8 gUnknown_020388C0[4] = {0};
+static EWRAM_DATA u8 gVerticalScrollIndicatorIds[4] = {0};
static EWRAM_DATA struct YesNoFuncTable gUnknown_020388C4 = {0};
static TaskFunc gUnknown_0300074C;
@@ -125,7 +125,7 @@ static const struct SpriteTemplate gSpriteTemplate_83E5A00 =
.callback = SpriteCallbackDummy,
};
-void sub_80F9020(void)
+void ClearBGTilemapBuffers(void)
{
memset(&gBGTilemapBuffers[1], 0, 0x800);
memset(&gBGTilemapBuffers[2], 0, 0x800);
@@ -296,9 +296,6 @@ bool8 sub_80F9344(void)
void sub_80F9368(void)
{
- u8 *addr;
- u32 size;
-
REG_DISPCNT = 0;
REG_BG3CNT = 0;
REG_BG2CNT = 0;
@@ -312,38 +309,24 @@ void sub_80F9368(void)
REG_BG1VOFS = 0;
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
-
- addr = (u8 *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, (u8 *)VRAM, 0x18000, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
}
-void sub_80F9438(void)
+void ClearVideoCallbacks(void)
{
SetVBlankCallback(NULL);
SetHBlankCallback(NULL);
}
-void sub_80F944C(void)
+void ClearVerticalScrollIndicatorPalettes(void)
{
u8 i;
for (i = 0; i < 4; i++)
{
- gUnknown_020388C0[i] = 0xFF;
+ gVerticalScrollIndicatorIds[i] = 0xFF;
}
FreeSpritePaletteByTag(SCROLL_INDICATOR_PAL_TAG);
@@ -401,92 +384,92 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y)
switch (id)
{
- case 0:
- if (gUnknown_020388C0[0] == 0xFF)
+ case TOP_ARROW:
+ if (gVerticalScrollIndicatorIds[TOP_ARROW] == 0xFF)
{
- gUnknown_020388C0[0] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
- gSprites[gUnknown_020388C0[0]].data[2] = -1;
- if (gUnknown_020388C0[1] != 0xFF)
+ gVerticalScrollIndicatorIds[TOP_ARROW] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[2] = -1;
+ if (gVerticalScrollIndicatorIds[BOTTOM_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[0]].pos2.y = gSprites[gUnknown_020388C0[1]].pos2.y * -1;
- gSprites[gUnknown_020388C0[0]].data[3] = gSprites[gUnknown_020388C0[1]].data[3];
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].pos2.y = gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].pos2.y * -1;
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[3] = gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[3];
}
else
{
- gSprites[gUnknown_020388C0[0]].data[3] = 0;
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[3] = 0;
}
}
break;
- case 1:
- if (gUnknown_020388C0[1] == 0xFF)
+ case BOTTOM_ARROW:
+ if (gVerticalScrollIndicatorIds[BOTTOM_ARROW] == 0xFF)
{
- gUnknown_020388C0[1] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
- gSprites[gUnknown_020388C0[1]].data[2] = 1;
- if (gUnknown_020388C0[0] != 0xFF)
+ gVerticalScrollIndicatorIds[BOTTOM_ARROW] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[2] = 1;
+ if (gVerticalScrollIndicatorIds[TOP_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[1]].pos2.y = gSprites[gUnknown_020388C0[0]].pos2.y * -1;
- gSprites[gUnknown_020388C0[1]].data[3] = gSprites[gUnknown_020388C0[0]].data[3];
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].pos2.y = gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].pos2.y * -1;
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[3] = gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[3];
}
else
{
- gSprites[gUnknown_020388C0[1]].data[3] = 0;
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[3] = 0;
}
}
break;
- case 2:
- if (gUnknown_020388C0[2] == 0xFF)
+ case LEFT_ARROW:
+ if (gVerticalScrollIndicatorIds[LEFT_ARROW] == 0xFF)
{
- gUnknown_020388C0[2] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
- gSprites[gUnknown_020388C0[2]].data[0] = -1;
- if (gUnknown_020388C0[3] != 0xFF)
+ gVerticalScrollIndicatorIds[LEFT_ARROW] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[0] = -1;
+ if (gVerticalScrollIndicatorIds[RIGHT_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[2]].pos2.x = gSprites[gUnknown_020388C0[3]].pos2.x * -1;
- gSprites[gUnknown_020388C0[2]].data[1] = gSprites[gUnknown_020388C0[3]].data[1];
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].pos2.x = gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].pos2.x * -1;
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[1] = gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[1];
}
else
{
- gSprites[gUnknown_020388C0[2]].data[1] = 0;
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[1] = 0;
}
}
break;
- case 3:
- if (gUnknown_020388C0[3] == 0xFF)
+ case RIGHT_ARROW:
+ if (gVerticalScrollIndicatorIds[RIGHT_ARROW] == 0xFF)
{
- gUnknown_020388C0[3] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
- gSprites[gUnknown_020388C0[3]].data[0] = 1;
- if (gUnknown_020388C0[2] != 0xFF)
+ gVerticalScrollIndicatorIds[RIGHT_ARROW] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[0] = 1;
+ if (gVerticalScrollIndicatorIds[LEFT_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[3]].pos2.x = gSprites[gUnknown_020388C0[2]].pos2.x * -1;
- gSprites[gUnknown_020388C0[3]].data[1] = gSprites[gUnknown_020388C0[2]].data[1];
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].pos2.x = gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].pos2.x * -1;
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[1] = gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[1];
}
else
{
- gSprites[gUnknown_020388C0[3]].data[1] = 0;
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[1] = 0;
}
}
break;
}
- StartSpriteAnim(&gSprites[gUnknown_020388C0[id]], id & 1);
+ StartSpriteAnim(&gSprites[gVerticalScrollIndicatorIds[id]], id & 1);
}
-void sub_80F979C(u8 id, bool8 invisible)
+void SetVerticalScrollIndicators(u8 id, bool8 invisible)
{
- if (id < 4 && gUnknown_020388C0[id] != 0xFF)
+ if (id < 4 && gVerticalScrollIndicatorIds[id] != 0xFF)
{
- gSprites[gUnknown_020388C0[id]].invisible = invisible;
+ gSprites[gVerticalScrollIndicatorIds[id]].invisible = invisible;
}
}
void DestroyVerticalScrollIndicator(u8 id)
{
- if (id < 4 && gUnknown_020388C0[id] != 0xFF)
+ if (id < 4 && gVerticalScrollIndicatorIds[id] != 0xFF)
{
- DestroySprite(&gSprites[gUnknown_020388C0[id]]);
- gUnknown_020388C0[id] = 0xFF;
+ DestroySprite(&gSprites[gVerticalScrollIndicatorIds[id]]);
+ gVerticalScrollIndicatorIds[id] = 0xFF;
}
}
@@ -530,43 +513,43 @@ static void sub_80F9834(struct Sprite *sprite)
}
}
-void sub_80F98A4(u8 id)
+void StopVerticalScrollIndicators(u8 id)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].callback = SpriteCallbackDummy;
+ gSprites[gVerticalScrollIndicatorIds[id]].callback = SpriteCallbackDummy;
}
}
void StartVerticalScrollIndicators(u8 id)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].callback = sub_80F9834;
+ gSprites[gVerticalScrollIndicatorIds[id]].callback = sub_80F9834;
}
}
-static void sub_80F9914(u8 id)
+static void ResetVerticalScrollIndicators(u8 id)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].pos2.x = 0;
- gSprites[gUnknown_020388C0[id]].pos2.y = 0;
- gSprites[gUnknown_020388C0[id]].data[1] = 0;
- gSprites[gUnknown_020388C0[id]].data[3] = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].pos2.x = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].pos2.y = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].data[1] = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].data[3] = 0;
}
}
void PauseVerticalScrollIndicator(u8 id)
{
- sub_80F98A4(id);
- sub_80F9914(id);
+ StopVerticalScrollIndicators(id);
+ ResetVerticalScrollIndicators(id);
}
-void sub_80F9988(u8 id, u8 priority)
+void SetVerticalScrollIndicatorPriority(u8 id, u8 priority)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].oam.priority = priority;
+ gSprites[gVerticalScrollIndicatorIds[id]].oam.priority = priority;
}
}
diff --git a/src/field/money.c b/src/field/money.c
index b85ed8009..3b7268dbc 100644
--- a/src/field/money.c
+++ b/src/field/money.c
@@ -100,6 +100,8 @@ void GetMoneyAmountText(u8 *buffer, u32 amount, u8 arg2)
width = 7;
else if (amount > 99999)
width = 6;
+ // A special sprite is used for 10000 in the decoration
+ // shop, so be sure to account for this.
else if (amount > 10000)
width = 5;
else if (amount > 999)
@@ -175,7 +177,7 @@ void sub_80B7AEC(u32 arg0, u8 left, u8 top)
}
__attribute__((naked))
-void sub_80B7B34(u8 var1, u8 var2, int var3)
+void Draw10000Sprite(u8 var1, u8 var2, int var3)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
diff --git a/src/field/overworld.c b/src/field/overworld.c
index 86b0a5dac..07453e4fe 100644
--- a/src/field/overworld.c
+++ b/src/field/overworld.c
@@ -590,7 +590,7 @@ bool8 sub_80538D0(u16 x, u16 y)
void sub_80538F0(u8 mapGroup, u8 mapNum)
{
- s32 i;
+ s32 paletteIndex;
Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
sub_8053F0C();
@@ -611,8 +611,8 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
sub_8056D38(gMapHeader.mapData);
apply_map_tileset2_palette(gMapHeader.mapData);
- for (i = 6; i < 12; i++)
- sub_807D874(i);
+ for (paletteIndex = 6; paletteIndex < 12; paletteIndex++)
+ ApplyWeatherGammaShiftToPal(paletteIndex);
sub_8072ED0();
UpdateLocationHistoryForRoamer();
@@ -1664,29 +1664,12 @@ void do_load_map_stuff_loop(u8 *a1)
void sub_8054BA8(void)
{
- u8 *addr;
- u32 size;
-
REG_DISPCNT = 0;
ScanlineEffect_Stop();
DmaClear16(3, PLTT + 2, PLTT_SIZE - 2);
-
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
ResetOamRange(0, 128);
LoadOam();
}
diff --git a/src/field/party_menu.c b/src/field/party_menu.c
index 48275435e..f55ed669d 100644
--- a/src/field/party_menu.c
+++ b/src/field/party_menu.c
@@ -101,7 +101,14 @@ static void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d);
static void sub_806BB9C(u8 a);
static void sub_806BBEC(u8 a);
-const u16 TMHMMoves[] = {
+EWRAM_DATA u8 gUnknown_0202E8F4 = 0;
+EWRAM_DATA u8 gUnknown_0202E8F5 = 0;
+EWRAM_DATA u8 gUnknown_0202E8F6 = 0;
+EWRAM_DATA u16 gUnknown_0202E8F8 = 0;
+EWRAM_DATA u8 gPartyMenuType = 0;
+
+const u16 TMHMMoves[] =
+{
MOVE_FOCUS_PUNCH,
MOVE_DRAGON_CLAW,
MOVE_WATER_PULSE,
@@ -458,10 +465,6 @@ struct Unk201FE00
extern u16 gBattleTypeFlags;
extern u8 gTileBuffer[];
-extern u8 gUnknown_0202E8F4;
-extern u8 gUnknown_0202E8F6;
-extern u16 gUnknown_0202E8F8;
-extern u8 gPartyMenuType;
extern u8 gLastFieldPokeMenuOpened;
extern u8 gPlayerPartyCount;
extern s32 gBattleMoveDamage;
@@ -620,27 +623,11 @@ bool8 SetupDefaultPartyMenu(void)
bool8 InitPartyMenu(void)
{
- u8 *addr;
- u32 size;
-
switch (gMain.state)
{
case 0:
SetVBlankCallback(NULL);
- addr = (u8 *)VRAM;
- size = VRAM_SIZE;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), VRAM_SIZE, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
@@ -793,9 +780,7 @@ void ReDrawPartyMonBackgrounds(void)
{
if (ewram1B000.unk261)
{
- const void *src = gBGTilemapBuffers[2];
- void *dest = (void *)(BG_VRAM + 0x3000);
- DmaCopy16(3, src, dest, 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(BG_VRAM + 0x3000), 0x800);
if (ewram1B000.unk261 == 2)
{
diff --git a/src/field/pc_screen_effect.c b/src/field/pc_screen_effect.c
index dda569ea4..dcc3bc9c9 100644
--- a/src/field/pc_screen_effect.c
+++ b/src/field/pc_screen_effect.c
@@ -19,7 +19,7 @@ extern const u16 gUnknownPal_083D18EC[16];
extern const u8 gUnknownGfx_083D190C[128];
-extern struct PCScreenEffectStruct *gUnknown_020387EC;
+EWRAM_DATA struct PCScreenEffectStruct *gUnknown_020387EC = NULL;
const struct SpriteSheet gUnknown_083D1898 = { gUnknownGfx_083D190C, sizeof(gUnknownGfx_083D190C), 0 };
diff --git a/src/field/player_pc.c b/src/field/player_pc.c
index 1d504586c..27427ecaa 100644
--- a/src/field/player_pc.c
+++ b/src/field/player_pc.c
@@ -29,9 +29,9 @@ extern void DestroyVerticalScrollIndicator(u8);
extern void PauseVerticalScrollIndicator(u8);
extern void LoadScrollIndicatorPalette(void);
extern void ClearMailStruct(struct MailStruct *);
-extern u8 sub_807D770(void);
+extern u8 IsWeatherNotFadingIn(void);
extern void sub_808B020(void);
-extern void sub_80F944C(void);
+extern void ClearVerticalScrollIndicatorPalettes(void);
static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;
@@ -357,12 +357,12 @@ static void Task_ItemStorage_Deposit(u8 taskId)
static void ItemStorage_Deposit(u8 taskId)
{
TASK.FUNC = Task_ItemStorage_Deposit;
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
static void ItemStorage_HandleReturnToProcessInput(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
TASK.FUNC = ItemStorageMenuProcessInput;
}
@@ -563,8 +563,8 @@ static void ItemStorage_ProcessInput(u8 taskId)
static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId)
{
BuyMenuFreeMemory();
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
Menu_EraseWindowRect(0, 0, 29, 19);
Menu_DisplayDialogueFrame();
InitItemStorageMenu(TASK.CURRENT_ITEM_STORAGE_MENU);
@@ -576,8 +576,8 @@ static void ItemStorage_DoItemAction(u8 taskId)
s16 *data = TASK.data;
u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP;
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1); // PauseVerticalScrollIndicator
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
if(CURRENT_ITEM_STORAGE_MENU == ITEMPC_MENU_WITHDRAW)
{
@@ -663,8 +663,8 @@ static void ItemStorage_HandleQuantityRolling(u8 taskId)
{
PlaySE(SE_SELECT);
Menu_EraseWindowRect(6, 6, 0xD, 0xB);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); // why not use trueIndex?
TASK.FUNC = ItemStorage_ProcessInput;
}
@@ -724,8 +724,8 @@ static void ItemStorage_ResumeInputFromNoToss(u8 taskId)
Menu_EraseWindowRect(0x6, 0x6, 0xD, 0xB);
InitMenu(0, 16, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId);
TASK.FUNC = ItemStorage_ProcessInput;
}
@@ -757,8 +757,8 @@ static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId)
if(gMain.newKeys & A_BUTTON || gMain.newKeys == B_BUTTON)
{
ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
TASK.FUNC = ItemStorage_ProcessInput;
}
}
@@ -766,8 +766,8 @@ static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId)
static void ItemStorage_HandleResumeProcessInput(u8 taskId)
{
Menu_EraseWindowRect(0x6, 0x6, 0xD, 0xB);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
ItemStorage_DrawBothListAndDescription(taskId);
TASK.FUNC = ItemStorage_ProcessInput;
}
@@ -903,14 +903,14 @@ static void ItemStorage_DrawItemList(u8 taskId)
Menu_BlankWindowRect(16, yCoord + 4, 0x1C, 0x12);
if (ITEMS_ABOVE_TOP != 0)
- CreateVerticalScrollIndicators(0, 0xB8, 8);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xB8, 8);
else
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
if (ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS <= NUM_ITEMS)
- CreateVerticalScrollIndicators(1, 0xB8, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xB8, 0x98);
else
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
static void ItemStorage_PrintItemPcResponse(u16 itemId)
@@ -974,7 +974,7 @@ static void ItemStorage_GoBackToItemPCMenu(u8 taskId, u8 var)
{
s16 *data = TASK.data;
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
ItemStorage_LoadPalette();
Menu_DrawStdWindowFrame(0xF, 0, 0x1D, 0x13);
@@ -1055,19 +1055,19 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused
Menu_BlankWindowRect(0x15, yCoord + 4, 0x1C, 0x12);
if (eMailboxInfo.itemsAbove != 0)
- CreateVerticalScrollIndicators(0, 0xC8, 8);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xC8, 8);
else
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
if (eMailboxInfo.itemsAbove + eMailboxInfo.pageItems <= eMailboxInfo.count)
- CreateVerticalScrollIndicators(1, 0xC8, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xC8, 0x98);
else
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
static void Mailbox_DrawMailboxMenu(u8 taskId)
{
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
Menu_EraseWindowRect(0, 0, 0x1D, 0x13);
Menu_DrawStdWindowFrame(0, 0, 0x8, 0x3);
@@ -1137,8 +1137,8 @@ static void Mailbox_ProcessInput(u8 taskId)
static void Mailbox_CloseScrollIndicators(void)
{
BuyMenuFreeMemory();
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)
@@ -1196,7 +1196,7 @@ static void Mailbox_MailOptionsProcessInput(u8 taskId)
static void Mailbox_DoMailRead(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
TASK.FUNC = Mailbox_FadeAndReadMail;
}
@@ -1211,7 +1211,7 @@ static void Mailbox_FadeAndReadMail(u8 taskId)
static void Mailbox_HandleReturnToProcessInput(u8 taskId) // Mailbox_HandleReturnToProcessInput
{
- if(sub_807D770() == TRUE) // is black fade finished? why not gPaletteFade.active?
+ if (IsWeatherNotFadingIn() == TRUE) // is black fade finished? why not gPaletteFade.active?
TASK.FUNC = Mailbox_ProcessInput;
}
@@ -1280,7 +1280,7 @@ static void Mailbox_Give(u8 taskId)
Mailbox_NoPokemonForMail(taskId); // cannot be reached normally
else
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
TASK.FUNC = Mailbox_DoGiveMailPokeMenu;
}
}
diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c
index 7e8bdc2ce..e08a65f49 100644
--- a/src/field/pokeblock.c
+++ b/src/field/pokeblock.c
@@ -1,7 +1,3 @@
-//
-
-//
-
#include "global.h"
#include "overworld.h"
#include "sprite.h"
@@ -232,14 +228,10 @@ static void sub_810B674(void)
static void sub_810B68C(void)
{
- u16 *src;
- vu16 *dest;
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- src = gBGTilemapBuffers[2];
- dest = (vu16 *)(VRAM + 0x7800);
- DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x7800), sizeof gBGTilemapBuffers[2]);
}
static bool8 sub_810B6C0(void)
@@ -248,7 +240,7 @@ static bool8 sub_810B6C0(void)
switch (gMain.state)
{
case 0:
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80F9368();
REG_BG2CNT = BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_PRIORITY(2);
REG_BLDCNT = 0;
@@ -310,10 +302,10 @@ static bool8 sub_810B6C0(void)
}
break;
case 12:
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
- CreateVerticalScrollIndicators(0, 0xb0, 0x08);
- CreateVerticalScrollIndicators(1, 0xb0, 0x98);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xb0, 0x08);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xb0, 0x98);
gMain.state++;
break;
case 13:
@@ -560,19 +552,19 @@ static void sub_810BDAC(bool8 flag)
}
if (gUnknown_02039248.unk1)
{
- sub_80F979C(0, 0);
+ SetVerticalScrollIndicators(TOP_ARROW, VISIBLE);
}
else
{
- sub_80F979C(0, 1);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
}
if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2)
{
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
}
else
{
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
}
for (i=0; i<5; i++)
{
@@ -776,8 +768,8 @@ static void sub_810C23C(u8 taskId)
static void sub_810C2B0(void)
{
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
BuyMenuFreeMemory();
}
@@ -810,8 +802,8 @@ static void sub_810C368(u8 taskId)
int v0 = 0;
if (gUnknown_02039244 > 1)
v0 = 2;
- sub_80F98A4(0);
- sub_80F98A4(1);
+ StopVerticalScrollIndicators(TOP_ARROW);
+ StopVerticalScrollIndicators(BOTTOM_ARROW);
BasicInitMenuWindow(&gWindowTemplate_81E6E50);
Menu_DrawStdWindowFrame(7, v0 + 4, 13, 11);
Menu_PrintItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758);
@@ -878,7 +870,7 @@ static void sub_810C540(u8 taskId)
static void sub_810C5C0(u8 taskId)
{
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
gTasks[taskId].func = sub_810C540;
}
@@ -900,11 +892,11 @@ static void sub_810C610(u8 taskId)
static void sub_810C668(u8 taskId)
{
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2)
{
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
}
BasicInitMenuWindow(&gWindowTemplate_81E6E50);
Menu_EraseWindowRect(7, 6, 13, 11);
@@ -924,14 +916,14 @@ static void sub_810C704(u8 taskId)
{
BasicInitMenuWindow(&gWindowTemplate_81E6E34);
sub_810BC84(gUnknown_02039248.unk1);
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
gTasks[taskId].func = sub_810C6DC;
}
static void sub_810C748(u8 taskId)
{
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
Menu_DestroyCursor();
Menu_EraseWindowRect(7, 4, 13, 11);
gTasks[taskId].func = sub_810BF7C;
diff --git a/src/field/region_map.c b/src/field/region_map.c
index a098eb73d..1378820fe 100644
--- a/src/field/region_map.c
+++ b/src/field/region_map.c
@@ -1608,8 +1608,8 @@ static void PrintFlyTargetName(void)
{
if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4)
{
- u16 i = 0;
- int zero;
+ u16 i;
+ bool32 drawFrameDisabled = FALSE;
for (i = 0; i < ARRAY_COUNT(sUnknown_083E79C0); i++)
{
@@ -1627,9 +1627,8 @@ static void PrintFlyTargetName(void)
break;
}
}
- // This check is always true, but somehow the compiler still performed it.
- asm("mov %0, #0\n":"=r"(zero)); // zero = 0
- if (zero == 0)
+
+ if (!drawFrameDisabled)
{
Menu_DrawStdWindowFrame(16, 16, 29, 19);
Menu_PrintText(ewram0_3.regionMap.mapSectionName, 17, 17);
diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c
index e9ca3a9f9..6c7c8b391 100644
--- a/src/field/safari_zone.c
+++ b/src/field/safari_zone.c
@@ -56,7 +56,7 @@ void ResetSafariZoneFlag(void)
void EnterSafariMode(void)
{
- IncrementGameStat(0x11);
+ IncrementGameStat(GAME_STAT_ENTERED_SAFARI_ZONE);
SetSafariZoneFlag();
ClearAllPokeblockFeeders();
gNumSafariBalls = 30;
diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c
index e795fd8ed..bc5cd0b1d 100644
--- a/src/field/scrcmd.c
+++ b/src/field/scrcmd.c
@@ -626,7 +626,7 @@ bool8 IsPaletteNotActive(void)
bool8 ScrCmd_fadescreen(struct ScriptContext *ctx)
{
- fade_screen(ScriptReadByte(ctx), 0);
+ FadeScreen(ScriptReadByte(ctx), 0);
SetupNativeScript(ctx, IsPaletteNotActive);
return TRUE;
}
@@ -636,7 +636,7 @@ bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx)
u8 duration = ScriptReadByte(ctx);
u8 delay = ScriptReadByte(ctx);
- fade_screen(duration, delay);
+ FadeScreen(duration, delay);
SetupNativeScript(ctx, IsPaletteNotActive);
return TRUE;
}
@@ -1755,7 +1755,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
- CreatePokemartMenu(ptr);
+ Shop_CreatePokemartMenu(ptr);
ScriptContext1_Stop();
return TRUE;
}
@@ -1764,7 +1764,7 @@ bool8 ScrCmd_pokemartdecoration(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
- CreateDecorationShop1Menu(ptr);
+ Shop_CreateDecorationShop1Menu(ptr);
ScriptContext1_Stop();
return TRUE;
}
@@ -1773,7 +1773,7 @@ bool8 ScrCmd_pokemartdecoration2(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
- CreateDecorationShop2Menu(ptr);
+ Shop_CreateDecorationShop2Menu(ptr);
ScriptContext1_Stop();
return TRUE;
}
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index 203b57867..2d02de004 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -51,7 +51,7 @@ static void Task_SecretBasePC_Registry(u8 taskId);
extern u8 gUnknown_0815F399[];
extern u8 gUnknown_0815F49A[];
-extern u8 gUnknown_020387DC;
+EWRAM_DATA u8 gUnknown_020387DC = 0;
const struct
{
@@ -348,7 +348,7 @@ void sub_80BBA48(u8 taskid)
void sub_80BBAF0(void)
{
CreateTask(sub_80BBA48, 0);
- fade_screen(1, 0);
+ FadeScreen(1, 0);
saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1);
}
@@ -362,7 +362,7 @@ bool8 sub_80BBB24(void)
void sub_80BBB50(u8 taskid)
{
FieldObjectTurn(&(gMapObjects[gPlayerAvatar.mapObjectId]), 2);
- if (sub_807D770() == 1) {
+ if (IsWeatherNotFadingIn() == 1) {
EnableBothScriptContexts();
DestroyTask(taskid);
}
@@ -397,7 +397,7 @@ void sub_80BBC78(void)
{
u8 taskid = CreateTask(sub_80BBBEC, 0);
gTasks[taskid].data[0] = 0;
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
bool8 CurrentMapIsSecretBase(void)
@@ -534,7 +534,7 @@ void sub_80BC074(u8 taskid)
void sub_80BC0F8(void) {
CreateTask(sub_80BC074, 0);
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
void sub_80BC114(void) {
@@ -895,7 +895,7 @@ void Task_SecretBasePC_Registry(u8 taskId)
s16 *taskData;
ScriptContext2_Enable();
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
taskData = gTasks[taskId].data;
@@ -959,17 +959,17 @@ void sub_80BC6B0(u8 taskId)
{
Menu_BlankWindowRect(18, 2 * n + 2, 28, 2 * n + 3);
Menu_PrintText(gUnknownText_Exit, 18, 2 * n + 2);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
if (n != 7)
Menu_BlankWindowRect(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match
}
else
- CreateVerticalScrollIndicators(1, 0xbc, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xbc, 0x98);
if (taskData[2] == 0)
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
else
- CreateVerticalScrollIndicators(0, 0xbc, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xbc, 0x08);
}
void sub_80BC7D8(u8 taskId)
@@ -1064,8 +1064,8 @@ u8 sub_80BC948(u8 a)
void sub_80BC980(u8 taskId)
{
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1);
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
Menu_DrawStdWindowFrame(1, 0, 12, 5);
Menu_PrintItems(2, 1, 2, (const struct MenuAction *)gUnknown_083D13D4);
InitMenu(0, 2, 1, 2, 0, 10);
@@ -1106,8 +1106,8 @@ void sub_80BCA84(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 29, 19);
@@ -1165,8 +1165,8 @@ void sub_80BCBF8(u8 taskId)
InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11);
Menu_EraseWindowRect(1, 0, 12, 5);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
gTasks[taskId].func = sub_80BC824;
}
@@ -1176,8 +1176,8 @@ void sub_80BCC54(u8 taskId)
u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE);
BuyMenuFreeMemory();
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
if (curBaseIndex == 0)
{
diff --git a/src/field/shop.c b/src/field/shop.c
index 1dc6ba0cd..e087628da 100644
--- a/src/field/shop.c
+++ b/src/field/shop.c
@@ -28,54 +28,66 @@
#include "field_camera.h"
#include "ewram.h"
-extern bool8 sub_80A52C4(u8, u8);
+extern bool8 SellMenu_QuantityRoller(u8, u8);
extern u8 gBuyMenuFrame_Gfx[];
extern u16 gBuyMenuFrame_Tilemap[];
extern u16 gMenuMoneyPal[16];
-void sub_80B39D0(int var1, int var2, bool32 hasControlCode);
-void sub_80B3A70(void);
-void sub_80B4378(u8);
-void sub_80B43F0(u8);
-void Task_ExitBuyMenu(u8);
-void sub_80B4470(u8);
-void sub_80B2EFC(u8 taskId);
-void sub_80B2F30(u8 taskId);
-void HandleShopMenuQuit(u8 taskId);
-void sub_80B3BF4(u8 taskId);
-void sub_80B3D7C(u8 taskId);
+static void Shop_DisplayPriceInList(int firstItemId, int lastItemId, bool32 hasControlCode);
+static void Shop_PrintItemDescText(void);
+static void Task_ReturnToBuyMenu(u8);
+static void Task_ExitBuyMenu(u8);
+static void Task_ExitBuyMenuDoFade(u8);
+static void Task_UpdatePurchaseHistory(u8);
+static void Task_HandleShopMenuBuy(u8 taskId);
+static void Task_HandleShopMenuSell(u8 taskId);
+static void Task_HandleShopMenuQuit(u8 taskId);
+static void Task_DoItemPurchase(u8 taskId);
+static void Task_CancelItemPurchase(u8 taskId);
+static void Task_DoBuySellMenu(u8);
+static void Shop_FadeAndRunBuySellCallback(u8);
+static void BuyMenuDrawGraphics(void);
+static void sub_80B3240(void);
+static void DrawFirstMartScrollIndicators(void);
+static void Shop_DrawViewport(void);
+static void Shop_InitMenus(int, int);
+static void Shop_PrintItemDesc(void);
+static void Shop_DoCursorAction(u8);
+static void Shop_LoadViewportObjects(void);
+static void Shop_AnimViewportObjects(void);
// iwram
static struct MartInfo gMartInfo;
// ewram
EWRAM_DATA u32 gMartTotalCost = 0;
-EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0};
-EWRAM_DATA struct ItemSlot gUnknown_02038724[3] = {0}; // tv.c uses this, so it cant be static
-EWRAM_DATA u8 gUnknown_02038730 = 0;
-EWRAM_DATA u8 gUnknown_02038731 = 0;
+EWRAM_DATA s16 gMartViewportObjects[16][4] = {0};
+EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3] = {0};
+EWRAM_DATA u8 gMartPurchaseHistoryId = 0;
+
+EWRAM_DATA u8 gUnknown_02038731 = 0; // This really should be in fldeff_escalator, but being in a new file aligns the ewram, which doesnt match the ROM.
// rodata
static const struct MenuAction2 sBuySellQuitMenuActions[] =
{
- { MartText_Buy, sub_80B2EFC },
- { MartText_Sell, sub_80B2F30 },
- { MartText_Quit2, HandleShopMenuQuit },
+ { MartText_Buy, Task_HandleShopMenuBuy },
+ { MartText_Sell, Task_HandleShopMenuSell },
+ { MartText_Quit2, Task_HandleShopMenuQuit },
};
-static const u8 gUnknown_083CC6E8[] = {0, 1, 2}; // BUY SELL EXIT
-static const u8 gUnknown_083CC6EB[] = {0, 2}; // BUY EXIT
+static const u8 gMartBuySellOptionList[] = {SHOP_BUY, SHOP_SELL, SHOP_EXIT};
+static const u8 gMartBuyNoSellOptionList[] = {SHOP_BUY, SHOP_EXIT};
static const u16 gUnusedMartArray[] = {0x2, 0x3, 0x4, 0xD, 0x121, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x0, 0x0};
-static const struct YesNoFuncTable gUnknown_083CC708[] =
+static const struct YesNoFuncTable sShopPurchaseYesNoFuncs[] =
{
- sub_80B3BF4,
- sub_80B3D7C
+ Task_DoItemPurchase,
+ Task_CancelItemPurchase
};
-u8 CreateShopMenu(u8 martType)
+static u8 CreateShopMenu(u8 martType)
{
ScriptContext2_Enable();
gMartInfo.martType = martType;
@@ -85,25 +97,25 @@ u8 CreateShopMenu(u8 martType)
{
gMartInfo.numChoices = 2;
Menu_DrawStdWindowFrame(0, 0, 10, 7);
- Menu_PrintItemsReordered(1, 1, 3, sBuySellQuitMenuActions, gUnknown_083CC6E8);
+ Menu_PrintItemsReordered(1, 1, 3, sBuySellQuitMenuActions, gMartBuySellOptionList);
}
else
{
gMartInfo.numChoices = 1;
Menu_DrawStdWindowFrame(0, 0, 10, 5);
- Menu_PrintItemsReordered(1, 1, 2, sBuySellQuitMenuActions, gUnknown_083CC6EB);
+ Menu_PrintItemsReordered(1, 1, 2, sBuySellQuitMenuActions, gMartBuyNoSellOptionList);
}
InitMenu(0, 1, 1, gMartInfo.numChoices + 1, 0, 9); // add 1 for cancel
- return CreateTask(sub_80B2E38, 8);
+ return CreateTask(Task_DoBuySellMenu, 8);
}
-void SetShopMenuCallback(void *callbackPtr)
+static void SetShopMenuCallback(void *callbackPtr)
{
gMartInfo.callback = callbackPtr;
}
-void SetShopItemsForSale(u16 *items)
+static void SetShopItemsForSale(u16 *items)
{
u16 i = 0;
@@ -117,9 +129,9 @@ void SetShopItemsForSale(u16 *items)
}
}
-void sub_80B2E38(u8 var)
+static void Task_DoBuySellMenu(u8 taskId)
{
- const u8 local = var;
+ const u8 taskIdConst = taskId; // why is a local const needed to match?
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
@@ -142,37 +154,37 @@ void sub_80B2E38(u8 var)
PlaySE(SE_SELECT);
if (gMartInfo.martType == MART_TYPE_0)
{
- sBuySellQuitMenuActions[gUnknown_083CC6E8[gMartInfo.cursor]].func(local);
+ sBuySellQuitMenuActions[gMartBuySellOptionList[gMartInfo.cursor]].func(taskIdConst);
}
else
{
- sBuySellQuitMenuActions[gUnknown_083CC6EB[gMartInfo.cursor]].func(local);
+ sBuySellQuitMenuActions[gMartBuyNoSellOptionList[gMartInfo.cursor]].func(taskIdConst);
}
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- HandleShopMenuQuit(local);
+ Task_HandleShopMenuQuit(taskIdConst);
}
}
-void sub_80B2EFC(u8 taskId)
+static void Task_HandleShopMenuBuy(u8 taskId)
{
gTasks[taskId].data[8] = (u32)BuyMenuDrawGraphics >> 16;
gTasks[taskId].data[9] = (u32)BuyMenuDrawGraphics;
- gTasks[taskId].func = sub_80B2FA0;
- fade_screen(1, 0);
+ gTasks[taskId].func = Shop_FadeAndRunBuySellCallback;
+ FadeScreen(1, 0);
}
-void sub_80B2F30(u8 taskId)
+static void Task_HandleShopMenuSell(u8 taskId)
{
- gTasks[taskId].data[8] = (u32)sub_80A6300 >> 16;
- gTasks[taskId].data[9] = (u32)sub_80A6300;
- gTasks[taskId].func = sub_80B2FA0;
- fade_screen(1, 0);
+ gTasks[taskId].data[8] = (u32)ItemMenu_LoadSellMenu >> 16;
+ gTasks[taskId].data[9] = (u32)ItemMenu_LoadSellMenu;
+ gTasks[taskId].func = Shop_FadeAndRunBuySellCallback;
+ FadeScreen(1, 0);
}
-void HandleShopMenuQuit(u8 taskId)
+static void Task_HandleShopMenuQuit(u8 taskId)
{
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 11, 8);
@@ -184,7 +196,7 @@ void HandleShopMenuQuit(u8 taskId)
gMartInfo.callback(); // run the callback if it exists.
}
-void sub_80B2FA0(u8 taskId)
+static void Shop_FadeAndRunBuySellCallback(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -193,15 +205,15 @@ void sub_80B2FA0(u8 taskId)
}
}
-void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
+static void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
{
CreateShopMenu(gMartInfo.martType);
DestroyTask(taskId);
}
-void Task_ExitSellMenu(u8 taskId)
+static void Task_ReturnToMartMenu(u8 taskId)
{
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == 1)
{
if (gMartInfo.martType == MART_TYPE_2)
DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0);
@@ -210,23 +222,24 @@ void Task_ExitSellMenu(u8 taskId)
}
}
-void sub_80B3050(void)
+void Shop_FadeReturnToMartMenu(void)
{
pal_fill_black();
- CreateTask(Task_ExitSellMenu, 0x8);
+ CreateTask(Task_ReturnToMartMenu, 0x8);
}
-void sub_80B3068(u8 taskId)
+void Shop_RunExitSellMenuTask(u8 taskId)
{
- Task_ExitSellMenu(taskId);
+ Task_ReturnToMartMenu(taskId);
}
-void unref_sub_80B3078(u8 taskId)
+// unused
+void Shop_LoadExitSellMenuTask(u8 taskId)
{
- gTasks[taskId].func = Task_ExitSellMenu;
+ gTasks[taskId].func = Task_ReturnToMartMenu;
}
-void sub_80B3094(void)
+static void MainCB2(void)
{
AnimateSprites();
BuildOamBuffer();
@@ -234,50 +247,43 @@ void sub_80B3094(void)
UpdatePaletteFade();
}
-void sub_80B30AC(void)
+static void VBlankCB(void)
{
- void *addr;
- void *addr2;
- void *addr3;
- u16 *tempArr;
- u16 *tempArr2;
- u16 *tempArr3;
-
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
-
- // temp vars needed to match for some dumb reason
- tempArr = gBGTilemapBuffers[1];
- addr = (void *)(VRAM + 0xE800);
- DmaCopy16(3, tempArr, addr, 0x800);
- tempArr2 = gBGTilemapBuffers[2];
- addr2 = (void *)(VRAM + 0xE000);
- DmaCopy16(3, tempArr2, addr2, 0x800);
- tempArr3 = gBGTilemapBuffers[3];
- addr3 = (void *)(VRAM + 0xF000);
- DmaCopy16(3, tempArr3, addr3, 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[1], (void *)(VRAM + 0xE800), 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0xE000), 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[3], (void *)(VRAM + 0xF000), 0x800);
}
-// this function is fugly. pls fix
-void BuyMenuDrawGraphics(void)
+static void BuyMenuDrawGraphics(void)
{
- void *addr;
- register u16 zero2 asm("r5");
-
- sub_80F9438();
+ ClearVideoCallbacks();
ScanlineEffect_Stop();
- REG_BG1HOFS = (zero2 = 0);
- REG_BG1VOFS = zero2;
- REG_BG2HOFS = zero2;
- REG_BG2VOFS = zero2;
- REG_BG3HOFS = zero2;
- REG_BG3VOFS = zero2;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
gPaletteFade.bufferTransferDisabled = 1;
- addr = (void*)OAM;
- {
- register const u32 zero asm("r6") = 0;
- DmaFill32(3, zero, addr, OAM_SIZE);
+
+ /*
+ THEORY: This seemingly useless loop is required in order to match this
+ function without hacks. The reason is because it alters the 0 optimization
+ of a later assignment into using 2 different 0s instead of the same register.
+ It is speculated that at some point Game Freak insert an artificial
+ breakpoint here in order to look at the contents of OAM before it is cleared,
+ possibly because a programmer made a mistake in shop.c which corrupted its
+ contents. There may have been a macro here which at one point idled on the
+ while(1) but was changed to 0 for release due to a define somewhere. A
+ while(0) also matches, but it is more correct to use do {} while(0) as it
+ was a fix to prevent compiler warnings on older compilers.
+ */
+ do {} while(0);
+
+ DmaFill32Defvars(3, 0, (void*)OAM, OAM_SIZE);
LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00));
LZDecompressWram(gBuyMenuFrame_Tilemap, ewram18000_2);
LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal));
@@ -287,72 +293,72 @@ void BuyMenuDrawGraphics(void)
ResetTasks();
Text_LoadWindowTemplate(&gWindowTemplate_81E6DFC);
InitMenuWindow(&gWindowTemplate_81E6DFC);
- BuyMenuDrawMapGraphics();
- gMartInfo.cursor = zero;
- gMartInfo.choicesAbove = zero2;
+ Shop_DrawViewport();
+ gMartInfo.cursor = 0;
+ gMartInfo.choicesAbove = 0;
Menu_EraseWindowRect(0, 0, 0x20, 0x20);
OpenMoneyWindow(gSaveBlock1.money, 0, 0);
- sub_80B3764(0, 7);
- sub_80B37EC();
- sub_80B3270();
- CreateTask(sub_80B40E8, 0x8);
+ Shop_InitMenus(0, 7);
+ Shop_PrintItemDesc();
+ DrawFirstMartScrollIndicators();
+ CreateTask(Shop_DoCursorAction, 0x8);
sub_80B3240();
- asm("":::"r4"); // what??
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, zero);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
gPaletteFade.bufferTransferDisabled = 0;
- SetVBlankCallback(sub_80B30AC);
- SetMainCallback2(sub_80B3094);
- }
+ SetVBlankCallback(VBlankCB);
+ SetMainCallback2(MainCB2);
}
-void sub_80B3240(void)
+static void sub_80B3240(void)
{
- u16 tempArr[2] = {0x41EE, 0x7FFF};
+ u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE};
- LoadPalette(&tempArr[1], 0xD1, 2);
- LoadPalette(&tempArr[0], 0xD8, 2);
+ LoadPalette(&colors[1], 0xD1, sizeof colors[1]);
+ LoadPalette(&colors[0], 0xD8, sizeof colors[0]);
}
-void sub_80B3270(void)
+static void DrawFirstMartScrollIndicators(void)
{
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
if (gMartInfo.itemCount > 7)
{
- CreateVerticalScrollIndicators(0, 172, 12);
- CreateVerticalScrollIndicators(1, 172, 148);
- sub_80F979C(0, 1);
+ CreateVerticalScrollIndicators(TOP_ARROW, 172, 12);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 172, 148);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
}
}
-void sub_80B32A4(void)
+static void Shop_TryDrawVerticalScrollIndicators(void)
{
if (gMartInfo.choicesAbove == 0)
- sub_80F979C(0, 1);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
else
- sub_80F979C(0, 0);
+ SetVerticalScrollIndicators(TOP_ARROW, VISIBLE);
if (gMartInfo.choicesAbove + 7 >= gMartInfo.itemCount)
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
else
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
}
-void sub_80B32EC(u16 *array, s16 offset1, s16 offset2)
+// what is the point of this function? the tiles always get overwritten by BuyMenuDrawTextboxBG.
+static void BuyMenuDrawTextboxBG_Old(u16 *array, s16 offset1, s16 offset2)
{
array[offset1 + offset2] = 0xC3E1;
array[offset1 + offset2 + 1] = 0xC3E1;
}
-void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *array2)
+static void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *array2)
{
- array[offset1 + offset2] = array2[0];
- array[offset1 + offset2 + 1] = array2[1];
- array[offset1 + offset2 + 32] = array2[2];
- array[offset1 + offset2 + 33] = array2[3];
+ // This function draws a whole 2x2 metatile.
+ array[offset1 + offset2] = array2[0]; // top left
+ array[offset1 + offset2 + 1] = array2[1]; // top right
+ array[offset1 + offset2 + 32] = array2[2]; // bottom left
+ array[offset1 + offset2 + 33] = array2[3]; // bottom right
}
-void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
+static void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
{
u8 tempVar4 = var4;
s16 offset1 = var1 * 2;
@@ -375,7 +381,8 @@ void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
}
}
-void sub_80B33D0(s16 var1, int var2, u16 *var3)
+// used to draw the border tiles around the viewport.
+static void BuyMenuDrawMapPartialMetatile(s16 var1, int var2, u16 *var3)
{
s16 offset1 = var1 * 2;
s16 offset2 = (var2 * 0x40) + 0x40;
@@ -384,7 +391,7 @@ void sub_80B33D0(s16 var1, int var2, u16 *var3)
BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4);
}
-void sub_80B3420(void)
+static void Shop_DrawViewportTiles(void)
{
s16 facingX;
s16 facingY;
@@ -413,26 +420,26 @@ void sub_80B3420(void)
else
{
if (metatileId < 512)
- sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8);
+ BuyMenuDrawMapPartialMetatile(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8);
else
- sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8);
+ BuyMenuDrawMapPartialMetatile(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8);
}
if (y == 0 && x != 0 && x != 6)
- sub_80B32EC(gBGTilemapBuffers[1], x * 2, 64);
+ BuyMenuDrawTextboxBG_Old(gBGTilemapBuffers[1], x * 2, 64);
}
}
}
-void BuyMenuDrawMapGraphics(void)
+static void Shop_DrawViewport(void)
{
- sub_80F9020();
- sub_80B356C();
- sub_80B368C();
- sub_80B3420();
+ ClearBGTilemapBuffers();
+ Shop_LoadViewportObjects();
+ Shop_AnimViewportObjects();
+ Shop_DrawViewportTiles();
}
-void sub_80B356C(void)
+static void Shop_LoadViewportObjects(void)
{
s16 facingX;
s16 facingY;
@@ -444,7 +451,7 @@ void sub_80B356C(void)
GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
playerHeight = PlayerGetZCoord();
for (y = 0; y < 16; y++)
- gUnknown_020386A4[y][MAP_OBJ_ID] = 16;
+ gMartViewportObjects[y][MAP_OBJ_ID] = 16;
for (y = 0; y < 5; y++)
{
for (x = 0; x < 7; x++)
@@ -453,43 +460,43 @@ void sub_80B356C(void)
if (mapObjId != 16)
{
- gUnknown_020386A4[r8][MAP_OBJ_ID] = mapObjId;
- gUnknown_020386A4[r8][X_COORD] = x;
- gUnknown_020386A4[r8][Y_COORD] = y;
+ gMartViewportObjects[r8][MAP_OBJ_ID] = mapObjId;
+ gMartViewportObjects[r8][X_COORD] = x;
+ gMartViewportObjects[r8][Y_COORD] = y;
if (gMapObjects[mapObjId].mapobj_unk_18 == 1)
- gUnknown_020386A4[r8][ANIM_NUM] = 0;
+ gMartViewportObjects[r8][ANIM_NUM] = 0;
if (gMapObjects[mapObjId].mapobj_unk_18 == 2)
- gUnknown_020386A4[r8][ANIM_NUM] = 1;
+ gMartViewportObjects[r8][ANIM_NUM] = 1;
if (gMapObjects[mapObjId].mapobj_unk_18 == 3)
- gUnknown_020386A4[r8][ANIM_NUM] = 2;
+ gMartViewportObjects[r8][ANIM_NUM] = 2;
if (gMapObjects[mapObjId].mapobj_unk_18 == 4)
- gUnknown_020386A4[r8][ANIM_NUM] = 3;
+ gMartViewportObjects[r8][ANIM_NUM] = 3;
r8++;
}
}
}
}
-void sub_80B368C(void)
+static void Shop_AnimViewportObjects(void)
{
u8 i;
for (i = 0; i < 16; i++) // max objects?
{
- if (gUnknown_020386A4[i][MAP_OBJ_ID] == 16)
+ if (gMartViewportObjects[i][MAP_OBJ_ID] == 16)
continue;
StartSpriteAnim(&gSprites[AddPseudoFieldObject(
- gMapObjects[gUnknown_020386A4[i][MAP_OBJ_ID]].graphicsId,
+ gMapObjects[gMartViewportObjects[i][MAP_OBJ_ID]].graphicsId,
SpriteCallbackDummy,
- (u16)gUnknown_020386A4[i][X_COORD] * 16 + 8,
- (u16)gUnknown_020386A4[i][Y_COORD] * 16 + 32,
+ (u16)gMartViewportObjects[i][X_COORD] * 16 + 8,
+ (u16)gMartViewportObjects[i][Y_COORD] * 16 + 32,
2)],
- gUnknown_020386A4[i][ANIM_NUM]);
+ gMartViewportObjects[i][ANIM_NUM]);
}
}
-void sub_80B3720(void)
+static void BuyMenuDrawTextboxBG(void)
{
s16 i;
@@ -500,14 +507,15 @@ void sub_80B3720(void)
}
}
-void sub_80B3764(int var1, int var2)
+static void Shop_InitMenus(int firstItemId, int lastItemId)
{
- sub_80B3720();
- sub_80B39D0(var1, var2, 0);
+ BuyMenuDrawTextboxBG();
+ Shop_DisplayPriceInList(firstItemId, lastItemId, 0);
InitMenu(0, 0xE, 0x2, 0x8, gMartInfo.cursor, 0xF);
}
-void sub_80B379C(void)
+// after printing the item quantity and price, restore the textbox tiles before the Yes/No prompt.
+static void BuyMenuDrawTextboxBG_Restore(void)
{
u16 i, j;
@@ -516,27 +524,29 @@ void sub_80B379C(void)
gBGTilemapBuffers[1][32 * (i + 12) + j] = ewram18300[32 * i + j] + 0xC3E0;
}
-void sub_80B37EC(void)
+static void Shop_PrintItemDesc(void)
{
- sub_80B3A70();
+ Shop_PrintItemDescText();
}
-void sub_80B37F8(u8 taskId)
+#define tItemCount data[1]
+
+static void Shop_DisplayPriceInCheckoutWindow(u8 taskId)
{
u16 itemListIndex = gMartInfo.choicesAbove + gMartInfo.cursor;
u16 itemId = gMartInfo.itemList[itemListIndex];
u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1));
- PrintMoneyAmount(gTasks[taskId].data[1] * price, 6, 6, 11);
+ PrintMoneyAmount(gTasks[taskId].tItemCount * price, 6, 6, 11);
gStringVar1[0] = EXT_CTRL_CODE_BEGIN;
gStringVar1[1] = 0x14;
gStringVar1[2] = 0x6;
- ConvertIntToDecimalStringN(&gStringVar1[3], gTasks[taskId].data[1], 1, 2);
+ ConvertIntToDecimalStringN(&gStringVar1[3], gTasks[taskId].tItemCount, 1, 2);
Menu_PrintText(gOtherText_xString1, 1, 11);
sub_80A3FA0(gBGTilemapBuffers[1], 1, 11, 12, 2, 0xC3E1);
}
-void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode)
+static void Shop_DisplayNormalPriceInList(u16 itemId, u8 var2, bool32 hasControlCode)
{
u8 *stringPtr = gStringVar1;
@@ -560,7 +570,7 @@ void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode)
Menu_PrintTextPixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 1);
}
-void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode)
+static void Shop_DisplayDecorationPriceInList(u16 itemId, u8 var2, bool32 hasControlCode)
{
u8 *stringPtr = gStringVar1;
@@ -579,9 +589,12 @@ void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode)
if (hasControlCode != FALSE)
stringPtr = &gStringVar1[3];
+ // some names are the maximum string length for a shop item. Because there is no room for
+ // a 6 character price (including the currency), a sprite is instead used for anything that
+ // is the maximum decoration price in order to fit it on screen.
if (gDecorations[itemId].price == 10000)
{
- sub_80B7B34(0x19, var2, hasControlCode); // huh???
+ Draw10000Sprite(0x19, var2, hasControlCode);
}
else
{
@@ -590,16 +603,16 @@ void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode)
}
}
-void sub_80B39D0(int var1, int var2, bool32 hasControlCode)
+static void Shop_DisplayPriceInList(int firstItemId, int lastItemId, bool32 hasControlCode)
{
u8 i;
- for (i = var1; i <= var2 && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++)
+ for (i = firstItemId; i <= lastItemId && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++)
{
if (gMartInfo.martType == MART_TYPE_0)
- sub_80B389C(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
+ Shop_DisplayNormalPriceInList(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
else
- sub_80B3930(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
+ Shop_DisplayDecorationPriceInList(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
}
if (i != 8 && gMartInfo.choicesAbove + i == gMartInfo.itemCount)
@@ -609,7 +622,7 @@ void sub_80B39D0(int var1, int var2, bool32 hasControlCode)
}
}
-void sub_80B3A70(void)
+static void Shop_PrintItemDescText(void)
{
if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount)
{
@@ -628,121 +641,122 @@ void sub_80B3A70(void)
}
}
-void sub_80B3AEC(u8 taskId)
+static void Shop_DoPremierBallCheck(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // huh???
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
PlaySE(SE_SELECT);
- if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].data[1] >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE)
- DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, sub_80B4378, 0xC3E1);
+ if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].tItemCount >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE)
+ DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, Task_ReturnToBuyMenu, 0xC3E1);
else
- sub_80B4378(taskId);
+ Task_ReturnToBuyMenu(taskId);
}
}
-void sub_80B3B80(u8 taskId)
+static void Shop_DoItemTransaction(u8 taskId)
{
- IncrementGameStat(0x26);
+ IncrementGameStat(GAME_STAT_SHOPPED);
RemoveMoney(&gSaveBlock1.money, gMartTotalCost);
PlaySE(SE_REGI);
UpdateMoneyWindow(gSaveBlock1.money, 0, 0);
- gTasks[taskId].func = sub_80B3AEC;
+ gTasks[taskId].func = Shop_DoPremierBallCheck;
}
-void sub_80B3BD0(u8 taskId)
+static void Shop_DoPricePrintAndReturnToBuyMenu(u8 taskId)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // same thing as above?
- sub_80B4378(taskId);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
+ Task_ReturnToBuyMenu(taskId);
}
-void sub_80B3BF4(u8 taskId)
+static void Task_DoItemPurchase(u8 taskId)
{
Menu_EraseWindowRect(0x7, 0x8, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0);
- sub_80B379C();
- sub_80B3420();
+ BuyMenuDrawTextboxBG_Restore();
+ Shop_DrawViewportTiles();
if (IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
if (gMartInfo.martType == MART_TYPE_0)
{
- if (AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].data[1]))
+ if (AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].tItemCount))
{
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, sub_80B3B80, 0xC3E1);
- sub_80B4470(taskId);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, Shop_DoItemTransaction, 0xC3E1);
+ Task_UpdatePurchaseHistory(taskId);
}
else
- DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
else // a normal mart is only type 0, so types 1 and 2 are decoration marts.
{
if (IsThereStorageSpaceForDecoration(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]))
{
if (gMartInfo.martType == MART_TYPE_1)
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, sub_80B3B80, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, Shop_DoItemTransaction, 0xC3E1);
else
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, sub_80B3B80, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, Shop_DoItemTransaction, 0xC3E1);
}
else
{
StringExpandPlaceholders(gStringVar4, gOtherText_SpaceForIsFull);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
}
}
else
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
-void sub_80B3D38(u8 taskId)
+static void Shop_DoYesNoPurchase(u8 taskId)
{
DisplayYesNoMenu(7, 8, 1);
sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0xC3E1);
- DoYesNoFuncWithChoice(taskId, gUnknown_083CC708);
+ DoYesNoFuncWithChoice(taskId, sShopPurchaseYesNoFuncs);
}
-void sub_80B3D7C(u8 taskId)
+static void Task_CancelItemPurchase(u8 taskId)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
Menu_EraseWindowRect(0x7, 0x8, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x8, 0x9, 0x4, 0x4, 0);
- sub_80B4378(taskId);
+ Task_ReturnToBuyMenu(taskId);
}
-void sub_80B3DC8(u8 taskId)
+static void Shop_PrintPrice(u8 taskId)
{
- if (sub_80A52C4(taskId, gMartInfo.curItemCount) == TRUE)
- sub_80B37F8(taskId);
+ if (SellMenu_QuantityRoller(taskId, gMartInfo.curItemCount) == TRUE)
+ Shop_DisplayPriceInCheckoutWindow(taskId);
if (gMain.newKeys & A_BUTTON)
{
- gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].data[1]; // set total cost of your purchase.
+ gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].tItemCount; // set total cost of your purchase.
Menu_EraseWindowRect(0, 0xA, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
- sub_80B379C();
- sub_80B3420();
+ BuyMenuDrawTextboxBG_Restore();
+ Shop_DrawViewportTiles();
CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, gTasks[taskId].data[1], 0, 0x2);
+ ConvertIntToDecimalStringN(gStringVar2, gTasks[taskId].tItemCount, 0, 0x2);
ConvertIntToDecimalStringN(gStringVar3, gMartTotalCost, 0, 0x8);
StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoYesNoPurchase, 0xC3E1);
}
else if (gMain.newKeys & B_BUTTON)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0);
- sub_80B4378(taskId);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
+ Task_ReturnToBuyMenu(taskId);
}
}
-void sub_80B3EFC(u8 taskId)
+// set the item count in the mart info to the maximum allowed by the player's budget.
+static void Shop_UpdateCurItemCountToMax(u8 taskId)
{
u16 var;
- gTasks[taskId].data[1] = 1;
+ gTasks[taskId].tItemCount = 1;
Menu_DrawStdWindowFrame(0, 0xA, 0xD, 0xD);
- sub_80B37F8(taskId);
+ Shop_DisplayPriceInCheckoutWindow(taskId);
var = gSaveBlock1.money / (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1));
if (var > 99)
@@ -750,11 +764,11 @@ void sub_80B3EFC(u8 taskId)
else
gMartInfo.curItemCount = var;
- gTasks[taskId].func = sub_80B3DC8;
+ gTasks[taskId].func = Shop_PrintPrice;
}
#ifdef NONMATCHING
-void sub_80B3F88(void)
+static void Shop_MoveItemListUp(void)
{
u16 *r1;
u16 *r2;
@@ -796,7 +810,7 @@ void sub_80B3F88(void)
}
#else
__attribute__((naked))
-void sub_80B3F88(void)
+static void Shop_MoveItemListUp(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -891,7 +905,7 @@ _080B4038: .4byte 0xfffffc40\n\
#endif
#ifdef NONMATCHING
-void sub_80B403C(void)
+static void Shop_MoveItemListDown(void)
{
u16 *r1;
u16 *r2;
@@ -935,7 +949,7 @@ void sub_80B403C(void)
}
#else
__attribute__((naked))
-void sub_80B403C(void)
+static void Shop_MoveItemListDown(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -1028,7 +1042,7 @@ _080B40E4: .4byte 0x800000f0\n\
}
#endif
-void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
+static void Shop_DoCursorAction(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1041,16 +1055,16 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
PlaySE(SE_SELECT);
gMartInfo.choicesAbove--; // since cursor is at the top and there are choices above the top, scroll the menu up by updating choicesAbove.
- sub_80B3F88();
- sub_80B39D0(0, 0, 0);
- sub_80B3A70();
- sub_80B32A4();
+ Shop_MoveItemListUp();
+ Shop_DisplayPriceInList(0, 0, 0);
+ Shop_PrintItemDescText();
+ Shop_TryDrawVerticalScrollIndicators();
}
else // if the cursor is not 0, choicesAbove cannot be updated yet since the cursor is at the top of the menu, so update cursor.
{
PlaySE(SE_SELECT);
gMartInfo.cursor = Menu_MoveCursor(-1); // move cursor up
- sub_80B3A70();
+ Shop_PrintItemDescText();
}
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) // only down can be pressed
@@ -1062,16 +1076,16 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
PlaySE(SE_SELECT);
gMartInfo.choicesAbove++;
- sub_80B403C();
- sub_80B39D0(7, 7, 0);
- sub_80B3A70();
- sub_80B32A4();
+ Shop_MoveItemListDown();
+ Shop_DisplayPriceInList(7, 7, 0);
+ Shop_PrintItemDescText();
+ Shop_TryDrawVerticalScrollIndicators();
}
else if (gMartInfo.cursor != gMartInfo.itemCount)
{
PlaySE(SE_SELECT);
gMartInfo.cursor = Menu_MoveCursor(1);
- sub_80B3A70();
+ Shop_PrintItemDescText();
}
}
else if (gMain.newKeys & A_BUTTON)
@@ -1080,10 +1094,10 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) // did you not hit CANCEL?
{
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1);
- sub_80F979C(1, 1);
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 1);
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 1);
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0xC, 0xD, 0x13);
@@ -1092,13 +1106,13 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); // set 1x price
if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); // tail merge
}
else // _080B42BA
{
CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_HowManyYouWant);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3EFC, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_UpdateCurItemCountToMax, 0xC3E1);
}
}
else // _080B428C
@@ -1107,7 +1121,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); // tail merge
}
else
{
@@ -1122,43 +1136,43 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
{
StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe3);
}
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoYesNoPurchase, 0xC3E1);
}
}
}
else
- sub_80B43F0(taskId);
+ Task_ExitBuyMenu(taskId);
}
else if (gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu
{
PlaySE(SE_SELECT);
- sub_80B43F0(taskId);
+ Task_ExitBuyMenu(taskId);
}
}
}
-void sub_80B4378(u8 taskId)
+static void Task_ReturnToBuyMenu(u8 taskId)
{
Menu_EraseWindowRect(0, 0xE, 0x1D, 0x13);
Menu_EraseWindowRect(0, 0xA, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
- sub_80B3420();
- sub_80B3764(6, 7);
- sub_80B37EC();
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
- sub_80B32A4();
- gTasks[taskId].func = sub_80B40E8;
+ Shop_DrawViewportTiles();
+ Shop_InitMenus(6, 7);
+ Shop_PrintItemDesc();
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
+ Shop_TryDrawVerticalScrollIndicators();
+ gTasks[taskId].func = Shop_DoCursorAction;
}
-void sub_80B43F0(u8 taskId)
+static void Task_ExitBuyMenu(u8 taskId)
{
- gFieldCallback = sub_80B3050;
+ gFieldCallback = Shop_FadeReturnToMartMenu;
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_ExitBuyMenu;
+ gTasks[taskId].func = Task_ExitBuyMenuDoFade;
}
-void Task_ExitBuyMenu(u8 taskId)
+static void Task_ExitBuyMenuDoFade(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1169,38 +1183,41 @@ void Task_ExitBuyMenu(u8 taskId)
}
}
-void sub_80B4470(u8 taskId)
+// Task_UpdatePurchaseHistory
+static void Task_UpdatePurchaseHistory(u8 taskId)
{
u16 i;
for (i = 0; i < 3; i++)
{
- if (gUnknown_02038724[i].itemId == gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]
- && gUnknown_02038724[i].quantity != 0)
+ if (gMartPurchaseHistory[i].itemId == gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]
+ && gMartPurchaseHistory[i].quantity != 0)
{
- if (gUnknown_02038724[i].quantity + gTasks[taskId].data[1] > 255)
- gUnknown_02038724[i].quantity = 255;
+ if (gMartPurchaseHistory[i].quantity + gTasks[taskId].tItemCount > 255)
+ gMartPurchaseHistory[i].quantity = 255;
else
- gUnknown_02038724[i].quantity += gTasks[taskId].data[1];
+ gMartPurchaseHistory[i].quantity += gTasks[taskId].tItemCount;
return;
}
}
- if (gUnknown_02038730 < 3)
+ if (gMartPurchaseHistoryId < 3)
{
- gUnknown_02038724[gUnknown_02038730].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor];
- gUnknown_02038724[gUnknown_02038730].quantity = gTasks[taskId].data[1];
- gUnknown_02038730++;
+ gMartPurchaseHistory[gMartPurchaseHistoryId].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor];
+ gMartPurchaseHistory[gMartPurchaseHistoryId].quantity = gTasks[taskId].tItemCount;
+ gMartPurchaseHistoryId++;
}
}
-void ClearItemPurchases(void)
+#undef tItemCount
+
+static void ClearItemPurchases(void)
{
- gUnknown_02038730 = 0;
- ClearItemSlots(gUnknown_02038724, 3);
+ gMartPurchaseHistoryId = 0;
+ ClearItemSlots(gMartPurchaseHistory, 3);
}
-void CreatePokemartMenu(u16 *itemList)
+void Shop_CreatePokemartMenu(u16 *itemList)
{
CreateShopMenu(MART_TYPE_0);
SetShopItemsForSale(itemList);
@@ -1208,141 +1225,16 @@ void CreatePokemartMenu(u16 *itemList)
SetShopMenuCallback(EnableBothScriptContexts);
}
-void CreateDecorationShop1Menu(u16 *itemList)
+void Shop_CreateDecorationShop1Menu(u16 *itemList)
{
CreateShopMenu(MART_TYPE_1);
SetShopItemsForSale(itemList);
SetShopMenuCallback(EnableBothScriptContexts);
}
-void CreateDecorationShop2Menu(u16 *itemList)
+void Shop_CreateDecorationShop2Menu(u16 *itemList)
{
CreateShopMenu(MART_TYPE_2);
SetShopItemsForSale(itemList);
SetShopMenuCallback(EnableBothScriptContexts);
}
-
-void sub_80B45B4(u8 taskId, const s16 *list, u16 c)
-{
- s16 r5 = gTasks[taskId].data[4] - 1;
- s16 r3 = gTasks[taskId].data[5] - 1;
- s16 r4 = gTasks[taskId].data[1];
- s16 y;
- s16 x;
-
- if (gTasks[taskId].data[2] == 0)
- {
- for (y = 0; y < 3; y++)
- {
- for (x = 0; x < 3; x++)
- {
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
-
- if (list[r4] == metatileId)
- {
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
- else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
- }
- }
- }
- }
- else
- {
- for (y = 0; y < 3; y++)
- {
- for (x = 0; x < 3; x++)
- {
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
-
- if (list[2 - r4] == metatileId)
- {
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
- else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
- }
- }
- }
- }
-}
-
-static const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280};
-static const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281};
-static const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288};
-static const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289};
-static const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4};
-static const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5};
-static const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC};
-
-void sub_80B4710(u8 taskId)
-{
- s16 *data = gTasks[taskId].data;
-
- data[3] = 1;
-
- switch (data[0])
- {
- case 0:
- sub_80B45B4(taskId, gUnknown_083CC714, 0);
- break;
- case 1:
- sub_80B45B4(taskId, gUnknown_083CC71A, 0);
- break;
- case 2:
- sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
- break;
- case 3:
- sub_80B45B4(taskId, gUnknown_083CC726, 0);
- break;
- case 4:
- sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
- break;
- case 5:
- sub_80B45B4(taskId, gUnknown_083CC732, 0);
- break;
- case 6:
- sub_80B45B4(taskId, gUnknown_083CC738, 0);
- break;
- }
-
- data[0] = (data[0] + 1) & 7;
- if (!data[0])
- {
- DrawWholeMapView();
- data[1] = (data[1] + 1) % 3;
- data[3] = 0;
- }
-}
-
-u8 sub_80B47D8(u16 var)
-{
- u8 taskId = CreateTask(sub_80B4710, 0);
- s16 *data = gTasks[taskId].data;
-
- PlayerGetDestCoords(&data[4], &data[5]);
- data[0] = 0;
- data[1] = 0;
- data[2] = var;
- sub_80B4710(taskId);
- return taskId;
-}
-
-void sub_80B4824(u8 var)
-{
- gUnknown_02038731 = sub_80B47D8(var);
-}
-
-void sub_80B483C(void)
-{
- DestroyTask(gUnknown_02038731);
-}
-
-bool8 sub_80B4850(void)
-{
- if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
- return FALSE;
- else
- return TRUE;
-}
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 9ff3a037c..21bf29e91 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -3901,26 +3901,9 @@ static void sub_8106404(void)
}
static void sub_8106448(void) {
- u32 offsetRead, offsetWrite;
- u32 size;
-
LZDecompressWram(gSlotMachine_Gfx, eSlotMachineGfxBuffer);
- offsetRead = (u32)eSlotMachineGfxBuffer;
- offsetWrite = BG_VRAM;
- size = SLOTMACHINE_GFX_TILES * 32;
- while (TRUE)
- {
- DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000);
- offsetRead += 0x1000;
- offsetWrite += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaCopy16(3, offsetRead, (void *) (offsetWrite), size);
- break;
- }
- }
+ DmaCopyLarge16(3, eSlotMachineGfxBuffer, BG_VRAM, SLOTMACHINE_GFX_TILES * 32, 0x1000);
LoadPalette(gUnknown_08E95A18, 0, 160);
LoadPalette(gPalette_83EDE24, 208, 32);
diff --git a/src/field/start_menu.c b/src/field/start_menu.c
index 87597eb6a..381c19bb7 100644
--- a/src/field/start_menu.c
+++ b/src/field/start_menu.c
@@ -54,7 +54,7 @@ extern u16 gSpecialVar_Result;
extern u8 gUnknown_03004860;
-u8 (*gCallback_03004AE8)(void);
+u8 (*gMenuCallback)(void);
EWRAM_DATA static u8 sStartMenuCursorPos = 0;
EWRAM_DATA static u8 sNumStartMenuActions = 0;
@@ -283,11 +283,11 @@ void sub_80712B4(u8 taskId)
switch (task->data[0])
{
case 0:
- gCallback_03004AE8 = StartMenu_InputProcessCallback;
+ gMenuCallback = StartMenu_InputProcessCallback;
task->data[0]++;
break;
case 1:
- if (gCallback_03004AE8() == 1)
+ if (gMenuCallback() == 1)
DestroyTask(taskId);
break;
}
@@ -325,11 +325,11 @@ static u8 StartMenu_InputProcessCallback(void)
if (GetNationalPokedexCount(0) == 0)
return 0;
}
- gCallback_03004AE8 = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func;
- if (gCallback_03004AE8 != StartMenu_SaveCallback &&
- gCallback_03004AE8 != StartMenu_ExitCallback &&
- gCallback_03004AE8 != StartMenu_RetireCallback)
- fade_screen(1, 0);
+ gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func;
+ if (gMenuCallback != StartMenu_SaveCallback &&
+ gMenuCallback != StartMenu_ExitCallback &&
+ gMenuCallback != StartMenu_RetireCallback)
+ FadeScreen(1, 0);
return 0;
}
if (gMain.newKeys & (START_BUTTON | B_BUTTON))
@@ -345,7 +345,7 @@ static u8 StartMenu_PokedexCallback(void)
{
if (!gPaletteFade.active)
{
- IncrementGameStat(0x29);
+ IncrementGameStat(GAME_STAT_CHECKED_POKEDEX);
PlayRainSoundEffect();
SetMainCallback2(CB2_InitPokedex);
return 1;
@@ -405,7 +405,7 @@ static u8 StartMenu_PlayerCallback(void)
static u8 StartMenu_SaveCallback(void)
{
Menu_DestroyCursor();
- gCallback_03004AE8 = SaveCallback1;
+ gMenuCallback = SaveCallback1;
return 0;
}
@@ -461,7 +461,7 @@ enum
static u8 SaveCallback1(void)
{
sub_807160C();
- gCallback_03004AE8 = SaveCallback2;
+ gMenuCallback = SaveCallback2;
return FALSE;
}
@@ -475,7 +475,7 @@ static u8 SaveCallback2(void)
//Go back to start menu
Menu_EraseScreen();
InitStartMenu();
- gCallback_03004AE8 = StartMenu_InputProcessCallback;
+ gMenuCallback = StartMenu_InputProcessCallback;
return FALSE;
case SAVE_SUCCESS:
case SAVE_ERROR:
@@ -666,7 +666,7 @@ static u8 SaveDialogCB_DoSave(void)
{
u8 saveStatus;
- IncrementGameStat(0);
+ IncrementGameStat(GAME_STAT_SAVED_GAME);
if (gDifferentSaveFile == TRUE)
{
saveStatus = Save_WriteData(SAVE_OVERWRITE_DIFFERENT_FILE);
@@ -744,29 +744,12 @@ static bool32 sub_80719FC(u8 *step)
switch (*step)
{
case 0:
- {
- u8 *addr;
- u32 size;
-
REG_DISPCNT = 0;
SetVBlankCallback(NULL);
ScanlineEffect_Stop();
DmaClear16(3, PLTT, PLTT_SIZE);
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
break;
- }
case 1:
ResetSpriteData();
ResetTasks();
diff --git a/src/field/trader.c b/src/field/trader.c
index b4732ab15..64bd708f6 100644
--- a/src/field/trader.c
+++ b/src/field/trader.c
@@ -217,8 +217,8 @@ void sub_8109D04(u8 taskId)
{
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 29, 19);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
sub_80F9520(gUnknown_020388F7, 8);
BuyMenuFreeMemory();
if (sub_80FEFA4() == TRUE)
diff --git a/src/field/tv.c b/src/field/tv.c
index e1eade130..8bd36bb9c 100644
--- a/src/field/tv.c
+++ b/src/field/tv.c
@@ -47,8 +47,6 @@ struct UnkTvStruct
s8 var0;
};
-extern u8 gUnknown_0300430A[11];
-
struct OutbreakPokemon
{
/*0x00*/ u16 species;
@@ -64,7 +62,7 @@ struct TVSaleItem {
extern u8 gUnknown_02038694;
-extern struct TVSaleItem gUnknown_02038724[3];
+extern struct TVSaleItem gMartPurchaseHistory[3];
struct UnkTvStruct gUnknown_03005D38;
@@ -1032,7 +1030,7 @@ void sub_80BE3BC(void)
if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_SMART_SHOPPER) != 1)
{
sub_80BF20C();
- if (gUnknown_02038724[0].item_amount >= 20)
+ if (gMartPurchaseHistory[0].item_amount >= 20)
{
struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].smartshopperShow;
@@ -1041,8 +1039,8 @@ void sub_80BE3BC(void)
smartShopper->shopLocation = gMapHeader.regionMapSectionId;
for (i=0; i<3; i++)
{
- smartShopper->itemIds[i] = gUnknown_02038724[i].item_id;
- smartShopper->itemAmounts[i] = gUnknown_02038724[i].item_amount;
+ smartShopper->itemIds[i] = gMartPurchaseHistory[i].item_id;
+ smartShopper->itemAmounts[i] = gMartPurchaseHistory[i].item_amount;
}
smartShopper->priceReduced = GetPriceReduction(1);
StringCopy(smartShopper->playerName, gSaveBlock2.playerName);
@@ -1646,14 +1644,14 @@ void sub_80BF20C(void)
{
for (j = i + 1; j < 3; j++)
{
- if (gUnknown_02038724[i].item_amount < gUnknown_02038724[j].item_amount)
+ if (gMartPurchaseHistory[i].item_amount < gMartPurchaseHistory[j].item_amount)
{
- tmpId = gUnknown_02038724[i].item_id;
- tmpAmount = gUnknown_02038724[i].item_amount;
- gUnknown_02038724[i].item_id = gUnknown_02038724[j].item_id;
- gUnknown_02038724[i].item_amount = gUnknown_02038724[j].item_amount;
- gUnknown_02038724[j].item_id = tmpId;
- gUnknown_02038724[j].item_amount = tmpAmount;
+ tmpId = gMartPurchaseHistory[i].item_id;
+ tmpAmount = gMartPurchaseHistory[i].item_amount;
+ gMartPurchaseHistory[i].item_id = gMartPurchaseHistory[j].item_id;
+ gMartPurchaseHistory[i].item_amount = gMartPurchaseHistory[j].item_amount;
+ gMartPurchaseHistory[j].item_id = tmpId;
+ gMartPurchaseHistory[j].item_amount = tmpAmount;
}
}
}
diff --git a/src/field/wallclock.c b/src/field/wallclock.c
index aaa7f9ae8..1f743a61a 100644
--- a/src/field/wallclock.c
+++ b/src/field/wallclock.c
@@ -190,10 +190,7 @@ static void WallClockVblankCallback(void)
static void LoadWallClockGraphics(void)
{
- u8 *addr;
- u32 size;
-
- SetVBlankCallback(0);
+ SetVBlankCallback(NULL);
REG_DISPCNT = 0;
REG_BG3CNT = 0;
REG_BG2CNT = 0;
@@ -208,19 +205,7 @@ static void LoadWallClockGraphics(void)
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c
index 4bf83cad8..79542422e 100644
--- a/src/field/wild_encounter.c
+++ b/src/field/wild_encounter.c
@@ -4254,7 +4254,7 @@ void FishingWildEncounter(u8 rod)
gWildMonHeaders[GetCurrentMapWildMonHeader()].fishingMonsInfo,
rod);
}
- IncrementGameStat(12);
+ IncrementGameStat(GAME_STAT_FISHING_CAPTURES);
sub_80BEA50(species);
BattleSetup_StartWildBattle();
}
diff --git a/src/libs/libisagbprn.c b/src/libs/libisagbprn.c
index e0e979e95..e0e979e95 100755..100644
--- a/src/libs/libisagbprn.c
+++ b/src/libs/libisagbprn.c
diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c
index 149dda45f..dcdc54434 100644
--- a/src/pokemon/mon_markings.c
+++ b/src/pokemon/mon_markings.c
@@ -613,6 +613,5 @@ struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, const u16 *palette, u16
void sub_80F7A10(u8 markings, void *dest)
{
- const void *src = gUnknown_083E4A14 + markings * 0x80;
- DmaCopy16(3, src, dest, 0x80);
+ DmaCopy16Defvars(3, gUnknown_083E4A14 + markings * 0x80, dest, 0x80);
}
diff --git a/src/pokemon/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c
index 194636e4d..2f2ce2f8f 100644
--- a/src/pokemon/pokeblock_feed.c
+++ b/src/pokemon/pokeblock_feed.c
@@ -511,7 +511,7 @@ static bool8 TransitionToPokeblockFeedScene(void)
switch (gMain.state)
{
case 0:
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80F9368();
sub_8147B04();
gMain.state++;
diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c
index 4fb6a4920..cbd816206 100644
--- a/src/pokemon/pokedex.c
+++ b/src/pokemon/pokedex.c
@@ -1394,29 +1394,12 @@ void CB2_InitPokedex(void)
{
case 0:
default:
- {
- u8 *addr;
- u32 size;
-
- SetVBlankCallback(NULL);
- sub_8091060(0);
- addr = (u8 *)VRAM;
- size = VRAM_SIZE;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
- DmaClear32(3, OAM, OAM_SIZE);
- DmaClear16(3, PLTT, PLTT_SIZE);
- gMain.state = 1;
- }
+ SetVBlankCallback(NULL);
+ sub_8091060(0);
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), VRAM_SIZE, 0x1000);
+ DmaClear32(3, OAM, OAM_SIZE);
+ DmaClear16(3, PLTT, PLTT_SIZE);
+ gMain.state = 1;
break;
case 1:
ScanlineEffect_Stop();
@@ -4121,26 +4104,35 @@ bool8 CompletedHoennPokedex(void)
return TRUE;
}
-u16 sub_8090FF4(void)
+bool16 CompletedNationalPokedex(void)
{
u16 i;
+ // BUG: This function indexes pokemon checks by 0, but adds
+ // 1 before passing to GetSetPokedexFlag. Normally, this is
+ // fine, because GetSetPokedexFlag subtracts by 1 to get the
+ // array index value, but since the array is 0 indexed
+ // starting with Bulbasaur, values passed actually means that
+ // dex entries 152 (Chikorita) and 252 (Treecko) are skipped.
+ // Because an earlier Hoenn Dex check prevented Treecko from
+ // being skippable, it means that Chikorita is not required
+ // to obtain the National Diploma. This was fixed in Emerald.
for (i = 0; i < 150; i++)
{
if (GetSetPokedexFlag(i + 1, 1) == 0)
- return 0;
+ return FALSE;
}
for (i = 152; i < 250; i++)
{
if (GetSetPokedexFlag(i + 1, 1) == 0)
- return 0;
+ return FALSE;
}
for (i = 252; i < 384; i++)
{
if (GetSetPokedexFlag(i + 1, 1) == 0)
- return 0;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
static void sub_8091060(u16 a)
diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c
index 221de831a..9346031a6 100644
--- a/src/pokemon/pokemon_3.c
+++ b/src/pokemon/pokemon_3.c
@@ -1293,15 +1293,15 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon)
void sub_8040B8C(void)
{
- gLastUsedAbility = BATTLE_STRUCT->unk160C0;;
+ gLastUsedAbility = gBattleStruct->unk160C0;;
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 4;
- gBattleTextBuff1[2] = BATTLE_STRUCT->unk16054;
+ gBattleTextBuff1[2] = gBattleStruct->unk16054;
gBattleTextBuff1[4] = EOS;
- if (!GetBankSide(BATTLE_STRUCT->unk16054))
- gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[BATTLE_STRUCT->unk16054]);
+ if (!GetBankSide(gBattleStruct->unk16054))
+ gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[gBattleStruct->unk16054]);
else
- gBattleTextBuff1[3] = gBattlePartyID[BATTLE_STRUCT->unk16054];
+ gBattleTextBuff1[3] = gBattlePartyID[gBattleStruct->unk16054];
gBattleTextBuff2[0] = 0xFD;
gBattleTextBuff2[1] = 4;
gBattleTextBuff2[2] = gBankInMenu;
diff --git a/src/pokemon/pokemon_item_effect.c b/src/pokemon/pokemon_item_effect.c
index 66f2ff697..4ebece3b3 100644
--- a/src/pokemon/pokemon_item_effect.c
+++ b/src/pokemon/pokemon_item_effect.c
@@ -1,7 +1,32 @@
#include "global.h"
+#include "constants/battle_constants.h"
+#include "constants/hold_effects.h"
+#include "constants/items.h"
+#include "constants/species.h"
+#include "battle.h"
+#include "evolution_scene.h"
+#include "ewram.h"
+#include "item.h"
+#include "main.h"
+#include "overworld.h"
#include "pokemon.h"
+#include "pokemon_item_effect.h"
+#include "rom_8077ABC.h"
+#include "rom_8094928.h"
+#include "util.h"
-const u8 gUnknown_082082F2[] = {
+extern s32 gBattleMoveDamage;
+extern u8 gAbsentBankFlags;
+extern u8 gBankInMenu;
+extern u8 gNoOfAllBanks;
+extern u16 gBattlePartyID[];
+extern u8 gActiveBank;
+extern u8 gStringBank;
+extern struct BattlePokemon gBattleMons[];
+extern struct BattleEnigmaBerry gEnigmaBerries[];
+
+static const u8 sGetMonDataEVConstants[] =
+{
MON_DATA_HP_EV,
MON_DATA_ATK_EV,
MON_DATA_DEF_EV,
@@ -9,3 +34,517 @@ const u8 gUnknown_082082F2[] = {
MON_DATA_SPDEF_EV,
MON_DATA_SPATK_EV
};
+
+extern u8 gUnknown_08208238[];
+extern u8 gUnknown_0820823C[];
+extern u8 gUnknown_08208240[];
+
+bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
+
+bool8 ExecuteTableBasedItemEffect_(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex)
+{
+ return PokemonUseItemEffects(pkmn, item, partyIndex, moveIndex, 0);
+}
+
+bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
+{
+ u32 data;
+ s32 friendship;
+ s32 cmdIndex;
+ bool8 retVal = TRUE;
+ const u8 *itemEffect;
+ u8 sp24 = 6;
+ u32 sp28;
+ s8 sp2C = 0;
+ u8 holdEffect;
+ u8 sp34 = 4;
+ u16 heldItem;
+ u8 r10;
+ u32 r4;
+
+ heldItem = GetMonData(pkmn, MON_DATA_HELD_ITEM, NULL);
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ holdEffect = gEnigmaBerries[gBankInMenu].holdEffect;
+ else
+ holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+ }
+
+ gStringBank = gBankInMenu;
+ if (gMain.inBattle)
+ {
+ gActiveBank = gBankInMenu;
+ cmdIndex = (GetBankSide(gActiveBank) != 0);
+ while (cmdIndex < gNoOfAllBanks)
+ {
+ if (gBattlePartyID[cmdIndex] == partyIndex)
+ {
+ sp34 = cmdIndex;
+ break;
+ }
+ cmdIndex += 2;
+ }
+ }
+ else
+ {
+ gActiveBank = 0;
+ sp34 = 4;
+ }
+
+ if (!IS_POKEMON_ITEM(item))
+ return TRUE;
+ if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY)
+ return TRUE;
+
+ if (item == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ itemEffect = gEnigmaBerries[gActiveBank].itemEffect;
+ else
+ itemEffect = gSaveBlock1.enigmaBerry.itemEffect;
+ }
+ else
+ {
+ itemEffect = gItemEffectTable[item - 13];
+ }
+
+ for (cmdIndex = 0; cmdIndex < 6; cmdIndex++)
+ {
+ switch (cmdIndex)
+ {
+ // status healing effects
+ case 0:
+ if ((itemEffect[cmdIndex] & 0x80)
+ && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION))
+ {
+ gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x30)
+ && !(gBattleMons[gActiveBank].status2 & STATUS2_FOCUS_ENERGY))
+ {
+ gBattleMons[gActiveBank].status2 |= STATUS2_FOCUS_ENERGY;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0xF)
+ && gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] < 12)
+ {
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] += itemEffect[cmdIndex] & 0xF;
+ if (gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] > 12)
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] = 12;
+ retVal = FALSE;
+ }
+ break;
+ // in-battle stat boosting effects?
+ case 1:
+ if ((itemEffect[cmdIndex] & 0xF0)
+ && gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] < 12)
+ {
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4;
+ if (gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] > 12)
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] = 12;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0xF)
+ && gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] < 12)
+ {
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] += itemEffect[cmdIndex] & 0xF;
+ if (gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] > 12)
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] = 12;
+ retVal = FALSE;
+ }
+ break;
+ // more stat boosting effects?
+ case 2:
+ if ((itemEffect[cmdIndex] & 0xF0)
+ && gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] < 12)
+ {
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4;
+ if (gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] > 12)
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] = 12;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0xF)
+ && gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] < 12)
+ {
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] += itemEffect[cmdIndex] & 0xF;
+ if (gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] > 12)
+ gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] = 12;
+ retVal = FALSE;
+ }
+ break;
+ case 3:
+ if ((itemEffect[cmdIndex] & 0x80)
+ && gSideTimers[GetBankSide(gActiveBank)].mistTimer == 0)
+ {
+ gSideTimers[GetBankSide(gActiveBank)].mistTimer = 5;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x40) // raise level
+ && GetMonData(pkmn, MON_DATA_LEVEL, NULL) != 100)
+ {
+ data = gExperienceTables[gBaseStats[GetMonData(pkmn, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(pkmn, MON_DATA_LEVEL, NULL) + 1];
+ SetMonData(pkmn, MON_DATA_EXP, &data);
+ CalculateMonStats(pkmn);
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x20)
+ && HealStatusConditions(pkmn, partyIndex, 7, sp34) == 0)
+ {
+ if (sp34 != 4)
+ gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(pkmn, partyIndex, 0xF88, sp34) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(pkmn, partyIndex, 16, sp34) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(pkmn, partyIndex, 32, sp34) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(pkmn, partyIndex, 64, sp34) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 1) // heal confusion
+ && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION))
+ {
+ gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION;
+ retVal = FALSE;
+ }
+ break;
+ // EV, HP, and PP raising effects
+ case 4:
+ r10 = itemEffect[cmdIndex];
+ if (r10 & 0x20)
+ {
+ r10 &= ~0x20;
+ data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_08208238[moveIndex]) >> (moveIndex * 2);
+ sp28 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (data <= 2 && sp28 > 4)
+ {
+ data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) + gUnknown_08208240[moveIndex];
+ SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
+
+ data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28;
+ data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
+ SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
+ retVal = FALSE;
+ }
+ }
+ sp28 = 0;
+ while (r10 != 0)
+ {
+ if (r10 & 1)
+ {
+ u16 evCount;
+ s32 r5;
+
+ switch (sp28)
+ {
+ case 0:
+ case 1:
+ evCount = GetMonEVCount(pkmn);
+ if (evCount >= 510)
+ return TRUE;
+ data = GetMonData(pkmn, sGetMonDataEVConstants[sp28], NULL);
+ if (data < 100)
+ {
+ if (data + itemEffect[sp24] > 100)
+ r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24];
+ else
+ r4 = itemEffect[sp24];
+ if (evCount + r4 > 510)
+ r4 += 510 - (evCount + r4);
+ data += r4;
+ SetMonData(pkmn, sGetMonDataEVConstants[sp28], &data);
+ CalculateMonStats(pkmn);
+ sp24++;
+ retVal = FALSE;
+ }
+ break;
+ case 2:
+ // revive?
+ if (r10 & 0x10)
+ {
+ if (GetMonData(pkmn, MON_DATA_HP, NULL) != 0)
+ {
+ sp24++;
+ break;
+ }
+ if (gMain.inBattle)
+ {
+ if (sp34 != 4)
+ {
+ gAbsentBankFlags &= ~gBitTable[sp34];
+ CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlePartyID[sp34]));
+ if (GetBankSide(gActiveBank) == 0 && gBattleResults.unk4 < 255)
+ gBattleResults.unk4++;
+ }
+ else
+ {
+ gAbsentBankFlags &= ~gBitTable[gActiveBank ^ 2];
+ if (GetBankSide(gActiveBank) == 0 && gBattleResults.unk4 < 255)
+ gBattleResults.unk4++;
+ }
+ }
+ }
+ else
+ {
+ if (GetMonData(pkmn, MON_DATA_HP, NULL) == 0)
+ {
+ sp24++;
+ break;
+ }
+ }
+ data = itemEffect[sp24++];
+ switch (data)
+ {
+ case 0xFF:
+ data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) - GetMonData(pkmn, MON_DATA_HP, NULL);
+ break;
+ case 0xFE:
+ data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) / 2;
+ if (data == 0)
+ data = 1;
+ break;
+ case 0xFD:
+ data = eStatHp;
+ break;
+ }
+ if (GetMonData(pkmn, MON_DATA_MAX_HP, NULL) != GetMonData(pkmn, MON_DATA_HP, NULL))
+ {
+ if (e == 0)
+ {
+ data = GetMonData(pkmn, MON_DATA_HP, NULL) + data;
+ if (data > GetMonData(pkmn, MON_DATA_MAX_HP, NULL))
+ data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL);
+ SetMonData(pkmn, MON_DATA_HP, &data);
+ if (gMain.inBattle && sp34 != 4)
+ {
+ gBattleMons[sp34].hp = data;
+ if (!(r10 & 0x10) && GetBankSide(gActiveBank) == 0)
+ {
+ if (gBattleResults.unk3 < 255)
+ gBattleResults.unk3++;
+ // I have to re-use this variable to match.
+ r5 = gActiveBank;
+ gActiveBank = sp34;
+ EmitGetAttributes(0, 0, 0);
+ MarkBufferBankForExecution(gActiveBank);
+ gActiveBank = r5;
+ }
+ }
+ }
+ else
+ {
+ gBattleMoveDamage = -data;
+ }
+ retVal = FALSE;
+ }
+ r10 &= 0xEF;
+ break;
+ case 3:
+ if (!(r10 & 2))
+ {
+ for (r5 = 0; r5 < 4; r5++)
+ {
+ u16 r4;
+
+ data = GetMonData(pkmn, MON_DATA_PP1 + r5, NULL);
+ r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
+ if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
+ {
+ data += itemEffect[sp24];
+ r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
+ if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
+ {
+ r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
+ data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5);
+ }
+ SetMonData(pkmn, MON_DATA_PP1 + r5, &data);
+ if (gMain.inBattle
+ && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
+ && !(gDisableStructs[sp34].unk18_b & gBitTable[r5]))
+ gBattleMons[sp34].pp[r5] = data;
+ retVal = FALSE;
+ }
+ }
+ sp24++;
+ }
+ else
+ {
+ u16 r4;
+
+ data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL);
+ r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ {
+ data += itemEffect[sp24++];
+ r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ {
+ r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
+ data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ }
+ SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
+ if (gMain.inBattle
+ && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
+ && !(gDisableStructs[sp34].unk18_b & gBitTable[moveIndex]))
+ gBattleMons[sp34].pp[moveIndex] = data;
+ retVal = FALSE;
+ }
+ }
+ break;
+ case 7:
+ {
+ u16 targetSpecies = GetEvolutionTargetSpecies(pkmn, 2, item);
+
+ if (targetSpecies != SPECIES_NONE)
+ {
+ BeginEvolutionScene(pkmn, targetSpecies, 0, partyIndex);
+ return FALSE;
+ }
+ }
+ break;
+ }
+ }
+ sp28++;
+ r10 >>= 1;
+ }
+ break;
+ case 5:
+ r10 = itemEffect[cmdIndex];
+ sp28 = 0;
+ while (r10 != 0)
+ {
+ if (r10 & 1)
+ {
+ u16 evCount;
+
+ switch (sp28)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ evCount = GetMonEVCount(pkmn);
+ if (evCount >= 510)
+ return TRUE;
+ data = GetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], NULL);
+ if (data < 100)
+ {
+ if (data + itemEffect[sp24] > 100)
+ r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24];
+ else
+ r4 = itemEffect[sp24];
+ if (evCount + r4 > 510)
+ r4 += 510 - (evCount + r4);
+ data += r4;
+ SetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], &data);
+ CalculateMonStats(pkmn);
+ retVal = FALSE;
+ sp24++;
+ }
+ break;
+ case 4:
+ data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_08208238[moveIndex]) >> (moveIndex * 2);
+ if (data < 3)
+ {
+ r4 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL);
+ data &= gUnknown_0820823C[moveIndex];
+ data += gUnknown_08208240[moveIndex] * 3;
+
+ SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
+ data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4;
+ data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
+ SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
+ retVal = FALSE;
+ }
+ break;
+ case 5:
+ if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0)
+ {
+ sp2C = itemEffect[sp24];
+ friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
+ if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * sp2C / 100;
+ else
+ friendship += sp2C;
+ if (sp2C > 0)
+ {
+ if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
+ friendship++;
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
+ }
+ sp24++;
+ break;
+ case 6:
+ if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 200
+ && retVal == 0 && sp2C == 0)
+ {
+ sp2C = itemEffect[sp24];
+ friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
+ if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * sp2C / 100;
+ else
+ friendship += sp2C;
+ if (sp2C > 0)
+ {
+ if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
+ friendship++;
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
+ }
+ sp24++;
+ break;
+ case 7:
+ if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0)
+ {
+ sp2C = itemEffect[sp24];
+ friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
+ if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * sp2C / 100;
+ else
+ friendship += sp2C;
+ if (sp2C > 0)
+ {
+ if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
+ friendship++;
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
+ }
+ sp24++;
+ break;
+ }
+ }
+ sp28++;
+ r10 >>= 1;
+ }
+ break;
+ }
+ }
+ return retVal;
+}
diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c
index 70234ac48..c0cae9353 100644
--- a/src/pokemon/pokemon_menu.c
+++ b/src/pokemon/pokemon_menu.c
@@ -51,7 +51,7 @@ extern u8 gUnknown_0202E8F5;
extern u8 gUnknown_0202E8F6;
extern u8 gUnknown_02038561;
extern u16 gUnknown_0202E8F8;
-extern void (*gUnknown_03004AE4)(u8 taskID, u16 itemID, TaskFunc func);
+extern void (*gPokemonItemUseCallback)(u8 taskID, u16 itemID, TaskFunc func);
extern TaskFunc gUnknown_03005CF0;
void sub_808A520(void);
@@ -786,7 +786,7 @@ void FieldCallback_Teleport(void)
static void sub_808ABA8(u8 taskID)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gFieldEffectArguments[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES);
gUnknown_03005CE4();
@@ -1013,7 +1013,7 @@ void sub_808B0C0(u8 taskID)
{
sub_806D5A4();
if (gUnknown_02038561 == 0)
- gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224);
+ gPokemonItemUseCallback(taskID, gSpecialVar_ItemId, sub_808B224);
if (gUnknown_02038561 == 1)
{
PlaySE(SE_SELECT);
@@ -1042,7 +1042,7 @@ void sub_808B0C0(u8 taskID)
static void sub_808B1EC(u8 taskID)
{
if (!gPaletteFade.active)
- gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224);
+ gPokemonItemUseCallback(taskID, gSpecialVar_ItemId, sub_808B224);
}
static void sub_808B224(u8 taskID)
diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c
index c02fdfb3a..24c45247e 100644
--- a/src/pokemon/pokemon_storage_system.c
+++ b/src/pokemon/pokemon_storage_system.c
@@ -256,7 +256,7 @@ void Task_PokemonStorageSystem(u8 taskId)
task->data[0]++;
break;
case 1:
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
task->data[0]++;
}
@@ -302,7 +302,7 @@ void Task_PokemonStorageSystem(u8 taskId)
}
else
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
task->data[0] = 4;
}
break;
diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c
index dce65898c..325a94117 100644
--- a/src/pokemon/pokemon_summary_screen.c
+++ b/src/pokemon/pokemon_summary_screen.c
@@ -121,7 +121,6 @@ extern u8 ball_number_to_ball_processing_index(u16);
extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8);
extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gUnknown_020384F0;
extern u8 gUnknown_08208238[];
extern u16 gBattle_BG3_Y;
extern u16 gBattle_BG2_Y;
@@ -130,7 +129,6 @@ extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
extern u16 gBattle_BG3_X;
extern TaskFunc gUnknown_03005CF0;
-extern struct Sprite *gUnknown_020384F4;
extern struct SpriteTemplate gUnknown_02024E8C;
extern const u8 gStatusPal_Icons[];
@@ -156,6 +154,9 @@ extern const u16 gUnknown_08E94550[];
extern const u16 gUnknown_08E94590[];
extern const u8 gUnknown_08E73E88[];
+EWRAM_DATA u8 gUnknown_020384F0 = 0;
+EWRAM_DATA struct Sprite *gUnknown_020384F4 = NULL;
+
#if ENGLISH
#include "../data/text/move_descriptions_en.h"
#include "../data/text/nature_names_en.h"
@@ -689,9 +690,6 @@ void sub_809DA1C(void)
bool8 sub_809DA84(void)
{
- const u16 *src;
- void *dest;
-
switch (gMain.state)
{
case 0:
@@ -708,8 +706,7 @@ bool8 sub_809DA84(void)
gMain.state++;
break;
case 3:
- dest = (void *)VRAM;
- DmaClearLarge(3, dest, 0x10000, 0x1000, 32);
+ DmaClearLarge(3, (void *)(VRAM + 0x0), 0x10000, 0x1000, 32);
gMain.state++;
break;
case 4:
@@ -735,14 +732,8 @@ bool8 sub_809DA84(void)
gMain.state++;
break;
case 9:
- src = gSummaryScreenTextTiles;
- dest = (void *)VRAM + 0xD000;
- DmaCopy16(3, src, dest, 320);
-
- src = sSummaryScreenButtonTiles;
- dest = (void *)VRAM + 0xD140;
- DmaCopy16(3, src, dest, 256);
-
+ DmaCopy16Defvars(3, gSummaryScreenTextTiles, (void *)(VRAM + 0xD000), 320);
+ DmaCopy16Defvars(3, sSummaryScreenButtonTiles, (void *)(VRAM + 0xD140), 256);
pssData.loadGfxState = 0;
gMain.state++;
break;
@@ -3621,16 +3612,14 @@ static void DrawSummaryScreenNavigationDots(void)
}
}
- dest = (void *)(VRAM + 0xE016);
- DmaCopy16(3, arr, dest, 16);
+ DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE016), 16);
for (i = 0; i < 8; i++)
{
arr[i] += 0x10;
}
- dest = (void *)(VRAM + 0xE056);
- DmaCopy16(3, arr, dest, 16);
+ DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE056), 16);
}
#else
__attribute__((naked))
diff --git a/src/rom3.c b/src/rom3.c
index 11239a681..713713162 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -749,9 +749,9 @@ void EmitPrintString(u8 a, u16 stringID)
stringInfo->lastMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility;
- stringInfo->scrActive = BATTLE_STRUCT->scriptingActive;
- stringInfo->unk1605E = BATTLE_STRUCT->unk1605E;
- stringInfo->hpScale = BATTLE_STRUCT->hpScale;
+ stringInfo->scrActive = gBattleStruct->scriptingActive;
+ stringInfo->unk1605E = gBattleStruct->unk1605E;
+ stringInfo->hpScale = gBattleStruct->hpScale;
stringInfo->StringBank = gStringBank;
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
@@ -781,8 +781,8 @@ void EmitPrintStringPlayerOnly(u8 a, u16 stringID)
stringInfo->lastMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility;
- stringInfo->scrActive = BATTLE_STRUCT->scriptingActive;
- stringInfo->unk1605E = BATTLE_STRUCT->unk1605E;
+ stringInfo->scrActive = gBattleStruct->scriptingActive;
+ stringInfo->unk1605E = gBattleStruct->unk1605E;
for (i = 0; i < 4; i++)
stringInfo->abilities[i] = gBattleMons[i].ability;
diff --git a/src/rom6.c b/src/rom6.c
index e71484b0a..62fbc987c 100644
--- a/src/rom6.c
+++ b/src/rom6.c
@@ -142,7 +142,7 @@ int FldEff_RockSmash(void)
gTasks[taskId].data[8] = (u32)sub_810B58C >> 16;
gTasks[taskId].data[9] = (u32)sub_810B58C;
- IncrementGameStat(0x13);
+ IncrementGameStat(GAME_STAT_USED_ROCK_SMASH);
return 0;
}
diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c
index 9449ca0d1..a1b0f5ecb 100644
--- a/src/rom_800D42C.c
+++ b/src/rom_800D42C.c
@@ -52,7 +52,7 @@ void PrintLinkBattleWinLossTie(void)
{
// lp_field_18 = player position?
- switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18)
+ switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18)
{
case 0:
case 2:
@@ -70,7 +70,7 @@ void PrintLinkBattleWinLossTie(void)
else
{
- switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18)
+ switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18)
{
case 1:
case 3:
@@ -92,7 +92,7 @@ void PrintLinkBattleWinLossTie(void)
if (gBattleOutcome == 1)
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0)
{
PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN);
PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS);
@@ -105,7 +105,7 @@ void PrintLinkBattleWinLossTie(void)
}
else
{
- if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0)
+ if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0)
{
PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN);
PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS);
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index 2b5a3c036..11a71155d 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -151,6 +151,7 @@ const struct SpriteSheet gUnknown_0837F5E0[] =
{ gMiscBlank_Gfx, 0x800, 55126, },
};
+// pkmn_form.c
u8 GetBankPosition(u8 slot, u8 a2)
{
@@ -2149,6 +2150,8 @@ u8 sub_807A4A0(int a1, u8 sprite, int a3)
return new_sprite;
}
+// unused_orb
+
void sub_807A544(struct Sprite *sprite)
{
sub_8078650(sprite);
@@ -2192,6 +2195,8 @@ void sub_807A5C4(struct Sprite *sprite)
sprite->callback = sub_8078504;
}
+// file_2
+
void sub_807A63C(struct Sprite *sprite)
{
sub_8078650(sprite);
@@ -2204,6 +2209,8 @@ void sub_807A63C(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
+// file_3 (punch effect?)
+
void sub_807A69C(u8 taskId)
{
u16 src;
@@ -2287,6 +2294,8 @@ void sub_807A8D4(struct Sprite *sprite)
}
}
+// file_4
+
void sub_807A908(struct Sprite *sprite) {
sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2);
sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3);
diff --git a/src/roulette.c b/src/roulette.c
index 6d79f9d38..41e8ef77f 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -579,7 +579,7 @@ void sub_8115384(void)
case 0x0:
SetVBlankCallback(NULL);
ScanlineEffect_Stop();
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80F9368();
REG_BG2CNT = 0x4686;
REG_BG1CNT = 0x4401;
@@ -603,7 +603,7 @@ void sub_8115384(void)
break;
case 0x3:
sub_8115238();
- sub_80F9020();
+ ClearBGTilemapBuffers();
LZ77UnCompWram(&gUnknown_083F88BC, (void *)(ewram18800));
LZ77UnCompVram(&gUnknown_083F8A60, (void *)(VRAM + 0x3000));
gMain.state++;
@@ -1604,7 +1604,7 @@ void sub_8116B40(u8 taskid) // end oulette ?
FreeAllSpritePalettes();
ResetPaletteFade();
ResetSpriteData();
- sub_80F9020();
+ ClearBGTilemapBuffers();
REG_BLDCNT = 0x0;
REG_BLDALPHA = 0x0;
REG_BLDY = 0x0;
diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c
index b59d02939..7567899ae 100644
--- a/src/scene/berry_blender.c
+++ b/src/scene/berry_blender.c
@@ -832,34 +832,13 @@ static bool8 sub_804E2EC(void)
gBerryBlenderData->field_1++;
break;
case 1:
- {
- const void* offsetRead = sBlenderCenterMap;
- void* offsetWrite = (void*)(VRAM + 0x4000);
-
- DmaCopy16(3, offsetRead, offsetWrite, 0x400);
- LoadPalette(sBlenderCenterPal, 0, 0x100);
- gBerryBlenderData->field_1++;
- }
+ DmaCopy16Defvars(3, sBlenderCenterMap, (void *)(VRAM + 0x4000), 0x400);
+ LoadPalette(sBlenderCenterPal, 0, 0x100);
+ gBerryBlenderData->field_1++;
break;
case 2:
- {
- void* offsetRead = ewram10000;
- void* offsetWrite = (void*)(VRAM);
- u32 size = 0x2000;
- while (TRUE)
- {
- DmaCopy16(3, offsetRead, offsetWrite, 0x1000);
- offsetRead += 0x1000;
- offsetWrite += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaCopy16(3, offsetRead, offsetWrite, size);
- break;
- }
- }
- gBerryBlenderData->field_1++;
- }
+ DmaCopyLarge16(3, ewram10000, (void *)(VRAM + 0x0), 0x2000, 0x1000);
+ gBerryBlenderData->field_1++;
break;
case 3:
LZDecompressWram(gUnknown_08E6C920, ewram10000);
@@ -870,37 +849,23 @@ static bool8 sub_804E2EC(void)
gBerryBlenderData->field_1++;
break;
case 5:
- {
- void* offsetRead = ewram10000;
- void* offsetWrite = (void*)(VRAM + 0xE000);
-
- DmaCopy16(3, offsetRead, offsetWrite, 0x1000);
- gBerryBlenderData->field_1++;
- }
+ DmaCopy16Defvars(3, ewram10000, (void *)(VRAM + 0xE000), 0x1000);
+ gBerryBlenderData->field_1++;
break;
case 6:
- {
- void* offsetRead = ewram11000;
- void* offsetWrite = (void*)(VRAM + 0xF000);
-
- DmaCopy16(3, offsetRead, offsetWrite, 0x1000);
- gBerryBlenderData->field_1++;
- }
+ DmaCopy16Defvars(3, ewram11000, (void *)(VRAM + 0xF000), 0x1000);
+ gBerryBlenderData->field_1++;
break;
case 7:
{
u16 i;
u16* palStore = (u16*)(ewram13000);
- void* offsetRead;
- void* offsetWrite;
for (i = 0; i < 640; i++)
{
*(palStore + i) |= 0x100;
}
- offsetRead = ewram13000;
- offsetWrite = (void*)(VRAM + 0x6000);
- DmaCopy16(3, offsetRead, offsetWrite, 0x500);
+ DmaCopy16Defvars(3, ewram13000, (void *)(VRAM + 0x6000), 0x500);
LoadPalette(sBlenderOuterPal, 0x80, 0x20);
gBerryBlenderData->field_1++;
}
@@ -2567,9 +2532,9 @@ static void sub_8050954(void)
if (Blender_PrintBlendingResults())
{
if (gInGameOpponentsNo == 0)
- IncrementGameStat(34);
+ IncrementGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS);
else
- IncrementGameStat(33);
+ IncrementGameStat(GAME_STAT_POKEBLOCKS);
gBerryBlenderData->field_6F++;
}
break;
diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c
index d8e099130..7faa8d844 100644
--- a/src/scene/cable_car.c
+++ b/src/scene/cable_car.c
@@ -18,6 +18,7 @@
#include "event_data.h"
#include "cable_car_util.h"
#include "constants/map_objects.h"
+#include "constants/weather.h"
// Static type declarations
@@ -328,7 +329,7 @@ static void sub_8123740(void)
i = 0;
sub_8123FBC(0);
gSpriteCoordOffsetX = 0;
- sub_807C9B4(0);
+ sub_807C9B4(WEATHER_NONE);
for (; i < 20; i++)
{
gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
@@ -357,7 +358,7 @@ static void sub_8123878(u8 taskId)
case 0:
if (sCableCarPtr->unk_0006 == sCableCarPtr->unk_0004)
{
- DoWeatherEffect(sCableCarPtr->unk_0002);
+ ChangeWeather(sCableCarPtr->unk_0002);
sCableCarPtr->unk_0001 = 1;
}
break;
@@ -769,7 +770,7 @@ static void LoadSprites(void)
gSprites[spriteId].data[1] = 0x63;
sCableCarPtr->unk_0002 = 7;
sCableCarPtr->unk_0004 = 0x15e;
- sub_807C9B4(2);
+ sub_807C9B4(WEATHER_SUNNY);
break;
case 1:
CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0x18, 0x1a, 0x0c, 0x03);
@@ -793,7 +794,7 @@ static void LoadSprites(void)
gSprites[spriteId].data[1] = 0x41;
sCableCarPtr->unk_0002 = 2;
sCableCarPtr->unk_0004 = 0x109;
- sub_807C9B4(7);
+ sub_807C9B4(WEATHER_ASH);
break;
}
for (i = 0; i < 9; i++)
diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c
index 3aa898b03..0aa02312f 100644
--- a/src/scene/contest_painting.c
+++ b/src/scene/contest_painting.c
@@ -156,23 +156,8 @@ static void ShowContestPainting(void)
break;
case 1:
{
- u8 *addr;
- size_t size;
-
ResetPaletteFade();
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill32(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill32(3, 0, addr, size);
- break;
- }
- }
+ DmaFill32Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
ResetSpriteData();
gMain.state++;
break;
diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c
index e0b798aea..282ad31fb 100644
--- a/src/scene/egg_hatch.c
+++ b/src/scene/egg_hatch.c
@@ -504,35 +504,11 @@ static void CB2_EggHatch_0(void)
gMain.state++;
break;
case 7:
- {
- u32 offsetRead, offsetWrite;
- u32 offsetRead2, offsetWrite2;
- u32 size;
-
- REG_BG2CNT = 0x4C06;
- LoadPalette(gUnknown_0820C9F8, 0x10, 0xA0);
-
- offsetRead = (u32)(&gUnknown_0820CA98);
- offsetWrite = (VRAM + 0x4000);
- size = 0x1300;
- while (TRUE)
- {
- DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000);
- offsetRead += 0x1000;
- offsetWrite += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaCopy16(3, offsetRead, (void *) (offsetWrite), size);
- break;
- }
- }
-
- offsetRead2 = (u32)(&gUnknown_0820F798);
- offsetWrite2 = (u32)(VRAM + 0x6000);
- DmaCopy16(3, offsetRead2, (void*)(offsetWrite2), 0x1000);
- gMain.state++;
- }
+ REG_BG2CNT = 0x4C06;
+ LoadPalette(gUnknown_0820C9F8, 0x10, 0xA0);
+ DmaCopyLarge16(3, gUnknown_0820CA98, (void *)(VRAM + 0x4000), 0x1300, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_0820F798, (void *)(VRAM + 0x6000), 0x1000);
+ gMain.state++;
break;
case 8:
REG_BG1CNT = 0x501;
diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c
index 931ec0d4d..3ba325574 100644
--- a/src/scene/evolution_scene.c
+++ b/src/scene/evolution_scene.c
@@ -649,7 +649,7 @@ static void Task_EvolutionScene(u8 taskID)
EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
- IncrementGameStat(14);
+ IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
}
break;
case 14: // check if it wants to learn a new move
@@ -991,7 +991,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
- IncrementGameStat(14);
+ IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
}
break;
case 13:
diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c
index 424747ba3..2b790e97d 100644
--- a/src/scene/hall_of_fame.c
+++ b/src/scene/hall_of_fame.c
@@ -1185,8 +1185,6 @@ static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1)
static void sub_81433E0(void)
{
- u32 offsetWrite, offsetWrite2, offsetWrite3, offsetWrite4;
- u32 size, size2, size3, size4;
u16 i;
REG_DISPCNT = 0;
@@ -1207,27 +1205,9 @@ static void sub_81433E0(void)
REG_BG3HOFS = 0;
REG_BG3VOFS = 0;
- offsetWrite = (VRAM);
- size = 0x18000;
- while (TRUE)
- {
- DmaFill16(3, 0, offsetWrite, 0x1000);
- offsetWrite += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, offsetWrite, size);
- break;
- }
- }
-
- offsetWrite2 = OAM;
- size2 = OAM_SIZE;
- DmaFill32(3, 0, offsetWrite2, size2);
-
- offsetWrite3 = PLTT;
- size3 = PLTT_SIZE;
- DmaFill16(3, 0, offsetWrite3, size3);
+ DmaFill16Large(3, 0, VRAM, 0x18000, 0x1000);
+ DmaFill32Defvars(3, 0, OAM, OAM_SIZE);
+ DmaFill16Defvars(3, 0, PLTT, PLTT_SIZE);
LZ77UnCompVram(gHallOfFame_Gfx, (void*)(VRAM));
@@ -1244,20 +1224,7 @@ static void sub_81433E0(void)
*((u16*)(VRAM + 0x3000) + i) = 2;
}
- offsetWrite4 = ewram0_6;
- size4 = 0x4000;
- while (TRUE)
- {
- DmaFill16(3, 0, offsetWrite4, 0x1000);
- offsetWrite4 += 0x1000;
- size4 -= 0x1000;
- if (size4 <= 0x1000)
- {
- DmaFill16(3, 0, offsetWrite4, size4);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, ewram0_6, 0x4000, 0x1000);
ResetPaletteFade();
LoadPalette(gHallOfFame_Pal, 0, 0x20);
}
diff --git a/src/scene/intro.c b/src/scene/intro.c
index f7e196133..4da341744 100644
--- a/src/scene/intro.c
+++ b/src/scene/intro.c
@@ -1217,7 +1217,6 @@ static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId)
static void Task_IntroLoadPart3Streaks(u8 taskId)
{
u16 i;
- void *vram;
intro_reset_and_hide_bgs();
for (i = 0; i < 32; i++)
@@ -1226,8 +1225,7 @@ static void Task_IntroLoadPart3Streaks(u8 taskId)
ewram0arr[1][i] = 17;
ewram0arr[2][i] = 34;
}
- vram = (void *)VRAM;
- DmaCopy16(3, gSharedMem, vram, 0x60);
+ DmaCopy16Defvars(3, gSharedMem, (void *)(VRAM + 0x0), 0x60);
for (i = 0; i < 0x280; i++)
((u16 *)(VRAM + 0x3000))[i] = 0xF001;
for (i = 0; i < 0x80; i++)
diff --git a/src/scene/intro_credits_graphics.c b/src/scene/intro_credits_graphics.c
index f0f1264a0..7f6765ef6 100755..100644
--- a/src/scene/intro_credits_graphics.c
+++ b/src/scene/intro_credits_graphics.c
@@ -301,9 +301,10 @@ const struct CompressedSpriteSheet gUnknown_08416E34[] = {
};
-extern u16 gUnknown_02039358;
-extern s16 gUnknown_0203935A;
-extern s16 gUnknown_0203935C;
+EWRAM_DATA u16 gUnknown_02039358 = 0;
+EWRAM_DATA s16 gUnknown_0203935A = 0;
+EWRAM_DATA s16 gUnknown_0203935C = 0;
+
extern u8 gReservedSpritePaletteCount;
void sub_8149248();
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index b13006c13..f991297ab 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -238,8 +238,8 @@ void ShowContestWinner(void)
if(gUnknown_0203856C)
{
sub_80AAF30();
- BATTLE_STRUCT->unk15DDF = 1;
- BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0);
+ gBattleStruct->unk15DDF = 1;
+ gBattleStruct->unk15DDE = sub_80B2C4C(254, 0);
Contest_SaveWinner(3);
gUnknown_0203856C = 0;
}
diff --git a/sym_bss.txt b/sym_bss.txt
index 6e95a609f..5e22693fd 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -1,42 +1,42 @@
- .include "src/engine/main.o"
- .include "src/engine/sprite.o"
- .include "src/engine/text.o"
- .include "src/engine/string_util.o"
- .include "src/engine/link.o"
- .include "src/engine/rtc.o"
- .include "src/field/daycare.o"
- .include "src/engine/trade.o"
- .include "src/scene/berry_blender.o"
- .include "src/engine/play_time.o"
- .include "src/field/overworld.o"
- .include "src/field/field_camera.o"
- .include "src/field/field_map_obj.o"
- .include "src/field/field_message_box.o"
- .include "src/engine/text_window.o"
- .include "src/engine/script.o"
- .include "src/field/start_menu.o"
- .include "src/engine/menu.o"
- .include "src/engine/tileset_anim.o"
- .include "src/engine/sound.o"
- .include "src/field/field_weather.o"
- .include "src/field/field_effect.o"
- .include "src/field/item_menu.o"
- .include "src/field/shop.o"
- .include "src/engine/record_mixing.o"
- .include "src/field/tv.o"
- .include "src/battle/battle_anim_80CA710.o"
- .include "src/easy_chat_2.o"
- .include "src/pokenav_before.o"
- .include "src/field/mauville_man.o"
- .include "src/field/menu_helpers.o"
- .include "src/scene/contest_painting.o"
- .include "src/field/pokeblock.o"
- .include "src/field/field_specials.o"
- .include "src/pokemon/learn_move.o"
- .include "src/field/player_pc.o"
- .include "src/libs/m4a_1.o"
- .include "src/libs/agb_flash.o"
- .include "src/libs/siirtc.o"
- .include "tools/agbcc/lib/libgcc.a:dp-bit.o"
- .include "tools/agbcc/lib/libgcc.a:fp-bit.o"
- .include "tools/agbcc/lib/libc.a:syscalls.o"
+. = ALIGN(4); src/engine/main.o(.bss);
+. = ALIGN(4); src/engine/sprite.o(.bss);
+. = ALIGN(4); src/engine/text.o(.bss);
+. = ALIGN(4); src/engine/string_util.o(.bss);
+. = ALIGN(4); src/engine/link.o(.bss);
+. = ALIGN(4); src/engine/rtc.o(.bss);
+. = ALIGN(4); src/field/daycare.o(.bss);
+. = ALIGN(4); src/engine/trade.o(.bss);
+. = ALIGN(4); src/scene/berry_blender.o(.bss);
+. = ALIGN(4); src/engine/play_time.o(.bss);
+. = ALIGN(4); src/field/overworld.o(.bss);
+. = ALIGN(4); src/field/field_camera.o(.bss);
+. = ALIGN(4); src/field/field_map_obj.o(.bss);
+. = ALIGN(4); src/field/field_message_box.o(.bss);
+. = ALIGN(4); src/engine/text_window.o(.bss);
+. = ALIGN(4); src/engine/script.o(.bss);
+. = ALIGN(4); src/field/start_menu.o(.bss);
+. = ALIGN(4); src/engine/menu.o(.bss);
+. = ALIGN(4); src/engine/tileset_anim.o(.bss);
+. = ALIGN(4); src/engine/sound.o(.bss);
+. = ALIGN(4); src/field/field_weather.o(.bss);
+. = ALIGN(4); src/field/field_effect.o(.bss);
+. = ALIGN(4); src/field/item_menu.o(.bss);
+. = ALIGN(4); src/field/shop.o(.bss);
+. = ALIGN(4); src/engine/record_mixing.o(.bss);
+. = ALIGN(4); src/field/tv.o(.bss);
+. = ALIGN(4); src/battle/battle_anim_80CA710.o(.bss);
+. = ALIGN(4); src/easy_chat_2.o(.bss);
+. = ALIGN(4); src/pokenav_before.o(.bss);
+. = ALIGN(4); src/field/mauville_man.o(.bss);
+. = ALIGN(4); src/field/menu_helpers.o(.bss);
+. = ALIGN(4); src/scene/contest_painting.o(.bss);
+. = ALIGN(4); src/field/pokeblock.o(.bss);
+. = ALIGN(4); src/field/field_specials.o(.bss);
+. = ALIGN(4); src/pokemon/learn_move.o(.bss);
+. = ALIGN(4); src/field/player_pc.o(.bss);
+. = ALIGN(4); src/libs/m4a_1.o(.bss);
+. = ALIGN(4); src/libs/agb_flash.o(.bss);
+. = ALIGN(4); src/libs/siirtc.o(.bss);
+. = ALIGN(4); tools/agbcc/lib/libgcc.a:dp-bit.o(.bss);
+. = ALIGN(4); tools/agbcc/lib/libgcc.a:fp-bit.o(.bss);
+. = ALIGN(4); tools/agbcc/lib/libc.a:syscalls.o(.bss);
diff --git a/sym_common.txt b/sym_common.txt
index cfb1b6b13..64e87c046 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -1,240 +1,315 @@
- .include "engine/main.o"
- .include "engine/sprite.o"
- .include "engine/string_util.o"
- .include "engine/link.o"
- .include "engine/rtc.o"
- .include "rom3.o"
-
-@ battle
-
- .align 2
-gBattle_BG3_X: @ 30041B0
- .space 0x4
-
-gBattle_BG1_Y: @ 30041B4
- .space 0x4
-
-gBattle_BG3_Y: @ 30041B8
- .space 0x8
-
-gBattleTextBuff1: @ 30041C0
- .space 0x10
-
-gUnknown_030041D0: @ 30041D0
- .space 0x30
-
-gBattle_WIN1H: @ 3004200
- .space 0x10
-
-gUnknown_03004210: @ 3004210
- .space 0x30
-
-gBattle_WIN0V: @ 3004240
- .space 0x4
-
-gBattle_WIN1V: @ 3004244
- .space 0xC
-
-gUnknown_03004250: @ 3004250
- .space 0x30
-
-gBattle_BG2_Y: @ 3004280
- .space 0x4
-
-gUnknown_03004284: @ 3004284
- .space 0x4
-
-gBattle_BG2_X: @ 3004288
- .space 0x4
-
-gBattleTerrain: @ 300428C
- .space 0x4
-
-gBattleTextBuff2: @ 3004290
- .space 0x10
-
-gBattle_BG0_Y: @ 30042A0
- .space 0x4
-
-gBattle_BG0_X: @ 30042A4
- .space 0xC
-
-gBattleTextBuff3: @ 30042B0
- .space 0x10
-
-gBattle_BG1_X: @ 30042C0
- .space 0x4
-
-gBattle_WIN0H: @ 30042C4
- .space 0xC
-
-gPreBattleCallback1: @ 30042D0
- .space 0x4
-
-gBattleMainFunc: @ 30042D4
- .space 0xC
-
-gBattleResults: @ 30042E0
- .space 0x1C
-
-gUnknown_030042FC: @ 30042FC
- .space 0xE
-
-gUnknown_0300430A: @ 300430A
- .space 0xC
-
-gUnknown_03004316: @ 3004316
- .space 0xE
-
-gLeveledUpInBattle: @ 3004324
- .space 0xC
-
-gBattleBankFunc: @ 3004330
- .space 0x10
-
-gHealthboxIDs: @ 3004340
- .space 0x4
-
-gUnknown_03004344: @ 3004344
- .space 0x4
-
-gUnknown_03004348: @ 3004348
- .space 0x4
-
-gUnknown_0300434C: @ 300434C
- .space 0x4
-
- .include "pokemon/pokemon_1.o"
- .include "engine/random.o"
- .include "scene/egg_hatch.o"
- .include "engine/load_save.o"
-
-@ trade
-
-gUnknown_03004824: @ 3004824
- .space 0x4
-
-gUnknown_03004828: @ 3004828
- .space 0x8
-
- .include "scene/berry_blender.o"
- .include "field/overworld.o"
- .include "field/fieldmap.o"
- .include "field/field_camera.o"
- .include "field/field_map_obj.o"
- .include "field/field_control_avatar.o"
-
-@ party_menu?
-
- .align 2
-gUnknown_03004AE4: @ 3004AE4
- .space 0x4
-
- .include "field/start_menu.o"
- .include "engine/sound.o"
- .include "battle/battle_anim.o"
- .include "engine/task.o"
- .include "debug/mori_debug_menu.o"
-
-@ unknown_task
- .include "scanline_effect.o"
- .include "pokemon/pokemon_menu.o"
- .include "pokemon/pokedex.o"
-
-@ pokemon_summary_screen
-
- .align 4
-gUnknown_03005CF0: @ 3005CF0
- .space 0x10
-
-@ item_menu
-
- .align 4
-gFieldItemUseCallback: @ 3005D00
- .space 0x10
-
-gBagPocketScrollStates: @ 3005D10
- .space 0x14
-
-gCurrentBagPocketItemSlots: @ 3005D24
- .space 0x4
-
-@ contest
-
- .align 2
-gUnknown_03005D28: @ 3005D28
- .space 0x4
-
- .include "engine/record_mixing.o"
- .include "debug/sound_check_menu.o"
- .include "field/tv.o"
-
- .space 0x64 @ unused variable?
-
-@ mauville_old_man
-
- .align 4
-gUnknown_03005DA0: @ 3005DA0
- .space 0x48
-
-@ cute_sketch
-
-gUnknown_03005DE8: @ 3005DE8
- .space 0x4
-
-gUnknown_03005DEC: @ 3005DEC
- .space 0x4
-
-gUnknown_03005DF0: @ 3005DF0
- .space 0x4
-
-gUnknown_03005DF4: @ 3005DF4
- .space 0x4
-
-gUnknown_03005DF8: @ 3005DF8
- .space 0x4
-
-gUnknown_03005DFC: @ 3005DFC
- .space 0x4
-
-gUnknown_03005E00: @ 3005E00
- .space 0x4
-
-gUnknown_03005E04: @ 3005E04
- .space 0x4
-
-gUnknown_03005E08: @ 3005E08
- .space 0x4
-
-gUnknown_03005E0C: @ 3005E0C
- .space 0x4
-
- .include "scene/contest_painting.o"
- .include "scene/evolution_scene.o"
-
-@ pokedex_cry_screen
-
-gUnknown_03005E98: @ 3005E98
- .space 0x4
-
- .include "engine/save.o"
-
- .space 0x10 @ unused variable?
-
- .include "scene/intro.o"
-
-@ battle_anim_813F0F4
-
- .align 2
-gUnknown_03005F0C: @ 3005F0C
- .space 0x4
-
-gUnknown_03005F10: @ 3005F10
- .space 0x4
-
-gUnknown_03005F14: @ 3005F14
- .space 0xC
-
- .include "pokemon/pokeblock_feed.o"
- .include "libs/m4a_2.o"
- .include "libs/agb_flash.o"
+#define SYMBOL(name, size) \
+ . = ALIGN (((size) > 16) ? 16 : (size)); \
+ . = ALIGN(4); \
+ name = .; \
+ . += size;
+
+
+// main.c
+SYMBOL(gKeyRepeatStartDelay, 4)
+SYMBOL(gLinkTransferringData, 4)
+SYMBOL(gMain, 1088)
+SYMBOL(gKeyRepeatContinueDelay, 4)
+SYMBOL(gSoftResetDisabled, 4)
+SYMBOL(gIntrTable, 56)
+SYMBOL(gLinkVSyncDisabled, 4)
+SYMBOL(IntrMain_Buffer, 2048)
+SYMBOL(gPcmDmaCounter, 4)
+
+// sprite.c
+SYMBOL(gSpriteOrder, 64)
+SYMBOL(gSpriteTileAllocBitmap, 128)
+SYMBOL(gSpriteCoordOffsetX, 4)
+SYMBOL(gOamLimit, 4)
+SYMBOL(gReservedSpriteTileCount, 4)
+SYMBOL(gSpriteCopyRequestCount, 4)
+SYMBOL(gSpriteCopyRequests, 768)
+SYMBOL(gSpriteCoordOffsetY, 4)
+SYMBOL(gOamMatrices, 256)
+SYMBOL(gShouldProcessSpriteCopyRequests, 4)
+SYMBOL(gOamMatrixAllocBitmap, 4)
+SYMBOL(gReservedSpritePaletteCount, 4)
+
+// string_util.c
+SYMBOL(gUnknownStringVar, 16)
+
+// link.c
+SYMBOL(word_3002910, 8)
+SYMBOL(gLinkDebugValue1, 4)
+SYMBOL(localLinkPlayerBlock, 60)
+SYMBOL(gLinkErrorOccurred, 4)
+. += 0x4;
+SYMBOL(gLinkDebugValue2, 4)
+. += 0x4;
+#ifdef GERMAN
+SYMBOL(deUnkValue1, 4)
+SYMBOL(deUnkValue2, 4)
+#endif
+SYMBOL(gLinkPlayerPending, 4)
+SYMBOL(gLinkPlayers, 112)
+SYMBOL(gBlockReceived, 4)
+. += 0x4;
+SYMBOL(gLinkHeldKeys, 4)
+SYMBOL(gLinkTimeOutCounter, 4)
+. += 0x4;
+SYMBOL(localLinkPlayer, 28)
+SYMBOL(gRecvCmds, 64)
+SYMBOL(gLinkStatus, 4)
+SYMBOL(gLinkDummyBool, 4)
+SYMBOL(byte_3002A68, 4)
+SYMBOL(gBlockSendBuffer, 256)
+SYMBOL(u8_array_3002B70, 4)
+SYMBOL(gLinkType, 4)
+SYMBOL(u8_array_3002B78, 4)
+SYMBOL(gBlockRecvBuffer, 1024)
+SYMBOL(gSuppressLinkErrorMessage, 4)
+SYMBOL(gSavedLinkPlayerCount, 4)
+SYMBOL(gSendCmd, 16)
+SYMBOL(gSavedMultiplayerId, 4)
+SYMBOL(gReceivedRemoteLinkPlayers, 4)
+SYMBOL(gLinkTestBGInfo, 16)
+SYMBOL(gLinkCallback, 4)
+SYMBOL(gSavedLinkPlayers, 112)
+SYMBOL(gShouldAdvanceLinkState, 4)
+SYMBOL(gLinkTestBlockChecksums, 8)
+. += 0x4;
+SYMBOL(gBlockRequestType, 4)
+. += 0x8;
+SYMBOL(gLastSendQueueCount, 4)
+SYMBOL(gLink, 4032)
+SYMBOL(gLastRecvQueueCount, 4)
+SYMBOL(gLinkSavedIme, 4)
+
+// rtc.c
+SYMBOL(gLocalTime, 8)
+
+// battle
+SYMBOL(gBattleBuffersTransferData, 368)
+SYMBOL(gBattle_BG3_X, 4)
+SYMBOL(gBattle_BG1_Y, 4)
+SYMBOL(gBattle_BG3_Y, 4)
+SYMBOL(gBattleTextBuff1, 16)
+SYMBOL(gUnknown_030041D0, 48)
+SYMBOL(gBattle_WIN1H, 4)
+SYMBOL(gUnknown_03004210, 48)
+SYMBOL(gBattle_WIN0V, 4)
+SYMBOL(gBattle_WIN1V, 4)
+SYMBOL(gUnknown_03004250, 48)
+SYMBOL(gBattle_BG2_Y, 4)
+SYMBOL(gUnknown_03004284, 4)
+SYMBOL(gBattle_BG2_X, 4)
+SYMBOL(gBattleTerrain, 4)
+SYMBOL(gBattleTextBuff2, 16)
+SYMBOL(gBattle_BG0_Y, 4)
+SYMBOL(gBattle_BG0_X, 4)
+SYMBOL(gBattleTextBuff3, 16)
+SYMBOL(gBattle_BG1_X, 4)
+SYMBOL(gBattle_WIN0H, 4)
+. += 0x8;
+SYMBOL(gPreBattleCallback1, 4)
+gBattleMainFunc = .;
+. += 0xC;
+gBattleResults = .;
+. += 0x1C;
+// Why is this not aligned?
+gUnknown_030042FC = .;
+. += 0x1A;
+gUnknown_03004316 = .;
+. += 0xE;
+gLeveledUpInBattle = .;
+. += 0xC;
+SYMBOL(gBattleBankFunc, 16)
+SYMBOL(gHealthboxIDs, 4)
+SYMBOL(gUnknown_03004344, 4)
+SYMBOL(gUnknown_03004348, 4)
+SYMBOL(gUnknown_0300434C, 4)
+
+// pokemon_1.c
+SYMBOL(gPlayerPartyCount, 4)
+SYMBOL(gPlayerParty, 600)
+SYMBOL(gEnemyPartyCount, 4)
+SYMBOL(gEnemyParty, 600)
+
+// random.c
+SYMBOL(gRngValue, 4)
+
+// egg_hatch.c
+SYMBOL(gEggHatchData, 4)
+
+// load_save.c
+SYMBOL(gFlashMemoryPresent, 4)
+
+// ???
+SYMBOL(gUnknown_03004824, 4)
+SYMBOL(gUnknown_03004828, 4)
+. += 0x4;
+
+// berry_blender.c
+SYMBOL(gUnknown_03004830, 4)
+SYMBOL(gInGameOpponentsNo, 4)
+SYMBOL(gUnknown_03004840, 20)
+SYMBOL(gBerryBlenderData, 4)
+
+// overworld.c
+SYMBOL(word_3004858, 4)
+SYMBOL(gFieldCallback, 4)
+SYMBOL(gUnknown_03004860, 4)
+SYMBOL(gFieldLinkPlayerCount, 4)
+
+// fieldmap.c
+. = ALIGN(16);
+gUnknown_03004870 = .;
+. += 0xC;
+
+// field_camera.c
+SYMBOL(gUnknown_03004880, 24)
+SYMBOL(gUnknown_03004898, 4)
+SYMBOL(gUnknown_0300489C, 4)
+
+// field_map_obj.c
+SYMBOL(gMapObjects, 576)
+
+// field_control_avatar.c
+SYMBOL(gSelectedMapObject, 4)
+
+// ???
+SYMBOL(gPokemonItemUseCallback, 4)
+
+// start_menu.c
+SYMBOL(gMenuCallback, 4)
+
+// sound.c
+SYMBOL(gDisableMusic, 4)
+
+// battle_anim.c
+SYMBOL(gSoundAnimFramesToWait, 4)
+SYMBOL(gBattleAnimArgs, 16)
+SYMBOL(gAnimSpriteIndexArray, 16)
+
+// task.c
+SYMBOL(gTasks, 640)
+
+// mori_debug_menu.c
+SYMBOL(gUnknown_03004DA0, 32)
+
+// scanline_effect.c
+SYMBOL(gScanlineEffect, 32)
+SYMBOL(gScanlineEffectRegBuffers, 3840)
+
+// pokemon_menu.c
+SYMBOL(gLastFieldPokeMenuOpened, 4)
+SYMBOL(gUnknown_03005CE4, 4)
+
+// pokedex.c
+SYMBOL(gUnknown_03005CE8, 4)
+SYMBOL(gUnknown_03005CEC, 4)
+
+// ???
+SYMBOL(gUnknown_03005CF0, 4)
+// huh?
+. = ALIGN(16);
+gFieldItemUseCallback = .;
+. += 0x10;
+gBagPocketScrollStates = .;
+. += 0x14;
+SYMBOL(gCurrentBagPocketItemSlots, 4)
+SYMBOL(gUnknown_03005D28, 4)
+
+// record_mixing.c
+SYMBOL(gUnknown_03005D2C, 4)
+
+// sound_check_menu.c
+SYMBOL(gUnknown_03005D30, 4)
+SYMBOL(gSoundTestCryNum, 4)
+
+// tv.c
+SYMBOL(gUnknown_03005D38, 4)
+. += 0x64; // huge gap?
+
+// ???
+SYMBOL(gUnknown_03005DA0, 0x48)
+SYMBOL(gUnknown_03005DE8, 4)
+SYMBOL(gUnknown_03005DEC, 4)
+SYMBOL(gUnknown_03005DF0, 4)
+SYMBOL(gUnknown_03005DF4, 4)
+SYMBOL(gUnknown_03005DF8, 4)
+SYMBOL(gUnknown_03005DFC, 4)
+SYMBOL(gUnknown_03005E00, 4)
+SYMBOL(gUnknown_03005E04, 4)
+SYMBOL(gUnknown_03005E08, 4)
+SYMBOL(gUnknown_03005E0C, 4)
+
+// contest_painting.c
+SYMBOL(gUnknown_03005E10, 4)
+SYMBOL(gUnknown_03005E20, 32)
+SYMBOL(gUnknown_03005E40, 76)
+SYMBOL(gUnknown_03005E8C, 4)
+SYMBOL(gUnknown_03005E90, 4)
+
+// evolution_scene.c
+SYMBOL(gCB2_AfterEvolution, 4)
+
+// ???
+SYMBOL(gUnknown_03005E98, 4)
+
+// save.c
+SYMBOL(gFirstSaveSector, 4)
+SYMBOL(gPrevSaveCounter, 4)
+SYMBOL(gLastKnownGoodSector, 4)
+SYMBOL(gDamagedSaveSectors, 4)
+SYMBOL(gSaveCounter, 4)
+SYMBOL(gFastSaveSection, 4)
+SYMBOL(gUnknown_03005EB4, 4)
+SYMBOL(gSaveFileStatus, 4)
+SYMBOL(gGameContinueCallback, 4)
+. += 0x10;
+
+// intro.c
+SYMBOL(gIntroFrameCounter, 4)
+SYMBOL(gMultibootProgramStruct, 44)
+
+// ???
+SYMBOL(gUnknown_03005F0C, 4)
+SYMBOL(gUnknown_03005F10, 4)
+gUnknown_03005F14 = .;
+. += 0xC;
+
+// pokeblock_feed.c
+SYMBOL(gPokeblockFeedPokeSprite, 4)
+SYMBOL(gPokeblockFeedMonSpecies, 4)
+SYMBOL(gPokeblockMonNotFlipped, 4)
+SYMBOL(gPokeblockFeedMonSpriteID, 4)
+SYMBOL(gPokeblockFeedMonNature, 4)
+SYMBOL(gUnknown_03005F34, 4)
+SYMBOL(gPokeblockFeedUnused0, 4)
+SYMBOL(gUnknown_03005F3C, 4)
+SYMBOL(gUnknown_03005F40, 4)
+SYMBOL(gPokeblockFeedPokeSpriteCopy, 68)
+SYMBOL(gUnknown_03005F94, 4)
+SYMBOL(gUnknown_03005FA0, 48)
+
+// m4a_2.c
+SYMBOL(gSoundInfo, 4016)
+SYMBOL(gPokemonCrySongs, 104)
+SYMBOL(gPokemonCryMusicPlayers, 128)
+SYMBOL(gMPlayJumpTable, 144)
+SYMBOL(gCgbChans, 256)
+SYMBOL(gPokemonCryTracks, 320)
+SYMBOL(gPokemonCrySong, 52)
+SYMBOL(gMPlay_BGM, 64)
+SYMBOL(gMPlay_SE1, 64)
+SYMBOL(gMPlay_SE2, 64)
+SYMBOL(gMPlayMemAccArea, 16)
+SYMBOL(gMPlay_SE3, 64)
+
+// agb_flash.c
+SYMBOL(gFlashTimeoutFlag, 4)
+SYMBOL(PollFlashStatus, 4)
+SYMBOL(WaitForFlashWrite, 4)
+SYMBOL(ProgramFlashSector, 4)
+SYMBOL(gFlash, 4)
+SYMBOL(ProgramFlashByte, 4)
+SYMBOL(gFlashNumRemainingBytes, 4)
+SYMBOL(EraseFlashChip, 4)
+SYMBOL(EraseFlashSector, 4)
+SYMBOL(gFlashMaxTime, 4)
diff --git a/sym_ewram.txt b/sym_ewram.txt
index bdab169b2..2a2a2cc11 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1,555 +1,420 @@
- .include "src/engine/main.o"
- .include "src/engine/sprite.o"
- .include "src/engine/text.o"
- .include "src/engine/string_util.o"
+. = ALIGN(4); src/engine/main.o(ewram_data);
+. = ALIGN(4); src/engine/sprite.o(ewram_data);
+. = ALIGN(4); src/engine/text.o(ewram_data);
+. = ALIGN(4); src/engine/string_util.o(ewram_data);
- .space 0x2E8
+. += 0x2E8;
- .include "src/engine/link.o"
- .include "src/rom3.o"
+. = ALIGN(4); src/engine/link.o(ewram_data);
+. = ALIGN(4); src/rom3.o(ewram_data);
-@ battle
+/* battle */
- .align 2
-gUnknown_020238C8: @ 20238C8
- .space 0x4
+ . = ALIGN(4);
+gUnknown_020238C8 = .; /* 20238C8 */
+ . += 0x4;
-gDisplayedStringBattle: @ 20238CC
- .space 0x12C
+gDisplayedStringBattle = .; /* 20238CC */
+ . += 0x12C;
-gBattleTypeFlags: @ 20239F8
- .space 0x4
+gBattleTypeFlags = .; /* 20239F8 */
+ . += 0x4;
-gUnknown_020239FC: @ 20239FC
- .space 0x4
+gUnknown_020239FC = .; /* 20239FC */
+ . += 0x4;
-gUnknown_02023A00: @ 2023A00
- .space 0x4
+gUnknown_02023A00 = .; /* 2023A00 */
+ . += 0x4;
-gUnknown_02023A04: @ 2023A04
- .space 0x10
+gUnknown_02023A04 = .; /* 2023A04 */
+ . += 0x10;
-gUnknown_02023A14: @ 2023A14
- .space 0x4C
+gUnknown_02023A14 = .; /* 2023A14 */
+ . += 0x4C;
-gBattleBufferA: @ 2023A60
- .space 0x2
+gBattleBufferA = .; /* 2023A60 */
+ . += 0x2;
-gUnknown_02023A62: @ 2023A62
- .space 0x1
+gUnknown_02023A62 = .; /* 2023A62 */
+ . += 0x1;
-gUnknown_02023A63: @ 2023A63
- .space 0x1
+gUnknown_02023A63 = .; /* 2023A63 */
+ . += 0x1;
-gUnknown_02023A64: @ 2023A64
- .space 0x7FC
+gUnknown_02023A64 = .; /* 2023A64 */
+ . += 0x7FC;
-gBattleBufferB: @ 2024260
- .space 0x4
+gBattleBufferB = .; /* 2024260 */
+ . += 0x4;
-gUnknown_02024264: @ 2024264
- .space 0x7FC
+gUnknown_02024264 = .; /* 2024264 */
+ . += 0x7FC;
-gActiveBank: @ 2024A60
- .space 0x4
+gActiveBank = .; /* 2024A60 */
+ . += 0x4;
-gBattleExecBuffer: @ 2024A64
- .space 0x4
+gBattleExecBuffer = .; /* 2024A64 */
+ . += 0x4;
-gNoOfAllBanks: @ 2024A68
- .space 0x2
+gNoOfAllBanks = .; /* 2024A68 */
+ . += 0x2;
-gBattlePartyID: @ 2024A6A
- .space 0x8
+gBattlePartyID = .; /* 2024A6A */
+ . += 0x8;
-gBanksBySide: @ 2024A72
- .space 0x4
+gBanksBySide = .; /* 2024A72 */
+ . += 0x4;
-gActionsByTurnOrder: @ 2024A76
- .space 0x4
+gActionsByTurnOrder = .; /* 2024A76 */
+ . += 0x4;
-gBanksByTurnOrder: @ 2024A7A
- .space 0x4
+gBanksByTurnOrder = .; /* 2024A7A */
+ . += 0x4;
-gCurrentTurnActionNumber: @ 2024A7E
- .space 0x1
+gCurrentTurnActionNumber = .; /* 2024A7E */
+ . += 0x1;
-gCurrentActionFuncId: @ 2024A7F
- .space 0x1
+gCurrentActionFuncId = .; /* 2024A7F */
+ . += 0x1;
-gBattleMons: @ 2024A80
- .space 0xC
+gBattleMons = .; /* 2024A80 */
+ . += 0xC;
-gUnknown_02024A8C: @ 2024A8C
- .space 0xC
+gUnknown_02024A8C = .; /* 2024A8C */
+ . += 0xC;
-gUnknown_02024A98: @ 2024A98
- .space 0xC
+gUnknown_02024A98 = .; /* 2024A98 */
+ . += 0xC;
-gUnknown_02024AA4: @ 2024AA4
- .space 0x4
+gUnknown_02024AA4 = .; /* 2024AA4 */
+ . += 0x4;
-gUnknown_02024AA8: @ 2024AA8
- .space 0x24
+gUnknown_02024AA8 = .; /* 2024AA8 */
+ . += 0x24;
-gUnknown_02024ACC: @ 2024ACC
- .space 0x4
+gUnknown_02024ACC = .; /* 2024ACC */
+ . += 0x4;
-gUnknown_02024AD0: @ 2024AD0
- .space 0x110
+gUnknown_02024AD0 = .; /* 2024AD0 */
+ . += 0x110;
-gObjectBankIDs: @ 2024BE0
- .space 0x4
+gObjectBankIDs = .; /* 2024BE0 */
+ . += 0x4;
-gCurrMovePos: @ 2024BE4
- .space 0x1
+gCurrMovePos = .; /* 2024BE4 */
+ . += 0x1;
-gUnknown_02024BE5: @ 2024BE5
- .space 0x1
+gUnknown_02024BE5 = .; /* 2024BE5 */
+ . += 0x1;
-gCurrentMove: @ 2024BE6
- .space 0x2
+gCurrentMove = .; /* 2024BE6 */
+ . += 0x2;
-gChosenMove: @ 2024BE8
- .space 0x2
+gChosenMove = .; /* 2024BE8 */
+ . += 0x2;
-gRandomMove: @ 2024BEA
- .space 0x2
+gRandomMove = .; /* 2024BEA */
+ . += 0x2;
-gBattleMoveDamage: @ 2024BEC
- .space 0x4
+gBattleMoveDamage = .; /* 2024BEC */
+ . += 0x4;
-gHP_dealt: @ 2024BF0
- .space 0x4
+gHpDealt = .; /* 2024BF0 */
+ . += 0x4;
-gTakenDmg: @ 2024BF4
- .space 0x10
+gTakenDmg = .; /* 2024BF4 */
+ . += 0x10;
-gLastUsedItem: @ 2024C04
- .space 0x2
+gLastUsedItem = .; /* 2024C04 */
+ . += 0x2;
-gLastUsedAbility: @ 2024C06
- .space 0x1
+gLastUsedAbility = .; /* 2024C06 */
+ . += 0x1;
-gBankAttacker: @ 2024C07
- .space 0x1
+gBankAttacker = .; /* 2024C07 */
+ . += 0x1;
-gBankTarget: @ 2024C08
- .space 0x1
+gBankTarget = .; /* 2024C08 */
+ . += 0x1;
-gBank1: @ 2024C09
- .space 0x1
+gBank1 = .; /* 2024C09 */
+ . += 0x1;
-gEffectBank: @ 2024C0A
- .space 0x1
+gEffectBank = .; /* 2024C0A */
+ . += 0x1;
-gStringBank: @ 2024C0B
- .space 0x1
+gStringBank = .; /* 2024C0B */
+ . += 0x1;
-gAbsentBankFlags: @ 2024C0C
- .space 0x1
+gAbsentBankFlags = .; /* 2024C0C */
+ . += 0x1;
-gCritMultiplier: @ 2024C0D
- .space 0x1
+gCritMultiplier = .; /* 2024C0D */
+ . += 0x1;
-gMultiHitCounter: @ 2024C0E
- .space 0x2
+gMultiHitCounter = .; /* 2024C0E */
+ . += 0x2;
-gBattlescriptCurrInstr: @ 2024C10
- .space 0x8
+gBattlescriptCurrInstr = .; /* 2024C10 */
+ . += 0x8;
-gActionForBanks: @ 2024C18
- .space 0x4
+gActionForBanks = .; /* 2024C18 */
+ . += 0x4;
-gUnknown_02024C1C: @ 2024C1C
- .space 0x10
+gUnknown_02024C1C = .; /* 2024C1C */
+ . += 0x10;
-gUnknown_02024C2C: @ 2024C2C
- .space 0x8
+gUnknown_02024C2C = .; /* 2024C2C */
+ . += 0x8;
-gLastUsedMove: @ 2024C34
- .space 0x8
+gLastUsedMove = .; /* 2024C34 */
+ . += 0x8;
-gMoveHitWith: @ 2024C3C
- .space 0x8
+gLastLandedMoves = .; /* 2024C3C */
+ . += 0x8;
-gUnknown_02024C44: @ 2024C44
- .space 0x8
+gLastHitByType = .; /* 2024C44 */
+ . += 0x8;
-gUnknown_02024C4C: @ 2024C4C
- .space 0x8
+gUnknown_02024C4C = .; /* 2024C4C */
+ . += 0x8;
-gLockedMoves: @ 2024C54
- .space 0x8
+gLockedMoves = .; /* 2024C54 */
+ . += 0x8;
-gUnknown_02024C5C: @ 2024C5C
- .space 0x4
+gUnknown_02024C5C = .; /* 2024C5C */
+ . += 0x4;
-gChosenMovesByBanks: @ 2024C60
- .space 0x8
+gChosenMovesByBanks = .; /* 2024C60 */
+ . += 0x8;
-gBattleMoveFlags: @ 2024C68
- .space 0x4
+gBattleMoveFlags = .; /* 2024C68 */
+ . += 0x4;
-gHitMarker: @ 2024C6C
- .space 0x4
+gHitMarker = .; /* 2024C6C */
+ . += 0x4;
-gUnknown_02024C70: @ 2024C70
- .space 0x4
+gUnknown_02024C70 = .; /* 2024C70 */
+ . += 0x4;
-gTakenDmgBanks: @ 2024C74
- .space 0x4
+gTakenDmgBanks = .; /* 2024C74 */
+ . += 0x4;
-gUnknown_02024C78: @ 2024C78
- .space 0x2
+gUnknown_02024C78 = .; /* 2024C78 */
+ . += 0x2;
-gSideAffecting: @ 2024C7A
- .space 0x6
+gSideAffecting = .; /* 2024C7A */
+ . += 0x6;
-gSideTimers: @ 2024C80
- .space 0x18
+gSideTimers = .; /* 2024C80 */
+ . += 0x18;
-gStatuses3: @ 2024C98
- .space 0x10
+gStatuses3 = .; /* 2024C98 */
+ . += 0x10;
-gDisableStructs: @ 2024CA8
- .space 0x70
+gDisableStructs = .; /* 2024CA8 */
+ . += 0x70;
-gPauseCounterBattle: @ 2024D18
- .space 0x2
+gPauseCounterBattle = .; /* 2024D18 */
+ . += 0x2;
-gPaydayMoney: @ 2024D1A
- .space 0x2
+gPaydayMoney = .; /* 2024D1A */
+ . += 0x2;
-gRandomTurnNumber: @ 2024D1C
- .space 0x2
+gRandomTurnNumber = .; /* 2024D1C */
+ . += 0x2;
-gBattleCommunication: @ 2024D1E
- .space 0x1
+gBattleCommunication = .; /* 2024D1E */
+ . += 0x1;
-gUnknown_02024D1F: @ 2024D1F
- .space 0x7
+gUnknown_02024D1F = .; /* 2024D1F */
+ . += 0x7;
-gBattleOutcome: @ 2024D26
- .space 0x2
+gBattleOutcome = .; /* 2024D26 */
+ . += 0x2;
-gProtectStructs: @ 2024D28
- .space 0x40
+gProtectStructs = .; /* 2024D28 */
+ . += 0x40;
-gSpecialStatuses: @ 2024D68
- .space 0x50
+gSpecialStatuses = .; /* 2024D68 */
+ . += 0x50;
-gBattleWeather: @ 2024DB8
- .space 0x4
+gBattleWeather = .; /* 2024DB8 */
+ . += 0x4;
-gWishFutureKnock: @ 2024DBC
- .space 0x20
+gWishFutureKnock = .; /* 2024DBC */
+ . += 0x20;
-gUnknown_02024DDC: @ 2024DDC
- .space 0xC
+gUnknown_02024DDC = .; /* 2024DDC */
+ . += 0xC;
-gUnknown_02024DE8: @ 2024DE8
- .space 0x2
+gUnknown_02024DE8 = .; /* 2024DE8 */
+ . += 0x2;
-gSentPokesToOpponent: @ 2024DEA
- .space 0x2
+gSentPokesToOpponent = .; /* 2024DEA */
+ . += 0x2;
-gDynamicBasePower: @ 2024DEC
- .space 0x2
+gDynamicBasePower = .; /* 2024DEC */
+ . += 0x2;
-gExpShareExp: @ 2024DEE
- .space 0x2
-
-gEnigmaBerries: @ 2024DF0
- .space 0x8
-
-gUnknown_02024DF8: @ 2024DF8
- .space 0x68
-
-gActionSelectionCursor: @ 2024E60
- .space 0x4
-
-gMoveSelectionCursor: @ 2024E64
- .space 0x4
-
-gUnknown_02024E68: @ 2024E68
- .space 0x4
-
-gBankInMenu: @ 2024E6C
- .space 0x1
-
-gDoingBattleAnim: @ 2024E6D
- .space 0x3
-
-gTransformedPersonalities: @ 2024E70
- .space 0x10
-
-gBattleMovePower: @ 2024E80
- .space 0x2
-
-gMoveToLearn: @ 2024E82
- .space 0x2
-
-gBattleMonForms: @ 2024E84
- .space 0x4
-
- .include "src/pokemon/pokemon_1.o"
- .include "src/pokemon/pokemon_2.o"
- .include "src/engine/load_save.o"
-
-@ trade
-
-gUnknown_020296CC: @ 20296CC
- .space 0x34
-
-gUnknown_02029700: @ 2029700
- .space 0xD8
-
-gUnknown_020297D8: @ 20297D8
- .space 0x4
-
- .include "src/scene/berry_blender.o"
- .include "src/scene/new_game.o"
- .include "src/field/overworld.o"
- .include "src/field/fieldmap.o"
- .include "src/field/field_camera.o"
- .include "src/field/field_player_avatar.o"
- .include "src/field/field_message_box.o"
- .include "src/engine/script.o"
- .include "src/field/scrcmd.o"
- .include "src/field/field_control_avatar.o"
- .include "src/field/event_data.o"
-
-@ party_menu
-
- .align 2
-gUnknown_0202E8F4: @ 202E8F4
- .space 0x1
-
-gUnknown_0202E8F5: @ 202E8F5
- .space 0x1
-
-gUnknown_0202E8F6: @ 202E8F6
- .space 0x2
-
-gUnknown_0202E8F8: @ 202E8F8
- .space 0x2
-
-gPartyMenuType: @ 202E8FA
- .space 0x2
-
- .include "src/field/start_menu.o"
- .include "src/engine/menu.o"
- .include "src/engine/tileset_anim.o"
- .include "src/engine/palette.o"
- .include "src/engine/sound.o"
- .include "src/battle/battle_anim.o"
- .include "src/rom_8077ABC.o"
- .include "src/scene/title_screen.o"
-
-@ field_weather
-
- .align 2
-gWeather: @ 202F7E8
- .space 0x200
-
-gUnknown_0202F9E8: @ 202F9E8
- .space 0x260
-
-gUnknown_0202FC48: @ 202FC48
- .space 0x2F0
-
-gUnknown_0202FF38: @ 202FF38
- .space 0x20
-
-gUnknown_0202FF58: @ 202FF58
- .space 0x4
-
- .include "src/battle/battle_setup.o"
- .include "src/field/wild_encounter.o"
- .include "src/field/field_effect.o"
- .include "src/scanline_effect.o"
- .include "src/pokemon/pokemon_menu.o"
- .include "src/pokemon/pokedex.o"
- .include "src/engine/trainer_card.o"
- .include "src/pokemon/pokemon_storage_system.o"
- .include "src/pokemon/pokemon_storage_system_2.o"
- .include "src/pokemon/pokemon_storage_system_3.o"
- .include "src/pokemon/pokemon_storage_system_4.o"
- .include "src/pokemon/pokemon_storage_system_5.o"
-
-@ pokemon_summary_screen
-
-gUnknown_020384F0: @ 20384F0
- .space 0x4
-
-gUnknown_020384F4: @ 20384F4
- .space 0x4
-
- .include "src/field/script_movement.o"
- .include "src/field/map_name_popup.o"
- .include "src/field/item_menu.o"
-
-@ contest
-
- .align 2
-gUnknown_0203856C: @ 203856C
- .space 0x4
-
-gContestMons: @ 2038570
- .space 0x100
-
-gUnknown_02038670: @ 2038670
- .space 0x8
-
-gUnknown_02038678: @ 2038678
- .space 0x8
-
-gUnknown_02038680: @ 2038680
- .space 0x8
-
-gUnknown_02038688: @ 2038688
- .space 0x8
-
-gContestFinalStandings: @ 2038690
- .space 0x4
-
-gUnknown_02038694: @ 2038694
- .space 0x1
-
-gContestPlayerMonIndex: @ 2038695
- .space 0x1
-
-gUnknown_02038696: @ 2038696
- .space 0x4
-
-gIsLinkContest: @ 203869A
- .space 0x1
-
-gUnknown_0203869B: @ 203869B
- .space 0x1
-
-gSpecialVar_ContestCategory: @ 203869C
- .space 0x2
-
-gSpecialVar_ContestRank: @ 203869E
- .space 0x2
-
- .include "src/field/shop.o"
- .include "src/field/money.o"
-
-@ record_mixing
-
- .align 2
-gUnknown_02038738: @ 2038738
- .space 0x78
-
- .include "src/debug/sound_check_menu.o"
-
-@ secret_base
-
- .align 2
-gUnknown_020387DC: @ 20387DC
- .space 0x4
-
-@ tv
-
- .include "src/field/tv.o"
-
-@ fldeff_80C5CD4
-
- .align 2
-gUnknown_020387EC: @ 20387EC
- .space 0x4
-
- .include "src/field/rotating_gate.o"
- .include "src/field/safari_zone.o"
-
-@ easy_chat
-
-gUnknown_020388AC: @ 20388AC
- .space 0x4
-
-@ pokenav
-
-gUnknown_020388B0: @ 20388B0
- .space 0x4
-
-gUnknown_020388B4: @ 20388B4
- .space 0x4
-
- .include "src/pokemon/mon_markings.o"
- .include "src/field/mauville_man.o"
- .include "src/field/menu_helpers.o"
- .include "src/field/region_map.o"
- .include "src/field/decoration.o"
- .include "src/battle/battle_ai.o"
- .include "src/rom6.o"
- .include "src/field/pokeblock.o"
- .include "src/field/field_specials.o"
-
-@ pokedex_area_screen
-
- .align 2
-gUnknown_02039260: @ 2039260
- .space 0x2
-
-gUnknown_02039262: @ 2039262
- .space 0x2
-
-gUnknown_02039264: @ 2039264
- .space 0x2
-
-gUnknown_02039266: @ 2039266
- .space 0x2
-
-gUnknown_02039268: @ 2039268
- .space 0x2
-
-gUnknown_0203926A: @ 203926A
- .space 0x2
-
-@ battle_message
-
-gAbilitiesPerBank: @ 203926C
- .space 0x4
-
- .include "src/field/choose_party.o"
- .include "src/scene/cable_car.o"
- .include "src/engine/save.o"
- .include "src/engine/mystery_event_script.o"
- .include "src/field/roamer.o"
- .include "src/field/use_pokeblock.o"
- .include "src/field/player_pc.o"
- .include "src/scene/intro.o"
- .include "src/scene/hall_of_fame.o"
- .include "src/scene/credits.o"
- .include "src/field/lottery_corner.o"
- .include "src/field/berry_tag_screen.o"
- .include "src/engine/mystery_event_menu.o"
- .include "src/engine/save_failed_screen.o"
- .include "src/pokemon/pokeblock_feed.o"
-
-@ intro_credits_graphics
-
-gUnknown_02039358: @ 2039358
- .space 0x2
-
-gUnknown_0203935A: @ 203935A
- .space 0x2
-
-gUnknown_0203935C: @ 203935C
- .space 0x4
-
-@ ???
-
-gTileBuffer: @ 2039360
- .space 0x100
-
-gUnknown_02039460: @ 2039460
- .space 0x300
-
-gUnknown_02039760: @ 2039760
- .space 0xc00
-
- .include "src/engine/menu_cursor.o"
+gExpShareExp = .; /* 2024DEE */
+ . += 0x2;
+
+gEnigmaBerries = .; /* 2024DF0 */
+ . += 0x8;
+
+gUnknown_02024DF8 = .; /* 2024DF8 */
+ . += 0x68;
+
+gActionSelectionCursor = .; /* 2024E60 */
+ . += 0x4;
+
+gMoveSelectionCursor = .; /* 2024E64 */
+ . += 0x4;
+
+gUnknown_02024E68 = .; /* 2024E68 */
+ . += 0x4;
+
+gBankInMenu = .; /* 2024E6C */
+ . += 0x1;
+
+gDoingBattleAnim = .; /* 2024E6D */
+ . += 0x3;
+
+gTransformedPersonalities = .; /* 2024E70 */
+ . += 0x10;
+
+gBattleMovePower = .; /* 2024E80 */
+ . += 0x2;
+
+gMoveToLearn = .; /* 2024E82 */
+ . += 0x2;
+
+gBattleMonForms = .; /* 2024E84 */
+ . += 0x4;
+
+. = ALIGN(4); src/pokemon/pokemon_1.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_2.o(ewram_data);
+. = ALIGN(4); src/engine/load_save.o(ewram_data);
+. = ALIGN(4); src/engine/trade.o(ewram_data);
+. = ALIGN(4); src/scene/berry_blender.o(ewram_data);
+. = ALIGN(4); src/scene/new_game.o(ewram_data);
+. = ALIGN(4); src/field/overworld.o(ewram_data);
+. = ALIGN(4); src/field/fieldmap.o(ewram_data);
+. = ALIGN(4); src/field/field_camera.o(ewram_data);
+. = ALIGN(4); src/field/field_player_avatar.o(ewram_data);
+. = ALIGN(4); src/field/field_message_box.o(ewram_data);
+. = ALIGN(4); src/engine/script.o(ewram_data);
+. = ALIGN(4); src/field/scrcmd.o(ewram_data);
+. = ALIGN(4); src/field/field_control_avatar.o(ewram_data);
+. = ALIGN(4); src/field/event_data.o(ewram_data);
+. = ALIGN(4); src/field/party_menu.o(ewram_data);
+. = ALIGN(4); src/field/start_menu.o(ewram_data);
+. = ALIGN(4); src/engine/menu.o(ewram_data);
+. = ALIGN(4); src/engine/tileset_anim.o(ewram_data);
+. = ALIGN(4); src/engine/palette.o(ewram_data);
+. = ALIGN(4); src/engine/sound.o(ewram_data);
+. = ALIGN(4); src/battle/battle_anim.o(ewram_data);
+. = ALIGN(4); src/rom_8077ABC.o(ewram_data);
+. = ALIGN(4); src/scene/title_screen.o(ewram_data);
+. = ALIGN(4); src/field/field_weather.o(ewram_data);
+. = ALIGN(4); src/battle/battle_setup.o(ewram_data);
+. = ALIGN(4); src/field/wild_encounter.o(ewram_data);
+. = ALIGN(4); src/field/field_effect.o(ewram_data);
+. = ALIGN(4); src/scanline_effect.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_menu.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokedex.o(ewram_data);
+. = ALIGN(4); src/engine/trainer_card.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_storage_system.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_storage_system_2.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_storage_system_3.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_storage_system_4.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_storage_system_5.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokemon_summary_screen.o(ewram_data);
+. = ALIGN(4); src/field/script_movement.o(ewram_data);
+. = ALIGN(4); src/field/map_name_popup.o(ewram_data);
+. = ALIGN(4); src/field/item_menu.o(ewram_data);
+. = ALIGN(4); src/contest.o(ewram_data);
+. = ALIGN(4); src/field/shop.o(ewram_data);
+. = ALIGN(4); src/field/fldeff_escalator.o(ewram_data);
+. = ALIGN(4); src/field/money.o(ewram_data);
+. = ALIGN(4); src/engine/record_mixing.o(ewram_data);
+. = ALIGN(4); src/debug/sound_check_menu.o(ewram_data);
+. = ALIGN(4); src/field/secret_base.o(ewram_data);
+. = ALIGN(4); src/field/tv.o(ewram_data);
+. = ALIGN(4); src/field/pc_screen_effect.o(ewram_data);
+. = ALIGN(4); src/field/rotating_gate.o(ewram_data);
+. = ALIGN(4); src/field/safari_zone.o(ewram_data);
+. = ALIGN(4); src/easy_chat_2.o(ewram_data);
+
+/* pokenav */
+
+ . = ALIGN(4);
+gUnknown_020388B0 = .; /* 20388B0 */
+ . += 0x4;
+
+gUnknown_020388B4 = .; /* 20388B4 */
+ . += 0x4;
+
+. = ALIGN(4); src/pokemon/mon_markings.o(ewram_data);
+. = ALIGN(4); src/field/mauville_man.o(ewram_data);
+. = ALIGN(4); src/field/menu_helpers.o(ewram_data);
+. = ALIGN(4); src/field/region_map.o(ewram_data);
+. = ALIGN(4); src/field/decoration.o(ewram_data);
+. = ALIGN(4); src/battle/battle_ai.o(ewram_data);
+. = ALIGN(4); src/rom6.o(ewram_data);
+. = ALIGN(4); src/field/pokeblock.o(ewram_data);
+. = ALIGN(4); src/field/field_specials.o(ewram_data);
+
+/* pokedex_area_screen */
+
+ . = ALIGN(4);
+gUnknown_02039260 = .; /* 2039260 */
+ . += 0x2;
+
+gUnknown_02039262 = .; /* 2039262 */
+ . += 0x2;
+
+gUnknown_02039264 = .; /* 2039264 */
+ . += 0x2;
+
+gUnknown_02039266 = .; /* 2039266 */
+ . += 0x2;
+
+gUnknown_02039268 = .; /* 2039268 */
+ . += 0x2;
+
+gUnknown_0203926A = .; /* 203926A */
+ . += 0x2;
+
+. = ALIGN(4); src/battle/battle_message.o(ewram_data);
+. = ALIGN(4); src/field/choose_party.o(ewram_data);
+. = ALIGN(4); src/scene/cable_car.o(ewram_data);
+. = ALIGN(4); src/engine/save.o(ewram_data);
+. = ALIGN(4); src/engine/mystery_event_script.o(ewram_data);
+. = ALIGN(4); src/field/roamer.o(ewram_data);
+. = ALIGN(4); src/field/use_pokeblock.o(ewram_data);
+. = ALIGN(4); src/field/player_pc.o(ewram_data);
+. = ALIGN(4); src/scene/intro.o(ewram_data);
+. = ALIGN(4); src/scene/hall_of_fame.o(ewram_data);
+. = ALIGN(4); src/scene/credits.o(ewram_data);
+. = ALIGN(4); src/field/lottery_corner.o(ewram_data);
+. = ALIGN(4); src/field/berry_tag_screen.o(ewram_data);
+. = ALIGN(4); src/engine/mystery_event_menu.o(ewram_data);
+. = ALIGN(4); src/engine/save_failed_screen.o(ewram_data);
+. = ALIGN(4); src/pokemon/pokeblock_feed.o(ewram_data);
+. = ALIGN(4); src/scene/intro_credits_graphics.o(ewram_data);
+
+/* ??? */
+
+ . = ALIGN(16);
+gTileBuffer = .; /* 2039360 */
+ . += 0x100;
+
+gUnknown_02039460 = .; /* 2039460 */
+ . += 0x300;
+
+gUnknown_02039760 = .; /* 2039760 */
+ . += 0xC00;
+
+. = ALIGN(4); src/engine/menu_cursor.o(ewram_data);