Merge remote-tracking branch 'PikalaxALT/text'

This commit is contained in:
nullableVoidPtr
2018-11-20 21:47:18 +08:00
7 changed files with 251 additions and 408 deletions

View File

@@ -5,386 +5,6 @@
.text
thumb_func_start sub_8006218
sub_8006218:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
ldr r1, _080062F4
movs r0, 0
str r0, [r1]
ldr r0, _080062F8
ldr r5, _080062FC
adds r1, r5, 0
bl OpenFileAndGetFileDataPtr
ldr r4, _08006300
str r0, [r4]
ldr r0, _08006304
adds r1, r5, 0
bl OpenFileAndGetFileDataPtr
str r0, [r4, 0x4]
ldr r2, _08006308
ldr r1, [r4]
ldr r1, [r1, 0x4]
str r1, [r2]
ldr r0, [r0, 0x4]
str r0, [r2, 0x4]
ldr r1, _0800630C
movs r0, 0xB
str r0, [r1]
movs r0, 0xC
str r0, [r1, 0x4]
ldr r0, _08006310
movs r4, 0
movs r3, 0
adds r2, r0, 0
adds r2, 0x46
adds r0, 0x4
movs r1, 0x3
_08006264:
strh r3, [r0]
strh r3, [r0, 0x4]
strb r4, [r2]
adds r2, 0x48
adds r0, 0x48
subs r1, 0x1
cmp r1, 0
bge _08006264
ldr r1, _08006314
movs r0, 0
strh r0, [r1]
movs r3, 0
ldr r0, _08006318
mov r9, r0
ldr r1, _0800631C
mov r10, r1
ldr r7, _08006320
ldr r2, _08006324
mov r8, r2
movs r0, 0x80
lsls r0, 4
adds r6, r7, r0
ldr r4, _08006328
movs r5, 0
mov r12, r6
_08006296:
lsls r0, r3, 6
adds r2, r0, r7
mov r1, r8
strh r1, [r2]
adds r1, r0, r6
strh r4, [r1]
adds r3, 0x1
add r0, r12
adds r0, 0x2
adds r2, 0x2
movs r1, 0x1E
_080062AC:
strh r5, [r2]
strh r4, [r0]
adds r0, 0x2
adds r2, 0x2
subs r1, 0x1
cmp r1, 0
bge _080062AC
cmp r3, 0x13
ble _08006296
movs r1, 0
movs r0, 0x1
mov r2, r9
strb r0, [r2]
ldr r0, _0800632C
mov r2, r10
str r0, [r2]
ldr r0, _08006330
str r1, [r0]
ldr r2, _08006334
strb r1, [r2]
movs r0, 0x1
ldr r1, _08006338
str r0, [r1]
movs r0, 0x14
ldr r2, _0800633C
str r0, [r2]
movs r0, 0
bl xxx_update_some_bg_tiles
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080062F4: .4byte gUnknown_20274AC
_080062F8: .4byte gUnknown_80B87B4
_080062FC: .4byte gUnknown_8300500
_08006300: .4byte gKanji
_08006304: .4byte gUnknown_80B87BC
_08006308: .4byte gUnknown_2027490
_0800630C: .4byte gUnknown_202B028
_08006310: .4byte gUnknown_2027370
_08006314: .4byte gUnknown_2027498
_08006318: .4byte gUnknown_202B034
_0800631C: .4byte gUnknown_202B030
_08006320: .4byte gUnknown_202B038
_08006324: .4byte 0x0000f279
_08006328: .4byte 0x0000f27a
_0800632C: .4byte 0x88888888
_08006330: .4byte gUnknown_203B078
_08006334: .4byte gUnknown_20274A5
_08006338: .4byte gUnknown_202B020
_0800633C: .4byte gUnknown_202B024
thumb_func_end sub_8006218
thumb_func_start xxx_update_some_bg_tiles
xxx_update_some_bg_tiles:
push {r4,r5,lr}
adds r1, r0, 0
ldr r0, _08006360
ldr r5, [r0]
ldr r4, _08006364
str r1, [r0]
cmp r1, 0
beq _08006354
cmp r1, 0x2
bne _0800636C
_08006354:
movs r0, 0x2
bl sub_800CDA8
ldr r2, _08006368
b _08006374
.align 2, 0
_08006360: .4byte gUnknown_20274B0
_08006364: .4byte 0x06004f40
_08006368: .4byte gUnknown_80B87C4
_0800636C:
movs r0, 0x1
bl sub_800CDA8
ldr r2, _080063A4
_08006374:
ldr r1, _080063A8
ldr r0, _080063AC
str r0, [r1]
ldm r2!, {r0}
stm r4!, {r0}
ldm r2!, {r0}
stm r4!, {r0}
ldm r2!, {r0}
stm r4!, {r0}
ldm r2!, {r0}
stm r4!, {r0}
ldm r2!, {r0}
stm r4!, {r0}
ldm r2!, {r0}
stm r4!, {r0}
ldm r2!, {r0}
stm r4!, {r0}
ldr r0, [r2]
str r0, [r4]
adds r0, r5, 0
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_080063A4: .4byte gUnknown_80B87E4
_080063A8: .4byte gUnknown_202B030
_080063AC: .4byte 0x88888888
thumb_func_end xxx_update_some_bg_tiles
thumb_func_start sub_80063B0
sub_80063B0:
ldr r0, _080063B8
ldr r0, [r0]
bx lr
.align 2, 0
_080063B8: .4byte gUnknown_20274B0
thumb_func_end sub_80063B0
thumb_func_start sub_80063BC
sub_80063BC:
ldr r1, _080063C8
ldrb r2, [r1]
strb r0, [r1]
adds r0, r2, 0
bx lr
.align 2, 0
_080063C8: .4byte gUnknown_202B034
thumb_func_end sub_80063BC
thumb_func_start sub_80063CC
sub_80063CC:
ldr r1, _080063D4
str r0, [r1]
bx lr
.align 2, 0
_080063D4: .4byte gUnknown_20274AC
thumb_func_end sub_80063CC
thumb_func_start sub_80063D8
sub_80063D8:
push {lr}
adds r1, r0, 0
cmp r1, 0
bne _080063F0
ldr r0, _080063E8
ldr r0, [r0]
ldr r2, _080063EC
b _08006410
.align 2, 0
_080063E8: .4byte gUnknown_20274B0
_080063EC: .4byte 0x88888888
_080063F0:
movs r0, 0xF
ands r0, r1
lsls r2, r0, 4
orrs r2, r0
lsls r1, r0, 8
orrs r2, r1
lsls r1, r0, 12
orrs r2, r1
lsls r1, r0, 16
orrs r2, r1
lsls r1, r0, 20
orrs r2, r1
lsls r1, r0, 24
orrs r2, r1
lsls r0, 28
orrs r2, r0
_08006410:
ldr r0, _08006418
str r2, [r0]
pop {r0}
bx r0
.align 2, 0
_08006418: .4byte gUnknown_202B030
thumb_func_end sub_80063D8
thumb_func_start sub_800641C
sub_800641C:
push {lr}
sub sp, 0x4
lsls r1, 24
lsrs r1, 24
lsls r2, 24
lsrs r2, 24
movs r3, 0
str r3, [sp]
mov r3, sp
bl sub_8006438
add sp, 0x4
pop {r0}
bx r0
thumb_func_end sub_800641C
thumb_func_start sub_8006438
sub_8006438:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x1C
adds r4, r0, 0
mov r8, r3
lsls r1, 24
lsrs r1, 24
mov r10, r1
lsls r2, 24
lsrs r2, 24
movs r0, 0x2
mov r9, r0
cmp r4, 0
bne _0800645C
ldr r4, _080064F0
_0800645C:
cmp r2, 0
beq _08006464
bl sub_8009388
_08006464:
bl sub_800898C
movs r6, 0
adds r5, r4, 0
adds r5, 0xC
ldr r1, _080064F4
str r1, [sp, 0x18]
_08006472:
ldr r0, [sp, 0x18]
adds r1, r4, 0
ldm r1!, {r2,r3,r7}
stm r0!, {r2,r3,r7}
ldm r1!, {r2,r3,r7}
stm r0!, {r2,r3,r7}
movs r1, 0
ldrsh r0, [r5, r1]
cmp r0, 0
beq _080064C4
ldr r1, _080064F8
lsls r0, r6, 2
adds r0, r1
ldr r0, [r0]
str r0, [sp]
str r4, [sp, 0x4]
mov r2, r10
str r2, [sp, 0x8]
mov r3, r9
str r3, [sp, 0xC]
mov r7, r8
str r7, [sp, 0x10]
movs r0, 0
str r0, [sp, 0x14]
ldr r0, _080064FC
movs r1, 0xC0
lsls r1, 19
ldr r2, _08006500
ldr r3, _08006504
bl sub_8006554
adds r0, r4, 0
mov r1, r8
bl sub_80089AC
movs r0, 0
ldrsh r1, [r5, r0]
movs r2, 0x4
ldrsh r0, [r5, r2]
muls r0, r1
add r9, r0
_080064C4:
adds r5, 0x18
adds r4, 0x18
ldr r3, [sp, 0x18]
adds r3, 0x18
str r3, [sp, 0x18]
adds r6, 0x1
cmp r6, 0x3
ble _08006472
ldr r2, _08006508
ldr r0, _0800650C
ldr r1, _08006510
str r0, [r2]
movs r0, 0x1
strb r0, [r1]
add sp, 0x1C
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080064F0: .4byte gUnknown_80B857C
_080064F4: .4byte gUnknown_202AFC0
_080064F8: .4byte gUnknown_80B8804
_080064FC: .4byte gUnknown_2027370
_08006500: .4byte gUnknown_20274B4
_08006504: .4byte gUnknown_202B038
_08006508: .4byte gUnknown_203B078
_0800650C: .4byte gUnknown_3000E94
_08006510: .4byte gUnknown_20274A5
thumb_func_end sub_8006438
thumb_func_start nullsub_152
nullsub_152:
bx lr

