diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2018-06-01 23:08:25 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2018-06-01 23:08:25 +0200 |
commit | 83cf2f50dfc906f7f2014570b37863d98fe89bc7 (patch) | |
tree | 57b5a8d442953f97096a9f5d17f5863624aabcbf | |
parent | 0b09575fd4a3f8b001e283f7ea6842d3357359bd (diff) |
shabby beginnings
-rw-r--r-- | asm/rom_8011DC0.s | 320 | ||||
-rw-r--r-- | src/rom_8011DC0.c | 253 |
2 files changed, 263 insertions, 310 deletions
diff --git a/asm/rom_8011DC0.s b/asm/rom_8011DC0.s index b7f03739a..2bc67c5c3 100644 --- a/asm/rom_8011DC0.s +++ b/asm/rom_8011DC0.s @@ -5,290 +5,6 @@ .text - thumb_func_start nullsub_89 -nullsub_89: @ 80124E8 - bx lr - thumb_func_end nullsub_89 - - thumb_func_start sub_80124EC -sub_80124EC: @ 80124EC - push {r4-r6,lr} - sub sp, 0x8 - adds r4, r1, 0 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r2, 24 - lsrs r5, r2, 24 - adds r0, r6, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - lsls r4, 8 - movs r0, 0x90 - lsls r0, 6 - cmp r4, r0 - beq _08012588 - cmp r4, r0 - bgt _08012526 - movs r0, 0x80 - lsls r0, 2 - cmp r4, r0 - beq _08012538 - movs r0, 0x80 - lsls r0, 3 - cmp r4, r0 - beq _08012544 - b _080125A6 -_08012526: - movs r0, 0x94 - lsls r0, 6 - cmp r4, r0 - beq _08012554 - movs r0, 0xD4 - lsls r0, 6 - cmp r4, r0 - beq _08012564 - b _080125A6 -_08012538: - ldr r1, =gUnknown_082EDB60 - subs r0, r5, 0x1 - lsls r0, 2 - b _0801256C - .pool -_08012544: - ldr r1, =gUnknown_082EDB60 - subs r0, r5, 0x1 - lsls r0, 2 - adds r1, 0x14 - b _0801256C - .pool -_08012554: - ldr r1, =gUnknown_082EDB60 - subs r0, r5, 0x1 - lsls r0, 2 - adds r1, 0x28 - b _0801256C - .pool -_08012564: - ldr r1, =gUnknown_082EDB60 - subs r0, r5, 0x1 - lsls r0, 2 - adds r1, 0x3C -_0801256C: - adds r0, r1 - ldr r2, [r0] - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r6, 0 - movs r1, 0x1 - movs r3, 0 - bl sub_80173E0 - b _080125A6 - .pool -_08012588: - ldr r1, =gUnknown_082EDB60 - subs r0, r5, 0x1 - lsls r0, 2 - adds r1, 0x50 - adds r0, r1 - ldr r2, [r0] - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r6, 0 - movs r1, 0x1 - movs r3, 0 - bl sub_80173E0 -_080125A6: - adds r0, r6, 0 - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80124EC - - thumb_func_start sub_80125BC -sub_80125BC: @ 80125BC - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x28 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r6, =gSaveBlock2Ptr - ldr r2, [r6] - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - mov r8, r0 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0x1 - movs r3, 0 - bl sub_80173E0 - ldr r1, =gText_UnkCtrlCodeF907 - add r0, sp, 0x8 - bl StringCopy - adds r5, r0, 0 - ldr r0, [r6] - adds r0, 0xA - bl sub_8015658 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - movs r2, 0x2 - movs r3, 0x5 - bl ConvertIntToDecimalStringN - movs r0, 0x11 - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0x1 - add r2, sp, 0x8 - movs r3, 0 - bl sub_80173E0 - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80125BC - - thumb_func_start sub_801262C -sub_801262C: @ 801262C - push {lr} - lsls r1, 24 - lsrs r1, 24 - subs r0, r1, 0x1 - cmp r0, 0x1B - bhi _080126C0 - lsls r0, 2 - ldr r1, =_08012648 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08012648: - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126C0 - .4byte _080126C0 - .4byte _080126C0 - .4byte _080126C0 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126C0 - .4byte _080126C0 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126C0 - .4byte _080126C0 - .4byte _080126C0 - .4byte _080126C0 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 - .4byte _080126B8 -_080126B8: - ldr r0, =gStringVar4 - ldr r1, =gText_AwaitingCommunication - bl StringExpandPlaceholders -_080126C0: - pop {r0} - bx r0 - .pool - thumb_func_end sub_801262C - - thumb_func_start sub_80126CC -sub_80126CC: @ 80126CC - push {lr} - subs r0, 0x9 - cmp r0, 0x12 - bhi _08012734 - lsls r0, 2 - ldr r1, =_080126E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_080126E4: - .4byte _08012730 - .4byte _08012730 - .4byte _08012730 - .4byte _08012734 - .4byte _08012734 - .4byte _08012734 - .4byte _08012730 - .4byte _08012730 - .4byte _08012734 - .4byte _08012734 - .4byte _08012734 - .4byte _08012734 - .4byte _08012734 - .4byte _08012734 - .4byte _08012730 - .4byte _08012730 - .4byte _08012730 - .4byte _08012730 - .4byte _08012730 -_08012730: - movs r0, 0x1 - b _08012736 -_08012734: - movs r0, 0 -_08012736: - pop {r1} - bx r1 - thumb_func_end sub_80126CC - - thumb_func_start BerryBlenderLinkBecomeLeader -BerryBlenderLinkBecomeLeader: @ 801273C - push {lr} - ldr r0, =sub_8012780 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gUnknown_02022C30 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r1, r0 - str r1, [r2] - ldr r0, =gUnknown_03000DA0 - str r1, [r0] - movs r0, 0 - strb r0, [r1, 0xC] - strb r0, [r1, 0xD] - ldr r1, =gSpecialVar_Result - strh r0, [r1] - pop {r0} - bx r0 - .pool - thumb_func_end BerryBlenderLinkBecomeLeader thumb_func_start sub_8012780 sub_8012780: @ 8012780 @@ -730,7 +446,7 @@ _08012BA8: ldr r0, [r6] adds r0, r1 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 lsls r0, 16 lsrs r0, 16 ldrb r2, [r6, 0x13] @@ -772,7 +488,7 @@ _08012BF6: ldr r0, [r6] adds r0, r1 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -791,7 +507,7 @@ _08012C28: ldr r0, [r6] adds r0, r1 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -816,7 +532,7 @@ _08012C5C: ldr r0, [r6] adds r0, r1 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 lsls r0, 16 lsrs r0, 16 ldrb r2, [r6, 0x13] @@ -890,7 +606,7 @@ _08012D04: adds r4, r0, 0 adds r4, 0x10 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -2564,7 +2280,7 @@ sub_8013BD8: @ 8013BD8 adds r4, r0, 0 adds r4, 0x10 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -4334,7 +4050,7 @@ _08014C82: ldr r0, [r5] adds r0, r1 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -4353,7 +4069,7 @@ _08014CC4: ldr r0, [r5] adds r0, r1 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -4374,7 +4090,7 @@ _08014CF2: ldr r0, [r5] adds r0, r1 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 lsls r0, 16 lsrs r0, 16 ldrb r2, [r5, 0x13] @@ -4423,7 +4139,7 @@ _08014D64: adds r4, r0, 0 adds r4, 0x10 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -4832,7 +4548,7 @@ _080150D6: adds r4, r0, 0 adds r4, 0x10 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -5193,7 +4909,7 @@ _08015452: adds r4, r0, 0 adds r4, 0x10 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 adds r1, r0, 0 lsls r1, 16 lsrs r1, 16 @@ -5391,14 +5107,14 @@ UnionRoomSpecial: @ 801560C .pool thumb_func_end UnionRoomSpecial - thumb_func_start sub_8015658 -sub_8015658: @ 8015658 + thumb_func_start ReadAsU16 +ReadAsU16: @ 8015658 ldrb r1, [r0, 0x1] lsls r1, 8 ldrb r0, [r0] orrs r0, r1 bx lr - thumb_func_end sub_8015658 + thumb_func_end ReadAsU16 thumb_func_start sub_8015664 sub_8015664: @ 8015664 @@ -7528,7 +7244,7 @@ _08016A4A: ldr r0, [r5] adds r0, r4 adds r0, 0x2 - bl sub_8015658 + bl ReadAsU16 lsls r0, 16 lsrs r0, 16 mov r1, sp @@ -9531,7 +9247,7 @@ sub_80179AC: @ 80179AC bl sub_8018404 adds r4, 0x2 adds r0, r4, 0 - bl sub_8015658 + bl ReadAsU16 lsls r0, 16 lsrs r0, 16 mov r1, sp @@ -9563,7 +9279,7 @@ sub_80179D4: @ 80179D4 adds r1, r5, 0 bl sub_8018404 adds r0, r5, 0x2 - bl sub_8015658 + bl ReadAsU16 lsls r0, 16 lsrs r0, 16 adds r1, r4, 0 diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c index 9076b611a..f37b4019f 100644 --- a/src/rom_8011DC0.c +++ b/src/rom_8011DC0.c @@ -1,18 +1,255 @@ - -// Includes #include "global.h" +#include "window.h" +#include "bg.h" +#include "string_util.h" +#include "task.h" +#include "event_data.h" +#include "link.h" +#include "link_rfu.h" +#include "librfu.h" +#include "malloc.h" +#include "menu.h" +#include "list_menu.h" +#include "menu_helpers.h" + +struct UnkStruct_02 +{ + struct UnkLinkRfuStruct_02022B14 field_0; + u8 field_D; + u8 field_E; + u8 field_F; + u8 playerName[PLAYER_NAME_LENGTH]; + u16 field_18; + u8 field_1A_0:2; + u8 field_1A_1:1; + u8 field_1B; +}; + +struct UnkStruct_01 +{ + struct UnkStruct_02 *field_0; + void *field_4; + void *field_8; + u8 field_C; + u8 field_D; + u8 field_E; + u8 field_F; + u8 field_10; + u8 field_11; + u8 field_12; + u8 field_13; + u8 field_14; + u8 field_15; + u8 field_16; + u8 field_17; +}; -// Static type declarations +extern struct UnkStruct_01 *gUnknown_02022C30; -// Static RAM declarations -IWRAM_DATA u32 gUnknown_03000DA0; +extern u8 gUnknown_02022C2C; +extern u8 gUnknown_02022C2D; + +// IWRAM vars +IWRAM_DATA struct UnkStruct_01 *gUnknown_03000DA0; IWRAM_DATA u32 gUnknown_03000DA4; IWRAM_DATA void *gUnknown_03000DA8; IWRAM_DATA void *gUnknown_03000DAC; IWRAM_DATA bool32 gUnknown_03000DB0; -// Static ROM declarations +// this file's functions +void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5); +u16 ReadAsU16(const u8 *ptr); +void sub_8012780(u8 taskId); +void sub_80175EC(void *arg0, u8 count); +void sub_8017580(void *arg0, u8 count); +u8 sub_8016FC0(void *arg0, u32 arg1); +bool8 sub_8017064(u8 *arg0, const u8 *str); +void sub_801320C(struct UnkStruct_01 *arg0, u32 arg1, u32 arg2); + +// const rom data +extern const u8 *const gUnknown_082EDB60[][5]; +extern const u8 gText_UnkCtrlCodeF907[]; +extern const u8 gUnknown_082EDBC4[]; +extern const u8 gText_AwaitingCommunication[]; +extern const u32 gUnknown_082F00C4[]; +extern const struct WindowTemplate gUnknown_082F00BC; +extern const struct WindowTemplate gUnknown_082F0124; +extern const struct WindowTemplate gUnknown_082F012C; +extern const struct WindowTemplate gUnknown_082F011C; +extern const struct ListMenuTemplate gUnknown_082F015C; +extern const u8 *const gUnknown_082F0048[]; + +// code +void nullsub_89(void) +{ + +} + +void sub_80124EC(u8 windowId, u8 arg1, u8 stringId) +{ + FillWindowPixelBuffer(windowId, 0x11); + switch (arg1 << 8) + { + case 0x200: + sub_80173E0(windowId, 1, gUnknown_082EDB60[0][stringId - 1], 0, 1, 0); + break; + case 0x400: + sub_80173E0(windowId, 1, gUnknown_082EDB60[1][stringId - 1], 0, 1, 0); + break; + case 0x2500: + sub_80173E0(windowId, 1, gUnknown_082EDB60[2][stringId - 1], 0, 1, 0); + break; + case 0x3500: + sub_80173E0(windowId, 1, gUnknown_082EDB60[3][stringId - 1], 0, 1, 0); + break; + case 0x2400: + sub_80173E0(windowId, 1, gUnknown_082EDB60[4][stringId - 1], 0, 1, 0); + break; + } + + CopyWindowToVram(windowId, 2); +} + +void sub_80125BC(u8 windowId) +{ + u8 text[30]; + u8 *txtPtr; + + sub_80173E0(windowId, 1, gSaveBlock2Ptr->playerName, 0, 1, 0); + txtPtr = StringCopy(text, gText_UnkCtrlCodeF907); + ConvertIntToDecimalStringN(txtPtr, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); + sub_80173E0(windowId, 1, text, 0, 0x11, 0); +} + +void sub_801262C(u8 *dst, u8 caseId) +{ + switch (caseId) + { + case 1 ... 4: + case 9 ... 11: + case 14 ... 16: + case 21 ... 28: + // UB: argument *dst isn't used, instead it always prints to gStringVar4 + StringExpandPlaceholders(gStringVar4, gText_AwaitingCommunication); + break; + } +} + +bool32 sub_80126CC(u32 caseId) +{ + switch (caseId) + { + case 9 ... 11: + case 15 ... 16: + case 23 ... 27: + return TRUE; + default: + return FALSE; + } +} + +void BerryBlenderLinkBecomeLeader(void) +{ + u8 taskId; + struct UnkStruct_01 *dataPtr; + + taskId = CreateTask(sub_8012780, 0); + gUnknown_02022C30 = dataPtr = (void*)(gTasks[taskId].data); + gUnknown_03000DA0 = dataPtr; + + dataPtr->field_C = 0; + dataPtr->field_D = 0; + gSpecialVar_Result = 0; +} + +void sub_8012780(u8 taskId) +{ + struct UnkStruct_01 *data = gUnknown_02022C30; + + switch (data->field_C) + { + case 0: + if (gSpecialVar_0x8004 == 20 || gSaveBlock2Ptr->frontierChosenLvl == 1) + gSpecialVar_0x8004++; + gUnknown_02022C2C = gUnknown_082F00C4[gSpecialVar_0x8004]; + gUnknown_02022C2D = gUnknown_082F00C4[gSpecialVar_0x8004] >> 8; + sub_8010F84(gUnknown_02022C2C, 0, 0); + sub_800B488(); + OpenLink(); + sub_8011C10(gUnknown_02022C2D & 0xF); + data->field_C = 3; + break; + case 3: + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0xA0); + data->field_8 = AllocZeroed(0xA0); + sub_80175EC(data->field_4, 4); + sub_8017580(data->field_0, 5); + sub_800DF90(&data->field_0->field_0, data->field_0->playerName); + data->field_0->field_18 = 0; + data->field_0->field_1A_0 = 1; + data->field_0->field_1A_1 = 0; + data->field_0->field_1B = 0; + data->field_17 = sub_8016FC0(data->field_4, 0xFF); + data->field_10 = AddWindow(&gUnknown_082F00BC); + switch (gUnknown_02022C2D & 0xF) + { + case 2: + case 3: + case 4: + data->field_F = AddWindow(&gUnknown_082F011C); + break; + case 5: + data->field_F = AddWindow(&gUnknown_082F0124); + break; + } + data->field_11 = AddWindow(&gUnknown_082F012C); + + FillWindowPixelBuffer(data->field_10, 0x22); + sub_80173E0(data->field_10, 0, gUnknown_082EDBC4, 8, 1, 4); + PutWindowTilemap(data->field_10); + CopyWindowToVram(data->field_10, 2); + + NewMenuHelpers_DrawStdWindowFrame(data->field_F, FALSE); + gMultiuseListMenuTemplate = gUnknown_082F015C; + gMultiuseListMenuTemplate.windowId = data->field_F; + data->field_12 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + NewMenuHelpers_DrawStdWindowFrame(data->field_11, FALSE); + PutWindowTilemap(data->field_11); + CopyWindowToVram(data->field_11, 2); -// .rodata + CopyBgTilemapBufferToVram(0); + data->field_13 = 1; + data->field_C = 4; + break; + case 4: + StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]); + if ((gUnknown_02022C2D >> 4) != 0) + { + if (data->field_13 > (gUnknown_02022C2D >> 4) - 1 && (gUnknown_02022C2D & 0xF) != 0) + StringExpandPlaceholders(gStringVar4, gText_AwaitingLink); + else + StringExpandPlaceholders(gStringVar4, gText_AwaitingCommunication); + } + else + { + sub_801262C(gStringVar4, gUnknown_02022C2C); + } -// .text + sub_80124EC(data->field_11, gUnknown_02022C2D, data->field_13); + data->field_C = 5; + break; + case 5: + if (sub_8017064(&data->field_D, gStringVar4)) + data->field_C = 6; + break; + case 6: + sub_801320C(data, 7, 10); + if (gMain.newKeys & B_BUTTON) + { + if (data->field_13) + } + break; + } +} |