diff options
-rw-r--r-- | asm/pokenav.s | 241 | ||||
-rw-r--r-- | asm/trainers_eye.s | 207 | ||||
-rw-r--r-- | include/pokenav.h | 15 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/pokenav_after.c | 35 | ||||
-rw-r--r-- | src/trainers_eye.c | 173 |
6 files changed, 185 insertions, 489 deletions
diff --git a/asm/pokenav.s b/asm/pokenav.s index 368dfe40e..616bcf3d2 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -2791,245 +2791,4 @@ _080F6C1A: .section .text_80F708C - thumb_func_start sub_80F708C -sub_80F708C: @ 80F708C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r0, _080F70E4 @ =gPokenavStructPtr - ldr r3, [r0] - ldr r0, _080F70E8 @ =0x0000876e - adds r2, r3, r0 - lsls r0, r4, 24 - asrs r0, 24 - ldrh r1, [r2] - adds r0, r1 - strh r0, [r2] - lsls r0, 16 - cmp r0, 0 - bge _080F70B4 - ldr r5, _080F70EC @ =0x00008774 - adds r0, r3, r5 - ldrh r0, [r0] - strh r0, [r2] -_080F70B4: - ldr r1, _080F70EC @ =0x00008774 - adds r0, r3, r1 - movs r5, 0 - ldrsh r1, [r2, r5] - movs r5, 0 - ldrsh r0, [r0, r5] - cmp r1, r0 - ble _080F70C8 - movs r0, 0 - strh r0, [r2] -_080F70C8: - ldr r1, _080F70F0 @ =0x0000bc94 - adds r0, r3, r1 - strb r4, [r0] - ldrh r1, [r2] - ldr r2, _080F70F4 @ =0x000087dc - adds r0, r3, r2 - strh r1, [r0] - ldr r5, _080F70F8 @ =0x000087de - adds r1, r3, r5 - movs r0, 0 - strb r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F70E4: .4byte gPokenavStructPtr -_080F70E8: .4byte 0x0000876e -_080F70EC: .4byte 0x00008774 -_080F70F0: .4byte 0x0000bc94 -_080F70F4: .4byte 0x000087dc -_080F70F8: .4byte 0x000087de - thumb_func_end sub_80F708C - - thumb_func_start sub_80F70FC -sub_80F70FC: @ 80F70FC - push {r4-r6,lr} - ldr r1, _080F711C @ =gPokenavStructPtr - ldr r0, [r1] - ldr r2, _080F7120 @ =0x000087de - adds r0, r2 - ldrb r0, [r0] - adds r4, r1, 0 - cmp r0, 0x6 - bls _080F7110 - b _080F7218 -_080F7110: - lsls r0, 2 - ldr r1, _080F7124 @ =_080F7128 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F711C: .4byte gPokenavStructPtr -_080F7120: .4byte 0x000087de -_080F7124: .4byte _080F7128 - .align 2, 0 -_080F7128: - .4byte _080F7144 - .4byte _080F714A - .4byte _080F7164 - .4byte _080F716C - .4byte _080F71A0 - .4byte _080F71BA - .4byte _080F71EA -_080F7144: - bl sub_80F6ED4 - b _080F71F8 -_080F714A: - movs r0, 0 - bl sub_80F6E04 - ldr r0, _080F715C @ =gPokenavStructPtr - ldr r1, [r0] - ldr r2, _080F7160 @ =0x000087de - adds r1, r2 - b _080F7206 - .align 2, 0 -_080F715C: .4byte gPokenavStructPtr -_080F7160: .4byte 0x000087de -_080F7164: - movs r0, 0 - bl sub_80F2F7C - b _080F71FE -_080F716C: - ldr r4, [r4] - ldr r2, _080F7194 @ =0x00008788 - adds r5, r4, r2 - ldr r0, _080F7198 @ =0x0000876e - adds r6, r4, r0 - ldrh r1, [r6] - adds r0, r5, 0 - bl sub_80F700C - adds r0, r5, 0 - bl sub_80F43D4 - bl sub_80F105C - ldrb r0, [r6] - bl sub_80F0FFC - ldr r2, _080F719C @ =0x000087de - adds r4, r2 - b _080F71CC - .align 2, 0 -_080F7194: .4byte 0x00008788 -_080F7198: .4byte 0x0000876e -_080F719C: .4byte 0x000087de -_080F71A0: - bl LoadTrainerEyesDescriptionLines - ldr r0, _080F71D4 @ =gPokenavStructPtr - ldr r1, [r0] - ldr r0, _080F71D8 @ =0x0000bc95 - adds r2, r1, r0 - movs r0, 0 - strb r0, [r2] - ldr r2, _080F71DC @ =0x000087de - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080F71BA: - ldr r0, _080F71D4 @ =gPokenavStructPtr - ldr r1, [r0] - ldr r0, _080F71D8 @ =0x0000bc95 - adds r4, r1, r0 - ldrb r0, [r4] - cmp r0, 0x1 - bhi _080F71E0 - bl sub_80F0D5C -_080F71CC: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _080F721C - .align 2, 0 -_080F71D4: .4byte gPokenavStructPtr -_080F71D8: .4byte 0x0000bc95 -_080F71DC: .4byte 0x000087de -_080F71E0: - ldr r2, _080F7210 @ =0x000087de - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080F71EA: - bl sub_80F6E9C - lsls r0, 24 - cmp r0, 0 - bne _080F721C - bl sub_80F0D5C -_080F71F8: - lsls r0, 24 - cmp r0, 0 - bne _080F721C -_080F71FE: - ldr r0, _080F7214 @ =gPokenavStructPtr - ldr r1, [r0] - ldr r0, _080F7210 @ =0x000087de - adds r1, r0 -_080F7206: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080F721C - .align 2, 0 -_080F7210: .4byte 0x000087de -_080F7214: .4byte gPokenavStructPtr -_080F7218: - movs r0, 0 - b _080F721E -_080F721C: - movs r0, 0x1 -_080F721E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80F70FC - - thumb_func_start sub_80F7224 -sub_80F7224: @ 80F7224 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _080F7260 @ =gPlayerParty - adds r0, r1 - movs r1, 0x30 - bl GetMonData - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080F7264 @ =gPokenavStructPtr - ldr r0, [r0] - ldr r3, _080F7268 @ =0x00008fe9 - adds r1, r0, r3 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - ldr r3, _080F726C @ =0x00008931 - adds r0, r3 - adds r4, r0, r1 - cmp r2, 0xFF - beq _080F7270 - adds r0, r2, 0 - movs r1, 0x1D - bl __udivsi3 - b _080F7272 - .align 2, 0 -_080F7260: .4byte gPlayerParty -_080F7264: .4byte gPokenavStructPtr -_080F7268: .4byte 0x00008fe9 -_080F726C: .4byte 0x00008931 -_080F7270: - movs r0, 0x9 -_080F7272: - strb r0, [r4] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80F7224 - .align 2, 0 @ Don't pad with nop. diff --git a/asm/trainers_eye.s b/asm/trainers_eye.s deleted file mode 100644 index f97acaf78..000000000 --- a/asm/trainers_eye.s +++ /dev/null @@ -1,207 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80F6E9C -sub_80F6E9C: @ 80F6E9C - push {lr} - ldr r0, _080F6EB4 @ =gPokenavStructPtr - ldr r0, [r0] - ldr r2, _080F6EB8 @ =0x0000d15a - adds r1, r0, r2 - ldrh r2, [r1] - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _080F6EBC - movs r0, 0 - b _080F6ED0 - .align 2, 0 -_080F6EB4: .4byte gPokenavStructPtr -_080F6EB8: .4byte 0x0000d15a -_080F6EBC: - adds r0, r2, 0 - adds r0, 0x8 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - bge _080F6ECC - movs r0, 0x1 - b _080F6ED0 -_080F6ECC: - movs r0, 0 - strh r0, [r1] -_080F6ED0: - pop {r1} - bx r1 - thumb_func_end sub_80F6E9C - - thumb_func_start sub_80F6ED4 -sub_80F6ED4: @ 80F6ED4 - push {lr} - ldr r0, _080F6F00 @ =gPokenavStructPtr - ldr r0, [r0] - ldr r2, _080F6F04 @ =0x0000d15a - adds r1, r0, r2 - ldrh r3, [r1] - movs r2, 0 - ldrsh r0, [r1, r2] - movs r2, 0x48 - negs r2, r2 - cmp r0, r2 - beq _080F6F0A - adds r0, r3, 0 - subs r0, 0x8 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, r2 - ble _080F6F08 - movs r0, 0x1 - b _080F6F0C - .align 2, 0 -_080F6F00: .4byte gPokenavStructPtr -_080F6F04: .4byte 0x0000d15a -_080F6F08: - strh r2, [r1] -_080F6F0A: - movs r0, 0 -_080F6F0C: - pop {r1} - bx r1 - thumb_func_end sub_80F6ED4 - - thumb_func_start sub_80F6F10 -sub_80F6F10: @ 80F6F10 - push {lr} - ldr r0, _080F6F48 @ =gPokenavStructPtr - ldr r0, [r0] - ldr r2, _080F6F4C @ =0x0000d15e - adds r1, r0, r2 - movs r2, 0 - strb r2, [r1] - ldr r1, _080F6F50 @ =0x0000d15f - adds r0, r1 - strb r2, [r0] - ldr r1, _080F6F54 @ =REG_BLDCNT - movs r0, 0xC8 - strh r0, [r1] - ldr r0, _080F6F58 @ =REG_BLDY - strh r2, [r0] - subs r1, 0x8 - ldr r2, _080F6F5C @ =0x00003f3f - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _080F6F60 @ =0x00001f1f - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0 - bl sub_80F6FB8 - pop {r0} - bx r0 - .align 2, 0 -_080F6F48: .4byte gPokenavStructPtr -_080F6F4C: .4byte 0x0000d15e -_080F6F50: .4byte 0x0000d15f -_080F6F54: .4byte REG_BLDCNT -_080F6F58: .4byte REG_BLDY -_080F6F5C: .4byte 0x00003f3f -_080F6F60: .4byte 0x00001f1f - thumb_func_end sub_80F6F10 - - thumb_func_start sub_80F6F64 -sub_80F6F64: @ 80F6F64 - push {lr} - ldr r0, _080F6F9C @ =gPokenavStructPtr - ldr r1, [r0] - ldr r0, _080F6FA0 @ =0x0000d15e - adds r2, r1, r0 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bls _080F6FB0 - movs r0, 0 - strb r0, [r2] - ldr r0, _080F6FA4 @ =0x0000d15f - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080F6FAC - ldr r1, _080F6FA8 @ =REG_BLDY - movs r0, 0x6 - strh r0, [r1] - b _080F6FB0 - .align 2, 0 -_080F6F9C: .4byte gPokenavStructPtr -_080F6FA0: .4byte 0x0000d15e -_080F6FA4: .4byte 0x0000d15f -_080F6FA8: .4byte REG_BLDY -_080F6FAC: - ldr r0, _080F6FB4 @ =REG_BLDY - strh r1, [r0] -_080F6FB0: - pop {r0} - bx r0 - .align 2, 0 -_080F6FB4: .4byte REG_BLDY - thumb_func_end sub_80F6F64 - - thumb_func_start sub_80F6FB8 -sub_80F6FB8: @ 80F6FB8 - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _080F6FDC - ldr r1, _080F6FD0 @ =REG_WIN0H - ldr r2, _080F6FD4 @ =0x0000e8f0 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x4 - ldr r2, _080F6FD8 @ =0x00000888 - b _080F6FE8 - .align 2, 0 -_080F6FD0: .4byte REG_WIN0H -_080F6FD4: .4byte 0x0000e8f0 -_080F6FD8: .4byte 0x00000888 -_080F6FDC: - ldr r1, _080F6FF0 @ =REG_WIN0H - ldr r2, _080F6FF4 @ =0x0000e8f0 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x4 - ldr r2, _080F6FF8 @ =0x00000818 -_080F6FE8: - adds r0, r2, 0 - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080F6FF0: .4byte REG_WIN0H -_080F6FF4: .4byte 0x0000e8f0 -_080F6FF8: .4byte 0x00000818 - thumb_func_end sub_80F6FB8 - - thumb_func_start sub_80F6FFC -sub_80F6FFC: @ 80F6FFC - ldr r0, _080F7008 @ =REG_BLDCNT - movs r1, 0 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080F7008: .4byte REG_BLDCNT - thumb_func_end sub_80F6FFC - - .align 2, 0 @ Don't pad with nop diff --git a/include/pokenav.h b/include/pokenav.h index 0b78626e4..b7c53ebe6 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -168,7 +168,9 @@ struct UnkPokenavStruct { /*0xBC91*/ u8 unkBC91; /*0xBC92*/ u8 unkBC92; /*0xBC93*/ u8 unkBC93; - /*0xBC94*/ u8 fillerBC94[0x6]; + /*0xBC94*/ u8 unkBC94; + /*0xBC95*/ u8 unkBC95; + /*0xBC96*/ u8 fillerBC96[0x4]; /*0xBC9A*/ u8 unkBC9A; /*0xBC9B*/ u8 unkBC9B; /*0xBC9C*/ u8 unkBC9C[22][200]; @@ -185,9 +187,10 @@ struct UnkPokenavStruct { /*0xD120*/ u8 fillerD114[0x18]; /*0xD138*/ u8 unkD138[0x20]; /*0xD158*/ u16 unkD158; - /*0xD15A*/ u16 unkD15A; + /*0xD15A*/ s16 unkD15A; /*0xD15C*/ u16 unkD15C; - /*0xD15E*/ u8 fillerD15E[2]; + /*0xD15E*/ u8 unkD15E; + /*0xD15F*/ u8 unkD15F; /*0xD160*/ u16 unkD160; /*0xD162*/ u8 unkD162; /*0xD164*/ struct UnkPokenavStruct_Sub1 unkD164; @@ -230,4 +233,10 @@ void sub_80F7224(u8); void sub_80F5BDC(void); void sub_80F2F7C(u8 arg0); +bool8 sub_80F0D5C(void); +void LoadTrainerEyesDescriptionLines(void); +void sub_80F0FFC(u8); +void sub_80F105C(void); +void sub_80F43D4(u8 *); + #endif // GUARD_POKENAV_H diff --git a/ld_script.txt b/ld_script.txt index e6e195479..2108d10c3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -298,9 +298,6 @@ SECTIONS { src/pokenav.o(.text); asm/pokenav.o(.text); src/trainers_eye.o(.text); - asm/trainers_eye.o(.text); - src/pokenav_after.o(.text); - asm/pokenav.o(.text_80F708C); src/mon_markings.o(.text); src/mauville_man.o(.text); src/mail.o(.text); diff --git a/src/pokenav_after.c b/src/pokenav_after.c deleted file mode 100644 index a9408b2de..000000000 --- a/src/pokenav_after.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "global.h" -#include "main.h" -#include "pokenav.h" -#include "battle.h" -#include "data2.h" -#include "text.h" -#include "de_rom_8040FE0.h" -#include "string_util.h" - -void sub_80F700C(u8 *arg0, u16 arg1) -{ - const struct Trainer *trainer = &gTrainers[gPokenavStructPtr->trainersEye[arg1].opponentId]; - u8 *ptr = arg0; - - ptr = arg0; - if (arg1 < gPokenavStructPtr->unkD158) - { -#if ENGLISH - ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]); -#elif GERMAN - ptr = StringCopy(ptr, de_sub_8041024(0, gPokenavStructPtr->trainersEye[arg1].opponentId)); -#endif - - ptr[0] = EXT_CTRL_CODE_BEGIN; - ptr[1] = 0x13; - ptr[2] = 0x4B; - ptr += 3; - ptr = StringCopy(ptr, trainer->trainerName); - } - - ptr[0] = EXT_CTRL_CODE_BEGIN; - ptr[1] = 0x13; - ptr[2] = 0x80; - ptr[3] = 0xFF; -} diff --git a/src/trainers_eye.c b/src/trainers_eye.c index 641f777b5..61be99dec 100644 --- a/src/trainers_eye.c +++ b/src/trainers_eye.c @@ -1,4 +1,5 @@ #include "global.h" +#include "main.h" #include "decompress.h" #include "battle_setup.h" #include "overworld.h" @@ -7,6 +8,9 @@ #include "data2.h" #include "constants/opponents.h" #include "constants/region_map_sections.h" +#include "text.h" +#include "de_rom_8040FE0.h" +#include "string_util.h" struct TrainersEyeGymLeadersAndE4 { @@ -31,6 +35,7 @@ static const struct TrainersEyeGymLeadersAndE4 sGymLeaderTrainersEye[13] = { }; void sub_80F6E04(u8); +void sub_80F6FB8(bool8); void sub_80F6C20(void) { @@ -89,3 +94,171 @@ void sub_80F6E04(u8 a0) DecompressPicFromTable_2(&gTrainerFrontPicTable[r6], gTrainerFrontPicCoords[r6].coords, 1, gPokenavStructPtr->unk131E4, gPokenavStructPtr->unkD1E4[a0], r6); LZ77UnCompWram(gTrainerFrontPicPaletteTable[r6].data, gPokenavStructPtr->unk0[a0]); } + +bool8 sub_80F6E9C(void) +{ + if (gPokenavStructPtr->unkD15A == 0) + { + return FALSE; + } + if ((gPokenavStructPtr->unkD15A += 8) >= 0) + { + gPokenavStructPtr->unkD15A = 0; + return FALSE; + } + return TRUE; +} + +bool8 sub_80F6ED4(void) +{ + if (gPokenavStructPtr->unkD15A == -72) + { + return FALSE; + } + if ((gPokenavStructPtr->unkD15A -= 8) <= -72) + { + gPokenavStructPtr->unkD15A = -72; + return FALSE; + } + return TRUE; +} + +void sub_80F6F10(void) +{ + gPokenavStructPtr->unkD15E = 0; + gPokenavStructPtr->unkD15F = 0; + REG_BLDCNT = BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN; + REG_BLDY = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x1F1F; + sub_80F6FB8(0); +} + +void sub_80F6F64(void) +{ + if (++gPokenavStructPtr->unkD15E > 8) + { + gPokenavStructPtr->unkD15E = 0; + ++gPokenavStructPtr->unkD15F; + if (gPokenavStructPtr->unkD15F & 1) + REG_BLDY = 6; + else + REG_BLDY = 0; + } +} + +void sub_80F6FB8(bool8 a0) +{ + if (!a0) + { + REG_WIN0H = -0x1710; + REG_WIN0V = 0x888; + } + else + { + REG_WIN0H = -0x1710; + REG_WIN0V = 0x818; + } +} + +void sub_80F6FFC(void) +{ + REG_BLDCNT = 0; + REG_BLDY = 0; +} + +void sub_80F700C(u8 *arg0, u16 arg1) +{ + const struct Trainer *trainer = &gTrainers[gPokenavStructPtr->trainersEye[arg1].opponentId]; + u8 *ptr = arg0; + + ptr = arg0; + if (arg1 < gPokenavStructPtr->unkD158) + { +#if ENGLISH + ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]); +#elif GERMAN + ptr = StringCopy(ptr, de_sub_8041024(0, gPokenavStructPtr->trainersEye[arg1].opponentId)); +#endif + + ptr[0] = EXT_CTRL_CODE_BEGIN; + ptr[1] = 0x13; + ptr[2] = 0x4B; + ptr += 3; + ptr = StringCopy(ptr, trainer->trainerName); + } + + ptr[0] = EXT_CTRL_CODE_BEGIN; + ptr[1] = 0x13; + ptr[2] = 0x80; + ptr[3] = 0xFF; +} + +void sub_80F708C(s8 a0) +{ + gPokenavStructPtr->unk876E += a0; + if (gPokenavStructPtr->unk876E < 0) + { + gPokenavStructPtr->unk876E = gPokenavStructPtr->unk8774; + } + if (gPokenavStructPtr->unk876E > gPokenavStructPtr->unk8774) + { + gPokenavStructPtr->unk876E = 0; + } + gPokenavStructPtr->unkBC94 = a0; + gPokenavStructPtr->unk87DC = gPokenavStructPtr->unk876E; + gPokenavStructPtr->unk87DE = 0; +} + +bool8 sub_80F70FC(void) +{ + switch (gPokenavStructPtr->unk87DE) + { + case 0: + if (!sub_80F6ED4()) + gPokenavStructPtr->unk87DE++; + break; + case 1: + sub_80F6E04(0); + gPokenavStructPtr->unk87DE++; + break; + case 2: + sub_80F2F7C(0); + gPokenavStructPtr->unk87DE++; + break; + case 3: + sub_80F700C(gPokenavStructPtr->unk8788, gPokenavStructPtr->unk876E); + sub_80F43D4(gPokenavStructPtr->unk8788); + sub_80F105C(); + sub_80F0FFC(gPokenavStructPtr->unk876E); + gPokenavStructPtr->unk87DE++; + break; + case 4: + LoadTrainerEyesDescriptionLines(); + gPokenavStructPtr->unkBC95 = 0; + gPokenavStructPtr->unk87DE++; + // fallthrough + case 5: + if (gPokenavStructPtr->unkBC95 < 2){ + sub_80F0D5C(); + gPokenavStructPtr->unkBC95++; + break; + } + gPokenavStructPtr->unk87DE++; + // fallthrough + case 6: + if (!sub_80F6E9C() && !sub_80F0D5C()) + gPokenavStructPtr->unk87DE++; + break; + default: + return FALSE; + } + + return TRUE; +} + +void sub_80F7224(u8 a0) +{ + u8 sheen = GetMonData(&gPlayerParty[a0], MON_DATA_SHEEN); + gPokenavStructPtr->unk8931[gPokenavStructPtr->unk8fe9] = sheen != 255 ? sheen / 29 : 9; +} |