diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-07 20:46:29 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-07 20:46:29 -0500 |
commit | 40e4ef8f77caf47932d3b2c75481be9680eeea17 (patch) | |
tree | f2b0776caaf7649dc3cd772e217c27f854ebfd9e | |
parent | 1346f7287c06d25258b559398d827a41c281a128 (diff) |
through sub_8101BA8
-rw-r--r-- | asm/easy_chat_2.s | 164 | ||||
-rw-r--r-- | data/easy_chat_2.s | 28 | ||||
-rw-r--r-- | include/graphics.h | 4 | ||||
-rw-r--r-- | src/easy_chat_3.c | 114 |
4 files changed, 117 insertions, 193 deletions
diff --git a/asm/easy_chat_2.s b/asm/easy_chat_2.s index 979abfa5e..5c66680e2 100644 --- a/asm/easy_chat_2.s +++ b/asm/easy_chat_2.s @@ -5,170 +5,6 @@ .text - thumb_func_start sub_8101A90 -sub_8101A90: @ 8101A90 - push {r4,r5,lr} - ldr r0, _08101AB8 @ =gUnknown_843F8F0 - bl LoadSpriteSheets - ldr r0, _08101ABC @ =gUnknown_843F910 - bl LoadSpritePalettes - movs r5, 0 - ldr r4, _08101AC0 @ =gUnknown_843F938 -_08101AA2: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x3 - bls _08101AA2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08101AB8: .4byte gUnknown_843F8F0 -_08101ABC: .4byte gUnknown_843F910 -_08101AC0: .4byte gUnknown_843F938 - thumb_func_end sub_8101A90 - - thumb_func_start sub_8101AC4 -sub_8101AC4: @ 8101AC4 - push {lr} - bl GetEasyChatScreenFrameId - lsls r0, 24 - ldr r1, _08101B10 @ =sPhraseFrameDimensions - lsrs r0, 22 - adds r0, r1 - ldrb r1, [r0] - lsls r1, 19 - ldrb r2, [r0, 0x1] - adds r2, 0x1 - lsls r2, 3 - adds r2, 0x1 - ldr r0, _08101B14 @ =gUnknown_843F968 - movs r3, 0xD0 - lsls r3, 12 - adds r1, r3 - asrs r1, 16 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08101B18 @ =gUnknown_203ACEC - ldr r2, [r1] - movs r1, 0xB6 - lsls r1, 2 - adds r2, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08101B1C @ =gSprites - adds r1, r0 - str r1, [r2] - movs r0, 0x1 - strh r0, [r1, 0x30] - pop {r0} - bx r0 - .align 2, 0 -_08101B10: .4byte sPhraseFrameDimensions -_08101B14: .4byte gUnknown_843F968 -_08101B18: .4byte gUnknown_203ACEC -_08101B1C: .4byte gSprites - thumb_func_end sub_8101AC4 - - thumb_func_start sub_8101B20 -sub_8101B20: @ 8101B20 - push {lr} - adds r1, r0, 0 - movs r2, 0x30 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08101B4E - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _08101B4E - movs r0, 0 - strh r0, [r1, 0x2E] - ldrh r0, [r1, 0x24] - adds r0, 0x1 - strh r0, [r1, 0x24] - lsls r0, 16 - cmp r0, 0 - ble _08101B4E - ldr r0, _08101B54 @ =0x0000fffa - strh r0, [r1, 0x24] -_08101B4E: - pop {r0} - bx r0 - .align 2, 0 -_08101B54: .4byte 0x0000fffa - thumb_func_end sub_8101B20 - - thumb_func_start sub_8101B58 -sub_8101B58: @ 8101B58 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08101B84 @ =gUnknown_203ACEC - ldr r2, [r2] - movs r3, 0xB6 - lsls r3, 2 - adds r2, r3 - ldr r3, [r2] - movs r4, 0 - strh r0, [r3, 0x20] - ldr r0, [r2] - strh r1, [r0, 0x22] - ldr r0, [r2] - strh r4, [r0, 0x24] - ldr r0, [r2] - strh r4, [r0, 0x2E] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101B84: .4byte gUnknown_203ACEC - thumb_func_end sub_8101B58 - - thumb_func_start sub_8101B88 -sub_8101B88: @ 8101B88 - ldr r0, _08101BA4 @ =gUnknown_203ACEC - ldr r1, [r0] - movs r0, 0xB6 - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - movs r2, 0 - strh r2, [r0, 0x2E] - ldr r0, [r1] - strh r2, [r0, 0x30] - ldr r0, [r1] - strh r2, [r0, 0x24] - bx lr - .align 2, 0 -_08101BA4: .4byte gUnknown_203ACEC - thumb_func_end sub_8101B88 - - thumb_func_start sub_8101BA8 -sub_8101BA8: @ 8101BA8 - ldr r0, _08101BBC @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xB6 - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - movs r0, 0x1 - strh r0, [r1, 0x30] - bx lr - .align 2, 0 -_08101BBC: .4byte gUnknown_203ACEC - thumb_func_end sub_8101BA8 - thumb_func_start sub_8101BC0 sub_8101BC0: @ 8101BC0 push {r4-r6,lr} diff --git a/data/easy_chat_2.s b/data/easy_chat_2.s index 2eca1d8b0..8298f8cbb 100644 --- a/data/easy_chat_2.s +++ b/data/easy_chat_2.s @@ -7,34 +7,6 @@ .section .rodata .align 2 -gUnknown_843F8F0:: @ 843F8F0 sprite_sheet - obj_tiles gUnknown_843F3F8, 0x0020, 0 - obj_tiles gUnknown_843F418, 0x0100, 2 - obj_tiles gUnknown_843F518, 0x0100, 3 - null_obj_tiles - -gUnknown_843F910:: @ 843F910 sprite_palette - obj_pal gUnknown_843F3B8, 0 - obj_pal gUnknown_843F3D8, 1 - obj_pal gUnknown_8E99F24, 2 - obj_pal gUnknown_843F618, 3 - null_obj_pal - -gUnknown_843F938:: @ 843F938 sprite_sheet - obj_tiles gUnknown_843F638, 0x0800, 5 - obj_tiles gUnknown_8E9BD28, 0x1000, 1 - obj_tiles gUnknown_8E99F44, 0x0800, 6 - obj_tiles gUnknown_8E9A168, 0x1000, 4 - -gUnknown_843F958:: @ 843F958 data8 - .byte 0x00, 0x0c, 0x18, 0x38, 0x44, 0x50, 0x5c, 0x00 - -gUnknown_843F960:: - .4byte 0x00000000, 0x00000c00 - -gUnknown_843F968:: @ 843F968 sprite_template - spr_template 0, 0, gUnknown_843F960, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8101B20 - gUnknown_843F980:: .4byte 0xc0004000, 0x00000400 diff --git a/include/graphics.h b/include/graphics.h index 2b449ea94..19f2ad4a8 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4890,5 +4890,9 @@ extern const u32 gUnknown_8EB0ADC[]; extern const u32 gEasyChatWindow_Gfx[]; extern const u32 gEasyChatWindow_Tilemap[]; extern const u32 gEasyChatMode_Pal[]; +extern const u16 gUnknown_8E99F24[]; +extern const u32 gUnknown_8E9BD28[]; +extern const u32 gUnknown_8E99F44[]; +extern const u32 gUnknown_8E9A168[]; #endif //GUARD_GRAPHICS_H diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 75fdb20a3..3f9b3c65b 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -1,6 +1,7 @@ #include "global.h" #include "gflib.h" #include "data_8479668.h" +#include "decompress.h" #include "easy_chat.h" #include "graphics.h" #include "menu.h" @@ -102,7 +103,8 @@ s32 sub_8101A48(void); void sub_8101A5C(u8 left, u8 top, u8 right, u8 bottom); void sub_8101A90(void); void sub_8101AC4(void); -void sub_8101B58(u8 a0, u8 a1); +void sub_8101B20(struct Sprite * sprite); +void sub_8101B58(u8 x, u8 y); void sub_8101B88(void); void sub_8101BA8(void); void sub_8101BC0(void); @@ -274,6 +276,63 @@ const u8 *const sEasyChatKeyboardText[] = { gUnknown_847A934 }; +const struct SpriteSheet sEasyChatSpriteSheets[] = { + {gUnknown_843F3F8, 0x0020, 0}, + {gUnknown_843F418, 0x0100, 2}, + {gUnknown_843F518, 0x0100, 3}, + {} +}; + +const struct SpritePalette sEasyChatSpritePalettes[] = { + {gUnknown_843F3B8, 0}, + {gUnknown_843F3D8, 1}, + {gUnknown_8E99F24, 2}, + {gUnknown_843F618, 3}, + {} +}; + +const struct CompressedSpriteSheet gUnknown_843F938[] = { + {gUnknown_843F638, 0x0800, 5}, + {gUnknown_8E9BD28, 0x1000, 1}, + {gUnknown_8E99F44, 0x0800, 6}, + {gUnknown_8E9A168, 0x1000, 4} +}; + +const u8 gUnknown_843F958[] = { + 0, + 12, + 24, + 56, + 68, + 80, + 92 +}; + +const struct OamData gUnknown_843F960 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .mosaic = FALSE, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0x000, + .priority = 3, + .paletteNum = 0 +}; + +const struct SpriteTemplate gUnknown_843F968 = { + .tileTag = 0, + .paletteTag = 0, + .oam = &gUnknown_843F960, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8101B20 +}; + bool8 sub_80FFF80(void) { if (!sub_8100BF4()) @@ -1640,3 +1699,56 @@ void sub_8101A5C(u8 left, u8 top, u8 width, u8 height) SetGpuReg(REG_OFFSET_WIN0H, horizontalDimensions); SetGpuReg(REG_OFFSET_WIN0V, verticalDimensions); } + +void sub_8101A90(void) +{ + u32 i; + + LoadSpriteSheets(sEasyChatSpriteSheets); + LoadSpritePalettes(sEasyChatSpritePalettes); + for (i = 0; i < NELEMS(gUnknown_843F938); i++) + LoadCompressedSpriteSheet(&gUnknown_843F938[i]); +} + +void sub_8101AC4(void) +{ + u8 frameId = GetEasyChatScreenFrameId(); + s16 x = sPhraseFrameDimensions[frameId].left * 8 + 13; + s16 y = (sPhraseFrameDimensions[frameId].top + 1) * 8 + 1; + u8 spriteId = CreateSprite(&gUnknown_843F968, x, y, 2); + gUnknown_203ACEC->unk2D8 = &gSprites[spriteId]; + gSprites[spriteId].data[1] = 1; +} + +void sub_8101B20(struct Sprite *sprite) +{ + if (sprite->data[1]) + { + if (++sprite->data[0] > 2) + { + sprite->data[0] = 0; + if (++sprite->pos2.x > 0) + sprite->pos2.x = -6; + } + } +} + +void sub_8101B58(u8 x, u8 y) +{ + gUnknown_203ACEC->unk2D8->pos1.x = x; + gUnknown_203ACEC->unk2D8->pos1.y = y; + gUnknown_203ACEC->unk2D8->pos2.x = 0; + gUnknown_203ACEC->unk2D8->data[0] = 0; +} + +void sub_8101B88(void) +{ + gUnknown_203ACEC->unk2D8->data[0] = 0; + gUnknown_203ACEC->unk2D8->data[1] = 0; + gUnknown_203ACEC->unk2D8->pos2.x = 0; +} + +void sub_8101BA8(void) +{ + gUnknown_203ACEC->unk2D8->data[1] = 1; +} |