6
include/code_800558C.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef GUARD_code_800558C_H
#define GUARD_code_800558C_H
extern void *gUnknown_203B078;
#endif //GUARD_code_800558C_H

6
include/code_800B540.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef GUARD_code_800B540_H
#define GUARD_code_800B540_H
void sub_800CDA8(int a0);
#endif //GUARD_code_800B540_H

34
include/file_system.h Normal file
View File

@@ -0,0 +1,34 @@
#ifndef GUARD_FILE_SYSTEM_H
#define GUARD_FILE_SYSTEM_H
struct File
{
char *name;
u8 *data;
};
struct OpenedFile
{
struct File *file;
u8 *data;
};
struct FileArchive
{
char magic[8];
s32 count;
struct File *entries;
};
struct SiroArchive
{
u32 magic;
u8 *data;
};
struct OpenedFile *OpenFile(const char *filename, const struct FileArchive *arc);
u8 *GetFileDataPtr(struct OpenedFile *openedFile, int unused);
struct OpenedFile *OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc);
struct OpenedFile *Call_OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc);
#endif //GUARD_FILE_SYSTEM_H

View File

@@ -56,6 +56,7 @@ SECTIONS {
asm/sprite.o(.text);
asm/code_800558C.o(.text);
src/random.o(.text);
src/text.o(.text);
asm/text.o(.text);
asm/code_8009804.o(.text);
src/file_system.o(.text);

View File

@@ -1,29 +1,5 @@
#include "global.h"
struct File
{
char *name;
u8 *data;
};
struct OpenedFile
{
struct File *file;
u8 *data;
};
struct FileArchive
{
char magic[8];
s32 count;
struct File *entries;
};
struct SiroArchive
{
u32 magic;
u8 *data;
};
#include "file_system.h"
extern struct OpenedFile gFileCache[64];
@@ -56,7 +32,7 @@ u32 sub_800A8F8(u32 value)
return oldValue;
}
struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc)
struct OpenedFile *OpenFile(const char *filename, const struct FileArchive *arc)
{
char buffer[0x12C];
s32 left, right;
@@ -138,7 +114,7 @@ u8 *GetFileDataPtr(struct OpenedFile *openedFile, int unused)
return GetSiroPtr(openedFile);
}
struct OpenedFile *OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
struct OpenedFile *OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc)
{
struct OpenedFile *openedFile = OpenFile(filename, arc);
if (openedFile)
@@ -146,7 +122,7 @@ struct OpenedFile *OpenFileAndGetFileDataPtr(char *filename, struct FileArchive
return openedFile;
}
struct OpenedFile *Call_OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
struct OpenedFile *Call_OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc)
{
return OpenFileAndGetFileDataPtr(filename, arc);
}

