diff options
94 files changed, 7470 insertions, 12729 deletions
diff --git a/.travis.yml b/.travis.yml index 1c1114e49..ca2b5a12a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,7 @@ install: - cd agbcc && ./build.sh && ./install.sh $TRAVIS_BUILD_DIR script: - cd $TRAVIS_BUILD_DIR + - ./whitespace.sh - ./build_tools.sh - make -j2 compare_ruby - make -j2 compare_ruby_rev1 @@ -28,3 +29,4 @@ script: - make -j2 compare_sapphire - make -j2 compare_sapphire_rev1 - make -j2 compare_sapphire_rev2 + - make -j2 ruby_de @@ -26,7 +26,7 @@ RAMSCRGEN := tools/ramscrgen/ramscrgen REVISION := 0 -VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 +VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 ruby_de # Clear the default suffixes. .SUFFIXES: @@ -123,30 +123,36 @@ $1_OBJS_REL := $$($1_OBJS_REL:sound/%=../../sound/%) $$($1_C_OBJS): VERSION := $2 $$($1_C_OBJS): REVISION := $3 +$$($1_C_OBJS): LANGUAGE := $4 build/$1/%.o : %.c $$$$(c_dep) - @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) $$< -o build/$1/$$*.i + @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i @$$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s @printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s $$(AS) $$(ASFLAGS) -o $$@ build/$1/$$*.s $$($1_ASM_OBJS): VERSION := $2 $$($1_ASM_OBJS): REVISION := $3 +$$($1_ASM_OBJS): LANGUAGE := $4 build/$1/asm/%.o: asm/%.s $$$$(asm_dep) - $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) -o $$@ $$< + $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) --defsym $$(LANGUAGE)=1 -o $$@ $$< $$($1_DATA_ASM_OBJS): VERSION := $2 $$($1_DATA_ASM_OBJS): REVISION := $3 +$$($1_DATA_ASM_OBJS): LANGUAGE := $4 build/$1/data/%.o: data/%.s $$$$(asm_dep) - $$(PREPROC) $$< charmap.txt | $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) --defsym $$(LANGUAGE)=1 -o $$@ +build/$1/sym_bss.ld: LANGUAGE := $4 build/$1/sym_bss.ld: sym_bss.txt - cd build/$1 && ../../$$(RAMSCRGEN) .bss ../../sym_bss.txt >sym_bss.ld + cd build/$1 && ../../$$(RAMSCRGEN) .bss ../../sym_bss.txt $$(LANGUAGE) >sym_bss.ld +build/$1/sym_common.ld: LANGUAGE := $4 build/$1/sym_common.ld: sym_common.txt $$($1_C_OBJS) $$(wildcard common_syms/*.txt) - cd build/$1 && ../../$$(RAMSCRGEN) COMMON ../../sym_common.txt -c src,../../common_syms >sym_common.ld + cd build/$1 && ../../$$(RAMSCRGEN) COMMON ../../sym_common.txt $$(LANGUAGE) -c src,../../common_syms >sym_common.ld +build/$1/sym_ewram.ld: LANGUAGE := $4 build/$1/sym_ewram.ld: sym_ewram.txt - cd build/$1 && ../../$$(RAMSCRGEN) ewram_data ../../sym_ewram.txt >sym_ewram.ld + cd build/$1 && ../../$$(RAMSCRGEN) ewram_data ../../sym_ewram.txt $$(LANGUAGE) >sym_ewram.ld build/$1/ld_script.ld: ld_script.txt build/$1/sym_bss.ld build/$1/sym_common.ld build/$1/sym_ewram.ld cd build/$1 && sed -f ../../ld_script.sed ../../ld_script.txt | sed "s#tools/#../../tools/#g" | sed "s#sound/#../../sound/#g" >ld_script.ld @@ -164,9 +170,10 @@ $1: poke$1.gba @: endef -$(eval $(call VERSION_RULES,ruby,RUBY,0)) -$(eval $(call VERSION_RULES,ruby_rev1,RUBY,1)) -$(eval $(call VERSION_RULES,ruby_rev2,RUBY,2)) -$(eval $(call VERSION_RULES,sapphire,SAPPHIRE,0)) -$(eval $(call VERSION_RULES,sapphire_rev1,SAPPHIRE,1)) -$(eval $(call VERSION_RULES,sapphire_rev2,SAPPHIRE,2)) +$(eval $(call VERSION_RULES,ruby,RUBY,0,ENGLISH)) +$(eval $(call VERSION_RULES,ruby_rev1,RUBY,1,ENGLISH)) +$(eval $(call VERSION_RULES,ruby_rev2,RUBY,2,ENGLISH)) +$(eval $(call VERSION_RULES,sapphire,SAPPHIRE,0,ENGLISH)) +$(eval $(call VERSION_RULES,sapphire_rev1,SAPPHIRE,1,ENGLISH)) +$(eval $(call VERSION_RULES,sapphire_rev2,SAPPHIRE,2,ENGLISH)) +$(eval $(call VERSION_RULES,ruby_de,RUBY,0,GERMAN)) diff --git a/asm/battle_10.s b/asm/battle_10.s index f4a9aa486..f7844a25a 100644 --- a/asm/battle_10.s +++ b/asm/battle_10.s @@ -2257,7 +2257,7 @@ sub_8039294: @ 8039294 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _080393D8 @ =gUnknown_02024E84 + ldr r1, _080393D8 @ =gBattleMonForms adds r2, r1 ldrb r1, [r2] bl StartSpriteAnim @@ -2297,7 +2297,7 @@ _080393C8: .4byte gUnknown_02024E8C _080393CC: .4byte gUnknown_02024BE0 _080393D0: .4byte gSprites _080393D4: .4byte 0x0000ff10 -_080393D8: .4byte gUnknown_02024E84 +_080393D8: .4byte gBattleMonForms _080393DC: .4byte gUnknown_03004330 _080393E0: .4byte sub_8037A74 thumb_func_end sub_8039294 @@ -2460,7 +2460,7 @@ sub_8039430: @ 8039430 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _080395AC @ =gUnknown_02024E84 + ldr r1, _080395AC @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -2511,7 +2511,7 @@ _0803959C: .4byte gUnknown_0300434C _080395A0: .4byte gUnknown_02024E8C _080395A4: .4byte gUnknown_02024BE0 _080395A8: .4byte gSprites -_080395AC: .4byte gUnknown_02024E84 +_080395AC: .4byte gBattleMonForms _080395B0: .4byte SpriteCallbackDummy thumb_func_end sub_8039430 diff --git a/asm/battle_2.s b/asm/battle_2.s index ecfb58ae8..004d1eadf 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -196,7 +196,7 @@ _0800E97E: ldr r1, _0800E9D8 @ =gTrainerBattleOpponent ldrh r1, [r1] bl sub_800F8E8 - bl sub_8040C38 + bl SetWildMonHeldItem _0800E998: ldr r0, _0800E9DC @ =gMain ldr r1, _0800E9E0 @ =0x0000043d @@ -3528,7 +3528,7 @@ _08010430: cmp r4, r0 @ Check if pokemon species is Castform bne _08010454 ldr r0, _0801044C @ =gUnknownCastformCoords_0837F598 - ldr r1, _08010450 @ =gUnknown_02024E84 + ldr r1, _08010450 @ =gBattleMonForms adds r1, r6, r1 ldrb r1, [r1] lsls r1, 2 @@ -3538,7 +3538,7 @@ _08010430: .align 2, 0 _08010448: .4byte SPECIES_CASTFORM _0801044C: .4byte gUnknownCastformCoords_0837F598 -_08010450: .4byte gUnknown_02024E84 +_08010450: .4byte gBattleMonForms _08010454: movs r0, 0xCE lsls r0, 1 @@ -3611,7 +3611,7 @@ _080104C8: lsls r0, 24 lsrs r0, 22 adds r0, r1 - ldr r2, _0801051C @ =gUnknown_02024E84 + ldr r2, _0801051C @ =gBattleMonForms movs r3, 0x2E ldrsh r1, [r4, r3] adds r1, r2 @@ -3631,7 +3631,7 @@ _080104F6: subs r0, 0x1 cmp r0, 0 bge _080104F6 - ldr r0, _0801051C @ =gUnknown_02024E84 + ldr r0, _0801051C @ =gBattleMonForms movs r2, 0x2E ldrsh r1, [r4, r2] adds r1, r0 @@ -3644,7 +3644,7 @@ _08010510: bx r0 .align 2, 0 _08010518: .4byte gUnknown_081FAF4C -_0801051C: .4byte gUnknown_02024E84 +_0801051C: .4byte gBattleMonForms thumb_func_end sub_8010494 thumb_func_start sub_8010520 @@ -10752,14 +10752,14 @@ _08013EE0: cmp r0, 0 beq _08013F1C ldr r0, _08013F50 @ =gEnemyParty - bl sub_8134504 + bl UpdateRoamerHPStatus ldrb r0, [r5] cmp r0, 0x1 beq _08013F18 cmp r0, 0x7 bne _08013F1C _08013F18: - bl sub_813452C + bl SetRoamerInactive _08013F1C: movs r0, 0x5A bl m4aSongNumStop diff --git a/asm/battle_3.s b/asm/battle_3.s index 7805bd722..4252e7222 100644 --- a/asm/battle_3.s +++ b/asm/battle_3.s @@ -11669,7 +11669,7 @@ sub_801B928: @ 801B928 adds r2, r5, 0 adds r2, 0x3C adds r1, r2 - bl sub_8040AD0 + bl IsOtherTrainer lsls r0, 24 cmp r0, 0 beq _0801B9DA diff --git a/asm/battle_4.s b/asm/battle_4.s index 6b89e2b6a..c1a6513be 100644 --- a/asm/battle_4.s +++ b/asm/battle_4.s @@ -8832,7 +8832,7 @@ _080203B8: muls r0, r1 ldr r1, _08020400 @ =gPlayerParty adds r0, r1 - bl sub_8040AA4 + bl IsTradedMon lsls r0, 24 cmp r0, 0 beq _08020404 @@ -15948,7 +15948,7 @@ _08023CC8: lsls r0, 16 lsrs r4, r0, 16 adds r0, r4, 0 - bl sub_8040A00 + bl IsHMMove2 cmp r0, 0 beq _08023D20 ldr r0, _08023D14 @ =0x0000013f diff --git a/asm/battle_6.s b/asm/battle_6.s index fbd1db0bc..f277fb7f2 100644 --- a/asm/battle_6.s +++ b/asm/battle_6.s @@ -2530,7 +2530,7 @@ sub_802F934: @ 802F934 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _0802FA98 @ =gUnknown_02024E84 + ldr r1, _0802FA98 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -2581,7 +2581,7 @@ _0802FA88: .4byte gUnknown_0300434C _0802FA8C: .4byte gUnknown_02024E8C _0802FA90: .4byte gUnknown_02024BE0 _0802FA94: .4byte gSprites -_0802FA98: .4byte gUnknown_02024E84 +_0802FA98: .4byte gBattleMonForms _0802FA9C: .4byte SpriteCallbackDummy thumb_func_end sub_802F934 @@ -3673,104 +3673,7 @@ _08030378: bx r0 thumb_func_end dp01t_11_1_message_for_player_only - thumb_func_start sub_803037C -sub_803037C: @ 803037C - push {r4,lr} - sub sp, 0x8 - ldr r1, _08030434 @ =gUnknown_030042A4 - movs r0, 0 - strh r0, [r1] - ldr r1, _08030438 @ =gUnknown_030042A0 - movs r0, 0xA0 - strh r0, [r1] - ldr r4, _0803043C @ =gUnknown_03004210 - movs r0, 0x1B - str r0, [sp] - movs r0, 0x12 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0x2 - movs r3, 0xF - bl FillWindowRect - movs r0, 0x10 - str r0, [sp] - movs r0, 0x26 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0x2 - movs r3, 0x23 - bl FillWindowRect - ldr r1, _08030440 @ =gUnknown_03004330 - ldr r0, _08030444 @ =gUnknown_02024A60 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030448 @ =sub_802C098 - str r1, [r0] - ldr r1, _0803044C @ =gUnknown_08400CF3 - movs r2, 0xC8 - lsls r2, 1 - movs r0, 0x23 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x12 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _08030450 @ =0x0000ffff - ldr r3, _08030454 @ =0x00002d9f - movs r0, 0 - str r0, [sp] - movs r2, 0xC - bl sub_814A5C0 - movs r4, 0 -_080303EC: - lsls r0, r4, 24 - lsrs r0, 24 - bl nullsub_8 - adds r4, 0x1 - cmp r4, 0x3 - ble _080303EC - ldr r1, _08030458 @ =gUnknown_02024E60 - ldr r0, _08030444 @ =gUnknown_02024A60 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 - ldr r0, _0803045C @ =gUnknown_08400CA8 - bl get_battle_strings_ - ldr r4, _0803043C @ =gUnknown_03004210 - ldr r1, _08030460 @ =gUnknown_020238CC - movs r2, 0xDC - lsls r2, 1 - movs r0, 0x23 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x2 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030434: .4byte gUnknown_030042A4 -_08030438: .4byte gUnknown_030042A0 -_0803043C: .4byte gUnknown_03004210 -_08030440: .4byte gUnknown_03004330 -_08030444: .4byte gUnknown_02024A60 -_08030448: .4byte sub_802C098 -_0803044C: .4byte gUnknown_08400CF3 -_08030450: .4byte 0x0000ffff -_08030454: .4byte 0x00002d9f -_08030458: .4byte gUnknown_02024E60 -_0803045C: .4byte gUnknown_08400CA8 -_08030460: .4byte gUnknown_020238CC - thumb_func_end sub_803037C +.section .text_8030464 thumb_func_start nullsub_42 nullsub_42: @ 8030464 diff --git a/asm/battle_7.s b/asm/battle_7.s index 79a0bca2b..593a5bbb1 100644 --- a/asm/battle_7.s +++ b/asm/battle_7.s @@ -280,7 +280,7 @@ move_anim_start_t3: @ 80314C8 ands r0, r7 cmp r0, 0 beq _0803150C - ldr r0, _08031508 @ =gUnknown_02024E84 + ldr r0, _08031508 @ =gBattleMonForms adds r0, r6, r0 movs r2, 0x7F adds r1, r7, 0 @@ -289,7 +289,7 @@ move_anim_start_t3: @ 80314C8 movs r0, 0x1 b _080315C2 .align 2, 0 -_08031508: .4byte gUnknown_02024E84 +_08031508: .4byte gBattleMonForms _0803150C: lsls r1, r6, 2 ldr r0, _08031530 @ =0x02017800 @@ -732,7 +732,7 @@ _08031856: adds r0, r5, 0 adds r1, r4, 0 bl sub_800D238 - ldr r0, _080318E8 @ =gUnknown_02024E84 + ldr r0, _080318E8 @ =gBattleMonForms add r0, r9 ldrb r0, [r0] lsls r0, 5 @@ -773,7 +773,7 @@ _080318CE: .align 2, 0 _080318E0: .4byte 0x02000000 _080318E4: .4byte SPECIES_CASTFORM -_080318E8: .4byte gUnknown_02024E84 +_080318E8: .4byte gBattleMonForms _080318EC: .4byte 0x00007fff _080318F0: .4byte gPlttBufferFaded _080318F4: .4byte gPlttBufferUnfaded @@ -896,7 +896,7 @@ _080319BE: adds r0, r5, 0 adds r1, r4, 0 bl sub_800D238 - ldr r0, _08031A50 @ =gUnknown_02024E84 + ldr r0, _08031A50 @ =gBattleMonForms add r0, r9 ldrb r0, [r0] lsls r0, 5 @@ -937,7 +937,7 @@ _08031A36: .align 2, 0 _08031A48: .4byte 0x02000000 _08031A4C: .4byte SPECIES_CASTFORM -_08031A50: .4byte gUnknown_02024E84 +_08031A50: .4byte gBattleMonForms _08031A54: .4byte 0x00007fff _08031A58: .4byte gPlttBufferFaded _08031A5C: .4byte gPlttBufferUnfaded @@ -1675,7 +1675,7 @@ sub_8031FC4: @ 8031FC4 adds r1, r5, 0 movs r2, 0x20 bl LoadPalette - ldr r0, _08032074 @ =gUnknown_02024E84 + ldr r0, _08032074 @ =gBattleMonForms add r0, r8 ldrh r1, [r4] strb r1, [r0] @@ -1715,7 +1715,7 @@ _08032064: .4byte gUnknown_02024BE0 _08032068: .4byte gSprites _0803206C: .4byte 0x02017840 _08032070: .4byte 0xffffebc0 -_08032074: .4byte gUnknown_02024E84 +_08032074: .4byte gBattleMonForms _08032078: .4byte 0x00007fff _0803207C: .4byte gPlttBufferFaded _08032080: .4byte gPlttBufferUnfaded @@ -1949,7 +1949,7 @@ _08032202: adds r0, r6, 0 adds r1, r4, 0 bl sub_800D238 - ldr r0, _0803233C @ =gUnknown_02024E84 + ldr r0, _0803233C @ =gBattleMonForms ldr r1, [sp, 0xC] adds r0, r1, r0 ldrb r0, [r0] @@ -1982,7 +1982,7 @@ _08032288: add r1, r9 adds r0, r1 strh r7, [r0, 0x2] - ldr r0, _0803233C @ =gUnknown_02024E84 + ldr r0, _0803233C @ =gBattleMonForms adds r1, r2, r0 ldr r4, [sp, 0xC] adds r0, r4, r0 @@ -2006,7 +2006,7 @@ _080322C8: adds r0, r1 lsls r0, 2 adds r0, r2 - ldr r1, _0803233C @ =gUnknown_02024E84 + ldr r1, _0803233C @ =gBattleMonForms add r1, r8 ldrb r1, [r1] bl StartSpriteAnim @@ -2033,7 +2033,7 @@ _0803232C: .4byte 0x040000d4 _08032330: .4byte 0x84000200 _08032334: .4byte 0x02000000 _08032338: .4byte SPECIES_CASTFORM -_0803233C: .4byte gUnknown_02024E84 +_0803233C: .4byte gBattleMonForms _08032340: .4byte 0x00007fff _08032344: .4byte gPlttBufferFaded _08032348: .4byte gPlttBufferUnfaded @@ -2192,7 +2192,7 @@ refresh_graphics_maybe: @ 8032464 lsls r0, 2 ldr r1, _080324A0 @ =gSprites adds r4, r0, r1 - ldr r0, _080324A4 @ =gUnknown_02024E84 + ldr r0, _080324A4 @ =gBattleMonForms adds r0, r6, r0 ldrb r1, [r0] adds r0, r4, 0 @@ -2204,7 +2204,7 @@ refresh_graphics_maybe: @ 8032464 b _080324AE .align 2, 0 _080324A0: .4byte gSprites -_080324A4: .4byte gUnknown_02024E84 +_080324A4: .4byte gBattleMonForms _080324A8: adds r0, r6, 0 bl sub_8077F68 @@ -3001,7 +3001,7 @@ sub_8032AA8: @ 8032AA8 movs r3, 0 movs r0, 0 strh r0, [r2, 0x2] - ldr r0, _08032AD8 @ =gUnknown_02024E84 + ldr r0, _08032AD8 @ =gBattleMonForms adds r0, r4, r0 strb r3, [r0] cmp r1, 0 @@ -3014,7 +3014,7 @@ _08032ACC: bx r0 .align 2, 0 _08032AD4: .4byte 0x02017800 -_08032AD8: .4byte gUnknown_02024E84 +_08032AD8: .4byte gBattleMonForms thumb_func_end sub_8032AA8 thumb_func_start nullsub_45 diff --git a/asm/battle_8.s b/asm/battle_8.s index c0a33970f..0e4925dfb 100644 --- a/asm/battle_8.s +++ b/asm/battle_8.s @@ -2323,7 +2323,7 @@ sub_80347B8: @ 80347B8 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08034904 @ =gUnknown_02024E84 + ldr r1, _08034904 @ =gBattleMonForms adds r2, r1 ldrb r1, [r2] bl StartSpriteAnim @@ -2362,7 +2362,7 @@ _080348F4: .4byte gUnknown_02024E8C _080348F8: .4byte gUnknown_02024BE0 _080348FC: .4byte gSprites _08034900: .4byte 0x0000ff10 -_08034904: .4byte gUnknown_02024E84 +_08034904: .4byte gBattleMonForms _08034908: .4byte gUnknown_03004330 _0803490C: .4byte sub_8033018 thumb_func_end sub_80347B8 @@ -2525,7 +2525,7 @@ sub_803495C: @ 803495C adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08034AD8 @ =gUnknown_02024E84 + ldr r1, _08034AD8 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -2576,7 +2576,7 @@ _08034AC8: .4byte gUnknown_0300434C _08034ACC: .4byte gUnknown_02024E8C _08034AD0: .4byte gUnknown_02024BE0 _08034AD4: .4byte gSprites -_08034AD8: .4byte gUnknown_02024E84 +_08034AD8: .4byte gBattleMonForms _08034ADC: .4byte SpriteCallbackDummy thumb_func_end sub_803495C diff --git a/asm/battle_811DA74.s b/asm/battle_811DA74.s index 3bdc8e243..4190b2400 100644 --- a/asm/battle_811DA74.s +++ b/asm/battle_811DA74.s @@ -1301,7 +1301,7 @@ sub_811F6D8: @ 811F6D8 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _0811F7E8 @ =gUnknown_02024E84 + ldr r1, _0811F7E8 @ =gBattleMonForms adds r2, r1 ldrb r1, [r2] bl StartSpriteAnim @@ -1324,7 +1324,7 @@ _0811F7D8: .4byte gUnknown_02024E8C _0811F7DC: .4byte gUnknown_02024BE0 _0811F7E0: .4byte gSprites _0811F7E4: .4byte 0x0000ff10 -_0811F7E8: .4byte gUnknown_02024E84 +_0811F7E8: .4byte gBattleMonForms _0811F7EC: .4byte gUnknown_03004330 _0811F7F0: .4byte sub_811DDE8 thumb_func_end sub_811F6D8 @@ -1492,7 +1492,7 @@ sub_811F864: @ 811F864 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _0811F9C8 @ =gUnknown_02024E84 + ldr r1, _0811F9C8 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -1543,7 +1543,7 @@ _0811F9B8: .4byte gUnknown_0300434C _0811F9BC: .4byte gUnknown_02024E8C _0811F9C0: .4byte gUnknown_02024BE0 _0811F9C4: .4byte gSprites -_0811F9C8: .4byte gUnknown_02024E84 +_0811F9C8: .4byte gBattleMonForms _0811F9CC: .4byte SpriteCallbackDummy thumb_func_end sub_811F864 diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index e0e92a074..be80cc44f 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -54891,7 +54891,7 @@ sub_80E4EF8: @ 80E4EF8 ldr r1, _080E4FD0 @ =gUnknown_081FAF4C lsls r4, 2 adds r4, r1 - ldr r1, _080E4FD4 @ =gUnknown_02024E84 + ldr r1, _080E4FD4 @ =gBattleMonForms adds r0, r1 ldrb r1, [r0] lsls r1, 11 @@ -54962,7 +54962,7 @@ _080E4FBC: .align 2, 0 _080E4FCC: .4byte 0x040000d4 _080E4FD0: .4byte gUnknown_081FAF4C -_080E4FD4: .4byte gUnknown_02024E84 +_080E4FD4: .4byte gBattleMonForms _080E4FD8: .4byte 0x80000400 thumb_func_end sub_80E4EF8 diff --git a/asm/battle_anim_81258BC.s b/asm/battle_anim_81258BC.s index 8293435d0..86abad6f3 100644 --- a/asm/battle_anim_81258BC.s +++ b/asm/battle_anim_81258BC.s @@ -1595,106 +1595,7 @@ _0812BB0C: bx r0 thumb_func_end dp01t_11_6_message_for_player_only - thumb_func_start sub_812BB10 -sub_812BB10: @ 812BB10 - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _0812BBCC @ =gUnknown_030042A4 - movs r2, 0 - strh r2, [r0] - ldr r1, _0812BBD0 @ =gUnknown_030042A0 - movs r0, 0xA0 - strh r0, [r1] - ldr r4, _0812BBD4 @ =gUnknown_03004210 - movs r5, 0 - strb r2, [r4, 0x6] - movs r0, 0x1B - str r0, [sp] - movs r0, 0x12 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0x2 - movs r3, 0xF - bl FillWindowRect_DefaultPalette - movs r0, 0x10 - str r0, [sp] - movs r0, 0x24 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0x2 - movs r3, 0x23 - bl FillWindowRect_DefaultPalette - ldr r1, _0812BBD8 @ =gUnknown_03004330 - ldr r0, _0812BBDC @ =gUnknown_02024A60 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BBE0 @ =bx_battle_menu_t6_2 - str r1, [r0] - ldr r1, _0812BBE4 @ =gUnknown_08400D15 - movs r2, 0xC8 - lsls r2, 1 - movs r0, 0x23 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x12 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _0812BBE8 @ =0x0000ffff - ldr r3, _0812BBEC @ =0x00002d9f - str r5, [sp] - movs r0, 0 - movs r2, 0xC - bl sub_814A5C0 - movs r4, 0 -_0812BB84: - lsls r0, r4, 24 - lsrs r0, 24 - bl nullsub_8 - adds r4, 0x1 - cmp r4, 0x3 - ble _0812BB84 - ldr r1, _0812BBF0 @ =gUnknown_02024E60 - ldr r0, _0812BBDC @ =gUnknown_02024A60 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 - ldr r0, _0812BBF4 @ =gUnknown_08400CBB - bl get_battle_strings_ - ldr r4, _0812BBD4 @ =gUnknown_03004210 - ldr r1, _0812BBF8 @ =gUnknown_020238CC - movs r2, 0xDC - lsls r2, 1 - movs r0, 0x23 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x2 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812BBCC: .4byte gUnknown_030042A4 -_0812BBD0: .4byte gUnknown_030042A0 -_0812BBD4: .4byte gUnknown_03004210 -_0812BBD8: .4byte gUnknown_03004330 -_0812BBDC: .4byte gUnknown_02024A60 -_0812BBE0: .4byte bx_battle_menu_t6_2 -_0812BBE4: .4byte gUnknown_08400D15 -_0812BBE8: .4byte 0x0000ffff -_0812BBEC: .4byte 0x00002d9f -_0812BBF0: .4byte gUnknown_02024E60 -_0812BBF4: .4byte gUnknown_08400CBB -_0812BBF8: .4byte gUnknown_020238CC - thumb_func_end sub_812BB10 +.section .text_812BBFC thumb_func_start sub_812BBFC sub_812BBFC: @ 812BBFC diff --git a/asm/battle_anim_812C144.s b/asm/battle_anim_812C144.s index e89de30c1..28f6f9ada 100644 --- a/asm/battle_anim_812C144.s +++ b/asm/battle_anim_812C144.s @@ -3144,7 +3144,7 @@ _0812D906: ldr r0, _0812D9CC @ =gUnknown_081FAF4C lsls r1, 2 adds r1, r0 - ldr r2, _0812D9D0 @ =gUnknown_02024E84 + ldr r2, _0812D9D0 @ =gBattleMonForms ldr r0, _0812D9D4 @ =gBattleAnimPlayerMonIndex ldrb r0, [r0] adds r0, r2 @@ -3243,7 +3243,7 @@ _0812D9A2: b _0812DA0A .align 2, 0 _0812D9CC: .4byte gUnknown_081FAF4C -_0812D9D0: .4byte gUnknown_02024E84 +_0812D9D0: .4byte gBattleMonForms _0812D9D4: .4byte gBattleAnimPlayerMonIndex _0812D9D8: .4byte 0x040000d4 _0812D9DC: .4byte 0x84000200 diff --git a/asm/battle_anim_8137220.s b/asm/battle_anim_8137220.s index 016548a1f..134e18e6f 100644 --- a/asm/battle_anim_8137220.s +++ b/asm/battle_anim_8137220.s @@ -4812,7 +4812,7 @@ sub_81398BC: @ 81398BC adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08139A24 @ =gUnknown_02024E84 + ldr r1, _08139A24 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -4864,7 +4864,7 @@ _08139A14: .4byte gUnknown_0300434C _08139A18: .4byte gUnknown_02024E8C _08139A1C: .4byte gUnknown_02024BE0 _08139A20: .4byte gSprites -_08139A24: .4byte gUnknown_02024E84 +_08139A24: .4byte gBattleMonForms _08139A28: .4byte SpriteCallbackDummy thumb_func_end sub_81398BC diff --git a/asm/battle_interface.s b/asm/battle_interface.s deleted file mode 100644 index b84342e18..000000000 --- a/asm/battle_interface.s +++ /dev/null @@ -1,5500 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_804373C -sub_804373C: @ 804373C - movs r0, 0x9 - bx lr - thumb_func_end sub_804373C - - thumb_func_start sub_8043740 -sub_8043740: @ 8043740 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r7, r1, 0 - lsls r0, 16 - lsrs r5, r0, 16 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - movs r3, 0 - movs r2, 0 -_0804375C: - lsls r0, r3, 24 - asrs r0, 24 - mov r3, sp - adds r1, r3, r0 - strb r2, [r1] - adds r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _0804375C - movs r3, 0x3 - movs r0, 0x1 - negs r0, r0 - mov r9, r0 - mov r8, sp -_0804377C: - lsls r0, r5, 16 - asrs r6, r0, 16 - cmp r6, 0 - ble _080437AA - lsls r4, r3, 24 - asrs r4, 24 - mov r1, sp - adds r5, r1, r4 - adds r0, r6, 0 - movs r1, 0xA - bl __modsi3 - strb r0, [r5] - adds r0, r6, 0 - movs r1, 0xA - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - subs r4, 0x1 - lsls r4, 24 - lsrs r3, r4, 24 - b _0804377C -_080437AA: - lsls r1, r3, 24 - asrs r0, r1, 24 - cmp r0, r9 - ble _080437CE - movs r4, 0xFF - movs r3, 0x1 - negs r3, r3 -_080437B8: - asrs r2, r1, 24 - mov r5, sp - adds r1, r5, r2 - ldrb r0, [r1] - orrs r0, r4 - strb r0, [r1] - subs r2, 0x1 - lsls r1, r2, 24 - asrs r0, r1, 24 - cmp r0, r3 - bgt _080437B8 -_080437CE: - mov r1, r8 - ldrb r0, [r1, 0x3] - cmp r0, 0xFF - bne _080437DA - movs r0, 0 - strb r0, [r1, 0x3] -_080437DA: - mov r2, r10 - cmp r2, 0 - bne _0804386A - movs r3, 0 - movs r1, 0 - movs r6, 0xFC - lsls r6, 8 - movs r5, 0x1E - mov r12, r5 -_080437EC: - lsls r1, 24 - asrs r2, r1, 24 - mov r0, sp - adds r5, r0, r2 - ldrb r0, [r5] - mov r8, r1 - cmp r0, 0xFF - bne _08043822 - lsls r1, r2, 1 - adds r1, r7 - ldrh r2, [r1] - adds r0, r6, 0 - ands r0, r2 - mov r2, r12 - orrs r0, r2 - strh r0, [r1] - lsls r3, 24 - asrs r1, r3, 23 - adds r1, r7 - adds r1, 0x40 - ldrh r2, [r1] - adds r0, r6, 0 - ands r0, r2 - mov r5, r12 - orrs r0, r5 - strh r0, [r1] - b _08043852 -_08043822: - lsls r2, 1 - adds r2, r7 - ldrh r0, [r2] - adds r1, r6, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x14 - orrs r1, r0 - strh r1, [r2] - lsls r4, r3, 24 - asrs r3, r4, 24 - lsls r2, r3, 1 - adds r2, r7 - adds r2, 0x40 - ldrh r0, [r2] - adds r1, r6, 0 - ands r1, r0 - mov r5, sp - adds r0, r5, r3 - ldrb r0, [r0] - adds r0, 0x34 - orrs r1, r0 - strh r1, [r2] - adds r3, r4, 0 -_08043852: - movs r0, 0x80 - lsls r0, 17 - add r0, r8 - lsrs r1, r0, 24 - movs r2, 0x80 - lsls r2, 17 - adds r0, r3, r2 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _080437EC - b _080438CE -_0804386A: - movs r3, 0 - movs r4, 0xFC - lsls r4, 8 - movs r6, 0x1E -_08043872: - lsls r1, r3, 24 - asrs r2, r1, 24 - mov r3, sp - adds r5, r3, r2 - ldrb r0, [r5] - adds r3, r1, 0 - cmp r0, 0xFF - bne _0804389E - lsls r1, r2, 1 - adds r1, r7 - ldrh r2, [r1] - adds r0, r4, 0 - ands r0, r2 - orrs r0, r6 - strh r0, [r1] - adds r1, 0x40 - ldrh r2, [r1] - adds r0, r4, 0 - ands r0, r2 - orrs r0, r6 - strh r0, [r1] - b _080438C0 -_0804389E: - lsls r2, 1 - adds r2, r7 - ldrh r0, [r2] - adds r1, r4, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x14 - orrs r1, r0 - strh r1, [r2] - adds r2, 0x40 - ldrh r0, [r2] - adds r1, r4, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x34 - orrs r1, r0 - strh r1, [r2] -_080438C0: - movs r5, 0x80 - lsls r5, 17 - adds r0, r3, r5 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _08043872 -_080438CE: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8043740 - - thumb_func_start unref_sub_80438E0 -unref_sub_80438E0: @ 80438E0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r0, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - movs r1, 0x1E - strh r1, [r5, 0x8] - lsls r0, 16 - asrs r0, 16 - adds r1, r5, 0 - movs r2, 0 - bl sub_8043740 - lsls r4, 16 - asrs r4, 16 - adds r5, 0xA - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_8043740 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end unref_sub_80438E0 - - thumb_func_start battle_make_oam_normal_battle -battle_make_oam_normal_battle: @ 8043914 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r0, 0 - str r0, [sp] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08043A28 - mov r0, r10 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080439AC - ldr r4, _0804399C @ =gSpriteTemplate_820A4EC - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _080439A0 @ =gSprites - lsls r1, r6, 4 - adds r1, r6 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x1] - movs r3, 0x3F - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1, 0x1] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r2, r4 - ldrb r0, [r2, 0x1] - ands r3, r0 - strb r3, [r2, 0x1] - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x40 - ldr r4, _080439A4 @ =0x000003ff - adds r0, r4, 0 - ands r1, r0 - ldr r0, _080439A8 @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - b _080439F2 - .align 2, 0 -_0804399C: .4byte gSpriteTemplate_820A4EC -_080439A0: .4byte gSprites -_080439A4: .4byte 0x000003ff -_080439A8: .4byte 0xfffffc00 -_080439AC: - ldr r4, _08043A14 @ =gSpriteTemplate_820A51C - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08043A18 @ =gSprites - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r2, r0 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08043A1C @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08043A20 @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - movs r0, 0x2 - str r0, [sp] -_080439F2: - ldr r2, _08043A18 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r2 - strh r7, [r0, 0x6] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r1, r0, r2 - strh r6, [r1, 0x38] - adds r2, 0x1C - adds r0, r2 - ldr r1, _08043A24 @ =sub_8043D5C - str r1, [r0] - b _08043B50 - .align 2, 0 -_08043A14: .4byte gSpriteTemplate_820A51C -_08043A18: .4byte gSprites -_08043A1C: .4byte 0x000003ff -_08043A20: .4byte 0xfffffc00 -_08043A24: .4byte sub_8043D5C -_08043A28: - mov r0, r10 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08043ACC - mov r0, r10 - bl battle_get_per_side_status - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r4, _08043AB8 @ =gSpriteTemplate_820A4EC - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r10 - bl battle_get_per_side_status - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08043ABC @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x6] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r3, r2, r4 - strh r6, [r3, 0x38] - ldrh r1, [r3, 0x4] - mov r8, r1 - mov r5, r8 - lsls r1, r5, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08043AC0 @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08043AC4 @ =0xfffffc00 - mov r5, r8 - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] - adds r4, 0x1C - adds r2, r4 - ldr r0, _08043AC8 @ =sub_8043D5C - str r0, [r2] - movs r0, 0x1 - b _08043B4E - .align 2, 0 -_08043AB8: .4byte gSpriteTemplate_820A4EC -_08043ABC: .4byte gSprites -_08043AC0: .4byte 0x000003ff -_08043AC4: .4byte 0xfffffc00 -_08043AC8: .4byte sub_8043D5C -_08043ACC: - mov r0, r10 - bl battle_get_per_side_status - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r4, _08043C14 @ =gSpriteTemplate_820A51C - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r10 - bl battle_get_per_side_status - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08043C18 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x6] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r3, r2, r4 - strh r6, [r3, 0x38] - ldrh r1, [r3, 0x4] - mov r8, r1 - mov r5, r8 - lsls r1, r5, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08043C1C @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08043C20 @ =0xfffffc00 - mov r5, r8 - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] - adds r4, 0x1C - adds r2, r4 - ldr r0, _08043C24 @ =sub_8043D5C - str r0, [r2] - movs r0, 0x2 -_08043B4E: - str r0, [sp] -_08043B50: - ldr r0, _08043C28 @ =gUnknown_02024A72 - add r0, r10 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r1, _08043C2C @ =gSpriteTemplate_820A56C - adds r0, r1 - movs r1, 0x8C - movs r2, 0x3C - movs r3, 0 - bl CreateSpriteAtEnd - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 4 - adds r4, r5 - lsls r4, 2 - ldr r1, _08043C18 @ =gSprites - mov r8, r1 - add r4, r8 - mov r0, r10 - bl battle_side_get_owner - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 21 - ldr r0, _08043C30 @ =gSubspriteTables_820A684 - adds r1, r0 - adds r0, r4, 0 - bl SetSubspriteTables - adds r2, r4, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r2, 0x4 - mov r9, r2 - mov r1, r9 - orrs r0, r1 - strb r0, [r4, 0x5] - movs r0, 0x1 - bl sub_8043CDC - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08043C34 @ =0x06010000 - adds r1, r2 - ldr r2, _08043C38 @ =REG_BG0HOFS - bl CpuSet - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - add r0, r8 - strh r5, [r0, 0x38] - mov r2, r10 - strh r2, [r0, 0x3A] - adds r0, 0x3E - ldrb r1, [r0] - mov r5, r9 - orrs r1, r5 - strb r1, [r0] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - add r0, r8 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r5 - strb r1, [r0] - strh r6, [r4, 0x38] - mov r0, sp - ldrh r0, [r0] - strh r0, [r4, 0x3A] - adds r4, 0x3E - ldrb r0, [r4] - orrs r0, r5 - strb r0, [r4] - adds r0, r6, 0 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08043C14: .4byte gSpriteTemplate_820A51C -_08043C18: .4byte gSprites -_08043C1C: .4byte 0x000003ff -_08043C20: .4byte 0xfffffc00 -_08043C24: .4byte sub_8043D5C -_08043C28: .4byte gUnknown_02024A72 -_08043C2C: .4byte gSpriteTemplate_820A56C -_08043C30: .4byte gSubspriteTables_820A684 -_08043C34: .4byte 0x06010000 -_08043C38: .4byte REG_BG0HOFS - thumb_func_end battle_make_oam_normal_battle - - thumb_func_start battle_make_oam_safari_battle -battle_make_oam_safari_battle: @ 8043C3C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, _08043CC8 @ =gSpriteTemplate_820A54C - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08043CCC @ =gSprites - mov r9, r1 - lsls r4, r6, 4 - adds r4, r6 - lsls r4, 2 - add r4, r9 - ldrb r3, [r4, 0x1] - movs r2, 0x3F - adds r1, r2, 0 - ands r1, r3 - strb r1, [r4, 0x1] - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - mov r7, r9 - adds r5, r3, r7 - ldrb r1, [r5, 0x1] - ands r2, r1 - strb r2, [r5, 0x1] - ldrh r1, [r5, 0x4] - mov r8, r1 - mov r7, r8 - lsls r2, r7, 22 - lsrs r2, 22 - adds r2, 0x40 - ldr r7, _08043CD0 @ =0x000003ff - adds r1, r7, 0 - ands r2, r1 - ldr r1, _08043CD4 @ =0xfffffc00 - mov r7, r8 - ands r1, r7 - orrs r1, r2 - strh r1, [r5, 0x4] - strh r0, [r4, 0x6] - strh r6, [r5, 0x38] - movs r0, 0x1C - add r9, r0 - add r3, r9 - ldr r0, _08043CD8 @ =sub_8043D5C - str r0, [r3] - adds r0, r6, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08043CC8: .4byte gSpriteTemplate_820A54C -_08043CCC: .4byte gSprites -_08043CD0: .4byte 0x000003ff -_08043CD4: .4byte 0xfffffc00 -_08043CD8: .4byte sub_8043D5C - thumb_func_end battle_make_oam_safari_battle - - thumb_func_start sub_8043CDC -sub_8043CDC: @ 8043CDC - lsls r0, 24 - lsrs r0, 19 - ldr r1, _08043CE8 @ =gUnknown_08D1216C - adds r0, r1 - bx lr - .align 2, 0 -_08043CE8: .4byte gUnknown_08D1216C - thumb_func_end sub_8043CDC - - thumb_func_start sub_8043CEC -sub_8043CEC: @ 8043CEC - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x38] - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08043D1C - cmp r0, 0x1 - bgt _08043D30 - cmp r0, 0 - bne _08043D30 - ldr r2, _08043D18 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x10 - b _08043D3E - .align 2, 0 -_08043D18: .4byte gSprites -_08043D1C: - ldr r2, _08043D2C @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x10 - b _08043D3E - .align 2, 0 -_08043D2C: .4byte gSprites -_08043D30: - ldr r2, _08043D58 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x8 -_08043D3E: - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x22] - strh r0, [r4, 0x22] - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x24] - strh r1, [r4, 0x24] - ldrh r0, [r0, 0x26] - strh r0, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08043D58: .4byte gSprites - thumb_func_end sub_8043CEC - - thumb_func_start sub_8043D5C -sub_8043D5C: @ 8043D5C - ldrh r1, [r0, 0x38] - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08043D80 @ =gSprites - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x20] - adds r1, 0x40 - strh r1, [r0, 0x20] - ldrh r1, [r2, 0x22] - strh r1, [r0, 0x22] - ldrh r1, [r2, 0x24] - strh r1, [r0, 0x24] - ldrh r1, [r2, 0x26] - strh r1, [r0, 0x26] - bx lr - .align 2, 0 -_08043D80: .4byte gSprites - thumb_func_end sub_8043D5C - - thumb_func_start sub_8043D84 -sub_8043D84: @ 8043D84 - push {r4,r5,lr} - ldr r5, [sp, 0xC] - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 2 - ldr r0, _08043DA8 @ =0x02017850 - adds r4, r0 - strb r1, [r4] - str r2, [r4, 0x4] - str r3, [r4, 0x8] - str r5, [r4, 0xC] - ldr r0, _08043DAC @ =0xffff8000 - str r0, [r4, 0x10] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08043DA8: .4byte 0x02017850 -_08043DAC: .4byte 0xffff8000 - thumb_func_end sub_8043D84 - - thumb_func_start sub_8043DB0 -sub_8043DB0: @ 8043DB0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08043DF8 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - adds r1, r2, 0 - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1] - movs r0, 0x38 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - ldrh r1, [r2, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08043DF8: .4byte gSprites - thumb_func_end sub_8043DB0 - - thumb_func_start sub_8043DFC -sub_8043DFC: @ 8043DFC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08043E4C @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - adds r4, r2, 0 - adds r4, 0x3E - ldrb r1, [r4] - movs r3, 0x5 - negs r3, r3 - adds r0, r3, 0 - ands r0, r1 - strb r0, [r4] - movs r0, 0x38 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r4, [r0] - adds r1, r3, 0 - ands r1, r4 - strb r1, [r0] - ldrh r1, [r2, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r3, r1 - strb r3, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08043E4C: .4byte gSprites - thumb_func_end sub_8043DFC - - thumb_func_start sub_8043E50 -sub_8043E50: @ 8043E50 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08043E6C @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r3, r4 - strh r1, [r3, 0x20] - strh r2, [r3, 0x22] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08043E6C: .4byte gSprites - thumb_func_end sub_8043E50 - - thumb_func_start unref_sub_8043E70 -unref_sub_8043E70: @ 8043E70 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08043EAC @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r5 - ldrh r1, [r4, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - movs r0, 0x38 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - adds r0, r4, 0 - bl DestroySprite - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08043EAC: .4byte gSprites - thumb_func_end unref_sub_8043E70 - - thumb_func_start nullsub_11 -nullsub_11: @ 8043EB0 - bx lr - thumb_func_end nullsub_11 - - thumb_func_start sub_8043EB4 -sub_8043EB4: @ 8043EB4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - movs r6, 0 - ldr r1, _08043F38 @ =gUnknown_02024A68 - mov r8, r1 - ldrb r2, [r1] - cmp r6, r2 - bge _08043F2C - ldr r1, _08043F3C @ =gSprites - mov r12, r1 - movs r1, 0x3 - ands r0, r1 - lsls r5, r0, 2 - movs r7, 0xD - negs r7, r7 - ldr r2, _08043F40 @ =gUnknown_03004340 - mov r9, r2 -_08043EDE: - mov r1, r9 - adds r0, r6, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r12 - ldrb r4, [r1, 0x6] - ldrh r3, [r1, 0x38] - lsls r3, 24 - lsrs r3, 24 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r12 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - add r1, r12 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - adds r6, 0x1 - mov r2, r8 - ldrb r2, [r2] - cmp r6, r2 - blt _08043EDE -_08043F2C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08043F38: .4byte gUnknown_02024A68 -_08043F3C: .4byte gSprites -_08043F40: .4byte gUnknown_03004340 - thumb_func_end sub_8043EB4 - - thumb_func_start sub_8043F44 -sub_8043F44: @ 8043F44 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - movs r4, 0 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08043F70 - adds r0, r6, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08043F6A - movs r5, 0x2C - movs r4, 0x1E - b _08043FA8 -_08043F6A: - movs r5, 0x9E - movs r4, 0x58 - b _08043FA8 -_08043F70: - adds r0, r6, 0 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08043F9E - cmp r0, 0x1 - bgt _08043F88 - cmp r0, 0 - beq _08043F92 - b _08043FA8 -_08043F88: - cmp r0, 0x2 - beq _08043F98 - cmp r0, 0x3 - beq _08043FA4 - b _08043FA8 -_08043F92: - movs r5, 0x9F - movs r4, 0x4D - b _08043FA8 -_08043F98: - movs r5, 0xAB - movs r4, 0x66 - b _08043FA8 -_08043F9E: - movs r5, 0x2C - movs r4, 0x13 - b _08043FA8 -_08043FA4: - movs r5, 0x20 - movs r4, 0x2C -_08043FA8: - ldr r0, _08043FBC @ =gUnknown_03004340 - adds r0, r6, r0 - ldrb r0, [r0] - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_8043E50 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08043FBC: .4byte gUnknown_03004340 - thumb_func_end sub_8043F44 - - thumb_func_start sub_8043FC0 -sub_8043FC0: @ 8043FC0 - push {r4-r7,lr} - sub sp, 0x20 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - ldr r1, _08044000 @ =gUnknown_0820A81C - mov r0, sp - movs r2, 0x1E - bl memcpy - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08044010 - ldr r1, _08044004 @ =gSprites - lsls r4, r5, 4 - adds r0, r4, r5 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - ldr r7, _08044008 @ =gUnknown_0820A80C - cmp r0, 0 - bne _0804402E - ldr r7, _0804400C @ =gUnknown_0820A804 - b _0804402E - .align 2, 0 -_08044000: .4byte gUnknown_0820A81C -_08044004: .4byte gSprites -_08044008: .4byte gUnknown_0820A80C -_0804400C: .4byte gUnknown_0820A804 -_08044010: - ldr r1, _08044040 @ =gSprites - lsls r4, r5, 4 - adds r0, r4, r5 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - ldr r7, _08044044 @ =gUnknown_0820A80C - cmp r0, 0 - bne _0804402E - ldr r7, _08044048 @ =gUnknown_0820A814 -_0804402E: - mov r3, sp - adds r3, 0x6 - cmp r6, 0x64 - bne _0804404C - adds r0, r3, 0 - movs r1, 0x64 - movs r2, 0 - movs r3, 0x3 - b _0804408C - .align 2, 0 -_08044040: .4byte gSprites -_08044044: .4byte gUnknown_0820A80C -_08044048: .4byte gUnknown_0820A814 -_0804404C: - movs r1, 0xFC - strb r1, [r3] - mov r3, sp - adds r3, 0x7 - movs r0, 0x11 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x1 - strb r0, [r3] - adds r3, 0x1 - strb r1, [r3] - adds r3, 0x1 - movs r2, 0x14 - strb r2, [r3] - adds r3, 0x1 - movs r0, 0x4 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0xF0 - strb r0, [r3] - adds r3, 0x1 - strb r1, [r3] - adds r3, 0x1 - strb r2, [r3] - adds r3, 0x1 - movs r0, 0 - strb r0, [r3] - adds r3, 0x1 - adds r0, r3, 0 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0x2 -_0804408C: - bl ConvertIntToDecimalStringN - adds r3, r0, 0 - movs r0, 0xFC - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x13 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0xF - strb r0, [r3] - movs r0, 0xFF - strb r0, [r3, 0x1] - movs r0, 0x80 - lsls r0, 18 - mov r1, sp - bl sub_80034D4 - ldr r1, _080440E0 @ =gSprites - adds r0, r4, r5 - lsls r0, 2 - adds r6, r0, r1 - ldr r5, _080440E4 @ =0x02000020 - movs r4, 0x2 -_080440BC: - ldrh r0, [r6, 0x4] - lsls r0, 22 - lsrs r0, 17 - ldm r7!, {r1} - adds r1, r0 - adds r0, r5, 0 - ldr r2, _080440E8 @ =REG_BG0CNT - bl CpuSet - adds r5, 0x40 - subs r4, 0x1 - cmp r4, 0 - bne _080440BC - add sp, 0x20 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080440E0: .4byte gSprites -_080440E4: .4byte 0x02000020 -_080440E8: .4byte REG_BG0CNT - thumb_func_end sub_8043FC0 - - thumb_func_start sub_80440EC -sub_80440EC: @ 80440EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r1, _08044144 @ =gUnknown_0820A864 - mov r0, sp - movs r2, 0x14 - bl memcpy - ldr r1, _08044148 @ =gSprites - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r4, r0, r1 - movs r0, 0x3A - ldrsh r5, [r4, r0] - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08044136 - lsls r0, r5, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0804414C -_08044136: - lsls r1, r6, 16 - asrs r1, 16 - adds r0, r7, 0 - mov r2, r8 - bl sub_8044210 - b _080441F0 - .align 2, 0 -_08044144: .4byte gUnknown_0820A864 -_08044148: .4byte gSprites -_0804414C: - mov r5, sp - adds r5, 0x6 - mov r0, r8 - cmp r0, 0 - bne _08044190 - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - ldr r4, _08044188 @ =gUnknown_0820A848 - cmp r0, 0 - bne _0804416A - ldr r4, _0804418C @ =gUnknown_0820A83C -_0804416A: - movs r0, 0x3 - mov r8, r0 - lsls r1, r6, 16 - asrs r1, 16 - adds r0, r5, 0 - movs r2, 0x13 - movs r3, 0x1 - bl sub_8003504 - adds r5, r0, 0 - movs r0, 0xBA - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] - b _080441B6 - .align 2, 0 -_08044188: .4byte gUnknown_0820A848 -_0804418C: .4byte gUnknown_0820A83C -_08044190: - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - ldr r4, _080441FC @ =gUnknown_0820A85C - cmp r0, 0 - bne _080441A4 - ldr r4, _08044200 @ =gUnknown_0820A854 -_080441A4: - movs r0, 0x2 - mov r8, r0 - lsls r1, r6, 16 - asrs r1, 16 - adds r0, r5, 0 - movs r2, 0xF - movs r3, 0x1 - bl sub_8003504 -_080441B6: - movs r0, 0x80 - lsls r0, 18 - mov r1, sp - bl sub_80034D4 - mov r0, r8 - cmp r0, 0 - beq _080441F0 - ldr r1, _08044204 @ =gSprites - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r6, r0, r1 - adds r7, r4, 0 - ldr r5, _08044208 @ =0x02000020 - mov r4, r8 -_080441D6: - ldrh r0, [r6, 0x4] - lsls r0, 22 - lsrs r0, 17 - ldm r7!, {r1} - adds r1, r0 - adds r0, r5, 0 - ldr r2, _0804420C @ =REG_BG0CNT - bl CpuSet - adds r5, 0x40 - subs r4, 0x1 - cmp r4, 0 - bne _080441D6 -_080441F0: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080441FC: .4byte gUnknown_0820A85C -_08044200: .4byte gUnknown_0820A854 -_08044204: .4byte gSprites -_08044208: .4byte 0x02000020 -_0804420C: .4byte REG_BG0CNT - thumb_func_end sub_80440EC - - thumb_func_start sub_8044210 -sub_8044210: @ 8044210 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r6, r1, 16 - mov r9, r6 - lsls r2, 24 - lsrs r7, r2, 24 - ldr r1, _0804427C @ =gUnknown_0820A89C - mov r0, sp - movs r2, 0x14 - bl memcpy - ldr r1, _08044280 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - mov r8, r0 - movs r1, 0x3A - ldrsh r4, [r0, r1] - lsls r0, r4, 2 - ldr r1, _08044284 @ =0x02017800 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08044312 - mov r2, sp - adds r2, 0x6 - cmp r7, 0 - bne _0804428C - ldr r7, _08044288 @ =gUnknown_0820A87C - movs r0, 0x6 - mov r10, r0 - lsls r1, r6, 16 - asrs r1, 16 - adds r0, r2, 0 - movs r2, 0x2B - movs r3, 0x1 - bl sub_8003504 - adds r2, r0, 0 - movs r0, 0xBA - strb r0, [r2] - movs r0, 0xFF - strb r0, [r2, 0x1] - b _080442CE - .align 2, 0 -_0804427C: .4byte gUnknown_0820A89C -_08044280: .4byte gSprites -_08044284: .4byte 0x02017800 -_08044288: .4byte gUnknown_0820A87C -_0804428C: - ldr r7, _08044324 @ =gUnknown_0820A894 - movs r1, 0x2 - mov r10, r1 - mov r0, r9 - lsls r1, r0, 16 - asrs r1, 16 - adds r0, r2, 0 - movs r2, 0xF - movs r3, 0x1 - bl sub_8003504 - lsls r0, r4, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080442CE - movs r0, 0x74 - bl sub_8043CDC - mov r2, r8 - ldrh r1, [r2, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0xD0 - lsls r2, 3 - adds r1, r2 - ldr r2, _08044328 @ =0x06010000 - adds r1, r2 - ldr r2, _0804432C @ =REG_BG0CNT - bl CpuSet -_080442CE: - ldr r6, _08044330 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r6 - movs r1, 0x38 - ldrsh r4, [r0, r1] - movs r0, 0x80 - lsls r0, 18 - mov r1, sp - bl sub_80034D4 - mov r2, r10 - cmp r2, 0 - beq _08044312 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r6, r0, r6 - ldr r5, _08044334 @ =0x02000020 - mov r4, r10 -_080442F8: - ldrh r0, [r6, 0x4] - lsls r0, 22 - lsrs r0, 17 - ldm r7!, {r1} - adds r1, r0 - adds r0, r5, 0 - ldr r2, _0804432C @ =REG_BG0CNT - bl CpuSet - adds r5, 0x40 - subs r4, 0x1 - cmp r4, 0 - bne _080442F8 -_08044312: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044324: .4byte gUnknown_0820A894 -_08044328: .4byte 0x06010000 -_0804432C: .4byte REG_BG0CNT -_08044330: .4byte gSprites -_08044334: .4byte 0x02000020 - thumb_func_end sub_8044210 - - thumb_func_start sub_8044338 -sub_8044338: @ 8044338 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x14] - ldr r1, _080443CC @ =gUnknown_0820A864 - mov r0, sp - movs r2, 0x14 - bl memcpy - ldr r1, _080443D0 @ =gSprites - ldr r2, [sp, 0x14] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 7 - ldr r3, _080443D4 @ =0x02000520 - adds r6, r1, r3 - movs r0, 0x5 - mov r8, r0 - adds r0, r4, 0 - bl GetNature - lsls r0, 24 - mov r4, sp - adds r4, 0x6 - ldr r1, _080443D8 @ =gNatureNames - lsrs r0, 22 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl StringCopy - adds r0, r6, 0 - mov r1, sp - bl sub_80034D4 - movs r7, 0x6 - movs r5, 0 - mov r1, sp - adds r1, 0x9 - str r1, [sp, 0x1C] -_080443AA: - mov r2, sp - adds r0, r2, r7 - ldrb r1, [r0] - adds r0, r1, 0 - subs r0, 0x37 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bls _080443C8 - adds r0, r1, 0 - adds r0, 0x79 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bhi _080443DC -_080443C8: - movs r0, 0x2C - b _080443FA - .align 2, 0 -_080443CC: .4byte gUnknown_0820A864 -_080443D0: .4byte gSprites -_080443D4: .4byte 0x02000520 -_080443D8: .4byte gNatureNames -_080443DC: - adds r0, r1, 0 - subs r0, 0x4B - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bls _080443F4 - adds r0, r1, 0 - adds r0, 0x65 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _080443F8 -_080443F4: - movs r0, 0x2D - b _080443FA -_080443F8: - movs r0, 0x2B -_080443FA: - bl sub_8043CDC - lsls r1, r5, 6 - adds r1, r6, r1 - ldr r2, _080444F8 @ =REG_BG0CNT - bl CpuSet - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, 0x1 - cmp r5, r8 - bcc _080443AA - movs r7, 0x1 - ldr r3, [sp, 0x14] - lsls r3, 4 - str r3, [sp, 0x18] - movs r0, 0x1 - add r0, r8 - mov r9, r0 - cmp r7, r9 - bge _08044486 - ldr r1, _080444FC @ =gSprites - ldr r2, _080444F8 @ =REG_BG0CNT - mov r10, r2 - ldr r2, [sp, 0x14] - adds r0, r3, r2 - lsls r0, 2 - adds r0, r1 - mov r8, r0 -_08044436: - mov r3, r8 - ldrh r0, [r3, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r5, r7, 0 - cmp r7, 0 - bge _08044446 - adds r5, r7, 0x7 -_08044446: - asrs r5, 3 - lsls r4, r5, 3 - subs r4, r7, r4 - adds r0, r4 - lsls r5, 6 - adds r0, r5 - lsls r0, 5 - ldr r2, _08044500 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - mov r3, r8 - ldrh r0, [r3, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r4, 0x8 - adds r0, r4 - adds r0, r5 - lsls r0, 5 - ldr r2, _08044500 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - adds r7, 0x1 - cmp r7, r9 - blt _08044436 -_08044486: - ldr r6, _080444FC @ =gSprites - ldr r3, [sp, 0x18] - ldr r1, [sp, 0x14] - adds r0, r3, r1 - lsls r0, 2 - adds r0, r6 - ldrh r5, [r0, 0x38] - lsls r5, 24 - lsrs r5, 24 - ldr r4, _08044504 @ =0x02000000 - ldr r2, _08044508 @ =0x00016089 - adds r0, r4, r2 - ldrb r1, [r0] - mov r0, sp - adds r0, 0x6 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r3, _0804450C @ =0x00016088 - adds r4, r3 - ldrb r1, [r4] - ldr r0, [sp, 0x1C] - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - mov r1, sp - movs r0, 0 - strb r0, [r1, 0x5] - movs r0, 0xBA - strb r0, [r1, 0x8] - movs r0, 0x80 - lsls r0, 18 - bl sub_80034D4 - movs r7, 0 - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r5, r0, r6 - ldr r4, _08044510 @ =0x02000020 -_080444DA: - cmp r7, 0x1 - bgt _08044514 - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r0, r7, 0x2 - adds r1, r0 - lsls r1, 5 - ldr r0, _08044500 @ =0x06010000 - adds r1, r0 - adds r0, r4, 0 - ldr r2, _080444F8 @ =REG_BG0CNT - bl CpuSet - b _0804452A - .align 2, 0 -_080444F8: .4byte REG_BG0CNT -_080444FC: .4byte gSprites -_08044500: .4byte 0x06010000 -_08044504: .4byte 0x02000000 -_08044508: .4byte 0x00016089 -_0804450C: .4byte 0x00016088 -_08044510: .4byte 0x02000020 -_08044514: - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r7, r1 - lsls r1, 5 - ldr r2, _08044544 @ =0x060100c0 - adds r1, r2 - adds r0, r4, 0 - ldr r2, _08044548 @ =REG_BG0CNT - bl CpuSet -_0804452A: - adds r4, 0x40 - adds r7, 0x1 - cmp r7, 0x4 - ble _080444DA - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044544: .4byte 0x060100c0 -_08044548: .4byte REG_BG0CNT - thumb_func_end sub_8044338 - - thumb_func_start sub_804454C -sub_804454C: @ 804454C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r0, 0 - mov r8, r0 - ldr r0, _0804466C @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r8, r0 - blt _08044566 - b _080447E4 -_08044566: - ldr r1, _08044670 @ =gSprites - mov r9, r1 - movs r2, 0x64 - mov r10, r2 - ldr r7, _08044674 @ =gUnknown_02024A6A -_08044570: - ldr r0, _08044678 @ =gUnknown_03004340 - mov r6, r8 - adds r5, r6, r0 - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - mov r1, r9 - adds r1, 0x1C - adds r0, r1 - ldr r1, [r0] - ldr r0, _0804467C @ =SpriteCallbackDummy - cmp r1, r0 - beq _0804458E - b _080447D4 -_0804458E: - lsls r0, r6, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080445A2 - b _080447D4 -_080445A2: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _080445BA - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080445BA - b _080447D4 -_080445BA: - mov r0, r8 - lsls r3, r0, 2 - ldr r0, _08044680 @ =0x02017800 - adds r3, r0 - ldr r0, [r3] - lsls r0, 27 - lsrs r0, 31 - movs r2, 0x1 - eors r2, r0 - lsls r2, 4 - ldrb r0, [r3] - movs r6, 0x11 - negs r6, r6 - adds r1, r6, 0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3] - ldr r0, [r3] - lsls r0, 27 - lsrs r6, r0, 31 - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080446DC - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _080445FA - b _080447D4 -_080445FA: - ldr r0, _08044684 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _0804460C - b _080447D4 -_0804460C: - cmp r6, 0x1 - bne _08044694 - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r1, r0, 24 - str r2, [sp] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r0, _08044688 @ =0x06010000 - adds r1, r0 - mov r0, sp - ldr r2, _0804468C @ =0x05000040 - bl CpuSet - ldrb r4, [r5] - ldrh r0, [r7] - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - ldr r2, _08044690 @ =gPlayerParty - adds r0, r2 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl sub_8044210 - ldrb r4, [r5] - ldrh r0, [r7] - mov r6, r10 - muls r6, r0 - adds r0, r6, 0 - ldr r1, _08044690 @ =gPlayerParty - b _08044766 - .align 2, 0 -_0804466C: .4byte gUnknown_02024A68 -_08044670: .4byte gSprites -_08044674: .4byte gUnknown_02024A6A -_08044678: .4byte gUnknown_03004340 -_0804467C: .4byte SpriteCallbackDummy -_08044680: .4byte 0x02017800 -_08044684: .4byte gBattleTypeFlags -_08044688: .4byte 0x06010000 -_0804468C: .4byte 0x05000040 -_08044690: .4byte gPlayerParty -_08044694: - ldrb r0, [r5] - bl draw_status_ailment_maybe - ldrb r0, [r5] - ldrh r1, [r7] - mov r2, r10 - muls r2, r1 - adds r1, r2, 0 - ldr r6, _080446D0 @ =gPlayerParty - adds r1, r6 - movs r2, 0x5 - bl sub_8045A5C - movs r0, 0x75 - bl sub_8043CDC - ldrb r2, [r5] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r9 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _080446D4 @ =0x06010680 - adds r1, r2 - ldr r2, _080446D8 @ =REG_BG0CNT - bl CpuSet - b _080447BE - .align 2, 0 -_080446D0: .4byte gPlayerParty -_080446D4: .4byte 0x06010680 -_080446D8: .4byte REG_BG0CNT -_080446DC: - cmp r6, 0x1 - bne _0804478C - ldr r0, _08044704 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _0804470C - ldrb r0, [r5] - ldrh r1, [r7] - mov r6, r10 - muls r6, r1 - adds r1, r6, 0 - ldr r2, _08044708 @ =gEnemyParty - adds r1, r2 - bl sub_8044338 - b _080447BE - .align 2, 0 -_08044704: .4byte gBattleTypeFlags -_08044708: .4byte gEnemyParty -_0804470C: - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r1, r0, 24 - str r2, [sp] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r6, _08044780 @ =0x06010000 - adds r1, r6 - mov r0, sp - ldr r2, _08044784 @ =0x05000040 - bl CpuSet - ldrb r4, [r5] - ldrh r0, [r7] - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - ldr r2, _08044788 @ =gEnemyParty - adds r0, r2 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl sub_8044210 - ldrb r4, [r5] - ldrh r0, [r7] - mov r6, r10 - muls r6, r0 - adds r0, r6, 0 - ldr r1, _08044788 @ =gEnemyParty -_08044766: - adds r0, r1 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0x1 - bl sub_8044210 - b _080447BE - .align 2, 0 -_08044780: .4byte 0x06010000 -_08044784: .4byte 0x05000040 -_08044788: .4byte gEnemyParty -_0804478C: - ldrb r0, [r5] - bl draw_status_ailment_maybe - ldrb r0, [r5] - ldrh r1, [r7] - movs r6, 0x64 - muls r1, r6 - ldr r4, _080447F4 @ =gEnemyParty - adds r1, r4 - movs r2, 0x5 - bl sub_8045A5C - ldr r0, _080447F8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080447BE - ldrb r0, [r5] - ldrh r1, [r7] - muls r1, r6 - adds r1, r4 - movs r2, 0x4 - bl sub_8045A5C -_080447BE: - ldr r0, _080447FC @ =gUnknown_03004340 - add r0, r8 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldrh r1, [r0, 0x3C] - movs r2, 0x1 - eors r1, r2 - strh r1, [r0, 0x3C] -_080447D4: - adds r7, 0x2 - movs r2, 0x1 - add r8, r2 - ldr r0, _08044800 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r8, r0 - bge _080447E4 - b _08044570 -_080447E4: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080447F4: .4byte gEnemyParty -_080447F8: .4byte gBattleTypeFlags -_080447FC: .4byte gUnknown_03004340 -_08044800: .4byte gUnknown_02024A68 - thumb_func_end sub_804454C - - thumb_func_start sub_8044804 -sub_8044804: @ 8044804 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - str r1, [sp, 0xC] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - lsls r2, 24 - lsrs r2, 24 - adds r4, r2, 0 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x10] - cmp r4, 0 - beq _08044834 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08044878 -_08044834: - ldr r0, [sp, 0x8] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08044854 - movs r7, 0 - movs r1, 0x88 - movs r2, 0x60 - movs r0, 0x64 - mov r8, r0 - ldr r5, _08044850 @ =0x0000fffb - b _08044884 - .align 2, 0 -_08044850: .4byte 0x0000fffb -_08044854: - movs r7, 0x1 - cmp r4, 0 - beq _08044864 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _0804486A -_08044864: - movs r1, 0x68 - movs r2, 0x28 - b _0804486E -_0804486A: - movs r1, 0x68 - movs r2, 0x10 -_0804486E: - ldr r3, _08044874 @ =0x0000ff9c - mov r8, r3 - b _08044882 - .align 2, 0 -_08044874: .4byte 0x0000ff9c -_08044878: - movs r7, 0x1 - movs r1, 0x68 - movs r2, 0x28 - ldr r5, _08044930 @ =0x0000ff9c - mov r8, r5 -_08044882: - movs r5, 0x5 -_08044884: - movs r6, 0 - str r6, [sp, 0x14] - lsls r4, r7, 3 - ldr r0, _08044934 @ =gUnknown_0820A754 - mov r10, r0 - lsls r3, r7, 1 - mov r9, r3 - lsls r1, 16 - str r1, [sp, 0x20] - lsls r2, 16 - str r2, [sp, 0x24] - ldr r2, _08044938 @ =0x0000ffff - ldr r1, [sp, 0xC] - movs r6, 0x5 -_080448A0: - ldrh r0, [r1] - cmp r0, r2 - beq _080448B4 - ldr r3, [sp, 0x14] - lsls r0, r3, 24 - movs r3, 0x80 - lsls r3, 17 - adds r0, r3 - lsrs r0, 24 - str r0, [sp, 0x14] -_080448B4: - adds r1, 0x8 - subs r6, 0x1 - cmp r6, 0 - bge _080448A0 - mov r6, r10 - adds r0, r4, r6 - bl LoadCompressedObjectPic - ldr r0, _0804493C @ =gUnknown_0820A784 - adds r0, r4, r0 - bl LoadSpriteSheet - ldr r0, _08044940 @ =gUnknown_0820A764 - adds r0, r4, r0 - bl LoadSpritePalette - ldr r0, _08044944 @ =gUnknown_0820A774 - adds r0, r4, r0 - bl LoadSpritePalette - mov r1, r9 - adds r0, r1, r7 - lsls r0, 3 - ldr r1, _08044948 @ =gSpriteTemplate_820A7A4 - adds r0, r1 - ldr r2, [sp, 0x20] - asrs r1, r2, 16 - ldr r3, [sp, 0x24] - asrs r2, r3, 16 - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x18] - lsls r0, 4 - ldr r6, [sp, 0x18] - adds r0, r6 - lsls r0, 2 - ldr r1, _0804494C @ =gSprites - adds r4, r0, r1 - ldr r1, _08044950 @ =gSubspriteTables_820A6E4 - adds r0, r4, 0 - bl SetSubspriteTables - mov r0, r8 - strh r0, [r4, 0x24] - strh r5, [r4, 0x2E] - cmp r7, 0 - beq _08044954 - ldrh r0, [r4, 0x20] - subs r0, 0x60 - strh r0, [r4, 0x20] - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r4, 0x3] - b _0804495A - .align 2, 0 -_08044930: .4byte 0x0000ff9c -_08044934: .4byte gUnknown_0820A754 -_08044938: .4byte 0x0000ffff -_0804493C: .4byte gUnknown_0820A784 -_08044940: .4byte gUnknown_0820A764 -_08044944: .4byte gUnknown_0820A774 -_08044948: .4byte gSpriteTemplate_820A7A4 -_0804494C: .4byte gSprites -_08044950: .4byte gSubspriteTables_820A6E4 -_08044954: - ldrh r0, [r4, 0x20] - adds r0, 0x60 - strh r0, [r4, 0x20] -_0804495A: - movs r6, 0 - ldr r1, _08044A04 @ =gSprites - mov r10, r1 - mov r4, sp - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - str r0, [sp, 0x1C] - movs r3, 0xA - mov r9, r3 - mov r8, r6 -_08044970: - ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4 - ldr r5, [sp, 0x24] - ldr r1, _08044A0C @ =0xfffc0000 - adds r2, r5, r1 - ldr r3, [sp, 0x1C] - adds r0, r3, r0 - ldr r5, [sp, 0x20] - asrs r1, r5, 16 - asrs r2, 16 - movs r3, 0x9 - bl CreateSpriteAtEnd - strb r0, [r4] - ldr r0, [sp, 0x10] - cmp r0, 0 - bne _080449A0 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r2, _08044A10 @ =gSprites + 0x1C - adds r1, r2 - ldr r0, _08044A14 @ =sub_8045180 - str r0, [r1] -_080449A0: - ldr r5, _08044A04 @ =gSprites - cmp r7, 0 - bne _080449BE - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - strh r7, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - strh r7, [r0, 0x26] -_080449BE: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0 - mov r3, sp - ldrh r3, [r3, 0x18] - strh r3, [r0, 0x2E] - cmp r7, 0 - bne _08044A18 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrh r0, [r1, 0x20] - adds r0, 0x18 - add r0, r8 - strh r0, [r1, 0x20] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - mov r1, r9 - strh r1, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x78 - b _08044A56 - .align 2, 0 -_08044A04: .4byte gSprites -_08044A08: .4byte gSpriteTemplate_820A7D4 -_08044A0C: .4byte 0xfffc0000 -_08044A10: .4byte gSprites + 0x1C -_08044A14: .4byte sub_8045180 -_08044A18: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - ldrh r3, [r2, 0x20] - subs r3, 0x18 - movs r1, 0x5 - subs r1, r6 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - subs r3, r0 - strh r3, [r2, 0x20] - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - movs r1, 0x6 - subs r1, r6 - lsls r0, r1, 3 - subs r0, r1 - adds r0, 0xA - strh r0, [r2, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08044AC4 @ =0x0000ff88 -_08044A56: - strh r1, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r7, [r0, 0x32] - adds r4, 0x1 - movs r2, 0x7 - add r9, r2 - movs r3, 0xA - add r8, r3 - adds r6, 0x1 - cmp r6, 0x5 - bgt _08044A76 - b _08044970 -_08044A76: - ldr r0, [sp, 0x8] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08044B5E - movs r6, 0 - ldr r5, _08044AC8 @ =gBattleTypeFlags - mov r10, r5 - ldr r0, _08044ACC @ =0x0000ffff - mov r9, r0 - ldr r7, _08044AD0 @ =gSprites - ldr r1, _08044AD4 @ =0x000003ff - mov r12, r1 - ldr r2, _08044AD8 @ =0xfffffc00 - mov r8, r2 - mov r4, sp - ldr r5, [sp, 0xC] -_08044A9A: - mov r3, r10 - ldrh r1, [r3] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08044ADC - ldrh r0, [r5] - cmp r0, r9 - beq _08044AE6 - cmp r0, 0 - bne _08044B2E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08044B46 - .align 2, 0 -_08044AC4: .4byte 0x0000ff88 -_08044AC8: .4byte gBattleTypeFlags -_08044ACC: .4byte 0x0000ffff -_08044AD0: .4byte gSprites -_08044AD4: .4byte 0x000003ff -_08044AD8: .4byte 0xfffffc00 -_08044ADC: - ldr r1, [sp, 0x14] - lsls r0, r1, 24 - asrs r0, 24 - cmp r6, r0 - blt _08044B14 -_08044AE6: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x1 - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - movs r1, 0x1 - strh r1, [r0, 0x3C] - b _08044B52 -_08044B14: - ldrh r0, [r5] - cmp r0, 0 - bne _08044B2E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08044B46 -_08044B2E: - ldr r0, [r5, 0x4] - cmp r0, 0 - beq _08044B52 - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x2 -_08044B46: - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] -_08044B52: - adds r4, 0x1 - adds r5, 0x8 - adds r6, 0x1 - cmp r6, 0x5 - ble _08044A9A - b _08044C38 -_08044B5E: - movs r6, 0 - ldr r1, _08044BA4 @ =gBattleTypeFlags - mov r10, r1 - ldr r2, _08044BA8 @ =0x0000ffff - mov r9, r2 - ldr r7, _08044BAC @ =gSprites - ldr r3, _08044BB0 @ =0x000003ff - mov r12, r3 - ldr r5, _08044BB4 @ =0xfffffc00 - mov r8, r5 - ldr r5, [sp, 0xC] - mov r4, sp - adds r4, 0x5 -_08044B78: - mov r0, r10 - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08044BB8 - ldrh r0, [r5] - cmp r0, r9 - beq _08044BC2 - cmp r0, 0 - bne _08044C0A - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08044C22 - .align 2, 0 -_08044BA4: .4byte gBattleTypeFlags -_08044BA8: .4byte 0x0000ffff -_08044BAC: .4byte gSprites -_08044BB0: .4byte 0x000003ff -_08044BB4: .4byte 0xfffffc00 -_08044BB8: - ldr r1, [sp, 0x14] - lsls r0, r1, 24 - asrs r0, 24 - cmp r6, r0 - blt _08044BF0 -_08044BC2: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x1 - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - movs r1, 0x1 - strh r1, [r0, 0x3C] - b _08044C2E -_08044BF0: - ldrh r0, [r5] - cmp r0, 0 - bne _08044C0A - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08044C22 -_08044C0A: - ldr r0, [r5, 0x4] - cmp r0, 0 - beq _08044C2E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x2 -_08044C22: - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] -_08044C2E: - subs r4, 0x1 - adds r5, 0x8 - adds r6, 0x1 - cmp r6, 0x5 - ble _08044B78 -_08044C38: - ldr r0, _08044C98 @ =TaskDummy - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _08044C9C @ =gTasks - lsls r3, r4, 2 - adds r1, r3, r4 - lsls r1, 3 - adds r0, r1, r2 - mov r5, sp - ldrh r5, [r5, 0x8] - strh r5, [r0, 0x8] - mov r6, sp - ldrh r6, [r6, 0x18] - strh r6, [r0, 0xA] - movs r6, 0 - adds r0, r2, 0 - adds r0, 0xE - adds r1, r0 -_08044C62: - mov r5, sp - adds r0, r5, r6 - ldrb r0, [r0] - strh r0, [r1] - adds r1, 0x2 - adds r6, 0x1 - cmp r6, 0x5 - ble _08044C62 - adds r0, r3, r4 - lsls r0, 3 - adds r0, r2 - ldrh r6, [r5, 0x10] - strh r6, [r0, 0x1C] - movs r0, 0x72 - movs r1, 0 - bl PlaySE12WithPanning - adds r0, r4, 0 - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08044C98: .4byte TaskDummy -_08044C9C: .4byte gTasks - thumb_func_end sub_8044804 - - thumb_func_start sub_8044CA0 -sub_8044CA0: @ 8044CA0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r2, _08044DB4 @ =gTasks - lsls r3, r0, 2 - adds r1, r3, r0 - lsls r1, 3 - adds r0, r1, r2 - ldrb r4, [r0, 0x1C] - mov r9, r4 - ldrb r4, [r0, 0xA] - mov r10, r4 - ldrb r0, [r0, 0x8] - str r0, [sp, 0x8] - movs r5, 0 - adds r7, r2, 0 - ldr r0, _08044DB8 @ =gSprites - mov r12, r0 - str r3, [sp, 0xC] - adds r0, r7, 0 - adds r0, 0xE - adds r2, r1, r0 -_08044CD8: - mov r4, sp - adds r1, r4, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _08044CD8 - ldr r1, _08044DBC @ =REG_BLDCNT - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x10 - strh r0, [r1] - ldr r0, [sp, 0xC] - add r0, r8 - lsls r0, 3 - adds r0, r7 - movs r1, 0x10 - strh r1, [r0, 0x26] - movs r5, 0 - mov r4, r10 - lsls r4, 4 - str r4, [sp, 0x10] - ldr r4, _08044DB8 @ =gSprites - movs r6, 0xD - negs r6, r6 - movs r3, 0x4 -_08044D14: - mov r1, sp - adds r0, r1, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x1] - adds r0, r6, 0 - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x1] - adds r5, 0x1 - cmp r5, 0x5 - ble _08044D14 - ldr r2, [sp, 0x10] - add r2, r10 - lsls r2, 2 - add r2, r12 - ldrb r1, [r2, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x1] - mov r2, r9 - cmp r2, 0 - bne _08044D50 - b _08044E54 -_08044D50: - movs r5, 0 - mov r6, r12 - mov r9, r5 - adds r3, r6, 0 - adds r3, 0x1C - mov r4, sp - movs r7, 0 -_08044D5E: - ldr r0, [sp, 0x8] - str r3, [sp, 0x14] - bl battle_side_get_owner - lsls r0, 24 - lsrs r2, r0, 24 - ldr r3, [sp, 0x14] - cmp r2, 0 - beq _08044DC4 - movs r0, 0x5 - subs r0, r5 - mov r1, sp - adds r2, r1, r0 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r7, [r0, 0x30] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r9 - strh r1, [r0, 0x34] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r9 - strh r1, [r0, 0x36] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _08044DC0 @ =sub_8045110 - str r1, [r0] - ldr r2, _08044DB8 @ =gSprites - mov r12, r2 - b _08044DFA - .align 2, 0 -_08044DB4: .4byte gTasks -_08044DB8: .4byte gSprites -_08044DBC: .4byte REG_BLDCNT -_08044DC0: .4byte sub_8045110 -_08044DC4: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r7, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r2, [r0, 0x34] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r2, [r0, 0x36] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _08044E3C @ =sub_8045110 - str r1, [r0] - ldr r0, _08044E40 @ =gSprites - mov r12, r0 -_08044DFA: - adds r4, 0x1 - adds r7, 0x7 - adds r5, 0x1 - cmp r5, 0x5 - ble _08044D5E - ldr r3, [sp, 0x10] - add r3, r10 - lsls r3, 2 - mov r1, r12 - adds r0, r3, r1 - movs r2, 0x2E - ldrsh r1, [r0, r2] - lsrs r2, r1, 31 - adds r1, r2 - asrs r1, 1 - movs r2, 0 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - mov r1, r12 - adds r1, 0x1C - adds r3, r1 - ldr r1, _08044E44 @ =sub_8045048 - str r1, [r3] - ldr r1, _08044E48 @ =gSubspriteTables_820A6EC - bl SetSubspriteTables - ldr r1, _08044E4C @ =gTasks - ldr r0, [sp, 0xC] - add r0, r8 - lsls r0, 3 - adds r0, r1 - ldr r1, _08044E50 @ =sub_8044E74 - b _08044E5E - .align 2, 0 -_08044E3C: .4byte sub_8045110 -_08044E40: .4byte gSprites -_08044E44: .4byte sub_8045048 -_08044E48: .4byte gSubspriteTables_820A6EC -_08044E4C: .4byte gTasks -_08044E50: .4byte sub_8044E74 -_08044E54: - ldr r0, [sp, 0xC] - add r0, r8 - lsls r0, 3 - adds r0, r7 - ldr r1, _08044E70 @ =sub_8044F70 -_08044E5E: - str r1, [r0] - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044E70: .4byte sub_8044F70 - thumb_func_end sub_8044CA0 - - thumb_func_start sub_8044E74 -sub_8044E74: @ 8044E74 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08044EC0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r3, r1, r2 - ldrh r0, [r3, 0x1E] - adds r1, r0, 0x1 - strh r1, [r3, 0x1E] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08044EAE - ldrh r0, [r3, 0x26] - subs r2, r0, 0x1 - strh r2, [r3, 0x26] - lsls r0, r2, 16 - cmp r0, 0 - blt _08044EBA - ldr r1, _08044EC4 @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r2 - lsls r0, 8 - orrs r2, r0 - strh r2, [r1] -_08044EAE: - movs r1, 0x26 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _08044EBA - ldr r0, _08044EC8 @ =sub_8044ECC - str r0, [r3] -_08044EBA: - pop {r0} - bx r0 - .align 2, 0 -_08044EC0: .4byte gTasks -_08044EC4: .4byte REG_BLDALPHA -_08044EC8: .4byte sub_8044ECC - thumb_func_end sub_8044E74 - - thumb_func_start sub_8044ECC -sub_8044ECC: @ 8044ECC - push {r4-r6,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r3, r0, 24 - ldr r6, _08044F44 @ =gTasks - lsls r0, r3, 2 - adds r0, r3 - lsls r4, r0, 3 - adds r1, r4, r6 - ldrh r0, [r1, 0x26] - subs r0, 0x1 - movs r5, 0 - strh r0, [r1, 0x26] - lsls r0, 16 - asrs r2, r0, 16 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - bne _08044F4C - ldrb r3, [r1, 0xA] - adds r0, r6, 0 - adds r0, 0xE - adds r2, r4, r0 -_08044EFA: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _08044EFA - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - ldr r4, _08044F48 @ =gSprites - adds r0, r4 - bl DestroySpriteAndFreeResources - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySpriteAndFreeResources - movs r5, 0x1 -_08044F2A: - mov r1, sp - adds r0, r1, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - adds r5, 0x1 - cmp r5, 0x5 - ble _08044F2A - b _08044F62 - .align 2, 0 -_08044F44: .4byte gTasks -_08044F48: .4byte gSprites -_08044F4C: - movs r0, 0x3 - negs r0, r0 - cmp r2, r0 - bne _08044F62 - ldr r0, _08044F6C @ =REG_BLDCNT - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, r3, 0 - bl DestroyTask -_08044F62: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08044F6C: .4byte REG_BLDCNT - thumb_func_end sub_8044ECC - - thumb_func_start sub_8044F70 -sub_8044F70: @ 8044F70 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r7, _08044FA4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r6, r0, 3 - adds r3, r6, r7 - ldrh r0, [r3, 0x26] - subs r2, r0, 0x1 - movs r5, 0 - strh r2, [r3, 0x26] - lsls r0, r2, 16 - asrs r1, r0, 16 - cmp r1, 0 - blt _08044FAC - ldr r1, _08044FA8 @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r2 - lsls r0, 8 - orrs r2, r0 - strh r2, [r1] - b _08045022 - .align 2, 0 -_08044FA4: .4byte gTasks -_08044FA8: .4byte REG_BLDALPHA -_08044FAC: - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _0804500C - ldrb r3, [r3, 0xA] - movs r5, 0 - adds r0, r7, 0 - adds r0, 0xE - adds r2, r6, r0 -_08044FBE: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _08044FBE - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - ldr r4, _08045008 @ =gSprites - adds r0, r4 - bl DestroySpriteAndFreeResources - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySpriteAndFreeResources - movs r5, 0x1 -_08044FEE: - mov r1, sp - adds r0, r1, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - adds r5, 0x1 - cmp r5, 0x5 - ble _08044FEE - b _08045022 - .align 2, 0 -_08045008: .4byte gSprites -_0804500C: - movs r0, 0x3 - negs r0, r0 - cmp r1, r0 - bne _08045022 - ldr r0, _0804502C @ =REG_BLDCNT - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, r4, 0 - bl DestroyTask -_08045022: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804502C: .4byte REG_BLDCNT - thumb_func_end sub_8044F70 - - thumb_func_start sub_8045030 -sub_8045030: @ 8045030 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x24] - movs r3, 0x24 - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _08045044 - ldrh r0, [r1, 0x2E] - adds r0, r2, r0 - strh r0, [r1, 0x24] -_08045044: - pop {r0} - bx r0 - thumb_func_end sub_8045030 - - thumb_func_start sub_8045048 -sub_8045048: @ 8045048 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - adds r1, r0, 0 - adds r1, 0x20 - strh r1, [r2, 0x30] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _08045066 - lsls r0, r1, 16 - asrs r0, 20 - ldrh r1, [r2, 0x24] - adds r0, r1 - b _0804506E -_08045066: - lsls r1, 16 - asrs r1, 20 - ldrh r0, [r2, 0x24] - subs r0, r1 -_0804506E: - strh r0, [r2, 0x24] - ldrh r1, [r2, 0x30] - movs r0, 0xF - ands r0, r1 - strh r0, [r2, 0x30] - pop {r0} - bx r0 - thumb_func_end sub_8045048 - - thumb_func_start sub_804507C -sub_804507C: @ 804507C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _08045090 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - b _08045106 -_08045090: - ldrh r0, [r4, 0x32] - lsls r0, 24 - lsrs r3, r0, 24 - ldrh r2, [r4, 0x34] - adds r0, r2, 0 - adds r0, 0x38 - lsls r1, r0, 16 - lsrs r2, r1, 16 - ldr r0, _080450C0 @ =0x0000fff0 - ands r2, r0 - strh r2, [r4, 0x34] - cmp r3, 0 - beq _080450C4 - lsrs r0, r1, 20 - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - ble _080450D4 - movs r0, 0 - strh r0, [r4, 0x24] - b _080450D4 - .align 2, 0 -_080450C0: .4byte 0x0000fff0 -_080450C4: - lsrs r1, 20 - ldrh r0, [r4, 0x24] - subs r0, r1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - bge _080450D4 - strh r3, [r4, 0x24] -_080450D4: - movs r2, 0x24 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _08045106 - movs r1, 0x3F - cmp r3, 0 - beq _080450E4 - movs r1, 0xC0 -_080450E4: - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080450F8 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x74 - bl PlaySE2WithPanning - b _08045102 -_080450F8: - lsls r1, 24 - asrs r1, 24 - movs r0, 0x73 - bl PlaySE1WithPanning -_08045102: - ldr r0, _0804510C @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_08045106: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804510C: .4byte SpriteCallbackDummy - thumb_func_end sub_804507C - - thumb_func_start sub_8045110 -sub_8045110: @ 8045110 - push {r4,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x30] - movs r2, 0x30 - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _08045124 - subs r0, r1, 0x1 - strh r0, [r3, 0x30] - b _08045174 -_08045124: - ldrh r0, [r3, 0x32] - lsls r0, 24 - ldrh r2, [r3, 0x34] - adds r1, r2, 0 - adds r1, 0x38 - lsls r4, r1, 16 - lsrs r2, r4, 16 - ldr r1, _08045144 @ =0x0000fff0 - ands r2, r1 - strh r2, [r3, 0x34] - cmp r0, 0 - beq _08045148 - lsrs r0, r4, 20 - ldrh r1, [r3, 0x24] - adds r0, r1 - b _0804514E - .align 2, 0 -_08045144: .4byte 0x0000fff0 -_08045148: - lsrs r1, r4, 20 - ldrh r0, [r3, 0x24] - subs r0, r1 -_0804514E: - strh r0, [r3, 0x24] - movs r2, 0x24 - ldrsh r0, [r3, r2] - movs r2, 0x20 - ldrsh r1, [r3, r2] - adds r0, r1 - adds r0, 0x8 - movs r1, 0x80 - lsls r1, 1 - cmp r0, r1 - bls _08045174 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0804517C @ =SpriteCallbackDummy - str r0, [r3, 0x1C] -_08045174: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804517C: .4byte SpriteCallbackDummy - thumb_func_end sub_8045110 - - thumb_func_start sub_8045180 -sub_8045180: @ 8045180 - ldrh r2, [r0, 0x2E] - lsls r2, 24 - lsrs r2, 24 - ldr r3, _0804519C @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - ldrh r2, [r1, 0x24] - strh r2, [r0, 0x24] - ldrh r1, [r1, 0x26] - strh r1, [r0, 0x26] - bx lr - .align 2, 0 -_0804519C: .4byte gSprites - thumb_func_end sub_8045180 - - thumb_func_start sub_80451A0 -sub_80451A0: @ 80451A0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r7, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r4, _08045238 @ =gUnknown_020238CC - ldr r1, _0804523C @ =gUnknown_0820A8B0 - adds r0, r4, 0 - bl StringCopy - adds r0, r7, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - mov r0, sp - bl StringGetEnd10 - adds r4, 0x3 - adds r0, r4, 0 - mov r1, sp - bl StringCopy - adds r5, r0, 0 - movs r1, 0xFC - strb r1, [r5] - movs r0, 0x3 - strb r0, [r5, 0x1] - movs r0, 0x2 - strb r0, [r5, 0x2] - strb r1, [r5, 0x3] - movs r0, 0x1 - strb r0, [r5, 0x4] - adds r5, 0x5 - adds r0, r7, 0 - bl GetMonGender - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r7, 0 - movs r1, 0xB - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r7, 0 - movs r1, 0x3 - bl GetMonData - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - mov r1, sp - bl sub_8040D3C - cmp r0, 0 - beq _08045222 - movs r6, 0x64 -_08045222: - cmp r6, 0 - beq _08045240 - cmp r6, 0xFE - beq _08045248 - movs r0, 0xB - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] - adds r5, 0x1 - b _08045256 - .align 2, 0 -_08045238: .4byte gUnknown_020238CC -_0804523C: .4byte gUnknown_0820A8B0 -_08045240: - movs r0, 0xB - strb r0, [r5] - movs r0, 0xB5 - b _0804524E -_08045248: - movs r0, 0xA - strb r0, [r5] - movs r0, 0xB6 -_0804524E: - strb r0, [r5, 0x1] - movs r0, 0xFF - strb r0, [r5, 0x2] - adds r5, 0x2 -_08045256: - movs r0, 0xFC - strb r0, [r5] - movs r0, 0x13 - strb r0, [r5, 0x1] - movs r0, 0x37 - strb r0, [r5, 0x2] - movs r0, 0xFF - strb r0, [r5, 0x3] - ldr r1, _080452D8 @ =gSprites - mov r0, r9 - lsls r4, r0, 4 - adds r0, r4, r0 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 7 - ldr r2, _080452DC @ =0x02000520 - adds r5, r1, r2 - ldr r0, _080452E0 @ =gUnknown_020238CC - mov r8, r0 - adds r0, r5, 0 - mov r1, r8 - bl sub_80034D4 - movs r6, 0 - movs r1, 0x7 - mov r10, r1 - adds r0, r7, 0 - movs r1, 0x3 - bl GetMonData - str r4, [sp, 0xC] - cmp r0, 0x1 - bne _08045338 - adds r0, r7, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08045338 - mov r4, r8 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - beq _08045338 - adds r7, r5, 0 -_080452C2: - cmp r1, 0xFC - bne _080452E4 - ldrb r0, [r4, 0x1] - bl GetExtCtrlCodeLength - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1 - adds r4, r0 - b _08045330 - .align 2, 0 -_080452D8: .4byte gSprites -_080452DC: .4byte 0x02000520 -_080452E0: .4byte gUnknown_020238CC -_080452E4: - adds r0, r1, 0 - subs r0, 0x37 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bls _080452FC - adds r0, r1, 0 - adds r0, 0x79 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bhi _08045300 -_080452FC: - movs r0, 0x2C - b _0804531E -_08045300: - adds r0, r1, 0 - subs r0, 0x4B - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bls _08045318 - adds r0, r1, 0 - adds r0, 0x65 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _0804531C -_08045318: - movs r0, 0x2D - b _0804531E -_0804531C: - movs r0, 0x2B -_0804531E: - bl sub_8043CDC - adds r1, r7, 0 - ldr r2, _080453C8 @ =REG_BG0CNT - bl CpuSet - adds r7, 0x40 - adds r6, 0x1 - adds r4, 0x1 -_08045330: - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _080452C2 -_08045338: - cmp r6, r10 - bge _0804535A - lsls r0, r6, 6 - adds r4, r0, r5 - mov r2, r10 - subs r6, r2, r6 -_08045344: - movs r0, 0x2B - bl sub_8043CDC - adds r1, r4, 0 - ldr r2, _080453C8 @ =REG_BG0CNT - bl CpuSet - adds r4, 0x40 - subs r6, 0x1 - cmp r6, 0 - bne _08045344 -_0804535A: - ldr r1, _080453CC @ =gSprites - ldr r0, [sp, 0xC] - add r0, r9 - lsls r0, 2 - adds r6, r0, r1 - ldrh r0, [r6, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080453D4 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _080453D4 - ldr r1, _080453D0 @ =gUnknown_0820A8B4 - mov r0, r10 - cmp r0, 0 - beq _08045438 - mov r8, r6 - mov r9, r1 - ldr r7, _080453C8 @ =REG_BG0CNT - mov r6, r10 -_0804538E: - mov r1, r9 - adds r1, 0x4 - mov r9, r1 - subs r1, 0x4 - ldm r1!, {r4} - mov r2, r8 - ldrh r0, [r2, 0x4] - lsls r0, 22 - lsrs r0, 17 - adds r4, r0 - adds r0, r5, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl CpuSet - adds r5, 0x20 - movs r0, 0x80 - lsls r0, 1 - adds r4, r0 - adds r0, r5, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl CpuSet - adds r5, 0x20 - subs r6, 0x1 - cmp r6, 0 - bne _0804538E - b _08045438 - .align 2, 0 -_080453C8: .4byte REG_BG0CNT -_080453CC: .4byte gSprites -_080453D0: .4byte gUnknown_0820A8B4 -_080453D4: - ldr r1, _08045448 @ =gSprites - ldr r0, [sp, 0xC] - add r0, r9 - lsls r0, 2 - adds r4, r0, r1 - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - ldr r1, _0804544C @ =gUnknown_0820A8DC - cmp r0, 0 - bne _080453F2 - ldr r1, _08045450 @ =gUnknown_0820A904 -_080453F2: - mov r2, r10 - cmp r2, 0 - beq _08045438 - mov r8, r4 - mov r9, r1 - ldr r7, _08045454 @ =REG_BG0CNT - mov r6, r10 -_08045400: - mov r0, r9 - adds r0, 0x4 - mov r9, r0 - subs r0, 0x4 - ldm r0!, {r4} - mov r1, r8 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r0, 17 - adds r4, r0 - adds r0, r5, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl CpuSet - adds r5, 0x20 - movs r2, 0x80 - lsls r2, 1 - adds r4, r2 - adds r0, r5, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl CpuSet - adds r5, 0x20 - subs r6, 0x1 - cmp r6, 0 - bne _08045400 -_08045438: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08045448: .4byte gSprites -_0804544C: .4byte gUnknown_0820A8DC -_08045450: .4byte gUnknown_0820A904 -_08045454: .4byte REG_BG0CNT - thumb_func_end sub_80451A0 - - thumb_func_start sub_8045458 -sub_8045458: @ 8045458 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r7, r1, 24 - ldr r0, _080454F4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - bne _0804552E - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0804552E - ldr r6, _080454F8 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r5, r0, r6 - ldrh r0, [r5, 0x3A] - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _0804552E - ldr r1, _080454FC @ =gUnknown_02024A6A - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08045500 @ =gEnemyParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - beq _0804552E - ldrh r0, [r5, 0x38] - lsls r0, 24 - lsrs r4, r0, 24 - cmp r7, 0 - beq _0804550C - movs r0, 0x46 - bl sub_8043CDC - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r6 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2 - ldr r2, _08045504 @ =0x06010000 - adds r1, r2 - ldr r2, _08045508 @ =REG_BG0CNT - bl CpuSet - b _0804552E - .align 2, 0 -_080454F4: .4byte gBattleTypeFlags -_080454F8: .4byte gSprites -_080454FC: .4byte gUnknown_02024A6A -_08045500: .4byte gEnemyParty -_08045504: .4byte 0x06010000 -_08045508: .4byte REG_BG0CNT -_0804550C: - str r7, [sp] - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r6 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r0, 0x80 - lsls r0, 1 - adds r1, r0 - ldr r0, _08045538 @ =0x06010000 - adds r1, r0 - ldr r2, _0804553C @ =0x05000008 - mov r0, sp - bl CpuSet -_0804552E: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08045538: .4byte 0x06010000 -_0804553C: .4byte 0x05000008 - thumb_func_end sub_8045458 - - thumb_func_start draw_status_ailment_maybe -draw_status_ailment_maybe: @ 8045540 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r0, _080455A4 @ =gSprites - mov r2, r9 - lsls r1, r2, 4 - add r1, r9 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x3A] - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r1, 0x38] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - adds r0, r7, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080455B0 - ldr r1, _080455A8 @ =gUnknown_02024A6A - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080455AC @ =gPlayerParty - adds r0, r1 - movs r1, 0x37 - bl GetMonData - adds r4, r0, 0 - bl IsDoubleBattle - lsls r0, 24 - movs r3, 0x12 - mov r8, r3 - cmp r0, 0 - bne _080455CC - movs r0, 0x1A - mov r8, r0 - b _080455CC - .align 2, 0 -_080455A4: .4byte gSprites -_080455A8: .4byte gUnknown_02024A6A -_080455AC: .4byte gPlayerParty -_080455B0: - ldr r1, _080455EC @ =gUnknown_02024A6A - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080455F0 @ =gEnemyParty - adds r0, r1 - movs r1, 0x37 - bl GetMonData - adds r4, r0, 0 - movs r1, 0x11 - mov r8, r1 -_080455CC: - movs r0, 0x7 - ands r0, r4 - cmp r0, 0 - beq _080455F4 - movs r0, 0x1B - adds r1, r7, 0 - bl sub_80457E8 - lsls r0, 24 - lsrs r0, 24 - bl sub_8043CDC - adds r6, r0, 0 - movs r0, 0x2 - b _080456FC - .align 2, 0 -_080455EC: .4byte gUnknown_02024A6A -_080455F0: .4byte gEnemyParty -_080455F4: - movs r0, 0x88 - ands r0, r4 - cmp r0, 0 - beq _08045612 - movs r0, 0x15 - adds r1, r7, 0 - bl sub_80457E8 - lsls r0, 24 - lsrs r0, 24 - bl sub_8043CDC - adds r6, r0, 0 - movs r0, 0 - b _080456FC -_08045612: - movs r0, 0x10 - ands r0, r4 - cmp r0, 0 - beq _08045630 - movs r0, 0x21 - adds r1, r7, 0 - bl sub_80457E8 - lsls r0, 24 - lsrs r0, 24 - bl sub_8043CDC - adds r6, r0, 0 - movs r0, 0x4 - b _080456FC -_08045630: - movs r0, 0x20 - ands r0, r4 - cmp r0, 0 - beq _0804564E - movs r0, 0x1E - adds r1, r7, 0 - bl sub_80457E8 - lsls r0, 24 - lsrs r0, 24 - bl sub_8043CDC - adds r6, r0, 0 - movs r0, 0x3 - b _080456FC -_0804564E: - movs r0, 0x40 - ands r0, r4 - cmp r0, 0 - beq _0804566C - movs r0, 0x18 - adds r1, r7, 0 - bl sub_80457E8 - lsls r0, 24 - lsrs r0, 24 - bl sub_8043CDC - adds r6, r0, 0 - movs r0, 0x1 - b _080456FC -_0804566C: - movs r0, 0x27 - bl sub_8043CDC - adds r6, r0, 0 - movs r4, 0 - mov r2, r9 - lsls r0, r2, 4 - mov r3, r8 - lsls r3, 16 - mov r8, r3 - lsls r7, 2 - ldr r1, _080456E8 @ =gSprites - add r0, r9 - lsls r0, 2 - adds r5, r0, r1 -_0804568A: - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - mov r2, r8 - asrs r0, r2, 16 - adds r1, r0 - adds r1, r4 - lsls r1, 5 - ldr r3, _080456EC @ =0x06010000 - adds r1, r3 - adds r0, r6, 0 - ldr r2, _080456F0 @ =REG_BG0CNT - bl CpuSet - adds r4, 0x1 - cmp r4, 0x2 - ble _0804568A - ldr r0, _080456F4 @ =0x02017800 - adds r0, r7, r0 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080456DC - movs r0, 0x1 - bl sub_8043CDC - ldr r2, _080456E8 @ =gSprites - mov r3, r10 - lsls r1, r3, 4 - add r1, r10 - lsls r1, 2 - adds r1, r2 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _080456EC @ =0x06010000 - adds r1, r2 - ldr r2, _080456F8 @ =REG_BG0HOFS - bl CpuSet -_080456DC: - mov r0, r9 - movs r1, 0x1 - bl sub_8045458 - b _080457BA - .align 2, 0 -_080456E8: .4byte gSprites -_080456EC: .4byte 0x06010000 -_080456F0: .4byte REG_BG0CNT -_080456F4: .4byte 0x02017800 -_080456F8: .4byte REG_BG0HOFS -_080456FC: - mov r1, r9 - lsls r5, r1, 4 - add r5, r9 - lsls r5, 2 - ldr r2, _080457C8 @ =gSprites - adds r5, r2 - ldrb r4, [r5, 0x5] - lsrs r4, 4 - lsls r4, 4 - adds r4, 0xC - adds r4, r7 - lsls r0, 1 - ldr r1, _080457CC @ =gBattleInterfaceStatusIcons_DynPal - adds r0, r1 - ldrh r0, [r0] - movs r3, 0x80 - lsls r3, 1 - adds r1, r4, r3 - movs r2, 0x2 - bl FillPalette - lsls r4, 1 - ldr r0, _080457D0 @ =gPlttBufferUnfaded + 0x200 - adds r0, r4, r0 - ldr r1, _080457D4 @ =0x05000200 - adds r4, r1 - adds r1, r4, 0 - movs r2, 0x1 - bl CpuSet - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - add r1, r8 - lsls r1, 5 - ldr r2, _080457D8 @ =0x06010000 - mov r8, r2 - add r1, r8 - ldr r2, _080457DC @ =REG_BG2HOFS - adds r0, r6, 0 - bl CpuSet - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0804576A - adds r0, r7, 0 - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080457B2 -_0804576A: - lsls r0, r7, 2 - ldr r1, _080457E0 @ =0x02017800 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080457B2 - movs r0, 0 - bl sub_8043CDC - mov r3, r10 - lsls r4, r3, 4 - add r4, r10 - lsls r4, 2 - ldr r1, _080457C8 @ =gSprites - adds r4, r1 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - add r1, r8 - ldr r5, _080457E4 @ =REG_BG0CNT - adds r2, r5, 0 - bl CpuSet - movs r0, 0x41 - bl sub_8043CDC - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - adds r1, 0x20 - add r1, r8 - adds r2, r5, 0 - bl CpuSet -_080457B2: - mov r0, r9 - movs r1, 0 - bl sub_8045458 -_080457BA: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080457C8: .4byte gSprites -_080457CC: .4byte gBattleInterfaceStatusIcons_DynPal -_080457D0: .4byte gPlttBufferUnfaded + 0x200 -_080457D4: .4byte 0x05000200 -_080457D8: .4byte 0x06010000 -_080457DC: .4byte REG_BG2HOFS -_080457E0: .4byte 0x02017800 -_080457E4: .4byte REG_BG0CNT - thumb_func_end draw_status_ailment_maybe - - thumb_func_start sub_80457E8 -sub_80457E8: @ 80457E8 - push {lr} - lsls r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsrs r2, r0, 24 - adds r0, r2, 0 - subs r0, 0x15 - cmp r0, 0xC - bhi _080458A8 - lsls r0, 2 - ldr r1, _08045804 @ =_08045808 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08045804: .4byte _08045808 - .align 2, 0 -_08045808: - .4byte _0804583C - .4byte _080458A8 - .4byte _080458A8 - .4byte _08045852 - .4byte _080458A8 - .4byte _080458A8 - .4byte _08045868 - .4byte _080458A8 - .4byte _080458A8 - .4byte _0804587E - .4byte _080458A8 - .4byte _080458A8 - .4byte _08045894 -_0804583C: - movs r2, 0x15 - cmp r3, 0 - beq _080458A8 - movs r2, 0x47 - cmp r3, 0x1 - beq _080458A8 - movs r2, 0x65 - cmp r3, 0x2 - bne _080458A8 - movs r2, 0x56 - b _080458A8 -_08045852: - movs r2, 0x18 - cmp r3, 0 - beq _080458A8 - movs r2, 0x4A - cmp r3, 0x1 - beq _080458A8 - movs r2, 0x68 - cmp r3, 0x2 - bne _080458A8 - movs r2, 0x59 - b _080458A8 -_08045868: - movs r2, 0x1B - cmp r3, 0 - beq _080458A8 - movs r2, 0x4D - cmp r3, 0x1 - beq _080458A8 - movs r2, 0x6B - cmp r3, 0x2 - bne _080458A8 - movs r2, 0x5C - b _080458A8 -_0804587E: - movs r2, 0x1E - cmp r3, 0 - beq _080458A8 - movs r2, 0x50 - cmp r3, 0x1 - beq _080458A8 - movs r2, 0x6E - cmp r3, 0x2 - bne _080458A8 - movs r2, 0x5F - b _080458A8 -_08045894: - movs r2, 0x21 - cmp r3, 0 - beq _080458A8 - movs r2, 0x53 - cmp r3, 0x1 - beq _080458A8 - movs r2, 0x71 - cmp r3, 0x2 - bne _080458A8 - movs r2, 0x62 -_080458A8: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end sub_80457E8 - - thumb_func_start sub_80458B0 -sub_80458B0: @ 80458B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08045984 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 7 - ldr r0, _08045988 @ =0x02000520 - adds r6, r1, r0 - movs r1, 0x7 - mov r8, r1 - ldr r1, _0804598C @ =gUnknown_08400DD6 - adds r0, r6, 0 - bl sub_80034D4 - movs r4, 0 -_080458EE: - movs r0, 0x2B - bl sub_8043CDC - lsls r1, r4, 6 - adds r1, r6, r1 - ldr r2, _08045990 @ =REG_BG0CNT - bl CpuSet - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r8 - bcc _080458EE - movs r7, 0x3 - movs r2, 0x3 - add r2, r8 - mov r9, r2 - cmp r7, r9 - bge _08045974 - ldr r1, _08045984 @ =gSprites - ldr r0, _08045990 @ =REG_BG0CNT - mov r10, r0 - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - mov r8, r0 -_08045924: - mov r1, r8 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r5, r7, 0 - cmp r7, 0 - bge _08045934 - adds r5, r7, 0x7 -_08045934: - asrs r5, 3 - lsls r4, r5, 3 - subs r4, r7, r4 - adds r0, r4 - lsls r5, 6 - adds r0, r5 - lsls r0, 5 - ldr r2, _08045994 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - mov r1, r8 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r4, 0x8 - adds r0, r4 - adds r0, r5 - lsls r0, 5 - ldr r2, _08045994 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - adds r7, 0x1 - cmp r7, r9 - blt _08045924 -_08045974: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08045984: .4byte gSprites -_08045988: .4byte 0x02000520 -_0804598C: .4byte gUnknown_08400DD6 -_08045990: .4byte REG_BG0CNT -_08045994: .4byte 0x06010000 - thumb_func_end sub_80458B0 - - thumb_func_start sub_8045998 -sub_8045998: @ 8045998 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08045A38 @ =gUnknown_020238CC - mov r8, r0 - ldr r1, _08045A3C @ =gUnknown_08400DE6 - bl StringCopy - adds r7, r0, 0 - ldr r0, _08045A40 @ =gNumSafariBalls - ldrb r1, [r0] - adds r0, r7, 0 - movs r2, 0xA - movs r3, 0x1 - bl sub_8003504 - adds r7, r0, 0 - ldr r1, _08045A44 @ =gUnknown_08400DF0 - bl StringAppend - ldr r0, _08045A48 @ =gSprites - lsls r5, r4, 4 - adds r5, r4 - lsls r5, 2 - adds r5, r0 - ldrh r0, [r5, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 7 - ldr r0, _08045A4C @ =0x02000520 - adds r7, r4, r0 - movs r6, 0x5 - adds r0, r7, 0 - mov r1, r8 - bl sub_80034D4 - ldr r0, _08045A50 @ =0x02000540 - adds r7, r4, r0 - movs r4, 0x6 -_080459F8: - ldrh r0, [r5, 0x4] - lsls r0, 22 - lsrs r2, r0, 22 - adds r0, r4, 0 - cmp r4, 0 - bge _08045A06 - adds r0, r4, 0x7 -_08045A06: - asrs r0, 3 - lsls r1, r0, 3 - subs r1, r4, r1 - adds r1, 0x18 - adds r1, r2, r1 - lsls r0, 6 - adds r1, r0 - lsls r1, 5 - ldr r0, _08045A54 @ =0x06010000 - adds r1, r0 - adds r0, r7, 0 - ldr r2, _08045A58 @ =REG_BG0CNT - bl CpuSet - adds r7, 0x40 - adds r4, 0x1 - adds r0, r6, 0x6 - cmp r4, r0 - blt _080459F8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08045A38: .4byte gUnknown_020238CC -_08045A3C: .4byte gUnknown_08400DE6 -_08045A40: .4byte gNumSafariBalls -_08045A44: .4byte gUnknown_08400DF0 -_08045A48: .4byte gSprites -_08045A4C: .4byte 0x02000520 -_08045A50: .4byte 0x02000540 -_08045A54: .4byte 0x06010000 -_08045A58: .4byte REG_BG0CNT - thumb_func_end sub_8045998 - - thumb_func_start sub_8045A5C -sub_8045A5C: @ 8045A5C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r9, r1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r2, 24 - lsrs r7, r2, 24 - ldr r1, _08045BE4 @ =gSprites - lsls r0, 4 - add r0, r8 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08045A92 - b _08045BF0 -_08045A92: - cmp r7, 0x3 - beq _08045A9A - cmp r7, 0 - bne _08045AAE -_08045A9A: - mov r0, r9 - movs r1, 0x38 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, r8 - bl sub_8043FC0 -_08045AAE: - cmp r7, 0x1 - bhi _08045AC8 - mov r0, r9 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - mov r0, r8 - movs r2, 0 - bl sub_80440EC -_08045AC8: - cmp r7, 0x2 - beq _08045AD0 - cmp r7, 0 - bne _08045AE6 -_08045AD0: - mov r0, r9 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - mov r0, r8 - movs r2, 0x1 - bl sub_80440EC -_08045AE6: - cmp r7, 0x5 - beq _08045AEE - cmp r7, 0 - bne _08045B22 -_08045AEE: - movs r0, 0 - bl load_gfxc_health_bar - mov r0, r9 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - mov r0, r9 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - movs r0, 0 - str r0, [sp] - mov r0, r10 - mov r1, r8 - adds r2, r4, 0 - bl sub_8043D84 - mov r0, r10 - mov r1, r8 - movs r2, 0 - movs r3, 0 - bl sub_8045C78 -_08045B22: - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - cmp r0, 0 - bne _08045BA6 - cmp r7, 0x6 - beq _08045B38 - cmp r7, 0 - bne _08045BA6 -_08045B38: - movs r0, 0x3 - bl load_gfxc_health_bar - mov r0, r9 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r0, r9 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r0, r9 - movs r1, 0x19 - bl GetMonData - adds r3, r0, 0 - ldr r6, _08045BE8 @ =gExperienceTables - lsls r1, r4, 2 - ldr r2, _08045BEC @ =gBaseStats - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r2 - adds r1, r0 - adds r1, r6 - ldr r1, [r1] - subs r3, r1 - adds r4, 0x1 - lsls r4, 2 - adds r4, r0 - adds r4, r6 - ldr r2, [r4] - subs r2, r1 - ldr r0, [sp, 0x4] - str r0, [sp] - mov r0, r10 - mov r1, r8 - bl sub_8043D84 - mov r0, r10 - mov r1, r8 - movs r2, 0x1 - movs r3, 0 - bl sub_8045C78 -_08045BA6: - cmp r7, 0x4 - beq _08045BAE - cmp r7, 0 - bne _08045BB6 -_08045BAE: - mov r0, r8 - mov r1, r9 - bl sub_80451A0 -_08045BB6: - cmp r7, 0x9 - beq _08045BBE - cmp r7, 0 - bne _08045BC4 -_08045BBE: - mov r0, r8 - bl draw_status_ailment_maybe -_08045BC4: - cmp r7, 0xA - bne _08045BCE - mov r0, r8 - bl sub_80458B0 -_08045BCE: - adds r0, r7, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08045C66 - mov r0, r8 - bl sub_8045998 - b _08045C66 - .align 2, 0 -_08045BE4: .4byte gSprites -_08045BE8: .4byte gExperienceTables -_08045BEC: .4byte gBaseStats -_08045BF0: - cmp r7, 0x3 - beq _08045BF8 - cmp r7, 0 - bne _08045C0C -_08045BF8: - mov r0, r9 - movs r1, 0x38 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, r8 - bl sub_8043FC0 -_08045C0C: - cmp r7, 0x5 - beq _08045C14 - cmp r7, 0 - bne _08045C48 -_08045C14: - movs r0, 0 - bl load_gfxc_health_bar - mov r0, r9 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - mov r0, r9 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - movs r0, 0 - str r0, [sp] - mov r0, r10 - mov r1, r8 - adds r2, r4, 0 - bl sub_8043D84 - mov r0, r10 - mov r1, r8 - movs r2, 0 - movs r3, 0 - bl sub_8045C78 -_08045C48: - cmp r7, 0x4 - beq _08045C50 - cmp r7, 0 - bne _08045C58 -_08045C50: - mov r0, r8 - mov r1, r9 - bl sub_80451A0 -_08045C58: - cmp r7, 0x9 - beq _08045C60 - cmp r7, 0 - bne _08045C66 -_08045C60: - mov r0, r8 - bl draw_status_ailment_maybe -_08045C66: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8045A5C - - thumb_func_start sub_8045C78 -sub_8045C78: @ 8045C78 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - cmp r2, 0 - bne _08045CBC - lsls r5, r7, 2 - adds r3, r5, r7 - lsls r3, 2 - ldr r4, _08045CB8 @ =0x02017850 - adds r2, r3, r4 - ldr r0, [r2, 0x4] - ldr r1, [r2, 0x8] - ldr r2, [r2, 0xC] - adds r4, 0x10 - adds r3, r4 - movs r4, 0x6 - str r4, [sp] - movs r4, 0x1 - str r4, [sp, 0x4] - bl sub_8045F58 - adds r6, r0, 0 - adds r4, r5, 0 - b _08045D0A - .align 2, 0 -_08045CB8: .4byte 0x02017850 -_08045CBC: - lsls r4, r7, 2 - adds r0, r4, r7 - lsls r0, 2 - mov r10, r0 - ldr r6, _08045D50 @ =0x02017850 - add r6, r10 - ldr r0, [r6, 0x8] - ldr r1, [r6, 0xC] - ldr r2, [r6, 0x4] - movs r3, 0x8 - bl GetScaledExpFraction - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08045CDE - movs r5, 0x1 -_08045CDE: - ldr r0, [r6, 0xC] - mov r8, r0 - adds r1, r5, 0 - bl __divsi3 - cmp r0, 0 - bge _08045CEE - negs r0, r0 -_08045CEE: - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r6, 0x4] - ldr r1, [r6, 0x8] - ldr r3, _08045D50 @ =0x02017850 - adds r3, 0x10 - add r3, r10 - movs r2, 0x8 - str r2, [sp] - str r5, [sp, 0x4] - mov r2, r8 - bl sub_8045F58 - adds r6, r0, 0 -_08045D0A: - mov r0, r9 - cmp r0, 0x1 - beq _08045D22 - cmp r0, 0 - bne _08045D2A - ldr r0, _08045D54 @ =0x02017800 - adds r0, r4, r0 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08045D2A -_08045D22: - adds r0, r7, 0 - mov r1, r9 - bl sub_8045D58 -_08045D2A: - movs r0, 0x1 - negs r0, r0 - cmp r6, r0 - bne _08045D3E - adds r0, r4, r7 - lsls r0, 2 - ldr r1, _08045D50 @ =0x02017850 - adds r0, r1 - movs r1, 0 - str r1, [r0, 0x10] -_08045D3E: - adds r0, r6, 0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08045D50: .4byte 0x02017850 -_08045D54: .4byte 0x02017800 - thumb_func_end sub_8045C78 - - thumb_func_start sub_8045D58 -sub_8045D58: @ 8045D58 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0 - beq _08045D72 - cmp r1, 0x1 - beq _08045E54 - b _08045F42 -_08045D72: - lsls r5, r6, 2 - adds r3, r5, r6 - lsls r3, 2 - ldr r4, _08045E00 @ =0x02017850 - adds r2, r3, r4 - ldr r0, [r2, 0x4] - ldr r1, [r2, 0x8] - ldr r2, [r2, 0xC] - adds r4, 0x10 - adds r3, r4 - add r4, sp, 0x8 - str r4, [sp] - movs r4, 0x6 - str r4, [sp, 0x4] - bl sub_804602C - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - mov r8, r1 - adds r1, r5, 0 - cmp r0, 0x18 - bhi _08045DAC - movs r2, 0x38 - mov r8, r2 - cmp r0, 0x9 - bls _08045DAC - movs r4, 0x2F - mov r8, r4 -_08045DAC: - movs r5, 0 - ldr r7, _08045E04 @ =gSprites - adds r0, r1, r6 - lsls r6, r0, 2 -_08045DB4: - ldr r0, _08045E00 @ =0x02017850 - adds r0, r6, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r4, r0, 24 - cmp r5, 0x1 - bhi _08045E10 - mov r0, r8 - bl sub_8043CDC - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r7 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r5, 0x2 - adds r1, r2 - lsls r1, 5 - ldr r2, _08045E08 @ =0x06010000 - adds r1, r2 - ldr r2, _08045E0C @ =REG_BG0CNT - bl CpuSet - b _08045E3E - .align 2, 0 -_08045E00: .4byte 0x02017850 -_08045E04: .4byte gSprites -_08045E08: .4byte 0x06010000 -_08045E0C: .4byte REG_BG0CNT -_08045E10: - mov r0, r8 - bl sub_8043CDC - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r7 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r5, r1 - lsls r1, 5 - ldr r4, _08045E4C @ =0x06010040 - adds r1, r4 - ldr r2, _08045E50 @ =REG_BG0CNT - bl CpuSet -_08045E3E: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _08045DB4 - b _08045F42 - .align 2, 0 -_08045E4C: .4byte 0x06010040 -_08045E50: .4byte REG_BG0CNT -_08045E54: - lsls r5, r6, 2 - adds r3, r5, r6 - lsls r3, 2 - ldr r4, _08045EF0 @ =0x02017850 - adds r2, r3, r4 - ldr r0, [r2, 0x4] - ldr r1, [r2, 0x8] - ldr r2, [r2, 0xC] - adds r4, 0x10 - adds r3, r4 - add r4, sp, 0x8 - str r4, [sp] - movs r4, 0x8 - str r4, [sp, 0x4] - bl sub_804602C - ldr r1, _08045EF4 @ =gUnknown_02024A6A - lsls r0, r6, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08045EF8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - adds r1, r5, 0 - cmp r0, 0x64 - bne _08045EAA - movs r5, 0 - movs r2, 0 -_08045E98: - mov r0, sp - adds r0, r5 - adds r0, 0x8 - strb r2, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _08045E98 -_08045EAA: - movs r5, 0 - ldr r7, _08045EFC @ =gSprites - adds r0, r1, r6 - lsls r0, 2 - ldr r1, _08045EF0 @ =0x02017850 - adds r4, r0, r1 -_08045EB6: - cmp r5, 0x3 - bhi _08045F08 - movs r0, 0xC - bl sub_8043CDC - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - ldrb r2, [r4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r7 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r5, 0 - adds r2, 0x24 - adds r1, r2 - lsls r1, 5 - ldr r2, _08045F00 @ =0x06010000 - adds r1, r2 - ldr r2, _08045F04 @ =REG_BG0CNT - bl CpuSet - b _08045F38 - .align 2, 0 -_08045EF0: .4byte 0x02017850 -_08045EF4: .4byte gUnknown_02024A6A -_08045EF8: .4byte gPlayerParty -_08045EFC: .4byte gSprites -_08045F00: .4byte 0x06010000 -_08045F04: .4byte REG_BG0CNT -_08045F08: - movs r0, 0xC - bl sub_8043CDC - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - ldrb r2, [r4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r7 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r5, r1 - lsls r1, 5 - ldr r2, _08045F50 @ =0x06010b80 - adds r1, r2 - ldr r2, _08045F54 @ =REG_BG0CNT - bl CpuSet -_08045F38: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _08045EB6 -_08045F42: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08045F50: .4byte 0x06010b80 -_08045F54: .4byte REG_BG0CNT - thumb_func_end sub_8045D58 - - thumb_func_start sub_8045F58 -sub_8045F58: @ 8045F58 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r4, r1, 0 - mov r8, r2 - adds r5, r3, 0 - ldr r1, [sp, 0x18] - ldr r0, [sp, 0x1C] - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 27 - lsrs r2, r1, 24 - ldr r1, [r5] - ldr r0, _08045F84 @ =0xffff8000 - cmp r1, r0 - bne _08045F8A - cmp r7, r2 - bge _08045F88 - lsls r0, r4, 8 - str r0, [r5] - b _08045F8A - .align 2, 0 -_08045F84: .4byte 0xffff8000 -_08045F88: - str r4, [r5] -_08045F8A: - mov r0, r8 - subs r4, r0 - cmp r4, 0 - bge _08045F96 - movs r4, 0 - b _08045F9C -_08045F96: - cmp r4, r7 - ble _08045F9C - adds r4, r7, 0 -_08045F9C: - cmp r7, r2 - bge _08045FB8 - ldr r0, [r5] - asrs r1, r0, 8 - adds r6, r0, 0 - cmp r4, r1 - bne _08045FC4 - movs r0, 0xFF - ands r0, r6 - cmp r0, 0 - bne _08045FC4 - movs r0, 0x1 - negs r0, r0 - b _08046020 -_08045FB8: - ldr r6, [r5] - cmp r4, r6 - bne _08045FC4 - movs r0, 0x1 - negs r0, r0 - b _08046020 -_08045FC4: - cmp r7, r2 - bge _08045FFE - lsls r0, r7, 8 - adds r1, r2, 0 - bl __divsi3 - mov r1, r8 - cmp r1, 0 - bge _08045FE2 - adds r0, r6, r0 - str r0, [r5] - asrs r2, r0, 8 - cmp r2, r4 - blt _0804601E - b _08045FF6 -_08045FE2: - subs r0, r6, r0 - str r0, [r5] - asrs r2, r0, 8 - movs r1, 0xFF - ands r0, r1 - cmp r0, 0 - ble _08045FF2 - adds r2, 0x1 -_08045FF2: - cmp r2, r4 - bgt _0804601E -_08045FF6: - lsls r0, r4, 8 - str r0, [r5] - adds r2, r4, 0 - b _0804601E -_08045FFE: - mov r0, r8 - cmp r0, 0 - bge _08046010 - ldr r0, [r5] - adds r0, r3 - str r0, [r5] - cmp r0, r4 - ble _0804601C - b _0804601A -_08046010: - ldr r0, [r5] - subs r0, r3 - str r0, [r5] - cmp r0, r4 - bge _0804601C -_0804601A: - str r4, [r5] -_0804601C: - ldr r2, [r5] -_0804601E: - adds r0, r2, 0 -_08046020: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8045F58 - - thumb_func_start sub_804602C -sub_804602C: @ 804602C - push {r4-r7,lr} - adds r4, r0, 0 - mov r12, r3 - ldr r7, [sp, 0x14] - ldr r0, [sp, 0x18] - lsls r0, 24 - lsrs r6, r0, 24 - subs r5, r1, r2 - cmp r5, 0 - bge _08046044 - movs r5, 0 - b _0804604A -_08046044: - cmp r5, r4 - ble _0804604A - adds r5, r4, 0 -_0804604A: - lsls r0, r6, 27 - lsrs r3, r0, 24 - movs r1, 0 - cmp r1, r6 - bcs _08046064 - movs r2, 0 -_08046056: - adds r0, r7, r1 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r6 - bcc _08046056 -_08046064: - cmp r4, r3 - bge _08046078 - mov r1, r12 - ldr r0, [r1] - muls r0, r3 - adds r1, r4, 0 - bl __divsi3 - asrs r0, 8 - b _08046084 -_08046078: - mov r1, r12 - ldr r0, [r1] - muls r0, r3 - adds r1, r4, 0 - bl __divsi3 -_08046084: - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r2, 0 - cmp r3, 0 - bne _0804609A - cmp r5, 0 - ble _0804609A - movs r0, 0x1 - strb r0, [r7] - movs r3, 0x1 - b _080460BE -_0804609A: - movs r1, 0 - movs r4, 0x8 -_0804609E: - cmp r1, r6 - bcs _080460BE - cmp r2, 0x7 - bls _080460BA - adds r0, r7, r1 - strb r4, [r0] - adds r0, r2, 0 - subs r0, 0x8 - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - b _0804609E -_080460BA: - adds r0, r7, r1 - strb r2, [r0] -_080460BE: - adds r0, r3, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804602C - - thumb_func_start sub_80460C8 -sub_80460C8: @ 80460C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r5, r0, 0 - adds r6, r1, 0 - adds r4, r2, 0 - mov r8, r3 - ldr r0, [r5] - ldr r1, [r5, 0x4] - ldr r2, [r5, 0x8] - movs r3, 0x6 - str r3, [sp] - movs r3, 0x1 - str r3, [sp, 0x4] - adds r3, r6, 0 - bl sub_8045F58 - lsls r0, 16 - lsrs r7, r0, 16 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl sub_8046128 - ldr r0, [r5] - cmp r0, 0x2F - bgt _08046108 - ldr r0, [r6] - lsls r0, 8 - lsrs r1, r0, 16 - b _0804610A -_08046108: - ldrh r1, [r6] -_0804610A: - movs r2, 0 - ldrsh r0, [r5, r2] - lsls r1, 16 - asrs r1, 16 - mov r2, r8 - bl sub_804373C - lsls r0, r7, 16 - asrs r0, 16 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80460C8 - - thumb_func_start sub_8046128 -sub_8046128: @ 8046128 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x1C - adds r5, r0, 0 - adds r3, r1, 0 - mov r8, r2 - ldr r0, [r5] - ldr r1, [r5, 0x4] - ldr r2, [r5, 0x8] - add r4, sp, 0x8 - str r4, [sp] - movs r4, 0x6 - str r4, [sp, 0x4] - bl sub_804602C - movs r3, 0 - add r7, sp, 0x10 - mov r12, r7 - ldrb r0, [r5, 0xC] - lsls r6, r0, 27 - ldr r4, [r5, 0x10] -_08046154: - lsls r2, r3, 1 - add r2, r12 - lsrs r1, r6, 15 - mov r0, sp - adds r0, r3 - adds r0, 0x8 - ldrb r0, [r0] - adds r0, r4, r0 - orrs r1, r0 - strh r1, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - bls _08046154 - adds r0, r7, 0 - mov r1, r8 - movs r2, 0x6 - bl CpuSet - add sp, 0x1C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8046128 - - thumb_func_start GetScaledExpFraction -GetScaledExpFraction: @ 8046188 - push {r4-r7,lr} - adds r6, r2, 0 - lsls r3, 27 - lsrs r7, r3, 24 - subs r5, r0, r1 - cmp r5, 0 - bge _0804619A - movs r5, 0 - b _080461A0 -_0804619A: - cmp r5, r6 - ble _080461A0 - adds r5, r6, 0 -_080461A0: - muls r0, r7 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - muls r0, r7 - adds r1, r6, 0 - bl __divsi3 - lsls r4, 24 - asrs r4, 24 - lsls r0, 24 - asrs r0, 24 - subs r0, r4, r0 - cmp r0, 0 - bge _080461C8 - negs r0, r0 -_080461C8: - lsls r0, 24 - lsrs r0, 24 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GetScaledExpFraction - - thumb_func_start GetScaledHPFraction -GetScaledHPFraction: @ 80461D4 - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - muls r0, r2 - lsls r1, 16 - asrs r1, 16 - bl __divsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080461F8 - cmp r4, 0 - ble _080461F8 - movs r0, 0x1 -_080461F8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetScaledHPFraction - - thumb_func_start GetHPBarLevel -GetHPBarLevel: @ 8046200 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bne _08046212 - movs r0, 0x4 - b _0804622E -_08046212: - movs r2, 0x30 - bl GetScaledHPFraction - lsls r0, 24 - lsrs r1, r0, 24 - movs r0, 0x3 - cmp r1, 0x18 - bhi _0804622E - movs r0, 0x2 - cmp r1, 0x9 - bhi _0804622E - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 -_0804622E: - pop {r1} - bx r1 - thumb_func_end GetHPBarLevel - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_records.s b/asm/battle_records.s index 60d7b9b2b..e10f2f4e5 100644 --- a/asm/battle_records.s +++ b/asm/battle_records.s @@ -635,47 +635,7 @@ _0811042E: _08110438: .4byte gStringVar1 thumb_func_end PrintLinkBattleRecord - thumb_func_start ShowLinkBattleRecords -ShowLinkBattleRecords: @ 811043C - push {r4,lr} - movs r0, 0x1 - movs r1, 0 - movs r2, 0x1C - movs r3, 0x12 - bl MenuDrawTextWindow - ldr r0, _08110488 @ =gOtherText_BattleResults - movs r1, 0 - movs r2, 0x1 - movs r3, 0xF0 - bl sub_8072BD8 - ldr r0, _0811048C @ =gSaveBlock1 + 0x30B8 - bl PrintLinkBattleWinsLossesDraws - ldr r0, _08110490 @ =gOtherText_WinLoseDraw - movs r1, 0xC - movs r2, 0x6 - bl MenuPrint - movs r4, 0 -_08110468: - lsls r0, r4, 4 - ldr r1, _0811048C @ =gSaveBlock1 + 0x30B8 - adds r0, r1 - adds r4, 0x1 - lsls r1, r4, 25 - movs r2, 0xC0 - lsls r2, 19 - adds r1, r2 - lsrs r1, 24 - bl PrintLinkBattleRecord - cmp r4, 0x4 - ble _08110468 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08110488: .4byte gOtherText_BattleResults -_0811048C: .4byte gSaveBlock1 + 0x30B8 -_08110490: .4byte gOtherText_WinLoseDraw - thumb_func_end ShowLinkBattleRecords +.section .text_8110494 thumb_func_start sub_8110494 sub_8110494: @ 8110494 diff --git a/asm/birch_pc.s b/asm/birch_pc.s deleted file mode 100644 index 2687f29b5..000000000 --- a/asm/birch_pc.s +++ /dev/null @@ -1,265 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start ScriptGetPokedexInfo -ScriptGetPokedexInfo: @ 810D43C - push {lr} - ldr r0, _0810D458 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0 - bne _0810D460 - movs r0, 0 - bl GetHoennPokedexCount - ldr r1, _0810D45C @ =gSpecialVar_0x8005 - strh r0, [r1] - movs r0, 0x1 - bl GetHoennPokedexCount - b _0810D470 - .align 2, 0 -_0810D458: .4byte gSpecialVar_0x8004 -_0810D45C: .4byte gSpecialVar_0x8005 -_0810D460: - movs r0, 0 - bl GetNationalPokedexCount - ldr r1, _0810D480 @ =gSpecialVar_0x8005 - strh r0, [r1] - movs r0, 0x1 - bl GetNationalPokedexCount -_0810D470: - ldr r1, _0810D484 @ =gSpecialVar_0x8006 - strh r0, [r1] - bl IsNationalPokedexEnabled - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_0810D480: .4byte gSpecialVar_0x8005 -_0810D484: .4byte gSpecialVar_0x8006 - thumb_func_end ScriptGetPokedexInfo - - thumb_func_start GetPokedexRatingText -GetPokedexRatingText: @ 810D488 - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x9 - bhi _0810D494 - b _0810D5EC -_0810D494: - cmp r0, 0x13 - bhi _0810D4A0 - ldr r0, _0810D49C @ =gUnknown_081C456A - b _0810D5F6 - .align 2, 0 -_0810D49C: .4byte gUnknown_081C456A -_0810D4A0: - cmp r0, 0x1D - bhi _0810D4AC - ldr r0, _0810D4A8 @ =gUnknown_081C45B0 - b _0810D5F6 - .align 2, 0 -_0810D4A8: .4byte gUnknown_081C45B0 -_0810D4AC: - cmp r0, 0x27 - bhi _0810D4B8 - ldr r0, _0810D4B4 @ =gUnknown_081C45F9 - b _0810D5F6 - .align 2, 0 -_0810D4B4: .4byte gUnknown_081C45F9 -_0810D4B8: - cmp r0, 0x31 - bhi _0810D4C4 - ldr r0, _0810D4C0 @ =gUnknown_081C4648 - b _0810D5F6 - .align 2, 0 -_0810D4C0: .4byte gUnknown_081C4648 -_0810D4C4: - cmp r0, 0x3B - bhi _0810D4D0 - ldr r0, _0810D4CC @ =gUnknown_081C467E - b _0810D5F6 - .align 2, 0 -_0810D4CC: .4byte gUnknown_081C467E -_0810D4D0: - cmp r0, 0x45 - bhi _0810D4DC - ldr r0, _0810D4D8 @ =gUnknown_081C46B9 - b _0810D5F6 - .align 2, 0 -_0810D4D8: .4byte gUnknown_081C46B9 -_0810D4DC: - cmp r0, 0x4F - bhi _0810D4E8 - ldr r0, _0810D4E4 @ =gUnknown_081C46FE - b _0810D5F6 - .align 2, 0 -_0810D4E4: .4byte gUnknown_081C46FE -_0810D4E8: - cmp r0, 0x59 - bhi _0810D4F4 - ldr r0, _0810D4F0 @ =gUnknown_081C4747 - b _0810D5F6 - .align 2, 0 -_0810D4F0: .4byte gUnknown_081C4747 -_0810D4F4: - cmp r0, 0x63 - bhi _0810D500 - ldr r0, _0810D4FC @ =gUnknown_081C4780 - b _0810D5F6 - .align 2, 0 -_0810D4FC: .4byte gUnknown_081C4780 -_0810D500: - cmp r0, 0x6D - bhi _0810D50C - ldr r0, _0810D508 @ =gUnknown_081C47DF - b _0810D5F6 - .align 2, 0 -_0810D508: .4byte gUnknown_081C47DF -_0810D50C: - cmp r0, 0x77 - bhi _0810D518 - ldr r0, _0810D514 @ =gUnknown_081C4828 - b _0810D5F6 - .align 2, 0 -_0810D514: .4byte gUnknown_081C4828 -_0810D518: - cmp r0, 0x81 - bhi _0810D524 - ldr r0, _0810D520 @ =gUnknown_081C4863 - b _0810D5F6 - .align 2, 0 -_0810D520: .4byte gUnknown_081C4863 -_0810D524: - cmp r0, 0x8B - bhi _0810D530 - ldr r0, _0810D52C @ =gUnknown_081C489C - b _0810D5F6 - .align 2, 0 -_0810D52C: .4byte gUnknown_081C489C -_0810D530: - cmp r0, 0x95 - bhi _0810D53C - ldr r0, _0810D538 @ =gUnknown_081C48EB - b _0810D5F6 - .align 2, 0 -_0810D538: .4byte gUnknown_081C48EB -_0810D53C: - cmp r0, 0x9F - bhi _0810D548 - ldr r0, _0810D544 @ =gUnknown_081C4936 - b _0810D5F6 - .align 2, 0 -_0810D544: .4byte gUnknown_081C4936 -_0810D548: - cmp r0, 0xA9 - bhi _0810D554 - ldr r0, _0810D550 @ =gUnknown_081C49A2 - b _0810D5F6 - .align 2, 0 -_0810D550: .4byte gUnknown_081C49A2 -_0810D554: - cmp r0, 0xB3 - bhi _0810D560 - ldr r0, _0810D55C @ =gUnknown_081C4A06 - b _0810D5F6 - .align 2, 0 -_0810D55C: .4byte gUnknown_081C4A06 -_0810D560: - cmp r0, 0xBD - bhi _0810D56C - ldr r0, _0810D568 @ =gUnknown_081C4A4F - b _0810D5F6 - .align 2, 0 -_0810D568: .4byte gUnknown_081C4A4F -_0810D56C: - cmp r0, 0xC7 - bls _0810D5DA - cmp r0, 0xC8 - bne _0810D5A8 - ldr r0, _0810D5A4 @ =0x00000199 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - bne _0810D5DA - movs r0, 0xCD - lsls r0, 1 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - bne _0810D5DA - b _0810D5F4 - .align 2, 0 -_0810D5A4: .4byte 0x00000199 -_0810D5A8: - cmp r0, 0xC9 - bne _0810D5E8 - ldr r0, _0810D5E0 @ =0x00000199 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - beq _0810D5F4 - movs r0, 0xCD - lsls r0, 1 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - beq _0810D5F4 -_0810D5DA: - ldr r0, _0810D5E4 @ =gUnknown_081C4A91 - b _0810D5F6 - .align 2, 0 -_0810D5E0: .4byte 0x00000199 -_0810D5E4: .4byte gUnknown_081C4A91 -_0810D5E8: - cmp r0, 0xCA - beq _0810D5F4 -_0810D5EC: - ldr r0, _0810D5F0 @ =gUnknown_081C4520 - b _0810D5F6 - .align 2, 0 -_0810D5F0: .4byte gUnknown_081C4520 -_0810D5F4: - ldr r0, _0810D5FC @ =gUnknown_081C4ADA -_0810D5F6: - pop {r1} - bx r1 - .align 2, 0 -_0810D5FC: .4byte gUnknown_081C4ADA - thumb_func_end GetPokedexRatingText - - thumb_func_start ShowPokedexRatingMessage -ShowPokedexRatingMessage: @ 810D600 - push {lr} - ldr r0, _0810D614 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - bl GetPokedexRatingText - bl ShowFieldMessage - pop {r0} - bx r0 - .align 2, 0 -_0810D614: .4byte gSpecialVar_0x8004 - thumb_func_end ShowPokedexRatingMessage - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/contest.s b/asm/contest.s index fe3536218..3f53a31e9 100644 --- a/asm/contest.s +++ b/asm/contest.s @@ -420,7 +420,7 @@ _080AB4E0: adds r0, r1 movs r1, 0 strb r1, [r0] - bl sub_8040710 + bl ClearBattleMonForms bl sub_80AB398 ldr r1, _080AB54C @ =gMain ldr r0, _080AB550 @ =0x0000043c @@ -2294,7 +2294,7 @@ _080AC534: lsls r4, 2 mov r9, r4 ldr r4, _080AC5C4 @ =0x02019348 - ldr r1, _080AC5C8 @ =gUnknown_02024E84 + ldr r1, _080AC5C8 @ =gBattleMonForms movs r2, 0 adds r0, r1, 0x3 _080AC542: @@ -2358,7 +2358,7 @@ _080AC542: bl _080AD8CA .align 2, 0 _080AC5C4: .4byte 0x02019348 -_080AC5C8: .4byte gUnknown_02024E84 +_080AC5C8: .4byte gBattleMonForms _080AC5CC: .4byte 0xfffffebc _080AC5D0: .4byte gContestMons _080AC5D4: .4byte gSprites @@ -15035,7 +15035,7 @@ sub_80B2790: @ 80B2790 movs r2, 0x14 bl memset bl battle_anim_clear_some_data - ldr r1, _080B27F8 @ =gUnknown_02024E84 + ldr r1, _080B27F8 @ =gBattleMonForms movs r2, 0 adds r0, r1, 0x3 _080B27D0: @@ -15057,7 +15057,7 @@ _080B27D0: .align 2, 0 _080B27F0: .4byte 0x02019260 _080B27F4: .4byte gContestMons -_080B27F8: .4byte gUnknown_02024E84 +_080B27F8: .4byte gBattleMonForms _080B27FC: cmp r5, 0x82 beq _080B2898 diff --git a/asm/crt0.s b/asm/crt0.s index 7a492ff17..121b11744 100644 --- a/asm/crt0.s +++ b/asm/crt0.s @@ -30,10 +30,88 @@ GPIOPortReadEnable: @ 80000C8 .space 6 +@ 80000D0 + +@ TODO: figure out what this data is + + .ifdef GERMAN + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 0xFFFFFFFF + .4byte 2 + .4byte 5 + .ascii "pokemon ruby version" + .space 12 + .4byte gMonFrontPicTable + .4byte gMonBackPicTable + .4byte gMonPaletteTable + .4byte gMonShinyPaletteTable + .4byte gMonIconTable + .4byte gMonIconPaletteIndices + .4byte gMonIconPaletteTable + .4byte gSpeciesNames + .4byte gMoveNames + .4byte gDecorations + .4byte 0x1220 + .4byte 0x1340 + .4byte 0x18 + .4byte 0x938 + .4byte 0x3A8C + .4byte 0x46 + .4byte 0x836 + .4byte 0x84C + .4byte 0x182 + .4byte 0xA0A0A07 + .4byte 0xC060C0C + .4byte 0xC121006 + .4byte 0x8010B0F + .4byte 0xC + .4byte 0x890 + .4byte 0x3AC0 + .4byte 0x234 + .4byte 0x238 + .4byte 9 + .4byte 0xA + .4byte 0 + .4byte 8 + .4byte 0x556 + .4byte 0x557 + .4byte 0x312F + .4byte 0x311B + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0 + .4byte 0xFFFFFFFF + .endif + .arm .align 2, 0 .global Init -Init: @ 80000D0 +Init: mov r0, PSR_IRQ_MODE msr cpsr_cf, r0 ldr sp, sp_irq @@ -55,7 +133,7 @@ sp_irq: .word IWRAM_END - 0x60 .arm .align 2, 0 .global IntrMain -IntrMain: @ 800010C +IntrMain: mov r3, REG_BASE add r3, r3, 0x200 ldr r2, [r3, OFFSET_REG_IE - 0x200] diff --git a/asm/daycare.s b/asm/daycare.s index 886643fce..0e8a796d9 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -170,7 +170,7 @@ _0804144A: movs r2, 0x50 bl memcpy adds r0, r4, 0 - bl pokemon_restore_pp + bl BoxMonRestorePP movs r0, 0x88 lsls r0, 1 add r0, r8 @@ -1202,7 +1202,7 @@ _08041C18: lsls r0, 16 lsrs r0, 16 ldr r1, _08041CD8 @ =gUnknown_03000470 - bl sub_804051C + bl GetLevelUpMovesBySpecies lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x4] diff --git a/asm/easy_chat.s b/asm/easy_chat.s index 8000e9029..b8bfaac18 100644 --- a/asm/easy_chat.s +++ b/asm/easy_chat.s @@ -11193,448 +11193,4 @@ _080EB724: .4byte 0xffff0000 _080EB728: .4byte 0x0000ffff thumb_func_end sub_80EB6FC - thumb_func_start sub_80EB72C -sub_80EB72C: @ 80EB72C - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - ldr r1, _080EB778 @ =gEasyChatGroupSizes - adds r1, r4, r1 - ldrb r1, [r1] - bl __modsi3 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r4, 0 - beq _080EB758 - cmp r4, 0x15 - beq _080EB758 - cmp r4, 0x12 - beq _080EB758 - cmp r4, 0x13 - bne _080EB766 -_080EB758: - ldr r1, _080EB77C @ =gEasyChatGroupWords - lsls r0, r4, 2 - adds r0, r1 - ldr r1, [r0] - lsls r0, r2, 1 - adds r0, r1 - ldrh r2, [r0] -_080EB766: - movs r0, 0x7F - ands r0, r4 - lsls r0, 9 - ldr r1, _080EB780 @ =0x000001ff - ands r2, r1 - orrs r0, r2 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080EB778: .4byte gEasyChatGroupSizes -_080EB77C: .4byte gEasyChatGroupWords -_080EB780: .4byte 0x000001ff - thumb_func_end sub_80EB72C - - thumb_func_start sub_80EB784 -sub_80EB784: @ 80EB784 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_80EAD7C - lsls r0, 24 - cmp r0, 0 - bne _080EB7A0 - ldr r0, _080EB79C @ =0x0000ffff - b _080EB7BE - .align 2, 0 -_080EB79C: .4byte 0x0000ffff -_080EB7A0: - cmp r4, 0 - beq _080EB7AE - cmp r4, 0x14 - bne _080EB7B4 - bl sub_80EB960 - b _080EB7BA -_080EB7AE: - bl sub_80EB9D8 - b _080EB7BA -_080EB7B4: - adds r0, r4, 0 - bl sub_80EB72C -_080EB7BA: - lsls r0, 16 - lsrs r0, 16 -_080EB7BE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80EB784 - - thumb_func_start sub_80EB7C4 -sub_80EB7C4: @ 80EB7C4 - push {r4,r5,lr} - ldr r0, _080EB7D8 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x1 - beq _080EB7F0 - cmp r0, 0x1 - bgt _080EB7DC - cmp r0, 0 - beq _080EB7E6 - b _080EB82E - .align 2, 0 -_080EB7D8: .4byte gSpecialVar_0x8004 -_080EB7DC: - cmp r0, 0x2 - beq _080EB810 - cmp r0, 0x3 - beq _080EB818 - b _080EB82E -_080EB7E6: - ldr r5, _080EB7EC @ =gSaveBlock1 + 0x2B1C - movs r2, 0x2 - b _080EB81C - .align 2, 0 -_080EB7EC: .4byte gSaveBlock1 + 0x2B1C -_080EB7F0: - ldr r5, _080EB80C @ =gSaveBlock1 + 0x2B28 - adds r0, r5, 0 - movs r1, 0x3 - movs r2, 0x2 - movs r3, 0x14 - bl sub_80EB680 - lsls r0, 24 - cmp r0, 0 - beq _080EB81A - movs r2, 0x2 - movs r3, 0x3 - b _080EB81E - .align 2, 0 -_080EB80C: .4byte gSaveBlock1 + 0x2B28 -_080EB810: - ldr r5, _080EB814 @ =gSaveBlock1 + 0x2B34 - b _080EB81A - .align 2, 0 -_080EB814: .4byte gSaveBlock1 + 0x2B34 -_080EB818: - ldr r5, _080EB834 @ =gSaveBlock1 + 0x2B40 -_080EB81A: - movs r2, 0x3 -_080EB81C: - movs r3, 0x2 -_080EB81E: - ldr r4, _080EB838 @ =gStringVar4 - adds r0, r4, 0 - adds r1, r5, 0 - bl ConvertEasyChatWordsToString - adds r0, r4, 0 - bl ShowFieldAutoScrollMessage -_080EB82E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EB834: .4byte gSaveBlock1 + 0x2B40 -_080EB838: .4byte gStringVar4 - thumb_func_end sub_80EB7C4 - - thumb_func_start sub_80EB83C -sub_80EB83C: @ 80EB83C - push {lr} - bl Random - movs r1, 0x1 - ands r1, r0 - movs r0, 0xC - cmp r1, 0 - beq _080EB84E - movs r0, 0xD -_080EB84E: - bl sub_80EB784 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r0, _080EB864 @ =gStringVar2 - bl sub_80EB3FC - pop {r0} - bx r0 - .align 2, 0 -_080EB864: .4byte gStringVar2 - thumb_func_end sub_80EB83C - - thumb_func_start sub_80EB868 -sub_80EB868: @ 80EB868 - lsls r0, 24 - lsrs r2, r0, 27 - movs r1, 0xE0 - lsls r1, 19 - ands r1, r0 - lsrs r1, 24 - ldr r0, _080EB888 @ =gSaveBlock1 - ldr r3, _080EB88C @ =0x00002d8c - adds r0, r3 - adds r2, r0 - ldrb r0, [r2] - asrs r0, r1 - movs r1, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_080EB888: .4byte gSaveBlock1 -_080EB88C: .4byte 0x00002d8c - thumb_func_end sub_80EB868 - - thumb_func_start sub_80EB890 -sub_80EB890: @ 80EB890 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x20 - bhi _080EB8B2 - lsrs r2, r0, 27 - movs r1, 0x7 - ands r1, r3 - ldr r0, _080EB8B8 @ =gSaveBlock1 - ldr r3, _080EB8BC @ =0x00002d8c - adds r0, r3 - adds r2, r0 - movs r0, 0x1 - lsls r0, r1 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] -_080EB8B2: - pop {r0} - bx r0 - .align 2, 0 -_080EB8B8: .4byte gSaveBlock1 -_080EB8BC: .4byte 0x00002d8c - thumb_func_end sub_80EB890 - - thumb_func_start sub_80EB8C0 -sub_80EB8C0: @ 80EB8C0 - push {r4,r5,lr} - movs r4, 0 - movs r5, 0 -_080EB8C6: - adds r0, r4, 0 - bl sub_80EB868 - lsls r0, 24 - cmp r0, 0 - beq _080EB8D8 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_080EB8D8: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x20 - bls _080EB8C6 - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80EB8C0 - - thumb_func_start sub_80EB8EC -sub_80EB8EC: @ 80EB8EC - push {r4-r6,lr} - bl sub_80EB8C0 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x21 - bne _080EB918 - b _080EB952 -_080EB8FC: - adds r0, r5, 0 - bl sub_80EB890 - ldr r0, _080EB914 @ =0x000001ff - ands r4, r0 - movs r1, 0xA0 - lsls r1, 6 - adds r0, r1, 0 - orrs r4, r0 - adds r0, r4, 0 - b _080EB954 - .align 2, 0 -_080EB914: .4byte 0x000001ff -_080EB918: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x21 - subs r1, r4 - bl __modsi3 - lsls r0, 16 - lsrs r6, r0, 16 - movs r4, 0 -_080EB92E: - lsls r0, r4, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_80EB868 - lsls r0, 24 - cmp r0, 0 - bne _080EB948 - cmp r6, 0 - beq _080EB8FC - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_080EB948: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x20 - bls _080EB92E -_080EB952: - ldr r0, _080EB95C @ =0x0000ffff -_080EB954: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080EB95C: .4byte 0x0000ffff - thumb_func_end sub_80EB8EC - - thumb_func_start sub_80EB960 -sub_80EB960: @ 80EB960 - push {r4,r5,lr} - bl sub_80EB8C0 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080EB984 - b _080EB9BA -_080EB970: - ldr r0, _080EB980 @ =0x000001ff - ands r4, r0 - movs r1, 0xA0 - lsls r1, 6 - adds r0, r1, 0 - orrs r4, r0 - adds r0, r4, 0 - b _080EB9BC - .align 2, 0 -_080EB980: .4byte 0x000001ff -_080EB984: - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r5, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r5, r0, 16 - movs r4, 0 -_080EB998: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_80EB868 - lsls r0, 24 - cmp r0, 0 - beq _080EB9B0 - cmp r5, 0 - beq _080EB970 - subs r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080EB9B0: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x20 - bls _080EB998 -_080EB9BA: - ldr r0, _080EB9C4 @ =0x0000ffff -_080EB9BC: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080EB9C4: .4byte 0x0000ffff - thumb_func_end sub_80EB960 - - thumb_func_start sub_80EB9C8 -sub_80EB9C8: @ 80EB9C8 - push {lr} - bl IsNationalPokedexEnabled - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_80EB9C8 - - thumb_func_start sub_80EB9D8 -sub_80EB9D8: @ 80EB9D8 - push {r4-r7,lr} - movs r0, 0 - bl sub_80EAE88 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - bne _080EB9F8 - b _080EBA46 -_080EB9EA: - ldrh r1, [r5] - ldr r0, _080EB9F4 @ =0x000001ff - ands r0, r1 - b _080EBA48 - .align 2, 0 -_080EB9F4: .4byte 0x000001ff -_080EB9F8: - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r4, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _080EBA50 @ =gEasyChatGroupWords - ldr r5, [r0] - movs r6, 0 - ldr r0, _080EBA54 @ =gEasyChatGroupSizes - ldrb r0, [r0] - cmp r6, r0 - bcs _080EBA46 - adds r7, r0, 0 -_080EBA1A: - ldrh r0, [r5] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - beq _080EBA3A - cmp r4, 0 - beq _080EB9EA - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_080EBA3A: - adds r5, 0x2 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, r7 - bcc _080EBA1A -_080EBA46: - ldr r0, _080EBA58 @ =0x0000ffff -_080EBA48: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080EBA50: .4byte gEasyChatGroupWords -_080EBA54: .4byte gEasyChatGroupSizes -_080EBA58: .4byte 0x0000ffff - thumb_func_end sub_80EB9D8 - .align 2, 0 @ Don't pad with nop. diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s index 95737cae6..90ae6aaf7 100644 --- a/asm/egg_hatch.s +++ b/asm/egg_hatch.s @@ -6,162 +6,6 @@ .text - thumb_func_start CreatedHatchedMon -CreatedHatchedMon: @ 80428A4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x48 - adds r6, r0, 0 - adds r5, r1, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - movs r4, 0 - add r7, sp, 0x18 - mov r0, sp - adds r0, 0x31 - str r0, [sp, 0x38] - mov r1, sp - adds r1, 0x32 - str r1, [sp, 0x3C] - add r0, sp, 0x30 - mov r9, r0 - adds r1, 0x1 - str r1, [sp, 0x40] - mov r0, sp - adds r0, 0x34 - str r0, [sp, 0x44] -_080428DE: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r6, 0 - bl GetMonData - lsls r1, r4, 1 - add r1, sp - adds r1, 0x10 - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080428DE - adds r0, r6, 0 - movs r1, 0 - bl GetMonData - mov r8, r0 - movs r4, 0 -_08042906: - adds r1, r4, 0 - adds r1, 0x27 - adds r0, r6, 0 - bl GetMonData - lsls r1, r4, 2 - adds r1, r7, r1 - str r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x5 - bls _08042906 - adds r0, r6, 0 - movs r1, 0x25 - bl GetMonData - ldr r1, [sp, 0x38] - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x8 - bl GetMonData - ldr r1, [sp, 0x3C] - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x22 - bl GetMonData - str r0, [sp, 0x34] - movs r0, 0x1 - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r5, 0 - mov r1, r10 - movs r2, 0x5 - movs r3, 0x20 - bl CreateMon - movs r4, 0 -_0804295E: - adds r1, r4, 0 - adds r1, 0xD - lsls r0, r4, 1 - mov r2, sp - adds r2, r0 - adds r2, 0x10 - adds r0, r5, 0 - bl SetMonData - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _0804295E - movs r4, 0 -_0804297C: - adds r1, r4, 0 - adds r1, 0x27 - lsls r2, r4, 2 - adds r2, r7, r2 - adds r0, r5, 0 - bl SetMonData - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x5 - bls _0804297C - movs r0, 0x2 - mov r1, r9 - strb r0, [r1] - adds r0, r5, 0 - movs r1, 0x3 - mov r2, r9 - bl SetMonData - adds r0, r5, 0 - movs r1, 0x25 - ldr r2, [sp, 0x38] - bl SetMonData - adds r0, r5, 0 - movs r1, 0x8 - ldr r2, [sp, 0x3C] - bl SetMonData - movs r0, 0x78 - ldr r1, [sp, 0x40] - strb r0, [r1] - adds r0, r5, 0 - movs r1, 0x20 - ldr r2, [sp, 0x40] - bl SetMonData - adds r0, r5, 0 - movs r1, 0x22 - ldr r2, [sp, 0x44] - bl SetMonData - adds r0, r6, 0 - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy - add sp, 0x48 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end CreatedHatchedMon - thumb_func_start AddHatchedMonToParty AddHatchedMonToParty: @ 80429EC push {r4-r6,lr} @@ -229,7 +73,7 @@ AddHatchedMonToParty: @ 80429EC movs r1, 0x23 bl SetMonData adds r0, r5, 0 - bl sub_8040B1C + bl MonRestorePP adds r0, r5, 0 bl CalculateMonStats add sp, 0x14 diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index 6ecd355c3..404270195 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -1733,7 +1733,7 @@ _081127BE: ldrh r1, [r4, 0xE] ldrh r2, [r4, 0x10] mov r0, r9 - bl sub_803FB68 + bl EvolutionRenameMon ldrh r0, [r4, 0x10] bl SpeciesToNationalPokedexNum lsls r0, 16 @@ -2408,7 +2408,7 @@ _08112DCC: lsls r0, 16 lsrs r4, r0, 16 adds r0, r4, 0 - bl sub_8040A00 + bl IsHMMove2 cmp r0, 0 beq _08112E24 ldr r0, _08112E10 @ =gUnknown_08400F8C @@ -3041,7 +3041,7 @@ _08113316: ldrh r1, [r4, 0xE] ldrh r2, [r4, 0x10] mov r0, r8 - bl sub_803FB68 + bl EvolutionRenameMon ldrh r0, [r4, 0x10] bl SpeciesToNationalPokedexNum lsls r0, 16 @@ -3701,7 +3701,7 @@ _08113910: lsls r0, 16 lsrs r4, r0, 16 adds r0, r4, 0 - bl sub_8040A00 + bl IsHMMove2 cmp r0, 0 beq _08113970 ldr r0, _0811395C @ =gUnknown_08400F8C diff --git a/asm/field_specials.s b/asm/field_specials.s index e97bdfe80..684ab248b 100644 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -5,375 +5,6 @@ .syntax unified .text - - thumb_func_start sub_810D6A4 -sub_810D6A4: @ 810D6A4 - push {lr} - ldr r0, _0810D6B4 @ =sub_8145D88 - bl SetMainCallback2 - bl ScriptContext2_Enable - pop {r0} - bx r0 - .align 2, 0 -_0810D6B4: .4byte sub_8145D88 - thumb_func_end sub_810D6A4 - - thumb_func_start sub_810D6B8 -sub_810D6B8: @ 810D6B8 - push {lr} - ldr r0, _0810D6D0 @ =gMain - ldr r1, _0810D6D4 @ =c2_exit_to_overworld_2_switch - str r1, [r0, 0x8] - ldr r0, _0810D6D8 @ =CB2_ViewWallClock - bl SetMainCallback2 - bl ScriptContext2_Enable - pop {r0} - bx r0 - .align 2, 0 -_0810D6D0: .4byte gMain -_0810D6D4: .4byte c2_exit_to_overworld_2_switch -_0810D6D8: .4byte CB2_ViewWallClock - thumb_func_end sub_810D6B8 - - thumb_func_start ResetCyclingRoadChallengeData -ResetCyclingRoadChallengeData: @ 810D6DC - ldr r0, _0810D6F0 @ =gUnknown_02039250 - movs r1, 0 - strb r1, [r0] - ldr r0, _0810D6F4 @ =gUnknown_02039251 - strb r1, [r0] - ldr r1, _0810D6F8 @ =gUnknown_02039254 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_0810D6F0: .4byte gUnknown_02039250 -_0810D6F4: .4byte gUnknown_02039251 -_0810D6F8: .4byte gUnknown_02039254 - thumb_func_end ResetCyclingRoadChallengeData - - thumb_func_start BeginCyclingRoadChallenge -BeginCyclingRoadChallenge: @ 810D6FC - ldr r1, _0810D714 @ =gUnknown_02039250 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _0810D718 @ =gUnknown_02039251 - movs r0, 0 - strb r0, [r1] - ldr r1, _0810D71C @ =gUnknown_02039254 - ldr r0, _0810D720 @ =gMain - ldr r0, [r0, 0x20] - str r0, [r1] - bx lr - .align 2, 0 -_0810D714: .4byte gUnknown_02039250 -_0810D718: .4byte gUnknown_02039251 -_0810D71C: .4byte gUnknown_02039254 -_0810D720: .4byte gMain - thumb_func_end BeginCyclingRoadChallenge - - thumb_func_start GetPlayerAvatarBike -GetPlayerAvatarBike: @ 810D724 - push {lr} - movs r0, 0x4 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _0810D736 - movs r0, 0x1 - b _0810D748 -_0810D736: - movs r0, 0x2 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - bne _0810D746 - movs r0, 0 - b _0810D748 -_0810D746: - movs r0, 0x2 -_0810D748: - pop {r1} - bx r1 - thumb_func_end GetPlayerAvatarBike - - thumb_func_start DetermineCyclingRoadResults -DetermineCyclingRoadResults: @ 810D74C - push {r4-r7,lr} - adds r7, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r6, 0x63 - bhi _0810D778 - ldr r4, _0810D770 @ =gStringVar1 - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r1, _0810D774 @ =gOtherText_Times - adds r0, r4, 0 - bl StringAppend - b _0810D780 - .align 2, 0 -_0810D770: .4byte gStringVar1 -_0810D774: .4byte gOtherText_Times -_0810D778: - ldr r0, _0810D7CC @ =gStringVar1 - ldr r1, _0810D7D0 @ =gOtherText_99Times - bl StringCopy -_0810D780: - ldr r0, _0810D7D4 @ =0x00000e0f - cmp r7, r0 - bhi _0810D7E0 - ldr r4, _0810D7D8 @ =gStringVar2 - adds r0, r7, 0 - movs r1, 0x3C - bl __udivsi3 - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - movs r0, 0xAD - strb r0, [r4, 0x2] - adds r5, r4, 0x3 - adds r0, r7, 0 - movs r1, 0x3C - bl __umodsi3 - movs r1, 0x64 - muls r0, r1 - movs r1, 0x3C - bl __udivsi3 - adds r1, r0, 0 - adds r0, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r1, _0810D7DC @ =gOtherText_Seconds - adds r0, r4, 0 - bl StringAppend - b _0810D7E8 - .align 2, 0 -_0810D7CC: .4byte gStringVar1 -_0810D7D0: .4byte gOtherText_99Times -_0810D7D4: .4byte 0x00000e0f -_0810D7D8: .4byte gStringVar2 -_0810D7DC: .4byte gOtherText_Seconds -_0810D7E0: - ldr r0, _0810D7F4 @ =gStringVar2 - ldr r1, _0810D7F8 @ =gOtherText_1Minute - bl StringCopy -_0810D7E8: - movs r4, 0 - cmp r6, 0 - bne _0810D7FC - movs r4, 0x5 - b _0810D81A - .align 2, 0 -_0810D7F4: .4byte gStringVar2 -_0810D7F8: .4byte gOtherText_1Minute -_0810D7FC: - cmp r6, 0x3 - bhi _0810D804 - movs r4, 0x4 - b _0810D81A -_0810D804: - cmp r6, 0x9 - bhi _0810D80C - movs r4, 0x3 - b _0810D81A -_0810D80C: - cmp r6, 0x13 - bhi _0810D814 - movs r4, 0x2 - b _0810D81A -_0810D814: - cmp r6, 0x63 - bhi _0810D81A - movs r4, 0x1 -_0810D81A: - adds r0, r7, 0 - movs r1, 0x3C - bl __udivsi3 - cmp r0, 0xA - bhi _0810D82A - adds r0, r4, 0x5 - b _0810D848 -_0810D82A: - cmp r0, 0xF - bhi _0810D832 - adds r0, r4, 0x4 - b _0810D848 -_0810D832: - cmp r0, 0x14 - bhi _0810D83A - adds r0, r4, 0x3 - b _0810D848 -_0810D83A: - cmp r0, 0x28 - bhi _0810D842 - adds r0, r4, 0x2 - b _0810D848 -_0810D842: - cmp r0, 0x3B - bhi _0810D84C - adds r0, r4, 0x1 -_0810D848: - lsls r0, 24 - lsrs r4, r0, 24 -_0810D84C: - ldr r0, _0810D858 @ =gScriptResult - strh r4, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810D858: .4byte gScriptResult - thumb_func_end DetermineCyclingRoadResults - - thumb_func_start FinishCyclingRoadChallenge -FinishCyclingRoadChallenge: @ 810D85C - push {r4,r5,lr} - ldr r0, _0810D880 @ =gMain - ldr r1, _0810D884 @ =gUnknown_02039254 - ldr r4, [r0, 0x20] - ldr r0, [r1] - subs r4, r0 - ldr r5, _0810D888 @ =gUnknown_02039251 - ldrb r1, [r5] - adds r0, r4, 0 - bl DetermineCyclingRoadResults - ldrb r1, [r5] - adds r0, r4, 0 - bl RecordCyclingRoadResults - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810D880: .4byte gMain -_0810D884: .4byte gUnknown_02039254 -_0810D888: .4byte gUnknown_02039251 - thumb_func_end FinishCyclingRoadChallenge - - thumb_func_start RecordCyclingRoadResults -RecordCyclingRoadResults: @ 810D88C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - ldr r6, _0810D8E0 @ =0x00004028 - adds r0, r6, 0 - bl VarGet - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r7, _0810D8E4 @ =0x00004029 - adds r0, r7, 0 - bl VarGet - lsls r0, 16 - adds r4, r0 - cmp r4, r5 - bhi _0810D8BC - cmp r4, 0 - bne _0810D8D6 -_0810D8BC: - lsls r1, r5, 16 - lsrs r1, 16 - adds r0, r6, 0 - bl VarSet - lsrs r1, r5, 16 - adds r0, r7, 0 - bl VarSet - ldr r0, _0810D8E8 @ =0x00004027 - mov r1, r8 - bl VarSet -_0810D8D6: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810D8E0: .4byte 0x00004028 -_0810D8E4: .4byte 0x00004029 -_0810D8E8: .4byte 0x00004027 - thumb_func_end RecordCyclingRoadResults - - thumb_func_start GetRecordedCyclingRoadResults -GetRecordedCyclingRoadResults: @ 810D8EC - push {r4,lr} - ldr r0, _0810D920 @ =0x00004028 - bl VarGet - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _0810D924 @ =0x00004029 - bl VarGet - lsls r0, 16 - adds r4, r0 - cmp r4, 0 - beq _0810D92C - ldr r0, _0810D928 @ =0x00004027 - bl VarGet - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl DetermineCyclingRoadResults - movs r0, 0x1 - b _0810D92E - .align 2, 0 -_0810D920: .4byte 0x00004028 -_0810D924: .4byte 0x00004029 -_0810D928: .4byte 0x00004027 -_0810D92C: - movs r0, 0 -_0810D92E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetRecordedCyclingRoadResults - - thumb_func_start UpdateCyclingRoadState -UpdateCyclingRoadState: @ 810D934 - push {r4,lr} - ldr r0, _0810D974 @ =gUnknown_020297F0 - ldrh r1, [r0] - ldr r0, _0810D978 @ =0x00000c1d - cmp r1, r0 - beq _0810D96C - ldr r4, _0810D97C @ =0x000040a9 - adds r0, r4, 0 - bl VarGet - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - beq _0810D95E - adds r0, r4, 0 - bl VarGet - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3 - bne _0810D96C -_0810D95E: - adds r0, r4, 0 - movs r1, 0 - bl VarSet - movs r0, 0 - bl sav1_set_battle_music_maybe -_0810D96C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810D974: .4byte gUnknown_020297F0 -_0810D978: .4byte 0x00000c1d -_0810D97C: .4byte 0x000040a9 - thumb_func_end UpdateCyclingRoadState thumb_func_start SetSSTidalFlag SetSSTidalFlag: @ 810D980 diff --git a/asm/learn_move.s b/asm/learn_move.s index d10cc5cd5..84d244fe8 100644 --- a/asm/learn_move.s +++ b/asm/learn_move.s @@ -1815,7 +1815,7 @@ sub_8133558: @ 8133558 ldr r2, _081335FC @ =gPlayerParty adds r0, r2 adds r1, 0x20 - bl sub_80403CC + bl GetMoveRelearnerMoves ldr r1, [r5] strb r0, [r1, 0x1A] movs r4, 0 diff --git a/asm/mail_data.s b/asm/mail_data.s deleted file mode 100644 index 4dff0a12b..000000000 --- a/asm/mail_data.s +++ /dev/null @@ -1,574 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80A2B18 -sub_80A2B18: @ 80A2B18 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _080A2B3C @ =gSaveBlock1 + 0x2B4C -_080A2B1E: - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - adds r0, r5 - bl sub_80A2B40 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _080A2B1E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080A2B3C: .4byte gSaveBlock1 + 0x2B4C - thumb_func_end sub_80A2B18 - - thumb_func_start sub_80A2B40 -sub_80A2B40: @ 80A2B40 - push {r4-r6,lr} - adds r3, r0, 0 - ldr r0, _080A2B90 @ =0x0000ffff - adds r4, r0, 0 - adds r1, r3, 0 - movs r2, 0x8 -_080A2B4C: - ldrh r0, [r1] - orrs r0, r4 - strh r0, [r1] - adds r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bge _080A2B4C - movs r2, 0 - adds r6, r3, 0 - adds r6, 0x1A - adds r4, r3, 0 - adds r4, 0x12 - movs r5, 0xFF -_080A2B66: - adds r1, r4, r2 - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0x7 - ble _080A2B66 - adds r1, r6, 0 - movs r2, 0 - adds r0, r1, 0x3 -_080A2B7A: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _080A2B7A - movs r1, 0 - movs r0, 0x1 - strh r0, [r3, 0x1E] - strh r1, [r3, 0x20] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080A2B90: .4byte 0x0000ffff - thumb_func_end sub_80A2B40 - - thumb_func_start sub_80A2B94 -sub_80A2B94: @ 80A2B94 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl itemid_is_mail - lsls r0, 24 - cmp r0, 0 - beq _080A2BBC - adds r0, r4, 0 - movs r1, 0x40 - bl GetMonData - cmp r0, 0xFF - beq _080A2BBC - movs r0, 0x1 - b _080A2BBE -_080A2BBC: - movs r0, 0 -_080A2BBE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80A2B94 - - thumb_func_start sub_80A2BC4 -sub_80A2BC4: @ 80A2BC4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - adds r7, r0, 0 - lsls r1, 16 - lsrs r0, r1, 16 - str r0, [sp, 0x8] - mov r0, sp - movs r2, 0 - ldrb r3, [r0, 0x8] - strb r3, [r0] - lsrs r1, 24 - strb r1, [r0, 0x1] - add r3, sp, 0x4 - strb r2, [r3] - mov r10, r3 - ldr r4, _080A2D00 @ =gSaveBlock1 - mov r9, r4 - mov r8, r3 - adds r2, r3, 0 -_080A2BF2: - ldrb r1, [r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldr r5, _080A2D04 @ =0x00002b6c - adds r0, r5 - ldrh r0, [r0] - cmp r0, 0 - beq _080A2C08 - b _080A2D24 -_080A2C08: - movs r3, 0 - ldr r0, _080A2D08 @ =gSaveBlock2 - mov r12, r0 - mov r4, r10 - ldr r6, _080A2D0C @ =gSaveBlock1 + 0x2B4C - ldr r1, _080A2D10 @ =0x0000ffff - adds r5, r1, 0 -_080A2C16: - lsls r2, r3, 1 - ldrb r1, [r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r2, r0 - adds r2, r6 - ldrh r0, [r2] - orrs r0, r5 - strh r0, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x8 - bls _080A2C16 - movs r3, 0 - mov r2, r10 - ldr r4, _080A2D14 @ =gSaveBlock1 + 0x2B5E -_080A2C3A: - ldrb r1, [r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r3, r0 - adds r0, r4 - mov r5, r12 - adds r1, r3, r5 - ldrb r1, [r1] - strb r1, [r0] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x6 - bls _080A2C3A - mov r0, r8 - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r3, r0 - ldr r1, _080A2D14 @ =gSaveBlock1 + 0x2B5E - adds r0, r1 - movs r1, 0xFF - strb r1, [r0] - mov r2, r8 - ldrb r1, [r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r3, _080A2D14 @ =gSaveBlock1 + 0x2B5E - adds r0, r3 - movs r1, 0 - bl PadNameString - movs r3, 0 - mov r2, r10 - ldr r5, _080A2D18 @ =gSaveBlock1 + 0x2B66 - ldr r4, _080A2D1C @ =gSaveBlock2 + 0xA -_080A2C88: - ldrb r1, [r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r3, r0 - adds r0, r5 - adds r1, r3, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _080A2C88 - adds r0, r7, 0 - movs r1, 0xB - bl GetBoxMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r7, 0 - movs r1, 0 - bl GetBoxMonData - adds r1, r0, 0 - adds r0, r4, 0 - bl sub_80A2D44 - mov r4, r8 - ldrb r2, [r4] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 2 - add r1, r9 - ldr r5, _080A2D20 @ =0x00002b6a - adds r1, r5 - strh r0, [r1] - ldrb r1, [r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - add r0, r9 - ldr r1, _080A2D04 @ =0x00002b6c - adds r0, r1 - mov r2, sp - ldrh r2, [r2, 0x8] - strh r2, [r0] - adds r0, r7, 0 - movs r1, 0x40 - mov r2, r8 - bl SetMonData - adds r0, r7, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - ldrb r0, [r4] - b _080A2D32 - .align 2, 0 -_080A2D00: .4byte gSaveBlock1 -_080A2D04: .4byte 0x00002b6c -_080A2D08: .4byte gSaveBlock2 -_080A2D0C: .4byte gSaveBlock1 + 0x2B4C -_080A2D10: .4byte 0x0000ffff -_080A2D14: .4byte gSaveBlock1 + 0x2B5E -_080A2D18: .4byte gSaveBlock1 + 0x2B66 -_080A2D1C: .4byte gSaveBlock2 + 0xA -_080A2D20: .4byte 0x00002b6a -_080A2D24: - adds r0, r1, 0x1 - strb r0, [r3] - ldrb r0, [r2] - cmp r0, 0x5 - bhi _080A2D30 - b _080A2BF2 -_080A2D30: - movs r0, 0xFF -_080A2D32: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A2BC4 - - thumb_func_start sub_80A2D44 -sub_80A2D44: @ 80A2D44 - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC9 - bne _080A2D5C - adds r0, r1, 0 - bl sub_809D474 - lsls r0, 16 - ldr r1, _080A2D60 @ =0x75300000 - adds r0, r1 - lsrs r0, 16 -_080A2D5C: - pop {r1} - bx r1 - .align 2, 0 -_080A2D60: .4byte 0x75300000 - thumb_func_end sub_80A2D44 - - thumb_func_start sub_80A2D64 -sub_80A2D64: @ 80A2D64 - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - ldr r0, _080A2D7C @ =0xffff8ad0 - adds r2, r3, r0 - lsls r0, r2, 16 - lsrs r0, 16 - cmp r0, 0x1B - bhi _080A2D80 - movs r0, 0xC9 - strh r2, [r1] - b _080A2D82 - .align 2, 0 -_080A2D7C: .4byte 0xffff8ad0 -_080A2D80: - adds r0, r3, 0 -_080A2D82: - pop {r1} - bx r1 - thumb_func_end sub_80A2D64 - - thumb_func_start sub_80A2D88 -sub_80A2D88: @ 80A2D88 - push {r4-r7,lr} - sub sp, 0x8 - adds r6, r0, 0 - adds r7, r1, 0 - ldrh r5, [r7, 0x20] - adds r1, r5, 0 - bl sub_80A2BC4 - add r4, sp, 0x4 - strb r0, [r4] - ldrb r2, [r4] - cmp r2, 0xFF - beq _080A2DE8 - ldr r0, _080A2DE0 @ =gSaveBlock1 - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldr r0, _080A2DE4 @ =0x00002b4c - adds r1, r0 - adds r0, r7, 0 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r6, 0 - movs r1, 0x40 - adds r2, r4, 0 - bl SetMonData - mov r0, sp - strb r5, [r0] - mov r1, sp - lsrs r0, r5, 8 - strb r0, [r1, 0x1] - adds r0, r6, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - ldrb r0, [r4] - b _080A2DEA - .align 2, 0 -_080A2DE0: .4byte gSaveBlock1 -_080A2DE4: .4byte 0x00002b4c -_080A2DE8: - movs r0, 0xFF -_080A2DEA: - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A2D88 - - thumb_func_start unref_sub_80A2DF4 -unref_sub_80A2DF4: @ 80A2DF4 - movs r0, 0 - bx lr - thumb_func_end unref_sub_80A2DF4 - - thumb_func_start sub_80A2DF8 -sub_80A2DF8: @ 80A2DF8 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - bl sub_80A2B94 - lsls r0, 24 - cmp r0, 0 - beq _080A2E46 - adds r0, r4, 0 - movs r1, 0x40 - bl GetMonData - add r2, sp, 0x4 - strb r0, [r2] - ldr r3, _080A2E50 @ =gSaveBlock1 - ldrb r1, [r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _080A2E54 @ =0x00002b6c - adds r0, r1 - movs r3, 0 - movs r1, 0 - strh r1, [r0] - movs r0, 0xFF - strb r0, [r2] - mov r0, sp - strb r3, [r0] - strb r3, [r0, 0x1] - adds r0, r4, 0 - movs r1, 0x40 - bl SetMonData - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData -_080A2E46: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A2E50: .4byte gSaveBlock1 -_080A2E54: .4byte 0x00002b6c - thumb_func_end sub_80A2DF8 - - thumb_func_start unref_sub_80A2E58 -unref_sub_80A2E58: @ 80A2E58 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080A2E70 @ =gSaveBlock1 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldr r0, _080A2E74 @ =0x00002b6c - adds r1, r0 - movs r0, 0 - strh r0, [r1] - bx lr - .align 2, 0 -_080A2E70: .4byte gSaveBlock1 -_080A2E74: .4byte 0x00002b6c - thumb_func_end unref_sub_80A2E58 - - thumb_func_start sub_80A2E78 -sub_80A2E78: @ 80A2E78 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - adds r5, r0, 0 - mov r0, sp - movs r1, 0 - strb r1, [r0] - strb r1, [r0, 0x1] - add r1, sp, 0x4 - movs r0, 0xFF - strb r0, [r1] - movs r7, 0x6 - mov r9, r1 - ldr r0, _080A2F04 @ =gSaveBlock1 - mov r8, r0 - ldr r2, _080A2F08 @ =0x00002b4c - add r2, r8 -_080A2E9E: - lsls r0, r7, 3 - adds r0, r7 - lsls r4, r0, 2 - mov r1, r8 - adds r0, r4, r1 - ldr r3, _080A2F0C @ =0x00002b6c - adds r0, r3 - ldrh r6, [r0] - cmp r6, 0 - bne _080A2F10 - adds r4, r2 - adds r0, r5, 0 - movs r1, 0x40 - str r2, [sp, 0x8] - bl GetMonData - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r2, [sp, 0x8] - adds r1, r2 - ldm r1!, {r0,r2,r3} - stm r4!, {r0,r2,r3} - ldm r1!, {r0,r2,r3} - stm r4!, {r0,r2,r3} - ldm r1!, {r0,r2,r3} - stm r4!, {r0,r2,r3} - adds r0, r5, 0 - movs r1, 0x40 - bl GetMonData - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - add r1, r8 - ldr r0, _080A2F0C @ =0x00002b6c - adds r1, r0 - strh r6, [r1] - adds r0, r5, 0 - movs r1, 0x40 - mov r2, r9 - bl SetMonData - adds r0, r5, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r0, r7, 0 - b _080A2F1C - .align 2, 0 -_080A2F04: .4byte gSaveBlock1 -_080A2F08: .4byte 0x00002b4c -_080A2F0C: .4byte 0x00002b6c -_080A2F10: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0xF - bls _080A2E9E - movs r0, 0xFF -_080A2F1C: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A2E78 - - thumb_func_start itemid_is_mail -itemid_is_mail: @ 80A2F2C - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x84 - bgt _080A2F3E - cmp r0, 0x79 - blt _080A2F3E - movs r0, 0x1 - b _080A2F40 -_080A2F3E: - movs r0, 0 -_080A2F40: - pop {r1} - bx r1 - thumb_func_end itemid_is_mail - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokedex_cry_screen.s b/asm/pokedex_cry_screen.s index bded77228..da52c84d4 100644 --- a/asm/pokedex_cry_screen.s +++ b/asm/pokedex_cry_screen.s @@ -737,154 +737,7 @@ _0811A3C4: _0811A3C8: .4byte REG_BG3HOFS thumb_func_end sub_811A350 - thumb_func_start ShowPokedexCryScreen -ShowPokedexCryScreen: @ 811A3CC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0 - str r0, [sp] - ldr r0, _0811A3F4 @ =gUnknown_03005E98 - ldrb r1, [r0] - mov r10, r0 - cmp r1, 0x1 - beq _0811A42C - cmp r1, 0x1 - bgt _0811A3F8 - cmp r1, 0 - beq _0811A3FE - b _0811A4D6 - .align 2, 0 -_0811A3F4: .4byte gUnknown_03005E98 -_0811A3F8: - cmp r1, 0x2 - beq _0811A494 - b _0811A4D6 -_0811A3FE: - ldr r0, _0811A424 @ =gUnknown_083FAF3C - ldrh r1, [r4] - movs r2, 0xC0 - lsls r2, 19 - adds r1, r2 - bl LZ77UnCompVram - ldr r0, _0811A428 @ =gUnknown_083FAF1C - ldrb r1, [r4, 0x3] - lsls r1, 4 - movs r2, 0x20 - bl LoadPalette - mov r1, r10 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0811A4D6 - .align 2, 0 -_0811A424: .4byte gUnknown_083FAF3C -_0811A428: .4byte gUnknown_083FAF1C -_0811A42C: - ldrb r0, [r4, 0x2] - lsls r0, 11 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - mov r8, r0 - ldrh r0, [r4] - lsls r0, 18 - lsrs r0, 23 - mov r12, r0 - movs r5, 0 - ldr r2, _0811A490 @ =gUnknown_083FAE7C - mov r9, r2 -_0811A446: - movs r3, 0 - lsls r0, r5, 2 - adds r7, r5, 0x1 - adds r0, r5 - lsls r6, r0, 1 -_0811A450: - ldrb r0, [r4, 0x5] - adds r0, r5, r0 - ldrb r2, [r4, 0x4] - adds r2, r3, r2 - lsls r2, 1 - lsls r0, 6 - adds r2, r0 - add r2, r8 - adds r1, r6, r3 - lsls r1, 1 - add r1, r9 - ldrb r0, [r4, 0x3] - lsls r0, 12 - ldrh r1, [r1] - orrs r0, r1 - add r0, r12 - strh r0, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x9 - bls _0811A450 - lsls r0, r7, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0811A446 - mov r3, r10 - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - b _0811A4D6 - .align 2, 0 -_0811A490: .4byte gUnknown_083FAE7C -_0811A494: - ldr r0, _0811A4E8 @ =gCryMeterNeedleSpriteSheets - bl LoadSpriteSheets - ldr r0, _0811A4EC @ =gCryMeterNeedleSpritePalettes - bl LoadSpritePalettes - ldr r0, _0811A4F0 @ =gSpriteTemplate_83FB774 - ldrb r1, [r4, 0x4] - lsls r1, 19 - movs r2, 0xA0 - lsls r2, 14 - adds r1, r2 - asrs r1, 16 - ldrb r2, [r4, 0x5] - lsls r2, 19 - movs r3, 0xE0 - lsls r3, 14 - adds r2, r3 - asrs r2, 16 - movs r3, 0x1 - bl CreateSprite - ldr r1, _0811A4F4 @ =0x0201c800 - lsls r0, 24 - lsrs r0, 24 - movs r2, 0 - strh r0, [r1, 0x4] - movs r0, 0x20 - strb r0, [r1] - strb r0, [r1, 0x1] - strb r2, [r1, 0x2] - movs r0, 0x1 - str r0, [sp] -_0811A4D6: - ldr r0, [sp] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811A4E8: .4byte gCryMeterNeedleSpriteSheets -_0811A4EC: .4byte gCryMeterNeedleSpritePalettes -_0811A4F0: .4byte gSpriteTemplate_83FB774 -_0811A4F4: .4byte 0x0201c800 - thumb_func_end ShowPokedexCryScreen +.section .text_811A4F8 thumb_func_start DestroyCryMeterNeedleSprite DestroyCryMeterNeedleSprite: @ 811A4F8 diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s deleted file mode 100644 index d4bb815b3..000000000 --- a/asm/pokemon_3.s +++ /dev/null @@ -1,2826 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start unref_sub_803F938 -unref_sub_803F938: @ 803F938 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r5, r1, 0 - mov r10, r2 - lsls r0, 16 - movs r1, 0x9A - lsls r1, 17 - cmp r0, r1 - bne _0803FA42 - ldr r1, _0803FA04 @ =gUnknown_081FAF4C - ldr r0, [r1] - cmp r10, r0 - beq _0803FA42 - ldr r0, [r1, 0x8] - cmp r10, r0 - beq _0803FA42 - movs r6, 0 -_0803F962: - lsls r3, r6, 3 - adds r3, r6 - lsls r3, 2 - ldr r0, _0803FA08 @ =gSpindaSpotGraphics - adds r4, r3, r0 - ldrb r1, [r4] - adds r1, 0xF8 - movs r2, 0xF - adds r0, r5, 0 - ands r0, r2 - adds r1, r0 - lsls r1, 24 - lsrs r1, 24 - mov r12, r1 - ldrb r1, [r4, 0x1] - adds r1, 0xF8 - movs r0, 0xF0 - ands r0, r5 - lsrs r0, 4 - adds r1, r0 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - lsrs r5, 8 - str r5, [sp, 0x4] - adds r6, 0x1 - str r6, [sp] - mov r9, r3 -_0803F99A: - lsls r0, r2, 1 - add r0, r9 - ldr r3, _0803FA0C @ =gSpindaSpotGraphics + 0x2 - adds r0, r3 - ldrh r3, [r0] - mov r4, r12 - adds r0, r4, 0 - adds r0, 0x10 - adds r7, r1, 0x1 - adds r2, 0x1 - mov r8, r2 - cmp r4, r0 - bge _0803FA30 - lsrs r0, r1, 3 - lsls r6, r0, 8 - movs r0, 0x7 - ands r1, r0 - lsls r5, r1, 2 -_0803F9BE: - adds r0, r4, 0 - cmp r4, 0 - bge _0803F9C6 - adds r0, r4, 0x7 -_0803F9C6: - asrs r0, 3 - lsls r2, r0, 5 - add r2, r10 - lsls r0, 3 - subs r0, r4, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r2, r0 - adds r2, r6 - adds r2, r5 - movs r1, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0803FA24 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0803FA10 - ldrb r1, [r2] - movs r0, 0xF0 - ands r0, r1 - subs r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x20 - bhi _0803FA24 - adds r0, r1, 0 - adds r0, 0x40 - b _0803FA22 - .align 2, 0 -_0803FA04: .4byte gUnknown_081FAF4C -_0803FA08: .4byte gSpindaSpotGraphics -_0803FA0C: .4byte gSpindaSpotGraphics + 0x2 -_0803FA10: - ldrb r1, [r2] - movs r0, 0xF - ands r0, r1 - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bhi _0803FA24 - adds r0, r1, 0x4 -_0803FA22: - strb r0, [r2] -_0803FA24: - asrs r3, 1 - adds r4, 0x1 - mov r0, r12 - adds r0, 0x10 - cmp r4, r0 - blt _0803F9BE -_0803FA30: - lsls r0, r7, 24 - lsrs r1, r0, 24 - mov r2, r8 - cmp r2, 0xF - ble _0803F99A - ldr r5, [sp, 0x4] - ldr r6, [sp] - cmp r6, 0x3 - ble _0803F962 -_0803FA42: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end unref_sub_803F938 - - thumb_func_start DrawSpindaSpots -DrawSpindaSpots: @ 803FA54 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r5, r1, 0 - str r2, [sp] - lsls r0, 16 - lsls r3, 24 - lsrs r3, 24 - movs r1, 0x9A - lsls r1, 17 - cmp r0, r1 - bne _0803FB56 - cmp r3, 0 - beq _0803FB56 - movs r6, 0 -_0803FA78: - lsls r3, r6, 3 - adds r3, r6 - lsls r3, 2 - ldr r0, _0803FB1C @ =gSpindaSpotGraphics - adds r4, r3, r0 - ldrb r1, [r4] - adds r1, 0xF8 - movs r2, 0xF - adds r0, r5, 0 - ands r0, r2 - adds r1, r0 - lsls r1, 24 - lsrs r1, 24 - mov r12, r1 - ldrb r1, [r4, 0x1] - adds r1, 0xF8 - movs r0, 0xF0 - ands r0, r5 - lsrs r0, 4 - adds r1, r0 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - lsrs r5, 8 - str r5, [sp, 0x4] - adds r6, 0x1 - mov r10, r6 - mov r9, r3 -_0803FAB0: - lsls r0, r2, 1 - add r0, r9 - ldr r3, _0803FB20 @ =gSpindaSpotGraphics + 0x2 - adds r0, r3 - ldrh r3, [r0] - mov r4, r12 - adds r0, r4, 0 - adds r0, 0x10 - adds r7, r1, 0x1 - adds r2, 0x1 - mov r8, r2 - cmp r4, r0 - bge _0803FB44 - lsrs r0, r1, 3 - lsls r6, r0, 8 - movs r0, 0x7 - ands r1, r0 - lsls r5, r1, 2 -_0803FAD4: - adds r0, r4, 0 - cmp r4, 0 - bge _0803FADC - adds r0, r4, 0x7 -_0803FADC: - asrs r0, 3 - lsls r2, r0, 5 - ldr r1, [sp] - adds r2, r1, r2 - lsls r0, 3 - subs r0, r4, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r2, r0 - adds r2, r6 - adds r2, r5 - movs r1, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0803FB38 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0803FB24 - ldrb r1, [r2] - movs r0, 0xF0 - ands r0, r1 - subs r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x20 - bhi _0803FB38 - adds r0, r1, 0 - adds r0, 0x40 - b _0803FB36 - .align 2, 0 -_0803FB1C: .4byte gSpindaSpotGraphics -_0803FB20: .4byte gSpindaSpotGraphics + 0x2 -_0803FB24: - ldrb r1, [r2] - movs r0, 0xF - ands r0, r1 - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bhi _0803FB38 - adds r0, r1, 0x4 -_0803FB36: - strb r0, [r2] -_0803FB38: - asrs r3, 1 - adds r4, 0x1 - mov r0, r12 - adds r0, 0x10 - cmp r4, r0 - blt _0803FAD4 -_0803FB44: - lsls r0, r7, 24 - lsrs r1, r0, 24 - mov r2, r8 - cmp r2, 0xF - ble _0803FAB0 - ldr r5, [sp, 0x4] - mov r6, r10 - cmp r6, 0x3 - ble _0803FA78 -_0803FB56: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end DrawSpindaSpots - - .if REVISION >= 1 - thumb_func_start sub_803FB68 -sub_803FB68: @ 803FB68 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r5, r0, 0 - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r2, 16 - mov r8, r2 - ldr r0, =gStringVar1 - mov r9, r0 - adds r0, r5, 0 - movs r1, 0x2 - mov r2, r9 - bl GetMonData - mov r4, sp - adds r0, r5, 0 - movs r1, 0x3 - mov r2, sp - bl GetMonData - strb r0, [r4, 0x0] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0803FBC4 - movs r6, 0xB - adds r0, r7, 0 - muls r0, r6 - ldr r4, =gSpeciesNames - adds r0, r4 - mov r1, r9 - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - bne _0803FBC4 - mov r2, r8 - muls r2, r6 - adds r2, r4 - adds r0, r5, 0 - movs r1, 0x2 - bl SetMonData -_0803FBC4: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_803FB68 - .else - thumb_func_start sub_803FB68 -sub_803FB68: @ 803FB68 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r4, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r2, 16 - lsrs r2, 16 - mov r8, r2 - ldr r5, _0803FBB4 @ =gStringVar1 - movs r1, 0x2 - adds r2, r5, 0 - bl GetMonData - movs r6, 0xB - adds r0, r4, 0 - muls r0, r6 - ldr r4, _0803FBB8 @ =gSpeciesNames - adds r0, r4 - adds r1, r5, 0 - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - bne _0803FBA8 - mov r2, r8 - muls r2, r6 - adds r2, r4 - adds r0, r7, 0 - movs r1, 0x2 - bl SetMonData -_0803FBA8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803FBB4: .4byte gStringVar1 -_0803FBB8: .4byte gSpeciesNames - thumb_func_end sub_803FB68 - .endif - - thumb_func_start sub_803FBBC -sub_803FBBC: @ 803FBBC - push {r4,r5,lr} - movs r5, 0 - ldr r4, _0803FBE4 @ =gLinkPlayers - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x18] - cmp r0, 0x2 - bgt _0803FBE8 - cmp r0, 0x1 - bge _0803FBF0 - cmp r0, 0 - beq _0803FBEC - b _0803FBF2 - .align 2, 0 -_0803FBE4: .4byte gLinkPlayers -_0803FBE8: - cmp r0, 0x3 - bne _0803FBF2 -_0803FBEC: - movs r5, 0 - b _0803FBF2 -_0803FBF0: - movs r5, 0x1 -_0803FBF2: - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_803FBBC - - thumb_func_start sub_803FBFC -sub_803FBFC: @ 803FBFC - push {lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r2, _0803FC20 @ =gLinkPlayers - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x18] - cmp r0, 0x2 - bgt _0803FC24 - cmp r0, 0x1 - bge _0803FC2C - cmp r0, 0 - beq _0803FC28 - b _0803FC2E - .align 2, 0 -_0803FC20: .4byte gLinkPlayers -_0803FC24: - cmp r0, 0x3 - bne _0803FC2E -_0803FC28: - movs r3, 0 - b _0803FC2E -_0803FC2C: - movs r3, 0x1 -_0803FC2E: - adds r0, r3, 0 - pop {r1} - bx r1 - thumb_func_end sub_803FBFC - - thumb_func_start sub_803FC34 -sub_803FC34: @ 803FC34 - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r1, _0803FC40 @ =gLinkPlayers - b _0803FC4C - .align 2, 0 -_0803FC40: .4byte gLinkPlayers -_0803FC44: - adds r1, 0x1C - adds r2, 0x1 - cmp r2, 0x3 - bgt _0803FC52 -_0803FC4C: - ldrh r0, [r1, 0x18] - cmp r0, r3 - bne _0803FC44 -_0803FC52: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end sub_803FC34 - - thumb_func_start sub_803FC58 -sub_803FC58: @ 803FC58 - lsls r0, 16 - lsrs r0, 16 - ldr r2, _0803FC70 @ =gTrainers - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrb r1, [r1, 0x2] - movs r0, 0x7F - ands r0, r1 - bx lr - .align 2, 0 -_0803FC70: .4byte gTrainers - thumb_func_end sub_803FC58 - - thumb_func_start nature_stat_mod -nature_stat_mod: @ 803FC74 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r3, r1, 16 - lsls r2, 24 - lsrs r5, r2, 24 - movs r0, 0xFF - lsls r0, 24 - adds r2, r0 - lsrs r2, 24 - cmp r2, 0x4 - bls _0803FC92 - adds r0, r3, 0 - b _0803FCCE -_0803FC92: - ldr r0, _0803FCB4 @ =gNatureStatTable - lsls r1, r4, 2 - adds r1, r4 - subs r1, 0x1 - adds r1, r5, r1 - adds r1, r0 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0803FCB8 - cmp r1, 0x1 - bne _0803FCCC - movs r0, 0x6E - b _0803FCBA - .align 2, 0 -_0803FCB4: .4byte gNatureStatTable -_0803FCB8: - movs r0, 0x5A -_0803FCBA: - muls r0, r3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __udivsi3 - lsls r0, 16 - lsrs r0, 16 - b _0803FCCE -_0803FCCC: - adds r0, r3, 0 -_0803FCCE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end nature_stat_mod - - thumb_func_start AdjustFriendship -AdjustFriendship: @ 803FCD4 - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r7, 0 - movs r1, 0xC - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - bne _0803FD34 - ldr r0, _0803FD14 @ =gMain - ldr r1, _0803FD18 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803FD20 - ldr r0, _0803FD1C @ =gEnigmaBerries - ldrb r4, [r0, 0x7] - b _0803FD3C - .align 2, 0 -_0803FD14: .4byte gMain -_0803FD18: .4byte 0x0000043d -_0803FD1C: .4byte gEnigmaBerries -_0803FD20: - ldr r0, _0803FD2C @ =gSaveBlock1 - ldr r1, _0803FD30 @ =0x00003688 - adds r0, r1 - ldrb r4, [r0] - b _0803FD3C - .align 2, 0 -_0803FD2C: .4byte gSaveBlock1 -_0803FD30: .4byte 0x00003688 -_0803FD34: - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r4, r0, 24 -_0803FD3C: - cmp r6, 0 - bne _0803FD42 - b _0803FE56 -_0803FD42: - movs r0, 0xCE - lsls r0, 1 - cmp r6, r0 - bne _0803FD4C - b _0803FE56 -_0803FD4C: - movs r6, 0 - adds r0, r7, 0 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r1, sp - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x63 - ble _0803FD6A - movs r6, 0x1 -_0803FD6A: - cmp r0, 0xC7 - ble _0803FD74 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_0803FD74: - cmp r5, 0x5 - bne _0803FD84 - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - bne _0803FE56 -_0803FD84: - cmp r5, 0x3 - bne _0803FDB4 - ldr r0, _0803FE60 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0803FE56 - ldr r2, _0803FE64 @ =gTrainers - ldr r0, _0803FE68 @ =gTrainerBattleOpponent - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r1, [r0, 0x1] - adds r0, r1, 0 - subs r0, 0x18 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _0803FDB4 - cmp r1, 0x20 - bne _0803FE56 -_0803FDB4: - ldr r1, _0803FE6C @ =gUnknown_082082FE - lsls r0, r5, 1 - adds r0, r5 - adds r0, r6, r0 - adds r0, r1 - ldrb r2, [r0] - movs r1, 0 - ldrsb r1, [r0, r1] - cmp r1, 0 - ble _0803FDDA - cmp r4, 0x1B - bne _0803FDDA - movs r0, 0x96 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - lsls r0, 24 - lsrs r2, r0, 24 -_0803FDDA: - lsls r2, 24 - asrs r2, 24 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - adds r0, r2 - mov r1, sp - strh r0, [r1] - cmp r2, 0 - ble _0803FE2C - adds r0, r7, 0 - movs r1, 0x26 - movs r2, 0 - bl GetMonData - cmp r0, 0xB - bne _0803FE08 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - adds r0, 0x1 - mov r1, sp - strh r0, [r1] -_0803FE08: - adds r0, r7, 0 - 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 _0803FE2C - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - adds r0, 0x1 - mov r1, sp - strh r0, [r1] -_0803FE2C: - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bge _0803FE3C - movs r1, 0 - mov r0, sp - strh r1, [r0] -_0803FE3C: - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0xFF - ble _0803FE4C - movs r1, 0xFF - mov r0, sp - strh r1, [r0] -_0803FE4C: - adds r0, r7, 0 - movs r1, 0x20 - mov r2, sp - bl SetMonData -_0803FE56: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803FE60: .4byte gBattleTypeFlags -_0803FE64: .4byte gTrainers -_0803FE68: .4byte gTrainerBattleOpponent -_0803FE6C: .4byte gUnknown_082082FE - thumb_func_end AdjustFriendship - - thumb_func_start MonGainEVs -MonGainEVs: @ 803FE70 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - mov r8, r0 - lsls r1, 16 - lsrs r5, r1, 16 - movs r4, 0 - movs r7, 0 - movs r6, 0 -_0803FE84: - adds r1, r6, 0 - adds r1, 0x1A - mov r0, r8 - movs r2, 0 - bl GetMonData - mov r2, sp - adds r1, r2, r6 - strb r0, [r1] - ldrb r0, [r1] - adds r0, r7, r0 - lsls r0, 16 - lsrs r7, r0, 16 - adds r6, 0x1 - cmp r6, 0x5 - ble _0803FE84 - movs r6, 0 - b _08040006 -_0803FEA8: - mov r0, r8 - movs r1, 0 - bl CheckPartyHasHadPokerus - lsls r0, 24 - movs r2, 0x1 - cmp r0, 0 - beq _0803FEBA - movs r2, 0x2 -_0803FEBA: - cmp r6, 0x5 - bhi _0803FF5C - lsls r0, r6, 2 - ldr r1, _0803FEC8 @ =_0803FECC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803FEC8: .4byte _0803FECC - .align 2, 0 -_0803FECC: - .4byte _0803FEE4 - .4byte _0803FEF8 - .4byte _0803FF0C - .4byte _0803FF20 - .4byte _0803FF34 - .4byte _0803FF48 -_0803FEE4: - ldr r0, _0803FEF4 @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - lsls r0, 30 - b _0803FF56 - .align 2, 0 -_0803FEF4: .4byte gBaseStats -_0803FEF8: - ldr r0, _0803FF08 @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - b _0803FF54 - .align 2, 0 -_0803FF08: .4byte gBaseStats -_0803FF0C: - ldr r0, _0803FF1C @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - lsls r0, 26 - b _0803FF56 - .align 2, 0 -_0803FF1C: .4byte gBaseStats -_0803FF20: - ldr r0, _0803FF30 @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xA] - lsrs r0, 6 - b _0803FF58 - .align 2, 0 -_0803FF30: .4byte gBaseStats -_0803FF34: - ldr r0, _0803FF44 @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xB] - lsls r0, 30 - b _0803FF56 - .align 2, 0 -_0803FF44: .4byte gBaseStats -_0803FF48: - ldr r0, _0803FF84 @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0xB] -_0803FF54: - lsls r0, 28 -_0803FF56: - lsrs r0, 30 -_0803FF58: - adds r4, r0, 0 - muls r4, r2 -_0803FF5C: - mov r0, r8 - movs r1, 0xC - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - bne _0803FFA8 - ldr r0, _0803FF88 @ =gMain - ldr r1, _0803FF8C @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803FF94 - ldr r0, _0803FF90 @ =gEnigmaBerries - ldrb r0, [r0, 0x7] - b _0803FFB0 - .align 2, 0 -_0803FF84: .4byte gBaseStats -_0803FF88: .4byte gMain -_0803FF8C: .4byte 0x0000043d -_0803FF90: .4byte gEnigmaBerries -_0803FF94: - ldr r0, _0803FFA0 @ =gSaveBlock1 - ldr r2, _0803FFA4 @ =0x00003688 - adds r0, r2 - ldrb r0, [r0] - b _0803FFB0 - .align 2, 0 -_0803FFA0: .4byte gSaveBlock1 -_0803FFA4: .4byte 0x00003688 -_0803FFA8: - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r0, 24 -_0803FFB0: - cmp r0, 0x18 - bne _0803FFB8 - lsls r0, r4, 17 - lsrs r4, r0, 16 -_0803FFB8: - lsls r0, r4, 16 - asrs r2, r0, 16 - adds r1, r7, r2 - movs r0, 0xFF - lsls r0, 1 - cmp r1, r0 - ble _0803FFD0 - adds r0, r2, r0 - adds r1, r7, r4 - subs r0, r1 - lsls r0, 16 - lsrs r4, r0, 16 -_0803FFD0: - mov r0, sp - adds r2, r0, r6 - ldrb r3, [r2] - lsls r0, r4, 16 - asrs r1, r0, 16 - adds r0, r3, r1 - cmp r0, 0xFF - ble _0803FFEC - adds r0, r1, 0 - adds r0, 0xFF - adds r1, r3, r4 - subs r0, r1 - lsls r0, 16 - lsrs r4, r0, 16 -_0803FFEC: - adds r0, r3, r4 - strb r0, [r2] - adds r0, r7, r4 - lsls r0, 16 - lsrs r7, r0, 16 - adds r1, r6, 0 - adds r1, 0x1A - mov r0, r8 - bl SetMonData - adds r6, 0x1 - cmp r6, 0x5 - bgt _0804000E -_08040006: - ldr r0, _0804001C @ =0x000001fd - cmp r7, r0 - bhi _0804000E - b _0803FEA8 -_0804000E: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804001C: .4byte 0x000001fd - thumb_func_end MonGainEVs - - thumb_func_start GetMonEVCount -GetMonEVCount: @ 8040020 - push {r4-r6,lr} - adds r6, r0, 0 - movs r5, 0 - movs r4, 0 -_08040028: - adds r1, r4, 0 - adds r1, 0x1A - adds r0, r6, 0 - movs r2, 0 - bl GetMonData - adds r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 - adds r4, 0x1 - cmp r4, 0x5 - ble _08040028 - adds r0, r5, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetMonEVCount - - thumb_func_start RandomlyGivePartyPokerus -RandomlyGivePartyPokerus: @ 8040048 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - bl Random - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0x80 - lsls r0, 7 - cmp r5, r0 - beq _0804006E - movs r0, 0x80 - lsls r0, 8 - cmp r5, r0 - beq _0804006E - movs r0, 0xC0 - lsls r0, 8 - cmp r5, r0 - bne _08040104 -_0804006E: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0x64 - muls r0, r5 - adds r4, r6, r0 - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - cmp r0, 0 - beq _0804006E - adds r0, r4, 0 - movs r1, 0x2D - movs r2, 0 - bl GetMonData - cmp r0, 0 - bne _0804006E - ldr r1, _0804010C @ =gBitTable - lsls r0, r5, 2 - adds r0, r1 - ldrb r1, [r0] - adds r0, r6, 0 - bl CheckPartyHasHadPokerus - lsls r0, 24 - cmp r0, 0 - bne _08040104 - mov r4, sp -_080400B8: - bl Random - lsls r0, 24 - lsrs r0, 24 - strb r0, [r4] - cmp r0, 0 - beq _080400B8 - movs r0, 0xF0 - mov r1, sp - ldrb r1, [r1] - ands r0, r1 - cmp r0, 0 - beq _080400DA - movs r0, 0x7 - ands r1, r0 - mov r0, sp - strb r1, [r0] -_080400DA: - mov r0, sp - ldrb r0, [r0] - lsls r1, r0, 4 - orrs r0, r1 - lsls r0, 24 - lsrs r0, 24 - mov r1, sp - strb r0, [r1] - movs r1, 0xF3 - ands r1, r0 - mov r0, sp - strb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - movs r0, 0x64 - muls r0, r5 - adds r0, r6, r0 - movs r1, 0x22 - mov r2, sp - bl SetMonData -_08040104: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804010C: .4byte gBitTable - thumb_func_end RandomlyGivePartyPokerus - - thumb_func_start CheckPartyPokerus -CheckPartyPokerus: @ 8040110 - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - movs r3, 0 - movs r6, 0x1 - movs r5, 0 - cmp r4, 0 - beq _08040158 -_08040124: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0804014C - movs r0, 0x64 - muls r0, r3 - adds r0, r7, r0 - movs r1, 0x22 - movs r2, 0 - str r3, [sp] - bl GetMonData - movs r1, 0xF - ands r1, r0 - ldr r3, [sp] - cmp r1, 0 - beq _0804014C - orrs r5, r6 - lsls r0, r5, 24 - lsrs r5, r0, 24 -_0804014C: - adds r3, 0x1 - lsls r6, 1 - lsrs r4, 1 - cmp r4, 0 - bne _08040124 - b _0804016C -_08040158: - adds r0, r7, 0 - movs r1, 0x22 - movs r2, 0 - bl GetMonData - movs r1, 0xF - ands r1, r0 - cmp r1, 0 - beq _0804016C - movs r5, 0x1 -_0804016C: - adds r0, r5, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckPartyPokerus - - thumb_func_start CheckPartyHasHadPokerus -CheckPartyHasHadPokerus: @ 8040178 - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - movs r3, 0 - movs r6, 0x1 - movs r5, 0 - cmp r4, 0 - beq _080401BC -_0804018C: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _080401B0 - movs r0, 0x64 - muls r0, r3 - adds r0, r7, r0 - movs r1, 0x22 - movs r2, 0 - str r3, [sp] - bl GetMonData - ldr r3, [sp] - cmp r0, 0 - beq _080401B0 - orrs r5, r6 - lsls r0, r5, 24 - lsrs r5, r0, 24 -_080401B0: - adds r3, 0x1 - lsls r6, 1 - lsrs r4, 1 - cmp r4, 0 - bne _0804018C - b _080401CC -_080401BC: - adds r0, r7, 0 - movs r1, 0x22 - movs r2, 0 - bl GetMonData - cmp r0, 0 - beq _080401CC - movs r5, 0x1 -_080401CC: - adds r0, r5, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckPartyHasHadPokerus - - thumb_func_start UpdatePartyPokerusTime -UpdatePartyPokerusTime: @ 80401D8 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 16 - lsrs r7, r0, 16 - movs r5, 0 - mov r6, sp -_080401E4: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08040224 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - cmp r0, 0 - beq _0804023C - adds r0, r4, 0 - movs r1, 0x22 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - strb r0, [r6] - movs r1, 0xF - adds r2, r0, 0 - ands r1, r2 - cmp r1, 0 - beq _0804023C - cmp r1, r7 - bcc _0804021E - cmp r7, 0x4 - bls _08040228 -_0804021E: - movs r0, 0xF0 - ands r0, r2 - b _0804022A - .align 2, 0 -_08040224: .4byte gPlayerParty -_08040228: - subs r0, r2, r7 -_0804022A: - strb r0, [r6] - movs r0, 0x64 - muls r0, r5 - ldr r1, _0804024C @ =gPlayerParty - adds r0, r1 - movs r1, 0x22 - mov r2, sp - bl SetMonData -_0804023C: - adds r5, 0x1 - cmp r5, 0x5 - ble _080401E4 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804024C: .4byte gPlayerParty - thumb_func_end UpdatePartyPokerusTime - - thumb_func_start PartySpreadPokerus -PartySpreadPokerus: @ 8040250 - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _080402F6 - movs r5, 0 -_0804026C: - movs r0, 0x64 - adds r6, r5, 0 - muls r6, r0 - adds r4, r7, r6 - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - cmp r0, 0 - beq _080402F0 - adds r0, r4, 0 - movs r1, 0x22 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r1, r0, 24 - mov r0, sp - strb r1, [r0] - cmp r1, 0 - beq _080402F0 - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - beq _080402F0 - cmp r5, 0 - beq _080402C6 - adds r0, r6, 0 - subs r0, 0x64 - adds r4, r7, r0 - adds r0, r4, 0 - movs r1, 0x22 - movs r2, 0 - bl GetMonData - movs r1, 0xF0 - ands r1, r0 - cmp r1, 0 - bne _080402C6 - adds r0, r4, 0 - movs r1, 0x22 - mov r2, sp - bl SetMonData -_080402C6: - cmp r5, 0x5 - beq _080402F0 - movs r0, 0x64 - muls r0, r5 - adds r0, 0x64 - adds r4, r7, r0 - adds r0, r4, 0 - movs r1, 0x22 - movs r2, 0 - bl GetMonData - movs r1, 0xF0 - ands r1, r0 - cmp r1, 0 - bne _080402F0 - adds r0, r4, 0 - movs r1, 0x22 - mov r2, sp - bl SetMonData - adds r5, 0x1 -_080402F0: - adds r5, 0x1 - cmp r5, 0x5 - ble _0804026C -_080402F6: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end PartySpreadPokerus - - thumb_func_start TryIncrementMonLevel -TryIncrementMonLevel: @ 8040300 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r6, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - adds r0, 0x1 - mov r1, sp - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x19 - movs r2, 0 - bl GetMonData - ldr r5, _08040358 @ =gExperienceTables - mov r1, sp - ldrb r2, [r1] - lsls r2, 2 - ldr r3, _0804035C @ =gBaseStats - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - adds r1, r3 - ldrb r3, [r1, 0x13] - movs r1, 0xCA - lsls r1, 1 - muls r1, r3 - adds r2, r1 - adds r2, r5 - ldr r1, [r2] - cmp r0, r1 - bhi _08040360 - movs r0, 0 - b _0804036C - .align 2, 0 -_08040358: .4byte gExperienceTables -_0804035C: .4byte gBaseStats -_08040360: - adds r0, r6, 0 - movs r1, 0x38 - mov r2, sp - bl SetMonData - movs r0, 0x1 -_0804036C: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end TryIncrementMonLevel - - thumb_func_start CanMonLearnTMHM -CanMonLearnTMHM: @ 8040374 - push {r4,r5,lr} - lsls r1, 24 - lsrs r4, r1, 24 - adds r5, r4, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - adds r3, r1, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - bne _08040396 - movs r0, 0 - b _080403C2 -_08040396: - cmp r4, 0x1F - bls _080403B4 - adds r0, r4, 0 - subs r0, 0x20 - movs r2, 0x1 - lsls r2, r0 - ldr r0, _080403B0 @ =gTMHMLearnsets - lsls r1, 3 - adds r0, 0x4 - adds r1, r0 - ldr r0, [r1] - ands r0, r2 - b _080403C2 - .align 2, 0 -_080403B0: .4byte gTMHMLearnsets -_080403B4: - movs r1, 0x1 - lsls r1, r5 - ldr r2, _080403C8 @ =gTMHMLearnsets - lsls r0, r3, 3 - adds r0, r2 - ldr r0, [r0] - ands r0, r1 -_080403C2: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080403C8: .4byte gTMHMLearnsets - thumb_func_end CanMonLearnTMHM - - thumb_func_start sub_80403CC -sub_80403CC: @ 80403CC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - adds r6, r0, 0 - str r1, [sp, 0x8] - movs r0, 0 - mov r10, r0 - adds r0, r6, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - adds r0, r6, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0xC] - movs r5, 0 - mov r4, sp -_08040402: - adds r1, r5, 0 - adds r1, 0xD - adds r0, r6, 0 - movs r2, 0 - bl GetMonData - strh r0, [r4] - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _08040402 - movs r5, 0 - ldr r6, _08040510 @ =gLevelUpLearnsets - lsls r1, r7, 2 - adds r2, r1, r6 - ldr r3, [r2] - ldrh r0, [r3] - ldr r4, _08040514 @ =0x0000ffff - str r1, [sp, 0x14] - cmp r0, r4 - beq _080404FC - mov r9, r2 - str r3, [sp, 0x10] -_08040430: - lsls r2, r5, 1 - ldr r1, [sp, 0x10] - adds r0, r2, r1 - ldrh r3, [r0] - movs r0, 0xFE - lsls r0, 8 - ands r0, r3 - ldr r4, [sp, 0xC] - lsls r1, r4, 9 - adds r7, r2, 0 - adds r5, 0x1 - mov r12, r5 - cmp r0, r1 - bgt _080404E6 - movs r4, 0 - mov r0, sp - ldrh r1, [r0] - ldr r0, _08040518 @ =0x000001ff - ands r0, r3 - cmp r1, r0 - beq _08040480 - ldr r0, [sp, 0x14] - ldr r1, _08040510 @ =gLevelUpLearnsets - adds r6, r0, r1 - ldr r2, _08040518 @ =0x000001ff - mov r8, r2 - mov r3, sp - adds r5, r7, 0 -_08040468: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - bgt _08040480 - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _08040468 -_08040480: - cmp r4, 0x4 - bne _080404E6 - movs r4, 0 - cmp r4, r10 - bge _080404C4 - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, [sp, 0x8] - ldrh r2, [r0] - ldr r0, _08040518 @ =0x000001ff - ands r0, r1 - cmp r2, r0 - beq _080404C4 - ldr r1, [sp, 0x14] - ldr r2, _08040510 @ =gLevelUpLearnsets - adds r6, r1, r2 - ldr r0, _08040518 @ =0x000001ff - mov r8, r0 - ldr r3, [sp, 0x8] - adds r5, r7, 0 -_080404AC: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, r10 - bge _080404C4 - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _080404AC -_080404C4: - cmp r4, r10 - bne _080404E6 - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r2, r4, 1 - ldr r1, [sp, 0x8] - adds r2, r1 - mov r4, r9 - ldr r0, [r4] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, _08040518 @ =0x000001ff - ands r0, r1 - strh r0, [r2] -_080404E6: - mov r5, r12 - cmp r5, 0x13 - bgt _080404FC - mov r1, r9 - ldr r0, [r1] - lsls r1, r5, 1 - adds r1, r0 - ldrh r0, [r1] - ldr r2, _08040514 @ =0x0000ffff - cmp r0, r2 - bne _08040430 -_080404FC: - mov r0, r10 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08040510: .4byte gLevelUpLearnsets -_08040514: .4byte 0x0000ffff -_08040518: .4byte 0x000001ff - thumb_func_end sub_80403CC - - thumb_func_start sub_804051C -sub_804051C: @ 804051C - push {r4-r7,lr} - adds r6, r1, 0 - lsls r0, 16 - movs r5, 0 - movs r4, 0 - ldr r1, _08040568 @ =gLevelUpLearnsets - lsrs r0, 14 - adds r0, r1 - ldr r2, [r0] - ldrh r0, [r2] - ldr r1, _0804056C @ =0x0000ffff - cmp r0, r1 - beq _08040560 - ldr r0, _08040570 @ =0x000001ff - mov r12, r0 - adds r7, r1, 0 - adds r3, r2, 0 -_0804053E: - adds r1, r5, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 1 - adds r1, r6 - ldrh r2, [r3] - mov r0, r12 - ands r0, r2 - strh r0, [r1] - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x13 - bgt _08040560 - ldrh r0, [r3] - cmp r0, r7 - bne _0804053E -_08040560: - adds r0, r5, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08040568: .4byte gLevelUpLearnsets -_0804056C: .4byte 0x0000ffff -_08040570: .4byte 0x000001ff - thumb_func_end sub_804051C - - thumb_func_start sub_8040574 -sub_8040574: @ 8040574 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x3C - adds r6, r0, 0 - movs r0, 0 - mov r10, r0 - adds r0, r6, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r6, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x30] - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bne _080405B0 - movs r0, 0 - b _080406BA -_080405B0: - movs r5, 0 - lsls r4, 2 - str r4, [sp, 0x38] - mov r4, sp -_080405B8: - adds r1, r5, 0 - adds r1, 0xD - adds r0, r6, 0 - movs r2, 0 - bl GetMonData - strh r0, [r4] - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _080405B8 - movs r5, 0 - ldr r3, _080406CC @ =gLevelUpLearnsets - ldr r2, [sp, 0x38] - adds r1, r2, r3 - ldr r0, [r1] - ldrh r0, [r0] - ldr r2, _080406D0 @ =0x0000ffff - cmp r0, r2 - beq _080406B8 - mov r9, r1 - mov r4, sp - adds r4, 0x8 - str r4, [sp, 0x34] -_080405E8: - mov r1, r9 - ldr r0, [r1] - lsls r2, r5, 1 - adds r0, r2, r0 - ldrh r3, [r0] - movs r0, 0xFE - lsls r0, 8 - ands r0, r3 - ldr r4, [sp, 0x30] - lsls r1, r4, 9 - adds r7, r2, 0 - adds r5, 0x1 - mov r12, r5 - cmp r0, r1 - bgt _080406A2 - movs r4, 0 - mov r0, sp - ldrh r1, [r0] - ldr r0, _080406D4 @ =0x000001ff - ands r0, r3 - cmp r1, r0 - beq _0804063A - ldr r0, [sp, 0x38] - ldr r1, _080406CC @ =gLevelUpLearnsets - adds r6, r0, r1 - ldr r2, _080406D4 @ =0x000001ff - mov r8, r2 - mov r3, sp - adds r5, r7, 0 -_08040622: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - bgt _0804063A - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _08040622 -_0804063A: - cmp r4, 0x4 - bne _080406A2 - movs r4, 0 - cmp r4, r10 - bge _08040680 - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, [sp, 0x34] - ldrh r2, [r0] - ldr r0, _080406D4 @ =0x000001ff - ands r0, r1 - add r1, sp, 0x8 - cmp r2, r0 - beq _08040680 - ldr r2, [sp, 0x38] - ldr r0, _080406CC @ =gLevelUpLearnsets - adds r6, r2, r0 - ldr r2, _080406D4 @ =0x000001ff - mov r8, r2 - adds r3, r1, 0 - adds r5, r7, 0 -_08040668: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, r10 - bge _08040680 - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _08040668 -_08040680: - cmp r4, r10 - bne _080406A2 - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r2, r4, 1 - ldr r4, [sp, 0x34] - adds r2, r4, r2 - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, _080406D4 @ =0x000001ff - ands r0, r1 - strh r0, [r2] -_080406A2: - mov r5, r12 - cmp r5, 0x13 - bgt _080406B8 - mov r2, r9 - ldr r0, [r2] - lsls r1, r5, 1 - adds r1, r0 - ldrh r0, [r1] - ldr r4, _080406D0 @ =0x0000ffff - cmp r0, r4 - bne _080405E8 -_080406B8: - mov r0, r10 -_080406BA: - add sp, 0x3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080406CC: .4byte gLevelUpLearnsets -_080406D0: .4byte 0x0000ffff -_080406D4: .4byte 0x000001ff - thumb_func_end sub_8040574 - - thumb_func_start SpeciesToPokedexNum -SpeciesToPokedexNum: @ 80406D8 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - bl IsNationalPokedexEnabled - cmp r0, 0 - beq _080406F2 - adds r0, r4, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - b _0804070A -_080406F2: - adds r0, r4, 0 - bl SpeciesToHoennPokedexNum - adds r4, r0, 0 - cmp r4, 0xCA - bls _08040708 - ldr r0, _08040704 @ =0x0000ffff - b _0804070A - .align 2, 0 -_08040704: .4byte 0x0000ffff -_08040708: - adds r0, r4, 0 -_0804070A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end SpeciesToPokedexNum - - thumb_func_start sub_8040710 -sub_8040710: @ 8040710 - push {lr} - ldr r1, _08040724 @ =gUnknown_02024E84 - movs r2, 0 - adds r0, r1, 0x3 -_08040718: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08040718 - pop {r0} - bx r0 - .align 2, 0 -_08040724: .4byte gUnknown_02024E84 - thumb_func_end sub_8040710 - - thumb_func_start sub_8040728 -sub_8040728: @ 8040728 - push {lr} - ldr r0, _0804073C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _08040744 - ldr r0, _08040740 @ =0x000001cf - b _080408B2 - .align 2, 0 -_0804073C: .4byte gBattleTypeFlags -_08040740: .4byte 0x000001cf -_08040744: - movs r0, 0x80 - lsls r0, 7 - ands r0, r1 - cmp r0, 0 - beq _08040754 - movs r0, 0xE7 - lsls r0, 1 - b _080408B2 -_08040754: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0804075E - b _080408A8 -_0804075E: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08040768 - b _080408B0 -_08040768: - ldr r3, _0804078C @ =gTrainers - ldr r2, _08040790 @ =gTrainerBattleOpponent - ldrh r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - ldrb r0, [r0, 0x1] - subs r0, 0x2 - cmp r0, 0x31 - bls _08040780 - b _080408A8 -_08040780: - lsls r0, 2 - ldr r1, _08040794 @ =_08040798 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804078C: .4byte gTrainers -_08040790: .4byte gTrainerBattleOpponent -_08040794: .4byte _08040798 - .align 2, 0 -_08040798: - .4byte _08040860 - .4byte _08040866 - .4byte _08040866 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A0 - .4byte _0804086C - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _08040872 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _080408A8 - .4byte _0804087C - .4byte _080408A8 - .4byte _080408A8 - .4byte _08040860 - .4byte _08040866 - .4byte _08040866 -_08040860: - movs r0, 0xE9 - lsls r0, 1 - b _080408B2 -_08040866: - movs r0, 0xE5 - lsls r0, 1 - b _080408B2 -_0804086C: - movs r0, 0xE6 - lsls r0, 1 - b _080408B2 -_08040872: - ldr r0, _08040878 @ =0x000001cd - b _080408B2 - .align 2, 0 -_08040878: .4byte 0x000001cd -_0804087C: - ldrh r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _08040898 @ =gTrainers + 0x4 - adds r0, r1 - ldr r1, _0804089C @ =gUnknown_08400E42 - bl StringCompare - cmp r0, 0 - beq _080408A8 - movs r0, 0xE8 - lsls r0, 1 - b _080408B2 - .align 2, 0 -_08040898: .4byte gTrainers + 0x4 -_0804089C: .4byte gUnknown_08400E42 -_080408A0: - ldr r0, _080408A4 @ =0x000001d1 - b _080408B2 - .align 2, 0 -_080408A4: .4byte 0x000001d1 -_080408A8: - ldr r0, _080408AC @ =0x000001cb - b _080408B2 - .align 2, 0 -_080408AC: .4byte 0x000001cb -_080408B0: - ldr r0, _080408B8 @ =0x000001c9 -_080408B2: - pop {r1} - bx r1 - .align 2, 0 -_080408B8: .4byte 0x000001c9 - thumb_func_end sub_8040728 - - thumb_func_start sub_80408BC -sub_80408BC: @ 80408BC - push {lr} - bl ResetMapMusic - bl m4aMPlayAllStop - bl sub_8040728 - lsls r0, 16 - lsrs r0, 16 - bl PlayBGM - pop {r0} - bx r0 - thumb_func_end sub_80408BC - - thumb_func_start current_map_music_set__default_for_battle -current_map_music_set__default_for_battle: @ 80408D8 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - bl ResetMapMusic - bl m4aMPlayAllStop - cmp r4, 0 - beq _080408F2 - adds r0, r4, 0 - bl PlayNewMapMusic - b _080408FE -_080408F2: - bl sub_8040728 - lsls r0, 16 - lsrs r0, 16 - bl PlayNewMapMusic -_080408FE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end current_map_music_set__default_for_battle - - thumb_func_start pokemon_get_pal -pokemon_get_pal: @ 8040904 - push {r4-r6,lr} - adds r5, r0, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - adds r6, r0, 0 - adds r0, r5, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r2, r0, 0 - adds r0, r4, 0 - adds r1, r6, 0 - bl species_and_otid_get_pal - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end pokemon_get_pal - - thumb_func_start species_and_otid_get_pal -species_and_otid_get_pal: @ 804093C - push {r4,r5,lr} - adds r3, r2, 0 - lsls r0, 16 - lsrs r4, r0, 16 - adds r5, r4, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08040958 - ldr r0, _08040954 @ =gMonPaletteTable - ldr r0, [r0] - b _08040984 - .align 2, 0 -_08040954: .4byte gMonPaletteTable -_08040958: - lsrs r0, r1, 16 - ldr r2, _08040974 @ =0x0000ffff - ands r1, r2 - eors r0, r1 - lsrs r1, r3, 16 - eors r0, r1 - ands r3, r2 - eors r0, r3 - cmp r0, 0x7 - bls _0804097C - ldr r0, _08040978 @ =gMonPaletteTable - lsls r1, r4, 3 - b _08040980 - .align 2, 0 -_08040974: .4byte 0x0000ffff -_08040978: .4byte gMonPaletteTable -_0804097C: - ldr r0, _0804098C @ =gMonShinyPaletteTable - lsls r1, r5, 3 -_08040980: - adds r1, r0 - ldr r0, [r1] -_08040984: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0804098C: .4byte gMonShinyPaletteTable - thumb_func_end species_and_otid_get_pal - - thumb_func_start sub_8040990 -sub_8040990: @ 8040990 - push {r4-r6,lr} - adds r5, r0, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - adds r6, r0, 0 - adds r0, r5, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r2, r0, 0 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_80409C8 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8040990 - - thumb_func_start sub_80409C8 -sub_80409C8: @ 80409C8 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsrs r0, r1, 16 - ldr r3, _080409E8 @ =0x0000ffff - ands r1, r3 - eors r0, r1 - lsrs r1, r2, 16 - eors r0, r1 - ands r2, r3 - eors r0, r2 - cmp r0, 0x7 - bls _080409F0 - lsls r0, r4, 3 - ldr r1, _080409EC @ =gMonPaletteTable - b _080409F4 - .align 2, 0 -_080409E8: .4byte 0x0000ffff -_080409EC: .4byte gMonPaletteTable -_080409F0: - lsls r0, r4, 3 - ldr r1, _080409FC @ =gMonShinyPaletteTable -_080409F4: - adds r0, r1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080409FC: .4byte gMonShinyPaletteTable - thumb_func_end sub_80409C8 - - thumb_func_start sub_8040A00 -sub_8040A00: @ 8040A00 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - ldr r2, _08040A24 @ =gUnknown_0820831A - ldrh r0, [r2] - ldr r1, _08040A28 @ =0x0000ffff - cmp r0, r1 - beq _08040A32 - adds r4, r1, 0 - adds r1, r2, 0 -_08040A14: - ldrh r0, [r2] - adds r1, 0x2 - adds r2, 0x2 - cmp r0, r3 - bne _08040A2C - movs r0, 0x1 - b _08040A34 - .align 2, 0 -_08040A24: .4byte gUnknown_0820831A -_08040A28: .4byte 0x0000ffff -_08040A2C: - ldrh r0, [r1] - cmp r0, r4 - bne _08040A14 -_08040A32: - movs r0, 0 -_08040A34: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8040A00 - - thumb_func_start sub_8040A3C -sub_8040A3C: @ 8040A3C - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08040A50 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x19] - lsrs r0, 7 - bx lr - .align 2, 0 -_08040A50: .4byte gBaseStats - thumb_func_end sub_8040A3C - - thumb_func_start sub_8040A54 -sub_8040A54: @ 8040A54 - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl GetNature - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08040A78 @ =gUnknown_083F7E28 - lsls r1, r0, 2 - adds r1, r0 - adds r1, r4 - adds r1, r2 - movs r0, 0 - ldrsb r0, [r1, r0] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040A78: .4byte gUnknown_083F7E28 - thumb_func_end sub_8040A54 - - thumb_func_start sub_8040A7C -sub_8040A7C: @ 8040A7C - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl GetNatureFromPersonality - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08040AA0 @ =gUnknown_083F7E28 - lsls r1, r0, 2 - adds r1, r0 - adds r1, r4 - adds r1, r2 - movs r0, 0 - ldrsb r0, [r1, r0] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040AA0: .4byte gUnknown_083F7E28 - thumb_func_end sub_8040A7C - - thumb_func_start sub_8040AA4 -sub_8040AA4: @ 8040AA4 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - movs r1, 0x7 - mov r2, sp - bl GetMonData - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - mov r1, sp - bl sub_8040AD0 - lsls r0, 24 - lsrs r0, 24 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8040AA4 - - thumb_func_start sub_8040AD0 -sub_8040AD0: @ 8040AD0 - push {r4,r5,lr} - adds r5, r1, 0 - ldr r3, _08040B10 @ =gSaveBlock2 - ldrb r2, [r3, 0xA] - ldrb r1, [r3, 0xB] - lsls r1, 8 - orrs r2, r1 - ldrb r1, [r3, 0xC] - lsls r1, 16 - orrs r2, r1 - ldrb r1, [r3, 0xD] - lsls r1, 24 - orrs r2, r1 - cmp r0, r2 - bne _08040B14 - movs r4, 0 - ldrb r0, [r5] - cmp r0, 0xFF - beq _08040B0C - adds r2, r5, 0 -_08040AF8: - adds r1, r4, r3 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _08040B14 - adds r2, 0x1 - adds r4, 0x1 - ldrb r0, [r2] - cmp r0, 0xFF - bne _08040AF8 -_08040B0C: - movs r0, 0 - b _08040B16 - .align 2, 0 -_08040B10: .4byte gSaveBlock2 -_08040B14: - movs r0, 0x1 -_08040B16: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8040AD0 - - thumb_func_start sub_8040B1C -sub_8040B1C: @ 8040B1C - push {lr} - bl pokemon_restore_pp - pop {r0} - bx r0 - thumb_func_end sub_8040B1C - - thumb_func_start pokemon_restore_pp -pokemon_restore_pp: @ 8040B28 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0 -_08040B30: - adds r4, r6, 0 - adds r4, 0xD - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl GetBoxMonData - cmp r0, 0 - beq _08040B7C - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl GetBoxMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x15 - movs r2, 0 - bl GetBoxMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, r6, 24 - lsrs r2, 24 - adds r0, r4, 0 - bl CalculatePPWithBonus - mov r1, sp - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x11 - adds r0, r5, 0 - mov r2, sp - bl SetBoxMonData -_08040B7C: - adds r6, 0x1 - cmp r6, 0x3 - ble _08040B30 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end pokemon_restore_pp - - thumb_func_start sub_8040B8C -sub_8040B8C: @ 8040B8C - push {r4,r5,lr} - ldr r1, _08040BCC @ =byte_2024C06 - ldr r2, _08040BD0 @ =0x02000000 - ldr r3, _08040BD4 @ =0x000160c0 - adds r0, r2, r3 - ldrb r0, [r0] - strb r0, [r1] - ldr r5, _08040BD8 @ =gUnknown_030041C0 - movs r0, 0xFD - strb r0, [r5] - movs r0, 0x4 - strb r0, [r5, 0x1] - ldr r0, _08040BDC @ =0x00016054 - adds r4, r2, r0 - ldrb r0, [r4] - strb r0, [r5, 0x2] - movs r0, 0xFF - strb r0, [r5, 0x4] - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08040BE4 - ldr r1, _08040BE0 @ =gUnknown_02024A6A - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - bl pokemon_order_func - b _08040BEE - .align 2, 0 -_08040BCC: .4byte byte_2024C06 -_08040BD0: .4byte 0x02000000 -_08040BD4: .4byte 0x000160c0 -_08040BD8: .4byte gUnknown_030041C0 -_08040BDC: .4byte 0x00016054 -_08040BE0: .4byte gUnknown_02024A6A -_08040BE4: - ldr r0, _08040C24 @ =gUnknown_02024A6A - ldrb r1, [r4] - lsls r1, 1 - adds r1, r0 - ldrh r0, [r1] -_08040BEE: - strb r0, [r5, 0x3] - ldr r4, _08040C28 @ =gUnknown_03004290 - movs r0, 0xFD - strb r0, [r4] - movs r0, 0x4 - strb r0, [r4, 0x1] - ldr r1, _08040C2C @ =gUnknown_02024E6C - ldrb r0, [r1] - strb r0, [r4, 0x2] - ldr r2, _08040C24 @ =gUnknown_02024A6A - ldrb r0, [r1] - lsls r0, 1 - adds r0, r2 - ldrb r0, [r0] - bl pokemon_order_func - strb r0, [r4, 0x3] - movs r0, 0xFF - strb r0, [r4, 0x4] - ldr r0, _08040C30 @ =gUnknown_083FFCCA - ldr r1, _08040C34 @ =gStringVar4 - bl sub_8120FFC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08040C24: .4byte gUnknown_02024A6A -_08040C28: .4byte gUnknown_03004290 -_08040C2C: .4byte gUnknown_02024E6C -_08040C30: .4byte gUnknown_083FFCCA -_08040C34: .4byte gStringVar4 - thumb_func_end sub_8040B8C - - thumb_func_start sub_8040C38 -sub_8040C38: @ 8040C38 - push {r4,r5,lr} - ldr r0, _08040C90 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _08040C94 @ =0x00002008 - ands r0, r1 - cmp r0, 0 - bne _08040CAC - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r4, _08040C98 @ =gEnemyParty - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08040C9C @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r3, r1, 2 - adds r1, r3, r2 - ldrh r0, [r1, 0xC] - ldrh r1, [r1, 0xE] - cmp r0, r1 - beq _08040C82 - cmp r5, 0x2C - bls _08040CAC - cmp r5, 0x5E - bhi _08040CA0 -_08040C82: - adds r2, 0xC - adds r2, r3, r2 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - b _08040CAC - .align 2, 0 -_08040C90: .4byte gBattleTypeFlags -_08040C94: .4byte 0x00002008 -_08040C98: .4byte gEnemyParty -_08040C9C: .4byte gBaseStats -_08040CA0: - adds r2, 0xE - adds r2, r3, r2 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData -_08040CAC: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8040C38 - - thumb_func_start sub_8040CB4 -sub_8040CB4: @ 8040CB4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - adds r0, r5, 0 - bl sub_8040CE0 - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8040CB4 - - thumb_func_start sub_8040CE0 -sub_8040CE0: @ 8040CE0 - push {r4,lr} - movs r4, 0 - lsrs r2, r0, 16 - ldr r3, _08040D04 @ =0x0000ffff - ands r0, r3 - eors r2, r0 - lsrs r0, r1, 16 - eors r2, r0 - ands r1, r3 - eors r2, r1 - cmp r2, 0x7 - bhi _08040CFA - movs r4, 0x1 -_08040CFA: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040D04: .4byte 0x0000ffff - thumb_func_end sub_8040CE0 - - thumb_func_start sub_8040D08 -sub_8040D08: @ 8040D08 - push {r4,lr} - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08040D38 @ =gLinkPlayers - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r1, [r1, 0x18] - movs r0, 0x2 - eors r0, r1 - bl sub_803FC34 - adds r1, r0, 0 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r4, 0x8 - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040D38: .4byte gLinkPlayers - thumb_func_end sub_8040D08 - - thumb_func_start sub_8040D3C -sub_8040D3C: @ 8040D3C - push {r4,lr} - adds r4, r1, 0 - lsls r0, 16 - lsrs r1, r0, 16 - adds r0, r1, 0 - lsls r2, 24 - lsrs r2, 24 - movs r3, 0 - cmp r1, 0x20 - beq _08040D54 - cmp r1, 0x1D - bne _08040D7E -_08040D54: - cmp r2, 0x2 - bne _08040D68 - movs r0, 0xB - muls r1, r0 - ldr r0, _08040D64 @ =gSpeciesNames - adds r1, r0 - b _08040D70 - .align 2, 0 -_08040D64: .4byte gSpeciesNames -_08040D68: - ldr r1, _08040D88 @ =gUnknown_08208337 - cmp r0, 0x20 - bne _08040D70 - subs r1, 0xB -_08040D70: - adds r0, r4, 0 - bl StringCompareWithoutExtCtrlCodes - movs r3, 0 - cmp r0, 0 - bne _08040D7E - movs r3, 0x1 -_08040D7E: - adds r0, r3, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040D88: .4byte gUnknown_08208337 - thumb_func_end sub_8040D3C - - thumb_func_start sub_8040D8C -sub_8040D8C: @ 8040D8C - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0x2 - ldrb r0, [r1] - cmp r0, 0xFC - bne _08040DA2 - ldrb r0, [r1, 0x1] - cmp r0, 0x15 - bne _08040DA2 - movs r2, 0x1 -_08040DA2: - adds r0, r3, 0 - bl sub_8040D3C - pop {r1} - bx r1 - thumb_func_end sub_8040D8C - - thumb_func_start unref_sub_8040DAC -unref_sub_8040DAC: @ 8040DAC - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - movs r1, 0x3 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - adds r0, r5, 0 - mov r1, sp - adds r2, r4, 0 - bl sub_8040D3C - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end unref_sub_8040DAC - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index bcf005f2f..89f0e2865 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -11660,7 +11660,7 @@ _0809B508: ldr r0, _0809B540 @ =0x000025b4 adds r4, r0 adds r0, r4, 0 - bl pokemon_restore_pp + bl BoxMonRestorePP ldr r3, _0809B544 @ =gPokemonStorage lsls r0, r5, 2 adds r0, r5 diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 25144558d..20231a0bb 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -4311,7 +4311,7 @@ GetStringCenterAlignXOffset: @ 809FA74 thumb_func_start sub_809FA94 sub_809FA94: @ 809FA94 push {lr} - bl sub_8040CB4 + bl IsShiny lsls r0, 24 cmp r0, 0 beq _0809FAB4 diff --git a/asm/roamer.s b/asm/roamer.s deleted file mode 100644 index 404405a3f..000000000 --- a/asm/roamer.s +++ /dev/null @@ -1,451 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_81341F8 -sub_81341F8: @ 81341F8 - push {lr} - ldr r0, _08134208 @ =gSaveBlock1 + 0x3144 - movs r1, 0 - movs r2, 0x1C - bl memset - pop {r0} - bx r0 - .align 2, 0 -_08134208: .4byte gSaveBlock1 + 0x3144 - thumb_func_end sub_81341F8 - - thumb_func_start sub_813420C -sub_813420C: @ 813420C - push {r4-r6,lr} - movs r2, 0 - ldr r6, _08134238 @ =gRoamerLocation - ldr r4, _0813423C @ =gUnknown_020392FC - movs r3, 0 - adds r5, r4, 0x1 -_08134218: - lsls r1, r2, 1 - adds r0, r1, r4 - strb r3, [r0] - adds r1, r5 - strb r3, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x2 - bls _08134218 - movs r0, 0 - strb r0, [r6] - strb r0, [r6, 0x1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08134238: .4byte gRoamerLocation -_0813423C: .4byte gUnknown_020392FC - thumb_func_end sub_813420C - - thumb_func_start sub_8134240 -sub_8134240: @ 8134240 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x10 - ldr r5, _081342FC @ =gEnemyParty - .ifdef SAPPHIRE - ldr r6, _sub_8134240_Latias @ =407 - .else - movs r6, 0xCC - lsls r6, 1 - .endif - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x28 - movs r3, 0x20 - bl CreateMon - ldr r4, _08134300 @ =gSaveBlock1 + 0x3144 - movs r0, 0 - mov r8, r0 - strh r6, [r4, 0x8] - movs r0, 0x28 - strb r0, [r4, 0xC] - mov r0, r8 - strb r0, [r4, 0xD] - movs r0, 0x1 - strb r0, [r4, 0x13] - adds r0, r5, 0 - movs r1, 0x42 - bl GetMonData - str r0, [r4] - adds r0, r5, 0 - movs r1, 0 - bl GetMonData - str r0, [r4, 0x4] - adds r0, r5, 0 - movs r1, 0x3A - bl GetMonData - strh r0, [r4, 0xA] - adds r0, r5, 0 - movs r1, 0x16 - bl GetMonData - strb r0, [r4, 0xE] - adds r0, r5, 0 - movs r1, 0x17 - bl GetMonData - strb r0, [r4, 0xF] - adds r0, r5, 0 - movs r1, 0x18 - bl GetMonData - strb r0, [r4, 0x10] - adds r0, r5, 0 - movs r1, 0x21 - bl GetMonData - strb r0, [r4, 0x11] - adds r0, r5, 0 - movs r1, 0x2F - bl GetMonData - strb r0, [r4, 0x12] - ldr r4, _08134304 @ =gRoamerLocation - mov r0, r8 - strb r0, [r4] - bl Random - ldr r5, _08134308 @ =gRoamerLocations - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x14 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 1 - adds r1, r5 - ldrb r0, [r1] - strb r0, [r4, 0x1] - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081342FC: .4byte gEnemyParty - .ifdef SAPPHIRE -_sub_8134240_Latias: .4byte 407 - .endif -_08134300: .4byte gSaveBlock1 + 0x3144 -_08134304: .4byte gRoamerLocation -_08134308: .4byte gRoamerLocations - thumb_func_end sub_8134240 - - thumb_func_start sub_813430C -sub_813430C: @ 813430C - push {lr} - bl sub_81341F8 - bl sub_813420C - bl sub_8134240 - pop {r0} - bx r0 - thumb_func_end sub_813430C - - thumb_func_start mapnumbers_history_shift_sav1_0_2_4_out -mapnumbers_history_shift_sav1_0_2_4_out: @ 8134320 - ldr r0, _08134340 @ =gUnknown_020392FC - ldrb r1, [r0, 0x2] - strb r1, [r0, 0x4] - ldrb r1, [r0, 0x3] - strb r1, [r0, 0x5] - ldrb r1, [r0] - strb r1, [r0, 0x2] - ldrb r1, [r0, 0x1] - strb r1, [r0, 0x3] - ldr r2, _08134344 @ =gSaveBlock1 - ldrb r1, [r2, 0x4] - strb r1, [r0] - ldrb r1, [r2, 0x5] - strb r1, [r0, 0x1] - bx lr - .align 2, 0 -_08134340: .4byte gUnknown_020392FC -_08134344: .4byte gSaveBlock1 - thumb_func_end mapnumbers_history_shift_sav1_0_2_4_out - - thumb_func_start sub_8134348 -sub_8134348: @ 8134348 - push {r4,r5,lr} - movs r1, 0 - ldr r0, _08134388 @ =gSaveBlock1 + 0x3144 - ldrb r0, [r0, 0x13] - cmp r0, 0 - beq _08134380 - ldr r0, _0813438C @ =gRoamerLocation - strb r1, [r0] - ldr r5, _08134390 @ =gRoamerLocations - adds r4, r0, 0 -_0813435C: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x14 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 1 - adds r1, r5 - ldrb r1, [r1] - ldrb r0, [r4, 0x1] - cmp r0, r1 - beq _0813435C - strb r1, [r4, 0x1] -_08134380: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08134388: .4byte gSaveBlock1 + 0x3144 -_0813438C: .4byte gRoamerLocation -_08134390: .4byte gRoamerLocations - thumb_func_end sub_8134348 - - thumb_func_start sub_8134394 -sub_8134394: @ 8134394 - push {r4-r7,lr} - movs r4, 0 - bl Random - lsls r0, 16 - movs r1, 0xF0 - lsls r1, 12 - ands r1, r0 - cmp r1, 0 - bne _081343AE - bl sub_8134348 - b _08134416 -_081343AE: - ldr r0, _081343FC @ =gSaveBlock1 + 0x3144 - ldrb r0, [r0, 0x13] - cmp r0, 0 - beq _08134416 - ldr r7, _08134400 @ =gRoamerLocation - ldr r3, _08134404 @ =gRoamerLocations -_081343BA: - lsls r0, r4, 1 - adds r0, r4 - lsls r2, r0, 1 - adds r1, r2, r3 - ldrb r0, [r7, 0x1] - ldrb r1, [r1] - cmp r0, r1 - bne _0813440C - ldr r6, _08134404 @ =gRoamerLocations - adds r5, r2, 0x1 - ldr r4, _08134408 @ =gUnknown_020392FC -_081343D0: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - adds r0, r5 - adds r0, r6 - ldrb r1, [r0] - ldrb r0, [r4, 0x4] - cmp r0, 0 - bne _081343F4 - ldrb r0, [r4, 0x5] - cmp r0, r1 - beq _081343D0 -_081343F4: - cmp r1, 0xFF - beq _081343D0 - strb r1, [r7, 0x1] - b _08134416 - .align 2, 0 -_081343FC: .4byte gSaveBlock1 + 0x3144 -_08134400: .4byte gRoamerLocation -_08134404: .4byte gRoamerLocations -_08134408: .4byte gUnknown_020392FC -_0813440C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x13 - bls _081343BA -_08134416: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8134394 - - thumb_func_start sub_813441C -sub_813441C: @ 813441C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _08134440 @ =gSaveBlock1 + 0x3144 - ldrb r0, [r0, 0x13] - cmp r0, 0 - beq _08134448 - ldr r0, _08134444 @ =gRoamerLocation - ldrb r3, [r0] - cmp r2, r3 - bne _08134448 - ldrb r0, [r0, 0x1] - cmp r1, r0 - bne _08134448 - movs r0, 0x1 - b _0813444A - .align 2, 0 -_08134440: .4byte gSaveBlock1 + 0x3144 -_08134444: .4byte gRoamerLocation -_08134448: - movs r0, 0 -_0813444A: - pop {r1} - bx r1 - thumb_func_end sub_813441C - - thumb_func_start sub_8134450 -sub_8134450: @ 8134450 - push {r4,r5,lr} - sub sp, 0x4 - ldr r4, _081344C4 @ =gEnemyParty - ldr r5, _081344C8 @ =gSaveBlock1 + 0x3144 - ldrh r1, [r5, 0x8] - ldrb r2, [r5, 0xC] - ldr r3, [r5] - ldr r0, [r5, 0x4] - str r0, [sp] - adds r0, r4, 0 - bl CreateMonWithIVsPersonality - adds r2, r5, 0 - adds r2, 0xD - adds r0, r4, 0 - movs r1, 0x37 - bl SetMonData - adds r2, r5, 0 - adds r2, 0xA - adds r0, r4, 0 - movs r1, 0x39 - bl SetMonData - adds r2, r5, 0 - adds r2, 0xE - adds r0, r4, 0 - movs r1, 0x16 - bl SetMonData - adds r2, r5, 0 - adds r2, 0xF - adds r0, r4, 0 - movs r1, 0x17 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x10 - adds r0, r4, 0 - movs r1, 0x18 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x11 - adds r0, r4, 0 - movs r1, 0x21 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x12 - adds r0, r4, 0 - movs r1, 0x2F - bl SetMonData - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081344C4: .4byte gEnemyParty -_081344C8: .4byte gSaveBlock1 + 0x3144 - thumb_func_end sub_8134450 - - thumb_func_start sub_81344CC -sub_81344CC: @ 81344CC - push {lr} - ldr r1, _081344F8 @ =gSaveBlock1 - ldrb r0, [r1, 0x4] - ldrb r1, [r1, 0x5] - bl sub_813441C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081344FC - bl Random - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - cmp r1, 0 - bne _081344FC - bl sub_8134450 - movs r0, 0x1 - b _081344FE - .align 2, 0 -_081344F8: .4byte gSaveBlock1 -_081344FC: - movs r0, 0 -_081344FE: - pop {r1} - bx r1 - thumb_func_end sub_81344CC - - thumb_func_start sub_8134504 -sub_8134504: @ 8134504 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x39 - bl GetMonData - ldr r4, _08134528 @ =gSaveBlock1 + 0x3144 - strh r0, [r4, 0xA] - adds r0, r5, 0 - movs r1, 0x37 - bl GetMonData - strb r0, [r4, 0xD] - bl sub_8134348 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08134528: .4byte gSaveBlock1 + 0x3144 - thumb_func_end sub_8134504 - - thumb_func_start sub_813452C -sub_813452C: @ 813452C - ldr r1, _08134534 @ =gSaveBlock1 + 0x3144 - movs r0, 0 - strb r0, [r1, 0x13] - bx lr - .align 2, 0 -_08134534: .4byte gSaveBlock1 + 0x3144 - thumb_func_end sub_813452C - - thumb_func_start GetRoamerLocation -GetRoamerLocation: @ 8134538 - ldr r3, _08134544 @ =gRoamerLocation - ldrb r2, [r3] - strb r2, [r0] - ldrb r0, [r3, 0x1] - strb r0, [r1] - bx lr - .align 2, 0 -_08134544: .4byte gRoamerLocation - thumb_func_end GetRoamerLocation - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/rom5.s b/asm/rom5.s index 3e0ebe208..93f73dca8 100644 --- a/asm/rom5.s +++ b/asm/rom5.s @@ -636,7 +636,7 @@ _0807B1FE: adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _0807B2D4 @ =gUnknown_02024E84 + ldr r1, _0807B2D4 @ =gBattleMonForms adds r1, r7, r1 ldrb r1, [r1] bl StartSpriteAnim @@ -648,7 +648,7 @@ _0807B2C4: .4byte gUnknown_02024E8C _0807B2C8: .4byte gUnknown_02024BE0 _0807B2CC: .4byte gSprites _0807B2D0: .4byte SpriteCallbackDummy -_0807B2D4: .4byte gUnknown_02024E84 +_0807B2D4: .4byte gBattleMonForms _0807B2D8: ldr r2, _0807B328 @ =gBattleTypeFlags ldrh r1, [r2] @@ -860,7 +860,7 @@ _0807B3D0: adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _0807B500 @ =gUnknown_02024E84 + ldr r1, _0807B500 @ =gBattleMonForms adds r1, r7, r1 ldrb r1, [r1] bl StartSpriteAnim @@ -903,7 +903,7 @@ _0807B4F0: .4byte gUnknown_02024E8C _0807B4F4: .4byte gUnknown_02024BE0 _0807B4F8: .4byte gSprites _0807B4FC: .4byte SpriteCallbackDummy -_0807B500: .4byte gUnknown_02024E84 +_0807B500: .4byte gBattleMonForms _0807B504: .4byte 0x02017800 thumb_func_end sub_807B184 diff --git a/common_syms/link.txt b/common_syms/link.txt index bca63a8d2..faafda4d0 100644 --- a/common_syms/link.txt +++ b/common_syms/link.txt @@ -5,6 +5,10 @@ gLinkErrorOccurred 4 gLinkDebugValue2 4 +#begin GERMAN +deUnkValue1 +deUnkValue2 +#end gLinkPlayerPending gLinkPlayers gBlockReceived diff --git a/data/pokemon.s b/data/pokemon.s index 758e6c77e..2229512a4 100644 --- a/data/pokemon.s +++ b/data/pokemon.s @@ -115,20 +115,17 @@ gUnknown_082082FE:: @ 82082FE .byte -5, -5, -10 .align 1 -gUnknown_0820831A:: @ 820831A - .2byte 0xF - .2byte 0x13 - .2byte 0x39 - .2byte 0x46 - .2byte 0x94 - .2byte 0xF9 - .2byte 0x7F - .2byte 0x123 +gHMMoves:: @ 820831A + .2byte MOVE_CUT + .2byte MOVE_FLY + .2byte MOVE_SURF + .2byte MOVE_STRENGTH + .2byte MOVE_FLASH + .2byte MOVE_ROCK_SMASH + .2byte MOVE_WATERFALL + .2byte MOVE_DIVE .2byte 0xFFFF -@ "Nidoran♂" Japanese name +gJapaneseNidoranNames:: @ 820832C .string "ニドラン♂$", 11 - -@ "Nidoran♀" Japanese name -gUnknown_08208337:: @ 8208337 - .string "ニドラン♀$", 13 + .string "ニドラン♀$", 11 diff --git a/data/roamer.s b/data/roamer.s deleted file mode 100644 index e7c03c617..000000000 --- a/data/roamer.s +++ /dev/null @@ -1,28 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gRoamerLocations:: @ 8402E80 - .byte 0x19,0x1A,0x20,0x21,0x31,0xFF - .byte 0x1A,0x19,0x20,0x21,0xFF,0xFF - .byte 0x20,0x1A,0x19,0x21,0xFF,0xFF - .byte 0x21,0x20,0x19,0x1A,0x22,0x26 - .byte 0x22,0x21,0x23,0xFF,0xFF,0xFF - .byte 0x23,0x22,0x24,0xFF,0xFF,0xFF - .byte 0x24,0x23,0x25,0x26,0xFF,0xFF - .byte 0x25,0x24,0x26,0xFF,0xFF,0xFF - .byte 0x26,0x25,0x21,0xFF,0xFF,0xFF - .byte 0x27,0x24,0x28,0x29,0xFF,0xFF - .byte 0x28,0x27,0x2A,0xFF,0xFF,0xFF - .byte 0x29,0x27,0x2A,0xFF,0xFF,0xFF - .byte 0x2A,0x28,0x29,0x2B,0xFF,0xFF - .byte 0x2B,0x2A,0x2C,0xFF,0xFF,0xFF - .byte 0x2C,0x2B,0x2D,0xFF,0xFF,0xFF - .byte 0x2D,0x2C,0x2E,0xFF,0xFF,0xFF - .byte 0x2E,0x2D,0x2F,0xFF,0xFF,0xFF - .byte 0x2F,0x2E,0x30,0xFF,0xFF,0xFF - .byte 0x30,0x2F,0x31,0xFF,0xFF,0xFF - .byte 0x31,0x30,0x19,0xFF,0xFF,0xFF - .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF diff --git a/data/specials.inc b/data/specials.inc index 76763781d..941fd12a8 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -297,7 +297,7 @@ gSpecials:: .4byte GetLeadMonEVCount .4byte sub_8064EAC .4byte sub_8064ED4 - .4byte sub_813430C + .4byte InitRoamer .4byte sub_810F5BC .4byte IsGrassTypeInParty .4byte sub_8081334 diff --git a/data/text/battle_strings.inc b/data/text/battle_strings.inc index 12ccf0fad..d0c8f74d5 100644 --- a/data/text/battle_strings.inc +++ b/data/text/battle_strings.inc @@ -480,7 +480,7 @@ BattleText_TookAttack2: .string "{DEFENDING_MON}’s {STRING 22}\ntook the attack!$" gUnknown_083FFCCA:: @ 83FFCCA -BattleText_PreventedSwitch: +BattleText_PreventedSwitch:: .string "{STRING 0}’s {STRING 20}\nprevents switching!\p$" BattleText_PreventedOther: .string "{DEFENDING_MON}’s {STRING 22}\nprevented {STRING 16}’s\l{STRING 0} from working!$" @@ -1043,15 +1043,15 @@ BattleText_SpDef: .string "SP. DEF$" gUnknown_08400DD6:: @ 8400DD6 -BattleText_SafariBalls: +BattleText_SafariBalls:: .string "{HIGHLIGHT RED}SAFARI BALLS$" gUnknown_08400DE6:: @ 8400DE6 -BattleText_SafariBallsLeft: +BattleText_SafariBallsLeft:: .string "{HIGHLIGHT RED}Left: $" gUnknown_08400DF0:: @ 8400DF0 -BattleText_HighlightRed: +BattleText_HighlightRed:: .string "{HIGHLIGHT RED}$" BattleText_Sleep:: @@ -1101,7 +1101,7 @@ gBadEggNickname:: @ 8400E3A .string "Bad EGG$" gUnknown_08400E42:: @ 8400E42 -BattleText_Wally: +BattleText_Wally:: .string "WALLY$" BattleText_Win:: @ 8400E48 diff --git a/include/asm.h b/include/asm.h index fe1b3139f..e72683e45 100644 --- a/include/asm.h +++ b/include/asm.h @@ -45,6 +45,15 @@ struct UnknownStruct_FPA u16 unk14; }; +struct CryRelatedStruct +{ + u16 unk0; + u8 unk2; + u8 paletteNo; + u8 xPos; + u8 yPos; +}; + #include "asm.inc.h" #endif //PROJECT_ASM_H diff --git a/include/asm.inc.h b/include/asm.inc.h index 416917fa6..eb3cec985 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -10,20 +10,23 @@ void sub_80157C4(u8 index); u8 sub_8015A98(u8, u8, u8); u8 sub_8018324(u8, u8, u8, u8, u16); +// asm/battle_5.o +void sub_802C098(); +void sub_802E3E4(u8, int); +void nullsub_8(u8); + // asm/battle_7.o void sub_8032AA8(u8 index, int i); // src/pokemon_3.o u16 SpeciesToNationalPokedexNum(u16); - -// asm/pokemon_3.o -void DrawSpindaSpots(u16, u32, void *, u8); +void DrawSpindaSpots(u16, u32, u8 *, u8); u8 sub_803FC58(u16); void AdjustFriendship(struct Pokemon *, u8); void sub_80408BC(); void current_map_music_set__default_for_battle(u16); -// asm/util.o +// src/util.o void StoreWordInTwoHalfwords(u16 *, u32); void LoadWordFromTwoHalfwords(u16 *, u32 *); @@ -157,7 +160,7 @@ void sub_806FA18(u8 taskId); // src/party_menu.o void sub_806E834(); -// asm/rom_8077ABC.o +// src/rom_8077ABC.o u8 battle_side_get_owner(u8); u8 battle_get_per_side_status(u8); u8 battle_get_side_with_given_state(u8); @@ -211,6 +214,9 @@ void sub_8089A70(void); void sub_808A004(); void sub_808AB90(void); +// asm/rom_8094928.o +u8 pokemon_order_func(u8); + // asm/pokemon_storage_system.o void sub_80961D8(void); @@ -321,9 +327,8 @@ void sub_80C8F34(u8); // asm/easy_chat.o void sub_80E6764(void); -void sub_80EB3FC(u8 *, u16); +u8* sub_80EB3FC(u8 *, u16); u8 ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16); -u16 sub_80EB72C(u16); // asm/pokenav.o void sub_80EBA5C(void); @@ -355,7 +360,7 @@ s16 sub_810CAE4(u8, struct Pokeblock *); // asm/fldeff_flash.o void sub_810CC80(void); -// asm/time_events.o +// src/time_events.o u8 IsMirageIslandPresent(void); // asm/field_specials.o @@ -370,11 +375,22 @@ void sub_810FA54(void); // asm/battle_records.o void InitLinkBattleRecords(void); +// asm/pokedex_cry_screen.o +u8 sub_8119E3C(struct CryRelatedStruct *, u8); +void sub_8119F88(u8 a); +void sub_811A050(u16 species); +u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8); +void DestroyCryMeterNeedleSprite(); + // asm/battle_transition.o void sub_811AABC(u8); void sub_811AAD8(u8); u8 sub_811AAE8(void); +// asm/battle_message.o +void get_battle_strings_(u8 *); +void sub_8120FFC(const u8 *, u8 *); + // src/mystery_event_script.o u32 sub_812613C(u8 *); void sub_8126160(u8); @@ -400,20 +416,15 @@ u8 IsThereStorageSpaceForDecoration(u8); u8 sub_8134074(u8); s8 sub_81340A8(u8); -// asm/roamer.o -void sub_81341F8(void); -void sub_813420C(void); -void mapnumbers_history_shift_sav1_0_2_4_out(void); -void sub_8134348(void); -void sub_8134394(); -u8 sub_81344CC(void); - // asm/battle_tower.o void sub_8134AC0(void *); // src/player_pc.o void NewGameInitPCItems(void); +// src/diploma.o +void sub_8145D88(void); + // asm/intro_credits_graphics.o void load_intro_part2_graphics(/*TODO: arg types*/); void sub_8148C78(/*TODO: arg types*/); diff --git a/include/battle.h b/include/battle.h index 4b9144721..8f7141803 100644 --- a/include/battle.h +++ b/include/battle.h @@ -51,8 +51,7 @@ struct Trainer { /*0x00*/ u8 partyFlags; /*0x01*/ u8 trainerClass; - /*0x02*/ u8 encounterMusic:7; - /*0x02*/ u8 gender:1; + /*0x02*/ u8 encounterMusic_gender; /*0x03*/ u8 trainerPic; /*0x04*/ u8 trainerName[12]; /*0x10*/ u16 items[4]; diff --git a/include/config.h b/include/config.h index 5ee062006..205f53f16 100644 --- a/include/config.h +++ b/include/config.h @@ -5,19 +5,27 @@ #define REVISION 0 #endif -#if REVISION == 2 +#if (ENGLISH && REVISION == 2) || (GERMAN && REVISION == 1) #define BUGFIX_BERRY #endif -#if REVISION >= 1 +#if (ENGLISH && REVISION >= 1) || GERMAN #define BUGFIX_GLYPHWIDTH #define BUGFIX_SAVEFAILEDSCREEN1 #endif -// #define BUGFIX_SAVEFAILEDSCREEN2 +#if GERMAN +#define BUGFIX_SAVEFAILEDSCREEN2 +#endif // European editions of Ruby/Sapphire and all editions of Emerald have this fix. -// #define BUGFIX_TRAINERAPPROACH +#if GERMAN +#define BUGFIX_TRAINERAPPROACH +#endif + +#if (ENGLISH && REVISION >= 1) || GERMAN +#define BUGFIX_EVO_NAME +#endif // Fixed in Emerald. // #define BUGFIX_SETMONIVS diff --git a/include/easy_chat.h b/include/easy_chat.h new file mode 100644 index 000000000..ee5ac4138 --- /dev/null +++ b/include/easy_chat.h @@ -0,0 +1,32 @@ +#ifndef GUARD_EASYCHAT_H +#define GUARD_EASYCHAT_H + +enum { + EC_GROUP_POKEMON, + EC_GROUP_TRAINER, + EC_GROUP_STATUS, + EC_GROUP_BATTLE, + EC_GROUP_GREETINGS, + EC_GROUP_PEOPLE, + EC_GROUP_VOICES, + EC_GROUP_SPEECH, + EC_GROUP_ENDINGS, + EC_GROUP_FEELINGS, + EC_GROUP_CONDITIONS, + EC_GROUP_ACTIONS, + EC_GROUP_LIFESTYLE, + EC_GROUP_HOBBIES, + EC_GROUP_TIME, + EC_GROUP_MISC, + EC_GROUP_ADJECTIVES, + EC_GROUP_EVENTS, + EC_GROUP_MOVE_1, + EC_GROUP_MOVE_2, + EC_GROUP_TRENDY_SAYING, + EC_GROUP_POKEMON_2, +}; + + +u16 sub_80EB72C(u16 group); + +#endif // GUARD_EASYCHAT_H diff --git a/include/field_message_box.h b/include/field_message_box.h index 50d96ccd1..c35aaf595 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -10,10 +10,10 @@ enum }; void InitFieldMessageBox(void); -bool8 ShowFieldMessage(u8 *message); -bool8 ShowFieldAutoScrollMessage(u8 *message); -bool8 unref_sub_8064BB8(u8 *message); -bool8 unref_sub_8064BD0(u8 *message); +bool8 ShowFieldMessage(const u8 *message); +bool8 ShowFieldAutoScrollMessage(const u8 *message); +bool8 unref_sub_8064BB8(const u8 *message); +bool8 unref_sub_8064BD0(const u8 *message); void HideFieldMessageBox(void); u8 GetFieldMessageBoxMode(void); bool8 IsFieldMessageBoxHidden(void); diff --git a/include/global.h b/include/global.h index 62e557ef4..4cbbef5cc 100644 --- a/include/global.h +++ b/include/global.h @@ -28,7 +28,11 @@ enum LanguageId { LANGUAGE_GERMAN = 5, }; +#if defined(ENGLISH) #define GAME_LANGUAGE (LANGUAGE_ENGLISH) +#elif defined(GERMAN) +#define GAME_LANGUAGE (LANGUAGE_GERMAN) +#endif enum { @@ -152,7 +156,8 @@ struct Roamer /*0x10*/ u8 cute; /*0x11*/ u8 smart; /*0x12*/ u8 tough; - /*0x13*/ u8 active; + /*0x13*/ bool8 active; + /*0x14*/ u8 filler[0x8]; }; struct RamScriptData @@ -291,7 +296,7 @@ struct UnkMauvilleOldManStruct2 u8 unk1; u8 unk2; u16 mauvilleOldMan_ecArray[10]; - u16 mauvilleOldMan_ecArray2[6]; + u8 mauvilleOldMan_ecArray2[12]; u8 fillerF[0x2]; /* size = 0x2C */ }; @@ -382,10 +387,13 @@ struct SaveBlock1 /* 0x02025734 */ /*0x2B0D*/ u8 outbreakPokemonProbability; /*0x2B0E*/ u16 outbreakUnk5; /*0x2B10*/ u8 filler_2B0E[0xC]; - /*0x2B1C*/ u16 unk2B1C[4]; - /*0x2B24*/ u8 filler_2B24[0x28]; + /*0x2B1C*/ u16 unk2B1C[6]; + /*0x2B28*/ u16 unk2B28[6]; + /*0x2B34*/ u16 unk2B34[6]; + /*0x2B40*/ u16 unk2B40[6]; /*0x2B4C*/ struct MailStruct mail[16]; - /*0x2D8C*/ u8 filler_2D8C[0x8]; + /*0x2D8C*/ u8 unk2D8C[4]; + /*0x2D90*/ u8 filler_2D90[0x4]; /*0x2D94*/ OldMan oldMan; /*0x2DC0*/ u8 unk_2DC0[0x14]; /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff @@ -395,11 +403,12 @@ struct SaveBlock1 /* 0x02025734 */ /*0x303C*/ u8 filler_303C[0x38]; /*0x3074*/ u8 filler_3074[0x42]; /*0x30B6*/ u8 filler_30B6; - /*0x30B7*/ u8 filler_30B7[0x59]; + /*0x30B7*/ u8 filler_30B7[1]; + /*0x30B8*/ u8 linkBattleRecords[5][16]; + /*0x3108*/ u8 filler_3108[8]; /*0x3110*/ u8 giftRibbons[7]; /*0x3117*/ u8 filler_311B[0x2D]; /*0x3144*/ struct Roamer roamer; - /*0x3158*/ u8 filler_3158[0x8]; /*0x3160*/ struct EnigmaBerry enigmaBerry; /*0x3690*/ struct RamScript ramScript; /*0x3A7C*/ u8 filler_3A7C[0x10]; @@ -488,7 +497,7 @@ struct UnkStruct_8054FF8 // wasnt defined so I had to define it struct HallOfFame { - u8 filler[0x1F00]; + u8 filler[0x1F00]; }; extern struct HallOfFame gHallOfFame; diff --git a/include/m4a.h b/include/m4a.h index 949403885..b6c8f9072 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -9,6 +9,7 @@ void m4aSoundInit(void); void m4aSoundMain(void); void m4aSongNumStart(u16); void m4aSongNumStop(u16 n); +void m4aMPlayAllStop(void); void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo); void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed); void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed); diff --git a/include/pokemon.h b/include/pokemon.h index 39bde80cb..ae02de8ca 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -65,7 +65,7 @@ #define MON_DATA_SPD 61 #define MON_DATA_SPATK 62 #define MON_DATA_SPDEF 63 -#define MON_DATA_64 64 +#define MON_DATA_MAIL 64 #define MON_DATA_SPECIES2 65 #define MON_DATA_IVS 66 #define MON_DATA_CHAMPION_RIBBON 67 @@ -115,6 +115,9 @@ #define TYPE_DARK 0x11 #define PARTY_SIZE 6 +#define MAX_TOTAL_EVS 510 +#define NUM_STATS 6 +#define UNOWN_FORM_COUNT 28 enum { NATURE_HARDY, @@ -250,7 +253,7 @@ struct Pokemon struct BoxPokemon box; u32 status; u8 level; - u8 pokerus; + u8 mail; u16 hp; u16 maxHP; u16 attack; @@ -455,7 +458,7 @@ u8 GetNatureFromPersonality(u32 personality); u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex); -void sub_8040B1C(void *); +void MonRestorePP(struct Pokemon *); u8 *sub_803F378(u16 itemId); diff --git a/include/roamer.h b/include/roamer.h new file mode 100644 index 000000000..9d5f3c4ed --- /dev/null +++ b/include/roamer.h @@ -0,0 +1,11 @@ +#ifndef GUARD_ROAMER_H +#define GUARD_ROAMER_H + +void ClearRoamerData(void); +void ClearRoamerLocationData(void); +void UpdateLocationHistoryForRoamer(void); +void RoamerMoveToOtherLocationSet(void); +void RoamerMove(); +u8 TryStartRoamerEncounter(void); + +#endif diff --git a/include/songs.h b/include/songs.h index 01ecf9fe0..244bb9808 100644 --- a/include/songs.h +++ b/include/songs.h @@ -117,9 +117,9 @@ enum SE_PN_OFF, SE_Z_SEARCH, SE_TAMAGO, - SE_TB_START, - SE_TB_KON, - SE_TB_KARA, + /*0x72*/ SE_TB_START, + /*0x73*/ SE_TB_KON, + /*0x74*/ SE_TB_KARA, SE_BIDORO, SE_W085, SE_W085B, diff --git a/include/string_util.h b/include/string_util.h index c20965380..f45c2741f 100644 --- a/include/string_util.h +++ b/include/string_util.h @@ -16,6 +16,9 @@ u8 *StringAppend(u8 *dest, const u8 *src); u8 *StringCopyN(u8 *dest, const u8 *src, u8 n); u8 *StringAppendN(u8 *dest, const u8 *src, u8 n); u16 StringLength(const u8 *str); +#ifdef GERMAN +s32 StringLengthN(const u8 *str, s32 n); +#endif s32 StringCompare(const u8 *str1, const u8 *str2); s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n); u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n); diff --git a/include/text.h b/include/text.h index 4f52e3cdd..ba4ccb4b2 100644 --- a/include/text.h +++ b/include/text.h @@ -3,8 +3,13 @@ #define CHAR_SPACE 0x00 #define CHAR_QUESTION_MARK 0xAC +#define CHAR_PERIOD 0xAD #define CHAR_HYPHEN 0xAE +#define CHAR_MALE 0xB5 +#define CHAR_FEMALE 0xB6 +#define CHAR_COMMA 0xB8 #define CHAR_CURRENCY 0xB7 +#define CHAR_SLASH 0xBA #define CHAR_COLON 0xF0 #define EXT_CTRL_CODE_BEGIN 0xFC // extended control code #define PLACEHOLDER_BEGIN 0xFD // string placeholder @@ -155,7 +160,7 @@ u8 sub_8002F44(struct Window *win); u8 sub_8003418(struct Window *win); u8 sub_8003460(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top); u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 top); -void sub_80034D4(u8 *tileData, u8 *text); +void sub_80034D4(u8 *tileData, const u8 *text); u8 sub_80034EC(u8 *str); u8 *sub_8003504(u8 *dest, s32 value, u8 alignAmount, u8 alignType); u8 *sub_8003558(u8 *dest, const u8 *src, u8 alignAmount, u8 alignType); diff --git a/ld_script.txt b/ld_script.txt index 76d8d7c8e..eda6f8061 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -56,6 +56,8 @@ SECTIONS { asm/battle_4.o(.text); asm/battle_5.o(.text); asm/battle_6.o(.text); + src/battle_6.o(.text); + asm/battle_6.o(.text_8030464); asm/battle_7.o(.text); asm/battle_8.o(.text); asm/battle_9.o(.text); @@ -65,15 +67,15 @@ SECTIONS { src/pokemon_2.o(.text); asm/pokemon_item_effect.o(.text); src/pokemon_3.o(.text); - asm/pokemon_3.o(.text); src/trig.o(.text); src/rng.o(.text); src/util.o(.text); src/blend_palette.o(.text); src/daycare.o(.text); asm/daycare.o(.text); + src/egg_hatch.o(.text); asm/egg_hatch.o(.text); - asm/battle_interface.o(.text); + src/battle_interface.o(.text); src/smokescreen.o(.text); asm/pokeball.o(.text); src/load_save.o(.text); @@ -150,7 +152,7 @@ SECTIONS { asm/pokemon_summary_screen.o(.text_80A0958); src/script_movement.o(.text); src/fldeff_cut.o(.text); - asm/mail_data.o(.text); + src/mail_data.o(.text); src/map_name_popup.o(.text); asm/item_menu.o(.text); src/battle_anim_80A7E7C.o(.text); @@ -189,6 +191,7 @@ SECTIONS { asm/battle_anim_80CA710.o(.text); src/bike.o(.text); asm/easy_chat.o(.text); + src/easy_chat.o(.text); asm/pokenav.o(.text); asm/mon_markings.o(.text); src/mauville_old_man.o(.text); @@ -214,14 +217,19 @@ SECTIONS { asm/fldeff_flash.o(.text); src/post_battle_event_funcs.o(.text); src/time_events.o(.text); - asm/birch_pc.o(.text); + src/birch_pc.o(.text); src/hof_pc.o(.text); + src/field_specials.o(.text); asm/field_specials.o(.text); asm/battle_records.o(.text); + src/battle_records.o(.text); + asm/battle_records.o(.text_8110494); asm/pokedex_area_screen.o(.text); asm/evolution_scene.o(.text); asm/roulette.o(.text); asm/pokedex_cry_screen.o(.text); + src/pokedex_cry_screen.o(.text); + asm/pokedex_cry_screen.o(.text_811A4F8); src/coins.o(.text); src/landmark.o(.text); src/fldeff_strength.o(.text); @@ -240,12 +248,14 @@ SECTIONS { asm/field_effect_helpers.o(.text); asm/contest_ai.o(.text); asm/battle_anim_81258BC.o(.text); + src/battle_anim_81258BC.o(.text); + asm/battle_anim_81258BC.o(.text_812BBFC); src/fldeff_sweetscent.o(.text); asm/battle_anim_812C144.o(.text); asm/learn_move.o(.text); src/fldeff_softboiled.o(.text); asm/decoration_inventory.o(.text); - asm/roamer.o(.text); + src/roamer.o(.text); asm/battle_tower.o(.text); asm/use_pokeblock.o(.text); asm/battle_anim_8137220.o(.text); @@ -330,6 +340,7 @@ SECTIONS { data/main_menu.o(.rodata); data/data2.o(.rodata); data/pokemon.o(.rodata); + . = ALIGN(4); data/trig.o(.rodata); data/util.o(.rodata); data/daycare.o(.rodata); @@ -452,7 +463,7 @@ SECTIONS { data/battle_anim_812C144.o(.rodata); data/learn_move.o(.rodata); data/decoration_inventory.o(.rodata); - data/roamer.o(.rodata); + src/roamer.o(.rodata); data/battle_tower.o(.rodata); data/use_pokeblock.o(.rodata); data/battle_anim_8137220.o(.rodata); diff --git a/src/battle_6.c b/src/battle_6.c new file mode 100644 index 000000000..bc540ce72 --- /dev/null +++ b/src/battle_6.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "asm.h" +#include "menu_cursor.h" +#include "text.h" + +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042A0; + +extern struct Window gUnknown_03004210; + +extern void (*gUnknown_03004330[])(void); + +extern u8 gUnknown_02024A60; +extern u8 gUnknown_02024E60[]; +extern u8 gUnknown_020238CC[]; + +extern u16 gUnknown_030042C0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_03004288; +extern u16 gUnknown_03004280; +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B8; + +extern const u8 gUnknown_08400CA8[]; +extern const u8 gUnknown_08400CF3[]; + +#if ENGLISH +#define SUB_803037C_TILE_DATA_OFFSET 440 +#elif GERMAN +#define SUB_803037C_TILE_DATA_OFFSET 444 +#endif + +void sub_803037C(void) { + int r4; + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 160; + FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); + FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); + + gUnknown_03004330[gUnknown_02024A60] = sub_802C098; + + InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35); + sub_8002F44(&gUnknown_03004210); + sub_814A5C0(0, 0xFFFF, 12, 11679, 0); + + for (r4 = 0; r4 < 4; r4++) + { + nullsub_8(r4); + } + + sub_802E3E4(gUnknown_02024E60[gUnknown_02024A60], 0); + + get_battle_strings_((u8 *) gUnknown_08400CA8); + InitWindow(&gUnknown_03004210, gUnknown_020238CC, SUB_803037C_TILE_DATA_OFFSET, 2, 35); + sub_8002F44(&gUnknown_03004210); +} diff --git a/src/battle_ai.c b/src/battle_ai.c index bd320904f..9bbaf908e 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -334,6 +334,10 @@ void BattleAI_SetupAIData(void) AI_THINKING_STRUCT->aiFlags = 0x20000000; else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) AI_THINKING_STRUCT->aiFlags = 0x80000000; +#ifdef GERMAN + else if (gBattleTypeFlags & 0x900 || gTrainerBattleOpponent == 0x400) + AI_THINKING_STRUCT->aiFlags = 7; +#endif else // otherwise, just set aiFlags to whatever flags the trainer has set in their data. AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags; } diff --git a/src/battle_anim_81258BC.c b/src/battle_anim_81258BC.c new file mode 100644 index 000000000..42a685f4a --- /dev/null +++ b/src/battle_anim_81258BC.c @@ -0,0 +1,50 @@ +#include "global.h" +#include "asm.h" +#include "text.h" +#include "menu_cursor.h" + +extern struct Window gUnknown_03004210; +extern u8 gUnknown_020238CC[]; +extern u8 gUnknown_02024E60[]; + +extern const u8 gUnknown_08400CBB[]; +extern u8 gUnknown_02024A60; +extern const u8 gUnknown_08400D15[]; + +extern void* gUnknown_03004330[]; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; + +void bx_battle_menu_t6_2(void); + +#if ENGLISH +#define SUB_812BB10_TILE_DATA_OFFSET 440 +#elif GERMAN +#define SUB_812BB10_TILE_DATA_OFFSET 444 +#endif + +void sub_812BB10(void) { + int i; + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 160; + gUnknown_03004210.paletteNum = 0; + FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); + FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gUnknown_03004330[gUnknown_02024A60] = bx_battle_menu_t6_2; + + InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35); + sub_8002F44(&gUnknown_03004210); + sub_814A5C0(0, 0xFFFF, 12, 11679, 0); + + for (i = 0; i < 4; i++) + { + nullsub_8(i); + } + + sub_802E3E4(gUnknown_02024E60[gUnknown_02024A60], 0); + get_battle_strings_((u8 *) gUnknown_08400CBB); + + InitWindow(&gUnknown_03004210, gUnknown_020238CC, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); + sub_8002F44(&gUnknown_03004210); +}
\ No newline at end of file diff --git a/src/battle_interface.c b/src/battle_interface.c new file mode 100644 index 000000000..d097598b5 --- /dev/null +++ b/src/battle_interface.c @@ -0,0 +1,3082 @@ +#include "global.h" +#include "asm.h" +#include "sprite.h" +#include "string_util.h" +#include "text.h" +#include "decompress.h" +#include "sound.h" +#include "songs.h" +#include "battle.h" +#include "palette.h" + +struct UnknownStruct5 +{ + u8 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u32 unk10; +}; + +struct UnknownStruct6 +{ + u8 bit_0:1; + u8 bit_1:1; + u8 bit_2:1; + u8 bit_3:1; + u8 bit_4:1; + u8 bit_5:1; + u8 bit_6:1; + u8 bit_7:1; +}; + +struct UnknownStruct7 +{ + u8 filler0[0x180]; +}; + +struct UnknownStruct9 +{ + s32 unk0; + u32 unk4; + u32 unk8; + u32 unkC_0:5; + u32 unk10; +}; + +extern u8 ewram[]; +#define ewram520 ((struct UnknownStruct7 *)(ewram + 0x00520)) +#define ewram16088 (*(u8 *) (ewram + 0x16088)) +#define ewram16089 (*(u8 *) (ewram + 0x16089)) +#define ewram17800 ((struct UnknownStruct6 *)(ewram + 0x17800)) +#define ewram17850 ((struct UnknownStruct5 *)(ewram + 0x17850)) + +extern u8 gUnknown_020238CC[]; +extern u8 gUnknown_02024A68; +extern u16 gUnknown_02024A6A[]; +extern u8 gUnknown_02024A72[]; +extern u8 gUnknown_03004340[]; + +extern u16 gBattleTypeFlags; +extern u8 gNumSafariBalls; + +extern u32 gExperienceTables[8][101]; +extern const struct SpriteTemplate gSpriteTemplate_820A4EC[]; +extern const struct SpriteTemplate gSpriteTemplate_820A51C[]; +extern const struct SpriteTemplate gSpriteTemplate_820A54C; +extern const struct SpriteTemplate gSpriteTemplate_820A56C[]; +extern const struct SubspriteTable gSubspriteTables_820A684[]; +extern const struct SubspriteTable gSubspriteTables_820A6E4[]; +extern const struct SubspriteTable gSubspriteTables_820A6EC[]; +extern const struct SpriteSheet gUnknown_0820A754[]; +extern const struct SpritePalette gUnknown_0820A764[]; +extern const struct SpritePalette gUnknown_0820A774[]; +extern const struct SpriteSheet gUnknown_0820A784[]; +extern const struct SpriteTemplate gSpriteTemplate_820A7A4[]; +extern const struct SpriteTemplate gSpriteTemplate_820A7D4[]; +extern void *const gUnknown_0820A804[]; +extern void *const gUnknown_0820A80C[]; +extern void *const gUnknown_0820A814[]; +extern void *const gUnknown_0820A83C[]; +extern void *const gUnknown_0820A848[]; +extern void *const gUnknown_0820A854[]; +extern void *const gUnknown_0820A85C[]; +extern void *const gUnknown_0820A87C[]; +extern void *const gUnknown_0820A894[]; +extern void *const gUnknown_0820A8B4[]; +extern void *const gUnknown_0820A8DC[]; +extern void *const gUnknown_0820A904[]; +extern const u8 gUnknown_0820A81C[]; +extern const u8 gUnknown_0820A864[]; +extern const u8 gUnknown_0820A89C[]; +extern const u8 gUnknown_0820A8B0[]; +extern const struct BaseStats gBaseStats[]; +extern const u8 BattleText_SafariBalls[]; +extern const u8 BattleText_SafariBallsLeft[]; +extern const u8 BattleText_HighlightRed[]; +extern const u8 gUnknown_08D1216C[][32]; + +extern const u8 *const gNatureNames[]; +extern const u16 gBattleInterfaceStatusIcons_DynPal[]; + +#define ABS(n) ((n) >= 0 ? (n) : -(n)) +// Used for computing copy destination addresses +#define MACRO1(n) ((n) - (n) / 8 * 8) + 64 * ((n) / 8) + +extern int sub_8040D3C(); +extern u8 sub_8090D90(); +extern void load_gfxc_health_bar(); + +static void sub_8043D5C(struct Sprite *); +static const void *sub_8043CDC(u8); +void sub_8044210(u8, s16, u8); +static void draw_status_ailment_maybe(u8); +void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c); +extern void sub_8045180(struct Sprite *); +static void sub_8045110(struct Sprite *); +static void sub_8045048(struct Sprite *); +static void sub_8044F70(u8 taskId); +static void sub_8044E74(u8 taskId); +static void sub_8044ECC(u8 taskId); +static u8 sub_80457E8(u8, u8); +s32 sub_8045C78(u8, u8, u8, u8); +static int sub_8045F58(s32, s32, int, int *, u8, u16); +static u8 GetScaledExpFraction(int, int, int, u8); +static void sub_8045D58(u8, u8); +static u8 sub_804602C(int, int, int, int *, u8 *, u8); +static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c); + +static int do_nothing(s16 unused1, s16 unused2, int unused3) +{ + return 9; +} + +#ifdef NONMATCHING +void sub_8043740(s16 a, u16 *b, u8 c) +{ + u8 sp0[4]; + s8 i; + s8 j; + s32 r9; + + for (i = 0; i < 4; i++) + sp0[i] = 0; + + //_0804377C + //i = 3; + //r9 = -1; + for (i = 3, r9 = -1;;) + { + if (a > 0) + { + sp0[i] = a % 10; + a /= 10; + i--; + } + else + break; + asm(""::"r"(r9)); + } + + //_080437AA + for (; i > r9; i--) + { + //asm("":"=r"(r9)); + sp0[i] = -1; + } + //_080437CE + if (sp0[3] == 0xFF) + sp0[3] = 0; + + //_080437DA + if (c == 0) + { + for (i = 0, j = 0; i < 4; i++) + { + if (sp0[j] == 0xFF) + { + b[j] = (b[j] & 0xFC00) | 0x1E; + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E; + } + else + { + b[j] = (b[j] & 0xFC00) | (sp0[j] + 0x14); + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34); + } + j++; + } + + } + //_0804386A + else + { + for (i = 0; i < 4; i++) + { + if (sp0[i] == 0xFF) + { + b[i] = (b[i] & 0xFC00) | 0x1E; + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E; + } + else + { + b[i] = (b[i] & 0xFC00) | (sp0[i] + 0x14); + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34); + } + } + } + asm(""::"r"(r9)); +} +#else +__attribute__((naked)) +void sub_8043740(s16 a, u16 *b, u8 c) +{ + 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\ + sub sp, 0x4\n\ + adds r7, r1, 0\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r10, r2\n\ + movs r3, 0\n\ + movs r2, 0\n\ +_0804375C:\n\ + lsls r0, r3, 24\n\ + asrs r0, 24\n\ + mov r3, sp\n\ + adds r1, r3, r0\n\ + strb r2, [r1]\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _0804375C\n\ + movs r3, 0x3\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + mov r9, r0\n\ + mov r8, sp\n\ +_0804377C:\n\ + lsls r0, r5, 16\n\ + asrs r6, r0, 16\n\ + cmp r6, 0\n\ + ble _080437AA\n\ + lsls r4, r3, 24\n\ + asrs r4, 24\n\ + mov r1, sp\n\ + adds r5, r1, r4\n\ + adds r0, r6, 0\n\ + movs r1, 0xA\n\ + bl __modsi3\n\ + strb r0, [r5]\n\ + adds r0, r6, 0\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + subs r4, 0x1\n\ + lsls r4, 24\n\ + lsrs r3, r4, 24\n\ + b _0804377C\n\ +_080437AA:\n\ + lsls r1, r3, 24\n\ + asrs r0, r1, 24\n\ + cmp r0, r9\n\ + ble _080437CE\n\ + movs r4, 0xFF\n\ + movs r3, 0x1\n\ + negs r3, r3\n\ +_080437B8:\n\ + asrs r2, r1, 24\n\ + mov r5, sp\n\ + adds r1, r5, r2\n\ + ldrb r0, [r1]\n\ + orrs r0, r4\n\ + strb r0, [r1]\n\ + subs r2, 0x1\n\ + lsls r1, r2, 24\n\ + asrs r0, r1, 24\n\ + cmp r0, r3\n\ + bgt _080437B8\n\ +_080437CE:\n\ + mov r1, r8\n\ + ldrb r0, [r1, 0x3]\n\ + cmp r0, 0xFF\n\ + bne _080437DA\n\ + movs r0, 0\n\ + strb r0, [r1, 0x3]\n\ +_080437DA:\n\ + mov r2, r10\n\ + cmp r2, 0\n\ + bne _0804386A\n\ + movs r3, 0\n\ + movs r1, 0\n\ + movs r6, 0xFC\n\ + lsls r6, 8\n\ + movs r5, 0x1E\n\ + mov r12, r5\n\ +_080437EC:\n\ + lsls r1, 24\n\ + asrs r2, r1, 24\n\ + mov r0, sp\n\ + adds r5, r0, r2\n\ + ldrb r0, [r5]\n\ + mov r8, r1\n\ + cmp r0, 0xFF\n\ + bne _08043822\n\ + lsls r1, r2, 1\n\ + adds r1, r7\n\ + ldrh r2, [r1]\n\ + adds r0, r6, 0\n\ + ands r0, r2\n\ + mov r2, r12\n\ + orrs r0, r2\n\ + strh r0, [r1]\n\ + lsls r3, 24\n\ + asrs r1, r3, 23\n\ + adds r1, r7\n\ + adds r1, 0x40\n\ + ldrh r2, [r1]\n\ + adds r0, r6, 0\n\ + ands r0, r2\n\ + mov r5, r12\n\ + orrs r0, r5\n\ + strh r0, [r1]\n\ + b _08043852\n\ +_08043822:\n\ + lsls r2, 1\n\ + adds r2, r7\n\ + ldrh r0, [r2]\n\ + adds r1, r6, 0\n\ + ands r1, r0\n\ + ldrb r0, [r5]\n\ + adds r0, 0x14\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ + lsls r4, r3, 24\n\ + asrs r3, r4, 24\n\ + lsls r2, r3, 1\n\ + adds r2, r7\n\ + adds r2, 0x40\n\ + ldrh r0, [r2]\n\ + adds r1, r6, 0\n\ + ands r1, r0\n\ + mov r5, sp\n\ + adds r0, r5, r3\n\ + ldrb r0, [r0]\n\ + adds r0, 0x34\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ + adds r3, r4, 0\n\ +_08043852:\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + add r0, r8\n\ + lsrs r1, r0, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r3, r2\n\ + lsrs r3, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _080437EC\n\ + b _080438CE\n\ +_0804386A:\n\ + movs r3, 0\n\ + movs r4, 0xFC\n\ + lsls r4, 8\n\ + movs r6, 0x1E\n\ +_08043872:\n\ + lsls r1, r3, 24\n\ + asrs r2, r1, 24\n\ + mov r3, sp\n\ + adds r5, r3, r2\n\ + ldrb r0, [r5]\n\ + adds r3, r1, 0\n\ + cmp r0, 0xFF\n\ + bne _0804389E\n\ + lsls r1, r2, 1\n\ + adds r1, r7\n\ + ldrh r2, [r1]\n\ + adds r0, r4, 0\n\ + ands r0, r2\n\ + orrs r0, r6\n\ + strh r0, [r1]\n\ + adds r1, 0x40\n\ + ldrh r2, [r1]\n\ + adds r0, r4, 0\n\ + ands r0, r2\n\ + orrs r0, r6\n\ + strh r0, [r1]\n\ + b _080438C0\n\ +_0804389E:\n\ + lsls r2, 1\n\ + adds r2, r7\n\ + ldrh r0, [r2]\n\ + adds r1, r4, 0\n\ + ands r1, r0\n\ + ldrb r0, [r5]\n\ + adds r0, 0x14\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ + adds r2, 0x40\n\ + ldrh r0, [r2]\n\ + adds r1, r4, 0\n\ + ands r1, r0\n\ + ldrb r0, [r5]\n\ + adds r0, 0x34\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ +_080438C0:\n\ + movs r5, 0x80\n\ + lsls r5, 17\n\ + adds r0, r3, r5\n\ + lsrs r3, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _08043872\n\ +_080438CE:\n\ + add sp, 0x4\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\ + .syntax divided\n"); +} +#endif + +void unref_sub_80438E0(s16 a, s16 b, u16 *c) +{ + c[4] = 0x1E; + sub_8043740(b, c, 0); + sub_8043740(a, c + 5, 1); +} + +u8 battle_make_oam_normal_battle(u8 a) +{ + int sp0 = 0; + u8 spriteId1; + u8 spriteId2; + u8 spriteId3; + struct Sprite *sprite; + + if (!IsDoubleBattle()) + { + if (battle_side_get_owner(a) == 0) + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[0], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[0], 240, 160, 1); + + gSprites[spriteId1].oam.shape = 0; + gSprites[spriteId2].oam.shape = 0; + gSprites[spriteId2].oam.tileNum += 64; + } + else + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[0], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[0], 240, 160, 1); + + gSprites[spriteId2].oam.tileNum += 32; + sp0 = 2; + } + //_080439F2 + + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].callback = sub_8043D5C; + } + //_08043A28 + else + { + if (battle_side_get_owner(a) == 0) + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[battle_get_per_side_status(a) / 2], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[battle_get_per_side_status(a) / 2], 240, 160, 1); + + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].oam.tileNum += 32; + gSprites[spriteId2].callback = sub_8043D5C; + sp0 = 1; + } + //_08043ACC + else + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[battle_get_per_side_status(a) / 2], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[battle_get_per_side_status(a) / 2], 240, 160, 1); + + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].oam.tileNum += 32; + gSprites[spriteId2].callback = sub_8043D5C; + sp0 = 2; + } + //_08043B4E + } + //_08043B50 + + spriteId3 = CreateSpriteAtEnd(&gSpriteTemplate_820A56C[gUnknown_02024A72[a]], 140, 60, 0); + sprite = &gSprites[spriteId3]; + SetSubspriteTables(sprite, &gSubspriteTables_820A684[battle_side_get_owner(a)]); + sprite->subspriteMode = 2; + sprite->oam.priority = 1; + CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + sprite->oam.tileNum * 32), 64); + + gSprites[spriteId1].data5 = spriteId3; + gSprites[spriteId1].data6 = a; + gSprites[spriteId1].invisible = TRUE; + gSprites[spriteId2].invisible = TRUE; + sprite->data5 = spriteId1; + sprite->data6 = sp0; + sprite->invisible = TRUE; + + return spriteId1; +} + +u8 battle_make_oam_safari_battle(void) +{ + u8 spriteId1 = CreateSprite(&gSpriteTemplate_820A54C, 240, 160, 1); + u8 spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A54C, 240, 160, 1); + + gSprites[spriteId1].oam.shape = 0; + gSprites[spriteId2].oam.shape = 0; + gSprites[spriteId2].oam.tileNum += 0x40; + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].callback = sub_8043D5C; + return spriteId1; +} + +static const void *sub_8043CDC(u8 a) +{ + return gUnknown_08D1216C[a]; +} + +void sub_8043CEC(struct Sprite *sprite) +{ + u8 r5 = sprite->data5; + + switch (sprite->data6) + { + case 0: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + case 1: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + default: + case 2: + sprite->pos1.x = gSprites[r5].pos1.x + 8; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + } + sprite->pos2.x = gSprites[r5].pos2.x; + sprite->pos2.y = gSprites[r5].pos2.y; +} + +static void sub_8043D5C(struct Sprite *sprite) +{ + u8 data5 = sprite->data5; + + sprite->pos1.x = gSprites[data5].pos1.x + 64; + sprite->pos1.y = gSprites[data5].pos1.y; + sprite->pos2.x = gSprites[data5].pos2.x; + sprite->pos2.y = gSprites[data5].pos2.y; +} + +void sub_8043D84(u8 a, u8 b, u32 c, u32 d, u32 e) +{ + ewram17850[a].unk0 = b; + ewram17850[a].unk4 = c; + ewram17850[a].unk8 = d; + ewram17850[a].unkC = e; + ewram17850[a].unk10 = 0xFFFF8000; +} + +void sub_8043DB0(u8 a) +{ + gSprites[a].invisible = TRUE; + gSprites[gSprites[a].data5].invisible = TRUE; + gSprites[gSprites[a].oam.affineParam].invisible = TRUE; +} + +void sub_8043DFC(u8 a) +{ + gSprites[a].invisible = FALSE; + gSprites[gSprites[a].data5].invisible = FALSE; + gSprites[gSprites[a].oam.affineParam].invisible = FALSE; +} + +static void sub_8043E50(u8 spriteId, s16 x, s16 y) +{ + gSprites[spriteId].pos1.x = x; + gSprites[spriteId].pos1.y = y; +} + +void unref_sub_8043E70(u8 a) +{ + DestroySprite(&gSprites[gSprites[a].oam.affineParam]); + DestroySprite(&gSprites[gSprites[a].data5]); + DestroySprite(&gSprites[a]); +} + +void nullsub_11() +{ +} + +void sub_8043EB4(u8 priority) +{ + s32 i; + + for (i = 0; i < gUnknown_02024A68; i++) + { + u8 spriteId1; + u8 spriteId2; + u8 spriteId3; + + spriteId1 = gUnknown_03004340[i]; + spriteId2 = gSprites[spriteId1].oam.affineParam; + spriteId3 = gSprites[spriteId1].data5; + gSprites[spriteId1].oam.priority = priority; + gSprites[spriteId2].oam.priority = priority; + gSprites[spriteId3].oam.priority = priority; + } +} + +void sub_8043F44(u8 a) +{ + s16 x = 0; + s16 y = 0; + + if (!IsDoubleBattle()) + { + if (battle_side_get_owner(a) != 0) + { + x = 44; + y = 30; + } + else + { + x = 158; + y = 88; + } + } + else + { + switch (battle_get_per_side_status(a)) + { + case 0: + x = 159; + y = 77; + break; + case 2: + x = 171; + y = 102; + break; + case 1: + x = 44; + y = 19; + break; + case 3: + x = 32; + y = 44; + break; + } + } + sub_8043E50(gUnknown_03004340[a], x, y); +} + +#if ENGLISH +#define CHAR_LV_SEPARATOR CHAR_COLON +#elif GERMAN +#define CHAR_LV_SEPARATOR CHAR_PERIOD +#endif + +static void sub_8043FC0(u8 a, u8 b) +{ + u8 str[30]; + void *const *r7; + u8 *ptr; + s32 i; + s32 two; + + // TODO: Make this a local variable + memcpy(str, gUnknown_0820A81C, sizeof(str)); + if (!IsDoubleBattle()) + { + if (battle_side_get_owner(gSprites[a].data6) == 0) + r7 = gUnknown_0820A804; + else + r7 = gUnknown_0820A80C; + } + else + { + if (battle_side_get_owner(gSprites[a].data6) == 0) + r7 = gUnknown_0820A814; + else + r7 = gUnknown_0820A80C; + } + + ptr = str + 6; + if (b == 100) + { + ptr = ConvertIntToDecimalStringN(ptr, 100, 0, 3); + } + else + { + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x11; + *(ptr++) = 1; + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x14; + *(ptr++) = 4; + *(ptr++) = CHAR_LV_SEPARATOR; + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x14; + *(ptr++) = 0; + ptr = ConvertIntToDecimalStringN(ptr, b, 0, 2); + } + + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x13; + *(ptr++) = 0xF; + *(ptr++) = EOS; + sub_80034D4((u8 *)0x02000000, str); + + two = 2; + for (i = 0; i < two; i++) + CpuCopy32((void *)(0x02000020 + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32); +} + +#ifdef NONMATCHING +void sub_80440EC(u8 a, s16 b, u8 c) +{ + u8 str[0x14]; + u8 *ptr; + s32 foo; + void *const *r4; + s32 i; + + // TODO: make this a local variable + memcpy(str, gUnknown_0820A864, sizeof(str)); + foo = gSprites[a].data6; + + if (IsDoubleBattle() == TRUE || battle_side_get_owner(foo) == 1) + { + //_08044136 + sub_8044210(a, b, c); + return; + } + // + ptr = str + 6; + if (c == 0) + { + if (battle_side_get_owner(gSprites[a].data6) == 0) + r4 = gUnknown_0820A83C; + else + r4 = gUnknown_0820A848; + c = 3; + ptr = sub_8003504(ptr, b, 0x13, 1); + *(ptr++) = 0xBA; + *(ptr++) = 0xFF; + sub_80034D4((u8 *)0x02000000, str); + } + else + { + if (battle_side_get_owner(gSprites[a].data6) == 0) + r4 = gUnknown_0820A854; + else + r4 = gUnknown_0820A85C; + c = 2; + sub_8003504(ptr, b, 0xF, 1); + sub_80034D4((u8 *)0x02000000, str); + } + //asm(""::"r"(a)); + //_080441B6 + for (i = 0; i < c; i++) // _080440BC + { + void *temp = r4[i] + gSprites[a].oam.tileNum * 32; + CpuCopy32((void *)(0x02000020 + i * 0x40), temp, 0x20); + } +} +#else +__attribute__((naked)) +void sub_80440EC(u8 a, s16 b, u8 c) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x14\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r8, r2\n\ + ldr r1, _08044144 @ =gUnknown_0820A864\n\ + mov r0, sp\n\ + movs r2, 0x14\n\ + bl memcpy\n\ + ldr r1, _08044148 @ =gSprites\n\ + lsls r0, r7, 4\n\ + adds r0, r7\n\ + lsls r0, 2\n\ + adds r4, r0, r1\n\ + movs r0, 0x3A\n\ + ldrsh r5, [r4, r0]\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _08044136\n\ + lsls r0, r5, 24\n\ + lsrs r0, 24\n\ + bl battle_side_get_owner\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0804414C\n\ +_08044136:\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + adds r0, r7, 0\n\ + mov r2, r8\n\ + bl sub_8044210\n\ + b _080441F0\n\ + .align 2, 0\n\ +_08044144: .4byte gUnknown_0820A864\n\ +_08044148: .4byte gSprites\n\ +_0804414C:\n\ + mov r5, sp\n\ + adds r5, 0x6\n\ + mov r0, r8\n\ + cmp r0, 0\n\ + bne _08044190\n\ + ldrh r0, [r4, 0x3A]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl battle_side_get_owner\n\ + lsls r0, 24\n\ + ldr r4, _08044188 @ =gUnknown_0820A848\n\ + cmp r0, 0\n\ + bne _0804416A\n\ + ldr r4, _0804418C @ =gUnknown_0820A83C\n\ +_0804416A:\n\ + movs r0, 0x3\n\ + mov r8, r0\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0x13\n\ + movs r3, 0x1\n\ + bl sub_8003504\n\ + adds r5, r0, 0\n\ + movs r0, 0xBA\n\ + strb r0, [r5]\n\ + movs r0, 0xFF\n\ + strb r0, [r5, 0x1]\n\ + b _080441B6\n\ + .align 2, 0\n\ +_08044188: .4byte gUnknown_0820A848\n\ +_0804418C: .4byte gUnknown_0820A83C\n\ +_08044190:\n\ + ldrh r0, [r4, 0x3A]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl battle_side_get_owner\n\ + lsls r0, 24\n\ + ldr r4, _080441FC @ =gUnknown_0820A85C\n\ + cmp r0, 0\n\ + bne _080441A4\n\ + ldr r4, _08044200 @ =gUnknown_0820A854\n\ +_080441A4:\n\ + movs r0, 0x2\n\ + mov r8, r0\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0xF\n\ + movs r3, 0x1\n\ + bl sub_8003504\n\ +_080441B6:\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + mov r1, sp\n\ + bl sub_80034D4\n\ + mov r0, r8\n\ + cmp r0, 0\n\ + beq _080441F0\n\ + ldr r1, _08044204 @ =gSprites\n\ + lsls r0, r7, 4\n\ + adds r0, r7\n\ + lsls r0, 2\n\ + adds r6, r0, r1\n\ + adds r7, r4, 0\n\ + ldr r5, _08044208 @ =0x02000020\n\ + mov r4, r8\n\ +_080441D6:\n\ + ldrh r0, [r6, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 17\n\ + ldm r7!, {r1}\n\ + adds r1, r0\n\ + adds r0, r5, 0\n\ + ldr r2, _0804420C @ =REG_BG0CNT\n\ + bl CpuSet\n\ + adds r5, 0x40\n\ + subs r4, 0x1\n\ + cmp r4, 0\n\ + bne _080441D6\n\ +_080441F0:\n\ + add sp, 0x14\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080441FC: .4byte gUnknown_0820A85C\n\ +_08044200: .4byte gUnknown_0820A854\n\ +_08044204: .4byte gSprites\n\ +_08044208: .4byte 0x02000020\n\ +_0804420C: .4byte 0x04000008\n\ + .syntax divided\n"); +} +#endif + +void sub_8044210(u8 a, s16 b, u8 c) +{ + u8 str[0x14]; + u8 *ptr; + void *const *r7; + int r10; + int r4; + int i; + + // TODO: make this a local variable + memcpy(str, gUnknown_0820A89C, sizeof(str)); + r4 = gSprites[a].data6; + if ((ewram17800[r4].bit_4) == 0) + return; + ptr = str + 6; + if (c == 0) + { + r7 = gUnknown_0820A87C; + r10 = 6; + ptr = sub_8003504(ptr, b, 0x2B, 1); + *(ptr++) = CHAR_SLASH; + *(ptr++) = EOS; + } + else + { + r7 = gUnknown_0820A894; + r10 = 2; + sub_8003504(ptr, b, 0xF, 1); + if (battle_side_get_owner(r4) == 0) + { + CpuCopy32(sub_8043CDC(0x74), (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32), 32); + } + } + r4 = gSprites[a].data5; + sub_80034D4((u8 *)0x02000000, str); + for (i = 0; i < r10; i++) + { + CpuCopy32((void *)(0x02000020 + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20); + } +} + +#ifdef NONMATCHING +void sub_8044338(u8 a, struct Pokemon *pkmn) +{ + u8 str[0x14]; + u8 *r6; + s32 r8; + u8 nature; // = GetNature(pkmn); + s32 r7; + u8 i; + u8 r5; + + // TODO: make this a local variable + memcpy(str, gUnknown_0820A864, sizeof(str)); + r6 = ewram520[battle_get_per_side_status(gSprites[a].data6)].filler0; + r8 = 5; + nature = GetNature(pkmn); + StringCopy(str + 6, gNatureNames[nature]); + sub_80034D4(r6, str); + r7 = 6; + for (i = 0; i < (u32)r8; i++, r7++) //_080443AA + { + u8 val; + + if ((u8)(str[r7] - 0x37) <= 0x13 || (u8)(str[r7] + 0x79) <= 0x13) + val = 0x2C; + //_080443DC + else if ((u8)(str[r7] - 0x4B) <= 4 || (u8)(str[r7] + 0x65) <= 4) + val = 0x2D; + else + val = 0x2B; + + CpuCopy32(sub_8043CDC(val), r6 + i * 64, 32); + } + //r7 = 1; + //sp18 = a * 16; + for (r7 = 1; r7 < r8 + 1; r7++) + { + int foo; + + foo = gSprites[a].oam.tileNum + MACRO1(r7); + CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32); + r6 += 32; + + foo = gSprites[a].oam.tileNum + 8 + MACRO1(r7); + CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32); + r6 += 32; + } + //_08044486 + r5 = gSprites[a].data5; + ConvertIntToDecimalStringN(str + 6, ewram[0x16089], 1, 2); + ConvertIntToDecimalStringN(str + 9, ewram[0x16088], 1, 2); + str[5] = 0; + str[8] = 0xBA; + sub_80034D4((u8 *)0x02000000, str); + + for (r7 = 0; r7 < 5; r7++) + { + if (r7 <= 1) + { + int foo = (gSprites[r5].oam.tileNum + 2 + r7); + CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x06010000 + foo * 32, 32); + } + else + { + int foo = (r7 + gSprites[r5].oam.tileNum); + CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x060100C0 + foo * 32, 32); + } + } +} +#else +__attribute__((naked)) +void sub_8044338(u8 a, struct Pokemon *pkmn) +{ + 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\ + sub sp, 0x20\n\ + adds r4, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x14]\n\ + ldr r1, _080443CC @ =gUnknown_0820A864\n\ + mov r0, sp\n\ + movs r2, 0x14\n\ + bl memcpy\n\ + ldr r1, _080443D0 @ =gSprites\n\ + ldr r2, [sp, 0x14]\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x3A]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl battle_get_per_side_status\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 7\n\ + ldr r3, _080443D4 @ =0x02000520\n\ + adds r6, r1, r3\n\ + movs r0, 0x5\n\ + mov r8, r0\n\ + adds r0, r4, 0\n\ + bl GetNature\n\ + lsls r0, 24\n\ + mov r4, sp\n\ + adds r4, 0x6\n\ + ldr r1, _080443D8 @ =gNatureNames\n\ + lsrs r0, 22\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + bl StringCopy\n\ + adds r0, r6, 0\n\ + mov r1, sp\n\ + bl sub_80034D4\n\ + movs r7, 0x6\n\ + movs r5, 0\n\ + mov r1, sp\n\ + adds r1, 0x9\n\ + str r1, [sp, 0x1C]\n\ +_080443AA:\n\ + mov r2, sp\n\ + adds r0, r2, r7\n\ + ldrb r1, [r0]\n\ + adds r0, r1, 0\n\ + subs r0, 0x37\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x13\n\ + bls _080443C8\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x13\n\ + bhi _080443DC\n\ +_080443C8:\n\ + movs r0, 0x2C\n\ + b _080443FA\n\ + .align 2, 0\n\ +_080443CC: .4byte gUnknown_0820A864\n\ +_080443D0: .4byte gSprites\n\ +_080443D4: .4byte 0x02000520\n\ +_080443D8: .4byte gNatureNames\n\ +_080443DC:\n\ + adds r0, r1, 0\n\ + subs r0, 0x4B\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bls _080443F4\n\ + adds r0, r1, 0\n\ + adds r0, 0x65\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bhi _080443F8\n\ +_080443F4:\n\ + movs r0, 0x2D\n\ + b _080443FA\n\ +_080443F8:\n\ + movs r0, 0x2B\n\ +_080443FA:\n\ + bl sub_8043CDC\n\ + lsls r1, r5, 6\n\ + adds r1, r6, r1\n\ + ldr r2, _080444F8 @ =REG_BG0CNT\n\ + bl CpuSet\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + adds r7, 0x1\n\ + cmp r5, r8\n\ + bcc _080443AA\n\ + movs r7, 0x1\n\ + ldr r3, [sp, 0x14]\n\ + lsls r3, 4\n\ + str r3, [sp, 0x18]\n\ + movs r0, 0x1\n\ + add r0, r8\n\ + mov r9, r0\n\ + cmp r7, r9\n\ + bge _08044486\n\ + ldr r1, _080444FC @ =gSprites\n\ + ldr r2, _080444F8 @ =REG_BG0CNT\n\ + mov r10, r2\n\ + ldr r2, [sp, 0x14]\n\ + adds r0, r3, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + mov r8, r0\n\ +_08044436:\n\ + mov r3, r8\n\ + ldrh r0, [r3, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + adds r5, r7, 0\n\ + cmp r7, 0\n\ + bge _08044446\n\ + adds r5, r7, 0x7\n\ +_08044446:\n\ + asrs r5, 3\n\ + lsls r4, r5, 3\n\ + subs r4, r7, r4\n\ + adds r0, r4\n\ + lsls r5, 6\n\ + adds r0, r5\n\ + lsls r0, 5\n\ + ldr r2, _08044500 @ =0x06010000\n\ + adds r1, r0, r2\n\ + adds r0, r6, 0\n\ + mov r2, r10\n\ + bl CpuSet\n\ + adds r6, 0x20\n\ + mov r3, r8\n\ + ldrh r0, [r3, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + adds r4, 0x8\n\ + adds r0, r4\n\ + adds r0, r5\n\ + lsls r0, 5\n\ + ldr r2, _08044500 @ =0x06010000\n\ + adds r1, r0, r2\n\ + adds r0, r6, 0\n\ + mov r2, r10\n\ + bl CpuSet\n\ + adds r6, 0x20\n\ + adds r7, 0x1\n\ + cmp r7, r9\n\ + blt _08044436\n\ +_08044486:\n\ + ldr r6, _080444FC @ =gSprites\n\ + ldr r3, [sp, 0x18]\n\ + ldr r1, [sp, 0x14]\n\ + adds r0, r3, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrh r5, [r0, 0x38]\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + ldr r4, _08044504 @ =0x02000000\n\ + ldr r2, _08044508 @ =0x00016089\n\ + adds r0, r4, r2\n\ + ldrb r1, [r0]\n\ + mov r0, sp\n\ + adds r0, 0x6\n\ + movs r2, 0x1\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r3, _0804450C @ =0x00016088\n\ + adds r4, r3\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp, 0x1C]\n\ + movs r2, 0x1\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + mov r1, sp\n\ + movs r0, 0\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0xBA\n\ + strb r0, [r1, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + bl sub_80034D4\n\ + movs r7, 0\n\ + lsls r0, r5, 4\n\ + adds r0, r5\n\ + lsls r0, 2\n\ + adds r5, r0, r6\n\ + ldr r4, _08044510 @ =0x02000020\n\ +_080444DA:\n\ + cmp r7, 0x1\n\ + bgt _08044514\n\ + ldrh r1, [r5, 0x4]\n\ + lsls r1, 22\n\ + lsrs r1, 22\n\ + adds r0, r7, 0x2\n\ + adds r1, r0\n\ + lsls r1, 5\n\ + ldr r0, _08044500 @ =0x06010000\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + ldr r2, _080444F8 @ =REG_BG0CNT\n\ + bl CpuSet\n\ + b _0804452A\n\ + .align 2, 0\n\ +_080444F8: .4byte 0x04000008\n\ +_080444FC: .4byte gSprites\n\ +_08044500: .4byte 0x06010000\n\ +_08044504: .4byte 0x02000000\n\ +_08044508: .4byte 0x00016089\n\ +_0804450C: .4byte 0x00016088\n\ +_08044510: .4byte 0x02000020\n\ +_08044514:\n\ + ldrh r1, [r5, 0x4]\n\ + lsls r1, 22\n\ + lsrs r1, 22\n\ + adds r1, r7, r1\n\ + lsls r1, 5\n\ + ldr r2, _08044544 @ =0x060100c0\n\ + adds r1, r2\n\ + adds r0, r4, 0\n\ + ldr r2, _08044548 @ =REG_BG0CNT\n\ + bl CpuSet\n\ +_0804452A:\n\ + adds r4, 0x40\n\ + adds r7, 0x1\n\ + cmp r7, 0x4\n\ + ble _080444DA\n\ + add sp, 0x20\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\ +_08044544: .4byte 0x060100c0\n\ +_08044548: .4byte 0x04000008\n\ + .syntax divided\n"); +} +#endif + +void sub_804454C(void) +{ + s32 i; + u8 spriteId; + + for (i = 0; i < gUnknown_02024A68; i++) + { + if (gSprites[gUnknown_03004340[i]].callback == SpriteCallbackDummy + && battle_side_get_owner(i) != 1 + && (IsDoubleBattle() || battle_side_get_owner(i) != 0)) + { + u8 r6; + + ewram17800[i].bit_4 ^= 1; + r6 = ewram17800[i].bit_4; + if (battle_side_get_owner(i) == 0) + { + + if (!IsDoubleBattle()) + continue; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + continue; + + if (r6 == 1) + { + spriteId = gSprites[gUnknown_03004340[i]].data5; + + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); + sub_8044210(gUnknown_03004340[i], GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_HP), 0); + sub_8044210(gUnknown_03004340[i], GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_MAX_HP), 1); + } + else + { + draw_status_ailment_maybe(gUnknown_03004340[i]); + sub_8045A5C(gUnknown_03004340[i], &gPlayerParty[gUnknown_02024A6A[i]], 5); + CpuCopy32(sub_8043CDC(0x75), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gUnknown_03004340[i]].oam.tileNum * 32), 32); + } + } + else + { + if (r6 == 1) + { + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + sub_8044338(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]]); + } + else + { + spriteId = gSprites[gUnknown_03004340[i]].data5; + + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); + sub_8044210(gUnknown_03004340[i], GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_HP), 0); + sub_8044210(gUnknown_03004340[i], GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_MAX_HP), 1); + } + } + else + { + draw_status_ailment_maybe(gUnknown_03004340[i]); + sub_8045A5C(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]], 5); + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + sub_8045A5C(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]], 4); + } + } + gSprites[gUnknown_03004340[i]].data7 ^= 1; + } + } +} + +struct UnknownStruct8 +{ + u16 unk0; + u32 unk4; +}; + +// This function almost matches except for just two instructions around 0x08044B52 that are swapped. +#ifdef NONMATCHING +u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d) +{ + u8 r7; + s16 x; + s16 y; + s16 r8; + s16 r5; + + int i; + u8 sp[6]; + s8 sp14; + u8 sp18; + u8 taskId; + + if (c == 0 || battle_get_per_side_status(a) != 3) + { + if (battle_side_get_owner(a) == 0) + { + r7 = 0; + x = 136; + y = 96; + r8 = 100; + r5 = -5; + } + else + { + r7 = 1; + if (c == 0 || !IsDoubleBattle()) + { + x = 104; + y = 40; + } + else + { + x = 104; + y = 16; + } + r8 = -100; + r5 = 5; + } + } + else + { + r7 = 1; + x = 104; + y = 40; + r8 = -100; + r5 = 5; + } + //_08044884 + + sp14 = 0; + for (i = 0; i < 6; i++) //_080448A0 + { + if (b[i].unk0 != 0xFFFF) + sp14++; + } + + LoadCompressedObjectPic(&gUnknown_0820A754[r7]); + LoadSpriteSheet(&gUnknown_0820A784[r7]); + LoadSpritePalette(&gUnknown_0820A764[r7]); + LoadSpritePalette(&gUnknown_0820A774[r7]); + + sp18 = CreateSprite(&gSpriteTemplate_820A7A4[r7], x, y, 10); + SetSubspriteTables(&gSprites[sp18], gSubspriteTables_820A6E4); + gSprites[sp18].pos2.x = r8; + gSprites[sp18].data0 = r5; + if (r7 != 0) + { + gSprites[sp18].pos1.x -= 96; + gSprites[sp18].oam.matrixNum = 8; + } + else + { + gSprites[sp18].pos1.x += 0x60; + } + //_0804495A + for (i = 0; i < 6; i++) //_08044970 + { + sp[i] = CreateSpriteAtEnd(&gSpriteTemplate_820A7D4[r7], x, y - 4, 9); + if (d == 0) + { + gSprites[sp[i]].callback = sub_8045180; + } + //_080449A0 + if (r7 == 0) + { + gSprites[sp[i]].pos2.x = 0; + gSprites[sp[i]].pos2.y = 0; + } + //_080449BE + gSprites[sp[i]].data0 = sp18; + if (r7 == 0) + { + gSprites[sp[i]].pos1.x += 10 * i + 24; + gSprites[sp[i]].data1 = i * 7 + 10; + gSprites[sp[i]].pos2.x = 120; + } + //_08044A18 + else + { + gSprites[sp[i]].pos1.x -= 10 * (5 - i) + 24; + gSprites[sp[i]].data1 = (6 - i) * 7 + 10; + gSprites[sp[i]].pos2.x = -120; + } + //_08044A56 + gSprites[sp[i]].data2 = r7; + } + //_08044A76 + if (battle_side_get_owner(a) == 0) + { + for (i = 0; i < 6; i++) //_08044A9A + { + if (gBattleTypeFlags & BATTLE_TYPE_40) // && b[i] != 0xFFFF && b[i] + { + if (b[i].unk0 == 0xFFFF) + { + //_08044AE6 + gSprites[sp[i]].oam.tileNum += 1; + gSprites[sp[i]].data7 = 1; + // to _08044B52 + } + else if (b[i].unk0 == 0) + { + gSprites[sp[i]].oam.tileNum += 3; + // to _08044B46 + } + else if (b[i].unk4 != 0) + { + gSprites[sp[i]].oam.tileNum += 2; + } + } + //_08044ADC + else + { + if (i >= sp14) + { + //_08044AE6 + gSprites[sp[i]].oam.tileNum += 1; + gSprites[sp[i]].data7 = 1; + // to _08044B52 + } + else if (b[i].unk0 == 0) + { + //_08044B14 + gSprites[sp[i]].oam.tileNum += 3; + // to _08044B46 + } + else if (b[i].unk4 != 0) + { + gSprites[sp[i]].oam.tileNum += 2; + } + } + } + } + //_08044B5E + else + { + // Mismatch occurrs in this loop initialization + for (i = 0; i < 6; i++) + { + if (gBattleTypeFlags & BATTLE_TYPE_40) + { + if (b[i].unk0 == 0xFFFF) + { + gSprites[sp[5 - i]].oam.tileNum += 1; + gSprites[sp[5 - i]].data7 = 1; + } + else if (b[i].unk0 == 0) + { + gSprites[sp[5 - i]].oam.tileNum += 3; + } + else if (b[i].unk4 != 0) + { + gSprites[sp[5 - i]].oam.tileNum += 2; + } + } + else + { + if (i >= sp14) + { + gSprites[sp[5 - i]].oam.tileNum += 1; + gSprites[sp[5 - i]].data7 = 1; + } + else if (b[i].unk0 == 0) + { + gSprites[sp[5 - i]].oam.tileNum += 3; + } + else if (b[i].unk4 != 0) + { + gSprites[sp[5 - i]].oam.tileNum += 2; + } + } + // This corrects the initialization order, but messes up the counter update order + asm(""::"r"(&b[i])); + } + } + //_08044C38 + taskId = CreateTask(TaskDummy, 5); + gTasks[taskId].data[0] = a; + gTasks[taskId].data[1] = sp18; + for (i = 0; i < 6; i++) + gTasks[taskId].data[3 + i] = sp[i]; + gTasks[taskId].data[10] = d; + PlaySE12WithPanning(SE_TB_START, 0); + return taskId; +} +#else +__attribute__((naked)) +u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d) +{ + 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\ + sub sp, 0x28\n\ + str r1, [sp, 0xC]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x8]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r4, r2, 0\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + str r3, [sp, 0x10]\n\ + cmp r4, 0\n\ + beq _08044834\n\ + bl battle_get_per_side_status\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x3\n\ + beq _08044878\n\ +_08044834:\n\ + ldr r0, [sp, 0x8]\n\ + bl battle_side_get_owner\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08044854\n\ + movs r7, 0\n\ + movs r1, 0x88\n\ + movs r2, 0x60\n\ + movs r0, 0x64\n\ + mov r8, r0\n\ + ldr r5, _08044850 @ =0x0000fffb\n\ + b _08044884\n\ + .align 2, 0\n\ +_08044850: .4byte 0x0000fffb\n\ +_08044854:\n\ + movs r7, 0x1\n\ + cmp r4, 0\n\ + beq _08044864\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0804486A\n\ +_08044864:\n\ + movs r1, 0x68\n\ + movs r2, 0x28\n\ + b _0804486E\n\ +_0804486A:\n\ + movs r1, 0x68\n\ + movs r2, 0x10\n\ +_0804486E:\n\ + ldr r3, _08044874 @ =0x0000ff9c\n\ + mov r8, r3\n\ + b _08044882\n\ + .align 2, 0\n\ +_08044874: .4byte 0x0000ff9c\n\ +_08044878:\n\ + movs r7, 0x1\n\ + movs r1, 0x68\n\ + movs r2, 0x28\n\ + ldr r5, _08044930 @ =0x0000ff9c\n\ + mov r8, r5\n\ +_08044882:\n\ + movs r5, 0x5\n\ +_08044884:\n\ + movs r6, 0\n\ + str r6, [sp, 0x14]\n\ + lsls r4, r7, 3\n\ + ldr r0, _08044934 @ =gUnknown_0820A754\n\ + mov r10, r0\n\ + lsls r3, r7, 1\n\ + mov r9, r3\n\ + lsls r1, 16\n\ + str r1, [sp, 0x20]\n\ + lsls r2, 16\n\ + str r2, [sp, 0x24]\n\ + ldr r2, _08044938 @ =0x0000ffff\n\ + ldr r1, [sp, 0xC]\n\ + movs r6, 0x5\n\ +_080448A0:\n\ + ldrh r0, [r1]\n\ + cmp r0, r2\n\ + beq _080448B4\n\ + ldr r3, [sp, 0x14]\n\ + lsls r0, r3, 24\n\ + movs r3, 0x80\n\ + lsls r3, 17\n\ + adds r0, r3\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x14]\n\ +_080448B4:\n\ + adds r1, 0x8\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080448A0\n\ + mov r6, r10\n\ + adds r0, r4, r6\n\ + bl LoadCompressedObjectPic\n\ + ldr r0, _0804493C @ =gUnknown_0820A784\n\ + adds r0, r4, r0\n\ + bl LoadSpriteSheet\n\ + ldr r0, _08044940 @ =gUnknown_0820A764\n\ + adds r0, r4, r0\n\ + bl LoadSpritePalette\n\ + ldr r0, _08044944 @ =gUnknown_0820A774\n\ + adds r0, r4, r0\n\ + bl LoadSpritePalette\n\ + mov r1, r9\n\ + adds r0, r1, r7\n\ + lsls r0, 3\n\ + ldr r1, _08044948 @ =gSpriteTemplate_820A7A4\n\ + adds r0, r1\n\ + ldr r2, [sp, 0x20]\n\ + asrs r1, r2, 16\n\ + ldr r3, [sp, 0x24]\n\ + asrs r2, r3, 16\n\ + movs r3, 0xA\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x18]\n\ + lsls r0, 4\n\ + ldr r6, [sp, 0x18]\n\ + adds r0, r6\n\ + lsls r0, 2\n\ + ldr r1, _0804494C @ =gSprites\n\ + adds r4, r0, r1\n\ + ldr r1, _08044950 @ =gSubspriteTables_820A6E4\n\ + adds r0, r4, 0\n\ + bl SetSubspriteTables\n\ + mov r0, r8\n\ + strh r0, [r4, 0x24]\n\ + strh r5, [r4, 0x2E]\n\ + cmp r7, 0\n\ + beq _08044954\n\ + ldrh r0, [r4, 0x20]\n\ + subs r0, 0x60\n\ + strh r0, [r4, 0x20]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x10\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x3]\n\ + b _0804495A\n\ + .align 2, 0\n\ +_08044930: .4byte 0x0000ff9c\n\ +_08044934: .4byte gUnknown_0820A754\n\ +_08044938: .4byte 0x0000ffff\n\ +_0804493C: .4byte gUnknown_0820A784\n\ +_08044940: .4byte gUnknown_0820A764\n\ +_08044944: .4byte gUnknown_0820A774\n\ +_08044948: .4byte gSpriteTemplate_820A7A4\n\ +_0804494C: .4byte gSprites\n\ +_08044950: .4byte gSubspriteTables_820A6E4\n\ +_08044954:\n\ + ldrh r0, [r4, 0x20]\n\ + adds r0, 0x60\n\ + strh r0, [r4, 0x20]\n\ +_0804495A:\n\ + movs r6, 0\n\ + ldr r1, _08044A04 @ =gSprites\n\ + mov r10, r1\n\ + mov r4, sp\n\ + mov r2, r9\n\ + adds r0, r2, r7\n\ + lsls r0, 3\n\ + str r0, [sp, 0x1C]\n\ + movs r3, 0xA\n\ + mov r9, r3\n\ + mov r8, r6\n\ +_08044970:\n\ + ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4\n\ + ldr r5, [sp, 0x24]\n\ + ldr r1, _08044A0C @ =0xfffc0000\n\ + adds r2, r5, r1\n\ + ldr r3, [sp, 0x1C]\n\ + adds r0, r3, r0\n\ + ldr r5, [sp, 0x20]\n\ + asrs r1, r5, 16\n\ + asrs r2, 16\n\ + movs r3, 0x9\n\ + bl CreateSpriteAtEnd\n\ + strb r0, [r4]\n\ + ldr r0, [sp, 0x10]\n\ + cmp r0, 0\n\ + bne _080449A0\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + ldr r2, _08044A10 @ =gSprites + 0x1C\n\ + adds r1, r2\n\ + ldr r0, _08044A14 @ =sub_8045180\n\ + str r0, [r1]\n\ +_080449A0:\n\ + ldr r5, _08044A04 @ =gSprites\n\ + cmp r7, 0\n\ + bne _080449BE\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r10\n\ + strh r7, [r0, 0x24]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r10\n\ + strh r7, [r0, 0x26]\n\ +_080449BE:\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + movs r1, 0\n\ + mov r3, sp\n\ + ldrh r3, [r3, 0x18]\n\ + strh r3, [r0, 0x2E]\n\ + cmp r7, 0\n\ + bne _08044A18\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrh r0, [r1, 0x20]\n\ + adds r0, 0x18\n\ + add r0, r8\n\ + strh r0, [r1, 0x20]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + mov r1, r9\n\ + strh r1, [r0, 0x30]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + movs r1, 0x78\n\ + b _08044A56\n\ + .align 2, 0\n\ +_08044A04: .4byte gSprites\n\ +_08044A08: .4byte gSpriteTemplate_820A7D4\n\ +_08044A0C: .4byte 0xfffc0000\n\ +_08044A10: .4byte gSprites + 0x1C\n\ +_08044A14: .4byte sub_8045180\n\ +_08044A18:\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r5\n\ + ldrh r3, [r2, 0x20]\n\ + subs r3, 0x18\n\ + movs r1, 0x5\n\ + subs r1, r6\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + subs r3, r0\n\ + strh r3, [r2, 0x20]\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r5\n\ + movs r1, 0x6\n\ + subs r1, r6\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + adds r0, 0xA\n\ + strh r0, [r2, 0x30]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + ldr r1, _08044AC4 @ =0x0000ff88\n\ +_08044A56:\n\ + strh r1, [r0, 0x24]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + strh r7, [r0, 0x32]\n\ + adds r4, 0x1\n\ + movs r2, 0x7\n\ + add r9, r2\n\ + movs r3, 0xA\n\ + add r8, r3\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + bgt _08044A76\n\ + b _08044970\n\ +_08044A76:\n\ + ldr r0, [sp, 0x8]\n\ + bl battle_side_get_owner\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08044B5E\n\ + movs r6, 0\n\ + ldr r5, _08044AC8 @ =gBattleTypeFlags\n\ + mov r10, r5\n\ + ldr r0, _08044ACC @ =0x0000ffff\n\ + mov r9, r0\n\ + ldr r7, _08044AD0 @ =gSprites\n\ + ldr r1, _08044AD4 @ =0x000003ff\n\ + mov r12, r1\n\ + ldr r2, _08044AD8 @ =0xfffffc00\n\ + mov r8, r2\n\ + mov r4, sp\n\ + ldr r5, [sp, 0xC]\n\ +_08044A9A:\n\ + mov r3, r10\n\ + ldrh r1, [r3]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08044ADC\n\ + ldrh r0, [r5]\n\ + cmp r0, r9\n\ + beq _08044AE6\n\ + cmp r0, 0\n\ + bne _08044B2E\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044B46\n\ + .align 2, 0\n\ +_08044AC4: .4byte 0x0000ff88\n\ +_08044AC8: .4byte gBattleTypeFlags\n\ +_08044ACC: .4byte 0x0000ffff\n\ +_08044AD0: .4byte gSprites\n\ +_08044AD4: .4byte 0x000003ff\n\ +_08044AD8: .4byte 0xfffffc00\n\ +_08044ADC:\n\ + ldr r1, [sp, 0x14]\n\ + lsls r0, r1, 24\n\ + asrs r0, 24\n\ + cmp r6, r0\n\ + blt _08044B14\n\ +_08044AE6:\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x1\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r7\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x3C]\n\ + b _08044B52\n\ +_08044B14:\n\ + ldrh r0, [r5]\n\ + cmp r0, 0\n\ + bne _08044B2E\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044B46\n\ +_08044B2E:\n\ + ldr r0, [r5, 0x4]\n\ + cmp r0, 0\n\ + beq _08044B52\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x2\n\ +_08044B46:\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ +_08044B52:\n\ + adds r4, 0x1\n\ + adds r5, 0x8\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _08044A9A\n\ + b _08044C38\n\ +_08044B5E:\n\ + movs r6, 0\n\ + ldr r1, _08044BA4 @ =gBattleTypeFlags\n\ + mov r10, r1\n\ + ldr r2, _08044BA8 @ =0x0000ffff\n\ + mov r9, r2\n\ + ldr r7, _08044BAC @ =gSprites\n\ + ldr r3, _08044BB0 @ =0x000003ff\n\ + mov r12, r3\n\ + ldr r5, _08044BB4 @ =0xfffffc00\n\ + mov r8, r5\n\ + ldr r5, [sp, 0xC]\n\ + mov r4, sp\n\ + adds r4, 0x5\n\ +_08044B78:\n\ + mov r0, r10\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08044BB8\n\ + ldrh r0, [r5]\n\ + cmp r0, r9\n\ + beq _08044BC2\n\ + cmp r0, 0\n\ + bne _08044C0A\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044C22\n\ + .align 2, 0\n\ +_08044BA4: .4byte gBattleTypeFlags\n\ +_08044BA8: .4byte 0x0000ffff\n\ +_08044BAC: .4byte gSprites\n\ +_08044BB0: .4byte 0x000003ff\n\ +_08044BB4: .4byte 0xfffffc00\n\ +_08044BB8:\n\ + ldr r1, [sp, 0x14]\n\ + lsls r0, r1, 24\n\ + asrs r0, 24\n\ + cmp r6, r0\n\ + blt _08044BF0\n\ +_08044BC2:\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x1\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r7\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x3C]\n\ + b _08044C2E\n\ +_08044BF0:\n\ + ldrh r0, [r5]\n\ + cmp r0, 0\n\ + bne _08044C0A\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044C22\n\ +_08044C0A:\n\ + ldr r0, [r5, 0x4]\n\ + cmp r0, 0\n\ + beq _08044C2E\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x2\n\ +_08044C22:\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ +_08044C2E:\n\ + subs r4, 0x1\n\ + adds r5, 0x8\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _08044B78\n\ +_08044C38:\n\ + ldr r0, _08044C98 @ =TaskDummy\n\ + movs r1, 0x5\n\ + bl CreateTask\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r2, _08044C9C @ =gTasks\n\ + lsls r3, r4, 2\n\ + adds r1, r3, r4\n\ + lsls r1, 3\n\ + adds r0, r1, r2\n\ + mov r5, sp\n\ + ldrh r5, [r5, 0x8]\n\ + strh r5, [r0, 0x8]\n\ + mov r6, sp\n\ + ldrh r6, [r6, 0x18]\n\ + strh r6, [r0, 0xA]\n\ + movs r6, 0\n\ + adds r0, r2, 0\n\ + adds r0, 0xE\n\ + adds r1, r0\n\ +_08044C62:\n\ + mov r5, sp\n\ + adds r0, r5, r6\n\ + ldrb r0, [r0]\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _08044C62\n\ + adds r0, r3, r4\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrh r6, [r5, 0x10]\n\ + strh r6, [r0, 0x1C]\n\ + movs r0, 0x72\n\ + movs r1, 0\n\ + bl PlaySE12WithPanning\n\ + adds r0, r4, 0\n\ + add sp, 0x28\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\ +_08044C98: .4byte TaskDummy\n\ +_08044C9C: .4byte gTasks\n\ + .syntax divided\n"); +} +#endif + +void sub_8044CA0(u8 taskId) +{ + u8 sp[6]; + u8 r9; + u8 r10; + u8 sp8; + s32 i; + + r9 = gTasks[taskId].data[10]; + r10 = gTasks[taskId].data[1]; + sp8 = gTasks[taskId].data[0]; + for (i = 0; i < 6; i++) + sp[i] = gTasks[taskId].data[3 + i]; + + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x10; + gTasks[taskId].data[15] = 16; + for (i = 0; i < 6; i++) + gSprites[sp[i]].oam.objMode = 1; + gSprites[r10].oam.objMode = 1; + if (r9 != 0) + { + for (i = 0; i < 6; i++) + { + if (battle_side_get_owner(sp8) != 0) + { + gSprites[sp[5 - i]].data1 = 7 * i; + gSprites[sp[5 - i]].data3 = 0; + gSprites[sp[5 - i]].data4 = 0; + gSprites[sp[5 - i]].callback = sub_8045110; + } + else + { + gSprites[sp[i]].data1 = 7 * i; + gSprites[sp[i]].data3 = 0; + gSprites[sp[i]].data4 = 0; + gSprites[sp[i]].callback = sub_8045110; + } + } + gSprites[r10].data0 /= 2; + gSprites[r10].data1 = 0; + gSprites[r10].callback = sub_8045048; + SetSubspriteTables(&gSprites[r10], gSubspriteTables_820A6EC); + gTasks[taskId].func = sub_8044E74; + } + else + { + gTasks[taskId].func = sub_8044F70; + } +} + +static void sub_8044E74(u8 taskId) +{ + u16 temp = gTasks[taskId].data[11]++; + + if ((temp & 1) == 0) + { + gTasks[taskId].data[15]--; + if (gTasks[taskId].data[15] < 0) + return; + REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8); + } + if (gTasks[taskId].data[15] == 0) + gTasks[taskId].func = sub_8044ECC; +} + +static void sub_8044ECC(u8 taskId) +{ + u8 sp[6]; + s32 i; + + gTasks[taskId].data[15]--; + if (gTasks[taskId].data[15] == -1) + { + u8 var = gTasks[taskId].data[1]; + + for (i = 0; i < 6; i++) + sp[i] = gTasks[taskId].data[3 + i]; + DestroySpriteAndFreeResources(&gSprites[var]); + DestroySpriteAndFreeResources(&gSprites[sp[0]]); + for (i = 1; i < 6; i++) + DestroySprite(&gSprites[sp[i]]); + } + else if (gTasks[taskId].data[15] == -3) + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyTask(taskId); + } +} + +static void sub_8044F70(u8 taskId) +{ + u8 sp[6]; + s32 i; + + gTasks[taskId].data[15]--; + // Same as above function except with this check. + if (gTasks[taskId].data[15] >= 0) + { + REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8); + } + else if (gTasks[taskId].data[15] == -1) + { + u8 var = gTasks[taskId].data[1]; + + for (i = 0; i < 6; i++) + sp[i] = gTasks[taskId].data[3 + i]; + DestroySpriteAndFreeResources(&gSprites[var]); + DestroySpriteAndFreeResources(&gSprites[sp[0]]); + for (i = 1; i < 6; i++) + DestroySprite(&gSprites[sp[i]]); + } + else if (gTasks[taskId].data[15] == -3) + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyTask(taskId); + } +} + +void sub_8045030(struct Sprite *sprite) +{ + if (sprite->pos2.x != 0) + sprite->pos2.x += sprite->data0; +} + +static void sub_8045048(struct Sprite *sprite) +{ + sprite->data1 += 32; + if (sprite->data0 > 0) + sprite->pos2.x += sprite->data1 >> 4; + else + sprite->pos2.x -= sprite->data1 >> 4; + sprite->data1 &= 0xF; +} + +void sub_804507C(struct Sprite *sprite) +{ + u8 r3; + u16 r2; + s8 pan; + + if (sprite->data1 > 0) + { + sprite->data1--; + return; + } + r3 = sprite->data2; + r2 = sprite->data3; + r2 += 56; + sprite->data3 = r2 & 0xFFF0; + if (r3 != 0) + { + sprite->pos2.x += r2 >> 4; + if (sprite->pos2.x > 0) + sprite->pos2.x = 0; + } + else + { + sprite->pos2.x -= r2 >> 4; + if (sprite->pos2.x < 0) + sprite->pos2.x = 0; + } + if (sprite->pos2.x == 0) + { + pan = 63; + if (r3 != 0) + pan = -64; + if (sprite->data7 != 0) + PlaySE2WithPanning(SE_TB_KARA, pan); + else + PlaySE1WithPanning(SE_TB_KON, pan); + sprite->callback = SpriteCallbackDummy; + } +} + +static void sub_8045110(struct Sprite *sprite) +{ + u8 r0; + u16 r2; + + if (sprite->data1 > 0) + { + sprite->data1--; + return; + } + r0 = sprite->data2; + r2 = sprite->data3; + r2 += 56; + sprite->data3 = r2 & 0xFFF0; + if (r0 != 0) + sprite->pos2.x += r2 >> 4; + else + sprite->pos2.x -= r2 >> 4; + if (sprite->pos2.x + sprite->pos1.x > 248 + || sprite->pos2.x + sprite->pos1.x < -8) + { + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + } +} + +void sub_8045180(struct Sprite *sprite) +{ + u8 spriteId = sprite->data0; + + sprite->pos2.x = gSprites[spriteId].pos2.x; + sprite->pos2.y = gSprites[spriteId].pos2.y; +} + +static void sub_80451A0(u8 a, struct Pokemon *pkmn) +{ + u8 nickname[POKEMON_NAME_LENGTH]; + u8 gender; + u16 species; + u8 language; + u8 *ptr; + s32 i; + s32 _7; + u8 *const *r1; + + StringCopy(gUnknown_020238CC, gUnknown_0820A8B0); + GetMonData(pkmn, MON_DATA_NICKNAME, nickname); + StringGetEnd10(nickname); + ptr = StringCopy(gUnknown_020238CC + 3, nickname); + ptr[0] = EXT_CTRL_CODE_BEGIN; + ptr[1] = 3; + ptr[2] = 2; + ptr[3] = EXT_CTRL_CODE_BEGIN; + ptr[4] = 1; + ptr += 5; + gender = GetMonGender(pkmn); + species = GetMonData(pkmn, MON_DATA_SPECIES); + language = GetMonData(pkmn, MON_DATA_LANGUAGE); + if (sub_8040D3C(species, nickname, language)) + gender = 100; + switch (gender) + { + default: + ptr[0] = 0xB; + ptr[1] = EOS; + ptr += 1; + break; + case MON_MALE: + ptr[0] = 0xB; + ptr[1] = CHAR_MALE; + ptr[2] = EOS; + ptr += 2; + break; + case MON_FEMALE: + ptr[0] = 0xA; + ptr[1] = CHAR_FEMALE; + ptr[2] = EOS; + ptr += 2; + break; + } + ptr[0] = EXT_CTRL_CODE_BEGIN; + ptr[1] = 0x13; + ptr[2] = 0x37; + ptr[3] = EOS; + ptr = (u8 *)0x02000520 + battle_get_per_side_status(gSprites[a].data6) * 0x180; + sub_80034D4(ptr, gUnknown_020238CC); + + i = 0; + _7 = 7; + if (GetMonData(pkmn, MON_DATA_LANGUAGE) == 1 + && GetMonData(pkmn, MON_DATA_IS_EGG) == 0) + { + u8 *p = gUnknown_020238CC; + + while (*p != EOS) + { + if (*p == EXT_CTRL_CODE_BEGIN) + { + p += GetExtCtrlCodeLength(p[1]) + 1; + } + else + { + u8 r0; + + if ((*p >= 0x37 && *p <= 0x4A) || (*p >= 0x87 && *p <= 0x9A)) + r0 = 0x2C; + else if ((*p >= 0x4B && *p <= 0x4F) || (*p >= 0x9B && *p <= 0x9F)) + r0 = 0x2D; + else + r0 = 0x2B; + + CpuCopy32(sub_8043CDC(r0), ptr + 0x40 * i, 32); + i++; + p++; + } + } + } + + for (; i < _7; i++) + CpuCopy32(sub_8043CDC(0x2B), ptr + 64 * i, 32); + + if (battle_side_get_owner(gSprites[a].data6) == 0 && !IsDoubleBattle()) + { + r1 = (u8 *const *)gUnknown_0820A8B4; + for (i = 0; i < _7; i++) + { + u8 *r4 = r1[i]; + + r4 += gSprites[a].oam.tileNum * 32; + CpuCopy32(ptr, r4, 32); + ptr += 32; + + r4 += 0x100; + CpuCopy32(ptr, r4, 32); + ptr += 32; + } + } + else + { + if (battle_side_get_owner(gSprites[a].data6) == 0) + r1 = (u8 *const *)gUnknown_0820A904; + else + r1 = (u8 *const *)gUnknown_0820A8DC; + for (i = 0; i < _7; i++) + { + u8 *r4 = r1[i]; + + r4 += gSprites[a].oam.tileNum * 32; + CpuCopy32(ptr, r4, 32); + ptr += 32; + + r4 += 0x100; + CpuCopy32(ptr, r4, 32); + ptr += 32; + } + } +} + +static void sub_8045458(u8 a, u8 b) +{ + u8 r4; + + if (gBattleTypeFlags & 0x200) + return; + if (gBattleTypeFlags & 8) + return; + + r4 = gSprites[a].data6; + if (battle_side_get_owner(r4) != 0) + { + u16 species = GetMonData(&gEnemyParty[gUnknown_02024A6A[r4]], MON_DATA_SPECIES); + if (sub_8090D90(SpeciesToNationalPokedexNum(species), 1) != 0) + { + r4 = gSprites[a].data5; + if (b != 0) + CpuCopy32(sub_8043CDC(0x46), (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); + else + CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); + } + } +} + +static void draw_status_ailment_maybe(u8 a) +{ + s32 r4; + s32 r4_2; + u8 r7; + u8 r10; + s16 r8; + const u8 *r6; + u8 r0; + s32 i; + + r7 = gSprites[a].data6; + r10 = gSprites[a].data5; + if (battle_side_get_owner(r7) == 0) + { + r4 = GetMonData(&gPlayerParty[gUnknown_02024A6A[r7]], MON_DATA_STATUS); + if (!IsDoubleBattle()) + r8 = 0x1A; + else + r8 = 0x12; + } + else + { + r4 = GetMonData(&gEnemyParty[gUnknown_02024A6A[r7]], MON_DATA_STATUS); + r8 = 0x11; + } + if (r4 & 7) + { + r6 = sub_8043CDC(sub_80457E8(0x1B, r7)); + r0 = 2; + } + else if (r4 & 0x88) + { + r6 = sub_8043CDC(sub_80457E8(0x15, r7)); + r0 = 0; + } + else if (r4 & 0x10) + { + r6 = sub_8043CDC(sub_80457E8(0x21, r7)); + r0 = 4; + } + else if (r4 & 0x20) + { + r6 = sub_8043CDC(sub_80457E8(0x1E, r7)); + r0 = 3; + } + else if (r4 & 0x40) + { + r6 = sub_8043CDC(sub_80457E8(0x18, r7)); + r0 = 1; + } + else + { + r6 = sub_8043CDC(0x27); + + for (i = 0; i < 3; i++) + CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32), 32); + + if (!ewram17800[r7].bit_4) + CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 64); + + sub_8045458(a, 1); + return; + } + + r4_2 = gSprites[a].oam.paletteNum * 16; + r4_2 += r7 + 12; + // I don't like writing the array index like this, but I can't get it to match otherwise. + FillPalette(r0[gBattleInterfaceStatusIcons_DynPal], r4_2 + 0x100, 2); + CpuCopy16(gPlttBufferUnfaded + 0x100 + r4_2, (void *)(OBJ_PLTT + r4_2 * 2), 2); + CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32), 96); + if (IsDoubleBattle() == TRUE || battle_side_get_owner(r7) == TRUE) + { + if (!ewram17800[r7].bit_4) + { + CpuCopy32(sub_8043CDC(0), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 32); + CpuCopy32(sub_8043CDC(0x41), (void *)(OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32), 32); + } + } + sub_8045458(a, 0); +} + +static u8 sub_80457E8(u8 a, u8 b) +{ + u8 ret = a; + + switch (a) + { + case 21: + if (b == 0) + ret = 21; + else if (b == 1) + ret = 71; + else if (b == 2) + ret = 86; + else + ret = 101; + break; + case 24: + if (b == 0) + ret = 24; + else if (b == 1) + ret = 74; + else if (b == 2) + ret = 89; + else + ret = 104; + break; + case 27: + if (b == 0) + ret = 27; + else if (b == 1) + ret = 77; + else if (b == 2) + ret = 92; + else + ret = 107; + break; + case 30: + if (b == 0) + ret = 30; + else if (b == 1) + ret = 80; + else if (b == 2) + ret = 95; + else + ret = 110; + break; + case 33: + if (b == 0) + ret = 33; + else if (b == 1) + ret = 83; + else if (b == 2) + ret = 98; + else + ret = 113; + break; + } + return ret; +} + +static void sub_80458B0(u8 a) +{ + u8 *r6; + u8 r8; + u8 i; + s32 r7; + u8 *addr; + + r6 = (u8 *)0x02000520 + battle_get_per_side_status(gSprites[a].data6) * 0x180; + r8 = 7; + sub_80034D4(r6, BattleText_SafariBalls); + for (i = 0; i < r8; i++) + CpuCopy32(sub_8043CDC(0x2B), r6 + i * 64, 32); + for (r7 = 3; r7 < 3 + r8; r7++) + { + addr = (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32); + CpuCopy32(r6, addr, 32); + r6 += 32; + + addr = (void *)(OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32); + CpuCopy32(r6, addr, 32); + r6 += 32; + } + +} + +static void sub_8045998(u8 a) +{ + u8 *r7; + u8 status; + s32 r6; + s32 i; + + r7 = StringCopy(gUnknown_020238CC, BattleText_SafariBallsLeft); + r7 = sub_8003504(r7, gNumSafariBalls, 10, 1); + StringAppend(r7, BattleText_HighlightRed); + status = battle_get_per_side_status(gSprites[a].data6); + r7 = (u8 *)0x02000520 + status * 0x180; + r6 = 5; + sub_80034D4(r7, gUnknown_020238CC); + r7 = (u8 *)0x02000520 + status * 0x180 + 32; + for (i = 6; i < 6 + r6; i++) + { + CpuCopy32(r7, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32), 32); + r7 += 64; + } +} + +void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) +{ + u8 r10; + u32 maxhp; + u32 currhp; + + r10 = gSprites[a].data6; + if (battle_side_get_owner(r10) == 0) + { + if (c == 3 || c == 0) + sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); + if (c == 1 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_HP), 0); + if (c == 2 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_MAX_HP), 1); + if (c == 5 || c == 0) + { + load_gfxc_health_bar(0); + maxhp = GetMonData(pkmn, MON_DATA_MAX_HP); + currhp = GetMonData(pkmn, MON_DATA_HP); + sub_8043D84(r10, a, maxhp, currhp, 0); + sub_8045C78(r10, a, 0, 0); + } + if (!IsDoubleBattle() && (c == 6 || c == 0)) + { + u16 species; + u8 level; + u32 exp; + u32 var1; + u32 var2; + u32 currLevelExp; + + load_gfxc_health_bar(3); + species = GetMonData(pkmn, MON_DATA_SPECIES); + level = GetMonData(pkmn, MON_DATA_LEVEL); + exp = GetMonData(pkmn, MON_DATA_EXP); + currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; + var1 = exp - currLevelExp; + var2 = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; + sub_8043D84(r10, a, var2, var1, 0); + sub_8045C78(r10, a, 1, 0); + } + if (c == 4 || c == 0) + sub_80451A0(a, pkmn); + if (c == 9 || c == 0) + draw_status_ailment_maybe(a); + if (c == 10) + sub_80458B0(a); + if (c == 10 || c == 11) + sub_8045998(a); + } + else + { + if (c == 3 || c == 0) + sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); + if (c == 5 || c == 0) + { + load_gfxc_health_bar(0); + maxhp = GetMonData(pkmn, MON_DATA_MAX_HP); + currhp = GetMonData(pkmn, MON_DATA_HP); + sub_8043D84(r10, a, maxhp, currhp, 0); + sub_8045C78(r10, a, 0, 0); + } + if (c == 4 || c == 0) + sub_80451A0(a, pkmn); + if (c == 9 || c == 0) + draw_status_ailment_maybe(a); + } +} + +s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2) +{ + s32 r6; + + if (c == 0) + { + r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, 6, 1); + } + else + { + u16 r5; + s32 r8; + + r5 = GetScaledExpFraction(ewram17850[a].unk8, ewram17850[a].unkC, ewram17850[a].unk4, 8); + if (r5 == 0) + r5 = 1; + r8 = ewram17850[a].unkC; + r5 = ABS(r8 / r5); + r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, r8, &ewram17850[a].unk10, 8, r5); + } + if (c == 1 || (c == 0 && (!ewram17800[a].bit_4))) + sub_8045D58(a, c); + if (r6 == -1) + ewram17850[a].unk10 = 0; + return r6; +} + +static void sub_8045D58(u8 a, u8 b) +{ + u8 sp8[7]; + u8 r0; + u8 r8; + u8 i; + + switch (b) + { + case 0: + r0 = sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 6); + r8 = 3; + if (r0 <= 0x18) + { + r8 = 0x38; + if (r0 > 9) + r8 = 0x2F; + } + for (i = 0; i < 6; i++) + { + u8 r4 = gSprites[ewram17850[a].unk0].data5; + if (i < 2) + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32), 32); + else + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32), 32); + } + break; + case 1: + sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 8); + r0 = GetMonData(&gPlayerParty[gUnknown_02024A6A[a]], MON_DATA_LEVEL); + if (r0 == 100) + { + for (i = 0; i < 8; i++) + sp8[i] = 0; + } + for (i = 0; i < 8; i++) + { + if (i < 4) + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32), 32); + else + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32), 32); + } + break; + } +} + +static int sub_8045F58(s32 a, s32 b, int c, int *d, u8 e, u16 f) +{ + u8 r2 = e << 3; + int r6; + int ret; + + if (*d == -32768) + { + if (a < r2) + *d = b << 8; + else + *d = b; + } + //_08045F8A + b -= c; + if (b < 0) + b = 0; + else if (b > a) + b = a; + if (a < r2) + { + int var = *d >> 8; + + r6 = *d; + if (b == var && (r6 & 0xFF) == 0) + return -1; + } + else + { + r6 = *d; + if (b == r6) + return -1; + } + //_08045FC4 + if (a < r2) + { + int r0 = (a << 8) / r2; + + if (c < 0) + { + *d = r6 + r0; + ret = *d >> 8; + if (ret >= b) + { + *d = b << 8; + ret = b; + } + } + //_08045FE2 + else + { + *d = r6 - r0; + ret = *d >> 8; + if ((*d & 0xFF) > 0) + ret++; + if (ret <= b) + { + *d = b << 8; + ret = b; + } + } + } + else + { + //_08045FFE + if (c < 0) + { + *d += f; + if (*d > b) + *d = b; + ret = *d; + } + //_08046010 + else + { + *d -= f; + if (*d < b) + *d = b; + ret = *d; + } + } + return ret; +} + +static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f) +{ + s32 r5 = b - c; + u8 r3; + u8 i; + u8 r2; + + if (r5 < 0) + r5 = 0; + else if (r5 > a) + r5 = a; + r3 = f << 3; + for (i = 0; i < f; i++) + e[i] = 0; + if (a < r3) + r2 = *d * r3 / a >> 8; + else + r2 = *d * r3 / a; + r3 = r2; + if (r3 == 0 && r5 > 0) + { + e[0] = 1; + r3 = 1; + } + else + { + for (i = 0; i < f; i++) + { + if (r2 >= 8) + { + e[i] = 8; + } + else + { + e[i] = r2; + break; + } + r2 -= 8; + } + } + return r3; +} + +s16 sub_80460C8(struct UnknownStruct9 *a, int *b, void *c, int d) +{ + u16 r7; + s16 r1; + + r7 = sub_8045F58(a->unk0, a->unk4, a->unk8, b, 6, 1); + sub_8046128(a, b, c); + if (a->unk0 < 0x30) + r1 = *b >> 8; + else + r1 = *b; + do_nothing(a->unk0, r1, d); + return r7; +} + +static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c) +{ + u8 sp8[6]; + u16 sp10[6]; + u8 i; + + sub_804602C(a->unk0, a->unk4, a->unk8, b, (u8 *)sp8, 6); + for (i = 0; i < 6; i++) + sp10[i] = (a->unkC_0 << 12) | (a->unk10 + sp8[i]); + CpuCopy16(sp10, c, sizeof(sp10)); +} + +static u8 GetScaledExpFraction(int a, int b, int c, u8 d) +{ + u8 r7 = d * 8; + int r5 = a - b; + s8 r4; + s8 r0; + s32 result; + + if (r5 < 0) + r5 = 0; + else if (r5 > c) + r5 = c; + + r4 = a * r7 / c; + r0 = r5 * r7 / c; + result = r4 - r0; + return ABS(result); +} + +u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale) +{ + u8 result = hp * scale / maxhp; + + if (result == 0 && hp > 0) + return 1; + return result; +} + +int GetHPBarLevel(s16 hp, s16 maxhp) +{ + int result; + + if (hp == maxhp) + result = 4; + else + { + u8 fraction = GetScaledHPFraction(hp, maxhp, 48); + if (fraction > 24) + result = 3; + else if (fraction > 9) + result = 2; + else if (fraction > 0) + result = 1; + else + result = 0; + } + return result; +} diff --git a/src/battle_records.c b/src/battle_records.c new file mode 100644 index 000000000..3290bbebe --- /dev/null +++ b/src/battle_records.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "menu.h" + +extern const u8 gOtherText_BattleResults[]; +extern const u8 gOtherText_WinLoseDraw[]; + +void PrintLinkBattleWinsLossesDraws(void *); + +void PrintLinkBattleRecord(void *, u8); + +void ShowLinkBattleRecords(void) { + s32 i; + MenuDrawTextWindow(1, 0, 28, 18); + sub_8072BD8((u8 *) gOtherText_BattleResults, 0, 1, 240); + + PrintLinkBattleWinsLossesDraws(gSaveBlock1.linkBattleRecords); +#if ENGLISH + MenuPrint(gOtherText_WinLoseDraw, 12, 6); +#elif GERMAN + MenuPrint_PixelCoords((u8 *) gOtherText_WinLoseDraw, 88, 48, 1); +#endif + + for (i = 0; i < 5; i++) + { + PrintLinkBattleRecord(gSaveBlock1.linkBattleRecords[i], 6 + (i + 1) * 2); + } +} diff --git a/src/berry.c b/src/berry.c index 636028adf..6c12af053 100644 --- a/src/berry.c +++ b/src/berry.c @@ -13,6 +13,51 @@ #define FIRST_BERRY ITEM_CHERI_BERRY #define LAST_BERRY ITEM_ENIGMA_BERRY +#ifdef ENGLISH +#define NAME_CHERI_BERRY _("CHERI") +#define NAME_CHESTO_BERRY _("CHESTO") +#define NAME_PECHA_BERRY _("PECHA") +#define NAME_RAWST_BERRY _("RAWST") +#define NAME_ASPEAR_BERRY _("ASPEAR") +#define NAME_LEPPA_BERRY _("LEPPA") +#define NAME_ORAN_BERRY _("ORAN") +#define NAME_PERSIM_BERRY _("PERSIM") +#define NAME_LUM_BERRY _("LUM") +#define NAME_SITRUS_BERRY _("SITRUS") +#define NAME_FIGY_BERRY _("FIGY") +#define NAME_WIKI_BERRY _("WIKI") +#define NAME_MAGO_BERRY _("MAGO") +#define NAME_AGUAV_BERRY _("AGUAV") +#define NAME_IAPAPA_BERRY _("IAPAPA") +#define NAME_RAZZ_BERRY _("RAZZ") +#define NAME_BLUK_BERRY _("BLUK") +#define NAME_NANAB_BERRY _("NANAB") +#define NAME_WEPEAR_BERRY _("WEPEAR") +#define NAME_PINAP_BERRY _("PINAP") +#define NAME_POMEG_BERRY _("POMEG") +#define NAME_KELPSY_BERRY _("KELPSY") +#define NAME_QUALOT_BERRY _("QUALOT") +#define NAME_HONDEW_BERRY _("HONDEW") +#define NAME_GREPA_BERRY _("GREPA") +#define NAME_TAMATO_BERRY _("TAMATO") +#define NAME_CORNN_BERRY _("CORNN") +#define NAME_MAGOST_BERRY _("MAGOST") +#define NAME_RABUTA_BERRY _("RABUTA") +#define NAME_NOMEL_BERRY _("NOMEL") +#define NAME_SPELON_BERRY _("SPELON") +#define NAME_PAMTRE_BERRY _("PAMTRE") +#define NAME_WATMEL_BERRY _("WATMEL") +#define NAME_DURIN_BERRY _("DURIN") +#define NAME_BELUE_BERRY _("BELUE") +#define NAME_LIECHI_BERRY _("LIECHI") +#define NAME_GANLON_BERRY _("GANLON") +#define NAME_SALAC_BERRY _("SALAC") +#define NAME_PETAYA_BERRY _("PETAYA") +#define NAME_APICOT_BERRY _("APICOT") +#define NAME_LANSAT_BERRY _("LANSAT") +#define NAME_STARF_BERRY _("STARF") +#define NAME_ENIGMA_BERRY _("ENIGMA") + const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are"); @@ -99,11 +144,143 @@ const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the" const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage."); const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY."); const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars."); +#elif defined(GERMAN) +#define NAME_CHERI_BERRY _("AMRENA") +#define NAME_CHESTO_BERRY _("MARON") +#define NAME_PECHA_BERRY _("PIRSIF") +#define NAME_RAWST_BERRY _("FRAGIA") +#define NAME_ASPEAR_BERRY _("WILBIR") +#define NAME_LEPPA_BERRY _("JONAGO") +#define NAME_ORAN_BERRY _("SINEL") +#define NAME_PERSIM_BERRY _("PERSIM") +#define NAME_LUM_BERRY _("PRUNUS") +#define NAME_SITRUS_BERRY _("TSITRU") +#define NAME_FIGY_BERRY _("GIEFE") +#define NAME_WIKI_BERRY _("WIKI") +#define NAME_MAGO_BERRY _("MAGO") +#define NAME_AGUAV_BERRY _("GAUVE") +#define NAME_IAPAPA_BERRY _("YAPA") +#define NAME_RAZZ_BERRY _("HIMMIH") +#define NAME_BLUK_BERRY _("MORB") +#define NAME_NANAB_BERRY _("NANAB") +#define NAME_WEPEAR_BERRY _("NIRBE") +#define NAME_PINAP_BERRY _("SANANA") +#define NAME_POMEG_BERRY _("GRANA") +#define NAME_KELPSY_BERRY _("SETANG") +#define NAME_QUALOT_BERRY _("QUALOT") +#define NAME_HONDEW_BERRY _("HONMEL") +#define NAME_GREPA_BERRY _("LABRUS") +#define NAME_TAMATO_BERRY _("TAMOT") +#define NAME_CORNN_BERRY _("SAIM") +#define NAME_MAGOST_BERRY _("MAGOST") +#define NAME_RABUTA_BERRY _("RABUTA") +#define NAME_NOMEL_BERRY _("TRONZI") +#define NAME_SPELON_BERRY _("KIWAN") +#define NAME_PAMTRE_BERRY _("PALLM") +#define NAME_WATMEL_BERRY _("WASMEL") +#define NAME_DURIN_BERRY _("DURIN") +#define NAME_BELUE_BERRY _("MYRTIL") +#define NAME_LIECHI_BERRY _("LYDZI") +#define NAME_GANLON_BERRY _("LINGAN") +#define NAME_SALAC_BERRY _("SALKA") +#define NAME_PETAYA_BERRY _("TAHAY") +#define NAME_APICOT_BERRY _("APIKO") +#define NAME_LANSAT_BERRY _("LANSAT") +#define NAME_STARF_BERRY _("KRAMBO") +#define NAME_ENIGMA_BERRY _("ENIGMA") + +const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen."); +const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf."); +const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und"); +const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!"); +const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat."); +const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!"); +const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,"); +const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter."); +const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr"); +const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!"); +const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und"); +const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater."); +const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-"); +const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag."); +const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE"); +const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell."); +const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-"); +const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen."); +const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große"); +const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack."); +const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist"); +const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen."); +const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,"); +const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können."); +const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr"); +const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie."); +const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,"); +const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können."); +const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer."); +const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen."); +const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas"); +const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden."); +const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt"); +const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz."); +const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der"); +const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß."); +const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm"); +const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich."); +const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht."); +const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer."); +const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie"); +const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN."); +const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine"); +const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume."); +const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders"); +const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden."); +const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE."); +const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft."); +const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder"); +const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!"); +const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die"); +const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen."); +const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst"); +const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt."); +const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-"); +const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist."); +const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit"); +const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!"); +const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die"); +const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!"); +const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr"); +const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!"); +const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst"); +const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort."); +const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß."); +const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß."); +const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so"); +const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst."); +const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem"); +const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen."); +const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres."); +const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes."); +const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels."); +const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens."); +const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann"); +const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist."); +const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu"); +const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude."); +const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der"); +const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?"); +const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint"); +const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen."); +#endif const struct Berry gBerries[] = { { - .name = _("CHERI"), + .name = NAME_CHERI_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 20, .maxYield = 3, @@ -119,7 +296,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("CHESTO"), + .name = NAME_CHESTO_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 80, .maxYield = 3, @@ -135,7 +312,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("PECHA"), + .name = NAME_PECHA_BERRY, .firmness = BERRY_FIRMNESS_VERY_SOFT, .size = 40, .maxYield = 3, @@ -151,7 +328,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("RAWST"), + .name = NAME_RAWST_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 32, .maxYield = 3, @@ -167,7 +344,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("ASPEAR"), + .name = NAME_ASPEAR_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 50, .maxYield = 3, @@ -183,7 +360,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("LEPPA"), + .name = NAME_LEPPA_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 28, .maxYield = 3, @@ -199,7 +376,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("ORAN"), + .name = NAME_ORAN_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 35, .maxYield = 3, @@ -215,7 +392,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("PERSIM"), + .name = NAME_PERSIM_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 47, .maxYield = 3, @@ -231,7 +408,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("LUM"), + .name = NAME_LUM_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 34, .maxYield = 2, @@ -247,7 +424,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("SITRUS"), + .name = NAME_SITRUS_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 95, .maxYield = 3, @@ -263,7 +440,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("FIGY"), + .name = NAME_FIGY_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 100, .maxYield = 3, @@ -279,7 +456,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("WIKI"), + .name = NAME_WIKI_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 115, .maxYield = 3, @@ -295,7 +472,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("MAGO"), + .name = NAME_MAGO_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 126, .maxYield = 3, @@ -311,7 +488,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("AGUAV"), + .name = NAME_AGUAV_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 64, .maxYield = 3, @@ -327,7 +504,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("IAPAPA"), + .name = NAME_IAPAPA_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 223, .maxYield = 3, @@ -343,7 +520,7 @@ const struct Berry gBerries[] = .smoothness = 25, }, { - .name = _("RAZZ"), + .name = NAME_RAZZ_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 120, .maxYield = 6, @@ -359,7 +536,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("BLUK"), + .name = NAME_BLUK_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 108, .maxYield = 6, @@ -375,7 +552,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("NANAB"), + .name = NAME_NANAB_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 77, .maxYield = 6, @@ -391,7 +568,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("WEPEAR"), + .name = NAME_WEPEAR_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 74, .maxYield = 6, @@ -407,7 +584,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("PINAP"), + .name = NAME_PINAP_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 80, .maxYield = 6, @@ -423,7 +600,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("POMEG"), + .name = NAME_POMEG_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 135, .maxYield = 6, @@ -439,7 +616,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("KELPSY"), + .name = NAME_KELPSY_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 150, .maxYield = 6, @@ -455,7 +632,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("QUALOT"), + .name = NAME_QUALOT_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 110, .maxYield = 6, @@ -471,7 +648,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("HONDEW"), + .name = NAME_HONDEW_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 162, .maxYield = 6, @@ -487,7 +664,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("GREPA"), + .name = NAME_GREPA_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 149, .maxYield = 6, @@ -503,7 +680,7 @@ const struct Berry gBerries[] = .smoothness = 20, }, { - .name = _("TAMATO"), + .name = NAME_TAMATO_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 200, .maxYield = 4, @@ -519,7 +696,7 @@ const struct Berry gBerries[] = .smoothness = 30, }, { - .name = _("CORNN"), + .name = NAME_CORNN_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 75, .maxYield = 4, @@ -535,7 +712,7 @@ const struct Berry gBerries[] = .smoothness = 30, }, { - .name = _("MAGOST"), + .name = NAME_MAGOST_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 140, .maxYield = 4, @@ -551,7 +728,7 @@ const struct Berry gBerries[] = .smoothness = 30, }, { - .name = _("RABUTA"), + .name = NAME_RABUTA_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 226, .maxYield = 4, @@ -567,7 +744,7 @@ const struct Berry gBerries[] = .smoothness = 30, }, { - .name = _("NOMEL"), + .name = NAME_NOMEL_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 285, .maxYield = 4, @@ -583,7 +760,7 @@ const struct Berry gBerries[] = .smoothness = 30, }, { - .name = _("SPELON"), + .name = NAME_SPELON_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 133, .maxYield = 2, @@ -599,7 +776,7 @@ const struct Berry gBerries[] = .smoothness = 70, }, { - .name = _("PAMTRE"), + .name = NAME_PAMTRE_BERRY, .firmness = BERRY_FIRMNESS_VERY_SOFT, .size = 244, .maxYield = 2, @@ -615,7 +792,7 @@ const struct Berry gBerries[] = .smoothness = 70, }, { - .name = _("WATMEL"), + .name = NAME_WATMEL_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 250, .maxYield = 2, @@ -631,7 +808,7 @@ const struct Berry gBerries[] = .smoothness = 70, }, { - .name = _("DURIN"), + .name = NAME_DURIN_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 280, .maxYield = 2, @@ -647,7 +824,7 @@ const struct Berry gBerries[] = .smoothness = 70, }, { - .name = _("BELUE"), + .name = NAME_BELUE_BERRY, .firmness = BERRY_FIRMNESS_VERY_SOFT, .size = 300, .maxYield = 2, @@ -663,7 +840,7 @@ const struct Berry gBerries[] = .smoothness = 70, }, { - .name = _("LIECHI"), + .name = NAME_LIECHI_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 111, .maxYield = 2, @@ -679,7 +856,7 @@ const struct Berry gBerries[] = .smoothness = 80, }, { - .name = _("GANLON"), + .name = NAME_GANLON_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 33, .maxYield = 2, @@ -695,7 +872,7 @@ const struct Berry gBerries[] = .smoothness = 80, }, { - .name = _("SALAC"), + .name = NAME_SALAC_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 95, .maxYield = 2, @@ -711,7 +888,7 @@ const struct Berry gBerries[] = .smoothness = 80, }, { - .name = _("PETAYA"), + .name = NAME_PETAYA_BERRY, .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 237, .maxYield = 2, @@ -727,7 +904,7 @@ const struct Berry gBerries[] = .smoothness = 80, }, { - .name = _("APICOT"), + .name = NAME_APICOT_BERRY, .firmness = BERRY_FIRMNESS_HARD, .size = 75, .maxYield = 2, @@ -743,7 +920,7 @@ const struct Berry gBerries[] = .smoothness = 80, }, { - .name = _("LANSAT"), + .name = NAME_LANSAT_BERRY, .firmness = BERRY_FIRMNESS_SOFT, .size = 97, .maxYield = 2, @@ -759,7 +936,7 @@ const struct Berry gBerries[] = .smoothness = 30, }, { - .name = _("STARF"), + .name = NAME_STARF_BERRY, .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 153, .maxYield = 2, @@ -775,7 +952,7 @@ const struct Berry gBerries[] = .smoothness = 30, }, { - .name = _("ENIGMA"), + .name = NAME_ENIGMA_BERRY, .firmness = BERRY_FIRMNESS_UNKNOWN, .size = 0, .maxYield = 2, diff --git a/src/birch_pc.c b/src/birch_pc.c new file mode 100644 index 000000000..89eafc0ce --- /dev/null +++ b/src/birch_pc.c @@ -0,0 +1,114 @@ +#include "global.h" +#include "asm.h" +#include "event_data.h" +#include "field_message_box.h" +#include "pokedex.h" +#include "species.h" + +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +extern const u8 gUnknown_081C4520[]; +extern const u8 gUnknown_081C456A[]; +extern const u8 gUnknown_081C45B0[]; +extern const u8 gUnknown_081C45F9[]; +extern const u8 gUnknown_081C4648[]; +extern const u8 gUnknown_081C467E[]; +extern const u8 gUnknown_081C46B9[]; +extern const u8 gUnknown_081C46FE[]; +extern const u8 gUnknown_081C4747[]; +extern const u8 gUnknown_081C4780[]; +extern const u8 gUnknown_081C47DF[]; +extern const u8 gUnknown_081C4828[]; +extern const u8 gUnknown_081C4863[]; +extern const u8 gUnknown_081C489C[]; +extern const u8 gUnknown_081C48EB[]; +extern const u8 gUnknown_081C4936[]; +extern const u8 gUnknown_081C49A2[]; +extern const u8 gUnknown_081C4A06[]; +extern const u8 gUnknown_081C4A4F[]; +extern const u8 gUnknown_081C4A91[]; +extern const u8 gUnknown_081C4ADA[]; + +bool16 ScriptGetPokedexInfo(void) +{ + if (!gSpecialVar_0x8004) + { + gSpecialVar_0x8005 = GetHoennPokedexCount(0); + gSpecialVar_0x8006 = GetHoennPokedexCount(1); + } + else + { + gSpecialVar_0x8005 = GetNationalPokedexCount(0); + gSpecialVar_0x8006 = GetNationalPokedexCount(1); + } + + return IsNationalPokedexEnabled(); +} + +const u8 *GetPokedexRatingText(u16 count) +{ + if (count < 10) + return gUnknown_081C4520; + if (count < 20) + return gUnknown_081C456A; + if (count < 30) + return gUnknown_081C45B0; + if (count < 40) + return gUnknown_081C45F9; + if (count < 50) + return gUnknown_081C4648; + if (count < 60) + return gUnknown_081C467E; + if (count < 70) + return gUnknown_081C46B9; + if (count < 80) + return gUnknown_081C46FE; + if (count < 90) + return gUnknown_081C4747; + if (count < 100) + return gUnknown_081C4780; + if (count < 110) + return gUnknown_081C47DF; + if (count < 120) + return gUnknown_081C4828; + if (count < 130) + return gUnknown_081C4863; + if (count < 140) + return gUnknown_081C489C; + if (count < 150) + return gUnknown_081C48EB; + if (count < 160) + return gUnknown_081C4936; + if (count < 170) + return gUnknown_081C49A2; + if (count < 180) + return gUnknown_081C4A06; + if (count < 190) + return gUnknown_081C4A4F; + if (count < 200) + return gUnknown_081C4A91; + if (count == 200) + { + if (sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + || sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) + return gUnknown_081C4A91; + return gUnknown_081C4ADA; + } + if (count == 201) + { + if (sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + && sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) + return gUnknown_081C4A91; + return gUnknown_081C4ADA; + } + if (count == 202) + return gUnknown_081C4ADA; + return gUnknown_081C4520; +} + +void ShowPokedexRatingMessage(void) +{ + ShowFieldMessage(GetPokedexRatingText(gSpecialVar_0x8004)); +} diff --git a/src/credits.c b/src/credits.c index 7685a033d..17d3507aa 100644 --- a/src/credits.c +++ b/src/credits.c @@ -7,6 +7,7 @@ #include "palette.h" #include "songs.h" #include "sound.h" +#include "trig.h" asm(".set REG_BASE, 0x4000000"); asm(".set OFFSET_REG_BLDCNT, 0x50"); @@ -141,14 +142,13 @@ struct CreditsEntry u8 *text; }; -extern u8 unk_2000000[]; +extern u8 ewram[]; -#define EWRAM_1F800 ((u16 *)(unk_2000000 + 0x1F800)) -#define HALL_OF_FAME_SHEET_0 ((u8 *)(unk_2000000 + 0x1E000)) -#define HALL_OF_FAME_SHEET_1 ((u8 *)(unk_2000000 + 0x1E800)) -#define HALL_OF_FAME_SHEET_2 ((u8 *)(unk_2000000 + 0x1F000)) - -extern struct Unk201C000 unk_201C000; +#define EWRAM_1F800 ((u16 *)(ewram + 0x1F800)) +#define HALL_OF_FAME_SHEET_0 ((u8 *)(ewram + 0x1E000)) +#define HALL_OF_FAME_SHEET_1 ((u8 *)(ewram + 0x1E800)) +#define HALL_OF_FAME_SHEET_2 ((u8 *)(ewram + 0x1F000)) +#define ewram1c000 (*(struct Unk201C000 *)(ewram + 0x1C000)) extern struct HallOfFame gHallOfFame; extern u8 unk_201e800[0x800]; @@ -162,7 +162,7 @@ extern u16 gUnknown_02039322; // TASK A extern u8 gUnknown_02039324; extern u8 gUnknown_02039325; extern u16 gUnknown_02039358; -extern u16 gUnknown_0203935A; +extern s16 gUnknown_0203935A; extern s16 gUnknown_0203935C; extern u8 gReservedSpritePaletteCount; @@ -328,7 +328,7 @@ void sub_81439D0(void) SetMainCallback2(sub_814395C); gUnknown_02039325 = 0; - c000 = &unk_201C000; + c000 = &ewram1c000; sub_81458DC(); @@ -818,11 +818,9 @@ static u8 sub_8144454(u8 page, u8 taskIdA) #define UNK_DEFINE_44 (0x44) -#define EWRAM_1C000 (*(struct Unk201C000 *)(unk_2000000 + 0x1C000)) - static void task_d_8144514(u8 taskIdD) { - struct Unk201C000 *r6 = &EWRAM_1C000; + struct Unk201C000 *r6 = &ewram1c000; u8 r2; switch (gTasks[taskIdD].data[TDD_STATE]) @@ -866,331 +864,87 @@ static void task_d_8144514(u8 taskIdD) } } -__attribute__((naked)) void task_c_8144664(u8 taskIdC) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r1, _0814468C @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r2, 0x8\n\ - ldrsh r0, [r0, r2]\n\ - adds r6, r1, 0\n\ - cmp r0, 0x32\n\ - bls _08144680\n\ - b _0814492C\n\ -_08144680:\n\ - lsls r0, 2\n\ - ldr r1, _08144690 @ =_08144694\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0814468C: .4byte gTasks\n\ -_08144690: .4byte _08144694\n\ - .align 2, 0\n\ -_08144694:\n\ - .4byte _08144760\n\ - .4byte _08144784\n\ - .4byte _081447D8\n\ - .4byte _081447F0\n\ - .4byte _0814482C\n\ - .4byte _08144850\n\ - .4byte _0814489C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _081448A8\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _081448C8\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _081448EC\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _0814492C\n\ - .4byte _08144920\n\ -_08144760:\n\ - lsls r4, r5, 2\n\ - adds r4, r5\n\ - lsls r4, 3\n\ - adds r4, r6\n\ - ldrh r0, [r4, 0x12]\n\ - lsls r0, 16\n\ - asrs r0, 17\n\ - movs r1, 0x7F\n\ - ands r0, r1\n\ - movs r1, 0xC\n\ - bl Sin\n\ - ldr r1, _08144780 @ =gUnknown_0203935A\n\ - strh r0, [r1]\n\ - b _081447A8\n\ - .align 2, 0\n\ -_08144780: .4byte gUnknown_0203935A\n\ -_08144784:\n\ - ldr r7, _081447B0 @ =gUnknown_0203935A\n\ - movs r3, 0\n\ - ldrsh r4, [r7, r3]\n\ - cmp r4, 0\n\ - beq _081447B4\n\ - lsls r4, r5, 2\n\ - adds r4, r5\n\ - lsls r4, 3\n\ - adds r4, r6\n\ - ldrh r0, [r4, 0x12]\n\ - lsls r0, 16\n\ - asrs r0, 17\n\ - movs r1, 0x7F\n\ - ands r0, r1\n\ - movs r1, 0xC\n\ - bl Sin\n\ - strh r0, [r7]\n\ -_081447A8:\n\ - ldrh r0, [r4, 0x12]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x12]\n\ - b _0814492C\n\ - .align 2, 0\n\ -_081447B0: .4byte gUnknown_0203935A\n\ -_081447B4:\n\ - ldr r3, _081447D4 @ =gSprites\n\ - lsls r1, r5, 2\n\ - adds r1, r5\n\ - lsls r1, 3\n\ - adds r1, r6\n\ - movs r0, 0xC\n\ - ldrsh r2, [r1, r0]\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - movs r2, 0x2\n\ - strh r2, [r0, 0x2E]\n\ - strh r4, [r1, 0x12]\n\ - b _08144848\n\ - .align 2, 0\n\ -_081447D4: .4byte gSprites\n\ -_081447D8:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r1, r0, r6\n\ - ldrh r2, [r1, 0x12]\n\ - movs r3, 0x12\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0x3F\n\ - bgt _08144848\n\ - adds r0, r2, 0x1\n\ - strh r0, [r1, 0x12]\n\ - b _08144866\n\ -_081447F0:\n\ - ldr r3, _08144828 @ =gSprites\n\ - lsls r2, r5, 2\n\ - adds r2, r5\n\ - lsls r2, 3\n\ - adds r2, r6\n\ - movs r0, 0xC\n\ - ldrsh r1, [r2, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - movs r1, 0x3\n\ - strh r1, [r0, 0x2E]\n\ - movs r0, 0xE\n\ - ldrsh r1, [r2, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x2E]\n\ - movs r0, 0x78\n\ - strh r0, [r2, 0x10]\n\ - ldrh r0, [r2, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r2, 0x8]\n\ - b _0814492C\n\ - .align 2, 0\n\ -_08144828: .4byte gSprites\n\ -_0814482C:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r1, r0, r6\n\ - ldrh r2, [r1, 0x10]\n\ - movs r3, 0x10\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0\n\ - beq _08144844\n\ - subs r0, r2, 0x1\n\ - strh r0, [r1, 0x10]\n\ - b _0814492C\n\ -_08144844:\n\ - movs r0, 0x40\n\ - strh r0, [r1, 0x12]\n\ -_08144848:\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - b _0814492C\n\ -_08144850:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r4, r0, r6\n\ - ldrh r1, [r4, 0x12]\n\ - movs r2, 0x12\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0\n\ - ble _0814487C\n\ - subs r0, r1, 0x1\n\ - strh r0, [r4, 0x12]\n\ -_08144866:\n\ - movs r1, 0x7F\n\ - ands r0, r1\n\ - movs r1, 0x14\n\ - bl Sin\n\ - ldr r1, _08144878 @ =gUnknown_0203935A\n\ - strh r0, [r1]\n\ - b _0814492C\n\ - .align 2, 0\n\ -_08144878: .4byte gUnknown_0203935A\n\ -_0814487C:\n\ - ldr r2, _08144898 @ =gSprites\n\ - movs r3, 0xC\n\ - ldrsh r1, [r4, r3]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x2E]\n\ - ldrh r0, [r4, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x8]\n\ - b _0814492C\n\ - .align 2, 0\n\ -_08144898: .4byte gSprites\n\ -_0814489C:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r6\n\ - movs r1, 0x32\n\ - b _0814492A\n\ -_081448A8:\n\ - ldr r3, _081448C4 @ =gSprites\n\ - lsls r1, r5, 2\n\ - adds r1, r5\n\ - lsls r1, 3\n\ - adds r1, r6\n\ - movs r0, 0xE\n\ - ldrsh r2, [r1, r0]\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - movs r2, 0x2\n\ - b _081448E0\n\ - .align 2, 0\n\ -_081448C4: .4byte gSprites\n\ -_081448C8:\n\ - ldr r3, _081448E8 @ =gSprites\n\ - lsls r1, r5, 2\n\ - adds r1, r5\n\ - lsls r1, 3\n\ - adds r1, r6\n\ - movs r0, 0xC\n\ - ldrsh r2, [r1, r0]\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - movs r2, 0x4\n\ -_081448E0:\n\ - strh r2, [r0, 0x2E]\n\ - movs r0, 0x32\n\ - strh r0, [r1, 0x8]\n\ - b _0814492C\n\ - .align 2, 0\n\ -_081448E8: .4byte gSprites\n\ -_081448EC:\n\ - ldr r3, _0814491C @ =gSprites\n\ - lsls r2, r5, 2\n\ - adds r2, r5\n\ - lsls r2, 3\n\ - adds r2, r6\n\ - movs r0, 0xC\n\ - ldrsh r1, [r2, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - movs r1, 0x5\n\ - strh r1, [r0, 0x2E]\n\ - movs r0, 0xE\n\ - ldrsh r1, [r2, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - movs r1, 0x3\n\ - strh r1, [r0, 0x2E]\n\ - movs r0, 0x32\n\ - strh r0, [r2, 0x8]\n\ - b _0814492C\n\ - .align 2, 0\n\ -_0814491C: .4byte gSprites\n\ -_08144920:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r6\n\ - movs r1, 0\n\ -_0814492A:\n\ - strh r1, [r0, 0x8]\n\ -_0814492C:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); + switch (gTasks[taskIdC].data[0]) + { + case 0: + gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12); + gTasks[taskIdC].data[5]++; + break; + case 1: + if (gUnknown_0203935A != 0) + { + gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12); + gTasks[taskIdC].data[5]++; + } + else + { + gSprites[gTasks[taskIdC].data[2]].data0 = 2; + gTasks[taskIdC].data[5] = 0; + gTasks[taskIdC].data[0]++; + } + break; + case 2: + if (gTasks[taskIdC].data[5] < 64) + { + gTasks[taskIdC].data[5]++; + gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20); + } + else + { + gTasks[taskIdC].data[0]++; + } + break; + case 3: + gSprites[gTasks[taskIdC].data[2]].data0 = 3; + gSprites[gTasks[taskIdC].data[3]].data0 = 1; + gTasks[taskIdC].data[4] = 120; + gTasks[taskIdC].data[0]++; + break; + case 4: + if (gTasks[taskIdC].data[4] != 0) + { + gTasks[taskIdC].data[4]--; + } + else + { + gTasks[taskIdC].data[5] = 64; + gTasks[taskIdC].data[0]++; + } + break; + case 5: + if (gTasks[taskIdC].data[5] > 0) + { + gTasks[taskIdC].data[5]--; + gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20); + } + else + { + gSprites[gTasks[taskIdC].data[2]].data0 = 1; + gTasks[taskIdC].data[0]++; + } + break; + case 6: + gTasks[taskIdC].data[0] = 50; + break; + case 10: + gSprites[gTasks[taskIdC].data[3]].data0 = 2; + gTasks[taskIdC].data[0] = 50; + break; + case 20: + gSprites[gTasks[taskIdC].data[2]].data0 = 4; + gTasks[taskIdC].data[0] = 50; + break; + case 30: + gSprites[gTasks[taskIdC].data[2]].data0 = 5; + gSprites[gTasks[taskIdC].data[3]].data0 = 3; + gTasks[taskIdC].data[0] = 50; + break; + case 50: + gTasks[taskIdC].data[0] = 0; + break; + } } #define UNK_DEF_1F3 (499) diff --git a/src/dewford_trend.c b/src/dewford_trend.c index 55314b1c6..b90100d90 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -1,6 +1,7 @@ #include "global.h" #include "dewford_trend.h" #include "asm.h" +#include "easy_chat.h" #include "event_data.h" #include "link.h" #include "rng.h" @@ -24,12 +25,12 @@ void sub_80FA17C(void) for (i = 0; i < 5; i++) { - gSaveBlock1.easyChatPairs[i].words[0] = sub_80EB72C(10); + gSaveBlock1.easyChatPairs[i].words[0] = sub_80EB72C(EC_GROUP_CONDITIONS); if (Random() & 1) - gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(12); + gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(EC_GROUP_LIFESTYLE); else - gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(13); + gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(EC_GROUP_HOBBIES); gSaveBlock1.easyChatPairs[i].unk1_6 = Random() & 1; sub_80FA740(&gSaveBlock1.easyChatPairs[i]); diff --git a/src/easy_chat.c b/src/easy_chat.c new file mode 100644 index 000000000..380fe6e4d --- /dev/null +++ b/src/easy_chat.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "easy_chat.h" +#include "asm.h" +#include "event_data.h" +#include "field_message_box.h" +#include "pokedex.h" +#include "rng.h" +#include "text.h" + +u8 sub_80EB8C0(void); +u8 sub_80EB868(u8); +u16 sub_80EAE88(u8); +void sub_80EB890(u8); +u16 sub_80EB784(u16 group); +u8 sub_80EAD7C(u8 group); +u8 sub_80EB680(u16 *, u16, u16, u16); +static u16 sub_80EB9D8(void); +static u16 sub_80EB960(void); +u16 sub_80EB72C(u16); + +extern void *gEasyChatGroupWords[]; +extern const u8 gEasyChatGroupSizes[]; + +extern u16 gSpecialVar_0x8004; + +u16 sub_80EB72C(u16 group) { + u16 local1; + + local1 = Random() % gEasyChatGroupSizes[group]; + + if (group == EC_GROUP_POKEMON || + group == EC_GROUP_POKEMON_2 || + group == EC_GROUP_MOVE_1 || + group == EC_GROUP_MOVE_2) + { + local1 = ((u16 *) gEasyChatGroupWords[group])[local1]; + } + + + return ((group & 0x7F) << 9) | (local1 & 0x1FF); +} + +u16 sub_80EB784(u16 group) { + if (!sub_80EAD7C(group)) + { + return -1; + } + + if (group != EC_GROUP_POKEMON) + { + if (group == EC_GROUP_TRENDY_SAYING) + { + return sub_80EB960(); + } + } + else + { + return sub_80EB9D8(); + } + + return sub_80EB72C(group); +} + +void sub_80EB7C4(void) { + u16 *words; + u16 arg1, arg2; + + + switch (gSpecialVar_0x8004) + { + case 0: + words = gSaveBlock1.unk2B1C; + arg1 = 2; + arg2 = 2; + break; + + case 1: + words = gSaveBlock1.unk2B28; + if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20)) + { + arg1 = 2; + arg2 = 3; + } + else + { + arg1 = 3; + arg2 = 2; + } + break; + + case 2: + words = gSaveBlock1.unk2B34; + arg1 = 3; + arg2 = 2; + break; + + case 3: + words = gSaveBlock1.unk2B40; + arg1 = 3; + arg2 = 2; + break; + + default: + return; + } + + ConvertEasyChatWordsToString(gStringVar4, words, arg1, arg2); + ShowFieldAutoScrollMessage(gStringVar4); +} + +void sub_80EB83C(void) { + u16 group, local2; + + if (Random() & 1) + { + group = EC_GROUP_HOBBIES; + } + else + { + group = EC_GROUP_LIFESTYLE; + } + + local2 = sub_80EB784(group); + sub_80EB3FC(gStringVar2, local2); +} + +u8 sub_80EB868(u8 arg0) { + int offset; + int index; + + index = arg0 / 8; + offset = arg0 & 7; + return (gSaveBlock1.unk2D8C[index] >> offset) & 1; +} + +void sub_80EB890(u8 arg0) { + int offset; + int index; + + if (arg0 > 32) + { + return; + } + + index = arg0 / 8; + offset = arg0 & 7; + gSaveBlock1.unk2D8C[index] |= 1 << offset; +} + +u8 sub_80EB8C0(void) { + u8 i, retval; + + i = 0; + retval = 0; + for (; i < 33; i++) + { + if (sub_80EB868(i)) + { + retval += 1; + } + } + + return retval; +} + +u16 sub_80EB8EC(void) { + u16 i; + u16 local1, local2; + + local1 = sub_80EB8C0(); + if (local1 == 33) + { + return -1; + } + + local2 = Random() % (33 - local1); + + for (i = 0; i <= 0x20; i++) + { + if (sub_80EB868(i) == 0) + { + if (local2 == 0) + { + sub_80EB890(i); + return (i & 0x1FF) | 0x2800; + } + + local2--; + } + } + + return -1; +} + +static u16 sub_80EB960(void) { + u16 i; + u16 local1; + + local1 = sub_80EB8C0(); + if (local1 == 0) + { + return -1; + } + + local1 = Random() % local1; + + for (i = 0; i <= 0x20; i++) + { + if (sub_80EB868(i)) + { + if (local1 == 0) + { + return (i & 0x1FF) | 0x2800; + } + + local1--; + } + } + + return -1; +} + +u8 sub_80EB9C8(void) { + return IsNationalPokedexEnabled(); +} + +static u16 sub_80EB9D8(void) { + u16 *speciesList; + u16 local1; + u16 i; + + local1 = sub_80EAE88(0); + + if (local1 == 0) + { + return -1; + } + + local1 = Random() % local1; + speciesList = (u16 *) gEasyChatGroupWords[EC_GROUP_POKEMON]; + + for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++) + { + const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList); + + const u8 local2 = sub_8090D90(dexNum, 0); + + if (local2) + { + if (local1 == 0) + { + return *speciesList & 0x1FF; + } + + local1--; + } + + speciesList++; + } + + return -1; +} diff --git a/src/egg_hatch.c b/src/egg_hatch.c new file mode 100644 index 000000000..32fbe1547 --- /dev/null +++ b/src/egg_hatch.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "pokemon.h" + +void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { + u16 species; + u32 personality, pokerus; + u8 i, friendship, language, gameMet, markings; + u16 moves[4]; + u32 ivs[6]; + + + species = GetMonData(egg, MON_DATA_SPECIES); + + for (i = 0; i < 4; i++) + { + moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); + } + + personality = GetMonData(egg, MON_DATA_PERSONALITY); + + for (i = 0; i < 6; i++) + { + ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); + } + + gameMet = GetMonData(egg, MON_DATA_MET_GAME); + markings = GetMonData(egg, MON_DATA_MARKINGS); + pokerus = GetMonData(egg, MON_DATA_POKERUS); + + CreateMon(temp, species, 5, 32, TRUE, personality, 0, 0); + + for (i = 0; i < 4; i++) + { + SetMonData(temp, MON_DATA_MOVE1 + i, (const u8 *) &moves[i]); + } + + for (i = 0; i < 6; i++) + { + SetMonData(temp, MON_DATA_HP_IV + i, (const u8 *) &ivs[i]); + } + + language = GAME_LANGUAGE; + SetMonData(temp, MON_DATA_LANGUAGE, &language); + SetMonData(temp, MON_DATA_MET_GAME, &gameMet); + SetMonData(temp, MON_DATA_MARKINGS, &markings); + + friendship = 120; + SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); + SetMonData(temp, MON_DATA_POKERUS, (const u8 *) &pokerus); + + *egg = *temp; +} diff --git a/src/field_message_box.c b/src/field_message_box.c index 2a5f90d15..798725540 100644 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -15,7 +15,7 @@ static u8 sMessageBoxMode; static void Task_FieldMessageBox(u8 taskId); static void CreateFieldMessageBoxTask(void); static void DestroyFieldMessageBoxTask(void); -static void PrintFieldMessage(u8 *message); +static void PrintFieldMessage(const u8 *message); static void PrintFieldMessageFromStringVar4(void); void InitFieldMessageBox(void) @@ -67,7 +67,7 @@ static void DestroyFieldMessageBoxTask(void) DestroyTask(taskId); } -bool8 ShowFieldMessage(u8 *message) +bool8 ShowFieldMessage(const u8 *message) { if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) { @@ -81,7 +81,7 @@ bool8 ShowFieldMessage(u8 *message) } } -bool8 ShowFieldAutoScrollMessage(u8 *message) +bool8 ShowFieldAutoScrollMessage(const u8 *message) { if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) { @@ -95,14 +95,14 @@ bool8 ShowFieldAutoScrollMessage(u8 *message) } } -bool8 unref_sub_8064BB8(u8 *message) +bool8 unref_sub_8064BB8(const u8 *message) { sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL; PrintFieldMessage(message); return TRUE; } -bool8 unref_sub_8064BD0(u8 *message) +bool8 unref_sub_8064BD0(const u8 *message) { if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) { @@ -116,7 +116,7 @@ bool8 unref_sub_8064BD0(u8 *message) } } -static void PrintFieldMessage(u8 *message) +static void PrintFieldMessage(const u8 *message) { StringExpandPlaceholders(gStringVar4, message); sub_8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); diff --git a/src/field_specials.c b/src/field_specials.c new file mode 100644 index 000000000..9f5a314e2 --- /dev/null +++ b/src/field_specials.c @@ -0,0 +1,189 @@ +#include "global.h" +#include "asm.h" +#include "event_data.h" +#include "field_player_avatar.h" +#include "main.h" +#include "map_constants.h" +#include "rom4.h" +#include "script.h" +#include "songs.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "wallclock.h" + +#if ENGLISH +#define CHAR_DECIMAL_SEPARATOR CHAR_PERIOD +#elif GERMAN +#define CHAR_DECIMAL_SEPARATOR CHAR_COMMA +#endif + +extern struct WarpData gUnknown_020297F0; +extern u16 gScriptResult; +extern u8 gUnknown_02039250; +extern u8 gUnknown_02039251; +extern u32 gUnknown_02039254; + +static void RecordCyclingRoadResults(u32, u8); + +void sub_810D6A4(void) { + SetMainCallback2(sub_8145D88); + ScriptContext2_Enable(); +} + +void sub_810D6B8(void) { + gMain.savedCallback = c2_exit_to_overworld_2_switch; + SetMainCallback2(CB2_ViewWallClock); + ScriptContext2_Enable(); +} + +void ResetCyclingRoadChallengeData(void) { + gUnknown_02039250 = 0; + gUnknown_02039251 = 0; + gUnknown_02039254 = 0; +} + +void BeginCyclingRoadChallenge(void) { + gUnknown_02039250 = 1; + gUnknown_02039251 = 0; + gUnknown_02039254 = gMain.vblankCounter1; +} + +u16 GetPlayerAvatarBike(void) { + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE)) + { + return 1; + } + + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE)) + { + return 2; + } + + return 0; +} + +void DetermineCyclingRoadResults(u32 arg0, u8 arg1) { + u8 result; + + if (arg1 <= 99) + { + ConvertIntToDecimalStringN(gStringVar1, arg1, STR_CONV_MODE_LEFT_ALIGN, 2); + StringAppend(gStringVar1, gOtherText_Times); + } + else + { + StringCopy(gStringVar1, gOtherText_99Times); + } + + if (arg0 < 3600) + { + ConvertIntToDecimalStringN(gStringVar2, arg0 / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); + gStringVar2[2] = CHAR_DECIMAL_SEPARATOR; + ConvertIntToDecimalStringN(&gStringVar2[3], ((arg0 % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(gStringVar2, gOtherText_Seconds); + } + else + { + StringCopy(gStringVar2, gOtherText_1Minute); + } + + result = 0; + if (arg1 == 0) + { + result = 5; + } + else if (arg1 < 4) + { + result = 4; + } + else if (arg1 < 10) + { + result = 3; + } + else if (arg1 < 20) + { + result = 2; + } + else if (arg1 < 100) + { + result = 1; + } + + if (arg0 / 60 <= 10) + { + result += 5; + } + else if (arg0 / 60 <= 15) + { + result += 4; + } + else if (arg0 / 60 <= 20) + { + result += 3; + } + else if (arg0 / 60 <= 40) + { + result += 2; + } + else if (arg0 / 60 < 60) + { + result += 1; + } + + + gScriptResult = result; +} + +void FinishCyclingRoadChallenge(void) { + const u32 time = gMain.vblankCounter1 - gUnknown_02039254; + + DetermineCyclingRoadResults(time, gUnknown_02039251); + RecordCyclingRoadResults(time, gUnknown_02039251); +} + +static void RecordCyclingRoadResults(u32 arg0, u8 arg1) { + u16 high, low; + u32 record; + + high = VarGet(0x4028); + low = VarGet(0x4029); + record = high + (low << 16); + + if (record > arg0 || record == 0) + { + VarSet(0x4028, arg0); + VarSet(0x4029, arg0 >> 16); + VarSet(0x4027, arg1); + } +} + +u16 GetRecordedCyclingRoadResults(void) { + u16 high, low; + u32 record; + + high = VarGet(0x4028); + low = VarGet(0x4029); + record = high + (low << 16); + + if (record == 0) + { + return FALSE; + } + + DetermineCyclingRoadResults(record, VarGet(0x4027)); + return TRUE; +} + +void UpdateCyclingRoadState(void) { + if (gUnknown_020297F0.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE && gUnknown_020297F0.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) + { + return; + } + + if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3) + { + VarSet(0x40a9, 0); + sav1_set_battle_music_maybe(SE_STOP); + } +} diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index 712bb8be9..d0ee712af 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -43,6 +43,13 @@ struct UnknownStruct3 { s16 unk2E; }; +#if ENGLISH +#define WINDOW_LEFT 3 +#define WINDOW_RIGHT 26 +#elif GERMAN +#define WINDOW_LEFT 0 +#define WINDOW_RIGHT 29 +#endif #define EWRAM_1000 (*(struct UnknownStruct2 *)(unk_2000000 + 0x1000)) #define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) @@ -141,7 +148,7 @@ static void sub_8133E74(u8 taskId) { return; } - MenuZeroFillWindowRect(3, 14, 26, 19); + MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); sub_806D538(3, 0); gTasks[taskId].func = sub_806CB74; } @@ -153,9 +160,6 @@ static void sub_8133EB8(u8 taskId) { gTasks[taskId].func = sub_8133E74; } -#define WINDOW_LEFT 3 -#define WINDOW_RIGHT 26 - static void sub_8133EF8(void) { sub_806CCE4(); EWRAM_1B000.unk261 = 2; diff --git a/src/intro.c b/src/intro.c index a6b6b2734..ea6edba3d 100644 --- a/src/intro.c +++ b/src/intro.c @@ -310,6 +310,13 @@ static const union AnimCmd gSpriteAnim_840AF10[] = ANIMCMD_FRAME(128, 8), ANIMCMD_END, }; +#if GERMAN +static const union AnimCmd gSpriteAnim_8416DA4[] = +{ + ANIMCMD_FRAME(118, 8), + ANIMCMD_END, +}; +#endif static const union AnimCmd *const gSpriteAnimTable_840AF18[] = { gSpriteAnim_840AEA8, @@ -328,6 +335,9 @@ static const union AnimCmd *const gSpriteAnimTable_840AF34[] = gSpriteAnim_840AEF8, gSpriteAnim_840AF00, gSpriteAnim_840AF08, +#if GERMAN + gSpriteAnim_8416DA4, +#endif }; static const union AnimCmd *const gSpriteAnimTable_840AF4C[] = { diff --git a/src/link.c b/src/link.c index 783f6aecd..336616f1a 100644 --- a/src/link.c +++ b/src/link.c @@ -149,6 +149,11 @@ struct Link gLink; u8 gLastRecvQueueCount; u16 gLinkSavedIme; +#ifdef GERMAN +u8 deUnkValue1; +u8 deUnkValue2; +#endif + EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = {0}; EWRAM_DATA bool8 gLinkTestDummyBool = {0}; EWRAM_DATA u32 gFiller_20238B8 = {0}; @@ -479,6 +484,9 @@ static void ProcessRecvCmds(u8 unusedParam) memcpy(localLinkPlayerBlock.magic2, sMagic, sizeof(localLinkPlayerBlock.magic2) - 1); InitBlockSend(&localLinkPlayerBlock, sizeof(localLinkPlayerBlock)); break; + case 0x4444: + word_3002910[i] = gRecvCmds[1][i]; + break; case 0x5555: byte_3002A68 = 1; break; @@ -549,23 +557,28 @@ static void ProcessRecvCmds(u8 unusedParam) sub_80516C4(i, gRecvCmds[1][i]); break; case 0xCCCC: - { - const u32 *addresses; - const u32 *sizes; - void *data; - u16 size; - - addresses = sBlockRequestLookupTable; - data = (void *)addresses[gRecvCmds[1][i] * 2]; - - sizes = addresses + 1; - size = sizes[gRecvCmds[1][i] * 2]; +#if defined(ENGLISH) + SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]); +#elif defined(GERMAN) + if (deUnkValue2 == 1) + { + deUnkValue2 = 2; + deUnkValue1 = gRecvCmds[1][i]; + } + else if (deUnkValue2 == 2 || deUnkValue2 == 3) + { + SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]); - SendBlock(0, data, size); - break; - } - case 0x4444: - word_3002910[i] = gRecvCmds[1][i]; + if (deUnkValue2 == 2) + deUnkValue2 = 1; + else + deUnkValue2 = 0; + } + else + { + SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]); + } +#endif break; case 0xCAFE: word_3002910[i] = gRecvCmds[1][i]; @@ -676,6 +689,9 @@ void OpenLinkTimed(void) { sPlayerDataExchangeStatus = EXCHANGE_NOT_STARTED; gLinkTimeOutCounter = 0; +#if defined(GERMAN) + ResetBlockSend(); +#endif OpenLink(); } diff --git a/src/mail.c b/src/mail.c index a0a47e98f..1bd4e73dc 100644 --- a/src/mail.c +++ b/src/mail.c @@ -31,10 +31,10 @@ struct MailLayout struct Unk2000000 { /* 0x00*/ u8 words[8][27]; - /* 0xEC*/ u8 varD8[20]; + /* 0xD8*/ u8 varD8[20]; /* 0xEC*/ MainCallback varEC; /* 0xF0*/ MainCallback varF0; - /* 0xFF*/ struct MailStruct *varF4; + /* 0xF4*/ struct MailStruct *varF4; /* 0xF8*/ u8 varF8; /* 0xF9*/ u8 varF9; /* 0xFA*/ u8 varFA; @@ -61,7 +61,9 @@ struct MailGraphics u16 color12; }; -extern struct Unk2000000 unk_2000000; +extern u8 ewram[]; +#define ewram0 (*(struct Unk2000000 *)(ewram)) + extern struct MailGraphics gMailGraphicsTable[]; extern u16 gUnknown_083E562C[][2]; @@ -71,8 +73,7 @@ extern struct MailLayout gUnknown_083E57A4[]; extern u8 gOtherText_From[]; static u8 sub_80F8A28(void); -// static void sub_80F8D50(void); -// static u8 *sub_80F8D7C(u8 *dest, u8 *src); +static void sub_80F8D50(void); static void sub_80F8DA0(void); static void sub_80F8E80(void); static void sub_80F8F18(void); @@ -81,222 +82,69 @@ static void sub_80F8F58(void); static void sub_80F8F78(void); static void sub_80F8FB4(void); -#ifdef NONMATCHING void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) { u16 mailDesign; u8 buffer[4]; - u8 local1; - - unk_2000000.varFF = GAME_LANGUAGE; - // Compiler uses [sub 1], while asm uses [ptr + FE] - unk_2000000.varFE = 1; - unk_2000000.var104 = (MainCallback)sub_80EB3FC; - unk_2000000.var108 = (MainCallback)ConvertEasyChatWordsToString; + ewram0.varFF = GAME_LANGUAGE; + ewram0.var100 = 1; + ewram0.var104 = (MainCallback)sub_80EB3FC; + ewram0.var108 = (MainCallback)ConvertEasyChatWordsToString; mailDesign = arg0->itemId - ITEM_ORANGE_MAIL; if (mailDesign <= 11) { - unk_2000000.varFA = arg0->itemId - ITEM_ORANGE_MAIL; + ewram0.varFA = arg0->itemId - ITEM_ORANGE_MAIL; } else { - unk_2000000.varFA = 0; + ewram0.varFA = 0; arg2 = FALSE; } - switch (unk_2000000.var100) + switch (ewram0.var100) { case 0: default: - unk_2000000.var10C = &gUnknown_083E5730[unk_2000000.varFA]; + ewram0.var10C = &gUnknown_083E5730[ewram0.varFA]; break; case 1: - unk_2000000.var10C = &gUnknown_083E57A4[unk_2000000.varFA]; + ewram0.var10C = &gUnknown_083E57A4[ewram0.varFA]; break; } if (((sub_80A2D64(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16)) { - switch (unk_2000000.varFA) + switch (ewram0.varFA) { case 6: - unk_2000000.varFB = 1; + ewram0.varFB = 1; break; case 9: - unk_2000000.varFB = 2; + ewram0.varFB = 2; break; default: - unk_2000000.varFB = 0; + ewram0.varFB = 0; break; } } else { - unk_2000000.varFB = 0; + ewram0.varFB = 0; } - unk_2000000.varF4 = arg0; - unk_2000000.varEC = arg1; - unk_2000000.varF8 = arg2; + ewram0.varF4 = arg0; + ewram0.varEC = arg1; + ewram0.varF8 = arg2; SetMainCallback2(sub_80F8D50); } -#else -__attribute__((naked)) -void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x4\n\ - adds r4, r0, 0\n\ - adds r6, r1, 0\n\ - lsls r2, 24\n\ - lsrs r5, r2, 24\n\ - ldr r2, _080F8958 @ =0x02000000\n\ - adds r1, r2, 0\n\ - adds r1, 0xFF\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - adds r0, 0xFE\n\ - adds r1, r2, r0\n\ - movs r0, 0x1\n\ - strb r0, [r1]\n\ - movs r0, 0x82\n\ - lsls r0, 1\n\ - adds r1, r2, r0\n\ - ldr r0, _080F895C @ =sub_80EB3FC\n\ - str r0, [r1]\n\ - movs r0, 0x84\n\ - lsls r0, 1\n\ - adds r1, r2, r0\n\ - ldr r0, _080F8960 @ =ConvertEasyChatWordsToString\n\ - str r0, [r1]\n\ - ldrh r1, [r4, 0x20]\n\ - adds r0, r1, 0\n\ - subs r0, 0x79\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xB\n\ - bhi _080F8964\n\ - subs r1, 0x79\n\ - adds r0, r2, 0\n\ - adds r0, 0xFA\n\ - strb r1, [r0]\n\ - b _080F896E\n\ - .align 2, 0\n\ -_080F8958: .4byte 0x02000000\n\ -_080F895C: .4byte sub_80EB3FC\n\ -_080F8960: .4byte ConvertEasyChatWordsToString\n\ -_080F8964:\n\ - adds r1, r2, 0\n\ - adds r1, 0xFA\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ - movs r5, 0\n\ -_080F896E:\n\ - ldr r1, _080F8994 @ =0x02000000\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _080F8980\n\ - cmp r0, 0x1\n\ - beq _080F899C\n\ -_080F8980:\n\ - movs r0, 0x86\n\ - lsls r0, 1\n\ - adds r2, r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, 0xFA\n\ - ldrb r0, [r0]\n\ - lsls r0, 3\n\ - ldr r1, _080F8998 @ =gUnknown_083E5730\n\ - b _080F89AC\n\ - .align 2, 0\n\ -_080F8994: .4byte 0x02000000\n\ -_080F8998: .4byte gUnknown_083E5730\n\ -_080F899C:\n\ - movs r0, 0x86\n\ - lsls r0, 1\n\ - adds r2, r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, 0xFA\n\ - ldrb r0, [r0]\n\ - lsls r0, 3\n\ - ldr r1, _080F89DC @ =gUnknown_083E57A4\n\ -_080F89AC:\n\ - adds r0, r1\n\ - str r0, [r2]\n\ - ldrh r0, [r4, 0x1E]\n\ - mov r1, sp\n\ - bl sub_80A2D64\n\ - lsls r0, 16\n\ - ldr r1, _080F89E0 @ =0xffff0000\n\ - adds r0, r1\n\ - movs r1, 0xCD\n\ - lsls r1, 17\n\ - cmp r0, r1\n\ - bhi _080F89F8\n\ - ldr r0, _080F89E4 @ =0x02000000\n\ - adds r1, r0, 0\n\ - adds r1, 0xFA\n\ - ldrb r2, [r1]\n\ - adds r1, r0, 0\n\ - cmp r2, 0x6\n\ - beq _080F89E8\n\ - cmp r2, 0x9\n\ - beq _080F89F0\n\ - b _080F89FA\n\ - .align 2, 0\n\ -_080F89DC: .4byte gUnknown_083E57A4\n\ -_080F89E0: .4byte 0xffff0000\n\ -_080F89E4: .4byte 0x02000000\n\ -_080F89E8:\n\ - adds r2, r1, 0\n\ - adds r2, 0xFB\n\ - movs r0, 0x1\n\ - b _080F8A00\n\ -_080F89F0:\n\ - adds r2, r1, 0\n\ - adds r2, 0xFB\n\ - movs r0, 0x2\n\ - b _080F8A00\n\ -_080F89F8:\n\ - ldr r1, _080F8A20 @ =0x02000000\n\ -_080F89FA:\n\ - adds r2, r1, 0\n\ - adds r2, 0xFB\n\ - movs r0, 0\n\ -_080F8A00:\n\ - strb r0, [r2]\n\ - adds r0, r1, 0\n\ - adds r0, 0xF4\n\ - str r4, [r0]\n\ - subs r0, 0x8\n\ - str r6, [r0]\n\ - adds r0, 0xC\n\ - strb r5, [r0]\n\ - ldr r0, _080F8A24 @ =sub_80F8D50\n\ - bl SetMainCallback2\n\ - add sp, 0x4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080F8A20: .4byte 0x02000000\n\ -_080F8A24: .4byte sub_80F8D50\n\ - .syntax divided\n"); -} - -#endif #define RETURN_UP_STATE break #define RETURN_SKIP_STATE return FALSE @@ -363,31 +211,31 @@ static u8 sub_80F8A28(void) RETURN_UP_STATE; case 11: - LoadPalette(gMailGraphicsTable[unk_2000000.varFA].palette, 0, 16 * 2); + LoadPalette(gMailGraphicsTable[ewram0.varFA].palette, 0, 16 * 2); RETURN_UP_STATE; case 12: - LZ77UnCompVram(gMailGraphicsTable[unk_2000000.varFA].tileMap, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tileMap, (void *)(VRAM + 0x4000)); RETURN_UP_STATE; case 13: - LZ77UnCompVram(gMailGraphicsTable[unk_2000000.varFA].tiles, (void *)(VRAM)); + LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tiles, (void *)(VRAM)); - gPlttBufferUnfaded[241] = gMailGraphicsTable[unk_2000000.varFA].color10; - gPlttBufferUnfaded[248] = gMailGraphicsTable[unk_2000000.varFA].color12; + gPlttBufferUnfaded[241] = gMailGraphicsTable[ewram0.varFA].color10; + gPlttBufferUnfaded[248] = gMailGraphicsTable[ewram0.varFA].color12; gPlttBufferUnfaded[10] = gUnknown_083E562C[gSaveBlock2.playerGender][0]; gPlttBufferUnfaded[11] = gUnknown_083E562C[gSaveBlock2.playerGender][1]; RETURN_UP_STATE; case 14: - if (unk_2000000.varF8 != 0) + if (ewram0.varF8 != 0) { sub_80F8DA0(); } RETURN_UP_STATE; case 15: - if (unk_2000000.varF8 != 0) + if (ewram0.varF8 != 0) { sub_80F8E80(); } @@ -400,18 +248,18 @@ static u8 sub_80F8A28(void) { u16 local1; - local1 = sub_809D4A8(unk_2000000.varF4->species); + local1 = sub_809D4A8(ewram0.varF4->species); - switch (unk_2000000.varFB) + switch (ewram0.varFB) { case 1: sub_809D580(local1); - unk_2000000.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0); + ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0); break; case 2: sub_809D580(local1); - unk_2000000.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0); + ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0); break; } RETURN_UP_STATE; @@ -432,7 +280,7 @@ static u8 sub_80F8A28(void) REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; BeginNormalPaletteFade(-1, 0, 16, 0, 0); gPaletteFade.bufferTransferDisabled = 0; - unk_2000000.varF0 = sub_80F8F58; + ewram0.varF0 = sub_80F8F58; return TRUE; default: @@ -443,7 +291,7 @@ static u8 sub_80F8A28(void) return FALSE; } -void sub_80F8D50(void) +static void sub_80F8D50(void) { do { @@ -455,7 +303,7 @@ void sub_80F8D50(void) } while (sub_80F9344() != 1); } -u8 *sub_80F8D7C(u8 *dest, u8 *src) +static u8 *sub_80F8D7C(u8 *dest, u8 *src) { u16 length; @@ -467,163 +315,33 @@ u8 *sub_80F8D7C(u8 *dest, u8 *src) return dest + length; } -#ifdef NONMATCHING static void sub_80F8DA0(void) { - u8 local0; - - local0 = unk_2000000.var10C->var0; + u16 i; + u8 r6; + u8 *ptr; - // No idea what's happening in this loop. - if (local0 <= 0) + r6 = 0; + for (i = 0; i < ewram0.var10C->var0; i++) { - u8 i; - u8 i2 = 0; - - for (i = 0; i < unk_2000000.var10C->var0; i++) - { - ConvertEasyChatWordsToString(unk_2000000.words[i], &unk_2000000.varF4->words[i2], - ((*unk_2000000.var10C->var4)[i] << 28) >> 30, 1); - i2 += ((*unk_2000000.var10C->var4)[i] << 28) >> 30; - } + ConvertEasyChatWordsToString(ewram0.words[i], &ewram0.varF4->words[r6], ewram0.var10C->var4[i].unk_0_2, 1); + r6 += ewram0.var10C->var4[i].unk_0_2; } - - if (unk_2000000.var100 == 0) + ptr = ewram0.varD8; + if (ewram0.var100 == 0) { - u8 *ptr; - u16 length; - - ptr = sub_80F8D7C(unk_2000000.varD8, unk_2000000.varF4->playerName); + ptr = sub_80F8D7C(ptr, ewram0.varF4->playerName); StringCopy(ptr, gOtherText_From); + ewram0.varF9 = ewram0.var10C->var2 - StringLength(ewram0.varD8); - length = StringLength(unk_2000000.varD8); - - unk_2000000.varF9 = unk_2000000.var10C->var2 - length; } else { - u8 *ptr; - - ptr = StringCopy(unk_2000000.varD8, gOtherText_From); - sub_80F8D7C(ptr, unk_2000000.varF4->playerName); - - unk_2000000.varF9 = unk_2000000.var10C->var2; + ptr = StringCopy(ptr, gOtherText_From); + sub_80F8D7C(ptr, ewram0.varF4->playerName); + ewram0.varF9 = ewram0.var10C->var2; } } -#else -__attribute__((naked)) -static void sub_80F8DA0(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - movs r6, 0\n\ - movs r5, 0\n\ - ldr r2, _080F8E3C @ =0x02000000\n\ - movs r0, 0x86\n\ - lsls r0, 1\n\ - adds r1, r2, r0\n\ - ldr r0, [r1]\n\ - ldrb r0, [r0]\n\ - cmp r5, r0\n\ - bcs _080F8E04\n\ - mov r8, r2\n\ - adds r7, r1, 0\n\ -_080F8DBE:\n\ - lsls r0, r5, 3\n\ - subs r0, r5\n\ - lsls r0, 2\n\ - subs r0, r5\n\ - add r0, r8\n\ - mov r1, r8\n\ - adds r1, 0xF4\n\ - lsls r2, r6, 1\n\ - ldr r1, [r1]\n\ - adds r1, r2\n\ - ldr r2, [r7]\n\ - ldr r2, [r2, 0x4]\n\ - lsls r4, r5, 2\n\ - adds r2, r4, r2\n\ - ldr r2, [r2]\n\ - lsls r2, 28\n\ - lsrs r2, 30\n\ - movs r3, 0x1\n\ - bl ConvertEasyChatWordsToString\n\ - ldr r1, [r7]\n\ - ldr r0, [r1, 0x4]\n\ - adds r4, r0\n\ - ldr r0, [r4]\n\ - lsls r0, 28\n\ - lsrs r0, 30\n\ - adds r0, r6, r0\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldrb r1, [r1]\n\ - cmp r5, r1\n\ - bcc _080F8DBE\n\ -_080F8E04:\n\ - ldr r2, _080F8E40 @ =0x020000d8\n\ - adds r4, r2, 0\n\ - subs r4, 0xD8\n\ - adds r0, r2, 0\n\ - adds r0, 0x28\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080F8E48\n\ - ldr r1, [r2, 0x1C]\n\ - adds r1, 0x12\n\ - adds r0, r2, 0\n\ - bl sub_80F8D7C\n\ - adds r2, r0, 0\n\ - ldr r1, _080F8E44 @ =gOtherText_From\n\ - bl StringCopy\n\ - ldr r0, _080F8E40 @ =0x020000d8\n\ - bl StringLength\n\ - movs r2, 0x86\n\ - lsls r2, 1\n\ - adds r1, r4, r2\n\ - ldr r1, [r1]\n\ - ldrb r1, [r1, 0x2]\n\ - subs r1, r0\n\ - b _080F8E6A\n\ - .align 2, 0\n\ -_080F8E3C: .4byte 0x02000000\n\ -_080F8E40: .4byte 0x020000d8\n\ -_080F8E44: .4byte gOtherText_From\n\ -_080F8E48:\n\ - ldr r1, _080F8E7C @ =gOtherText_From\n\ - adds r0, r2, 0\n\ - bl StringCopy\n\ - adds r2, r0, 0\n\ - adds r0, r4, 0\n\ - adds r0, 0xF4\n\ - ldr r1, [r0]\n\ - adds r1, 0x12\n\ - adds r0, r2, 0\n\ - bl sub_80F8D7C\n\ - movs r1, 0x86\n\ - lsls r1, 1\n\ - adds r0, r4, r1\n\ - ldr r0, [r0]\n\ - ldrb r1, [r0, 0x2]\n\ -_080F8E6A:\n\ - adds r0, r4, 0\n\ - adds r0, 0xF9\n\ - strb r1, [r0]\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080F8E7C: .4byte gOtherText_From\n\ - .syntax divided\n"); -} -#endif static void sub_80F8E80(void) { @@ -631,25 +349,25 @@ static void sub_80F8E80(void) u8 x; u8 y = 0; - for (pos = 0; pos < unk_2000000.var10C->var0; pos++) + for (pos = 0; pos < ewram0.var10C->var0; pos++) { - if (unk_2000000.words[pos][0] == 0xFF) + if (ewram0.words[pos][0] == 0xFF) { continue; } - if (unk_2000000.words[pos][0] == 0x00) + if (ewram0.words[pos][0] == 0x00) { continue; } - x = unk_2000000.var10C->var4[pos].unk_0_4; - y += unk_2000000.var10C->var4[pos].unk_0_0; - MenuPrint(unk_2000000.words[pos], unk_2000000.var10C->var3_4 + x, unk_2000000.var10C->var3_0 + y); + x = ewram0.var10C->var4[pos].unk_0_4; + y += ewram0.var10C->var4[pos].unk_0_0; + MenuPrint(ewram0.words[pos], ewram0.var10C->var3_4 + x, ewram0.var10C->var3_0 + y); y += 2; } - MenuPrint(unk_2000000.varD8, unk_2000000.varF9, unk_2000000.var10C->var1); + MenuPrint(ewram0.varD8, ewram0.varF9, ewram0.var10C->var1); } static void sub_80F8F18(void) @@ -661,13 +379,13 @@ static void sub_80F8F18(void) static void sub_80F8F2C(void) { - if (unk_2000000.varFB != 0) + if (ewram0.varFB != 0) { AnimateSprites(); BuildOamBuffer(); } - unk_2000000.varF0(); + ewram0.varF0(); } static void sub_80F8F58(void) @@ -677,7 +395,7 @@ static void sub_80F8F58(void) local0 = UpdatePaletteFade(); if (local0 == 0) { - unk_2000000.varF0 = sub_80F8F78; + ewram0.varF0 = sub_80F8F78; } } @@ -686,7 +404,7 @@ static void sub_80F8F78(void) if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(-1, 0, 0, 16, 0); - unk_2000000.varF0 = sub_80F8FB4; + ewram0.varF0 = sub_80F8FB4; } } @@ -699,18 +417,18 @@ static void sub_80F8FB4(void) return; } - SetMainCallback2(unk_2000000.varEC); - switch (unk_2000000.varFB) + SetMainCallback2(ewram0.varEC); + switch (ewram0.varFB) { case 2: case 1: - local1 = sub_809D4A8(unk_2000000.varF4->species); + local1 = sub_809D4A8(ewram0.varF4->species); sub_809D608(local1); - sub_809D510(&gSprites[unk_2000000.varFC]); + sub_809D510(&gSprites[ewram0.varFC]); break; } - memset(&unk_2000000, 0, 0x110); + memset(&ewram0, 0, 0x110); ResetPaletteFade(); } diff --git a/src/mail_data.c b/src/mail_data.c new file mode 100644 index 000000000..f83484346 --- /dev/null +++ b/src/mail_data.c @@ -0,0 +1,207 @@ +#include "global.h" +#include "items.h" +#include "name_string_util.h" +#include "pokemon.h" +#include "species.h" +#include "text.h" + +void sub_80A2B40(struct MailStruct *); +u16 sub_80A2D44(u16, u32); +bool8 itemid_is_mail(u16); +u16 sub_809D474(u32); + +void sub_80A2B18(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + sub_80A2B40(&gSaveBlock1.mail[i]); +} + +void sub_80A2B40(struct MailStruct *mail) +{ + int i; + + for (i = 0; i < 9; i++) + mail->words[i] = -1; + + for (i = 0; i < 8; i++) + mail->playerName[i] = -1; + + for (i = 0; i < 4; i++) + mail->trainerId[i] = 0; + + mail->species = 1; + mail->itemId = 0; +} + +bool8 sub_80A2B94(struct Pokemon *mon) +{ + u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM); + if (itemid_is_mail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF) + return TRUE; + else + return FALSE; +} + +u8 sub_80A2BC4(struct Pokemon *mon, u16 itemId) +{ + u16 _itemId; + u8 heldItem[2]; + u8 id; + u8 i; + u16 species; + u32 personality; + + _itemId = itemId; + heldItem[0] = _itemId; + heldItem[1] = _itemId >> 8; + id = 0; + + while (id < 6) + { + if (gSaveBlock1.mail[id].itemId == 0) + { + for (i = 0; i < 9; i++) + gSaveBlock1.mail[id].words[i] = -1; + + for (i = 0; i < 7; i++) + gSaveBlock1.mail[id].playerName[i] = gSaveBlock2.playerName[i]; + gSaveBlock1.mail[id].playerName[i] = EOS; + PadNameString(gSaveBlock1.mail[id].playerName, 0); + + for (i = 0; i < 4; i++) + gSaveBlock1.mail[id].trainerId[i] = gSaveBlock2.playerTrainerId[i]; + + species = GetBoxMonData(&mon->box, MON_DATA_SPECIES); + personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY); + gSaveBlock1.mail[id].species = sub_80A2D44(species, personality); + gSaveBlock1.mail[id].itemId = _itemId; + SetMonData(mon, MON_DATA_MAIL, &id); + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + return id; + } + id++; + } + + return -1; +} + +u16 sub_80A2D44(u16 species, u32 personality) +{ + if (species != SPECIES_UNOWN) + return species; + return ((sub_809D474(personality) << 16) + (30000 << 16)) >> 16; +} + +u16 sub_80A2D64(u16 a1, u16 *a2) +{ + u16 result; + + if (a1 >= 30000 && a1 < (30000 + UNOWN_FORM_COUNT)) + { + result = SPECIES_UNOWN; + *a2 = a1 - 30000; + } + else + { + result = a1; + } + + return result; +} + +u8 sub_80A2D88(struct Pokemon *mon, struct MailStruct *mail) +{ + u8 heldItem[2]; + u16 itemId = mail->itemId; + u8 mailId = sub_80A2BC4(mon, itemId); + + if (mailId == 0xFF) + return 0xFF; + + gSaveBlock1.mail[mailId] = *mail; + + SetMonData(mon, MON_DATA_MAIL, &mailId); + + heldItem[0] = itemId; + heldItem[1] = itemId >> 8; + + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + + return mailId; +} + +int unref_sub_80A2DF4(void) +{ + return 0; +} + +void sub_80A2DF8(struct Pokemon *mon) +{ + u8 heldItem[2]; + u8 mailId; + + if (sub_80A2B94(mon)) + { + mailId = GetMonData(mon, MON_DATA_MAIL); + gSaveBlock1.mail[mailId].itemId = 0; + mailId = 0xFF; + heldItem[0] = 0; + heldItem[1] = 0; + SetMonData(mon, MON_DATA_MAIL, &mailId); + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + } +} + +void unref_sub_80A2E58(u8 mailId) +{ + gSaveBlock1.mail[mailId].itemId = 0; +} + +u8 sub_80A2E78(struct Pokemon *mon) +{ + u8 i; + u8 newHeldItem[2]; + u8 newMailId; + + newHeldItem[0] = 0; + newHeldItem[1] = 0; + newMailId = 0xFF; + + for (i = 6; i < 16; i++) + { + if (gSaveBlock1.mail[i].itemId == 0) + { + memcpy(&gSaveBlock1.mail[i], &gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct)); + gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)].itemId = 0; + SetMonData(mon, MON_DATA_MAIL, &newMailId); + SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem); + return i; + } + } + + return 0xFF; +} + +bool8 itemid_is_mail(u16 itemId) +{ + switch (itemId) + { + case ITEM_ORANGE_MAIL: + case ITEM_HARBOR_MAIL: + case ITEM_GLITTER_MAIL: + case ITEM_MECH_MAIL: + case ITEM_WOOD_MAIL: + case ITEM_WAVE_MAIL: + case ITEM_BEAD_MAIL: + case ITEM_SHADOW_MAIL: + case ITEM_TROPIC_MAIL: + case ITEM_DREAM_MAIL: + case ITEM_FAB_MAIL: + case ITEM_RETRO_MAIL: + return TRUE; + default: + return FALSE; + } +} diff --git a/src/main.c b/src/main.c index 3275c817e..114fc171f 100644 --- a/src/main.c +++ b/src/main.c @@ -31,9 +31,13 @@ static void IntrDummy(void); const u8 gGameVersion = GAME_VERSION; -const u8 gGameLanguage = GAME_LANGUAGE; // English +const u8 gGameLanguage = GAME_LANGUAGE; +#if defined(ENGLISH) const char BuildDateTime[] = "2002 10 15 20:34"; +#elif defined(GERMAN) +const char BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $"; +#endif const IntrFunc gIntrTableTemplate[] = { diff --git a/src/main_menu.c b/src/main_menu.c index 284fbac52..294d33620 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -692,10 +692,17 @@ void PrintPlayTime(void) u8 playTime[16]; u8 alignedPlayTime[32]; +#if defined(ENGLISH) MenuPrint(gMainMenuString_Time, 16, 3); FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); sub_8072C74(alignedPlayTime, playTime, 48, 1); MenuPrint(alignedPlayTime, 22, 3); +#elif defined(GERMAN) + MenuPrint_PixelCoords(gMainMenuString_Time, 124, 24, TRUE); + FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); + sub_8072C74(alignedPlayTime, playTime, 40, 1); + MenuPrint(alignedPlayTime, 23, 3); +#endif } void PrintPokedexCount(void) @@ -711,7 +718,11 @@ void PrintBadgeCount(void) { u8 buffer[16]; +#if defined(ENGLISH) MenuPrint(gMainMenuString_Badges, 16, 5); +#elif defined(GERMAN) + MenuPrint_PixelCoords(gMainMenuString_Badges, 124, 40, TRUE); +#endif ConvertIntToDecimalString(buffer, GetBadgeCount()); MenuPrint_PixelCoords(buffer, 205, 40, 1); } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 25651702d..11dadf380 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -121,109 +121,54 @@ void sub_80F7B40(void) oldMan->oldMan1.unk_2DBD = 1; } -// too mathy -__attribute__((naked)) void sub_80F7BA0(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r1, _080F7C48 @ =gSaveBlock1 + 0x2D94\n\ - ldr r0, _080F7C4C @ =gSpecialVar_0x8004\n\ - ldrh r0, [r0]\n\ - adds r5, r1, 0\n\ - adds r5, 0xE\n\ - cmp r0, 0\n\ - bne _080F7BB2\n\ - adds r5, r1, 0x2\n\ -_080F7BB2:\n\ - ldr r2, _080F7C50 @ =gStringVar4\n\ - adds r4, r2, 0\n\ - movs r6, 0\n\ -_080F7BB8:\n\ - ldrh r1, [r5]\n\ - adds r5, 0x2\n\ - adds r0, r2, 0\n\ - bl sub_80EB3FC\n\ - adds r2, r0, 0\n\ - adds r7, r6, 0x1\n\ - cmp r2, r4\n\ - beq _080F7BDA\n\ - movs r1, 0x37\n\ -_080F7BCC:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - bne _080F7BD4\n\ - strb r1, [r4]\n\ -_080F7BD4:\n\ - adds r4, 0x1\n\ - cmp r2, r4\n\ - bne _080F7BCC\n\ -_080F7BDA:\n\ - adds r4, 0x1\n\ - movs r0, 0\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - ldrh r1, [r5]\n\ - adds r5, 0x2\n\ - adds r0, r2, 0\n\ - bl sub_80EB3FC\n\ - adds r2, r0, 0\n\ - cmp r2, r4\n\ - beq _080F7C02\n\ - movs r1, 0x37\n\ -_080F7BF4:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - bne _080F7BFC\n\ - strb r1, [r4]\n\ -_080F7BFC:\n\ - adds r4, 0x1\n\ - cmp r2, r4\n\ - bne _080F7BF4\n\ -_080F7C02:\n\ - adds r4, 0x1\n\ - movs r0, 0xFE\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - ldrh r1, [r5]\n\ - adds r5, 0x2\n\ - adds r0, r2, 0\n\ - bl sub_80EB3FC\n\ - adds r2, r0, 0\n\ - cmp r2, r4\n\ - beq _080F7C2A\n\ - movs r1, 0x37\n\ -_080F7C1C:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - bne _080F7C24\n\ - strb r1, [r4]\n\ -_080F7C24:\n\ - adds r4, 0x1\n\ - cmp r2, r4\n\ - bne _080F7C1C\n\ -_080F7C2A:\n\ - cmp r6, 0\n\ - bne _080F7C3A\n\ - movs r0, 0xFC\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - movs r0, 0xF\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ -_080F7C3A:\n\ - lsls r0, r7, 16\n\ - lsrs r6, r0, 16\n\ - cmp r6, 0x1\n\ - bls _080F7BB8\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080F7C48: .4byte gSaveBlock1 + 0x2D94\n\ -_080F7C4C: .4byte gSpecialVar_0x8004\n\ -_080F7C50: .4byte gStringVar4\n\ - .syntax divided"); + struct UnkMauvilleOldManStruct *oldMan = &gSaveBlock1.oldMan.oldMan1; + u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. + u16 *r5; + u16 i; + u8 *ptr; + u8 *r4; + + r5 = oldMan->mauvilleOldMan_ecArray2; + if (specialVar == 0) + r5 = oldMan->mauvilleOldMan_ecArray; + ptr = gStringVar4; + r4 = ptr; + for (i = 0; i < 2; i++) + { + ptr = sub_80EB3FC(ptr, *(r5++)); + while (ptr != r4) + { + if (*r4 == 0) + *r4 = 0x37; + r4++; + } + r4++; + *(ptr++) = 0; + ptr = sub_80EB3FC(ptr, *(r5++)); + while (ptr != r4) + { + if (*r4 == 0) + *r4 = 0x37; + r4++; + } + r4++; + *(ptr++) = 0xFE; + ptr = sub_80EB3FC(ptr, *(r5++)); + while (ptr != r4) + { + if (*r4 == 0) + *r4 = 0x37; + r4++; + } + //_080F7C2A + if (i == 0) + { + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0xF; + } + } } void sub_80F7C54(void) @@ -276,131 +221,32 @@ void sub_80F7CC8(void) gScriptResult = TRUE; } -// someone fix this -#ifdef NONMATCHING void sub_80F7CF4(void) { - u8 *stringPtr; - OldMan *oldMan = &gSaveBlock1.oldMan; + struct UnkMauvilleOldManStruct2 *oldMan = &gSaveBlock1.oldMan.oldMan2; - if(oldMan->oldMan2.unk1 == 0) + if(oldMan->unk1 == 0) sub_80F7DC0(); - if(oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1] != 0xFFFF) // is not the last element of the array? + if(oldMan->mauvilleOldMan_ecArray[oldMan->unk1] != 0xFFFF) // is not the last element of the array? { - u16 random = 7 % Random(); // this is a little bit closer, but the compiler prefers an AND instead of division. i assume its because the compiler wants to avoid division by zero, however using an & causes this order to not be close anymore. - sub_80EB3FC(gStringVar4, oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1]); - stringPtr = StringCopy(gStringVar4, gOtherText_Is); + u8 *stringPtr; + u32 random = Random(); + + random %= 8; + stringPtr = sub_80EB3FC(gStringVar4, oldMan->mauvilleOldMan_ecArray[oldMan->unk1]); + stringPtr = StringCopy(stringPtr, gOtherText_Is); stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]); StringCopy(stringPtr, gOtherText_DontYouAgree); } else { - StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->oldMan2.mauvilleOldMan_ecArray2[oldMan->oldMan2.unk2++]]); + StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->mauvilleOldMan_ecArray2[oldMan->unk2++]]); } if(!(Random() % 10)) - oldMan->oldMan2.unk1 = 10; + oldMan->unk1 = 10; else - oldMan->oldMan2.unk1++; + oldMan->unk1++; gScriptResult = TRUE; } -#else -__attribute__((naked)) -void sub_80F7CF4(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r5, _080F7D50 @ =gSaveBlock1 + 0x2D94\n\ - ldrb r0, [r5, 0x1]\n\ - cmp r0, 0\n\ - bne _080F7D02\n\ - bl sub_80F7DC0\n\ -_080F7D02:\n\ - ldrb r0, [r5, 0x1]\n\ - lsls r0, 1\n\ - adds r6, r5, 0x4\n\ - adds r0, r6\n\ - ldrh r1, [r0]\n\ - ldr r0, _080F7D54 @ =0x0000ffff\n\ - cmp r1, r0\n\ - beq _080F7D68\n\ - bl Random\n\ - adds r4, r0, 0\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - movs r0, 0x7\n\ - ands r4, r0\n\ - ldr r0, _080F7D58 @ =gStringVar4\n\ - ldrb r1, [r5, 0x1]\n\ - lsls r1, 1\n\ - adds r1, r6\n\ - ldrh r1, [r1]\n\ - bl sub_80EB3FC\n\ - adds r2, r0, 0\n\ - ldr r1, _080F7D5C @ =gOtherText_Is\n\ - bl StringCopy\n\ - adds r2, r0, 0\n\ - ldr r0, _080F7D60 @ =gUnknown_083E5388\n\ - lsls r4, 2\n\ - adds r4, r0\n\ - ldr r1, [r4]\n\ - adds r0, r2, 0\n\ - bl StringCopy\n\ - adds r2, r0, 0\n\ - ldr r1, _080F7D64 @ =gOtherText_DontYouAgree\n\ - bl StringCopy\n\ - b _080F7D88\n\ - .align 2, 0\n\ -_080F7D50: .4byte gSaveBlock1 + 0x2D94\n\ -_080F7D54: .4byte 0x0000ffff\n\ -_080F7D58: .4byte gStringVar4\n\ -_080F7D5C: .4byte gOtherText_Is\n\ -_080F7D60: .4byte gUnknown_083E5388\n\ -_080F7D64: .4byte gOtherText_DontYouAgree\n\ -_080F7D68:\n\ - ldr r0, _080F7DA0 @ =gStringVar4\n\ - ldr r3, _080F7DA4 @ =gUnknown_083E53A8\n\ - ldrb r1, [r5, 0x2]\n\ - adds r2, r1, 0x1\n\ - strb r2, [r5, 0x2]\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r2, r5, 0\n\ - adds r2, 0x18\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - lsls r1, 2\n\ - adds r1, r3\n\ - ldr r1, [r1]\n\ - bl StringCopy\n\ -_080F7D88:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080F7DA8\n\ - movs r0, 0xA\n\ - b _080F7DAC\n\ - .align 2, 0\n\ -_080F7DA0: .4byte gStringVar4\n\ -_080F7DA4: .4byte gUnknown_083E53A8\n\ -_080F7DA8:\n\ - ldrb r0, [r5, 0x1]\n\ - adds r0, 0x1\n\ -_080F7DAC:\n\ - strb r0, [r5, 0x1]\n\ - ldr r1, _080F7DBC @ =gScriptResult\n\ - movs r0, 0x1\n\ - strh r0, [r1]\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080F7DBC: .4byte gScriptResult\n\ - .syntax divided"); -} -#endif diff --git a/src/money.c b/src/money.c index e73ee506a..de0730951 100644 --- a/src/money.c +++ b/src/money.c @@ -138,10 +138,12 @@ void sub_80B7AEC(u32 arg0, u8 left, u8 top) MenuPrint_RightAligned(buffer, left, top); +#ifdef ENGLISH ptr[0] = 0xFC; ptr[1] = 0x14; ptr[2] = 0x00; ptr[3] = 0xFF; +#endif } __attribute__((naked)) diff --git a/src/new_game.c b/src/new_game.c index e058280af..3b93d37cc 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -9,6 +9,7 @@ #include "pokedex.h" #include "pokemon_size_record.h" #include "rng.h" +#include "roamer.h" #include "rom4.h" #include "rtc.h" #include "script.h" @@ -135,8 +136,8 @@ void NewGameInitData(void) gPlayerPartyCount = 0; ZeroPlayerPartyMons(); sub_80961D8(); - sub_81341F8(); - sub_813420C(); + ClearRoamerData(); + ClearRoamerLocationData(); gSaveBlock1.registeredItem = 0; sub_80A3714(); NewGameInitPCItems(); diff --git a/src/pokedex.c b/src/pokedex.c index a5dcfe049..3ef1de51e 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -51,15 +51,6 @@ struct PokedexEntry /*0x20*/ u16 trainerOffset; }; /*size = 0x24*/ -struct CryRelatedStruct -{ - u16 unk0; - u8 unk2; - u8 unk3; - u8 unk4; - u8 unk5; -}; - extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gReservedSpritePaletteCount; extern struct PokedexView *gPokedexView; @@ -124,13 +115,6 @@ u16 NationalPokedexNumToSpecies(u16); // asm/pokedex_area_screen void ShowPokedexAreaScreen(u16 species, u8 *string); -// asm/pokedex_cry_screen -u8 sub_8119E3C(struct CryRelatedStruct *, u8); -void sub_8119F88(u8 a); -void sub_811A050(u16 species); -u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8); -void DestroyCryMeterNeedleSprite(); - void sub_808C02C(void) { u16 i; @@ -2526,9 +2510,9 @@ void Task_InitCryScreenMultistep(u8 taskId) sp8.unk0 = 0x4020; sp8.unk2 = 0x1F; - sp8.unk3 = 8; - sp8.unk5 = 0x1E; - sp8.unk4 = 0xC; + sp8.paletteNo = 8; + sp8.yPos = 0x1E; + sp8.xPos = 0xC; if (sub_8119E3C(&sp8, 0) != 0) { gMain.state++; @@ -2542,9 +2526,9 @@ void Task_InitCryScreenMultistep(u8 taskId) sp10.unk0 = 0x3000; sp10.unk2 = 0xE; - sp10.unk3 = 9; - sp10.unk4 = 0x12; - sp10.unk5 = 3; + sp10.paletteNo = 9; + sp10.xPos = 0x12; + sp10.yPos = 3; if (ShowPokedexCryScreen(&sp10, 1) != 0) { gMain.state++; diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c new file mode 100644 index 000000000..53807befc --- /dev/null +++ b/src/pokedex_cry_screen.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "asm.h" +#include "palette.h" +#include "sprite.h" + +struct Unk201C800 { + u8 unk_0; + u8 unk_1; + u8 unk_2; + u8 filler_3; + u16 unk_4; +}; + +#define EWRAM_1C800 (*(struct Unk201C800 *)(unk_201C000 + 0x800)) + +extern u8 unk_201C000[]; + +extern u8 gUnknown_03005E98; + +// data/pokedex_cry_screen.o +extern const u16 gUnknown_083FAE7C[]; +extern const u16 gUnknown_083FAF1C[]; +extern const u8 gUnknown_083FAF3C[]; +extern struct SpriteTemplate gSpriteTemplate_83FB774; +extern const struct SpriteSheet gCryMeterNeedleSpriteSheets[]; +extern const struct SpritePalette gCryMeterNeedleSpritePalettes[]; + +#if ENGLISH +#define CRY_METER_MAP_WIDTH 10 +#elif GERMAN +#define CRY_METER_MAP_WIDTH 32 +#endif + +u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { + int returnVal = FALSE; + + switch (gUnknown_03005E98) + { + case 0: + LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0)); + LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20); + gUnknown_03005E98 += 1; + break; + + case 1: + { + void *vram; + u8 row, col; + u32 r12; + int x, y; + + vram = (void *) BG_SCREEN_ADDR(cry->unk2); + + r12 = (u32) (cry->unk0 << 18) >> 23; + + for (row = 0; row < 8; row++) + { + for (col = 0; col < 10; col++) + { + y = row + cry->yPos; + x = col + cry->xPos; + *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; + } + } + + gUnknown_03005E98 += 1; + break; + } + + case 2: + { + LoadSpriteSheets(gCryMeterNeedleSpriteSheets); + LoadSpritePalettes(gCryMeterNeedleSpritePalettes); + EWRAM_1C800.unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); + EWRAM_1C800.unk_0 = 0x20; + EWRAM_1C800.unk_1 = 0x20; + EWRAM_1C800.unk_2 = 0; + + returnVal = TRUE; + break; + } + } + + return returnVal; +} diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 1c11449c3..204fa7b9a 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -51,7 +51,7 @@ void ZeroMonData(struct Pokemon *mon) SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg); SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg); arg = 255; - SetMonData(mon, MON_DATA_64, (u8 *)&arg); + SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); } void ZeroPlayerPartyMons(void) @@ -75,7 +75,7 @@ void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFix CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); SetMonData(mon, MON_DATA_LEVEL, &level); arg = 255; - SetMonData(mon, MON_DATA_64, (u8 *)&arg); + SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); CalculateMonStats(mon); } @@ -478,7 +478,7 @@ void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest) SetMonData(dest, MON_DATA_HP, (u8 *)&value); SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value); value = 255; - SetMonData(dest, MON_DATA_64, (u8 *)&value); + SetMonData(dest, MON_DATA_MAIL, (u8 *)&value); CalculateMonStats(dest); } diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 9030fe096..3be11f453 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -383,8 +383,8 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) return mon->spAttack; case MON_DATA_SPDEF: return mon->spDefense; - case MON_DATA_64: - return mon->pokerus; + case MON_DATA_MAIL: + return mon->mail; default: return GetBoxMonData(&mon->box, field, data); } @@ -761,8 +761,8 @@ void SetMonData(struct Pokemon *mon, s32 field, const u8 *data) case MON_DATA_SPDEF: SET16(mon->spDefense); break; - case MON_DATA_64: - SET8(mon->pokerus); + case MON_DATA_MAIL: + SET8(mon->mail); break; case MON_DATA_SPECIES2: break; @@ -1079,7 +1079,7 @@ u8 SendMonToPC(struct Pokemon *mon) { if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE) { - sub_8040B1C(mon); + MonRestorePP(mon); CopyMon(&gPokemonStorage.boxes[i][j], &mon->box, sizeof(mon->box)); return 1; } diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 5f186292f..270a52ad5 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -1,12 +1,19 @@ #include "global.h" #include "asm.h" +#include "battle.h" #include "event_data.h" +#include "hold_effects.h" #include "item.h" #include "items.h" +#include "link.h" #include "main.h" +#include "m4a.h" #include "pokemon.h" #include "rng.h" +#include "rom4.h" #include "rtc.h" +#include "songs.h" +#include "sound.h" #include "species.h" #include "sprite.h" #include "string_util.h" @@ -40,7 +47,11 @@ struct EvolutionData struct Evolution evolutions[5]; }; -extern void get_battle_strings_(u8 *); +struct SpindaSpot +{ + u8 x, y; + u16 image[16]; +}; extern u8 gPlayerPartyCount; extern struct Pokemon gPlayerParty[6]; @@ -62,6 +73,29 @@ extern u8 gPlayerMonIndex; extern u8 gEnemyMonIndex; extern u8 gUnknown_02024C0B; extern u8 gUnknown_02024E6C; +extern struct SpindaSpot gSpindaSpotGraphics[]; +extern void *gUnknown_081FAF4C[]; +extern u8 gSpeciesNames[][11]; +extern struct Trainer gTrainers[]; +extern s8 gNatureStatTable[][5]; +extern s8 gUnknown_082082FE[][3]; +extern u16 gTrainerBattleOpponent; +extern u16 gBattleTypeFlags; +extern struct BaseStats gBaseStats[]; +extern u32 gBitTable[]; +extern u32 gExperienceTables[8][101]; +extern u32 gTMHMLearnsets[][2]; +extern const u16 *gLevelUpLearnsets[]; +extern u8 gBattleMonForms[]; +extern const u8 BattleText_Wally[]; +extern const struct SpritePalette gMonPaletteTable[]; +extern const struct SpritePalette gMonShinyPaletteTable[]; +extern const u16 gHMMoves[]; +extern s8 gUnknown_083F7E28[]; +extern u8 byte_2024C06; +extern const u8 BattleText_PreventedSwitch[]; +extern u16 gUnknown_02024A6A[]; +extern u8 gJapaneseNidoranNames[][11]; extern u8 gUnknown_082082F8[]; extern u8 gUnknown_083FFDB3[]; @@ -70,6 +104,8 @@ extern u8 gUnknown_083FEE5D[]; extern u8 gUnknown_083FEE92[]; extern u8 *gUnknown_08400F58[]; +u8 CheckPartyHasHadPokerus(struct Pokemon *, u8); + bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId) { u32 status = GetMonData(mon, MON_DATA_STATUS, 0); @@ -476,3 +512,920 @@ u32 SpeciesToCryId(u16 species) return gSpeciesIdToCryId[species - 276]; } + +void unref_sub_803F938(u16 species, u32 personality, u8 *dest) +{ + if (species == SPECIES_SPINDA && dest != gUnknown_081FAF4C[0] && dest != gUnknown_081FAF4C[2]) + { + int i; + for (i = 0; i < 4; i++) + { + int j; + u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); + u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); + + for (j = 0; j < 16; j++) + { + int k; + s32 row = gSpindaSpotGraphics[i].image[j]; + + for (k = x; k < x + 16; k++) + { + u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2); + + if (row & 1) + { + if (k & 1) + { + if ((u8)((*val & 0xF0) - 0x10) <= 0x20) + *val += 0x40; + } + else + { + if ((u8)((*val & 0xF) - 0x01) <= 0x02) + *val += 0x04; + } + } + + row >>= 1; + } + + y++; + } + + personality >>= 8; + } + } +} + +void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4) +{ + if (species == SPECIES_SPINDA && a4) + { + int i; + for (i = 0; i < 4; i++) + { + int j; + u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); + u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); + + for (j = 0; j < 16; j++) + { + int k; + s32 row = gSpindaSpotGraphics[i].image[j]; + + for (k = x; k < x + 16; k++) + { + u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2); + + if (row & 1) + { + if (k & 1) + { + if ((u8)((*val & 0xF0) - 0x10) <= 0x20) + *val += 0x40; + } + else + { + if ((u8)((*val & 0xF) - 0x01) <= 0x02) + *val += 0x04; + } + } + + row >>= 1; + } + + y++; + } + + personality >>= 8; + } + } +} + +void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) +{ +#ifdef BUGFIX_EVO_NAME + u8 language; + GetMonData(mon, MON_DATA_NICKNAME, gStringVar1); + language = GetMonData(mon, MON_DATA_LANGUAGE, &language); + if (language == GAME_LANGUAGE && !StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1)) + SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); +#else + GetMonData(mon, MON_DATA_NICKNAME, gStringVar1); + if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1)) + SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); +#endif +} + +bool8 sub_803FBBC(void) +{ + bool8 retVal = FALSE; + switch (gLinkPlayers[GetMultiplayerId()].lp_field_18) + { + case 0: + case 3: + retVal = FALSE; + break; + case 1: + case 2: + retVal = TRUE; + break; + } + return retVal; +} + +bool8 sub_803FBFC(u8 id) +{ + bool8 retVal = FALSE; + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + retVal = FALSE; + break; + case 1: + case 2: + retVal = TRUE; + break; + } + return retVal; +} + +s32 sub_803FC34(u16 a1) +{ + s32 id; + for (id = 0; id < MAX_LINK_PLAYERS; id++) + if (gLinkPlayers[id].lp_field_18 == a1) + break; + return id; +} + +u8 sub_803FC58(u16 trainer) +{ + return gTrainers[trainer].encounterMusic_gender & 0x7F; +} + +u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex) +{ + if (statIndex < 1 || statIndex > 5) + { + // should just be "return n", but it wouldn't match without this + u16 retVal = n; + retVal++; + retVal--; + return retVal; + } + + switch (gNatureStatTable[nature][statIndex - 1]) + { + case 1: + return (u16)(n * 110) / 100; + case -1: + return (u16)(n * 90) / 100; + } + + return n; +} + +void AdjustFriendship(struct Pokemon *mon, u8 event) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + u8 holdEffect; + + if (heldItem == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + { + holdEffect = gEnigmaBerries[0].holdEffect; + } + else + { + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + } + } + else + { + holdEffect = ItemId_GetHoldEffect(heldItem); + } + + if (species && species != SPECIES_EGG) + { + u8 friendshipLevel = 0; + s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); + if (friendship > 99) + friendshipLevel++; + if (friendship > 199) + friendshipLevel++; + if ((event != 5 || !(Random() & 1)) + && (event != 3 + || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && (gTrainers[gTrainerBattleOpponent].trainerClass == 24 + || gTrainers[gTrainerBattleOpponent].trainerClass == 25 + || gTrainers[gTrainerBattleOpponent].trainerClass == 32)))) + { + s8 mod = gUnknown_082082FE[event][friendshipLevel]; + if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + mod = (150 * mod) / 100; + friendship += mod; + if (mod > 0) + { + if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL) + friendship++; + if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&friendship); + } + } +} + +void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) +{ + u8 evs[NUM_STATS]; + u16 evIncrease = 0; + u16 totalEVs = 0; + u16 heldItem; + u8 holdEffect; + int i; + + for (i = 0; i < NUM_STATS; i++) + { + evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0); + totalEVs += evs[i]; + } + + for (i = 0; i < NUM_STATS; i++) + { + u8 hasHadPokerus; + int multiplier; + + if (totalEVs >= MAX_TOTAL_EVS) + break; + + hasHadPokerus = CheckPartyHasHadPokerus(mon, 0); + + if (hasHadPokerus) + multiplier = 2; + else + multiplier = 1; + + switch (i) + { + case 0: + evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier; + break; + case 1: + evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier; + break; + case 2: + evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier; + break; + case 3: + evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier; + break; + case 4: + evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier; + break; + case 5: + evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier; + break; + } + + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + + if (heldItem == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + { + holdEffect = gEnigmaBerries[0].holdEffect; + } + else + { + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + } + } + else + { + holdEffect = ItemId_GetHoldEffect(heldItem); + } + + if (holdEffect == HOLD_EFFECT_MACHO_BRACE) + evIncrease *= 2; + + if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS) + evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease); + + if (evs[i] + (s16)evIncrease > 255) + { + int val1 = (s16)evIncrease + 255; + int val2 = evs[i] + evIncrease; + evIncrease = val1 - val2; + } + + evs[i] += evIncrease; + totalEVs += evIncrease; + SetMonData(mon, MON_DATA_HP_EV + i, &evs[i]); + } +} + +u16 GetMonEVCount(struct Pokemon *mon) +{ + int i; + u16 count = 0; + + for (i = 0; i < NUM_STATS; i++) + count += GetMonData(mon, MON_DATA_HP_EV + i, 0); + + return count; +} + +void RandomlyGivePartyPokerus(struct Pokemon *party) +{ + u16 rnd = Random(); + if (rnd == 0x4000 || rnd == 0x8000 || rnd == 0xC000) + { + struct Pokemon *mon; + + do + { + do + { + rnd = Random() % PARTY_SIZE; + mon = &party[rnd]; + } + while (!GetMonData(mon, MON_DATA_SPECIES, 0)); + } + while (GetMonData(mon, MON_DATA_IS_EGG, 0)); + + if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd]))) + { + u8 rnd2; + + do + { + rnd2 = Random(); + } + while (rnd2 == 0); + + if (rnd2 & 0xF0) + rnd2 &= 0x07; + + rnd2 |= (rnd2 << 4); + rnd2 &= 0xF3; + rnd2++; + + SetMonData(&party[rnd], MON_DATA_POKERUS, &rnd2); + } + } +} + +u8 CheckPartyPokerus(struct Pokemon *party, u8 selection) +{ + u8 retVal; + + int partyIndex = 0; + unsigned curBit = 1; + retVal = 0; + + if (selection) + { + do + { + if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF)) + retVal |= curBit; + partyIndex++; + curBit <<= 1; + selection >>= 1; + } + while (selection); + } + else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF) + { + retVal = 1; + } + + return retVal; +} + +u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection) +{ + u8 retVal; + + int partyIndex = 0; + unsigned curBit = 1; + retVal = 0; + + if (selection) + { + do + { + if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0)) + retVal |= curBit; + partyIndex++; + curBit <<= 1; + selection >>= 1; + } + while (selection); + } + else if (GetMonData(&party[0], MON_DATA_POKERUS, 0)) + { + retVal = 1; + } + + return retVal; +} + +void UpdatePartyPokerusTime(u16 days) +{ + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, 0)) + { + u8 pokerus = GetMonData(&gPlayerParty[i], MON_DATA_POKERUS, 0); + if (pokerus & 0xF) + { + if ((pokerus & 0xF) < days || days > 4) + pokerus &= 0xF0; + else + pokerus -= days; + + SetMonData(&gPlayerParty[i], MON_DATA_POKERUS, &pokerus); + } + } + } +} + +void PartySpreadPokerus(struct Pokemon *party) +{ + if ((Random() % 3) == 0) + { + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES, 0)) + { + u8 pokerus = GetMonData(&party[i], MON_DATA_POKERUS, 0); + u8 curPokerus = pokerus; + if (pokerus) + { + if (pokerus & 0xF) + { + // spread to adjacent party members + if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0)) + SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus); + if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0)) + { + SetMonData(&party[i + 1], MON_DATA_POKERUS, &curPokerus); + i++; + } + } + } + } + } + } +} + +bool8 TryIncrementMonLevel(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1; + if (GetMonData(mon, MON_DATA_EXP, 0) > gExperienceTables[gBaseStats[species].growthRate][nextLevel]) + { + SetMonData(mon, MON_DATA_LEVEL, &nextLevel); + return TRUE; + } + else + { + return FALSE; + } +} + +u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + if (species == SPECIES_EGG) + { + return 0; + } + else if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species][0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species][1] & mask; + } +} + +u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves) +{ + u16 learnedMoves[4]; + u8 numMoves = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); + int i, j, k; + + for (i = 0; i < 4; i++) + learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); + + for (i = 0; i < 20; i++) + { + u16 moveLevel; + + if (gLevelUpLearnsets[species][i] == 0xFFFF) + break; + + moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + + if (moveLevel <= (level << 9)) + { + for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + ; + + if (j == 4) + { + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + ; + + if (k == numMoves) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + } + } + } + + return numMoves; +} + +u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves) +{ + u8 numMoves = 0; + int i; + + for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + + return numMoves; +} + +u8 sub_8040574(struct Pokemon *mon) +{ + u16 learnedMoves[4]; + u16 moves[20]; + u8 numMoves = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); + int i, j, k; + + if (species == SPECIES_EGG) + return 0; + + for (i = 0; i < 4; i++) + learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); + + for (i = 0; i < 20; i++) + { + u16 moveLevel; + + if (gLevelUpLearnsets[species][i] == 0xFFFF) + break; + + moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + + if (moveLevel <= (level << 9)) + { + for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + ; + + if (j == 4) + { + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + ; + + if (k == numMoves) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + } + } + } + + return numMoves; +} + +u16 SpeciesToPokedexNum(u16 species) +{ + if (IsNationalPokedexEnabled()) + { + return SpeciesToNationalPokedexNum(species); + } + else + { + species = SpeciesToHoennPokedexNum(species); + if (species <= 202) + return species; + return 0xFFFF; + } +} + +void ClearBattleMonForms(void) +{ + int i; + for (i = 0; i < 4; i++) + gBattleMonForms[i] = 0; +} + +u16 sub_8040728(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) + return BGM_BATTLE34; + if (gBattleTypeFlags & BATTLE_TYPE_REGI) + return BGM_BATTLE36; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return BGM_BATTLE20; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + switch (gTrainers[gTrainerBattleOpponent].trainerClass) + { + case 2: + case 0x31: + return BGM_BATTLE30; + case 3: + case 4: + case 0x32: + case 0x33: + return BGM_BATTLE31; + case 0x19: + return BGM_BATTLE32; + case 0x20: + return BGM_BATTLE33; + case 0x2E: + if (!StringCompare(gTrainers[gTrainerBattleOpponent].trainerName, BattleText_Wally)) + return BGM_BATTLE20; + return BGM_BATTLE35; + case 0x18: + return BGM_BATTLE38; + default: + return BGM_BATTLE20; + } + } + return BGM_BATTLE27; +} + +void sub_80408BC(void) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + PlayBGM(sub_8040728()); +} + +void current_map_music_set__default_for_battle(u16 song) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + if (song) + PlayNewMapMusic(song); + else + PlayNewMapMusic(sub_8040728()); +} + +const u16 *species_and_otid_get_pal(u16, u32, u32); + +const u16 *pokemon_get_pal(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return species_and_otid_get_pal(species, otId, personality); +} + +//Extracts the upper 16 bits of a 32-bit number +#define HIHALF(n) (((n) & 0xFFFF0000) >> 16) + +//Extracts the lower 16 bits of a 32-bit number +#define LOHALF(n) ((n) & 0xFFFF) + +const u16 *species_and_otid_get_pal(u16 species, u32 otId , u32 personality) +{ + u32 shinyValue; + + if (species > SPECIES_EGG) + return gMonPaletteTable[0].data; + + shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + return gMonShinyPaletteTable[species].data; + else + return gMonPaletteTable[species].data; +} + +const struct SpritePalette *sub_80409C8(u16, u32, u32); + +const struct SpritePalette *sub_8040990(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return sub_80409C8(species, otId, personality); +} + +const struct SpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality) +{ + u32 shinyValue; + + shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + return &gMonShinyPaletteTable[species]; + else + return &gMonPaletteTable[species]; +} + +bool8 IsHMMove2(u16 move) +{ + int i = 0; + while (gHMMoves[i] != 0xFFFF) + { + if (gHMMoves[i++] == move) + return TRUE; + } + return FALSE; +} + +bool8 sub_8040A3C(u16 species) +{ + return gBaseStats[species].bodyColor >> 7; // XXX: should this be a bitfield instead? +} + +s8 sub_8040A54(struct Pokemon *mon, u8 a2) +{ + u8 nature = GetNature(mon); + return gUnknown_083F7E28[nature * 5 + a2]; +} + +s8 sub_8040A7C(u32 personality, u8 a2) +{ + u8 nature = GetNatureFromPersonality(personality); + return gUnknown_083F7E28[nature * 5 + a2]; +} + +bool8 IsOtherTrainer(u32, u8 *); + +bool8 IsTradedMon(struct Pokemon *mon) +{ + u8 otName[8]; + u32 otId; + GetMonData(mon, MON_DATA_OT_NAME, otName); + otId = GetMonData(mon, MON_DATA_OT_ID, 0); + return IsOtherTrainer(otId, otName); +} + +bool8 IsOtherTrainer(u32 otId, u8 *otName) +{ + if (otId == (gSaveBlock2.playerTrainerId[0] | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[3] << 24))) + { + int i; + + for (i = 0; otName[i] != EOS; i++) + if (otName[i] != gSaveBlock2.playerName[i]) + return TRUE; + return FALSE; + } + + return TRUE; +} + +void BoxMonRestorePP(struct BoxPokemon *); + +void MonRestorePP(struct Pokemon *mon) +{ + BoxMonRestorePP(&mon->box); +} + +void BoxMonRestorePP(struct BoxPokemon *boxMon) +{ + int i; + + for (i = 0; i < 4; i++) + { + if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0)) + { + u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0); + u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0); + u8 pp = CalculatePPWithBonus(move, bonus, i); + SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp); + } + } +} + +void sub_8040B8C(void) +{ + byte_2024C06 = BATTLE_STRUCT->filler1_2[0x37]; + gUnknown_030041C0[0] = 0xFD; + gUnknown_030041C0[1] = 4; + gUnknown_030041C0[2] = BATTLE_STRUCT->filler1[0x34]; + gUnknown_030041C0[4] = EOS; + if (!battle_side_get_owner(BATTLE_STRUCT->filler1[0x34])) + gUnknown_030041C0[3] = pokemon_order_func(gUnknown_02024A6A[BATTLE_STRUCT->filler1[0x34]]); + else + gUnknown_030041C0[3] = gUnknown_02024A6A[BATTLE_STRUCT->filler1[0x34]]; + gUnknown_03004290[0] = 0xFD; + gUnknown_03004290[1] = 4; + gUnknown_03004290[2] = gUnknown_02024E6C; + gUnknown_03004290[3] = pokemon_order_func(gUnknown_02024A6A[gUnknown_02024E6C]); + gUnknown_03004290[4] = EOS; + sub_8120FFC(BattleText_PreventedSwitch, gStringVar4); +} + +void SetWildMonHeldItem(void) +{ + if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER))) + { + u16 rnd = Random() % 100; + u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); + if (gBaseStats[species].item1 == gBaseStats[species].item2) + { + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); + return; + } + + if (rnd > 44) + { + if (rnd <= 94) + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); + else + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item2); + } + } +} + +bool8 IsShinyOtIdPersonality(u32, u32); + +bool8 IsShiny(struct Pokemon *mon) +{ + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return IsShinyOtIdPersonality(otId, personality); +} + +bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) +{ + bool8 retVal = FALSE; + u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + retVal = TRUE; + return retVal; +} + +u8 *sub_8040D08(void) +{ + u8 id = GetMultiplayerId(); + return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name; +} + +bool32 sub_8040D3C(u16 species, u8 *name, u8 language) +{ + bool32 retVal = FALSE; + if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) + { + u8 *speciesName; + if (language == GAME_LANGUAGE) + { + speciesName = gSpeciesNames[species]; + } + else + { + if (species == SPECIES_NIDORAN_M) + speciesName = gJapaneseNidoranNames[0]; + else + speciesName = gJapaneseNidoranNames[1]; + } + if (!StringCompareWithoutExtCtrlCodes(name, speciesName)) + retVal = TRUE; + else + retVal = FALSE; + } + return retVal; +} + +bool32 sub_8040D8C(u16 species, u8 *name) +{ + u8 language = GAME_LANGUAGE; + if (name[0] == 0xFC && name[1] == 21) + language = LANGUAGE_JAPANESE; + return sub_8040D3C(species, name, language); +} + +bool32 unref_sub_8040DAC(struct Pokemon *mon) +{ + u8 name[12]; + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 language = GetMonData(mon, MON_DATA_LANGUAGE, 0); + GetMonData(mon, MON_DATA_NICKNAME, name); + return sub_8040D3C(species, name, language); +} diff --git a/src/roamer.c b/src/roamer.c new file mode 100644 index 000000000..394f81c75 --- /dev/null +++ b/src/roamer.c @@ -0,0 +1,226 @@ +#include "global.h" +#include "pokemon.h" +#include "rng.h" +#include "roamer.h" +#include "species.h" + +#ifdef SAPPHIRE +#define ROAMER_SPECIES SPECIES_LATIAS +#else +#define ROAMER_SPECIES SPECIES_LATIOS +#endif + +enum +{ + MAP_GRP = 0, // map group + MAP_NUM = 1, // map number +}; + +EWRAM_DATA static u8 sLocationHistory[3][2] = {0}; +EWRAM_DATA static u8 sRoamerLocation[2] = {0}; + +static const u8 sRoamerLocations[][6] = +{ + { 0x19, 0x1A, 0x20, 0x21, 0x31, 0xFF }, + { 0x1A, 0x19, 0x20, 0x21, 0xFF, 0xFF }, + { 0x20, 0x1A, 0x19, 0x21, 0xFF, 0xFF }, + { 0x21, 0x20, 0x19, 0x1A, 0x22, 0x26 }, + { 0x22, 0x21, 0x23, 0xFF, 0xFF, 0xFF }, + { 0x23, 0x22, 0x24, 0xFF, 0xFF, 0xFF }, + { 0x24, 0x23, 0x25, 0x26, 0xFF, 0xFF }, + { 0x25, 0x24, 0x26, 0xFF, 0xFF, 0xFF }, + { 0x26, 0x25, 0x21, 0xFF, 0xFF, 0xFF }, + { 0x27, 0x24, 0x28, 0x29, 0xFF, 0xFF }, + { 0x28, 0x27, 0x2A, 0xFF, 0xFF, 0xFF }, + { 0x29, 0x27, 0x2A, 0xFF, 0xFF, 0xFF }, + { 0x2A, 0x28, 0x29, 0x2B, 0xFF, 0xFF }, + { 0x2B, 0x2A, 0x2C, 0xFF, 0xFF, 0xFF }, + { 0x2C, 0x2B, 0x2D, 0xFF, 0xFF, 0xFF }, + { 0x2D, 0x2C, 0x2E, 0xFF, 0xFF, 0xFF }, + { 0x2E, 0x2D, 0x2F, 0xFF, 0xFF, 0xFF }, + { 0x2F, 0x2E, 0x30, 0xFF, 0xFF, 0xFF }, + { 0x30, 0x2F, 0x31, 0xFF, 0xFF, 0xFF }, + { 0x31, 0x30, 0x19, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, +}; + +void ClearRoamerData(void) +{ + memset(&gSaveBlock1.roamer, 0, sizeof(gSaveBlock1.roamer)); +} + +void ClearRoamerLocationData(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + sLocationHistory[i][MAP_GRP] = 0; + sLocationHistory[i][MAP_NUM] = 0; + } + + sRoamerLocation[MAP_GRP] = 0; + sRoamerLocation[MAP_NUM] = 0; +} + +void CreateInitialRoamerMon(void) +{ + struct Roamer *roamer; + CreateMon(&gEnemyParty[0], ROAMER_SPECIES, 40, 0x20, 0, 0, 0, 0); + roamer = &gSaveBlock1.roamer; + roamer->species = ROAMER_SPECIES; + roamer->level = 40; + roamer->status = 0; + roamer->active = TRUE; + roamer->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS); + roamer->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY); + roamer->hp = GetMonData(&gEnemyParty[0], MON_DATA_MAX_HP); + roamer->cool = GetMonData(&gEnemyParty[0], MON_DATA_COOL); + roamer->beauty = GetMonData(&gEnemyParty[0], MON_DATA_BEAUTY); + roamer->cute = GetMonData(&gEnemyParty[0], MON_DATA_CUTE); + roamer->smart = GetMonData(&gEnemyParty[0], MON_DATA_SMART); + roamer->tough = GetMonData(&gEnemyParty[0], MON_DATA_TOUGH); + sRoamerLocation[MAP_GRP] = 0; + sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % 20][0]; +} + +void InitRoamer(void) +{ + ClearRoamerData(); + ClearRoamerLocationData(); + CreateInitialRoamerMon(); +} + +void UpdateLocationHistoryForRoamer(void) +{ + sLocationHistory[2][MAP_GRP] = sLocationHistory[1][MAP_GRP]; + sLocationHistory[2][MAP_NUM] = sLocationHistory[1][MAP_NUM]; + + sLocationHistory[1][MAP_GRP] = sLocationHistory[0][MAP_GRP]; + sLocationHistory[1][MAP_NUM] = sLocationHistory[0][MAP_NUM]; + + sLocationHistory[0][MAP_GRP] = gSaveBlock1.location.mapGroup; + sLocationHistory[0][MAP_NUM] = gSaveBlock1.location.mapNum; +} + +void RoamerMoveToOtherLocationSet(void) +{ + u8 val = 0; + struct Roamer *roamer = &gSaveBlock1.roamer; + + if (!roamer->active) + return; + + sRoamerLocation[MAP_GRP] = val; + + while (1) + { + val = sRoamerLocations[Random() % 20][0]; + if (sRoamerLocation[MAP_NUM] != val) + { + sRoamerLocation[MAP_NUM] = val; + return; + } + } +} + +void RoamerMove(void) +{ + u8 locSet = 0; + + if ((Random() % 16) == 0) + { + RoamerMoveToOtherLocationSet(); + } + else + { + struct Roamer *roamer = &gSaveBlock1.roamer; + + if (!roamer->active) + return; + + while (locSet < 20) + { + if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0]) + { + u8 mapNum; + while (1) + { + mapNum = sRoamerLocations[locSet][(Random() % 5) + 1]; + if (!(sLocationHistory[2][MAP_GRP] == 0 && sLocationHistory[2][MAP_NUM] == mapNum) && mapNum != 0xFF) + break; + } + sRoamerLocation[MAP_NUM] = mapNum; + return; + } + locSet++; + } + } +} + +bool8 IsRoamerAt(u8 mapGroup, u8 mapNum) +{ + struct Roamer *roamer = &gSaveBlock1.roamer; + + if (roamer->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM]) + return TRUE; + else + return FALSE; +} + +void CreateRoamerMonInstance(void) +{ + struct Pokemon *mon = &gEnemyParty[0]; + struct Roamer *roamer = &gSaveBlock1.roamer; + CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality); + SetMonData(mon, MON_DATA_STATUS, (u8 *)&roamer->status); + SetMonData(mon, MON_DATA_HP, (u8 *)&roamer->hp); + SetMonData(mon, MON_DATA_COOL, (u8 *)&roamer->cool); + SetMonData(mon, MON_DATA_BEAUTY, (u8 *)&roamer->beauty); + SetMonData(mon, MON_DATA_CUTE, (u8 *)&roamer->cute); + SetMonData(mon, MON_DATA_SMART, (u8 *)&roamer->smart); + SetMonData(mon, MON_DATA_TOUGH, (u8 *)&roamer->tough); +} + +bool8 TryStartRoamerEncounter(void) +{ + if (IsRoamerAt(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE && (Random() % 4) == 0) + { + CreateRoamerMonInstance(); + return TRUE; + } + else + { + return FALSE; + } +} + +void UpdateRoamerHPStatus(struct Pokemon *mon) +{ + struct Roamer *roamer; + u16 hp; + u8 status; + + hp = GetMonData(mon, MON_DATA_HP); + + roamer = &gSaveBlock1.roamer; + roamer->hp = hp; + + status = GetMonData(mon, MON_DATA_STATUS); + + roamer->status = status; + + RoamerMoveToOtherLocationSet(); +} + +void SetRoamerInactive(void) +{ + struct Roamer *roamer = &gSaveBlock1.roamer; + roamer->active = FALSE; +} + +void GetRoamerLocation(u8 *mapGroup, u8 *mapNum) +{ + *mapGroup = sRoamerLocation[MAP_GRP]; + *mapNum = sRoamerLocation[MAP_NUM]; +} diff --git a/src/rom3.c b/src/rom3.c index 351d5d44b..b0ef7f088 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -56,7 +56,7 @@ extern void sub_8083C50(u8); extern void nullsub_41(void); extern void nullsub_91(void); extern void battle_anim_clear_some_data(void); -extern void sub_8040710(void); +extern void ClearBattleMonForms(void); extern void BattleAI_HandleItemUseBeforeAISetup(void); extern void sub_8094978(u8, int); extern void sub_800BA78(void); @@ -102,7 +102,7 @@ void setup_poochyena_battle(void) sub_800B858(); gUnknown_02024A64 = 0; battle_anim_clear_some_data(); - sub_8040710(); + ClearBattleMonForms(); BattleAI_HandleItemUseBeforeAISetup(); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { diff --git a/src/rom4.c b/src/rom4.c index 39c182731..5beb698ab 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -25,6 +25,7 @@ #include "palette.h" #include "play_time.h" #include "rng.h" +#include "roamer.h" #include "safari_zone.h" #include "script.h" #include "script_pokemon_80C4.h" @@ -164,8 +165,8 @@ void sub_805308C(void) FlagReset(SYS_SAFARI_MODE); sub_8054164(); ResetCyclingRoadChallengeData(); - mapnumbers_history_shift_sav1_0_2_4_out(); - sub_8134348(); + UpdateLocationHistoryForRoamer(); + RoamerMoveToOtherLocationSet(); } void ResetGameStats(void) @@ -531,8 +532,8 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) sub_807D874(i); sub_8072ED0(); - mapnumbers_history_shift_sav1_0_2_4_out(); - sub_8134394(); + UpdateLocationHistoryForRoamer(); + RoamerMove(); DoCurrentWeather(); ResetFieldTasksArgs(); mapheader_run_script_with_tag_x5(); @@ -561,8 +562,8 @@ void sub_8053994(u32 a1) sub_8053C98(); sav1_reset_battle_music_maybe(); mapheader_run_script_with_tag_x3(); - mapnumbers_history_shift_sav1_0_2_4_out(); - sub_8134348(); + UpdateLocationHistoryForRoamer(); + RoamerMoveToOtherLocationSet(); not_trainer_hill_battle_pyramid(); if (a1 != 1 && v3) { diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c index 7b572ba73..93fbce556 100644 --- a/src/rom_800D42C.c +++ b/src/rom_800D42C.c @@ -12,8 +12,16 @@ extern u8 BattleText_Win[]; extern u8 BattleText_Loss[]; extern u8 BattleText_Tie[]; +#if ENGLISH #define LEFT_MESSAGE_X 6 #define RIGHT_MESSAGE_X 21 +#define TILE_OFFSET_LOSS 168 +#elif GERMAN +#define LEFT_MESSAGE_X 5 +#define RIGHT_MESSAGE_X 20 +#define TILE_OFFSET_LOSS 172 +#endif +#define TILE_OFFSET_WIN 160 #define CENTER_MESSAGE_X 13 #define MESSAGE_Y 2 @@ -31,7 +39,7 @@ void sub_800DC24(void) if (gUnknown_02024D26 == 3) { - PRINT_MESSAGE(BattleText_Tie, 160, CENTER_MESSAGE_X); + PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X); return; } @@ -46,13 +54,15 @@ void sub_800DC24(void) switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) { case 0: - case 2: PRINT_MESSAGE_LEFT(BattleText_Win, 160); - PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + case 2: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); return; case 1: - case 3: PRINT_MESSAGE_RIGHT(BattleText_Win, 160) - PRINT_MESSAGE_LEFT(BattleText_Loss, 168) + case 3: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN) + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS) return; } } @@ -62,13 +72,15 @@ void sub_800DC24(void) switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) { case 1: - case 3: PRINT_MESSAGE_LEFT(BattleText_Win, 160); - PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + case 3: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); return; case 0: - case 2: PRINT_MESSAGE_RIGHT(BattleText_Win, 160); - PRINT_MESSAGE_LEFT(BattleText_Loss, 168); + case 2: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); return; } } @@ -81,26 +93,26 @@ void sub_800DC24(void) { if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) { - PRINT_MESSAGE_RIGHT(BattleText_Win, 160); - PRINT_MESSAGE_LEFT(BattleText_Loss, 168); + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); } else { - PRINT_MESSAGE_LEFT(BattleText_Win, 160); - PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); } } else { if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) { - PRINT_MESSAGE_LEFT(BattleText_Win, 160); - PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); } else { - PRINT_MESSAGE_RIGHT(BattleText_Win, 160); - PRINT_MESSAGE_LEFT(BattleText_Loss, 168); + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); } } } diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 2d7691033..b216bbe97 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -20,7 +20,6 @@ #define NUM_BATTLE_SLOTS 4 #define gBattleMonPartyPositions gUnknown_02024A6A -#define gBattleMonForms gUnknown_02024E84 #define gCastformFrontSpriteCoords gUnknownCastformCoords_0837F598 #define gCastformElevations gUnknownCastformData_0837F5A8 #define gCastformBackSpriteYCoords gUnknown_0837F5AC diff --git a/src/string_util.c b/src/string_util.c index e537cff3a..957d70153 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -137,6 +137,21 @@ u16 StringLength(const u8 *str) return length; } +#ifdef GERMAN +s32 StringLengthN(const u8 *str, s32 n) +{ + s32 i; + + for (i = 0; i < n && str[i] != EOS; i++) + ; + + if (i == n) + i = 0; + + return i; +} +#endif + s32 StringCompare(const u8 *str1, const u8 *str2) { while (*str1 == *str2) diff --git a/src/strings.c b/src/strings.c index 54c9bdc6a..f41af082c 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1,5 +1,6 @@ #include "global.h" +#if ENGLISH // placeholder strings const u8 gExpandedPlaceholder_Empty[] = _(""); const u8 gExpandedPlaceholder_Kun[] = _(""); @@ -921,3 +922,925 @@ const u8 gSystemText_SaveFailed[] = _("Save failed..."); const u8 gSystemText_NoSaveFileNoTime[] = _("There is no save file, so the time\ncan’t be set."); const u8 gSystemText_ClockAdjustmentUsable[] = _("The in-game clock adjustment system\nis now useable."); const u8 gSystemText_Saving[] = _("SAVING...\nDON’T TURN OFF THE POWER."); +#elif GERMAN +#include "global.h" + +// placeholder strings +const u8 gExpandedPlaceholder_Empty[] = _(""); +const u8 gExpandedPlaceholder_Kun[] = _(""); +const u8 gExpandedPlaceholder_Chan[] = _(""); +const u8 gExpandedPlaceholder_Sapphire[] = _("SAPHIR"); +const u8 gExpandedPlaceholder_Ruby[] = _("RUBIN"); +const u8 gExpandedPlaceholder_Aqua[] = _("AQUA"); +const u8 gExpandedPlaceholder_Magma[] = _("MAGMA"); +const u8 gExpandedPlaceholder_Archie[] = _("ADRIAN"); +const u8 gExpandedPlaceholder_Maxie[] = _("MARC"); +const u8 gExpandedPlaceholder_Kyogre[] = _("KYOGRE"); +const u8 gExpandedPlaceholder_Groudon[] = _("GROUDON"); +const u8 gExpandedPlaceholder_Brendan[] = _("BRIX"); +const u8 gExpandedPlaceholder_May[] = _("MAIKE"); + +// system text +const u8 gSystemText_Egg[] = _("EI"); +const u8 gSystemText_Pokemon2[] = _("POKéMON"); + +// main menu text +const u8 gMainMenuString_NewGame[] = _("NEUES SPIEL"); +const u8 gMainMenuString_Continue[] = _("WEITER"); +const u8 gMainMenuString_Option[] = _("OPTIONEN"); +const u8 gMainMenuString_MysteryEvents[] = _("GEHEIMGESCHEHEN"); + +// system text 2 +const u8 SystemText_UpdatingSaveExternal[] = _("Neuer Spielstand mittels Übertra-\ngung externer Daten. Bitte warten."); +const u8 SystemText_SaveUpdated[] = _("Der Spielstand wurde erneuert."); +const u8 SystemText_SaveUpdatedExchangeBackup[] = _("Der Spielstand wurde gespeichert.\pDas Backup Memory kann keine \nweiteren Spieldaten sichern.\pBitte Backup Memory austauschen.\pBei Fragen bitte an die Nintendo\nKonsumentenberatung wenden."); +const u8 SystemText_SaveNotUpdated[] = _("Spielstand wurde nicht gesichert.\pBitte Backup Memory \naustauschen.\pBei Fragen bitte an die Nintendo\nKonsumentenberatung wenden."); + +// save file text +const u8 gSaveFileCorruptMessage[] = _("Der Spielstand ist beschädigt. Der\nvorherige Spielstand wird geladen."); +const u8 gSaveFileDeletedMessage[] = _("Der Spielstand wurde gelöscht."); + +// system text 3 +const u8 gBoardNotInstalledMessage[] = _("Das ‘1M Sub-circuit Board’\nist nicht installiert."); +const u8 gBatteryDryMessage[] = _("Interne Batterie ist verbraucht.\nSpiel kann fortgesetzt werden.\pAber zeitbasierende Spiel-Events\nwerden nicht mehr initiiert."); + +// main menu text 2 +const u8 gMainMenuString_Player[] = _("SPIELER"); +const u8 gMainMenuString_Pokedex[] = _("POKéDEX"); +const u8 gMainMenuString_Time[] = _("SPIELZEIT"); +const u8 gMainMenuString_Badges[] = _("ORDEN"); + +// birch text +const u8 gBirchText_Boy[] = _("JUNGE"); +const u8 gBirchText_Girl[] = _("MÄDEL"); +const u8 gBirchText_NewName[] = _("NEUER NAME"); + +#ifdef SAPPHIRE +const u8 gDefaultBoyName1[] = _("SEAN"); +#else +const u8 gDefaultBoyName1[] = _("ROLAND"); +#endif +const u8 gDefaultBoyName2[] = _("DANIEL"); +const u8 gDefaultBoyName3[] = _("HELGE"); +const u8 gDefaultBoyName4[] = _("JAN"); + +#ifdef SAPPHIRE +const u8 gDefaultGirlName1[] = _("MARINA"); +#else +const u8 gDefaultGirlName1[] = _("PETRA"); +#endif +const u8 gDefaultGirlName2[] = _("TANJA"); +const u8 gDefaultGirlName3[] = _("ANDREA"); +const u8 gDefaultGirlName4[] = _("SARA"); + +const u8 gSystemText_IntroWeCall[] = _("Dies ist ein so genanntes\n“POKéMON”."); +const u8 gSystemText_NewPara[] = _("\p"); + +const u8 gDexText_UnknownPoke[] = _("?????"); +const u8 gDexText_UnknownHeight[] = _("???,? m"); +const u8 gDexText_UnknownWeight[] = _("???,? kg$"); +const u8 gDexText_CryOf[] = _("{CLEAR_TO 2}RUF VON$"); +const u8 gDexText_SizeComparedTo[] = _("GRÖSSE IM VERGLEICH ZU "); +const u8 gDexText_RegisterComplete[] = _("Neuer Eintrag aufgenommen."); +const u8 gDexText_Searching[] = _("Suche läuft.\nBitte warten..."); +const u8 gDexText_SearchComplete[] = _("Suche beendet."); +const u8 gDexText_NoMatching[] = _("Es wurde keine Übereinstimmung ermittelt."); + +const u8 DexText_SearchForPoke[] = _("Suche nach POKéMON anhand\nausgewählter Parameter."); +const u8 DexText_SwitchDex[] = _("Ordnungssystem des POKéDEX ändern."); +const u8 DexText_ReturnToDex[] = _("Kehre zurück zum POKéDEX."); +const u8 DexText_SelectDexMode[] = _("Wähle einen POKéDEX."); +const u8 DexText_SelectDexList[] = _("Wähle ein Ordnungssystem des POKéDEX."); +const u8 DexText_ListByABC[] = _("Nach Anfangsbuchstaben suchen.\n(Alle gesehenen POKéMON.)"); +const u8 DexText_ListByColor[] = _("Nach Körperfarbe suchen.\n(Alle gesehenen POKéMON.)"); +const u8 DexText_ListByType[] = _("Nach Elementklasse suchen.\n(Nur gefangene POKéMON.)"); +const u8 DexText_ExecuteSearchSwitch[] = _("Suche/Ändern ausführen."); +const u8 DexText_HoennDex[] = _("HOENN DEX"); +const u8 DexText_NationalDex[] = _("NATIONALER DEX"); +const u8 DexText_NumericalMode[] = _("NUMERISCH"); +const u8 DexText_ABCMode[] = _("VON A BIS Z"); +const u8 DexText_HeaviestMode[] = _("NACH GEWICHT {0x86}"); +const u8 DexText_LightestMode[] = _("NACH GEWICHT {0x85}"); +const u8 DexText_TallestMode[] = _("NACH GRÖSSE {0x86}"); +const u8 DexText_SmallestMode[] = _("NACH GRÖSSE {0x85}"); +const u8 DexText_ABC[] = _("ABC"); +const u8 DexText_DEF[] = _("DEF"); +const u8 DexText_GHI[] = _("GHI"); +const u8 DexText_JKL[] = _("JKL"); +const u8 DexText_MNO[] = _("MNO"); +const u8 DexText_PQR[] = _("PQR"); +const u8 DexText_STU[] = _("STU"); +const u8 DexText_VWX[] = _("VWX"); +const u8 DexText_YZ[] = _("YZ"); +const u8 DexText_Red[] = _("ROT"); +const u8 DexText_Blue[] = _("BLAU"); +const u8 DexText_Yellow[] = _("GELB"); +const u8 DexText_Green[] = _("GRÜN"); +const u8 DexText_Black[] = _("SCHWARZ"); +const u8 DexText_Brown[] = _("BRAUN"); +const u8 DexText_Purple[] = _("LILA"); +const u8 DexText_Gray[] = _("GRAU"); +const u8 DexText_White[] = _("WEISS"); +const u8 DexText_Pink[] = _("ROSA"); +const u8 DexText_HoennDex2[] = _("POKéDEX von HOENN"); +const u8 DexText_NationalDex2[] = _("POKéDEX, erweiterte Edition"); +const u8 DexText_ListByNumber[] = _("POKéMON werden anhand ihrer\nNummer sortiert."); +const u8 DexText_ListByABC2[] = _("Gesehene und gefangene POKéMON\nwerden alphabetisch geordnet."); +const u8 DexText_ListByHeavyToLightest[] = _("Gefangene POKéMON werden nach Gewicht\nsortiert, beginnend mit dem schwersten."); +const u8 DexText_ListByLightToHeaviest[] = _("Gefangene POKéMON werden nach Gewicht\nsortiert, beginnend mit dem leichtesten."); +const u8 DexText_ListByTallToSmallest[] = _("Gefangene POKéMON werden nach Größe\nsortiert, beginnend mit dem größten."); +const u8 DexText_ListBySmallToTallest[] = _("Gefangene POKéMON werden nach Größe\nsortiert, beginnend mit dem kleinsten."); +const u8 DexText_Terminator5[] = _(""); +const u8 DexText_DontSpecify[] = _("KEINE ANGABE"); +const u8 DexText_None[] = _("KEINER"); +const u8 DexText_RightPointingTriangle[] = _("▶"); +const u8 DexText_Terminator6[] = _(" "); + +const u8 gMenuText_WelcomeToHOFAndDexRating[] = _("Willkommen in der RUHMESHALLE!$Gesehene POKéMON: {STR_VAR_1}!\nGefangene POKéMON: {STR_VAR_2}!\pPROF. BIRKs POKéDEX-Bewertung!\pPROF. BIRK: Sehen wir mal...\p"); +const u8 gMenuText_HOFSaving[] = _("SPEICHERVORGANG...\nDAS GERÄT NICHT AUSSCHALTEN!"); +const u8 gMenuText_HOFCorrupt[] = _("Die RH-Daten sind beschädigt."); +const u8 gMenuText_HOFNumber[] = _("RUHMESHALLE, Nr. "); +const u8 gMenuText_HOFCongratulations[] = _("CHAMP der POKéMON LIGA!\nHerzlichen Glückwunsch!"); + +const u8 gOtherText_Number2[] = _("Nr."); +const u8 gOtherText_Level3[] = _("Lv."); +const u8 gOtherText_IDNumber[] = _("ID.Nr. /"); +const u8 gOtherText_Name[] = _("NAME /"); +const u8 gOtherText_IDNumber2[] = _("ID.Nr. /"); +const u8 gOtherText_BirchInTrouble[] = _("{HIGHLIGHT WHITE2}{COLOR DARK_GREY}PROF. BIRK ist in Schwierigkeiten!\nSchnapp’ dir ein POKéMON und hilf ihm!"); +const u8 gOtherText_DoYouChoosePoke[] = _("{HIGHLIGHT WHITE2}{COLOR DARK_GREY}Wählst du dieses POKéMON?"); +const u8 gOtherText_Poke[] = _("POKéMON"); + +const u8 gSystemText_SaveErrorExchangeBackup[] = _("Fehler beim Speichern!\pBitte Backup Memory\naustauschen."); +const u8 gOtherText_FlyToWhere[] = _("Wohin willst du FLIEGEN?"); + +const u8 OtherText_Use[] = _("O.K."); +const u8 OtherText_Toss[] = _("MÜLL"); +const u8 OtherText_Register[] = _("WÄHLEN"); +const u8 OtherText_Give2[] = _("GEBEN"); +const u8 OtherText_CheckTag[] = _("PRÜFEN"); +const u8 OtherText_Confirm[] = _("O.K."); +const u8 gOtherText_Walk[] = _("LAUFEN"); + +const u8 gUnknownText_Exit[] = _("BEENDEN"); +const u8 gOtherText_CancelNoTerminator[] = _("ZURÜCK"); +const u8 gOtherText_CancelWithTerminator[] = _("$ZURÜCK"); + +const u8 OtherText_Item[] = _("ITEM"); +const u8 OtherText_Mail[] = _("BRIEF"); +const u8 OtherText_Take2[] = _("NEHMEN"); +const u8 OtherText_Store[] = _("GEBEN"); + +const u8 gOtherText_Check[] = _("PRÜFEN"); +const u8 gOtherText_None[] = _("KEINES"); + +const u8 gOtherText_ThreeQuestions2[] = _("???"); + +const u8 gOtherText_FiveQuestionsAndSlash[] = _("?????$/"); + +const u8 gOtherText_OneDash[] = _("-"); +const u8 gOtherText_TwoDashes[] = _("--"); +const u8 gOtherText_ThreeDashes2[] = _("---"); +const u8 gOtherText_MaleSymbol2[] = _("♂"); +const u8 gOtherText_FemaleSymbolAndLv[] = _("♀$Lv."); +const u8 gOtherText_TallPlusAndRightArrow[] = _("{TALL_PLUS}${RIGHT_ARROW}"); +const u8 gMenuText_GoBackToPrev[] = _("Kehre zurück zum\nvorherigen Menü."); +const u8 gOtherText_WhatWillYouDo[] = _("Was möchtest du tun?"); + +const u8 gOtherText_xString1[] = _("×{STR_VAR_1}"); +const u8 gOtherText_Berry2[] = _("BEERE"); +const u8 gOtherText_Coins2[] = _("{STR_VAR_1} MÜNZ."); +const u8 gOtherText_CloseBag[] = _("BEUTEL SCHLIESSEN"); + +const u8 OtherText_TheField3[] = _("zum Hauptmenü."); +const u8 OtherText_TheBattle[] = _("zum Kampf."); +const u8 OtherText_ThePokeList[] = _("zur POKéMON-LISTE."); +const u8 OtherText_TheShop[] = _("zum Geschäft."); +const u8 OtherText_TheField[] = _("zum Hauptmenü."); +const u8 OtherText_TheField2[] = _("zum Hauptmenü."); +const u8 OtherText_ThePC[] = _("zum PC."); + +const struct TextStruct gUnknown_0840E740[7] = +{ + OtherText_TheField3, + OtherText_TheBattle, + OtherText_ThePokeList, + OtherText_TheShop, + OtherText_TheField, + OtherText_TheField2, + OtherText_ThePC, +}; + +const u8 gOtherText_ReturnTo[] = _("Zurück "); +const u8 gOtherText_WhatWillYouDo2[] = _("Was möchtest\ndu tun?"); +const u8 gOtherText_CantWriteMail[] = _("Du kannst keinen\nBRIEF schreiben."); +const u8 gOtherText_NoPokemon[] = _("Hier ist kein\nPOKéMON.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_SwitchWhichItem[] = _("Gegen welches Item\naustauschen?"); +const u8 gOtherText_CantBeHeld[] = _("{STR_VAR_1} ist nicht zu geben."); +const u8 gOtherText_CantBeHeldHere[] = _("{STR_VAR_1} ist hier nicht zu geben."); +const u8 gOtherText_HowManyToDeposit[] = _("Wie viele möchtest\ndu ablegen?"); +const u8 gOtherText_DepositedItems[] = _("{STR_VAR_2}× {STR_VAR_1}\nwurde abgelegt."); +const u8 gOtherText_NoRoomForItems[] = _("Kein Platz für\nweitere Items."); +const u8 gOtherText_CantStoreSomeoneItem[] = _("Du kannst kein\nItem eines anderen\nauf dem PC lagern."); +const u8 gOtherText_TooImportant[] = _("Das ist viel zu\nwichtig, um es\nwegzuwerfen!"); +const u8 gOtherText_HowManyToToss[] = _("Wie viel in den Müll?"); +const u8 gOtherText_ThrewAwayItem[] = _("{STR_VAR_2} × {STR_VAR_1}\nweggeworfen."); +const u8 gOtherText_OkayToThrowAwayPrompt[] = _("Willst du wirklich\n{STR_VAR_2} × {STR_VAR_1}\nwegwerfen?"); +const u8 gOtherText_DadsAdvice[] = _("VATI sagt immer...\n{PLAYER}, dies ist weder der rechte\lOrt noch der rechte Zeitpunkt dafür!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_CantGetOffBike[] = _("Du kannst hier nicht vom RAD steigen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_ItemfinderResponding[] = _("Oh!\nDas Gerät zeigt etwas an!\pHier muss ein Item vergraben sein!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_ItemfinderItemUnderfoot[] = _("Das Gerät macht direkt unter\ndeinen Füßen etwas aus!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_NoResponse[] = _("... ... ... ... Nichts!\nKeine Anzeige.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_Coins3[] = _("Deine MÜNZEN:\n{STR_VAR_1}{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_BootedTM[] = _("Eine TM wurde aktiviert."); +const u8 gOtherText_BootedHM[] = _("Eine VM wurde aktiviert."); +const u8 gOtherText_ContainsMove[] = _("Sie enthält\n{STR_VAR_1}.\p{STR_VAR_1} einem\nPOKéMON beibringen?"); +const u8 gOtherText_UsedItem[] = _("{PLAYER} setzt\n{STR_VAR_2} ein.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_RepelLingers[] = _("Aber SCHUTZ wirkt doch\nnoch!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_UsedFlute[] = _("{PLAYER} setzt\n{STR_VAR_2} ein.\pWilde POKéMON werden angezogen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_UsedRepel[] = _("{PLAYER} setzt\n{STR_VAR_2} ein.\pWilde POKéMON werden abgehalten.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_BoxIsFull[] = _("Die BOXEN sind voll.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_Size[] = _("MASS:"); +const u8 gOtherText_Firm[] = _("GÜTE:"); + +const u8 gContestStatsText_Unknown1[] = _("{STR_VAR_1},{STR_VAR_2} cm"); + +const u8 ContestStatsText_VerySoft[] = _("Sehr weich"); +const u8 ContestStatsText_Soft[] = _("Weich"); +const u8 ContestStatsText_Hard[] = _("Hart"); +const u8 ContestStatsText_VeryHard[] = _("Sehr hart"); +const u8 ContestStatsText_SuperHard[] = _("Steinhart"); + +const u8 ContestStatsText_RedPokeBlock[] = _("{POKEBLOCK} ROT"); +const u8 ContestStatsText_BluePokeBlock[] = _("{POKEBLOCK} BLAU"); +const u8 ContestStatsText_PinkPokeBlock[] = _("{POKEBLOCK} ROSA"); +const u8 ContestStatsText_GreenPokeBlock[] = _("{POKEBLOCK} GRÜN"); +const u8 ContestStatsText_YellowPokeBlock[] = _("{POKEBLOCK} GELB"); +const u8 ContestStatsText_PurplePokeBlock[] = _("{POKEBLOCK} LILA"); +const u8 ContestStatsText_IndigoPokeBlock[] = _("{POKEBLOCK} INDIGO"); +const u8 ContestStatsText_BrownPokeBlock[] = _("{POKEBLOCK} BRAUN"); +const u8 ContestStatsText_LiteBluePokeBlock[] = _("{POKEBLOCK} CYAN"); +const u8 ContestStatsText_OlivePokeBlock[] = _("{POKEBLOCK} OLIV"); +const u8 ContestStatsText_GrayPokeBlock[] = _("{POKEBLOCK} GRAU"); +const u8 ContestStatsText_BlackPokeBlock[] = _("{POKEBLOCK} SCHWARZ"); +const u8 ContestStatsText_WhitePokeBlock[] = _("{POKEBLOCK} WEISS"); +const u8 ContestStatsText_GoldPokeBlock[] = _("{POKEBLOCK} GOLD"); + +const u8 gContestStatsText_Spicy[] = _("SCHARF"); +const u8 gContestStatsText_Dry[] = _("TROCKEN"); +const u8 gContestStatsText_Sweet[] = _("SÜSS"); +const u8 gContestStatsText_Bitter[] = _("BITTER"); +const u8 gContestStatsText_Sour[] = _("SAUER$LECKER$WÜRZE"); + +const u8 gContestStatsText_StowCase[] = _("BOX verstauen."); +const u8 gContestStatsText_ThrowAwayPrompt[] = _("{STR_VAR_1}\nwegwerfen?"); +const u8 gContestStatsText_WasThrownAway[] = _("{STR_VAR_1}\nwurde weggeworfen."); +const u8 gContestStatsText_NormallyAte[] = _("{STR_VAR_1} aß den\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); +const u8 gContestStatsText_HappilyAte[] = _("{STR_VAR_1} aß gerne den\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); +const u8 gContestStatsText_DisdainfullyAte[] = _("{STR_VAR_1} aß ungern den\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); + +const u8 MartText_Buy[] = _("KAUFEN"); +const u8 MartText_Sell[] = _("VERKAUFEN"); +const u8 MartText_Quit2[] = _("TSCHÜSS!"); + +const u8 gOtherText_QuitShopping[] = _("Einkauf beenden."); + +const u8 gOtherText_HowManyYouWant[] = _("{STR_VAR_1}? Aber gerne.\nWie viele möchtest du?"); +const u8 gOtherText_ThatWillBe[] = _("{STR_VAR_1}? Und du möchtest {STR_VAR_2}?\nDas macht dann ¥{STR_VAR_3}."); +const u8 gOtherText_ThatWillBe2[] = _("{STR_VAR_1} soll es sein?\nDas kostet ¥{STR_VAR_2}. Einverstanden?"); +const u8 gOtherText_ThatWillBe3[] = _("Du wolltest {STR_VAR_1}?\nDas kostet ¥{STR_VAR_2}. Einverstanden?"); +const u8 gOtherText_HereYouGo[] = _("Bitte sehr!\nUnd vielen Dank."); +const u8 gOtherText_HereYouGo2[] = _("Vielen Dank!\nEs wird auf deinen PC übertragen."); +const u8 gOtherText_HereYouGo3[] = _("Danke!\nEs wird auf deinen PC übertragen."); +const u8 gOtherText_NotEnoughMoney[] = _("Du hast nicht genug Geld.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_NoRoomFor[] = _("Du hast keinen Platz für weitere Items.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_SpaceForIsFull[] = _("Es ist kein Platz für {STR_VAR_1}.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_AnythingElse[] = _("Gibt es noch etwas, womit\nich dienen kann?"); +const u8 gOtherText_CanIHelpYou[] = _("Kann ich dir sonst noch dienlich sein?"); +const u8 gOtherText_FreePremierBall[] = _("Ich gebe dir noch einen PREMIERBALL.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_CantBuyThat[] = _("{STR_VAR_2}? Es tut mir Leid, aber\ndas kann ich nicht kaufen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_HowManyToSell[] = _("{STR_VAR_2}?\nWie viele möchtest du verkaufen?"); +const u8 gOtherText_CanPay[] = _("Ich gebe dir ¥{STR_VAR_1}.\nBist du damit einverstanden?"); +const u8 gOtherText_SoldItem[] = _("{STR_VAR_2} wurde übergeben\nim Tausch gegen ¥{STR_VAR_1}."); + +const u8 OtherText_Money[] = _("¥{STR_VAR_1}"); +const u8 OtherText_Shift[] = _("TAUSCH"); +const u8 OtherText_SendOut[] = _("AUSSENDEN"); +const u8 OtherText_Switch2[] = _("TAUSCH"); +const u8 OtherText_Summary[] = _("BERICHT"); +const u8 OtherText_Moves[] = _("ATTACKEN"); +const u8 OtherText_Enter2[] = _("EINTRAGEN"); +const u8 OtherText_NoEntry[] = _("AUSTRAGEN"); +const u8 OtherText_Take[] = _("NEHMEN"); +const u8 OtherText_Read2[] = _("LESEN"); + +const u8 gOtherText_Hp2[] = _("KP"); +const u8 gOtherText_SpAtk2[] = _("SP. ANG."); +const u8 gOtherText_SpDef2[] = _("SP. VER."); +const u8 gOtherText_WontHaveAnyEffect[] = _("Es wird keine Wirkung haben.{PAUSE_UNTIL_PRESS}"); + +const u8 gOtherText_CantUseOnPoke[] = _("Das kann nicht bei diesem\nPOKéMON eingesetzt werden.{PAUSE_UNTIL_PRESS}"); + +const u8 gOtherText_CantBeSwitched[] = _("{STR_VAR_1} kann nicht ausge-\ntauscht werden!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_AlreadyBattle[] = _("{STR_VAR_1}\nkämpft bereits!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_AlreadySelected[] = _("{STR_VAR_1} ist\nbereits ausgewählt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_NoEnergyLeft[] = _("{STR_VAR_1} kann\nnicht kämpfen!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_CantSwitchPokeWithYours[] = _("Ein POKéMON von {STR_VAR_1} ist\nnicht gegen deins eintauschbar!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_EGGCantBattle[] = _("Ein EI kann nicht kämpfen!{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_CantBeUsedBadge[] = _("Das ist erst einsetzbar, wenn\nein neuer ORDEN errungen wurde."); +const u8 gOtherText_NoMoreThreePoke[] = _("Es können nicht mehr als\ndrei POKéMON teilnehmen."); +const u8 gOtherText_SendRemovedMailPrompt[] = _("Den abgenommenen BRIEF\nauf deinen PC übertragen?"); +const u8 gOtherText_MailWasSent[] = _("Der BRIEF wurde auf deinen\nPC übertragen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_MailboxIsFull[] = _("Du kannst keine weiteren BRIEFE\nauf deinen PC übertragen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_MailRemovedMessageLost[] = _("Wird der BRIEF entfernt, geht\nder Inhalt verloren, okay?"); +const u8 gOtherText_MailMustBeRemoved[] = _("Der BRIEF muss entfernt werden,\num ein Item tragen zu können.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_WasGivenToHold[] = _("{STR_VAR_1} erhält\n{STR_VAR_2} zum Tragen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_AlreadyHolding[] = _("{STR_VAR_1} trägt bereits\n{STR_VAR_2}.\pSollen die Items ausge-\ntauscht werden?"); +const u8 gOtherText_NotHoldingAnything[] = _("{STR_VAR_1} trägt\nkein Item.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_ReceivedTheThingFrom[] = _("{STR_VAR_2} von\n{STR_VAR_1} erhalten.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_MailTaken[] = _("Der BRIEF wurde dem\nPOKéMON abgenommen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_TakenAndReplaced[] = _("{STR_VAR_2} wurde gegen\n{STR_VAR_1} ausgetauscht.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_PokeHoldingItemCantMail[] = _("Dieses POKéMON trägt ein Item.\nEs kann keinen BRIEF tragen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_MailTransferredMailbox[] = _("Der BRIEF wurde von deinem\nPC heruntergeladen.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_BagFullCannotRemoveItem[] = _("Der BEUTEL ist voll. Das Item des\nPOKéMON wurde nicht entfernt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_LearnedMove[] = _("{STR_VAR_1} erlernt\n{STR_VAR_2}!"); +const u8 gOtherText_NotCompatible[] = _("{STR_VAR_1} und {STR_VAR_2}\nsind nicht kompatibel.\p{STR_VAR_2} kann nicht \nerlernt werden.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_WantsToLearn[] = _("{STR_VAR_1} versucht,\n{STR_VAR_2} zu erlernen.\pAber {STR_VAR_1} kann maximal\nvier Attacken erlernen.\pSoll eine andere Attacke durch\n{STR_VAR_2} ersetzt werden?"); +const u8 gOtherText_StopTryingTo[] = _("{STR_VAR_2} nicht\nerlernen?"); +const u8 gOtherText_DidNotLearnMove2[] = _("{STR_VAR_1} hat {STR_VAR_2}\nnicht erlernt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_WhichMoveToForget2[] = _("Welche Attacke soll vergessen\nwerden?{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_ForgetMove123_2[] = _("{PAUSE 32}1, {PAUSE 15}2 und{PAUSE 15}... {PAUSE 15}... {PAUSE 15}... {PAUSE 15}{PLAY_SE 0x38 0x00} Schwupp!\p{STR_VAR_1} hat\n{STR_VAR_2} vergessen.\pUnd...{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_AlreadyKnows[] = _("{STR_VAR_1} kennt\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_HPRestoredBy[] = _("Die KP von {STR_VAR_1} wurden\num {STR_VAR_2} Punkte aufgefüllt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_CuredPoisoning[] = _("Die Vergiftung von {STR_VAR_1}\nwurde geheilt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_CuredParalysis[] = _("Die Paralyse von {STR_VAR_1}\nwurde aufgehoben.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_WokeUp[] = _("{STR_VAR_1} ist aufgewacht.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_BurnHealed[] = _("Verbrennung von {STR_VAR_1}\nwurde geheilt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_ThawedOut[] = _("{STR_VAR_1} wurde aufgetaut.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_PPRestored[] = _("AP wurden aufgefüllt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_RegainedHealth[] = _("{STR_VAR_1} erholte sich.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_BecameHealthy[] = _("{STR_VAR_1} erholte sich.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_PPIncreased[] = _("AP von {STR_VAR_1}\nwurden angehoben.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_ElevatedTo[] = _("{STR_VAR_1} erreicht\nLv. {STR_VAR_2}."); +const u8 gOtherText_WasRaised[] = _("{STR_VAR_2} von\n{STR_VAR_1} wurde angehoben.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_SnapConfusion[] = _("{STR_VAR_1} ist nicht\nmehr verwirrt.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_GotOverLove[] = _("{STR_VAR_1} fühlt sich nicht\nmehr angezogen.{PAUSE_UNTIL_PRESS}"); +const u8 OtherText_ChoosePoke[] = _("Wähle ein POKéMON."); +const u8 OtherText_MovePokeTo[] = _("An wessen Stelle setzen?"); +const u8 OtherText_TeachWhat[] = _("Welches POKéMON lehren?"); +const u8 OtherText_UseWhat[] = _("Welches POKéMON?"); +const u8 OtherText_GiveWhat[] = _("Welchem POKéMON geben?"); +const u8 OtherText_DoWhat[] = _("Was tun mit {STR_VAR_1}?"); +const u8 OtherText_NothingToCut[] = _("Hier nicht einsetzbar."); +const u8 OtherText_CantSurf[] = _("SURFER nicht einsetzbar."); +const u8 OtherText_AlreadySurfing[] = _("SURFER ist eingesetzt."); +const u8 OtherText_CantUseThatHere[] = _("Hier nicht einsetzbar."); +const u8 OtherText_RestoreWhatMove[] = _("Welche Attacke auffüllen?"); +const u8 OtherText_BoostPP[] = _("AP welcher Attacke heben?"); +const u8 OtherText_DoWhatWithItem[] = _("Was willst du mit dem Item?"); +const u8 OtherText_NoPokeForBattle[] = _("Kein POKéMON kampfbereit!"); +const u8 OtherText_ChoosePoke2[] = _("Wähle ein POKéMON."); +const u8 OtherText_NotEnoughHP[] = _("Nicht genügend KP..."); +const u8 OtherText_ThreePokeNeeded[] = _("Drei POKéMON sind nötig."); +const u8 OtherText_PokeCantBeSame[] = _("Nicht dieselben POKéMON!"); +const u8 OtherText_NoIdenticalHoldItems[] = _("Nicht dieselben Items!"); +const u8 OtherText_TeachWhichPoke[] = _("Welches POKéMON lehren?"); +const u8 gOtherText_Attack[] = _("ANGRIFF"); +const u8 gOtherText_Defense[] = _("VERT."); +const u8 gOtherText_SpAtk[] = _("SP.ANG."); +const u8 gOtherText_SpDef[] = _("SP.VER."); +const u8 gOtherText_Speed[] = _("INIT."); +const u8 gOtherText_HP[] = _("KP"); +const u8 gOtherText_Terminator18[] = _(""); +const u8 gOtherText_OriginalTrainer[] = _("OT:"); +const u8 gOtherText_Type2[] = _("TYP:"); +const u8 gOtherText_Power2[] = _("STÄRKE"); +const u8 gOtherText_Accuracy2[] = _("GENAU."); +const u8 gOtherText_Appeal2[] = _("AUSDR."); +const u8 gOtherText_Jam2[] = _("EINDR."); +const u8 gOtherText_Status[] = _("STATUS"); +const u8 gOtherText_ExpPoints[] = _("E.-PUNKTE"); +const u8 gOtherText_NextLv[] = _("NÄCHST. Lv."); +const u8 gOtherText_Ribbons00[] = _("BÄNDER: 00"); + +const u8 OtherText_Event[] = _("GESCHEHEN"); +const u8 OtherText_Switch[] = _("TAUSCH"); +const u8 OtherText_PokeInfo[] = _("POKéMON-INFO"); +const u8 OtherText_PokeSkills[] = _("POKéMON-FÄHIG."); +const u8 OtherText_BattleMoves[] = _("ATTACKEN"); +const u8 OtherText_ContestMoves[] = _("WETT.-ATTACKEN"); +const u8 OtherText_Info[] = _("INFO"); + +const u8 gOtherText_EggLongTime[] = _("Dieses EI braucht sicher\nnoch lange, bis es schlüpft."); +const u8 gOtherText_EggSomeTime[] = _("Was da wohl schlüpfen wird?\nEs wird sicher lange dauern."); +const u8 gOtherText_EggSoon[] = _("Es bewegt sich manchmal.\nVielleicht schlüpft es bald?"); +const u8 gOtherText_EggAbout[] = _("Es macht Geräusche.\nSicher schlüpft es bald!"); +const u8 gOtherText_CantForgetHMs[] = _("VM-Attacken können jetzt\nnicht vergessen werden."); +const u8 gOtherText_PlayersBase[] = _("BASIS v. {PLAYER}"); +const u8 gOtherText_OkayToDeleteFromRegistry[] = _("Soll {STR_VAR_1} aus dem GRUNDBUCH\ngelöscht werden?"); +const u8 gOtherText_RegisteredDataDeleted[] = _("Eingetragene Daten wurden gelöscht.{PAUSE_UNTIL_PRESS}"); + +const u8 gSecretBaseText_NoRegistry[] = _("Es gibt kein GRUNDBUCH.{PAUSE_UNTIL_PRESS}"); +const u8 SecretBaseText_DelRegist[] = _("EINTR. LÖSCHEN"); +const u8 SecretBaseText_Decorate[] = _("DEKORIEREN"); +const u8 SecretBaseText_PutAway[] = _("WEGNEHMEN"); +const u8 SecretBaseText_Toss[] = _("WEGWERFEN"); +const u8 SecretBaseText_PutOutDecor[] = _("Wähle eine Dekoration \nund stelle sie auf."); +const u8 SecretBaseText_StoreChosenDecor[] = _("Wähle eine Dekoration und \nübertrage sie auf deinen PC."); +const u8 SecretBaseText_ThrowAwayDecor[] = _("Wähle eine Dekoration\nund wirf sie weg."); +const u8 gSecretBaseText_NoDecors[] = _("Es gibt keine Dekoration.{PAUSE_UNTIL_PRESS}"); +const u8 SecretBaseText_Desk[] = _("TISCH"); +const u8 SecretBaseText_Chair[] = _("STUHL"); +const u8 SecretBaseText_Plant[] = _("PFLANZE"); +const u8 SecretBaseText_Ornament[] = _("ORNAMENT"); +const u8 SecretBaseText_Mat[] = _("MATTE"); +const u8 SecretBaseText_Poster[] = _("POSTER"); +const u8 SecretBaseText_Doll[] = _("PUPPE"); +const u8 SecretBaseText_Cushion[] = _("KISSEN"); +const u8 gSecretBaseText_GoldRank[] = _("GOLD"); +const u8 gSecretBaseText_SilverRank[] = _("SILBER"); +const u8 gSecretBaseText_PlaceItHere[] = _("Hierhin platzieren?"); +const u8 gSecretBaseText_CantBePlacedHere[] = _("Kann hier nicht platziert werden."); +const u8 gSecretBaseText_CancelDecorating[] = _("Dekorieren beenden?"); +const u8 gSecretBaseText_InUseAlready[] = _("Das wurde bereits platziert."); +const u8 gSecretBaseText_NoMoreDecor[] = _("Mehr kann nicht dekoriert werden. Es\nist nur Platz für {STR_VAR_1} Dekorationen."); +const u8 gSecretBaseText_NoMoreDecor2[] = _("Mehr kann nicht dekoriert werden. Es\nist nur Platz für {STR_VAR_1} Dekorationen."); +const u8 gSecretBaseText_DecorMustPlaceOnTable[] = _("Das geht nicht. Es muss auf einem\nTISCH oder Ähnlichem stehen."); +const u8 gSecretBaseText_DecorCantPlace[] = _("Die Dekoration kann nicht in deinem\neigenen Zimmer aufgestellt werden."); +const u8 gSecretBaseText_DecorInUse[] = _("Diese Dekoration wurde platziert.\nDu kannst sie nicht wegwerfen."); +const u8 gSecretBaseText_WillBeDiscarded[] = _("{STR_VAR_1} wird weggeworfen.\nEinverstanden?"); +const u8 gSecretBaseText_DecorThrownAway[] = _("Die Dekoration wurde weggeworfen."); +const u8 gSecretBaseText_StopPuttingAwayDecor[] = _("Wegnehmen von Dekoration beenden?"); +const u8 gSecretBaseText_NoDecor[] = _("Hier ist keine Dekoration."); +const u8 gSecretBaseText_ReturnDecor[] = _("Diese Dekoration auf \nden PC übertragen?"); +const u8 gSecretBaseText_DecorReturned[] = _("Die Dekoration wurde auf\nden PC übertragen."); +const u8 gSecretBaseText_NoDecorInUse[] = _("Es sind keine Dekorationen platziert.{PAUSE_UNTIL_PRESS}"); +const u8 SecretBaseText_Tristan[] = _("TATIAN"); +const u8 SecretBaseText_Philip[] = _("LARS"); +const u8 SecretBaseText_Dennis[] = _("KLAAS"); +const u8 SecretBaseText_Roberto[] = _("HAINER"); +const u8 SecretBaseText_TurnOff[] = _("AUSSCHALTEN"); +const u8 SecretBaseText_Decoration[] = _("DEKORATION"); +const u8 SecretBaseText_ItemStorage[] = _("ITEM-LAGER"); + +const u8 gPCText_Mailbox[] = _("BRIEFBOX"); +const u8 PCText_DepositItem[] = _("ITEM ABLEGEN"); +const u8 PCText_WithdrawItem[] = _("ITEM NEHMEN"); +const u8 PCText_TossItem[] = _("ITEM IN MÜLL"); +const u8 PCText_StoreItems[] = _("Lagere Items auf deinem PC."); +const u8 PCText_TakeOutItems[] = _("Nimm Items von deinem PC."); +const u8 PCText_ThrowAwayItems[] = _("Wirf gelagerte Items weg."); + +const u8 gOtherText_NoItems[] = _("Es gibt keine Items.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_NoMoreRoom[] = _("In deinem BEUTEL\nist kein Platz mehr."); +const u8 gOtherText_HowManyToWithdraw[] = _("Wie viele möchtest\ndu aufnehmen?"); +const u8 gOtherText_WithdrewThing[] = _("{STR_VAR_2} × {STR_VAR_1}\naufgenommen."); +const u8 OtherText_Read[] = _("LESEN"); +const u8 gOtherText_MoveToBag[] = _("IN BEUTEL GEBEN"); +const u8 OtherText_Give[] = _("GEBEN"); +const u8 gOtherText_NoMailHere[] = _("Hier ist kein BRIEF.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_WhatWillYouDoMail[] = _("Was soll mit dem BRIEF von\n{STR_VAR_1} geschehen?"); +const u8 gOtherText_MessageWillBeLost[] = _("Der Inhalt geht verloren.\nIst das in Ordnung für dich?"); +const u8 gOtherText_BagIsFull[] = _("Der BEUTEL ist voll.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_MailWasReturned[] = _("Der BRIEF, dessen Inhalt gelöscht\nist, wurde im BEUTEL gelagert.{PAUSE_UNTIL_PRESS}"); +const u8 gOtherText_Dad[] = _("VATI"); +const u8 gOtherText_Mom[] = _("MUTTI"); +const u8 gOtherText_Wallace[] = _("WASSILI"); +const u8 gOtherText_Steven[] = _("TROY"); +const u8 gOtherText_Brawly[] = _("KAMILLO"); +const u8 gOtherText_Winona[] = _("WIBKE"); +const u8 gOtherText_Phoebe[] = _("ANTONIA"); +const u8 gOtherText_Glacia[] = _("FROSINA"); +const u8 gContestText_ContestWinner[] = _("-WETTBEWERBSSIEGER\n"); +const u8 gOtherText_Unknown1[] = _(" von "); +const u8 OtherText_Cool[] = _("COOL."); +const u8 OtherText_Beauty2[] = _("SCHÖN."); +const u8 OtherText_Cute[] = _("ANMUT"); +const u8 OtherText_Smart[] = _("KLUG."); +const u8 OtherText_Tough[] = _("STÄRKE"); +const u8 OtherText_NonstopSuperCool[] = _("Super-mega-cool ist\ndieses umwerfende "); +const u8 OtherText_Terminator6[] = _(""); +const u8 OtherText_GoodLookingPoke[] = _("Das anbetungswürdige\nPOKéMON: "); +const u8 OtherText_Terminator7[] = _(""); +const u8 OtherText_MarvelousGreat[] = _("Phantastisch, großartig -\nschlicht brillant: "); +const u8 OtherText_Terminator8[] = _(""); +const u8 OtherText_CenturyLastVenus[] = _("Ein Bild von einem POKéMON!\nDas wunderschöne "); +const u8 OtherText_Terminator9[] = _(""); +const u8 OtherText_Terminator10[] = _("Einfach umwerfend, das strahlende\nLächeln von "); +const u8 OtherText_DazzlingSmile[] = _(""); +const u8 OtherText_PokeCenterIdol[] = _("Superstar des POKéMON-CENTERs -\ndas unvergleichliche "); +const u8 OtherText_Terminator11[] = _(""); +const u8 OtherText_LovelyAndSweet[] = _("Das liebliche, zuckersüße "); +const u8 OtherText_Terminator12[] = _(""); +const u8 OtherText_ThePretty[] = _("Das Gewinner-Portrait\nvon dem hübschen "); +const u8 OtherText_WinningPortrait[] = _(""); +const u8 OtherText_GiveUsWink[] = _("Winke uns zu, du\ngoldiges "); +const u8 OtherText_Terminator13[] = _(""); +const u8 OtherText_SmartnessMaestro[] = _("Der Gelehrte unter den\nPOKéMON! Das weise "); +const u8 OtherText_Terminator14[] = _(""); +const u8 OtherText_ChosenPokeAmong[] = _("Das auserwählte und\neinzigartige POKéMON: "); +const u8 OtherText_Terminator15[] = _(""); +const u8 OtherText_TheExcellent[] = _("Das grandiose "); +const u8 OtherText_ItsMomentOfElegance[] = _(" -\nder Inbegriff von Eleganz und Stil"); +const u8 OtherText_PowerfullyMuscular[] = _("Der energische, kraftstrotzende\nÜberflieger: "); +const u8 OtherText_Terminator16[] = _(""); +const u8 OtherText_StrongErEst[] = _("Stark, stärker, am stärksten -\ndas allerstärkste "); +const u8 OtherText_Terminator17[] = _(""); +const u8 OtherText_MightyTough[] = _("Das mächtige, prächtige - das\nstärkste POKéMON: "); +const u8 OtherText_Exclamation[] = _(""); +const u8 OtherText_Petalburg[] = _("BLÜTENBURG CITY"); +const u8 OtherText_Slateport[] = _("GRAPHITPORT CITY"); +const u8 OtherText_Littleroot[] = _("WURZELHEIM"); +const u8 OtherText_Lilycove[] = _("SEEGRASULB CITY"); +const u8 OtherText_Dewford[] = _("FAUSTAUHAVEN"); +const u8 OtherText_Enter[] = _("JA"); +const u8 OtherText_Info3[] = _("INFO"); +const u8 OtherText_WhatsAContest[] = _("Der WETTBEWERB"); +const u8 OtherText_TypesOfContest[] = _("WETTBEWERB-Arten"); +const u8 OtherText_Ranks[] = _("Klassen"); +const u8 OtherText_Judging[] = _("Bewertung"); +const u8 OtherText_CoolContest[] = _("COOL.-WETTB."); +const u8 OtherText_BeautyContest[] = _("SCHÖN.-WETTB."); +const u8 OtherText_CuteContest[] = _("ANMUT-WETTB."); +const u8 OtherText_SmartContest[] = _("KLUG.-WETTB."); +const u8 OtherText_ToughContest[] = _("STÄRKE-WETTB."); +const u8 OtherText_Decoration[] = _("DEKORATION"); +const u8 OtherText_PackUp[] = _("EINPACKEN"); +const u8 OtherText_Count[] = _("ZÄHLEN"); +const u8 OtherText_Registry[] = _("GRUNDBUCH"); +const u8 OtherText_Information[] = _("INFORMATION"); +const u8 OtherText_Mach[] = _("EIL"); +const u8 OtherText_Acro[] = _("KUNST"); +const u8 OtherText_Poison[] = _("GIF"); +const u8 OtherText_Paralysis[] = _("PAR"); +const u8 OtherText_Sleep[] = _("SLF"); +const u8 OtherText_Burn[] = _("BRT"); +const u8 OtherText_Frozen[] = _("GFR"); +const u8 OtherText_Quit[] = _("ZURÜCK"); +const u8 OtherText_SawIt[] = _("Gesehen"); +const u8 OtherText_NotYet[] = _("Noch nicht"); +const u8 OtherText_Yes[] = _("JA"); +const u8 OtherText_No[] = _("NEIN"); +const u8 OtherText_Info2[] = _("INFO"); +const u8 OtherText_SingleBattle[] = _("EINZELKAMPF"); +const u8 OtherText_DoubleBattle[] = _("DOPPELKAMPF"); +const u8 OtherText_MultiBattle[] = _("MULTIKAMPF"); +const u8 OtherText_MrBriney[] = _("MR. BRACK"); +const u8 OtherText_MakeAChallenge[] = _("Zum Kampf fordern"); +const u8 OtherText_ObtainInformation[] = _("Information dazu"); +const u8 OtherText_Lv50_2[] = _("Lv. 50"); +const u8 OtherText_Lv100_2[] = _("Lv. 100"); +const u8 OtherText_Zigzagoon[] = _("ZIGZACHS"); +const u8 OtherText_Nincada[] = _("NINCADA"); +const u8 OtherText_Poochyena[] = _("FIFFYEN"); +const u8 OtherText_Nincada2[] = _("NINCADA"); +const u8 OtherText_Lotad[] = _("LOTURZEL"); +const u8 OtherText_Roselia[] = _("ROSELIA"); +const u8 OtherText_Shroomish[] = _("KNILZ"); +const u8 OtherText_Nincada3[] = _("NINCADA"); +const u8 OtherText_Surskit[] = _("GEHWEIHER"); +const u8 OtherText_Treecko[] = _("GECKARBOR"); +const u8 OtherText_Torchic[] = _("FLEMMLI"); +const u8 OtherText_Mudkip[] = _("HYDROPI"); +const u8 OtherText_Seedot[] = _("SAMURZEL"); +const u8 OtherText_Shroomish2[] = _("KNILZ"); +const u8 OtherText_Spinda[] = _("PANDIR"); +const u8 OtherText_Shroomish3[] = _("KNILZ"); +const u8 OtherText_Zigzagoon2[] = _("ZIGZACHS"); +const u8 OtherText_Wurmple[] = _("WAUMPEL"); +const u8 OtherText_PokeBall[] = _("POKéBALL"); +const u8 OtherText_SuperPotion[] = _("SUPERTRANK"); +const u8 OtherText_SamePrice[] = _("Zum selben Preis"); +const u8 OtherText_Yen135[] = _("¥135"); +const u8 OtherText_Yen155[] = _("¥155"); +const u8 OtherText_Yen175[] = _("¥175"); +const u8 OtherText_CostMore[] = _("Sie kosten mehr."); +const u8 OtherText_CostLess[] = _("Sie kosten weniger."); +const u8 OtherText_SamePrice2[] = _("Gleicher Preis"); +const u8 OtherText_MaleSymbol[] = _("♂"); +const u8 OtherText_FemaleSymbol[] = _("♀"); +const u8 OtherText_Neither[] = _("Weder noch"); +const u8 OtherText_Males[] = _("Männer"); +const u8 OtherText_Females[] = _("Frauen"); +const u8 OtherText_SameNumber[] = _("Gleich viele"); +const u8 OtherText_Male[] = _("Männlich"); +const u8 OtherText_Female[] = _("Weiblich"); +const u8 OtherText_ItDepends[] = _("Ansichtssache"); +const u8 OtherText_Six2[] = _("6"); +const u8 OtherText_Eight2[] = _("8"); +const u8 OtherText_Ten[] = _("10"); +const u8 OtherText_One[] = _("1"); +const u8 OtherText_Two[] = _("2"); +const u8 OtherText_Three[] = _("3"); +const u8 OtherText_Six[] = _("6"); +const u8 OtherText_Seven[] = _("7"); +const u8 OtherText_Eight[] = _("8"); +const u8 OtherText_FreshWater[] = _("TAFELWASSER{CLEAR_TO 72}¥200"); +const u8 OtherText_SodaPop[] = _("SPRUDEL{CLEAR_TO 72}¥300"); +const u8 OtherText_Lemonade[] = _("LIMONADE{CLEAR_TO 72}¥350"); +const u8 OtherText_HowToRide[] = _("RAD FAHREN"); +const u8 OtherText_HowToTurn[] = _("KURVEN FAHREN"); +const u8 OtherText_SandySlopes[] = _("SANDHÜGEL"); +const u8 OtherText_Wheelies[] = _("WHEELIES"); +const u8 OtherText_BunnyHops[] = _("HOPPELN"); +const u8 OtherText_Jumping[] = _("SPRINGEN"); +const u8 OtherText_Satisfied[] = _("Zufrieden"); +const u8 OtherText_Dissatisfied[] = _("Unzufrieden"); +const u8 OtherText_Deepseatooth[] = _("ABYSSZAHN"); +const u8 OtherText_Deepseascale[] = _("ABYSSPLATTE"); +const u8 OtherText_BlueFlute2[] = _("BLAUE FLÖTE"); +const u8 OtherText_YellowFlute2[] = _("GELBE FLÖTE"); +const u8 OtherText_RedFlute2[] = _("ROTE FLÖTE"); +const u8 OtherText_WhiteFlute2[] = _("WEISSE FLÖTE"); +const u8 OtherText_BlackFlute2[] = _("SCHWRZ. FLÖTE"); +const u8 OtherText_GlassChair[] = _("GLASSTUHL"); +const u8 OtherText_GlassDesk[] = _("GLASTISCH"); +const u8 OtherText_TreeckoDoll[] = _("GECKARBOR-PUPPE 1.000 M."); +const u8 OtherText_TorchicDoll[] = _("FLEMMLI-PUPPE 1.000 M."); +const u8 OtherText_MudkipDoll[] = _("HYDROPI-PUPPE 1.000 M."); +const u8 OtherText_50Coins[] = _(" 50 MÜNZEN ¥1.000"); +const u8 OtherText_500Coins[] = _("500 MÜNZEN ¥10.000"); +const u8 OtherText_Excellent[] = _("Klasse!"); +const u8 OtherText_NotSoHot[] = _("Naja..."); +const u8 OtherText_RedShard[] = _("PURPURSTÜCK"); +const u8 OtherText_YellowShard[] = _("GELBSTÜCK"); +const u8 OtherText_BlueShard[] = _("INDIGOSTÜCK"); +const u8 OtherText_GreenShard[] = _("GRÜNSTÜCK"); +const u8 OtherText_BattleTower[] = _("DUELLTURM"); +const u8 OtherText_Right[] = _("Rechts"); +const u8 OtherText_Left[] = _("Links"); +const u8 OtherText_TM32[] = _("TM32 1.500 MÜNZEN"); +const u8 OtherText_TM29[] = _("TM29 3.500 MÜNZEN"); +const u8 OtherText_TM35[] = _("TM35 4.000 MÜNZEN"); +const u8 OtherText_TM24[] = _("TM24 4.000 MÜNZEN"); +const u8 OtherText_TM13[] = _("TM13 4.000 MÜNZEN"); +const u8 OtherText_1F_2[] = _("EG"); +const u8 OtherText_2F_2[] = _("1S"); +const u8 OtherText_3F_2[] = _("2S"); +const u8 OtherText_4F_2[] = _("3S"); +const u8 OtherText_5F_2[] = _("4S"); +const u8 OtherText_Cool2[] = _("COOL."); +const u8 OtherText_Beauty3[] = _("SCHÖN."); +const u8 OtherText_Cute2[] = _("ANMUT"); +const u8 OtherText_Smart2[] = _("KLUG."); +const u8 OtherText_Tough2[] = _("STÄRKE"); +const u8 OtherText_Normal[] = _("NORMAL"); +const u8 OtherText_Super[] = _("SUPER"); +const u8 OtherText_Hyper[] = _("HYPER"); +const u8 OtherText_Master[] = _("MASTER"); +const u8 OtherText_Cool3[] = _("COOL."); +const u8 OtherText_Beauty4[] = _("SCHÖN."); +const u8 OtherText_Cute3[] = _("ANMUT"); +const u8 OtherText_Smart3[] = _("KLUG."); +const u8 OtherText_Tough3[] = _("STÄRKE"); +const u8 OtherText_Items[] = _("ITEM"); +const u8 OtherText_KeyItems[] = _("BASIS-ITEM"); +const u8 OtherText_Balls[] = _("BALL"); +const u8 OtherText_TMsHMs[] = _("TM/VM"); +const u8 OtherText_Berries[] = _("BEEREN"); + +const u8 gPCText_SomeonesPC[] = _("JEMANDES PC"); +const u8 gPCText_LanettesPC[] = _("LANETTES PC"); +const u8 gPCText_PlayersPC[] = _("PC von {PLAYER}"); +const u8 gPCText_HallOfFame[] = _("RUHMESHALLE"); +const u8 gPCText_LogOff[] = _("AUSLOGGEN"); + +const u8 gOtherText_99Times[] = _("99-mal +"); +const u8 gOtherText_1Minute[] = _("1 Minute +"); +const u8 gOtherText_Seconds[] = _(" Sekunden"); +const u8 gOtherText_Times[] = _("-mal$."); +const u8 gOtherText_BigGuy[] = _(""); +const u8 gOtherText_BigGirl[] = _(""); +const u8 gOtherText_Son[] = _("Sohn"); +const u8 gOtherText_Daughter[] = _("Tochter"); +const u8 OtherText_BlueFlute[] = _("BLAUE FLÖTE"); +const u8 OtherText_YellowFlute[] = _("GELBE FLÖTE"); +const u8 OtherText_RedFlute[] = _("ROTE FLÖTE"); +const u8 OtherText_WhiteFlute[] = _("WEISSE FLÖTE"); +const u8 OtherText_BlackFlute[] = _("SCHWRZ. FLÖTE"); +const u8 OtherText_PrettyChair[] = _("EDLER STUHL"); +const u8 OtherText_PrettyDesk[] = _("EDLER TISCH"); +const u8 OtherText_1F[] = _("EG"); +const u8 OtherText_2F[] = _("1S"); +const u8 OtherText_3F[] = _("2S"); +const u8 OtherText_4F[] = _("3S"); +const u8 OtherText_5F[] = _("4S"); +const u8 OtherText_6F[] = _("5S"); +const u8 OtherText_7F[] = _("6S"); +const u8 OtherText_8F[] = _("7S"); +const u8 OtherText_9F[] = _("8S"); +const u8 OtherText_10F[] = _("9S"); +const u8 OtherText_11F[] = _("10S"); +const u8 OtherText_B1F[] = _("U1S"); +const u8 OtherText_B2F[] = _("U2S"); +const u8 OtherText_B3F[] = _("U3S"); +const u8 OtherText_B4F[] = _("U4S"); +const u8 OtherText_Rooftop[] = _("DACH"); + +const u8 gOtherText_NowOn[] = _("Momentan im"); + +const u8 gPCText_Cancel[] = _("ZURÜCK"); + +const u8 PCText_ExitBox[] = _("Die BOX verlassen?"); +const u8 PCText_WhatYouDo[] = _("Was möchtest du tun?"); +const u8 PCText_PickATheme[] = _("Wähle eine Motivsammlung."); +const u8 PCText_PickAWallpaper[] = _("Wähle ein Hintergrundmotiv."); +const u8 PCText_IsSelected[] = _(" ist ausgewählt."); +const u8 PCText_JumpToWhichBox[] = _("Zu welcher BOX wechseln?"); +const u8 PCText_DepositInWhichBox[] = _("In welche BOX ablegen?"); +const u8 PCText_WasDeposited[] = _(" wurde abgelegt."); +const u8 PCText_BoxIsFull[] = _("Die BOX ist voll."); +const u8 PCText_ReleasePoke[] = _("Dieses POKéMON freilassen?"); +const u8 PCText_WasReleased[] = _("{STR_VAR_1} ist wieder frei."); +const u8 PCText_ByeBye[] = _("Tschüss, !"); +const u8 PCText_MarkPoke[] = _("Markiere dein POKéMON."); +const u8 PCText_LastPoke[] = _("Dein letztes POKéMON!"); +const u8 PCText_PartyFull[] = _("Dein Team ist voll!"); +const u8 PCText_HoldingPoke[] = _("Du hältst ein POKéMON!"); +const u8 PCText_WhichOneWillTake[] = _("Welches wählst du aus?"); +const u8 PCText_CantReleaseEgg[] = _("Du kannst kein EI freilass.!"); +const u8 PCText_ContinueBox[] = _("Die BOX weiter bearbeiten?"); +const u8 PCText_CameBack[] = _(" kam zurück!"); +const u8 PCText_Worried[] = _("War es in Sorge um dich?"); +const u8 PCText_Surprise[] = _("... ... ... ... ...!"); +const u8 PCText_PleaseRemoveMail[] = _("BRIEF bitte entfernen."); +const u8 PCText_Cancel2[] = _("ZURÜCK"); +const u8 PCText_Deposit[] = _("ABLEGEN"); +const u8 PCText_Withdraw[] = _("NEHMEN"); +const u8 PCText_Switch[] = _("TAUSCHEN"); +const u8 PCText_Move[] = _("BEWEGEN"); +const u8 PCText_Place[] = _("ABSETZEN"); +const u8 PCText_Summary[] = _("BERICHT"); +const u8 PCText_Release[] = _("ENTLASS."); +const u8 PCText_Mark[] = _("MARKIER."); +const u8 PCText_Name[] = _("BENENNEN"); +const u8 PCText_Jump[] = _("WECHSELN"); +const u8 PCText_Wallpaper[] = _("MOTIV"); +const u8 PCText_Scenery1[] = _("LISTE 1"); +const u8 PCText_Scenery2[] = _("LISTE 2"); +const u8 PCText_Scenery3[] = _("LISTE 3"); +const u8 PCText_Etc[] = _("SONSTIGES"); +const u8 PCText_Forest[] = _("WALD"); +const u8 PCText_City[] = _("MAUER"); +const u8 PCText_Desert[] = _("WÜSTE"); +const u8 PCText_Savanna[] = _("STEPPE"); +const u8 PCText_Crag[] = _("GERÖLL"); +const u8 PCText_Volcano[] = _("VULKAN"); +const u8 PCText_Snow[] = _("SCHNEE"); +const u8 PCText_Cave[] = _("HÖHLE"); +const u8 PCText_Beach[] = _("STRAND"); +const u8 PCText_Seafloor[] = _("TIEFSEE"); +const u8 PCText_River[] = _("FLUSS"); +const u8 PCText_Sky[] = _("HIMMEL"); +const u8 PCText_Polka[] = _("PUNKTE"); +const u8 PCText_PokeCenter[] = _("POKéCENTER"); +const u8 PCText_Machine[] = _("MASCHINE"); +const u8 PCText_Plain[] = _("WEISS"); +const u8 PCText_WhatDoYouWant[] = _("Was willst du tun?"); +const u8 PCText_WithdrawPoke[] = _("POKéMON NEHMEN"); +const u8 PCText_DepositPoke[] = _("POKéMON ABLEGEN"); +const u8 PCText_MovePoke[] = _("POKéMON BEWEGEN"); +const u8 PCText_SeeYa[] = _("TSCHÜSSI!"); +const u8 PCText_MovePokeToParty[] = _("Nimm POKéMON aus einer\nBOX in dein Team auf."); +const u8 PCText_StorePokeInBox[] = _("Lagere POKéMON aus deinem\nTeam in einer BOX."); +const u8 PCText_OrganizeBoxesParty[] = _("Ordne POKéMON in den BOXEN\nund/oder in deinem Team."); +const u8 PCText_ReturnToPrevMenu[] = _("Zurück zum vorherigen Menü."); + +const u8 gPCText_OnlyOne[] = _("Du führst nur ein POKéMON mit dir."); +const u8 gPCText_PartyFull2[] = _("Dein Team ist voll!"); +const u8 gPCText_BOX[] = _("BOX "); + +// pokenav +const u8 PCText_CheckMap[] = _("{CLEAR 0}Karte der HOENN-Region"); +const u8 PCText_CheckPoke[] = _("{CLEAR 0}POKéMON-Daten im Detail"); +const u8 PCText_CheckTrainer[] = _("{CLEAR 0}TRAINER-Daten im Detail"); +const u8 PCText_CheckRibbons[] = _("{CLEAR 0}Einsicht über BÄNDER"); +const u8 PCText_PutAwayNav[] = _("{CLEAR 0}POKéNAV schließen"); +const u8 PCText_NoRibbonWin[] = _("{CLEAR 0}Es gibt keine BÄNDER."); +const u8 PCText_NoTrainers[] = _("{CLEAR 0}Keine TRAINER-Daten aufgenommen"); +const u8 PCText_CheckParty[] = _("{CLEAR 0}Daten über POKéMON des Teams"); +const u8 PCText_CheckPokeAll[] = _("{CLEAR 0}Daten über alle POKéMON"); +const u8 PCText_ReturnToNav[] = _("{CLEAR 0}Zurück zum POKéNAV-Menü"); +const u8 PCText_FindCool[] = _("{CLEAR 0}Nach coolen POKéMON suchen."); +const u8 PCText_FindBeauty[] = _("{CLEAR 0}Nach schönen POKéMON suchen."); +const u8 PCText_FindCute[] = _("{CLEAR 0}Nach anmutigen POKéMON suchen."); +const u8 PCText_FindSmart[] = _("{CLEAR 0}Nach klugen POKéMON suchen."); +const u8 PCText_FindTough[] = _("{CLEAR 0}Nach starken POKéMON suchen."); +const u8 PCText_ReturnToCondition[] = _("{CLEAR 0}Zurück zum Menüpunkt ZUSTAND"); + +const u8 gOtherText_NumberRegistered[] = _("Registrierte:"); +const u8 gOtherText_NumberBattles[] = _("Kämpfe:"); +const u8 gOtherText_Strategy[] = _("{PALETTE 5}TAKTIK:"); +const u8 gOtherText_TrainersPokemon[] = _("{PALETTE 5}POKéMON:"); +const u8 gOtherText_SelfIntroduction[] = _("{PALETTE 5}MOTTO:"); +const u8 gOtherText_Nature2[] = _("NATUR/"); +const u8 gOtherText_InParty[] = _("IM TEAM"); +const u8 gOtherText_Number[] = _("Nr. "); +const u8 gOtherText_Ribbons[] = _("BÄNDER"); +const u8 OtherText_MakeProfilePage1[] = _("Erstelle dein eigenes Profil:"); +const u8 OtherText_MakeProfilePage2[] = _("Kombiniere 4 Wörter/Ausdrücke."); +const u8 OtherText_MakeMessagePage1[] = _("Verwende 6 Ausdrücke."); +const u8 OtherText_MakeMessagePage2[] = _("Max. pro Zeile 2-mal 12 Buchstaben"); +const u8 OtherText_DescribeFeelingsPage1[] = _("Finde Worte, die deine momentanen"); +const u8 OtherText_DescribeFeelingsPage2[] = _("Empfindungen beschreiben."); +const u8 OtherText_WithFourPhrases[] = _("Verwende 4 Ausdrücke und"); +const u8 OtherText_CombineNinePhrasesPage1[] = _("Kombiniere 9 Ausdrücke und"); +const u8 OtherText_CombineNinePhrasesPage2[] = _("erstelle eine Nachricht."); +const u8 OtherText_ImproveBardSongPage1[] = _("Ändere nur 1 Wort/Ausdruck"); +const u8 OtherText_ImproveBardSongPage2[] = _("und verbessere das BARDEN-Lied."); +const u8 OtherText_YourProfile[] = _("Dein Profil"); +const u8 OtherText_YourFeelingBattle[] = _("Deine Gefühle zum Kampfbeginn"); +const u8 OtherText_SetWinMessage[] = _("Deine Worte im Fall des Sieges"); +const u8 OtherText_SetLossMessage[] = _("Deine Worte im Fall der Niederlage"); +const u8 OtherText_TheAnswer[] = _("Die Antwort"); +const u8 OtherText_MailMessage[] = _("Der Inhalt des BRIEFES"); +const u8 OtherText_MailSalutation[] = _("Der Gruß des BRIEFES"); +const u8 OtherText_NewSong[] = _("Das neue Lied"); +const u8 OtherText_CombineTwoPhrasesPage1[] = _("Kombiniere 2 Ausdrücke und"); +const u8 OtherText_CombineTwoPhrasesPage2[] = _("schaffe einen hippen Spruch."); +const u8 OtherText_ConfirmTrendyPage1[] = _("Der hippe Spruch"); +const u8 OtherText_ConfirmTrendyPage2[] = _("lautet also so. O.K.?"); +const u8 OtherText_HipsterPage1[] = _("Kombiniere 2 Ausdrücke und"); +const u8 OtherText_HipsterPage2[] = _("bringe ihr einen guten Spruch bei."); + +const u8 gOtherText_TextDeletedConfirmPage1[] = _("Der gesamte verfasste Text wird"); +const u8 gOtherText_TextDeletedConfirmPage2[] = _("gelöscht. Einverstanden?"); +const u8 gOtherText_QuitEditing[] = _("Das Textverfassen beenden?"); +const u8 gOtherText_EditedTextNoSavePage1[] = _("Der Text wird nicht gespeichert."); +const u8 gOtherText_EditedTextNoSavePage2[] = _("Ist das in Ordnung?"); +const u8 gOtherText_EnterAPhraseOrWord[] = _("Bitte Wort/Ausdruck eingeben."); +const u8 gOtherText_TextNoDelete[] = _("Gesamter Text ist nicht löschbar."); +const u8 gOtherText_OnlyOnePhrase[] = _("Nur ein Ausdruck ist änderbar."); +const u8 gOtherText_OriginalSongRestored[] = _("Das Lied wird wiederhergestellt."); +const u8 gOtherText_TrendyAlready[] = _("Das ist bereits hip."); +const u8 gOtherText_CombineTwoPhrases[] = _("Kombiniere 2 Wörter/Ausdrücke."); +const u8 gOtherText_QuitGivingInfo[] = _("Keine weiteren Infos liefern?"); +const u8 gOtherText_StopGivingMail[] = _("POKéMON keinen BRIEF geben?"); +const u8 gOtherText_Profile[] = _("PROFIL"); +const u8 gOtherText_AtBattleStart[] = _("Zum Kampfbeginn"); +const u8 gOtherText_UponWinningBattle[] = _("Über den Sieg"); +const u8 gOtherText_UponLosingBattle[] = _("Über die Niederlage"); + +// mauville_old_man? +const u8 gOtherText_TheBardsSong[] = _("Das BARDEN-Lied"); +const u8 gOtherText_WhatsHipHappening[] = _("Was ist hip? Was ist top?"); +const u8 gOtherText_Interview[] = _("Interview"); +const u8 gOtherText_GoodSaying[] = _("Guter Spruch"); +const u8 OtherText_SoPretty[] = _(" so hübsch!"); +const u8 OtherText_SoDarling[] = _(" so reizend!"); +const u8 OtherText_SoRelaxed[] = _(" so lässig!"); +const u8 OtherText_SoSunny[] = _(" so überwältigend!"); +const u8 OtherText_SoDesirable[] = _(" so erstrebenswert!"); +const u8 OtherText_SoExciting[] = _(" so aufregend!"); +const u8 OtherText_SoAmusing[] = _(" so amüsant!"); +const u8 OtherText_SoMagical[] = _(" so zauberhaft!"); + +const u8 gOtherText_Is[] = _(" klingt"); +const u8 gOtherText_DontYouAgree[] = _("\nFindest du nicht auch?"); + +const u8 OtherText_WantVacationNicePlace[] = _("Ich will unbedingt verreisen!\nKennst du ein hübsches Reiseziel?"); +const u8 OtherText_BoughtCrayonsIsNice[] = _("Ich habe 120 verschiedene Farbstifte\ngekauft! Das ist doch toll, oder?"); +const u8 OtherText_IfWeCouldFloat[] = _("Wäre es nicht herrlich, wir könnten auf\neiner Luftblasenwolke davonschweben?"); +const u8 OtherText_SandWashesAwayMakeSad[] = _("Eine Botschaft in Sand geschrieben\nwird weggespült. Das ist traurig."); +const u8 OtherText_WhatsBottomSeaLike[] = _("Wie der Meeresgrund wohl ist? Ich\nwürde ihn so gerne einmal erleben!"); +const u8 OtherText_SeeSettingSun[] = _("Sehnst du dich beim Anblick der unter-\ngehenden Sonne nach deinem Zuhause?"); +const u8 OtherText_LyingInGreenGrass[] = _("Einfach so im grünen Gras liegen...\nOh, das ist so was von angenehm!"); +const u8 OtherText_SecretBasesWonderful[] = _("GEHEIMBASEN sind superklasse!\nFindest du das nicht auch aufregend?"); + +const u8 OtherText_PokeLeague[] = _("POKéMON LIGA"); +const u8 OtherText_PokeCenter[] = _("POKéMON-CENTER"); + +const u8 gOtherText_GetsAPokeBlock[] = _(" erhält einen {POKEBLOCK}?"); + +const u8 OtherText_Coolness[] = _("Coolness "); +const u8 OtherText_Beauty[] = _("Schönheit "); +const u8 OtherText_Cuteness[] = _("Anmut "); +const u8 OtherText_Smartness[] = _("Klugheit "); +const u8 OtherText_Toughness[] = _("Stärke "); + +const u8 gOtherText_WasEnhanced[] = _("wurde erhöht!"); +const u8 gOtherText_NothingChanged[] = _("Keine Veränderung eingetreten!"); +const u8 gOtherText_WontEat[] = _("Es will nicht mehr essen."); + +const u8 gSystemText_SaveFailedBackupCheck[] = _("Speicherfehler\nBackup Memory wird geprüft.\nBitte warten...\n{COLOR RED}“Benötigte Zeit: 1 Minute”"); +const u8 gSystemText_BackupDamagedGameContinue[] = _("Backup Memory defekt oder\ninterne Batterie verbraucht!\nSpiel kann fortgesetzt werden.\nWeiteres Speichern nicht möglich."); +const u8 gSystemText_GameplayEnded[] = _("{COLOR RED}“Spiel fortsetzen nicht möglich.\nZurück zum Titelbildschirm...”"); +const u8 gSystemText_CheckCompleteSaveAttempt[] = _("Überprüfung beendet.\nNeuer Speicherversuch erfolgt.\nBitte warten..."); +const u8 gSystemText_SaveCompletedGameEnd[] = _("Speichern beendet.\n{COLOR RED}“Spiel fortsetzen nicht möglich.\nZurück zum Titelbildschirm.”"); +const u8 gSystemText_SaveCompletedPressA[] = _("Speichern beendet.\n{COLOR RED}“Bitte A-Knopf drücken.”"); + +const u8 gOtherText_Ferry[] = _("FÄHRE"); +const u8 gOtherText_SecretBase[] = _("GEHEIMBASIS"); +const u8 gOtherText_Hideout[] = _("VERSTECK"); + +const u8 gSystemText_ResetRTCPrompt[] = _("Echtzeituhr zurücksetzen?\nA: Bestätigen, B: Zurück"); +const u8 gSystemText_PresentTime[] = _("Aktuelle Uhrzeit im Spiel"); +const u8 gSystemText_PreviousTime[] = _("Vorherige Uhrzeit im Spiel"); +const u8 gSystemText_PleaseResetTime[] = _("Bitte die Zeit zurückstellen."); +const u8 gSystemText_ClockResetDataSave[] = _("Die Uhr wurde zurückgestellt. Daten\nwerden gesichert. Bitte warten..."); +const u8 gSystemText_SaveCompleted[] = _("Speichern beendet."); +const u8 gSystemText_SaveFailed[] = _("Speichern fehlgeschlagen."); +const u8 gSystemText_NoSaveFileNoTime[] = _("Es existiert kein Speicherstand. Uhr-\nzeit kann nicht eingestellt werden."); +const u8 gSystemText_ClockAdjustmentUsable[] = _("Das spielinterne Zeiteingabe-\nSystem ist jetzt verfügbar."); +const u8 gSystemText_Saving[] = _("SPEICHERVORGANG...\nGERÄT NICHT AUSSCHALTEN!"); +#endif diff --git a/src/text.c b/src/text.c index cc3dab547..7be72833a 100644 --- a/src/text.c +++ b/src/text.c @@ -2338,7 +2338,7 @@ u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 to return retVal; } -void sub_80034D4(u8 *tileData, u8 *text) +void sub_80034D4(u8 *tileData, const u8 *text) { sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text); } @@ -2474,12 +2474,18 @@ static u8 UpdateWindowText(struct Window *win) return 0; } +#if defined(ENGLISH) +#define SUB_800374C_LINE_LENGTH 26 +#elif defined(GERMAN) +#define SUB_800374C_LINE_LENGTH 27 +#endif + u8 sub_800374C(struct Window *win) { u8 retVal; sWaitType = 1; - sLineLength = 26; + sLineLength = SUB_800374C_LINE_LENGTH; retVal = UpdateWindowText(win); sLineLength = 26; sWaitType = 0; diff --git a/src/trainer_card.c b/src/trainer_card.c index a0b1cf6d1..e6ed79c15 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -42,11 +42,18 @@ struct Struct2000000 /*0x9C*/ u8 language; // 0x9C }; -extern struct Struct2000000 unk_2000000; +extern u8 ewram[]; +#define ewram0 (*(struct Struct2000000 *)(ewram)) + extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; extern struct TrainerCard gTrainerCards[4]; -extern u8 gUnknown_03004DE0[]; // TODO: find out correct type +struct UnknownStruct1 +{ + u8 filler0[0x780]; + u16 unk780[160]; +}; +extern struct UnknownStruct1 gUnknown_03004DE0; extern u8 gUnknown_083B5EF4[]; extern u16 *gUnknown_083B5EF8[5]; @@ -67,6 +74,9 @@ extern u8 gOtherText_TradeRecord[]; extern u8 gOtherText_Boy[]; extern u8 gOtherText_Girl[]; +extern bool8 (*const gUnknown_083B5EBC[])(struct Task *); +extern bool8 (*const gUnknown_083B5ED8[])(struct Task *); + // Other signature than on save_menu_util.h void FormatPlayTime(u8 *playtime, u16 hours, u16 minutes, s16 colon); @@ -151,29 +161,16 @@ void sub_8093110(Callback arg1) { sub_80932AC(arg1); SetMainCallback2(sub_8093174); - unk_2000000.language = GAME_LANGUAGE; + ewram0.language = GAME_LANGUAGE; } void sub_8093130(u8 playerIndex, Callback arg2) { - struct Struct2000000* r2; - struct LinkPlayer* r3; - struct LinkPlayerMapObject* r4; - u8 linkPlayerId; - sub_80932E4(playerIndex, arg2); SetMainCallback2(sub_8093174); - - r2 = &unk_2000000; - r3 = gLinkPlayers; - r4 = gLinkPlayerMapObjects; - - linkPlayerId = r4[playerIndex].linkPlayerId; - - r2->language = r3[linkPlayerId].language; + ewram0.language = gLinkPlayers[gLinkPlayerMapObjects[playerIndex].linkPlayerId].language; } - static void sub_8093174(void) { switch (gMain.state) @@ -236,14 +233,14 @@ static void sub_8093254(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - unk_2000000.var_6++; - if (unk_2000000.var_6 >= 60) + ewram0.var_6++; + if (ewram0.var_6 >= 60) { - unk_2000000.var_6 = 0; - unk_2000000.var_5 ^= 1; + ewram0.var_6 = 0; + ewram0.var_5 ^= 1; } - if (unk_2000000.var_4) - DmaCopy16(3, gUnknown_03004DE0, gUnknown_03004DE0 + 0x780, 320); + if (ewram0.var_4) + DmaCopy16(3, gUnknown_03004DE0.filler0, gUnknown_03004DE0.unk780, sizeof(gUnknown_03004DE0.unk780)); } static void sub_80932AC(Callback callBack) @@ -268,20 +265,20 @@ void sub_8093324(void) { u8 taskId = FindTaskIdByFunc(nullsub_60); struct Task *task = &gTasks[taskId]; - unk_2000000.var_1 = task->data[TD_0]; + ewram0.var_1 = task->data[TD_0]; - LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&unk_2000000.var_60); + LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&ewram0.var_60); - if (unk_2000000.var_1) + if (ewram0.var_1) { struct TrainerCard(*trainerCards)[4] = &gTrainerCards; s16 var = task->data[TD_1]; struct TrainerCard *dest = &(*trainerCards)[var]; - memcpy(&unk_2000000.var_64, dest, sizeof(struct TrainerCard)); + memcpy(&ewram0.var_64, dest, sizeof(struct TrainerCard)); } else { - sub_8093390(&unk_2000000.var_64); + sub_8093390(&ewram0.var_64); } } @@ -426,271 +423,138 @@ static void sub_8093550(void) REG_IME = backup; REG_DISPSTAT |= DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR; - REG_DISPCNT = 0x1f40; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; } -__attribute__((naked)) -void sub_8093598() +void sub_8093598(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x4\n\ - movs r2, 0xC0\n\ - lsls r2, 19\n\ - movs r3, 0x80\n\ - lsls r3, 9\n\ - mov r4, sp\n\ - movs r6, 0\n\ - ldr r1, _080935E4 @ =0x040000d4\n\ - movs r5, 0x80\n\ - lsls r5, 5\n\ - ldr r7, _080935E8 @ =0x81000800\n\ - movs r0, 0x81\n\ - lsls r0, 24\n\ - mov r12, r0\n\ -_080935B6:\n\ - strh r6, [r4]\n\ - mov r0, sp\n\ - str r0, [r1]\n\ - str r2, [r1, 0x4]\n\ - str r7, [r1, 0x8]\n\ - ldr r0, [r1, 0x8]\n\ - adds r2, r5\n\ - subs r3, r5\n\ - cmp r3, r5\n\ - bhi _080935B6\n\ - strh r6, [r4]\n\ - mov r0, sp\n\ - str r0, [r1]\n\ - str r2, [r1, 0x4]\n\ - lsrs r0, r3, 1\n\ - mov r2, r12\n\ - orrs r0, r2\n\ - str r0, [r1, 0x8]\n\ - ldr r0, [r1, 0x8]\n\ - add sp, 0x4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080935E4: .4byte 0x040000d4\n\ -_080935E8: .4byte 0x81000800\n\ - .syntax divided\n"); + 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; + } + } } -__attribute__((naked)) -void sub_80935EC() +void sub_80935EC(void) { - asm(".syntax unified\n\ - sub sp, 0x4\n\ - movs r2, 0xE0\n\ - lsls r2, 19\n\ - mov r1, sp\n\ - movs r0, 0\n\ - strh r0, [r1]\n\ - ldr r0, _08093608 @ =0x040000d4\n\ - str r1, [r0]\n\ - str r2, [r0, 0x4]\n\ - ldr r1, _0809360C @ =0x81000200\n\ - str r1, [r0, 0x8]\n\ - ldr r0, [r0, 0x8]\n\ - add sp, 0x4\n\ - bx lr\n\ - .align 2, 0\n\ -_08093608: .4byte 0x040000d4\n\ -_0809360C: .4byte 0x81000200\n\ - .syntax divided\n"); + void *addr = (void *)OAM; + + DmaFill16(3, 0, addr, 0x400); } -__attribute__((naked)) -void sub_8093610() +void sub_8093610(void) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - ldr r5, _08093664 @ =REG_BG0CNT\n\ - movs r1, 0\n\ - strh r1, [r5]\n\ - ldr r2, _08093668 @ =REG_BG1CNT\n\ - strh r1, [r2]\n\ - ldr r3, _0809366C @ =REG_BG2CNT\n\ - strh r1, [r3]\n\ - ldr r4, _08093670 @ =REG_BG3CNT\n\ - strh r1, [r4]\n\ - ldr r0, _08093674 @ =REG_BG0HOFS\n\ - strh r1, [r0]\n\ - adds r0, 0x2\n\ - strh r1, [r0]\n\ - adds r0, 0x2\n\ - strh r1, [r0]\n\ - adds r0, 0x2\n\ - strh r1, [r0]\n\ - adds r0, 0x2\n\ - strh r1, [r0]\n\ - adds r0, 0x2\n\ - strh r1, [r0]\n\ - adds r0, 0x2\n\ - strh r1, [r0]\n\ - adds r0, 0x2\n\ - strh r1, [r0]\n\ - ldr r1, _08093678 @ =0x00001e08\n\ - adds r0, r1, 0\n\ - strh r0, [r5]\n\ - ldr r1, _0809367C @ =0x00000801\n\ - adds r0, r1, 0\n\ - strh r0, [r2]\n\ - ldr r1, _08093680 @ =0x00000902\n\ - adds r0, r1, 0\n\ - strh r0, [r3]\n\ - ldr r1, _08093684 @ =0x00000a03\n\ - adds r0, r1, 0\n\ - strh r0, [r4]\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08093664: .4byte 0x4000008 @ REG_BG0CNT\n\ -_08093668: .4byte 0x400000A @ REG_BG1CNT\n\ -_0809366C: .4byte 0x400000C @ REG_BG2CNT\n\ -_08093670: .4byte 0x400000E @ REG_BG3CNT\n\ -_08093674: .4byte 0x4000010 @ REG_BG0HOFS\n\ -_08093678: .4byte 0x00001e08\n\ -_0809367C: .4byte 0x00000801\n\ -_08093680: .4byte 0x00000902\n\ -_08093684: .4byte 0x00000a03\n\ - .syntax divided\n"); + REG_BG0CNT = 0; + REG_BG1CNT = 0; + REG_BG2CNT = 0; + REG_BG3CNT = 0; + 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_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(10) | BGCNT_16COLOR | BGCNT_TXT256x256; } -#ifdef NONMATCHING static void sub_8093688(void) { - int i; + u8 i; - asm_comment("WIP"); sub_8093324(); - unk_2000000.var_0 = FALSE; - unk_2000000.var_3 = FALSE; - unk_2000000.var_4 = FALSE; + ewram0.var_0 = FALSE; + ewram0.var_3 = FALSE; + ewram0.var_4 = FALSE; - unk_2000000.var_2 = unk_2000000.var_64.stars; + ewram0.var_2 = ewram0.var_64.stars; - unk_2000000.var_5 = FALSE; - unk_2000000.var_6 = FALSE; + ewram0.var_5 = FALSE; + ewram0.var_6 = FALSE; for (i = 0; i < 4; i++) { - sub_80EB3FC(unk_2000000.var_20[i], unk_2000000.var_64.var_28[i]); + sub_80EB3FC(ewram0.var_20[i], ewram0.var_64.var_28[i]); } sub_80936D4(); } -#else - -__attribute__((naked)) -static void sub_8093688(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - bl sub_8093324\n\ - ldr r2, _080936D0 @ =0x02000000\n\ - movs r1, 0\n\ - strb r1, [r2]\n\ - strb r1, [r2, 0x3]\n\ - strb r1, [r2, 0x4]\n\ - adds r0, r2, 0\n\ - adds r0, 0x65\n\ - ldrb r0, [r0]\n\ - strb r0, [r2, 0x2]\n\ - strb r1, [r2, 0x5]\n\ - strb r1, [r2, 0x6]\n\ - movs r4, 0\n\ - adds r6, r2, 0\n\ - adds r6, 0x20\n\ - adds r5, r2, 0\n\ - adds r5, 0x8C\n\ -_080936AE:\n\ - lsls r0, r4, 4\n\ - adds r0, r6\n\ - lsls r1, r4, 1\n\ - adds r1, r5, r1\n\ - ldrh r1, [r1]\n\ - bl sub_80EB3FC\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x3\n\ - bls _080936AE\n\ - bl sub_80936D4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080936D0: .4byte 0x02000000\n\ - .syntax divided\n"); -} - -#endif void sub_80936D4(void) { - unk_2000000.var_7 = FALSE; - unk_2000000.var_8 = FALSE; - unk_2000000.var_9 = FALSE; - unk_2000000.var_a = FALSE; - unk_2000000.var_b = FALSE; - unk_2000000.var_c = FALSE; - unk_2000000.var_d = FALSE; + ewram0.var_7 = 0; + ewram0.var_8 = 0; + ewram0.var_9 = 0; + ewram0.var_a = 0; + ewram0.var_b = 0; + ewram0.var_c = 0; + ewram0.var_d = 0; - memset(unk_2000000.var_e, 0, sizeof(unk_2000000.var_e)); + memset(ewram0.var_e, 0, sizeof(ewram0.var_e)); - if (unk_2000000.var_64.hasPokedex) + if (ewram0.var_64.hasPokedex) { - unk_2000000.var_7 += TRUE; + ewram0.var_7 += 1; } - if (unk_2000000.var_64.firstHallOfFameA != 0 || unk_2000000.var_64.firstHallOfFameB != 0 || - unk_2000000.var_64.firstHallOfFameC != 0) + if (ewram0.var_64.firstHallOfFameA != 0 || ewram0.var_64.firstHallOfFameB != 0 || + ewram0.var_64.firstHallOfFameC != 0) { - unk_2000000.var_8 += TRUE; + ewram0.var_8 += 1; } - if (unk_2000000.var_64.linkBattleWins != 0 || unk_2000000.var_64.linkBattleLosses != 0) + if (ewram0.var_64.linkBattleWins != 0 || ewram0.var_64.linkBattleLosses != 0) { - unk_2000000.var_9 += TRUE; + ewram0.var_9 += 1; } - if (unk_2000000.var_64.battleTowerWins != 0 || unk_2000000.var_64.battleTowerLosses != 0) + if (ewram0.var_64.battleTowerWins != 0 || ewram0.var_64.battleTowerLosses != 0) { - unk_2000000.var_a += TRUE; + ewram0.var_a += 1; } - if (unk_2000000.var_64.contestsWithFriends != 0) + if (ewram0.var_64.contestsWithFriends != 0) { - unk_2000000.var_b += TRUE; + ewram0.var_b += 1; } - if (unk_2000000.var_64.pokeblocksWithFriends != 0) + if (ewram0.var_64.pokeblocksWithFriends != 0) { - unk_2000000.var_c += TRUE; + ewram0.var_c += 1; } - if (unk_2000000.var_64.pokemonTrades != 0) + if (ewram0.var_64.pokemonTrades != 0) { - unk_2000000.var_d += TRUE; + ewram0.var_d += 1; } - if (!unk_2000000.var_1) + if (!ewram0.var_1) { u32 badgeFlag; int i; i = 0; badgeFlag = BADGE01_GET; - while (TRUE) + while (1) { if (FlagGet(badgeFlag)) { - unk_2000000.var_e[i] += TRUE; + ewram0.var_e[i] += 1; } badgeFlag += 1; @@ -747,202 +611,87 @@ static void sub_809380C() sub_809382C(taskId); } -__attribute__((naked)) static void sub_809382C(u8 taskId) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r7, _08093858 @ =gUnknown_083B5EBC\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r4, r1, 3\n\ - ldr r6, _0809385C @ =0x02000000\n\ - ldr r5, _08093860 @ =gTasks\n\ -_0809383E:\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r7\n\ - ldr r1, [r0]\n\ - adds r0, r4, r5\n\ - bl _call_via_r1\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0809383E\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08093858: .4byte gUnknown_083B5EBC\n\ -_0809385C: .4byte 0x02000000\n\ -_08093860: .4byte gTasks\n\ - .syntax divided\n"); + while (gUnknown_083B5EBC[ewram0.var_0](&gTasks[taskId]) != 0) + ; } -__attribute__((naked)) -bool8 sub_8093864() +bool8 sub_8093864(struct Task *task) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - sub sp, 0x4\n\ - ldr r4, _080938A0 @ =0x02000000\n\ - ldr r2, _080938A4 @ =gSaveBlock2\n\ - ldrb r1, [r2, 0x11]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - movs r5, 0\n\ - strb r0, [r4, 0x5]\n\ - ldrb r0, [r2, 0x12]\n\ - strb r0, [r4, 0x6]\n\ - bl sub_80939A4\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - str r5, [sp]\n\ - movs r1, 0\n\ - movs r2, 0x10\n\ - movs r3, 0\n\ - bl BeginNormalPaletteFade\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - movs r0, 0\n\ - add sp, 0x4\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080938A0: .4byte 0x02000000\n\ -_080938A4: .4byte gSaveBlock2\n\ - .syntax divided\n"); + ewram0.var_5 = gSaveBlock2.playTimeSeconds & 1; + ewram0.var_6 = gSaveBlock2.playTimeVBlanks; + sub_80939A4(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ewram0.var_0 += 1; + return FALSE; } -__attribute__((naked)) -bool8 sub_80938A8() +bool8 sub_80938A8(struct Task *task) { - asm(".syntax unified\n\ - push {lr}\n\ - ldr r0, _080938C4 @ =gPaletteFade\n\ - ldrb r1, [r0, 0x7]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080938BE\n\ - ldr r1, _080938C8 @ =0x02000000\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ -_080938BE:\n\ - movs r0, 0\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080938C4: .4byte gPaletteFade\n\ -_080938C8: .4byte 0x02000000\n\ - .syntax divided\n"); + if (!gPaletteFade.active) + ewram0.var_0 += 1; + return FALSE; } -__attribute__((naked)) -bool8 sub_80938CC() +bool8 sub_80938CC(struct Task *task) { - asm(".syntax unified\n\ - push {lr}\n\ - ldr r0, _080938E4 @ =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080938EC\n\ - ldr r1, _080938E8 @ =0x02000000\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - movs r0, 0x1\n\ - b _08093914\n\ - .align 2, 0\n\ -_080938E4: .4byte gMain\n\ -_080938E8: .4byte 0x02000000\n\ -_080938EC:\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08093912\n\ - ldr r2, _08093900 @ =0x02000000\n\ - ldrb r1, [r2, 0x3]\n\ - cmp r1, 0\n\ - beq _08093904\n\ - movs r0, 0x5\n\ - b _0809390C\n\ - .align 2, 0\n\ -_08093900: .4byte 0x02000000\n\ -_08093904:\n\ - movs r0, 0x1\n\ - eors r0, r1\n\ - strb r0, [r2, 0x3]\n\ - movs r0, 0x3\n\ -_0809390C:\n\ - strb r0, [r2]\n\ - movs r0, 0x1\n\ - b _08093914\n\ -_08093912:\n\ - movs r0, 0\n\ -_08093914:\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + if (gMain.newKeys & B_BUTTON) + { + ewram0.var_0 = 5; + return TRUE; + } + else if (gMain.newKeys & A_BUTTON) + { + if (ewram0.var_3 != 0) + { + ewram0.var_0 = 5; + return TRUE; + } + else + { + ewram0.var_3 ^= 1; + ewram0.var_0 = 3; + return TRUE; + } + } + + return FALSE; } -bool8 sub_8093918() +bool8 sub_8093918(struct Task *task) { sub_8093A28(); PlaySE(SE_CARD); - unk_2000000.var_0 += TRUE; + ewram0.var_0 += 1; return FALSE; } -bool8 sub_8093938() +bool8 sub_8093938(struct Task *task) { if (sub_8093A48()) { - unk_2000000.var_0 = 2; + ewram0.var_0 = 2; } return FALSE; } -__attribute__((naked)) -bool8 sub_8093954() +bool8 sub_8093954(struct Task *task) { - asm(".syntax unified\n\ - push {lr}\n\ - sub sp, 0x4\n\ - bl sub_80939C0\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - movs r1, 0\n\ - str r1, [sp]\n\ - movs r2, 0\n\ - movs r3, 0x10\n\ - bl BeginNormalPaletteFade\n\ - ldr r1, _0809397C @ =0x02000000\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - movs r0, 0\n\ - add sp, 0x4\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_0809397C: .4byte 0x02000000\n\ - .syntax divided\n"); + sub_80939C0(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + ewram0.var_0 += 1; + return FALSE; } -bool8 sub_8093980() +bool8 sub_8093980(struct Task *task) { if (!gPaletteFade.active) { - SetMainCallback2((MainCallback)unk_2000000.var_60); + SetMainCallback2((MainCallback)ewram0.var_60); } return FALSE; @@ -972,9 +721,9 @@ static void sub_80939DC(u8 taskId) struct Task *task; task = &gTasks[taskId]; - if (unk_2000000.var_5 != task->data[TD_1]) + if (ewram0.var_5 != task->data[TD_1]) { - task->data[TD_1] = unk_2000000.var_5; + task->data[TD_1] = ewram0.var_5; task->data[TD_0] ^= TRUE; } @@ -990,102 +739,32 @@ static void sub_8093A28(void) sub_8093A68(taskId); } -__attribute__((naked)) -static u8 sub_8093A48() +static u8 sub_8093A48(void) { - asm(".syntax unified\n\ - push {lr}\n\ - ldr r0, _08093A5C @ =sub_8093A68\n\ - bl FindTaskIdByFunc\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0xFF\n\ - beq _08093A60\n\ - movs r0, 0\n\ - b _08093A62\n\ - .align 2, 0\n\ -_08093A5C: .4byte sub_8093A68\n\ -_08093A60:\n\ - movs r0, 0x1\n\ -_08093A62:\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + if (FindTaskIdByFunc(sub_8093A68) == 0xFF) + return TRUE; + else + return FALSE; } -__attribute__((naked)) static void sub_8093A68(u8 taskId) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r5, _08093A98 @ =gUnknown_083B5ED8\n\ - ldr r2, _08093A9C @ =gTasks\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r4, r1, r2\n\ -_08093A7A:\n\ - movs r1, 0x8\n\ - ldrsh r0, [r4, r1]\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - ldr r1, [r0]\n\ - adds r0, r4, 0\n\ - bl _call_via_r1\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08093A7A\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08093A98: .4byte gUnknown_083B5ED8\n\ -_08093A9C: .4byte gTasks\n\ - .syntax divided\n"); + while (gUnknown_083B5ED8[gTasks[taskId].data[0]](&gTasks[taskId]) != 0) + ; } -__attribute__((naked)) -bool8 sub_8093AA0() +bool8 sub_8093AA0(struct Task *task) { - asm(".syntax unified\n\ - push {r4,lr}\n\ - adds r4, r0, 0\n\ - ldr r0, _08093AE0 @ =0x02000000\n\ - movs r1, 0\n\ - strb r1, [r0, 0x4]\n\ - bl dp12_8087EA4\n\ - movs r1, 0\n\ - ldr r0, _08093AE4 @ =gUnknown_03004DE0\n\ - ldr r2, _08093AE8 @ =0x0000fffc\n\ - movs r3, 0xF0\n\ - lsls r3, 3\n\ - adds r0, r3\n\ -_08093ABA:\n\ - strh r2, [r0]\n\ - adds r0, 0x2\n\ - adds r1, 0x1\n\ - cmp r1, 0x9F\n\ - bls _08093ABA\n\ - ldr r0, _08093AEC @ =sub_8093D7C\n\ - bl SetHBlankCallback\n\ - ldr r1, _08093AE0 @ =0x02000000\n\ - movs r0, 0x1\n\ - strb r0, [r1, 0x4]\n\ - ldrh r0, [r4, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x8]\n\ - movs r0, 0\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08093AE0: .4byte 0x02000000\n\ -_08093AE4: .4byte gUnknown_03004DE0\n\ -_08093AE8: .4byte 0x0000fffc\n\ -_08093AEC: .4byte sub_8093D7C\n\ - .syntax divided\n"); + s32 i; + + ewram0.var_4 = 0; + dp12_8087EA4(); + for (i = 0; i < ARRAY_COUNT(gUnknown_03004DE0.unk780); i++) + gUnknown_03004DE0.unk780[i] = -4; + SetHBlankCallback(sub_8093D7C); + ewram0.var_4 = 1; + task->data[0]++; + return FALSE; } __attribute__((naked)) @@ -1245,7 +924,7 @@ bool8 sub_8093C0C(struct TrainerCard *trainerCard) sub_80939C0(); sub_8093DAC(); - if (!unk_2000000.var_3) + if (!ewram0.var_3) { sub_80939A4(); } @@ -1409,7 +1088,7 @@ bool8 sub_8093D50(void) { u8 taskId; - unk_2000000.var_4 = FALSE; + ewram0.var_4 = FALSE; SetHBlankCallback(NULL); sub_8093E04(); @@ -1450,7 +1129,7 @@ _08093DA8: .4byte 0x4000012 @ REG_BG0VOFS\n\ static void sub_8093DAC(void) { - if (unk_2000000.var_3) + if (ewram0.var_3) { sub_8093DEC(); } @@ -1564,11 +1243,11 @@ _08093E9C: .4byte 0x80000200\n\ void sub_8093EA0(void) { - LoadPalette(gUnknown_083B5EF8[unk_2000000.var_2], 0, 48 * 2); + LoadPalette(gUnknown_083B5EF8[ewram0.var_2], 0, 48 * 2); LoadPalette(gBadgesPalette, 48, 16 * 2); LoadPalette(gUnknown_083B5F4C, 64, 16 * 2); - if (unk_2000000.var_64.gender != MALE) + if (ewram0.var_64.gender != MALE) { LoadPalette(gUnknown_083B5F0C, 16, 16 * 2); } @@ -1576,7 +1255,7 @@ void sub_8093EA0(void) static void sub_8093EF8(void) { - LoadTrainerGfx_TrainerCard(unk_2000000.var_64.gender, 80, (void *)(VRAM + 0x1880)); + LoadTrainerGfx_TrainerCard(ewram0.var_64.gender, 80, (void *)(VRAM + 0x1880)); } __attribute__((naked)) @@ -1887,8 +1566,8 @@ static void sub_8094140(void) BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); buffer = gStringVar1; - StringCopy(buffer, unk_2000000.var_64.playerName); - ConvertInternationalString(buffer, unk_2000000.language); + StringCopy(buffer, ewram0.var_64.playerName); + ConvertInternationalString(buffer, ewram0.language); MenuPrint(buffer, 7, 5); TrainerCard_Front_PrintTrainerID(); @@ -1921,26 +1600,26 @@ static void TrainerCard_Front_PrintTrainerID(void) { u8 buffer[8]; - ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(buffer, ewram0.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); MenuPrint(buffer, 20, 2); } static void TrainerCard_Front_PrintMoney(void) { - sub_80B7AEC(unk_2000000.var_64.money, 16, 8); + sub_80B7AEC(ewram0.var_64.money, 16, 8); } static void TrainerCard_Front_PrintPokedexCount(void) { u8 buffer[16]; - if (unk_2000000.var_7 == FALSE) + if (ewram0.var_7 == FALSE) { sub_8094110(); return; } - ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3); MenuPrint_RightAligned(buffer, 16, 10); } @@ -1953,10 +1632,10 @@ static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon) playTimeHours = gSaveBlock2.playTimeHours; playTimeMinutes = gSaveBlock2.playTimeMinutes; - if (unk_2000000.var_1 != 0) + if (ewram0.var_1 != 0) { - playTimeHours = unk_2000000.var_64.playTimeHours; - playTimeMinutes = unk_2000000.var_64.playTimeMinutes; + playTimeHours = ewram0.var_64.playTimeHours; + playTimeMinutes = ewram0.var_64.playTimeMinutes; } FormatPlayTime(buffer, playTimeHours, playTimeMinutes, colon); @@ -1967,23 +1646,23 @@ static void sub_809429C(void) { u8 *str; - if (unk_2000000.var_1 == FALSE) + if (ewram0.var_1 == FALSE) { return; } str = gStringVar1; - str = StringCopy(str, unk_2000000.var_20[0]); + str = StringCopy(str, ewram0.var_20[0]); str[0] = 00; str++; - str = StringCopy(str, unk_2000000.var_20[1]); + str = StringCopy(str, ewram0.var_20[1]); MenuPrint(gStringVar1, 2, 14); str = gStringVar1; - str = StringCopy(str, unk_2000000.var_20[2]); + str = StringCopy(str, ewram0.var_20[2]); str[0] = 00; str++; - str = StringCopy(str, unk_2000000.var_20[3]); + str = StringCopy(str, ewram0.var_20[3]); MenuPrint(gStringVar1, 2, 16); } @@ -1992,8 +1671,8 @@ static void TrainerCard_Back_PrintName(void) u8 *str; str = gStringVar1; - StringCopy(str, unk_2000000.var_64.playerName); - ConvertInternationalString(str, unk_2000000.language); + StringCopy(str, ewram0.var_64.playerName); + ConvertInternationalString(str, ewram0.language); StringAppend(str, gOtherText_TrainersTrainerCard); @@ -2002,7 +1681,7 @@ static void TrainerCard_Back_PrintName(void) static void TrainerCard_Back_PrintHallOfFameTime_Label(void) { - if (unk_2000000.var_8 == FALSE) + if (ewram0.var_8 == FALSE) { return; } @@ -2014,24 +1693,24 @@ static void TrainerCard_Back_PrintHallOfFameTime(void) { u8 *str; - if (unk_2000000.var_8 == FALSE) + if (ewram0.var_8 == FALSE) { return; } str = gStringVar1; - str = ConvertIntToDecimalStringN(str, unk_2000000.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3); + str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3); str = StringCopy(str, gUnknown_083B5EF4); - str = ConvertIntToDecimalStringN(str, unk_2000000.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2); + str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2); str = StringCopy(str, gUnknown_083B5EF4); - str = ConvertIntToDecimalStringN(str, unk_2000000.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2); + str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2); MenuPrint_RightAligned(gStringVar1, 28, 5); } static void TrainerCard_Back_PrintLinkBattlesLabel(void) { - if (unk_2000000.var_9 == FALSE) + if (ewram0.var_9 == FALSE) { return; } @@ -2043,21 +1722,21 @@ static void TrainerCard_Back_PrintLinkBattles(void) { u8 buffer[16]; - if (unk_2000000.var_9 == FALSE) + if (ewram0.var_9 == FALSE) { return; } - ConvertIntToDecimalString(buffer, unk_2000000.var_64.linkBattleWins); + ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleWins); MenuPrint_RightAligned(buffer, 22, 7); - ConvertIntToDecimalString(buffer, unk_2000000.var_64.linkBattleLosses); + ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleLosses); MenuPrint_RightAligned(buffer, 28, 7); } static void TrainerCard_Back_PrintBattleTower_Label(void) { - if (unk_2000000.var_a == FALSE) + if (ewram0.var_a == FALSE) { return; } @@ -2069,21 +1748,21 @@ static void TrainerCard_Back_PrintBattleTower(void) { u8 buffer[16]; - if (unk_2000000.var_a == FALSE) + if (ewram0.var_a == FALSE) { return; } - sub_8072C44(buffer, unk_2000000.var_64.battleTowerWins, 24, 1); + sub_8072C44(buffer, ewram0.var_64.battleTowerWins, 24, 1); MenuPrint_PixelCoords(buffer, 112, 120, 0); - sub_8072C44(buffer, unk_2000000.var_64.battleTowerLosses, 24, 1); + sub_8072C44(buffer, ewram0.var_64.battleTowerLosses, 24, 1); MenuPrint_PixelCoords(buffer, 149, 120, 0); } static void TrainerCard_Back_PrintLinkContests_Label(void) { - if (unk_2000000.var_b == FALSE) + if (ewram0.var_b == FALSE) { return; } @@ -2095,18 +1774,18 @@ static void TrainerCard_Back_PrintLinkContests(void) { u8 buffer[8]; - if (unk_2000000.var_b == FALSE) + if (ewram0.var_b == FALSE) { return; } - ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(buffer, ewram0.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3); MenuPrint_RightAligned(buffer, 28, 13); } static void TrainerCard_Back_PrintLinkPokeblocks_Label(void) { - if (unk_2000000.var_c == FALSE) + if (ewram0.var_c == FALSE) { return; } @@ -2118,18 +1797,18 @@ static void TrainerCard_Back_PrintLinkPokeblocks(void) { u8 buffer[8]; - if (unk_2000000.var_c == FALSE) + if (ewram0.var_c == FALSE) { return; } - ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); + ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); MenuPrint_RightAligned(buffer, 28, 11); } static void TrainerCard_Back_PrintPokemonTrades_Label(void) { - if (unk_2000000.var_d == FALSE) + if (ewram0.var_d == FALSE) { return; } @@ -2141,12 +1820,12 @@ static void TrainerCard_Back_PrintPokemonTrades(void) { u8 buffer[8]; - if (unk_2000000.var_d == FALSE) + if (ewram0.var_d == FALSE) { return; } - ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); + ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); MenuPrint_RightAligned(buffer, 28, 9); } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 408dc69ce..9dfcf0e5c 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -7,6 +7,7 @@ #include "field_player_avatar.h" #include "metatile_behavior.h" #include "rng.h" +#include "roamer.h" #include "rom4.h" #include "safari_zone.h" #include "script.h" @@ -3323,7 +3324,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) if (DoWildEncounterTest(gWildMonHeaders[headerNum].landMonsInfo->encounterRate, 0) == TRUE) { - if (sub_81344CC() == TRUE) + if (TryStartRoamerEncounter() == TRUE) { roamer = &gSaveBlock1.roamer; if (RepelCheck(roamer->level)) @@ -3357,7 +3358,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) if (DoWildEncounterTest(gWildMonHeaders[headerNum].waterMonsInfo->encounterRate, 0) == TRUE) { - if (sub_81344CC() == TRUE) + if (TryStartRoamerEncounter() == TRUE) { roamer = &gSaveBlock1.roamer; if (RepelCheck(roamer->level)) @@ -3425,7 +3426,7 @@ bool8 SweetScentWildEncounter(void) wildPokemonInfo = gWildMonHeaders[headerNum].landMonsInfo; if (wildPokemonInfo == NULL) return FALSE; - if (sub_81344CC() == TRUE) + if (TryStartRoamerEncounter() == TRUE) { StartBattle_Roamer(); return TRUE; @@ -3442,7 +3443,7 @@ bool8 SweetScentWildEncounter(void) wildPokemonInfo = gWildMonHeaders[headerNum].waterMonsInfo; if (wildPokemonInfo == NULL) return FALSE; - if (sub_81344CC() == TRUE) + if (TryStartRoamerEncounter() == TRUE) { StartBattle_Roamer(); return TRUE; diff --git a/sym_ewram.txt b/sym_ewram.txt index f4a688968..bf976e5dd 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -296,7 +296,7 @@ gBattleMovePower: @ 2024E80 word_2024E82: @ 2024E82 .space 0x2 -gUnknown_02024E84: @ 2024E84 +gBattleMonForms: @ 2024E84 .space 0x4 byte_2024E88: @ 2024E88 @@ -958,14 +958,9 @@ gLastSaveSectorStatus: @ 2039284 gUnknown_02039288: @ 2039288 .space 0x74 -gUnknown_020392FC: @ 20392FC - .space 0x6 - -@ Latios/Latias location -@ map group, map num. -gRoamerLocation: @ 2039302 - .space 0x2 + .include "src/roamer.o" + .align 2 gUnknown_02039304: @ 2039304 .space 0x4 diff --git a/tools/ramscrgen/main.cpp b/tools/ramscrgen/main.cpp index 5c803c31f..6c4f4bbd7 100644 --- a/tools/ramscrgen/main.cpp +++ b/tools/ramscrgen/main.cpp @@ -25,7 +25,7 @@ #include "sym_file.h" #include "elf.h" -void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath) +void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath, std::string lang) { auto commonSymbols = GetCommonSymbols(sourcePath + "/" + filename); @@ -40,6 +40,8 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::stri while (!symFile.IsAtEnd()) { + symFile.HandleLangConditional(lang); + std::string label = symFile.GetLabel(false); if (label.length() == 0) @@ -71,12 +73,14 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::stri } } -void ConvertSymFile(std::string filename, std::string sectionName, bool common, std::string sourcePath, std::string commonSymPath) +void ConvertSymFile(std::string filename, std::string sectionName, std::string lang, bool common, std::string sourcePath, std::string commonSymPath) { SymFile symFile(filename); while (!symFile.IsAtEnd()) { + symFile.HandleLangConditional(lang); + Directive directive = symFile.GetDirective(); switch (directive) @@ -87,10 +91,9 @@ void ConvertSymFile(std::string filename, std::string sectionName, bool common, symFile.ExpectEmptyRestOfLine(); printf(". = ALIGN(4);\n"); if (common) - HandleCommonInclude(incFilename, sourcePath, commonSymPath); + HandleCommonInclude(incFilename, sourcePath, commonSymPath, lang); else printf("%s(%s);\n", incFilename.c_str(), sectionName.c_str()); - printf(". = ALIGN(4);\n"); break; } case Directive::Space: @@ -133,28 +136,29 @@ void ConvertSymFile(std::string filename, std::string sectionName, bool common, int main(int argc, char **argv) { - if (argc < 3) + if (argc < 4) { - fprintf(stderr, "Usage: %s SECTION_NAME SYM_FILE [-c SRC_PATH,COMMON_SYM_PATH]", argv[0]); + fprintf(stderr, "Usage: %s SECTION_NAME SYM_FILE LANG [-c SRC_PATH,COMMON_SYM_PATH]", argv[0]); return 1; } bool common = false; std::string sectionName = std::string(argv[1]); std::string symFileName = std::string(argv[2]); + std::string lang = std::string(argv[3]); std::string sourcePath; std::string commonSymPath; - if (argc > 3) + if (argc > 4) { - if (std::strcmp(argv[3], "-c") != 0) + if (std::strcmp(argv[4], "-c") != 0) FATAL_ERROR("error: unrecognized argument \"%s\"\n", argv[4]); - if (argc < 5) + if (argc < 6) FATAL_ERROR("error: missing SRC_PATH,COMMON_SYM_PATH after \"-c\"\n"); common = true; - std::string paths = std::string(argv[4]); + std::string paths = std::string(argv[5]); std::size_t commaPos = paths.find(','); if (commaPos == std::string::npos) @@ -164,6 +168,6 @@ int main(int argc, char **argv) commonSymPath = paths.substr(commaPos + 1); } - ConvertSymFile(symFileName, sectionName, common, sourcePath, commonSymPath); + ConvertSymFile(symFileName, sectionName, lang, common, sourcePath, commonSymPath); return 0; } diff --git a/tools/ramscrgen/sym_file.cpp b/tools/ramscrgen/sym_file.cpp index 9d9e4a064..5379bd93f 100644 --- a/tools/ramscrgen/sym_file.cpp +++ b/tools/ramscrgen/sym_file.cpp @@ -53,6 +53,7 @@ SymFile::SymFile(std::string filename) : m_filename(filename) m_pos = 0; m_lineNum = 1; m_lineStart = 0; + m_inLangConditional = false; RemoveComments(); } @@ -387,12 +388,78 @@ void SymFile::ExpectEmptyRestOfLine() } } + +void SymFile::SkipLine() +{ + while (m_buffer[m_pos] != 0 && m_buffer[m_pos] != '\n') + m_pos++; + + if (m_buffer[m_pos] == '\n') + m_pos++; +} + // Checks if we're at the end of the file. bool SymFile::IsAtEnd() { return (m_pos >= m_size); } +void SymFile::HandleLangConditional(std::string lang) +{ + if (m_buffer[m_pos] != '#') + return; + + m_pos++; + + if (CheckForDirective("begin")) + { + if (m_inLangConditional) + RaiseError("already inside language conditional"); + + SkipWhitespace(); + + std::string label = GetLabel(false); + + if (label.length() == 0) + RaiseError("no language name after #begin"); + + ExpectEmptyRestOfLine(); + + if (lang == label) + { + m_inLangConditional = true; + } + else + { + while (!IsAtEnd() && m_buffer[m_pos] != '#') + SkipLine(); + + if (m_buffer[m_pos] != '#') + RaiseError("unterminated language conditional"); + + m_pos++; + + if (!CheckForDirective("end")) + RaiseError("expected #end"); + + ExpectEmptyRestOfLine(); + } + } + else if (CheckForDirective("end")) + { + if (!m_inLangConditional) + RaiseError("not inside language conditional"); + + m_inLangConditional = false; + + ExpectEmptyRestOfLine(); + } + else + { + RaiseError("unknown # directive"); + } +} + // Reports a diagnostic message. void SymFile::ReportDiagnostic(const char* type, const char* format, std::va_list args) { diff --git a/tools/ramscrgen/sym_file.h b/tools/ramscrgen/sym_file.h index 5b3cedb3b..bb0c8038d 100644 --- a/tools/ramscrgen/sym_file.h +++ b/tools/ramscrgen/sym_file.h @@ -46,7 +46,9 @@ public: std::string ReadPath(); bool ReadInteger(unsigned long& value); void ExpectEmptyRestOfLine(); + void SkipLine(); bool IsAtEnd(); + void HandleLangConditional(std::string lang); void RaiseError(const char* format, ...); void RaiseWarning(const char* format, ...); @@ -57,6 +59,7 @@ private: long m_lineNum; long m_lineStart; std::string m_filename; + bool m_inLangConditional; bool ConsumeComma(); void RemoveComments(); diff --git a/whitespace.sh b/whitespace.sh new file mode 100755 index 000000000..7075fbd4e --- /dev/null +++ b/whitespace.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +if grep -Enr "\s+\$" src; then + # Trailing whitespace detected + exit 1 +fi |