diff options
-rw-r--r-- | asm/rom_800D42C.s | 242 | ||||
-rw-r--r-- | data/text/battle_strings.inc | 9 | ||||
-rw-r--r-- | include/link.h | 16 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/rom_800D42C.c | 96 |
5 files changed, 110 insertions, 255 deletions
diff --git a/asm/rom_800D42C.s b/asm/rom_800D42C.s index 7a04ff5e9..fb917fd7e 100644 --- a/asm/rom_800D42C.s +++ b/asm/rom_800D42C.s @@ -984,247 +984,7 @@ _0800DC1C: .4byte gTasks _0800DC20: .4byte 0x00006001 thumb_func_end sub_800DAF8 - thumb_func_start sub_800DC24 -sub_800DC24: @ 800DC24 - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _0800DC40 @ =gUnknown_02024D26 - ldrb r2, [r0] - cmp r2, 0x3 - bne _0800DC4C - ldr r4, _0800DC44 @ =gUnknown_03004210 - ldr r1, _0800DC48 @ =gUnknown_08400E57 - movs r0, 0x2 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0xA0 - movs r3, 0xD - b _0800DDCA - .align 2, 0 -_0800DC40: .4byte gUnknown_02024D26 -_0800DC44: .4byte gUnknown_03004210 -_0800DC48: .4byte gUnknown_08400E57 -_0800DC4C: - ldr r0, _0800DC80 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800DD38 - cmp r2, 0x1 - bne _0800DCCC - ldr r2, _0800DC84 @ =gLinkPlayers - ldr r0, _0800DC88 @ =0x02000000 - ldr r1, _0800DC8C @ =0x000160cb - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x18] - cmp r0, 0x1 - beq _0800DC9C - cmp r0, 0x1 - bgt _0800DC90 - cmp r0, 0 - bne _0800DC7E - b _0800DDA8 -_0800DC7E: - b _0800DE1C - .align 2, 0 -_0800DC80: .4byte gBattleTypeFlags -_0800DC84: .4byte gLinkPlayers -_0800DC88: .4byte 0x02000000 -_0800DC8C: .4byte 0x000160cb -_0800DC90: - cmp r0, 0x2 - bne _0800DC96 - b _0800DDA8 -_0800DC96: - cmp r0, 0x3 - beq _0800DC9C - b _0800DE1C -_0800DC9C: - ldr r4, _0800DCC0 @ =gUnknown_03004210 - ldr r1, _0800DCC4 @ =gUnknown_08400E48 - movs r5, 0x2 - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA0 - movs r3, 0x15 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _0800DCC8 @ =gUnknown_08400E4F - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA8 - movs r3, 0x6 - b _0800DDCA - .align 2, 0 -_0800DCC0: .4byte gUnknown_03004210 -_0800DCC4: .4byte gUnknown_08400E48 -_0800DCC8: .4byte gUnknown_08400E4F -_0800DCCC: - ldr r2, _0800DCF0 @ =gLinkPlayers - ldr r0, _0800DCF4 @ =0x02000000 - ldr r1, _0800DCF8 @ =0x000160cb - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x18] - cmp r0, 0x1 - beq _0800DDA8 - cmp r0, 0x1 - bgt _0800DCFC - cmp r0, 0 - beq _0800DD08 - b _0800DE1C - .align 2, 0 -_0800DCF0: .4byte gLinkPlayers -_0800DCF4: .4byte 0x02000000 -_0800DCF8: .4byte 0x000160cb -_0800DCFC: - cmp r0, 0x2 - beq _0800DD08 - cmp r0, 0x3 - beq _0800DD06 - b _0800DE1C -_0800DD06: - b _0800DDA8 -_0800DD08: - ldr r4, _0800DD2C @ =gUnknown_03004210 - ldr r1, _0800DD30 @ =gUnknown_08400E48 - movs r5, 0x2 - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA0 - movs r3, 0x15 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _0800DD34 @ =gUnknown_08400E4F - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA8 - movs r3, 0x6 - b _0800DDCA - .align 2, 0 -_0800DD2C: .4byte gUnknown_03004210 -_0800DD30: .4byte gUnknown_08400E48 -_0800DD34: .4byte gUnknown_08400E4F -_0800DD38: - cmp r2, 0x1 - bne _0800DD90 - ldr r2, _0800DD78 @ =gLinkPlayers - ldr r0, _0800DD7C @ =0x02000000 - ldr r1, _0800DD80 @ =0x000160cb - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x18] - cmp r0, 0 - beq _0800DDA8 - ldr r4, _0800DD84 @ =gUnknown_03004210 - ldr r1, _0800DD88 @ =gUnknown_08400E48 - movs r5, 0x2 - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA0 - movs r3, 0x15 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _0800DD8C @ =gUnknown_08400E4F - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA8 - movs r3, 0x6 - b _0800DDCA - .align 2, 0 -_0800DD78: .4byte gLinkPlayers -_0800DD7C: .4byte 0x02000000 -_0800DD80: .4byte 0x000160cb -_0800DD84: .4byte gUnknown_03004210 -_0800DD88: .4byte gUnknown_08400E48 -_0800DD8C: .4byte gUnknown_08400E4F -_0800DD90: - ldr r2, _0800DDD8 @ =gLinkPlayers - ldr r0, _0800DDDC @ =0x02000000 - ldr r1, _0800DDE0 @ =0x000160cb - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x18] - cmp r0, 0 - beq _0800DDF0 -_0800DDA8: - ldr r4, _0800DDE4 @ =gUnknown_03004210 - ldr r1, _0800DDE8 @ =gUnknown_08400E48 - movs r5, 0x2 - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA0 - movs r3, 0x6 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _0800DDEC @ =gUnknown_08400E4F - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA8 - movs r3, 0x15 -_0800DDCA: - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - b _0800DE1C - .align 2, 0 -_0800DDD8: .4byte gLinkPlayers -_0800DDDC: .4byte 0x02000000 -_0800DDE0: .4byte 0x000160cb -_0800DDE4: .4byte gUnknown_03004210 -_0800DDE8: .4byte gUnknown_08400E48 -_0800DDEC: .4byte gUnknown_08400E4F -_0800DDF0: - ldr r4, _0800DE24 @ =gUnknown_03004210 - ldr r1, _0800DE28 @ =gUnknown_08400E48 - movs r5, 0x2 - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA0 - movs r3, 0x15 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _0800DE2C @ =gUnknown_08400E4F - str r5, [sp] - adds r0, r4, 0 - movs r2, 0xA8 - movs r3, 0x6 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 -_0800DE1C: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800DE24: .4byte gUnknown_03004210 -_0800DE28: .4byte gUnknown_08400E48 -_0800DE2C: .4byte gUnknown_08400E4F - thumb_func_end sub_800DC24 + .section .text_800DC24 thumb_func_start sub_800DE30 sub_800DE30: @ 800DE30 diff --git a/data/text/battle_strings.inc b/data/text/battle_strings.inc index 07628795d..4412b5008 100644 --- a/data/text/battle_strings.inc +++ b/data/text/battle_strings.inc @@ -1164,16 +1164,13 @@ gUnknown_08400E42:: @ 8400E42 BattleText_Wally: .string "WALLY$" -gUnknown_08400E48:: @ 8400E48 -BattleText_Win: +BattleText_Win:: @ 8400E48 .string "{HIGHLIGHT TRANSPARENT}Win$" -gUnknown_08400E4F:: @ 8400E4F -BattleText_Loss: +BattleText_Loss:: @ 8400E4F .string "{HIGHLIGHT TRANSPARENT}Loss$" -gUnknown_08400E57:: @ 8400E57 -BattleText_Tie: +BattleText_Tie:: @ 8400E57 .string "{HIGHLIGHT TRANSPARENT}Tie$" gUnknown_08400E5E:: @ 8400E5E diff --git a/include/link.h b/include/link.h index a5d30a473..49dff6547 100644 --- a/include/link.h +++ b/include/link.h @@ -62,14 +62,14 @@ enum struct LinkPlayer { - u16 version; - u16 lp_field_2; - u32 trainerId; - u8 name[11]; - u8 gender; - u32 linkType; - u16 lp_field_18; - u16 language; + /* 0x00 */ u16 version; + /* 0x02 */ u16 lp_field_2; + /* 0x04 */ u32 trainerId; + /* 0x05 */ u8 name[11]; + /* 0x10 */ u8 gender; + /* 0x14 */ u32 linkType; + /* 0x18 */ u16 lp_field_18; + /* 0x20 */ u16 language; }; struct LinkPlayerBlock diff --git a/ld_script.txt b/ld_script.txt index 7ab8ac9ce..217afc056 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -49,6 +49,8 @@ SECTIONS { asm/rom3.o(.text); src/decompress.o(.text); asm/rom_800D42C.o(.text); + src/rom_800D42C.o(.text); + asm/rom_800D42C.o(.text_800DC24); src/pokemon_1.o(.text); src/calculate_base_damage.o(.text); src/pokemon_2.o(.text); diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c new file mode 100644 index 000000000..43819f991 --- /dev/null +++ b/src/rom_800D42C.c @@ -0,0 +1,96 @@ +#include "global.h" +#include "battle.h" +#include "link.h" +#include "text.h" + +struct Unk2000000 +{ + u8 filler0[0x160CB]; + /* 0x160CB */ u8 linkPlayerIndex; +}; + +extern struct Unk2000000 unk_2000000; +extern u16 gBattleTypeFlags; +extern u8 gUnknown_02024D26; + +extern struct Window gUnknown_03004210; + +extern u8 BattleText_Win[]; +extern u8 BattleText_Loss[]; +extern u8 BattleText_Tie[]; + +#define LEFT_MESSAGE_X 6 +#define RIGHT_MESSAGE_X 21 +#define CENTER_MESSAGE_X 13 +#define MESSAGE_Y 2 + +#define PRINT_MESSAGE(text, tileDataStartOffset, x) \ +{ \ + InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ + sub_8002F44(&gUnknown_03004210); \ +} + +#define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) +#define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X) + +void sub_800DC24(void) { + + if (gUnknown_02024D26 == 3) { + PRINT_MESSAGE(BattleText_Tie, 160, CENTER_MESSAGE_X); + return; + } + + if (gBattleTypeFlags & BATTLE_TYPE_40) { + // Double battle? + + if (gUnknown_02024D26 == 1) { + + // lp_field_18 = player position? + switch (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18) { + case 0: + case 2: PRINT_MESSAGE_LEFT(BattleText_Win, 160); + PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + return; + + case 1: + case 3: PRINT_MESSAGE_RIGHT(BattleText_Win, 160) + PRINT_MESSAGE_LEFT(BattleText_Loss, 168) + return; + } + } else { + + switch (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18) { + case 1: + case 3: PRINT_MESSAGE_LEFT(BattleText_Win, 160); + PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + return; + + case 0: + case 2: PRINT_MESSAGE_RIGHT(BattleText_Win, 160); + PRINT_MESSAGE_LEFT(BattleText_Loss, 168); + return; + } + } + + return; + } + + + if (gUnknown_02024D26 == 1) { + if (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18 != 0) { + PRINT_MESSAGE_RIGHT(BattleText_Win, 160); + PRINT_MESSAGE_LEFT(BattleText_Loss, 168); + } else { + PRINT_MESSAGE_LEFT(BattleText_Win, 160); + PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + } + } else { + if (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18 != 0) { + PRINT_MESSAGE_LEFT(BattleText_Win, 160); + PRINT_MESSAGE_RIGHT(BattleText_Loss, 168); + } else { + PRINT_MESSAGE_RIGHT(BattleText_Win, 160); + PRINT_MESSAGE_LEFT(BattleText_Loss, 168); + } + } +} |