200
src/text.c Normal file
View File

@@ -0,0 +1,200 @@
#include "global.h"
#include "file_system.h"
#include "code_800558C.h"
#include "code_800B540.h"
struct UnkTextStruct1 {
u8 fill00[4];
u16 unk04;
u8 fill06[2];
u16 unk08;
u8 fill04[0x3c];
u8 unk46;
};
struct UnkTextStruct2 {
u8 fill00[0x0c];
s16 unk0c;
u8 fill0e[2];
s16 unk10;
u8 fill12[0x06];
};
extern char gUnknown_3000E94[];
EWRAM_DATA struct UnkTextStruct1 gUnknown_2027370[4];
EWRAM_DATA u8 *gUnknown_2027490[2];
EWRAM_DATA u16 gUnknown_2027498;
EWRAM_DATA u8 gUnknown_20274A5;
EWRAM_DATA u32 gUnknown_20274AC;
EWRAM_DATA vu32 gUnknown_20274B0;
EWRAM_DATA u8 gUnknown_20274B4[0x3b00];
EWRAM_DATA struct OpenedFile *gKanji[2];
EWRAM_DATA struct UnkTextStruct2 gUnknown_202AFC0[4];
EWRAM_DATA u32 gUnknown_202B020;
EWRAM_DATA u32 gUnknown_202B024;
EWRAM_DATA u32 gUnknown_202B028[2];
EWRAM_DATA u32 gUnknown_202B030;
EWRAM_DATA u8 gUnknown_202B034;
EWRAM_DATA u16 gUnknown_202B038[2][32][32];
u32 xxx_update_some_bg_tiles(u32 a0);
void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3);
void sub_8006554(void *a0, void *a1, void *a2, void *a3, u32 a4, const struct UnkTextStruct2 *a5, u8 a6, u32 a7, u32 *a8, u32 a9);
void sub_800898C(void);
void sub_80089AC(const struct UnkTextStruct2 *a0, void *a1);
void sub_8009388(void);
extern const struct UnkTextStruct2 gUnknown_80B857C[4];
extern const char gUnknown_80B87B4[];
extern const char gUnknown_80B87BC[];
extern const struct FileArchive gUnknown_8300500;
extern const u32 gUnknown_80B87C4[8];
extern const u32 gUnknown_80B87E4[8];
extern const u32 gUnknown_80B8804[4];
void sub_8006218(void)
{
int i;
int j;
int k;
gUnknown_20274AC = 0;
gKanji[0] = OpenFileAndGetFileDataPtr(gUnknown_80B87B4, &gUnknown_8300500);
gKanji[1] = OpenFileAndGetFileDataPtr(gUnknown_80B87BC, &gUnknown_8300500);
gUnknown_2027490[0] = gKanji[0]->data;
gUnknown_2027490[1] = gKanji[1]->data;
gUnknown_202B028[0] = 11;
gUnknown_202B028[1] = 12;
for (k = 0; k < 4; k++)
{
gUnknown_2027370[k].unk04 = 0;
gUnknown_2027370[k].unk08 = 0;
gUnknown_2027370[k].unk46 = 0;
}
gUnknown_2027498 = 0;
for (i = 0; i < 20; i++)
{
gUnknown_202B038[0][i][0] = 0xf279;
gUnknown_202B038[1][i][0] = 0xf27a;
for (j = 1; j < 32; j++)
{
gUnknown_202B038[0][i][j] = 0;
gUnknown_202B038[1][i][j] = 0xf27a;
}
}
gUnknown_202B034 = 1;
gUnknown_202B030 = 0x88888888;
gUnknown_203B078 = NULL;
gUnknown_20274A5 = 0;
gUnknown_202B020 = 1;
gUnknown_202B024 = 20;
xxx_update_some_bg_tiles(0);
}
u32 xxx_update_some_bg_tiles(u32 a0)
{
u32 r5 = gUnknown_20274B0;
u32 *r4 = (u32 *)(VRAM + 0x4f40);
const u32 *r2;
gUnknown_20274B0 = a0;
if (a0 == 0 || a0 == 2)
{
sub_800CDA8(2);
r2 = gUnknown_80B87C4;
}
else
{
sub_800CDA8(1);
r2 = gUnknown_80B87E4;
}
gUnknown_202B030 = 0x88888888;
*r4++ = *r2++;
*r4++ = *r2++;
*r4++ = *r2++;
*r4++ = *r2++;
*r4++ = *r2++;
*r4++ = *r2++;
*r4++ = *r2++;
*r4++ = *r2++;
return r5;
}
u32 sub_80063B0(void)
{
return gUnknown_20274B0;
}
u8 sub_80063BC(u8 a0)
{
u8 retval = gUnknown_202B034;
gUnknown_202B034 = a0;
return retval;
}
void sub_80063CC(u32 a0)
{
gUnknown_20274AC = a0;
}
void sub_80063D8(int a0)
{
u32 retval;
if (a0 == 0)
{
gUnknown_20274B0;
retval = 0x88888888;
}
else
{
retval = (a0 & 0xf) | ((a0 & 0xf) << 4);
retval |= ((a0 & 0xf) << 8);
retval |= ((a0 & 0xf) << 12);
retval |= ((a0 & 0xf) << 16);
retval |= ((a0 & 0xf) << 20);
retval |= ((a0 & 0xf) << 24);
retval |= ((a0 & 0xf) << 28);
}
gUnknown_202B030 = retval;
}
void sub_800641C(void *a0, u8 a1, u8 a2)
{
u32 r3 = 0;
sub_8006438(a0, a1, a2, &r3);
}
void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3)
{
int i;
u32 r9 = 2;
if (a0 == NULL)
a0 = gUnknown_80B857C;
if (a2)
sub_8009388();
sub_800898C();
for (i = 0; i < 4; i++)
{
gUnknown_202AFC0[i] = a0[i];
if (a0[i].unk0c)
{
sub_8006554(gUnknown_2027370, (void *)VRAM, gUnknown_20274B4, gUnknown_202B038, gUnknown_80B8804[i], a0 + i, a1, r9, a3, 0);
sub_80089AC(a0 + i, a3);
r9 += a0[i].unk0c * a0[i].unk10;
}
}
#ifdef NONMATCHING
gUnknown_203B078 = gUnknown_3000E94;
gUnknown_20274A5 = 1;
#else
asm(".syntax unified\n"
"\tldr r2, =gUnknown_203B078\n"
"\tldr r0, =gUnknown_3000E94\n"
"\tldr r1, =gUnknown_20274A5\n"
"\tstr r0, [r2]\n"
"\tmovs r0, 0x1\n"
"\tstrb r0, [r1]\n"
".syntax divided");
#endif
}