diff --git a/asm/link_rfu.s b/asm/link_rfu.s index 35628de34..7e67be316 100644 --- a/asm/link_rfu.s +++ b/asm/link_rfu.s @@ -7,122 +7,6 @@ @ file boundary? - thumb_func_start sub_800E084 -sub_800E084: @ 800E084 - push {r4,lr} - ldr r4, =gSprites - ldr r3, =gWirelessStatusIndicatorSpriteId - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, r0, r4 - movs r0, 0x3C - ldrsh r1, [r2, r0] - ldr r0, =0x00001234 - cmp r1, r0 - bne _0800E0CA - movs r0, 0 - strh r0, [r2, 0x3C] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r3, =gMain - movs r0, 0x84 - lsls r0, 3 - adds r3, r0 - ldr r0, =gDummyOamData - ldr r1, [r0] - ldr r2, [r0, 0x4] - str r1, [r3] - str r2, [r3, 0x4] - ldr r1, =0x070003e8 - movs r2, 0x4 - bl CpuSet -_0800E0CA: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_800E084 - - thumb_func_start sub_800E0E8 -sub_800E0E8: @ 800E0E8 - push {r4,lr} - ldr r4, =sWirelessStatusIndicatorSpriteSheet - ldrh r0, [r4, 0x6] - bl GetSpriteTileStartByTag - lsls r0, 16 - ldr r1, =0xffff0000 - cmp r0, r1 - bne _0800E100 - adds r0, r4, 0 - bl LoadCompressedObjectPic -_0800E100: - ldr r0, =sWirelessStatusIndicatorSpritePalette - bl LoadSpritePalette - ldr r1, =gWirelessStatusIndicatorSpriteId - movs r0, 0xFF - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_800E0E8 - - thumb_func_start sub_800E124 -sub_800E124: @ 800E124 - push {r4,lr} - ldr r1, =gUnknown_03007890 - ldr r0, [r1] - ldrb r2, [r0, 0x2] - movs r3, 0 - movs r4, 0x1 -_0800E130: - adds r0, r2, 0 - ands r0, r4 - cmp r0, 0 - beq _0800E148 - ldr r0, [r1] - adds r0, 0xA - adds r0, r3 - ldrb r0, [r0] - b _0800E156 - .pool -_0800E148: - lsrs r2, 1 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _0800E130 - movs r0, 0 -_0800E156: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_800E124 - - thumb_func_start sub_800E15C -sub_800E15C: @ 800E15C - push {lr} - adds r2, r0, 0 - movs r3, 0x32 - ldrsh r0, [r2, r3] - cmp r0, r1 - beq _0800E170 - movs r0, 0 - strh r1, [r2, 0x32] - strh r0, [r2, 0x34] - strh r0, [r2, 0x36] -_0800E170: - pop {r0} - bx r0 - thumb_func_end sub_800E15C - thumb_func_start sub_800E174 sub_800E174: @ 800E174 push {r4-r7,lr} diff --git a/src/link_rfu.c b/src/link_rfu.c index 68d42ec4a..eaf919bae 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -2,6 +2,7 @@ // Includes #include "global.h" #include "rng.h" +#include "decompress.h" #include "text.h" #include "event_data.h" #include "link.h" @@ -163,7 +164,7 @@ static const union AnimCmd *const sWirelessStatusIndicatorAnims[] = { sWirelessStatusIndicatorAnim3, sWirelessStatusIndicatorAnim4 }; -const struct SpriteSheet sWirelessStatusIndicatorSpriteSheet = { +const struct CompressedSpriteSheet sWirelessStatusIndicatorSpriteSheet = { gWirelessLinkIconPic, 0x0380, 0xD431 }; const struct SpritePalette sWirelessStatusIndicatorSpritePalette = { @@ -2100,3 +2101,49 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y) gSprites[gWirelessStatusIndicatorSpriteId].invisible = TRUE; } } + +void sub_800E084(void) +{ + if (gSprites[gWirelessStatusIndicatorSpriteId].data7 == 0x1234) + { + gSprites[gWirelessStatusIndicatorSpriteId].data7 = 0; + DestroySprite(&gSprites[gWirelessStatusIndicatorSpriteId]); + gMain.oamBuffer[125] = gDummyOamData; + CpuCopy16(&gDummyOamData, (struct OamData *)OAM + 125, sizeof(struct OamData)); + } +} + +void sub_800E0E8(void) +{ + if (GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag) == 0xFFFF) + { + LoadCompressedObjectPic(&sWirelessStatusIndicatorSpriteSheet); + } + LoadSpritePalette(&sWirelessStatusIndicatorSpritePalette); + gWirelessStatusIndicatorSpriteId = 0xFF; +} + +u8 sub_800E124(void) +{ + u8 i; + u8 flags = gUnknown_03007890->unk_02; + for (i = 0; i < 4; i++) + { + if (flags & 1) + { + return gUnknown_03007890->unk_0a[i]; + } + flags >>= 1; + } + return 0; +} + +void sub_800E15C(struct Sprite *sprite, int val) +{ + if (sprite->data2 != val) + { + sprite->data2 = val; + sprite->data3 = 0; + sprite->data4 = 0; + } +}