diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | asm/mevent.s | 241 | ||||
-rw-r--r-- | include/link.h | 4 | ||||
-rw-r--r-- | src/mevent.c | 146 |
4 files changed, 151 insertions, 242 deletions
@@ -164,7 +164,7 @@ $(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_comm cd $(OBJ_DIR) && sed -f ../../ld_script.sed ../../$< | sed "s#tools/#../../tools/#g" > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) - cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(LIB) $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ diff --git a/asm/mevent.s b/asm/mevent.s index 2d1f06d88..234eb529e 100644 --- a/asm/mevent.s +++ b/asm/mevent.s @@ -5,247 +5,6 @@ .text - thumb_func_start sub_814374C -sub_814374C: @ 814374C - push {lr} - bl sub_800AA48 - lsls r0, 24 - cmp r0, 0 - beq _08143768 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08143768 - movs r0, 0x1 - b _0814376A -_08143768: - movs r0, 0 -_0814376A: - pop {r1} - bx r1 - thumb_func_end sub_814374C - - thumb_func_start sub_8143770 -sub_8143770: @ 8143770 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bhi _08143794 - bl HasLinkErrorOccurred - lsls r0, 24 - cmp r0, 0 - beq _08143794 - movs r0, 0 - strb r0, [r4] - movs r0, 0x3 - b _0814389A -_08143794: - ldrb r0, [r4] - cmp r0, 0x5 - bls _0814379C - b _08143898 -_0814379C: - lsls r0, 2 - ldr r1, _081437A8 @ =_081437AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081437A8: .4byte _081437AC - .align 2, 0 -_081437AC: - .4byte _081437C4 - .4byte _081437E0 - .4byte _081437F8 - .4byte _0814382C - .4byte _08143878 - .4byte _08143884 -_081437C4: - bl sub_800AA48 - lsls r0, 24 - cmp r0, 0 - beq _08143814 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _08143814 - movs r0, 0x1 - strb r0, [r4] - b _08143898 -_081437E0: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x5 - bls _08143898 - movs r0, 0 - strh r0, [r5] - movs r0, 0x2 - strb r0, [r4] - b _08143898 -_081437F8: - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08143814 - movs r0, 0x42 - bl PlaySE - bl sub_800A5BC - movs r0, 0 - strh r0, [r5] - b _08143872 -_08143814: - ldr r0, _08143828 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08143898 - movs r0, 0 - strb r0, [r4] - movs r0, 0x1 - b _0814389A - .align 2, 0 -_08143828: .4byte gMain -_0814382C: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bls _08143842 - movs r0, 0 - strb r0, [r4] - movs r0, 0x5 - b _0814389A -_08143842: - bl IsLinkConnectionEstablished - lsls r0, 24 - cmp r0, 0 - beq _08143898 - ldr r0, _08143868 @ =gUnknown_3003F64 - ldrb r0, [r0] - cmp r0, 0 - beq _08143872 - bl IsLinkPlayerDataExchangeComplete - lsls r0, 24 - cmp r0, 0 - beq _0814386C - movs r0, 0 - strb r0, [r4] - movs r0, 0x2 - b _0814389A - .align 2, 0 -_08143868: .4byte gUnknown_3003F64 -_0814386C: - movs r0, 0x4 - strb r0, [r4] - b _08143898 -_08143872: - movs r0, 0x3 - strb r0, [r4] - b _08143898 -_08143878: - movs r0, 0 - bl sub_800AA80 - movs r0, 0x5 - strb r0, [r4] - b _08143898 -_08143884: - ldr r0, _08143894 @ =gUnknown_3003F64 - ldrb r0, [r0] - cmp r0, 0 - bne _08143898 - strb r0, [r4] - movs r0, 0x4 - b _0814389A - .align 2, 0 -_08143894: .4byte gUnknown_3003F64 -_08143898: - movs r0, 0 -_0814389A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8143770 - - thumb_func_start sub_81438A0 -sub_81438A0: @ 81438A0 - push {r4,lr} - ldr r0, _081438E0 @ =sub_8143910 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _081438E4 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0 - strb r0, [r4, 0x8] - strb r0, [r4, 0x9] - strb r0, [r4, 0xA] - strb r0, [r4, 0xB] - strb r0, [r4, 0xC] - strb r0, [r4, 0xD] - movs r1, 0 - strh r0, [r4] - strh r0, [r4, 0x2] - strh r0, [r4, 0x4] - strh r0, [r4, 0x6] - strb r1, [r4, 0xE] - movs r0, 0x40 - bl AllocZeroed - str r0, [r4, 0x10] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081438E0: .4byte sub_8143910 -_081438E4: .4byte gTasks+0x8 - thumb_func_end sub_81438A0 - - thumb_func_start sub_81438E8 -sub_81438E8: @ 81438E8 - movs r1, 0 - strh r1, [r0] - bx lr - thumb_func_end sub_81438E8 - - thumb_func_start sub_81438F0 -sub_81438F0: @ 81438F0 - push {lr} - adds r2, r0, 0 - lsls r1, 16 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - cmp r0, r1 - bhi _08143906 - movs r0, 0 - b _0814390C -_08143906: - movs r0, 0 - strh r0, [r2] - movs r0, 0x1 -_0814390C: - pop {r1} - bx r1 - thumb_func_end sub_81438F0 - thumb_func_start sub_8143910 sub_8143910: @ 8143910 push {r4,r5,lr} diff --git a/include/link.h b/include/link.h index d015708b1..92abf6e28 100644 --- a/include/link.h +++ b/include/link.h @@ -146,6 +146,7 @@ extern u16 word_3002910[]; extern bool8 gReceivedRemoteLinkPlayers; extern bool8 gLinkVSyncDisabled; +extern u8 gUnknown_3003F64; extern u8 gUnknown_3003F84; extern u64 gUnknown_3003FB4; extern u16 gUnknown_202271A; @@ -201,5 +202,8 @@ u8 sub_800ABAC(void); u8 sub_800ABBC(void); void sub_800AC34(void); void sub_8009804(void); +bool8 sub_800AA48(void); +void sub_800A5BC(void); +void sub_800AA80(u8); #endif // GUARD_LINK_H diff --git a/src/mevent.c b/src/mevent.c index 8b710e3f3..27abf65c3 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -1,5 +1,9 @@ #include "global.h" +#include "constants/songs.h" +#include "malloc.h" +#include "sound.h" #include "main.h" +#include "task.h" #include "decompress.h" #include "link.h" #include "unk_815c27c.h" @@ -11,6 +15,29 @@ struct MEvent_Str_1 u32 unk_008; }; +struct MEvent_Str_2 +{ + u8 fill_00[0x40]; +}; + +struct MEventTaskData1 +{ + u16 t00; + u16 t02; + u16 t04; + u16 t06; + u8 t08; + u8 t09; + u8 t0A; + u8 t0B; + u8 t0C; + u8 t0D; + u8 t0E; + struct MEvent_Str_2 *t10; +}; + +void sub_8143910(u8 taskId); + void sub_81435DC(struct MEvent_Str_1 *a0, u32 a1, u32 a2) { vu16 imeBak = REG_IME; @@ -73,3 +100,122 @@ bool8 sub_81436EC(void) return TRUE; return FALSE; } + +bool8 sub_814374C(void) +{ + if (sub_800AA48() && GetLinkPlayerCount_2() == 2) + return TRUE; + return FALSE; +} + +u8 sub_8143770(u8 * r4, u16 * r5) +{ + if ((*r4 == 3 || *r4 == 4 || *r4 == 5) && HasLinkErrorOccurred()) + { + *r4 = 0; + return 3; + } + switch (*r4) + { + case 0: + if (sub_800AA48() && GetLinkPlayerCount_2() > 1) + { + *r4 = 1; + ; + } + else if (gMain.newKeys & B_BUTTON) + { + *r4 = 0; + return 1; + } + break; + case 1: + if (++(*r5) > 5) + { + *r5 = 0; + *r4 = 2; + } + break; + case 2: + if (GetLinkPlayerCount_2() == 2) + { + PlaySE(SE_TOY_G); + sub_800A5BC(); + *r5 = 0; + *r4 = 3; + } + else if (gMain.newKeys & B_BUTTON) + { + *r4 = 0; + return 1; + } + break; + case 3: + if (++(*r5) > 30) + { + *r4 = 0; + return 5; + } + else if (IsLinkConnectionEstablished()) + { + if (gUnknown_3003F64) + { + if (IsLinkPlayerDataExchangeComplete()) + { + *r4 = 0; + return 2; + } + else + *r4 = 4; + } + else + *r4 = 3; + } + break; + case 4: + sub_800AA80(0); + *r4 = 5; + break; + case 5: + if (!gUnknown_3003F64) + { + *r4 = 0; + return 4; + } + break; + } + return 0; +} + +void sub_81438A0(void) +{ + u8 taskId = CreateTask(sub_8143910, 0); + struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; + data->t08 = 0; + data->t09 = 0; + data->t0A = 0; + data->t0B = 0; + data->t0C = 0; + data->t0D = 0; + data->t00 = 0; + data->t02 = 0; + data->t04 = 0; + data->t06 = 0; + data->t0E = 0; + data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2)); +} + +void sub_81438E8(u16 *a0) +{ + *a0 = 0; +} + +bool8 sub_81438F0(u16 * a0, u16 a1) +{ + if (++(*a0) > a1) + { + *a0 = 0; + return TRUE; + } + return FALSE; +} |