diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-19 20:23:15 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-19 20:23:15 -0500 |
commit | 44337a41dbfcc4d2fe5f1e22cd87769a27c006c9 (patch) | |
tree | 04da2a28f616f180198000482248e08cb714a04d | |
parent | 407c49820e1e64ff6deb4480b6ff9aceb0a3b085 (diff) |
through TryBecomeLinkLeader
-rw-r--r-- | asm/union_room.s | 237 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/union_room.c | 79 |
3 files changed, 80 insertions, 237 deletions
diff --git a/asm/union_room.s b/asm/union_room.s index cd549c173..222ecaa7a 100644 --- a/asm/union_room.s +++ b/asm/union_room.s @@ -5,243 +5,6 @@ .text - thumb_func_start sub_811586C -sub_811586C: @ 811586C - 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, 0x80 - lsls r0, 3 - cmp r4, r0 - beq _081158BC - cmp r4, r0 - bgt _0811589E - movs r0, 0x80 - lsls r0, 2 - cmp r4, r0 - beq _081158B0 - b _0811590E -_0811589E: - movs r0, 0x94 - lsls r0, 6 - cmp r4, r0 - beq _081158CC - movs r0, 0xD4 - lsls r0, 6 - cmp r4, r0 - beq _081158F0 - b _0811590E -_081158B0: - ldr r1, _081158B8 @ =gUnknown_845742C - subs r0, r5, 0x1 - lsls r0, 2 - b _081158D4 - .align 2, 0 -_081158B8: .4byte gUnknown_845742C -_081158BC: - ldr r1, _081158C8 @ =gUnknown_845742C - subs r0, r5, 0x1 - lsls r0, 2 - adds r1, 0x14 - b _081158D4 - .align 2, 0 -_081158C8: .4byte gUnknown_845742C -_081158CC: - ldr r1, _081158EC @ =gUnknown_845742C - subs r0, r5, 0x1 - lsls r0, 2 - adds r1, 0x28 -_081158D4: - adds r0, r1 - ldr r2, [r0] - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r6, 0 - movs r1, 0x2 - movs r3, 0 - bl sub_811A444 - b _0811590E - .align 2, 0 -_081158EC: .4byte gUnknown_845742C -_081158F0: - ldr r1, _08115920 @ =gUnknown_845742C - subs r0, r5, 0x1 - lsls r0, 2 - adds r1, 0x3C - adds r0, r1 - ldr r2, [r0] - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r6, 0 - movs r1, 0x2 - movs r3, 0 - bl sub_811A444 -_0811590E: - adds r0, r6, 0 - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08115920: .4byte gUnknown_845742C - thumb_func_end sub_811586C - - thumb_func_start sub_8115924 -sub_8115924: @ 8115924 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x20 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r6, _08115994 @ =gSaveBlock2Ptr - ldr r2, [r6] - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - mov r8, r0 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0x2 - movs r3, 0 - bl sub_811A444 - add r5, sp, 0x14 - ldr r1, _08115998 @ =gUnknown_84571B4 - adds r0, r5, 0 - bl StringCopy - ldr r0, [r6] - adds r0, 0xA - bl sub_8118658 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - add r0, sp, 0x8 - movs r2, 0x2 - movs r3, 0x5 - bl ConvertIntToDecimalStringN - adds r0, r5, 0 - add r1, sp, 0x8 - bl StringAppend - movs r0, 0x10 - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - movs r3, 0 - bl sub_811A444 - add sp, 0x20 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08115994: .4byte gSaveBlock2Ptr -_08115998: .4byte gUnknown_84571B4 - thumb_func_end sub_8115924 - - thumb_func_start sub_811599C -sub_811599C: @ 811599C - push {lr} - lsls r1, 24 - lsrs r1, 24 - subs r0, r1, 0x1 - cmp r0, 0x15 - bhi _08115A18 - lsls r0, 2 - ldr r1, _081159B4 @ =_081159B8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081159B4: .4byte _081159B8 - .align 2, 0 -_081159B8: - .4byte _08115A10 - .4byte _08115A10 - .4byte _08115A10 - .4byte _08115A10 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A10 - .4byte _08115A10 - .4byte _08115A10 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A18 - .4byte _08115A10 - .4byte _08115A10 -_08115A10: - ldr r0, _08115A1C @ =gStringVar4 - ldr r1, _08115A20 @ =gUnknown_8457234 - bl StringExpandPlaceholders -_08115A18: - pop {r0} - bx r0 - .align 2, 0 -_08115A1C: .4byte gStringVar4 -_08115A20: .4byte gUnknown_8457234 - thumb_func_end sub_811599C - - thumb_func_start TryBecomeLinkLeader -TryBecomeLinkLeader: @ 8115A24 - push {lr} - ldr r0, _08115A54 @ =sub_8115A68 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08115A58 @ =gUnknown_203B05C - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08115A5C @ =gTasks+0x8 - adds r1, r0 - str r1, [r2] - ldr r0, _08115A60 @ =gUnknown_3002024 - str r1, [r0] - movs r0, 0 - strb r0, [r1, 0xC] - strb r0, [r1, 0xD] - ldr r1, _08115A64 @ =gSpecialVar_Result - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08115A54: .4byte sub_8115A68 -_08115A58: .4byte gUnknown_203B05C -_08115A5C: .4byte gTasks+0x8 -_08115A60: .4byte gUnknown_3002024 -_08115A64: .4byte gSpecialVar_Result - thumb_func_end TryBecomeLinkLeader - thumb_func_start sub_8115A68 sub_8115A68: @ 8115A68 push {r4-r7,lr} diff --git a/ld_script.txt b/ld_script.txt index 016793dc9..9d476e13a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -241,6 +241,7 @@ SECTIONS { src/mailbox_pc.o(.text); src/menu.o(.text); src/quest_log.o(.text); + src/union_room.o(.text); asm/union_room.o(.text); asm/union_room_player_avatar.o(.text); asm/pokemon_special_anim.o(.text); diff --git a/src/union_room.c b/src/union_room.c new file mode 100644 index 000000000..070c43a09 --- /dev/null +++ b/src/union_room.c @@ -0,0 +1,79 @@ +#include "global.h" +#include "gflib.h" +#include "event_data.h" +#include "link_rfu.h" +#include "task.h" +#include "union_room.h" + +EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; + +IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; + +void sub_8115A68(u8 taskId); +u16 sub_8118658(const u8 *data); +void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); + +extern const u8 *const gUnknown_845742C[][5]; +extern const u8 gUnknown_84571B4[]; +extern const u8 gUnknown_8457234[]; + +void sub_811586C(u8 windowId, u8 arg1, u8 stringId) +{ + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + switch (arg1 << 8) + { + case 0x200: + sub_811A444(windowId, 2, gUnknown_845742C[0][stringId - 1], 0, 2, 0); + break; + case 0x400: + sub_811A444(windowId, 2, gUnknown_845742C[1][stringId - 1], 0, 2, 0); + break; + case 0x2500: + sub_811A444(windowId, 2, gUnknown_845742C[2][stringId - 1], 0, 2, 0); + break; + case 0x3500: + sub_811A444(windowId, 2, gUnknown_845742C[3][stringId - 1], 0, 2, 0); + break; + } + + CopyWindowToVram(windowId, 2); +} + +void sub_8115924(u8 windowId) +{ + u8 text[12]; + u8 text2[12]; + + sub_811A444(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0); + StringCopy(text2, gUnknown_84571B4); + ConvertIntToDecimalStringN(text, sub_8118658(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); + StringAppend(text2, text); + sub_811A444(windowId, 0, text2, 0, 0x10, 0); +} + +void sub_811599C(u8 *dst, u8 caseId) +{ + switch (caseId) + { + case 1 ... 4: + case 9 ... 11: + case 21 ... 22: + // UB: argument *dst isn't used, instead it always prints to gStringVar4 + StringExpandPlaceholders(gStringVar4, gUnknown_8457234); + break; + } +} + +void TryBecomeLinkLeader(void) +{ + u8 taskId; + struct UnkStruct_Leader *dataPtr; + + taskId = CreateTask(sub_8115A68, 0); + gUnknown_203B05C.leader = dataPtr = (void*)(gTasks[taskId].data); + gUnknown_3002024 = dataPtr; + + dataPtr->state = 0; + dataPtr->textState = 0; + gSpecialVar_Result = 0; +} |