diff --git a/asm/sprite.s b/asm/sprite.s index 8da34500f..31ae5c089 100644 --- a/asm/sprite.s +++ b/asm/sprite.s @@ -5,95 +5,6 @@ .text - thumb_func_start SetSavingIconCoords -SetSavingIconCoords: - push {lr} - adds r3, r0, 0 - cmp r3, 0 - bne _0800522C - ldr r1, _08005228 - strh r3, [r1] - movs r0, 0xA0 - strh r0, [r1, 0x2] - b _0800523C - .align 2, 0 -_08005228: .4byte gUnknown_2025694 -_0800522C: - ldr r1, _08005240 - ldrh r0, [r3] - movs r2, 0 - strh r0, [r1] - ldrh r0, [r3, 0x2] - strh r0, [r1, 0x2] - ldr r0, _08005244 - str r2, [r0] -_0800523C: - pop {r0} - bx r0 - .align 2, 0 -_08005240: .4byte gUnknown_2025694 -_08005244: .4byte gUnknown_2025698 - thumb_func_end SetSavingIconCoords - - thumb_func_start BlinkSavingIcon -BlinkSavingIcon: - push {r4,lr} - movs r2, 0xE0 - lsls r2, 19 - ldr r0, _08005280 - ldr r1, [r0] - adds r3, r1, 0 - adds r1, 0x1 - str r1, [r0] - movs r0, 0x10 - ands r3, r0 - cmp r3, 0 - beq _08005288 - movs r0, 0xA0 - strh r0, [r2] - adds r2, 0x2 - movs r1, 0x80 - lsls r1, 7 - adds r0, r1, 0 - strh r0, [r2] - adds r2, 0x2 - ldr r4, _08005284 - adds r0, r4, 0 - strh r0, [r2] - adds r2, 0x2 - movs r0, 0 - strh r0, [r2] - b _080052A8 - .align 2, 0 -_08005280: .4byte gUnknown_2025698 -_08005284: .4byte 0x0000f3fc -_08005288: - ldr r1, _080052B0 - ldrh r0, [r1, 0x2] - strh r0, [r2] - ldr r2, _080052B4 - movs r4, 0x80 - lsls r4, 7 - adds r0, r4, 0 - ldrh r1, [r1] - adds r0, r1 - strh r0, [r2] - adds r2, 0x2 - ldr r1, _080052B8 - adds r0, r1, 0 - strh r0, [r2] - adds r2, 0x2 - strh r3, [r2] -_080052A8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080052B0: .4byte gUnknown_2025694 -_080052B4: .4byte 0x07000002 -_080052B8: .4byte 0x0000f3fc - thumb_func_end BlinkSavingIcon - thumb_func_start sub_80052BC sub_80052BC: push {r4-r6,lr} diff --git a/include/sprite.h b/include/sprite.h index 288d7a9a4..17f97dd8f 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -1,6 +1,8 @@ #ifndef GUARD_SPRITE_H #define GUARD_SPRITE_H +#include "position.h" + // size: 0x8 struct unkSprite { @@ -39,15 +41,15 @@ struct unkStruct_2039DB0 u16 unkA; }; +void BlinkSavingIcon(void); void CopySpritesToOam(void); void InitSprites(void); void ResetSprites(bool8); +void SetSavingIconCoords(struct Position *); void sub_8004E8C(struct unkStruct_2039DB0 *); void sub_8005180(void); // sprite.s extern void AddSprite(struct unkSprite *, s32, u32 *, struct unkStruct_2039DB0 *); -extern void BlinkSavingIcon(void); -extern void SetSavingIconCoords(u32); #endif // GUARD_SPRITE_H \ No newline at end of file diff --git a/src/code_2.c b/src/code_2.c index 15c129cf9..248fc4cda 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -96,7 +96,7 @@ void GameLoop(void) InitializeGameOptions(TRUE); SetWindowTitle(gPMDBuildVersion); sub_800DAAC(); - SetSavingIconCoords(0); + SetSavingIconCoords(NULL); tmp = 0; if (ReadSaveFromPak(&tmp)) sub_800135C(); diff --git a/src/sprite.c b/src/sprite.c index 17aedbf41..d055077b2 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -2,6 +2,8 @@ #include "sprite.h" extern u16 gUnknown_2025670; +extern struct Position gUnknown_2025694; +extern u32 gUnknown_2025698; extern struct SpriteList gUnknown_20256A0; extern struct UnkSpriteLink gUnknown_2025EA8[128]; extern struct unkSprite gUnknown_20262A8[128]; @@ -13,7 +15,7 @@ extern u32 *gUnknown_203B074; void InitSprites(void) { ResetSprites(TRUE); - SetSavingIconCoords(0); + SetSavingIconCoords(NULL); } void ResetSprites(bool8 a0) @@ -26,7 +28,7 @@ void ResetSprites(bool8 a0) struct UnkSpriteLink *e; gSpriteCount = 0; - gCharMemCursor = (u32*)0x6010000; + gCharMemCursor = (u32*)OBJ_VRAM0; gUnknown_203B074 = &gUnknown_20266B0; a = &gUnknown_20256A0.sprites[0]; @@ -577,7 +579,7 @@ void CopySpritesToOam(void) { struct UnkSpriteLink *sLink; struct unkSprite *spr; - u16 *oam; + volatile u16 *oam; s32 count; sLink = &gUnknown_20256A0.sprites[0]; @@ -621,4 +623,56 @@ void CopySpritesToOam(void) } gUnknown_2025670 = count; +} + +void SetSavingIconCoords(struct Position *pos) +{ + if (pos == NULL) { + gUnknown_2025694.x = 0; + gUnknown_2025694.y = DISPLAY_HEIGHT; + } + else { + gUnknown_2025694.x = pos->x; + gUnknown_2025694.y = pos->y; + gUnknown_2025698 = 0; + } +} + +void BlinkSavingIcon(void) +{ + volatile u16 *oam; + u32 uVar1; + + oam = (u16 *)OAM; + uVar1 = gUnknown_2025698++; + + if (uVar1 & 16) { + // Set y to 160 + // Set affineMode/objMode/mosaic/bpp/shape to 0 + *oam++ = DISPLAY_HEIGHT; + // Set x/matrixNum to 0 + // Set size to 1 + *oam++ = 0x4000; + // Set tileNum to 0x3FC + // Set priority to 0 + // Set paletteNum to 15 + *oam++ = 0xF3FC; + // Set affineParam to 0 + *oam = 0; + } + else { + // Set y to gUnknown_2025694.y + // Set affineMode/objMode/mosaic/bpp/shape to 0 + *oam++ = gUnknown_2025694.y; + // Set x to gUnknown_2025694.x + // Set matrixNum to 0 + // Set size to 1 + *oam++ = gUnknown_2025694.x + 0x4000; + // Set tileNum to 0x3FC + // Set priority to 0 + // Set paletteNum to 15 + *oam++ = 0xF3FC; + // Set affineParam to 0 + *oam = 0; + } } \ No newline at end of file