diff options
-rw-r--r-- | asm/script_pokemon_util_80F99CC.s | 484 | ||||
-rw-r--r-- | src/script_pokemon_util_80F99CC.c | 200 |
2 files changed, 198 insertions, 486 deletions
diff --git a/asm/script_pokemon_util_80F99CC.s b/asm/script_pokemon_util_80F99CC.s index 4908fee4e..4843c08ba 100644 --- a/asm/script_pokemon_util_80F99CC.s +++ b/asm/script_pokemon_util_80F99CC.s @@ -6,490 +6,6 @@ .text - thumb_func_start sub_80F9C00 -sub_80F9C00: @ 80F9C00 - push {r4,lr} - movs r4, 0 - b _080F9C58 -_080F9C06: - movs r0, 0x64 - muls r0, r4 - ldr r1, _080F9C24 @ =gPlayerParty - adds r0, r1 - bl sub_80AE47C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _080F9C52 - lsls r0, 2 - ldr r1, _080F9C28 @ =_080F9C2C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F9C24: .4byte gPlayerParty -_080F9C28: .4byte _080F9C2C - .align 2, 0 -_080F9C2C: - .4byte _080F9C40 - .4byte _080F9C4A - .4byte _080F9C4A - .4byte _080F9C40 - .4byte _080F9C40 -_080F9C40: - adds r0, r4, 0 - movs r1, 0x7E - bl sub_806BC3C - b _080F9C52 -_080F9C4A: - adds r0, r4, 0 - movs r1, 0x70 - bl sub_806BC3C -_080F9C52: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080F9C58: - ldr r0, _080F9C68 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r4, r0 - bcc _080F9C06 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F9C68: .4byte gPlayerPartyCount - thumb_func_end sub_80F9C00 - - thumb_func_start sub_80F9C6C -sub_80F9C6C: @ 80F9C6C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080F9C94 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080F9CD8 - adds r0, r4, 0 - bl sub_806BD80 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _080F9C98 - cmp r0, 0x2 - beq _080F9CC0 - b _080F9CD8 - .align 2, 0 -_080F9C94: .4byte gPaletteFade -_080F9C98: - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_806CA38 - ldr r1, _080F9CB8 @ =gUnknown_02038694 - strb r0, [r1] - ldr r2, _080F9CBC @ =gSpecialVar_0x8004 - ldrb r0, [r1] - strh r0, [r2] - adds r0, r4, 0 - bl sub_8123138 - b _080F9CD8 - .align 2, 0 -_080F9CB8: .4byte gUnknown_02038694 -_080F9CBC: .4byte gSpecialVar_0x8004 -_080F9CC0: - movs r0, 0x5 - bl PlaySE - ldr r1, _080F9CE0 @ =gUnknown_02038694 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _080F9CE4 @ =gSpecialVar_0x8004 - movs r0, 0xFF - strh r0, [r1] - adds r0, r4, 0 - bl sub_8123138 -_080F9CD8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F9CE0: .4byte gUnknown_02038694 -_080F9CE4: .4byte gSpecialVar_0x8004 - thumb_func_end sub_80F9C6C - - thumb_func_start sub_80F9CE8 -sub_80F9CE8: @ 80F9CE8 - push {r4,r5,lr} - ldr r1, _080F9D08 @ =0x0201b000 - movs r2, 0x99 - lsls r2, 2 - adds r0, r1, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - adds r4, r1, 0 - cmp r0, 0x7 - bls _080F9CFE - b _080F9E12 -_080F9CFE: - lsls r0, 2 - ldr r1, _080F9D0C @ =_080F9D10 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F9D08: .4byte 0x0201b000 -_080F9D0C: .4byte _080F9D10 - .align 2, 0 -_080F9D10: - .4byte _080F9D30 - .4byte _080F9D70 - .4byte _080F9D76 - .4byte _080F9D8A - .4byte _080F9DB4 - .4byte _080F9DBA - .4byte _080F9DCC - .4byte _080F9DE4 -_080F9D30: - ldr r0, _080F9D58 @ =0x00000266 - adds r5, r4, r0 - movs r1, 0 - ldrsh r3, [r5, r1] - ldr r0, _080F9D5C @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r3, r0 - bge _080F9D64 - movs r2, 0x98 - lsls r2, 2 - adds r0, r4, r2 - ldrb r0, [r0] - ldrb r1, [r5] - movs r2, 0x64 - muls r2, r3 - ldr r3, _080F9D60 @ =gPlayerParty - adds r2, r3 - bl TryCreatePartyMenuMonIcon - b _080F9E0C - .align 2, 0 -_080F9D58: .4byte 0x00000266 -_080F9D5C: .4byte gPlayerPartyCount -_080F9D60: .4byte gPlayerParty -_080F9D64: - movs r0, 0 - strh r0, [r5] - movs r0, 0x99 - lsls r0, 2 - adds r1, r4, r0 - b _080F9DD8 -_080F9D70: - bl LoadHeldItemIconGraphics - b _080F9DD0 -_080F9D76: - movs r1, 0x98 - lsls r1, 2 - adds r0, r4, r1 - ldrb r0, [r0] - bl CreateHeldItemIcons_806DC34 - movs r2, 0x99 - lsls r2, 2 - adds r1, r4, r2 - b _080F9DD8 -_080F9D8A: - movs r1, 0x98 - lsls r1, 2 - adds r0, r4, r1 - ldrb r0, [r0] - ldr r2, _080F9DB0 @ =0x00000266 - adds r5, r4, r2 - ldrb r1, [r5] - bl sub_806BD58 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080F9E0C - movs r0, 0 - strh r0, [r5] - movs r0, 0x99 - lsls r0, 2 - adds r1, r4, r0 - b _080F9DD8 - .align 2, 0 -_080F9DB0: .4byte 0x00000266 -_080F9DB4: - bl PartyMenuPrintMonsLevelOrStatus - b _080F9DD0 -_080F9DBA: - bl PrintPartyMenuMonNicknames - ldr r1, _080F9DC8 @ =0x0201b000 - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - b _080F9DD8 - .align 2, 0 -_080F9DC8: .4byte 0x0201b000 -_080F9DCC: - bl sub_80F9E1C -_080F9DD0: - ldr r1, _080F9DE0 @ =0x0201b000 - movs r2, 0x99 - lsls r2, 2 - adds r1, r2 -_080F9DD8: - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _080F9E12 - .align 2, 0 -_080F9DE0: .4byte 0x0201b000 -_080F9DE4: - ldr r0, _080F9E08 @ =0x00000266 - adds r5, r4, r0 - ldrb r0, [r5] - bl sub_806B58C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080F9E0C - movs r1, 0 - strh r1, [r5] - movs r2, 0x99 - lsls r2, 2 - adds r0, r4, r2 - strh r1, [r0] - movs r0, 0x1 - b _080F9E14 - .align 2, 0 -_080F9E08: .4byte 0x00000266 -_080F9E0C: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_080F9E12: - movs r0, 0 -_080F9E14: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80F9CE8 - - thumb_func_start sub_80F9E1C -sub_80F9E1C: @ 80F9E1C - push {r4,lr} - movs r4, 0 - b _080F9E52 -_080F9E22: - movs r0, 0x64 - muls r0, r4 - ldr r1, _080F9E40 @ =gPlayerParty - adds r0, r1 - bl sub_8040574 - lsls r0, 24 - cmp r0, 0 - bne _080F9E44 - adds r0, r4, 0 - movs r1, 0x9A - bl sub_806BC3C - b _080F9E4C - .align 2, 0 -_080F9E40: .4byte gPlayerParty -_080F9E44: - adds r0, r4, 0 - movs r1, 0x8C - bl sub_806BC3C -_080F9E4C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080F9E52: - ldr r0, _080F9E60 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r4, r0 - bcc _080F9E22 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F9E60: .4byte gPlayerPartyCount - thumb_func_end sub_80F9E1C - - thumb_func_start sub_80F9E64 -sub_80F9E64: @ 80F9E64 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _080F9E8C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080F9EE2 - adds r0, r6, 0 - bl sub_806BD80 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _080F9E90 - cmp r0, 0x2 - beq _080F9ED0 - b _080F9EE2 - .align 2, 0 -_080F9E8C: .4byte gPaletteFade -_080F9E90: - movs r0, 0x5 - bl PlaySE - ldr r4, _080F9EC4 @ =gSpecialVar_0x8004 - adds r0, r6, 0 - bl sub_806CA38 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - ldr r5, _080F9EC8 @ =gSpecialVar_0x8005 - ldrh r1, [r4] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080F9ECC @ =gPlayerParty - adds r0, r1 - bl sub_8040574 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - adds r0, r6, 0 - bl sub_8123138 - b _080F9EE2 - .align 2, 0 -_080F9EC4: .4byte gSpecialVar_0x8004 -_080F9EC8: .4byte gSpecialVar_0x8005 -_080F9ECC: .4byte gPlayerParty -_080F9ED0: - movs r0, 0x5 - bl PlaySE - ldr r1, _080F9EE8 @ =gSpecialVar_0x8004 - movs r0, 0xFF - strh r0, [r1] - adds r0, r6, 0 - bl sub_8123138 -_080F9EE2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F9EE8: .4byte gSpecialVar_0x8004 - thumb_func_end sub_80F9E64 - - thumb_func_start sub_80F9EEC -sub_80F9EEC: @ 80F9EEC - push {r4,lr} - sub sp, 0x4 - ldr r0, _080F9F20 @ =gPlayerParty - ldr r1, _080F9F24 @ =gSpecialVar_0x8004 - ldrb r1, [r1] - ldr r2, _080F9F28 @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080F9F2C @ =c2_exit_to_overworld_2_switch - movs r4, 0 - str r4, [sp] - bl sub_809D9F0 - ldr r1, _080F9F30 @ =0x02018000 - movs r0, 0x3 - strb r0, [r1, 0x8] - ldr r1, _080F9F34 @ =gUnknown_0300485C - ldr r0, _080F9F38 @ =sub_8080990 - str r0, [r1] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F9F20: .4byte gPlayerParty -_080F9F24: .4byte gSpecialVar_0x8004 -_080F9F28: .4byte gPlayerPartyCount -_080F9F2C: .4byte c2_exit_to_overworld_2_switch -_080F9F30: .4byte 0x02018000 -_080F9F34: .4byte gUnknown_0300485C -_080F9F38: .4byte sub_8080990 - thumb_func_end sub_80F9EEC - - thumb_func_start sub_80F9F3C -sub_80F9F3C: @ 80F9F3C - push {r4,r5,lr} - ldr r1, _080F9F78 @ =gScriptResult - movs r0, 0 - strh r0, [r1] - movs r4, 0 - adds r5, r1, 0 -_080F9F48: - ldr r0, _080F9F7C @ =gSpecialVar_0x8004 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080F9F80 @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - adds r1, 0xD - bl GetMonData - cmp r0, 0 - beq _080F9F66 - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_080F9F66: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080F9F48 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F9F78: .4byte gScriptResult -_080F9F7C: .4byte gSpecialVar_0x8004 -_080F9F80: .4byte gPlayerParty - thumb_func_end sub_80F9F3C - - thumb_func_start sub_80F9F84 -sub_80F9F84: @ 80F9F84 - push {r4,r5,lr} - ldr r0, _080F9FC4 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - movs r0, 0x64 - adds r5, r1, 0 - muls r5, r0 - ldr r0, _080F9FC8 @ =gPlayerParty - adds r5, r0 - ldr r0, _080F9FCC @ =gSpecialVar_0x8005 - ldrh r1, [r0] - adds r1, 0xD - adds r0, r5, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r1, _080F9FD0 @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r0, _080F9FD4 @ =gStringVar2 - movs r1, 0xD - muls r1, r4 - ldr r2, _080F9FD8 @ =gMoveNames - adds r1, r2 - bl StringCopy - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F9FC4: .4byte gSpecialVar_0x8004 -_080F9FC8: .4byte gPlayerParty -_080F9FCC: .4byte gSpecialVar_0x8005 -_080F9FD0: .4byte gStringVar1 -_080F9FD4: .4byte gStringVar2 -_080F9FD8: .4byte gMoveNames - thumb_func_end sub_80F9F84 - thumb_func_start sub_80F9FDC sub_80F9FDC: @ 80F9FDC push {r4-r7,lr} diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 94fd660a1..e61c0b11a 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -3,8 +3,22 @@ #include "task.h" #include "palette.h" #include "battle_party_menu.h" +#include "sound.h" +#include "asm.h" +#include "rom4.h" +#include "pokemon.h" +#include "text.h" +#include "string_util.h" extern u8 gPlayerPartyCount; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u8 gUnknown_02038694; +extern u16 gScriptResult; + +extern u8 gMoveNames[][13]; + +extern void (*gUnknown_0300485C)(void); extern void OpenPartyMenu(u8, u8); extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); @@ -13,10 +27,26 @@ extern void CreateHeldItemIcons_806DC34(); // undefined args extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void PrintPartyMenuMonNicknames(void); -extern void sub_80F9C00(void); extern u8 sub_806B58C(u8); +extern u8 sub_80AE47C(struct Pokemon *party); +extern void sub_806BC3C(u8, u8); +extern u16 sub_806BD80(); // undefined args in battle_party_menu.c +extern u8 sub_806CA38(); +extern void sub_8123138(u8); +extern u8 sub_8040574(struct Pokemon *party); +extern void sub_809D9F0(struct Pokemon *party, u8, u8, void *, u32); void sub_80F9A8C(u8); +void sub_80F9C00(void); +void sub_80F9E1C(void); + +struct UnknownStruct2018000 +{ + u8 filler0[0x8]; + u8 unk8; +}; + +extern struct UnknownStruct2018000 unk_2018000; void sub_80F99CC(void) { @@ -72,7 +102,6 @@ bool8 sub_80F9ACC(void) { EWRAM_1B000.unk266 = 0; EWRAM_1B000.unk264++; - } break; case 1: @@ -122,3 +151,170 @@ bool8 sub_80F9ACC(void) } return FALSE; } + +void sub_80F9C00(void) +{ + u8 i; + + for(i = 0; i < gPlayerPartyCount; i++) + { + switch(sub_80AE47C(&gPlayerParty[i])) + { + case 0: + case 3: + case 4: + sub_806BC3C(i, 0x7E); + break; + case 1: + case 2: + sub_806BC3C(i, 0x70); + break; + } + } +} + +void sub_80F9C6C(u8 var) +{ + if(!gPaletteFade.active) + { + switch(sub_806BD80(var)) + { + case 1: + PlaySE(5); + gUnknown_02038694 = sub_806CA38(var); + gSpecialVar_0x8004 = gUnknown_02038694; + sub_8123138(var); + break; + case 2: + PlaySE(5); + gUnknown_02038694 = 0xFF; + gSpecialVar_0x8004 = 0xFF; + sub_8123138(var); + break; + } + } +} + +bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case 6 calls a different function. why +{ + switch(EWRAM_1B000.unk264) + { + case 0: + if(EWRAM_1B000.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if(sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + break; + } + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + sub_80F9E1C(); + EWRAM_1B000.unk264++; + break; + case 7: // the only case that can return true. + if(sub_806B58C(EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264 = 0; + return TRUE; + } + } + return FALSE; +} + +void sub_80F9E1C(void) +{ + u8 i; + + for(i = 0; i < gPlayerPartyCount; i++) + { + if(!sub_8040574(&gPlayerParty[i])) + sub_806BC3C(i, 0x9A); + else + sub_806BC3C(i, 0x8C); + } +} + +void sub_80F9E64(u8 var) +{ + if(!gPaletteFade.active) + { + switch(sub_806BD80(var)) + { + case 1: + PlaySE(5); + gSpecialVar_0x8004 = sub_806CA38(var); + gSpecialVar_0x8005 = sub_8040574(&gPlayerParty[gSpecialVar_0x8004]); + sub_8123138(var); + break; + case 2: + PlaySE(5); + gSpecialVar_0x8004 = 0xFF; + sub_8123138(var); + } + } +} + +void sub_80F9EEC(void) +{ + sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); + unk_2018000.unk8 = 3; + gUnknown_0300485C = sub_8080990; +} + +void sub_80F9F3C(void) // count pokemon moves +{ + u8 i; + + gScriptResult = 0; + + for(i = 0; i < 4; i++) // checks MOVE1-MOVE4 + if(GetMonData(&gPlayerParty[gSpecialVar_0x8004], i + 13)) + gScriptResult++; +} + +void sub_80F9F84(void) +{ + struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; + u16 data = GetMonData(party, gSpecialVar_0x8005 + 13); + + GetMonNickname(party, gStringVar1); + StringCopy(gStringVar2, gMoveNames[data]); +} |