From 520bcb39448f9aec25a603f9204adbe3375d4d86 Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Fri, 11 Aug 2023 10:35:00 -0400 Subject: [PATCH] Skipped 2 got 1 lol [sub_8005180] --- asm/sprite.s | 398 ---------------------------- include/rescue_password_menu.h | 10 +- include/sprite.h | 18 +- src/other_menus.c | 12 +- src/pokemon_3.c | 17 +- src/rescue_password_menu.c | 3 +- src/save_menu.c | 11 +- src/sprite.c | 471 ++++++++++++++++++++++++++++++++- src/unk_menu_203B360.c | 13 +- sym_ewram.txt | 4 +- 10 files changed, 490 insertions(+), 467 deletions(-) diff --git a/asm/sprite.s b/asm/sprite.s index 8a7213ff6..dd69ef0e3 100644 --- a/asm/sprite.s +++ b/asm/sprite.s @@ -5,404 +5,6 @@ .text - thumb_func_start sub_8004EA8 -sub_8004EA8: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - adds r5, r0, 0 - mov r8, r1 - adds r0, r2, 0 - adds r6, r3, 0 - cmp r0, 0 - beq _08004EC2 - bl sub_80052BC -_08004EC2: - ldr r0, _08004F40 - ldr r7, [r0] - mov r12, r0 - cmp r7, 0x7F - ble _08004ECE - b _08005082 -_08004ECE: - mov r2, sp - ldrh r0, [r5] - strh r0, [r2] - ldrh r0, [r5, 0x2] - strh r0, [r2, 0x2] - ldrh r4, [r5, 0x4] - ldr r0, _08004F44 - ands r0, r4 - strh r0, [r2, 0x4] - ldrh r3, [r5, 0x6] - ldr r0, _08004F48 - ands r0, r3 - strh r0, [r2, 0x6] - ldrh r0, [r5, 0x8] - strh r0, [r2, 0x8] - movs r1, 0xE0 - lsls r1, 4 - ands r1, r3 - lsrs r1, 9 - ldr r0, _08004F4C - ands r0, r4 - lsls r0, 4 - orrs r1, r0 - strh r1, [r2, 0xA] - lsls r1, r7, 3 - ldr r0, _08004F50 - adds r3, r1, r0 - mov r0, r8 - movs r2, 0x16 - ldrsh r1, [r0, r2] - mov r0, sp - ldrb r0, [r0, 0x3] - lsls r0, 24 - asrs r0, 24 - adds r7, r1, r0 - cmp r7, 0 - bge _08004F1A - movs r7, 0 -_08004F1A: - cmp r7, 0xFF - ble _08004F20 - movs r7, 0xFF -_08004F20: - cmp r6, 0 - bne _08004F54 - add r2, sp, 0x4 - ldrh r0, [r2] - strh r0, [r3] - adds r2, 0x2 - ldrh r0, [r2] - strh r0, [r3, 0x2] - adds r2, 0x2 - adds r1, r3, 0x4 - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - ldrh r0, [r2] - strh r0, [r1, 0x2] - b _08004F86 - .align 2, 0 -_08004F40: .4byte gSpriteCount -_08004F44: .4byte 0x0000fcff -_08004F48: .4byte 0x0000f1ff -_08004F4C: .4byte 0x000003ff -_08004F50: .4byte gUnknown_20262A8 -_08004F54: - add r4, sp, 0x4 - ldrh r1, [r4] - ldrh r0, [r6] - ands r0, r1 - ldrh r1, [r6, 0x6] - orrs r0, r1 - strh r0, [r3] - adds r4, 0x2 - ldrh r1, [r4] - ldrh r0, [r6, 0x2] - ands r0, r1 - ldrh r1, [r6, 0x8] - orrs r0, r1 - strh r0, [r3, 0x2] - adds r4, 0x2 - adds r2, r3, 0x4 - ldrh r1, [r4] - ldrh r0, [r6, 0x4] - ands r0, r1 - ldrh r1, [r6, 0xA] - orrs r0, r1 - strh r0, [r2] - adds r4, 0x2 - ldrh r0, [r4] - strh r0, [r2, 0x2] -_08004F86: - mov r0, sp - ldrb r0, [r0, 0x2] - cmp r0, 0 - beq _08004FB0 - ldr r1, _08004FA8 - mov r0, sp - ldrb r0, [r0, 0x2] - lsls r0, 1 - adds r1, r0, r1 - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, 0 - beq _08004FB0 - adds r1, r0, 0 - ldr r0, _08004FAC - ands r1, r0 - b _08004FC0 - .align 2, 0 -_08004FA8: .4byte gUnknown_2025672 -_08004FAC: .4byte 0x000003ff -_08004FB0: - ldrh r1, [r3, 0x4] - ldr r2, _08005090 - ands r1, r2 - mov r6, r8 - movs r4, 0x14 - ldrsh r0, [r6, r4] - adds r1, r0 - ands r1, r2 -_08004FC0: - ldrh r2, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r4, [r3, 0x2] - ldr r5, _08005094 - adds r2, r5, 0 - ands r2, r4 - ldr r6, _08005098 - adds r1, r2, r6 - mov r2, r8 - movs r6, 0 - ldrsh r0, [r2, r6] - adds r2, r1, r0 - movs r0, 0x40 - negs r0, r0 - mov r9, r0 - cmp r2, r9 - blt _08005082 - cmp r2, 0xEF - bgt _08005082 - ands r2, r5 - movs r0, 0xFE - lsls r0, 8 - ands r0, r4 - orrs r0, r2 - strh r0, [r3, 0x2] - ldrh r0, [r3, 0x6] - lsls r4, r0, 16 - ldr r1, _0800509C - adds r5, r1, 0 - lsrs r2, r4, 20 - ldr r6, _080050A0 - adds r1, r2, r6 - mov r2, r8 - movs r6, 0x2 - ldrsh r0, [r2, r6] - adds r2, r1, r0 - cmp r2, r9 - blt _08005082 - cmp r2, 0x9F - bgt _08005082 - movs r0, 0xFF - ands r2, r0 - ldrh r1, [r3] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - strh r0, [r3] - lsrs r0, r4, 17 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08005044 - mov r0, r8 - ldrb r1, [r0, 0x1E] - movs r0, 0xF - ands r1, r0 - lsls r1, 12 - ldrh r0, [r3, 0x4] - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] -_08005044: - mov r0, sp - ldrb r0, [r0, 0x2] - cmp r0, 0 - beq _08005068 - ldr r1, _080050A4 - mov r0, sp - ldrb r0, [r0, 0x2] - lsls r0, 1 - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0xF - ands r1, r0 - lsls r1, 12 - ldrh r0, [r3, 0x4] - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] -_08005068: - ldr r0, _080050A8 - mov r4, r12 - ldr r3, [r4] - lsls r2, r3, 3 - adds r2, r0 - ldr r1, _080050AC - lsls r0, r7, 3 - adds r0, r1 - ldr r1, [r0] - str r1, [r2] - str r2, [r0] - adds r3, 0x1 - str r3, [r4] -_08005082: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08005090: .4byte 0x000003ff -_08005094: .4byte 0x000001ff -_08005098: .4byte 0xffffff00 -_0800509C: .4byte 0x00000fff -_080050A0: .4byte 0xfffffe00 -_080050A4: .4byte gUnknown_2025682 -_080050A8: .4byte gUnknown_2025EA8 -_080050AC: .4byte gUnknown_20256A0 - thumb_func_end sub_8004EA8 - - thumb_func_start AddSprite -AddSprite: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r7, r1, 0 - mov r8, r2 - adds r4, r3, 0 - ldr r0, _080050F4 - ldr r0, [r0] - cmp r0, 0x7F - bgt _08005168 - lsls r1, r0, 3 - ldr r0, _080050F8 - adds r5, r1, r0 - cmp r7, 0 - bge _080050D2 - movs r7, 0 -_080050D2: - cmp r7, 0xFF - ble _080050D8 - movs r7, 0xFF -_080050D8: - cmp r4, 0 - bne _080050FC - ldrh r0, [r6] - strh r0, [r5] - ldrh r0, [r6, 0x2] - strh r0, [r5, 0x2] - adds r1, r6, 0x4 - adds r2, r5, 0x4 - ldrh r0, [r1] - strh r0, [r2] - ldrh r0, [r1, 0x2] - strh r0, [r2, 0x2] - b _08005128 - .align 2, 0 -_080050F4: .4byte gSpriteCount -_080050F8: .4byte gUnknown_20262A8 -_080050FC: - ldrh r1, [r6] - ldrh r0, [r4] - ands r0, r1 - ldrh r1, [r4, 0x6] - orrs r0, r1 - strh r0, [r5] - ldrh r1, [r6, 0x2] - ldrh r0, [r4, 0x2] - ands r0, r1 - ldrh r1, [r4, 0x8] - orrs r0, r1 - strh r0, [r5, 0x2] - adds r2, r6, 0x4 - adds r3, r5, 0x4 - ldrh r1, [r2] - ldrh r0, [r4, 0x4] - ands r0, r1 - ldrh r1, [r4, 0xA] - orrs r0, r1 - strh r0, [r3] - ldrh r0, [r2, 0x2] - strh r0, [r3, 0x2] -_08005128: - ldrh r4, [r5, 0x6] - lsrs r4, 4 - adds r0, r4, 0 - movs r1, 0 - bl nullsub_3 - movs r0, 0xFF - ands r4, r0 - ldrh r1, [r5] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - orrs r0, r4 - strh r0, [r5] - mov r0, r8 - cmp r0, 0 - beq _0800514E - bl sub_80052BC -_0800514E: - ldr r0, _08005174 - ldr r4, _08005178 - ldr r3, [r4] - lsls r2, r3, 3 - adds r2, r0 - ldr r1, _0800517C - lsls r0, r7, 3 - adds r0, r1 - ldr r1, [r0] - str r1, [r2] - str r2, [r0] - adds r3, 0x1 - str r3, [r4] -_08005168: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08005174: .4byte gUnknown_2025EA8 -_08005178: .4byte gSpriteCount -_0800517C: .4byte gUnknown_20256A0 - thumb_func_end AddSprite - - thumb_func_start sub_8005180 -sub_8005180: - push {lr} - ldr r2, _080051A8 - adds r1, r2, 0 - cmp r2, 0 - beq _0800519E -_0800518A: - ldr r0, [r1, 0x4] - cmp r0, 0 - beq _08005198 - cmp r2, 0 - beq _08005196 - str r1, [r2] -_08005196: - adds r2, r1, 0 -_08005198: - ldr r1, [r1] - cmp r1, 0 - bne _0800518A -_0800519E: - movs r0, 0 - str r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_080051A8: .4byte gUnknown_20256A0 - thumb_func_end sub_8005180 - thumb_func_start CopySpritesToOam CopySpritesToOam: push {r4-r6,lr} diff --git a/include/rescue_password_menu.h b/include/rescue_password_menu.h index e9c6d8277..e4ce551dd 100644 --- a/include/rescue_password_menu.h +++ b/include/rescue_password_menu.h @@ -2,14 +2,8 @@ #define GUARD_RESCUE_PASSWORD_MENU_H #include "menu.h" - -struct unkSprite -{ - u16 unk0; - u16 unk2; - u16 unk4; - u16 unk6; -}; +#include "sprite.h" +#include "text.h" // Similar to unkStruct_203B360 struct RescuePasswordMenu diff --git a/include/sprite.h b/include/sprite.h index 0114092e8..125b24e9b 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -1,17 +1,32 @@ #ifndef GUARD_SPRITE_H #define GUARD_SPRITE_H +// size: 0x8 +struct unkSprite +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +}; + // size: 0x8 struct UnkSpriteLink { struct UnkSpriteLink *unk0; struct UnkSpriteLink *unk4; }; +// size: 0x8 +struct UnkSpriteLink2 +{ + struct unkSprite *unk0; + struct unkSprite *unk4; +}; // size: 0x808 struct SpriteList { - struct UnkSpriteLink sprites[16][16]; + struct UnkSpriteLink sprites[256]; u32 unk800; u32 unk804; }; @@ -32,6 +47,7 @@ void ResetSprites(bool8); void sub_8004E8C(struct unkStruct_2039DB0 *); // sprite.s +extern void AddSprite(struct unkSprite *, s32, u32 *, struct unkStruct_2039DB0 *); extern void BlinkSavingIcon(void); extern void SetSavingIconCoords(u32); diff --git a/src/other_menus.c b/src/other_menus.c index 74b84f95c..00a84febd 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -13,15 +13,6 @@ #include "code_8094F88.h" #include "sprite.h" -struct unkSprite -{ - u16 unk0; - u16 unk2; - u16 unk4; - u16 unk6; -}; - - struct unkStruct_203B35C { // size: 0x504 @@ -471,7 +462,6 @@ s32 sub_8035D3C(void); extern s32 sub_8035D74(void); extern void xxx_call_start_bg_music(void); extern void xxx_draw_string_80144C4(void); -extern void AddSprite(struct unkSprite *, u32, u32, u32); void sub_8036FDC(s32 param_1) { @@ -839,7 +829,7 @@ void sub_8037748(void) gUnknown_203B35C->unkC.unk6 = (gUnknown_203B35C->unkC.unk6 & 0xf) | temp2; if ((gUnknown_203B35C->unk14 & 8) != 0) { - AddSprite(&gUnknown_203B35C->unkC,0x100,0,0x0); + AddSprite(&gUnknown_203B35C->unkC, 0x100, NULL, NULL); } xxx_draw_string_80144C4(); gUnknown_203B35C->unk14++; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 963ae5deb..67f1e4c53 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -5,6 +5,7 @@ #include "random.h" #include "constants/iq_skill.h" #include "constants/tactic.h" +#include "sprite.h" extern u8 *gIQSkillNames[]; extern u32 gIQSkillDescriptions[]; @@ -29,15 +30,7 @@ struct unkStruct_808E9EC }; extern u32 gUnknown_81076C4[]; -struct unkStruct_202F3E8 -{ - u16 unk0; - u16 unk2; - u16 unk4; - u16 unk6; -}; - -extern struct unkStruct_202F3E8 gUnknown_202F3E8[]; +extern struct unkSprite gUnknown_202F3E8[3]; // Shadow sprites of some kind extern s16 gUnknown_810AC60; // 0xC extern s16 gUnknown_810AC62; // 0xC extern s16 gUnknown_810AC68; // 0x8 @@ -47,8 +40,6 @@ extern s16 gUnknown_810AC66; // 0x8 // 2, 4, 6, 7, 8, 9, 0xA, 0xD, 0xF, 0x11 extern s32 gUnknown_810AC90[10]; -extern void AddSprite(u16 *, u32, u32, u32); - extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924*, struct unkPokeSubStruct_C*); extern void SavePokemonMoves(struct unkStruct_8094924*, struct Move*); @@ -71,7 +62,7 @@ bool8 sub_808E668(s16 a1, s16* a2, s16* a3) if (((shifted - 0x320000) >> 16) > 1) { u8 shadowSize = GetShadowSize(a1); u32 unk2, unk6; - struct unkStruct_202F3E8* arg0; + struct unkSprite* arg0; unk2 = a2[0] + a3[8]; unk6 = a2[1] + a3[9]; @@ -84,7 +75,7 @@ bool8 sub_808E668(s16 a1, s16* a2, s16* a3) unk6 &= 0xfff; unk6 <<= 4; arg0->unk6 = (arg0->unk6 & 0xf) | unk6; - AddSprite((u16*)arg0, 0, 0, 0); + AddSprite(arg0, 0, NULL, NULL); } return 1; } diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 5e9b2749a..2bde7231c 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -250,7 +250,6 @@ extern void sub_8031E10(void); extern u32 sub_80154F0(void); extern u32 sub_8031DCC(void); extern void sub_8031E00(void); -extern void AddSprite(struct unkSprite *, u32, u32, u32); extern void xxx_draw_string_80144C4(void); void DisplayRescuePasswordError(u32 error); @@ -747,7 +746,7 @@ void sub_80391F8(void) iVar2->unk6 = temp | temp2; if ((gRescuePasswordMenu->unk210 & 8) != 0) { - AddSprite(iVar2,0x100,0,0); + AddSprite(iVar2, 0x100, NULL, NULL); } xxx_draw_string_80144C4(); gRescuePasswordMenu->unk210 += 1; diff --git a/src/save_menu.c b/src/save_menu.c index a7ffb072b..fe67564f0 100644 --- a/src/save_menu.c +++ b/src/save_menu.c @@ -7,14 +7,6 @@ #include "sprite.h" #include "code_80130A8.h" -struct unkSprite -{ - u16 unk0; - u16 unk2; - u16 unk4; - u16 unk6; -}; - struct unkStruct_203B360 { // size: 0x1b4 @@ -138,7 +130,6 @@ extern void sub_8038830(); extern void sub_80388C4(void); extern void sub_8014114(); extern void sub_80140F8(void); -extern void AddSprite(struct unkSprite *, u32, u32, u32); void CreateSaveMenu(s32 currMenu) { @@ -338,7 +329,7 @@ void sub_8038830(void) void sub_80388C4(void) { if ((gUnknown_203B364->unk1B0 & 8) != 0) { - AddSprite(&gUnknown_203B364->unk1A8, 0x100, 0, 0); + AddSprite(&gUnknown_203B364->unk1A8, 0x100, NULL, NULL); } gUnknown_203B364->unk1B0++; } diff --git a/src/sprite.c b/src/sprite.c index ea6075e8b..3f3f8939a 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -2,8 +2,8 @@ #include "sprite.h" extern struct SpriteList gUnknown_20256A0; -extern struct UnkSpriteLink gUnknown_2025EA8[128]; -extern struct UnkSpriteLink gUnknown_20262A8[128]; +extern struct UnkSpriteLink2 gUnknown_2025EA8[128]; +extern struct unkSprite gUnknown_20262A8[128]; extern u32 gSpriteCount; /* 20266A8 */ extern u32 gUnknown_20266B0; extern u32 *gCharMemCursor; /* 2026E30 */ @@ -21,16 +21,19 @@ void ResetSprites(bool8 a0) struct UnkSpriteLink *a; struct UnkSpriteLink *b; struct UnkSpriteLink *c; + struct UnkSpriteLink2 *bro; + struct unkSprite *d; + struct unkSprite *deez; gSpriteCount = 0; gCharMemCursor = (u32*)0x6010000; gUnknown_203B074 = &gUnknown_20266B0; - a = &gUnknown_20256A0.sprites[0][0]; + a = &gUnknown_20256A0.sprites[0]; b = a + 1; // 16 loops, very smart - for (i = 0; i < 0x100; i += 0x10) { + for (i = 0; i < 256; i += 16) { c = NULL; a->unk0 = b; a->unk4 = c; @@ -99,14 +102,14 @@ void ResetSprites(bool8 a0) } if (a0) { - c = NULL; - b = &gUnknown_20262A8[0]; - a = &gUnknown_2025EA8[0]; + deez = NULL; + d = &gUnknown_20262A8[0]; + bro = &gUnknown_2025EA8[0]; for (i = 0; i < 128; i++) { - a->unk0 = c; - a->unk4 = b; - b++; - a++; + bro->unk0 = deez; + bro->unk4 = d; + d++; + bro++; } } @@ -122,4 +125,450 @@ void sub_8004E8C(struct unkStruct_2039DB0 *a0) a0->unk6 = 0; a0->unk8 = 0; a0->unkA = 0; +} + +// Need more structs decomped first https://decomp.me/scratch/VYqKb +NAKED +void sub_8004EA8(s32 a0, s16 *a1, u32 *a2, u16 *a3) +{ + asm_unified( + "push {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tsub sp, 0xC\n" + "\tadds r5, r0, 0\n" + "\tmov r8, r1\n" + "\tadds r0, r2, 0\n" + "\tadds r6, r3, 0\n" + "\tcmp r0, 0\n" + "\tbeq _08004EC2\n" + "\tbl sub_80052BC\n" +"_08004EC2:\n" + "\tldr r0, _08004F40\n" + "\tldr r7, [r0]\n" + "\tmov r12, r0\n" + "\tcmp r7, 0x7F\n" + "\tble _08004ECE\n" + "\tb _08005082\n" +"_08004ECE:\n" + "\tmov r2, sp\n" + "\tldrh r0, [r5]\n" + "\tstrh r0, [r2]\n" + "\tldrh r0, [r5, 0x2]\n" + "\tstrh r0, [r2, 0x2]\n" + "\tldrh r4, [r5, 0x4]\n" + "\tldr r0, _08004F44\n" + "\tands r0, r4\n" + "\tstrh r0, [r2, 0x4]\n" + "\tldrh r3, [r5, 0x6]\n" + "\tldr r0, _08004F48\n" + "\tands r0, r3\n" + "\tstrh r0, [r2, 0x6]\n" + "\tldrh r0, [r5, 0x8]\n" + "\tstrh r0, [r2, 0x8]\n" + "\tmovs r1, 0xE0\n" + "\tlsls r1, 4\n" + "\tands r1, r3\n" + "\tlsrs r1, 9\n" + "\tldr r0, _08004F4C\n" + "\tands r0, r4\n" + "\tlsls r0, 4\n" + "\torrs r1, r0\n" + "\tstrh r1, [r2, 0xA]\n" + "\tlsls r1, r7, 3\n" + "\tldr r0, _08004F50\n" + "\tadds r3, r1, r0\n" + "\tmov r0, r8\n" + "\tmovs r2, 0x16\n" + "\tldrsh r1, [r0, r2]\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x3]\n" + "\tlsls r0, 24\n" + "\tasrs r0, 24\n" + "\tadds r7, r1, r0\n" + "\tcmp r7, 0\n" + "\tbge _08004F1A\n" + "\tmovs r7, 0\n" +"_08004F1A:\n" + "\tcmp r7, 0xFF\n" + "\tble _08004F20\n" + "\tmovs r7, 0xFF\n" +"_08004F20:\n" + "\tcmp r6, 0\n" + "\tbne _08004F54\n" + "\tadd r2, sp, 0x4\n" + "\tldrh r0, [r2]\n" + "\tstrh r0, [r3]\n" + "\tadds r2, 0x2\n" + "\tldrh r0, [r2]\n" + "\tstrh r0, [r3, 0x2]\n" + "\tadds r2, 0x2\n" + "\tadds r1, r3, 0x4\n" + "\tldrh r0, [r2]\n" + "\tstrh r0, [r1]\n" + "\tadds r2, 0x2\n" + "\tldrh r0, [r2]\n" + "\tstrh r0, [r1, 0x2]\n" + "\tb _08004F86\n" + "\t.align 2, 0\n" +"_08004F40: .4byte gSpriteCount\n" +"_08004F44: .4byte 0x0000fcff\n" +"_08004F48: .4byte 0x0000f1ff\n" +"_08004F4C: .4byte 0x000003ff\n" +"_08004F50: .4byte gUnknown_20262A8\n" +"_08004F54:\n" + "\tadd r4, sp, 0x4\n" + "\tldrh r1, [r4]\n" + "\tldrh r0, [r6]\n" + "\tands r0, r1\n" + "\tldrh r1, [r6, 0x6]\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3]\n" + "\tadds r4, 0x2\n" + "\tldrh r1, [r4]\n" + "\tldrh r0, [r6, 0x2]\n" + "\tands r0, r1\n" + "\tldrh r1, [r6, 0x8]\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3, 0x2]\n" + "\tadds r4, 0x2\n" + "\tadds r2, r3, 0x4\n" + "\tldrh r1, [r4]\n" + "\tldrh r0, [r6, 0x4]\n" + "\tands r0, r1\n" + "\tldrh r1, [r6, 0xA]\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2]\n" + "\tadds r4, 0x2\n" + "\tldrh r0, [r4]\n" + "\tstrh r0, [r2, 0x2]\n" +"_08004F86:\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x2]\n" + "\tcmp r0, 0\n" + "\tbeq _08004FB0\n" + "\tldr r1, _08004FA8\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x2]\n" + "\tlsls r0, 1\n" + "\tadds r1, r0, r1\n" + "\tmovs r4, 0\n" + "\tldrsh r0, [r1, r4]\n" + "\tcmp r0, 0\n" + "\tbeq _08004FB0\n" + "\tadds r1, r0, 0\n" + "\tldr r0, _08004FAC\n" + "\tands r1, r0\n" + "\tb _08004FC0\n" + "\t.align 2, 0\n" +"_08004FA8: .4byte gUnknown_2025672\n" +"_08004FAC: .4byte 0x000003ff\n" +"_08004FB0:\n" + "\tldrh r1, [r3, 0x4]\n" + "\tldr r2, _08005090\n" + "\tands r1, r2\n" + "\tmov r6, r8\n" + "\tmovs r4, 0x14\n" + "\tldrsh r0, [r6, r4]\n" + "\tadds r1, r0\n" + "\tands r1, r2\n" +"_08004FC0:\n" + "\tldrh r2, [r3, 0x4]\n" + "\tmovs r0, 0xFC\n" + "\tlsls r0, 8\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3, 0x4]\n" + "\tldrh r4, [r3, 0x2]\n" + "\tldr r5, _08005094\n" + "\tadds r2, r5, 0\n" + "\tands r2, r4\n" + "\tldr r6, _08005098\n" + "\tadds r1, r2, r6\n" + "\tmov r2, r8\n" + "\tmovs r6, 0\n" + "\tldrsh r0, [r2, r6]\n" + "\tadds r2, r1, r0\n" + "\tmovs r0, 0x40\n" + "\tnegs r0, r0\n" + "\tmov r9, r0\n" + "\tcmp r2, r9\n" + "\tblt _08005082\n" + "\tcmp r2, 0xEF\n" + "\tbgt _08005082\n" + "\tands r2, r5\n" + "\tmovs r0, 0xFE\n" + "\tlsls r0, 8\n" + "\tands r0, r4\n" + "\torrs r0, r2\n" + "\tstrh r0, [r3, 0x2]\n" + "\tldrh r0, [r3, 0x6]\n" + "\tlsls r4, r0, 16\n" + "\tldr r1, _0800509C\n" + "\tadds r5, r1, 0\n" + "\tlsrs r2, r4, 20\n" + "\tldr r6, _080050A0\n" + "\tadds r1, r2, r6\n" + "\tmov r2, r8\n" + "\tmovs r6, 0x2\n" + "\tldrsh r0, [r2, r6]\n" + "\tadds r2, r1, r0\n" + "\tcmp r2, r9\n" + "\tblt _08005082\n" + "\tcmp r2, 0x9F\n" + "\tbgt _08005082\n" + "\tmovs r0, 0xFF\n" + "\tands r2, r0\n" + "\tldrh r1, [r3]\n" + "\tmovs r0, 0xFF\n" + "\tlsls r0, 8\n" + "\tands r0, r1\n" + "\torrs r0, r2\n" + "\tstrh r0, [r3]\n" + "\tlsrs r0, r4, 17\n" + "\tmovs r1, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _08005044\n" + "\tmov r0, r8\n" + "\tldrb r1, [r0, 0x1E]\n" + "\tmovs r0, 0xF\n" + "\tands r1, r0\n" + "\tlsls r1, 12\n" + "\tldrh r0, [r3, 0x4]\n" + "\tands r0, r5\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3, 0x4]\n" +"_08005044:\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x2]\n" + "\tcmp r0, 0\n" + "\tbeq _08005068\n" + "\tldr r1, _080050A4\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r0, r2]\n" + "\tmovs r0, 0xF\n" + "\tands r1, r0\n" + "\tlsls r1, 12\n" + "\tldrh r0, [r3, 0x4]\n" + "\tands r0, r5\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3, 0x4]\n" +"_08005068:\n" + "\tldr r0, _080050A8\n" + "\tmov r4, r12\n" + "\tldr r3, [r4]\n" + "\tlsls r2, r3, 3\n" + "\tadds r2, r0\n" + "\tldr r1, _080050AC\n" + "\tlsls r0, r7, 3\n" + "\tadds r0, r1\n" + "\tldr r1, [r0]\n" + "\tstr r1, [r2]\n" + "\tstr r2, [r0]\n" + "\tadds r3, 0x1\n" + "\tstr r3, [r4]\n" +"_08005082:\n" + "\tadd sp, 0xC\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08005090: .4byte 0x000003ff\n" +"_08005094: .4byte 0x000001ff\n" +"_08005098: .4byte 0xffffff00\n" +"_0800509C: .4byte 0x00000fff\n" +"_080050A0: .4byte 0xfffffe00\n" +"_080050A4: .4byte gUnknown_2025682\n" +"_080050A8: .4byte gUnknown_2025EA8\n" +"_080050AC: .4byte gUnknown_20256A0"); +} + +#ifdef NONMATCHING // https://decomp.me/scratch/YCfKG +// a2 and a3 are always called with NULL lol +void AddSprite(struct unkSprite *a0, s32 a1, u32 *a2, struct unkStruct_2039DB0 *a3) +{ + u16 uVar1; + struct unkSprite *spr; + struct UnkSpriteLink *a; + struct UnkSpriteLink *b; + + if (gSpriteCount >= 128) + return; + + spr = &gUnknown_20262A8[gSpriteCount]; + + if (a1 < 0) + a1 = 0; + if (a1 > 255) + a1 = 255; + + if (a3 == NULL) { + spr->unk0 = a0->unk0; + spr->unk2 = a0->unk2; + spr->unk4 = a0->unk4; + spr->unk6 = a0->unk6; + } + else { + spr->unk0 = (a3->unk0 & a0->unk0) | a3->unk6; + spr->unk2 = (a3->unk2 & a0->unk2) | a3->unk8; + spr->unk4 = (a3->unk4 & a0->unk4) | a3->unkA; + spr->unk6 = a0->unk6; + } + + uVar1 = spr->unk6 >> 4; + nullsub_3(uVar1, 0); + spr->unk0 = (uVar1 & 0xFF) | (spr->unk0 & 0xFF00); + + if (a2 != NULL) + sub_80052BC(a2); + + a = &gUnknown_2025EA8[0]; + a += gSpriteCount; + b = &gUnknown_20256A0.sprites[0]; + b += a1; + a->unk0 = b->unk0; + b->unk0 = a; + + gSpriteCount++; +} +#else +NAKED +void AddSprite(struct unkSprite *a0, s32 a1, u32 *a2, struct unkStruct_2039DB0 *a3) +{ + asm_unified( + "push {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tadds r6, r0, 0\n" + "\tadds r7, r1, 0\n" + "\tmov r8, r2\n" + "\tadds r4, r3, 0\n" + "\tldr r0, _080050F4\n" + "\tldr r0, [r0]\n" + "\tcmp r0, 0x7F\n" + "\tbgt _08005168\n" + "\tlsls r1, r0, 3\n" + "\tldr r0, _080050F8\n" + "\tadds r5, r1, r0\n" + "\tcmp r7, 0\n" + "\tbge _080050D2\n" + "\tmovs r7, 0\n" +"_080050D2:\n" + "\tcmp r7, 0xFF\n" + "\tble _080050D8\n" + "\tmovs r7, 0xFF\n" +"_080050D8:\n" + "\tcmp r4, 0\n" + "\tbne _080050FC\n" + "\tldrh r0, [r6]\n" + "\tstrh r0, [r5]\n" + "\tldrh r0, [r6, 0x2]\n" + "\tstrh r0, [r5, 0x2]\n" + "\tadds r1, r6, 0x4\n" + "\tadds r2, r5, 0x4\n" + "\tldrh r0, [r1]\n" + "\tstrh r0, [r2]\n" + "\tldrh r0, [r1, 0x2]\n" + "\tstrh r0, [r2, 0x2]\n" + "\tb _08005128\n" + "\t.align 2, 0\n" +"_080050F4: .4byte gSpriteCount\n" +"_080050F8: .4byte gUnknown_20262A8\n" +"_080050FC:\n" + "\tldrh r1, [r6]\n" + "\tldrh r0, [r4]\n" + "\tands r0, r1\n" + "\tldrh r1, [r4, 0x6]\n" + "\torrs r0, r1\n" + "\tstrh r0, [r5]\n" + "\tldrh r1, [r6, 0x2]\n" + "\tldrh r0, [r4, 0x2]\n" + "\tands r0, r1\n" + "\tldrh r1, [r4, 0x8]\n" + "\torrs r0, r1\n" + "\tstrh r0, [r5, 0x2]\n" + "\tadds r2, r6, 0x4\n" + "\tadds r3, r5, 0x4\n" + "\tldrh r1, [r2]\n" + "\tldrh r0, [r4, 0x4]\n" + "\tands r0, r1\n" + "\tldrh r1, [r4, 0xA]\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3]\n" + "\tldrh r0, [r2, 0x2]\n" + "\tstrh r0, [r3, 0x2]\n" +"_08005128:\n" + "\tldrh r4, [r5, 0x6]\n" + "\tlsrs r4, 4\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tbl nullsub_3\n" + "\tmovs r0, 0xFF\n" + "\tands r4, r0\n" + "\tldrh r1, [r5]\n" + "\tmovs r0, 0xFF\n" + "\tlsls r0, 8\n" + "\tands r0, r1\n" + "\torrs r0, r4\n" + "\tstrh r0, [r5]\n" + "\tmov r0, r8\n" + "\tcmp r0, 0\n" + "\tbeq _0800514E\n" + "\tbl sub_80052BC\n" +"_0800514E:\n" + "\tldr r0, _08005174\n" + "\tldr r4, _08005178\n" + "\tldr r3, [r4]\n" + "\tlsls r2, r3, 3\n" + "\tadds r2, r0\n" + "\tldr r1, _0800517C\n" + "\tlsls r0, r7, 3\n" + "\tadds r0, r1\n" + "\tldr r1, [r0]\n" + "\tstr r1, [r2]\n" + "\tstr r2, [r0]\n" + "\tadds r3, 0x1\n" + "\tstr r3, [r4]\n" +"_08005168:\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08005174: .4byte gUnknown_2025EA8\n" +"_08005178: .4byte gSpriteCount\n" +"_0800517C: .4byte gUnknown_20256A0"); +} +#endif + +void sub_8005180(void) +{ + struct UnkSpriteLink *r1; + struct UnkSpriteLink *r2; + + r2 = &gUnknown_20256A0.sprites[0]; + r1 = r2; + + if (r2 != NULL) { + do { + if (r1->unk4 != NULL) { + if (r2 != NULL) + r2->unk0 = r1; + r2 = r1; + } + r1 = r1->unk0; + } while (r1 != NULL); + } + + r2->unk0 = NULL; } \ No newline at end of file diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index aec1f797e..24a1e75c9 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -5,14 +5,7 @@ #include "menu.h" #include "text1.h" #include "menu_input.h" - -struct unkSprite -{ - u16 unk0; - u16 unk2; - u16 unk4; - u16 unk6; -}; +#include "sprite.h" // Similar to RescuePasswordMenu struct unkStruct_203B360 @@ -61,8 +54,6 @@ ALIGNED(4) const u8 StorageEmpty_80E6EE4[] = _("{CENTER_ALIGN}The storage space ALIGNED(4) const u8 Caution_80E6F04[] = _("{CENTER_ALIGN}{COLOR_1 RED}Caution!{END_COLOR_TEXT_1} "); static const u8 fill0[] = "pksdir0"; - -extern void AddSprite(struct unkSprite *, u32, u32, u32); extern void sub_8038440(); extern void sub_80384D0(); @@ -188,7 +179,7 @@ void sub_8038440(void) void sub_80384D0(void) { if ((gUnknown_203B360->unk1B0 & 8) != 0) { - AddSprite(&gUnknown_203B360->unk1A8, 0x100, 0, 0); + AddSprite(&gUnknown_203B360->unk1A8, 0x100, NULL, NULL); } gUnknown_203B360->unk1B0++; } diff --git a/sym_ewram.txt b/sym_ewram.txt index 26864e82e..21f40d03a 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -900,10 +900,10 @@ gUnknown_2039DA4: /* 2039DA4 */ gUnknown_2039DA8: /* 2039DA8 */ .space 0x8 -gUnknown_2039DB0: /* 2039DB0 */ +gUnknown_2039DB0: /* 2039DB0 [struct unkStruct_2039DB0] */ .space 0x10 -gUnknown_2039DC0: /* 2039DC0 */ +gUnknown_2039DC0: /* 2039DC0 [struct unkStruct_2039DB0] */ .space 0xC gUnknown_2039DCC: /* 2039DCC */