mirror of
https://github.com/Xeeynamo/sotn-decomp.git
synced 2024-10-07 02:24:01 +00:00
func_801A910 Duplicates + Custom SEL version (#527)
This commit is contained in:
parent
4adf1da469
commit
a1e8176a36
@ -61,4 +61,5 @@ EntityUnkId08 = 0x8019BAB8;
|
||||
BottomCornerText = 0x8019BBA4;
|
||||
UnkPolyFunc0 = 0x8019C674;
|
||||
UnkLoopFunc = 0x8019C6A0;
|
||||
g_Dialogue = 0x8019D378;
|
||||
g_ItemIconSlots = 0x8019D42C;
|
||||
|
@ -82,4 +82,5 @@ UnkPolyFunc0 = 0x801A27B8;
|
||||
UnkLoopFunc = 0x801A27E4;
|
||||
EntityUnkId17 = 0x801A2E20;
|
||||
Entity3DBackgroundHouse = 0x801A2F10;
|
||||
g_Dialogue = 0x801A3ED8;
|
||||
g_ItemIconSlots = 0x801A3F8C;
|
||||
|
@ -137,4 +137,5 @@ EntityStageNamePopup = 0x801C8CAC;
|
||||
UnkPolyFunc0 = 0x801CA0D0;
|
||||
UnkLoopFunc = 0x801CA0FC;
|
||||
EntityLifeUpSpawn = 0x801CA160;
|
||||
g_Dialogue = 0x801CB688;
|
||||
g_ItemIconSlots = 0x801CB740;
|
||||
|
@ -1690,7 +1690,8 @@ func_801BABA4 = 0x801BABA4;
|
||||
g_memCardRStep = 0x801BAFEC;
|
||||
g_memCardRStepSub = 0x801BAFF0;
|
||||
g_memCardRetryCount = 0x801BAFF8;
|
||||
g_Dialogue = 0x801BC354;
|
||||
g_MemCardSelectorX = 0x801BC3D8;
|
||||
g_MemCardSelectorY = 0x801BC3DC;
|
||||
g_InputCursorPos = 0x801D6B08;
|
||||
g_InputSaveName = 0x801D6B14;
|
||||
g_InputSaveName = 0x801D6B14;
|
@ -988,6 +988,26 @@ typedef struct {
|
||||
/* 0x0E */ u16 unk0E;
|
||||
} RelicOrb; /* size=0x10 */
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ const char* nextCharDialogue; // ptr to dialogue next character
|
||||
/* 0x04 */ u16 startX; // starting x coord
|
||||
/* 0x06 */ u16 nextLineY; // next line y coord
|
||||
/* 0x08 */ u16 startY; // starting y coord
|
||||
/* 0x0A */ u16 nextCharX; // next char x coord
|
||||
/* 0x0C */ u16 nextLineX; // next line x coord
|
||||
/* 0x0E */ s16 nextCharY; // next char y coord
|
||||
/* 0x10 */ u16 portraitAnimTimer; // portrait animation timer
|
||||
/* 0x12 */ u16 unk12; // unknown
|
||||
/* 0x14 */ u16 clutIndex; // CLUT index
|
||||
/* 0x16 */ u8 nextCharTimer; // timer to next character
|
||||
/* 0x17 */ u8 unk17; // unknown
|
||||
/* 0x18 */ Primitive* prim[6]; // for dialogue graphics rendering
|
||||
/* 0x30 */ s32 primIndex[3]; // primIndices: unk, actorName, unk
|
||||
/* 0x3C */ u16 unk3C; // unknown
|
||||
/* 0x3E */ u16 timer; // global timer
|
||||
/* 0x40 */ const char* unk40; // dialogue settings, maybe?
|
||||
} Dialogue; // size = 0x44
|
||||
|
||||
typedef struct {
|
||||
/* 8003C774 */ Overlay o;
|
||||
/* 8003C7B4 */ void (*FreePrimitives)(s32);
|
||||
|
@ -245,7 +245,34 @@ void func_8018E3BC(s32 arg0) {
|
||||
|
||||
INCLUDE_ASM("asm/us/st/cen/nonmatchings/D600", func_8018E3E8);
|
||||
|
||||
INCLUDE_ASM("asm/us/st/cen/nonmatchings/D600", func_8018E6C4);
|
||||
// Animates the portrait size of the actor by enlarging or shrinking it
|
||||
void func_8018E6C4(u8 ySteps) {
|
||||
Primitive* prim;
|
||||
s32 primIndex;
|
||||
s32 i;
|
||||
|
||||
primIndex = g_Dialogue.nextCharY + 1;
|
||||
while (primIndex >= 5) {
|
||||
primIndex -= 5;
|
||||
}
|
||||
if (g_CurrentEntity->step_s == 0) {
|
||||
prim = g_Dialogue.prim[primIndex];
|
||||
prim->v1 -= ySteps;
|
||||
prim->v0 += ySteps;
|
||||
if (prim->v1 == 0) {
|
||||
g_CurrentEntity->step_s++;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (i != primIndex) {
|
||||
prim = g_Dialogue.prim[i];
|
||||
prim->y0 -= ySteps;
|
||||
}
|
||||
}
|
||||
g_Dialogue.portraitAnimTimer++;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/us/st/cen/nonmatchings/D600", EntityUnkId16);
|
||||
|
||||
|
@ -95,4 +95,6 @@ extern u16 g_ItemIconSlots[0x20];
|
||||
extern u16 UNK_Invincibility0[];
|
||||
extern u16 g_InitializeEntityData0[];
|
||||
|
||||
extern Dialogue g_Dialogue;
|
||||
|
||||
#endif
|
@ -10,57 +10,57 @@ void func_80194774(void) {
|
||||
D_801A3EDE = D_801A3EE0 + 20;
|
||||
}
|
||||
|
||||
s32 func_801947C8(s32 arg0) {
|
||||
s32 func_801947C8(s32 textDialogue) {
|
||||
Primitive* prim;
|
||||
s16 firstPrimIndex;
|
||||
|
||||
firstPrimIndex = g_api.AllocPrimitives(PRIM_SPRT, 7);
|
||||
D_801A3F10[0] = firstPrimIndex;
|
||||
g_Dialogue.primIndex[2] = firstPrimIndex;
|
||||
if (firstPrimIndex == -1) {
|
||||
D_801A3F10[0] = 0;
|
||||
g_Dialogue.primIndex[2] = 0;
|
||||
return 0;
|
||||
}
|
||||
D_801A3ED8 = arg0;
|
||||
D_801A3F14 = 0;
|
||||
D_801A3F0C = -1;
|
||||
D_801A3F08 = -1;
|
||||
g_Dialogue.nextCharDialogue = textDialogue;
|
||||
g_Dialogue.unk3C = 0;
|
||||
g_Dialogue.primIndex[1] = -1;
|
||||
g_Dialogue.primIndex[0] = -1;
|
||||
func_80194774();
|
||||
|
||||
if (prim && prim) { // !FAKE
|
||||
}
|
||||
|
||||
prim = D_801A3EF0[0] = &g_PrimBuf[D_801A3F10[0]];
|
||||
prim = g_Dialogue.prim[0] = &g_PrimBuf[g_Dialogue.primIndex[2]];
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801A3EF0[1] = prim->next;
|
||||
prim = g_Dialogue.prim[1] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801A3EF0[2] = prim->next;
|
||||
prim = g_Dialogue.prim[2] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801A3EF0[3] = prim->next;
|
||||
prim = g_Dialogue.prim[3] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801A3EF0[4] = prim->next;
|
||||
prim = g_Dialogue.prim[4] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801A3EF0[5] = prim->next;
|
||||
prim = g_Dialogue.prim[5] = prim->next;
|
||||
|
||||
prim->type = 4;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
|
||||
prim = prim->next;
|
||||
prim->type = PRIM_G4;
|
||||
prim->type = 3;
|
||||
prim->r0 = prim->r1 = prim->r2 = prim->r3 = 0xFF;
|
||||
prim->b0 = prim->b1 = prim->b2 = prim->b3 = prim->g0 = prim->g1 = prim->g2 =
|
||||
prim->g3 = 0;
|
||||
prim->g0 = prim->g1 = prim->g2 = prim->g3 = 0;
|
||||
prim->b0 = prim->b1 = prim->b2 = prim->b3 = 0;
|
||||
prim->x0 = prim->x2 = 4;
|
||||
prim->x1 = prim->x3 = 0xF8;
|
||||
prim->priority = 0x1FD;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
|
||||
prim = prim->next;
|
||||
prim->type = PRIM_TILE;
|
||||
prim->type = 1;
|
||||
prim->x0 = 3;
|
||||
prim->y0 = 0x2F;
|
||||
prim->v0 = 0x4A;
|
||||
@ -120,7 +120,33 @@ void func_80194F14(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/us/st/dre/nonmatchings/14774", func_80194FF4);
|
||||
void func_80194FF4(u8 ySteps) {
|
||||
Primitive* prim;
|
||||
s32 primIndex;
|
||||
s32 i;
|
||||
|
||||
primIndex = g_Dialogue.nextCharY + 1;
|
||||
while (primIndex >= 5) {
|
||||
primIndex -= 5;
|
||||
}
|
||||
if (g_CurrentEntity->step_s == 0) {
|
||||
prim = g_Dialogue.prim[primIndex];
|
||||
prim->v1 -= ySteps;
|
||||
prim->v0 += ySteps;
|
||||
if (prim->v1 == 0) {
|
||||
g_CurrentEntity->step_s++;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (i != primIndex) {
|
||||
prim = g_Dialogue.prim[i];
|
||||
prim->y0 -= ySteps;
|
||||
}
|
||||
}
|
||||
g_Dialogue.portraitAnimTimer++;
|
||||
}
|
||||
|
||||
// dialogue with mother opens as alucard walks right ID 20
|
||||
INCLUDE_ASM("asm/us/st/dre/nonmatchings/14774", EntitySuccubusCutscene);
|
||||
|
@ -152,3 +152,5 @@ extern s16 D_801A3F14;
|
||||
extern s16 D_801A3F16;
|
||||
extern s32 D_801A3F18;
|
||||
extern u16 g_ItemIconSlots[0x20];
|
||||
|
||||
extern Dialogue g_Dialogue;
|
@ -228,41 +228,41 @@ void func_801B74CC(void) {
|
||||
}
|
||||
|
||||
// called from EntityMariaCutscene
|
||||
s32 func_801B7520(s32 arg0) {
|
||||
s32 func_801B7520(s32 textDialogue) {
|
||||
Primitive* prim;
|
||||
s16 firstPrimIndex;
|
||||
|
||||
firstPrimIndex = g_api.AllocPrimitives(PRIM_SPRT, 7);
|
||||
D_801CB6C0[0] = firstPrimIndex;
|
||||
g_Dialogue.primIndex[2] = firstPrimIndex;
|
||||
if (firstPrimIndex == -1) {
|
||||
D_801CB6C0[0] = 0;
|
||||
g_Dialogue.primIndex[2] = 0;
|
||||
return 0;
|
||||
}
|
||||
D_801CB688 = arg0;
|
||||
D_801CB6C4 = 0;
|
||||
D_801CB6BC = -1;
|
||||
D_801CB6B8 = -1;
|
||||
g_Dialogue.nextCharDialogue = textDialogue;
|
||||
g_Dialogue.unk3C = 0;
|
||||
g_Dialogue.primIndex[1] = -1;
|
||||
g_Dialogue.primIndex[0] = -1;
|
||||
func_801B74CC();
|
||||
|
||||
if (prim && prim) { // !FAKE
|
||||
}
|
||||
|
||||
prim = D_801CB6A0[0] = &g_PrimBuf[D_801CB6C0[0]];
|
||||
prim = g_Dialogue.prim[0] = &g_PrimBuf[g_Dialogue.primIndex[2]];
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801CB6A0[1] = prim->next;
|
||||
prim = g_Dialogue.prim[1] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801CB6A0[2] = prim->next;
|
||||
prim = g_Dialogue.prim[2] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801CB6A0[3] = prim->next;
|
||||
prim = g_Dialogue.prim[3] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801CB6A0[4] = prim->next;
|
||||
prim = g_Dialogue.prim[4] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = D_801CB6A0[5] = prim->next;
|
||||
prim = g_Dialogue.prim[5] = prim->next;
|
||||
|
||||
prim->type = 4;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
@ -270,8 +270,8 @@ s32 func_801B7520(s32 arg0) {
|
||||
prim = prim->next;
|
||||
prim->type = 3;
|
||||
prim->r0 = prim->r1 = prim->r2 = prim->r3 = 0xFF;
|
||||
prim->b0 = prim->b1 = prim->b2 = prim->b3 = prim->g0 = prim->g1 = prim->g2 =
|
||||
prim->g3 = 0;
|
||||
prim->g0 = prim->g1 = prim->g2 = prim->g3 = 0;
|
||||
prim->b0 = prim->b1 = prim->b2 = prim->b3 = 0;
|
||||
prim->x0 = prim->x2 = 4;
|
||||
prim->x1 = prim->x3 = 0xF8;
|
||||
prim->priority = 0x1FD;
|
||||
@ -310,7 +310,34 @@ void func_801B797C(s32 arg0) {
|
||||
|
||||
INCLUDE_ASM("asm/us/st/nz0/nonmatchings/36DE4", func_801B79A8);
|
||||
|
||||
INCLUDE_ASM("asm/us/st/nz0/nonmatchings/36DE4", func_801B7C54);
|
||||
// Animates the portrait size of the actor by enlarging or shrinking it
|
||||
void func_801B7C54(u8 ySteps) {
|
||||
Primitive* prim;
|
||||
s32 primIndex;
|
||||
s32 i;
|
||||
|
||||
primIndex = g_Dialogue.nextCharY + 1;
|
||||
while (primIndex >= 5) {
|
||||
primIndex -= 5;
|
||||
}
|
||||
if (g_CurrentEntity->step_s == 0) {
|
||||
prim = g_Dialogue.prim[primIndex];
|
||||
prim->v1 -= ySteps;
|
||||
prim->v0 += ySteps;
|
||||
if (prim->v1 == 0) {
|
||||
g_CurrentEntity->step_s++;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (i != primIndex) {
|
||||
prim = g_Dialogue.prim[i];
|
||||
prim->y0 -= ySteps;
|
||||
}
|
||||
}
|
||||
g_Dialogue.portraitAnimTimer++;
|
||||
}
|
||||
|
||||
// cutscene where alucard and maria discuss castle changing
|
||||
INCLUDE_ASM("asm/us/st/nz0/nonmatchings/36DE4", EntityMariaCutscene);
|
||||
|
@ -347,7 +347,6 @@ extern s32 D_801823A4;
|
||||
extern const char D_801B058C[]; // "charal %x\n"
|
||||
extern const char D_801B0598[]; // "charal %x\n"
|
||||
extern const char D_801B08C8[]; // "charal %x\n"
|
||||
extern s32 D_801CB688;
|
||||
extern s16 D_801CB68E;
|
||||
extern u16 D_801CB690;
|
||||
extern s16 D_801CB692;
|
||||
@ -374,3 +373,5 @@ extern u16 D_80181F90[]; // NOTE(sestren): Animation frame properties?
|
||||
extern u8 D_80181FF0;
|
||||
|
||||
// *** EntitySoulStealOrb properties END ***
|
||||
|
||||
extern Dialogue g_Dialogue;
|
||||
|
@ -32,7 +32,33 @@ void func_801B68E0(s32 arg0) {
|
||||
D_801BC390 = 1;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/us/st/sel/nonmatchings/3642C", func_801B690C);
|
||||
void func_801B690C(u8 ySteps, Entity* self) {
|
||||
s32 primIndex = g_Dialogue.nextCharY + 1;
|
||||
Primitive* prim;
|
||||
s32 i;
|
||||
|
||||
while (primIndex >= 5) {
|
||||
primIndex -= 5;
|
||||
}
|
||||
|
||||
if (self->step_s == 0) {
|
||||
prim = g_Dialogue.prim[primIndex];
|
||||
prim->v1 -= ySteps;
|
||||
prim->v0 = ySteps + prim->v0;
|
||||
if (prim->v1 == 0) {
|
||||
self->step_s++;
|
||||
prim->blendMode = 8;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (i != primIndex) {
|
||||
prim = g_Dialogue.prim[i];
|
||||
prim->y0 -= ySteps;
|
||||
}
|
||||
}
|
||||
g_Dialogue.portraitAnimTimer++;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/us/st/sel/nonmatchings/3642C", func_801B69F8);
|
||||
|
||||
|
@ -217,6 +217,8 @@ extern s32 D_801D6B0C;
|
||||
extern s32 D_801D6B20;
|
||||
extern s32 D_801D6B24;
|
||||
|
||||
extern Dialogue g_Dialogue;
|
||||
|
||||
void func_801B1ED0();
|
||||
void func_801B3A54(s32, s32);
|
||||
s32 func_801B3A94(s32);
|
||||
|
@ -378,13 +378,13 @@ void func_801A8620(Entity* entity) {
|
||||
}
|
||||
|
||||
void func_801A8984(void) {
|
||||
g_Dialogue.D_801C24D8 = 2;
|
||||
g_Dialogue.D_801C24D6 = 2;
|
||||
g_Dialogue.D_801C24DA = 0;
|
||||
g_Dialogue.D_801C24DE = 0;
|
||||
g_Dialogue.D_801C24E2 = 0;
|
||||
g_Dialogue.D_801C24E3 = 8;
|
||||
g_Dialogue.D_801C24D2 = g_Dialogue.D_801C24D4 + 0x14;
|
||||
g_Dialogue.nextLineX = 2;
|
||||
g_Dialogue.nextCharX = 2;
|
||||
g_Dialogue.nextCharY = 0;
|
||||
g_Dialogue.unk12 = 0;
|
||||
g_Dialogue.nextCharTimer = 0;
|
||||
g_Dialogue.unk17 = 8;
|
||||
g_Dialogue.nextLineY = g_Dialogue.startY + 0x14;
|
||||
}
|
||||
|
||||
s32 func_801A89D8(const char* textDialogue) {
|
||||
@ -392,36 +392,36 @@ s32 func_801A89D8(const char* textDialogue) {
|
||||
s16 firstPrimIndex;
|
||||
|
||||
firstPrimIndex = g_api.AllocPrimitives(PRIM_SPRT, 8);
|
||||
g_Dialogue.D_801C24FC[2] = firstPrimIndex;
|
||||
g_Dialogue.primIndex[2] = firstPrimIndex;
|
||||
if (firstPrimIndex == -1) {
|
||||
g_Dialogue.D_801C24FC[2] = 0;
|
||||
g_Dialogue.primIndex[2] = 0;
|
||||
return 0;
|
||||
}
|
||||
g_Dialogue.D_801C24CC = textDialogue;
|
||||
g_Dialogue.D_801C2508 = 0;
|
||||
g_Dialogue.D_801C24FC[1] = -1;
|
||||
g_Dialogue.D_801C24FC[0] = -1;
|
||||
g_Dialogue.nextCharDialogue = textDialogue;
|
||||
g_Dialogue.unk3C = 0;
|
||||
g_Dialogue.primIndex[1] = -1;
|
||||
g_Dialogue.primIndex[0] = -1;
|
||||
func_801A8984();
|
||||
|
||||
if (prim && prim) { // !FAKE
|
||||
}
|
||||
|
||||
prim = g_Dialogue.D_801C24E4[0] = &g_PrimBuf[g_Dialogue.D_801C24FC[2]];
|
||||
prim = g_Dialogue.prim[0] = &g_PrimBuf[g_Dialogue.primIndex[2]];
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = g_Dialogue.D_801C24E4[1] = prim->next;
|
||||
prim = g_Dialogue.prim[1] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = g_Dialogue.D_801C24E4[2] = prim->next;
|
||||
prim = g_Dialogue.prim[2] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = g_Dialogue.D_801C24E4[3] = prim->next;
|
||||
prim = g_Dialogue.prim[3] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = g_Dialogue.D_801C24E4[4] = prim->next;
|
||||
prim = g_Dialogue.prim[4] = prim->next;
|
||||
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim = g_Dialogue.D_801C24E4[5] = prim->next;
|
||||
prim = g_Dialogue.prim[5] = prim->next;
|
||||
|
||||
prim->type = 4;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
|
@ -8,15 +8,15 @@
|
||||
void func_801A8BF8(void) {
|
||||
Primitive* prim;
|
||||
|
||||
func_801A8B9C(g_Dialogue.D_801C24DA);
|
||||
prim = g_Dialogue.D_801C24E4[g_Dialogue.D_801C24DA];
|
||||
func_801A8B9C(g_Dialogue.nextCharY);
|
||||
prim = g_Dialogue.prim[g_Dialogue.nextCharY];
|
||||
prim->tpage = 0x10;
|
||||
prim->clut = g_Dialogue.D_801C24E0;
|
||||
prim->y0 = g_Dialogue.D_801C24D2;
|
||||
prim->clut = g_Dialogue.clutIndex;
|
||||
prim->y0 = g_Dialogue.nextLineY;
|
||||
prim->u0 = 0;
|
||||
prim->x0 = g_Dialogue.D_801C24D0;
|
||||
prim->x0 = g_Dialogue.startX;
|
||||
prim->x0 = prim->x0 + 4;
|
||||
prim->v0 = g_Dialogue.D_801C24DA * 0xC - 0x80;
|
||||
prim->v0 = g_Dialogue.nextCharY * 0xC - 0x80;
|
||||
prim->u1 = 0xC0;
|
||||
prim->v1 = 0xC;
|
||||
prim->priority = 0x1FF;
|
||||
@ -57,7 +57,7 @@ void func_801A8CB0(u16 actorIndex, Entity* self) {
|
||||
|
||||
// Fill prims to render the actor name on screen
|
||||
prim = &g_PrimBuf[primIndex];
|
||||
g_Dialogue.D_801C24FC[1] = primIndex;
|
||||
g_Dialogue.primIndex[1] = primIndex;
|
||||
actorName = D_80180828[actorIndex];
|
||||
x = 0x38;
|
||||
while (prim != NULL) {
|
||||
@ -75,7 +75,7 @@ void func_801A8CB0(u16 actorIndex, Entity* self) {
|
||||
prim->priority = 0x1FF;
|
||||
prim->blendMode = BLEND_VISIBLE;
|
||||
prim->x0 = x;
|
||||
prim->y0 = g_Dialogue.D_801C24D4 + 6;
|
||||
prim->y0 = g_Dialogue.startY + 6;
|
||||
prim = prim->next;
|
||||
x += FONT_GAP;
|
||||
}
|
||||
@ -83,9 +83,9 @@ void func_801A8CB0(u16 actorIndex, Entity* self) {
|
||||
}
|
||||
|
||||
void func_801A8E34(s32 arg0) {
|
||||
g_Dialogue.D_801C250C = arg0 + 0x100000;
|
||||
g_Dialogue.D_801C250A = 0;
|
||||
g_Dialogue.D_801C2508 = 1;
|
||||
g_Dialogue.unk40 = arg0 + 0x100000;
|
||||
g_Dialogue.timer = 0;
|
||||
g_Dialogue.unk3C = 1;
|
||||
}
|
||||
|
||||
void func_801A8E60(void) {
|
||||
@ -93,49 +93,49 @@ void func_801A8E60(void) {
|
||||
u16 startTimer;
|
||||
u8 entityIndex;
|
||||
|
||||
g_Dialogue.D_801C250A++;
|
||||
g_Dialogue.timer++;
|
||||
// protect from overflows
|
||||
if (g_Dialogue.D_801C250A > 0xFFFE) {
|
||||
g_Dialogue.D_801C2508 = 0;
|
||||
if (g_Dialogue.timer > 0xFFFE) {
|
||||
g_Dialogue.unk3C = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
// Start the dialogue script only if the start timer has passed
|
||||
startTimer = (*g_Dialogue.D_801C250C++ << 8) | *g_Dialogue.D_801C250C++;
|
||||
if (g_Dialogue.D_801C250A < startTimer) {
|
||||
startTimer = (*g_Dialogue.unk40++ << 8) | *g_Dialogue.unk40++;
|
||||
if (g_Dialogue.timer < startTimer) {
|
||||
// Re-evaluate the condition at the next frame
|
||||
g_Dialogue.D_801C250C -= 2;
|
||||
g_Dialogue.unk40 -= 2;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (*g_Dialogue.D_801C250C++) {
|
||||
switch (*g_Dialogue.unk40++) {
|
||||
case 0:
|
||||
entityIndex = *g_Dialogue.D_801C250C++;
|
||||
entityIndex = *g_Dialogue.unk40++;
|
||||
entity = &g_Entities[STAGE_ENTITY_START + entityIndex];
|
||||
DestroyEntity(entity);
|
||||
|
||||
entity->entityId = *g_Dialogue.D_801C250C++;
|
||||
entity->entityId = *g_Dialogue.unk40++;
|
||||
entity->pfnUpdate = PfnEntityUpdates[entity->entityId - 1];
|
||||
entity->posX.i.hi = *g_Dialogue.D_801C250C++ * 0x10;
|
||||
entity->posX.i.hi = *g_Dialogue.D_801C250C++ | entity->posX.i.hi;
|
||||
entity->posY.i.hi = *g_Dialogue.D_801C250C++ * 0x10;
|
||||
entity->posY.i.hi = *g_Dialogue.D_801C250C++ | entity->posY.i.hi;
|
||||
entity->posX.i.hi = *g_Dialogue.unk40++ * 0x10;
|
||||
entity->posX.i.hi = *g_Dialogue.unk40++ | entity->posX.i.hi;
|
||||
entity->posY.i.hi = *g_Dialogue.unk40++ * 0x10;
|
||||
entity->posY.i.hi = *g_Dialogue.unk40++ | entity->posY.i.hi;
|
||||
break;
|
||||
case 1:
|
||||
entityIndex = *g_Dialogue.D_801C250C++;
|
||||
entityIndex = *g_Dialogue.unk40++;
|
||||
entity = &g_Entities[STAGE_ENTITY_START + entityIndex];
|
||||
DestroyEntity(entity);
|
||||
break;
|
||||
case 2:
|
||||
if (!((D_801C257C >> *g_Dialogue.D_801C250C) & 1)) {
|
||||
g_Dialogue.D_801C250C--;
|
||||
if (!((D_801C257C >> *g_Dialogue.unk40) & 1)) {
|
||||
g_Dialogue.unk40--;
|
||||
return;
|
||||
}
|
||||
D_801C257C &= ~(1 << *g_Dialogue.D_801C250C++);
|
||||
D_801C257C &= ~(1 << *g_Dialogue.unk40++);
|
||||
break;
|
||||
case 3:
|
||||
D_801C257C |= 1 << *g_Dialogue.D_801C250C++;
|
||||
D_801C257C |= 1 << *g_Dialogue.unk40++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -147,12 +147,12 @@ void func_801A910C(u8 ySteps) {
|
||||
s32 primIndex;
|
||||
s32 i;
|
||||
|
||||
primIndex = g_Dialogue.D_801C24DA + 1;
|
||||
primIndex = g_Dialogue.nextCharY + 1;
|
||||
while (primIndex >= 5) {
|
||||
primIndex -= 5;
|
||||
}
|
||||
if (g_CurrentEntity->step_s == 0) {
|
||||
prim = g_Dialogue.D_801C24E4[primIndex];
|
||||
prim = g_Dialogue.prim[primIndex];
|
||||
prim->v1 -= ySteps;
|
||||
prim->v0 += ySteps;
|
||||
if (prim->v1 == 0) {
|
||||
@ -163,11 +163,11 @@ void func_801A910C(u8 ySteps) {
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (i != primIndex) {
|
||||
prim = g_Dialogue.D_801C24E4[i];
|
||||
prim = g_Dialogue.prim[i];
|
||||
prim->y0 -= ySteps;
|
||||
}
|
||||
}
|
||||
g_Dialogue.D_801C24DC++;
|
||||
g_Dialogue.portraitAnimTimer++;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/us/st/st0/nonmatchings/28BF8", EntityDialogue);
|
||||
|
@ -32,26 +32,6 @@ typedef enum {
|
||||
E_SECRET_STAIRS = 0x29,
|
||||
} EntityIDs;
|
||||
|
||||
typedef struct {
|
||||
const char* D_801C24CC; // pointer to dialogue next character
|
||||
u16 D_801C24D0; // starting x coord
|
||||
u16 D_801C24D2; // next line y coord
|
||||
u16 D_801C24D4; // starting y coord
|
||||
u16 D_801C24D6; // next char x coord
|
||||
u16 D_801C24D8; // next line x coord
|
||||
s16 D_801C24DA; // next char y coord
|
||||
u16 D_801C24DC; // portrait anim timer
|
||||
u16 D_801C24DE; // unknown
|
||||
u16 D_801C24E0; // CLUT index
|
||||
u8 D_801C24E2; // timer to next character
|
||||
u8 D_801C24E3; // unknown
|
||||
Primitive* D_801C24E4[6]; // necessary for the dialogue graphics rendering
|
||||
s32 D_801C24FC[3]; // primIndices: unk, actorName, unk
|
||||
u16 D_801C2508; // unknown
|
||||
u16 D_801C250A; // global timer
|
||||
const char* D_801C250C; // dialogue settings, maybe?
|
||||
} Dialogue;
|
||||
|
||||
void CreateEntityFromEntity(u16 entityId, Entity* source, Entity* entity);
|
||||
s16 GetSideToPlayer();
|
||||
void MoveEntity();
|
||||
|
Loading…
Reference in New Issue
Block a user