summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2018-01-03 14:30:23 -0600
committercamthesaxman <cameronghall@cox.net>2018-01-03 14:30:23 -0600
commitcf37681831a9a8289d5941e66ce673b896abf71f (patch)
tree1cdf9fa4eacec724c32dd228dc6134e29e353a1c /src
parent967d010f6dc9b7e07550154894307a24f165bbd8 (diff)
decompile sub_80E810C - sub_80E872C
Diffstat (limited to 'src')
-rw-r--r--src/easy_chat_2.c403
-rw-r--r--src/easy_chat_before.c135
2 files changed, 455 insertions, 83 deletions
diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c
new file mode 100644
index 000000000..cc1877db1
--- /dev/null
+++ b/src/easy_chat_2.c
@@ -0,0 +1,403 @@
+#include "global.h"
+#include "easy_chat.h"
+#include "graphics.h"
+#include "sprite.h"
+#include "trig.h"
+
+void sub_80E8268(void);
+void sub_80E82BC(struct Sprite *);
+void sub_80E8534(void);
+void sub_80E85F8(struct Sprite *);
+void sub_80E872C(struct Sprite *);
+void sub_80E8760(struct Sprite *);
+void sub_80E8818(void);
+void sub_80E8A7C(void);
+
+const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal");
+const u16 InterviewPalette_1[] = INCBIN_U16("graphics/misc/interview_pal1.gbapal");
+const u8 InterviewArrowTiles[] = INCBIN_U8("graphics/misc/interview_arrow.4bpp");
+const u8 InterviewButtonTiles[] = INCBIN_U8("graphics/misc/interview_buttons.4bpp");
+const u16 gMenuInterviewFrame_Pal[] = INCBIN_U16("graphics/misc/interview_frame.gbapal");
+const u8 gMenuInterviewFrame_Gfx[] = INCBIN_U8("graphics/misc/interview_frame.4bpp.lz");
+const u8 InterviewTriangleCursorTiles[] = INCBIN_U8("graphics/misc/interview_triangle_cursor.4bpp");
+
+void sub_80E8218(void)
+{
+ struct SpriteSheet interviewSpriteSheets[] =
+ {
+ {InterviewTriangleCursorTiles, 0x20, 0},
+ {gInterviewOutlineCursorTiles, 0x700, 1},
+ {InterviewArrowTiles, 0x100, 2},
+ {InterviewButtonTiles, 0x100, 3},
+ {NULL, 0, 0},
+ };
+ struct SpritePalette interviewSpritePalettes[] =
+ {
+ {InterviewPalette_0, 0},
+ {InterviewPalette_1, 1},
+ {NULL, 0},
+ };
+
+ LoadSpriteSheets(interviewSpriteSheets);
+ LoadSpritePalettes(interviewSpritePalettes);
+ sub_80E8268();
+ sub_80E8818();
+ sub_80E8A7C();
+}
+
+const struct OamData gOamData_83DBBF4 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DBBFC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gOamData_83DBBF4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E82BC,
+};
+
+void sub_80E8268(void)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83DBBFC, 0, 0, 0);
+ gSprites[spriteId].pos1.y = gUnknown_083DB694->unk8A * 8 + 8;
+ gSprites[spriteId].pos1.x = gUnknown_083DB694->unk88 * 8 + 4;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gUnknown_083DB694->unk98 = &gSprites[spriteId];
+}
+
+void sub_80E82BC(struct Sprite *sprite)
+{
+ if (sprite->data[1] == 0)
+ {
+ if (gUnknown_083DB694->unk87)
+ {
+ u16 r5 = gUnknown_083DB694->unk86;
+ u16 r4 = gUnknown_083DB694->unk85;
+ u16 r7 = 0;
+ u16 i;
+
+ for (i = 0; i < r4; i++)
+ r7 += gUnknown_083DB694->unk8C[r5][i];
+
+ if (r5 == gUnknown_083DB694->unk84)
+ {
+ sprite->pos1.y = 96;
+ sprite->pos1.x = (r4 * 7 + 3) * 8 + 4;
+ }
+ else
+ {
+ sprite->pos1.y = (gUnknown_083DB694->unk8A + r5 * 2) * 8 + 8;
+ sprite->pos1.x = (gUnknown_083DB694->unk88 + r7 + r4 * 11) * 8 + 4;
+ }
+
+ sprite->pos2.x = -6;
+ sprite->data[0] = 0;
+ }
+ else
+ {
+ if (++sprite->data[0] > 2)
+ {
+ sprite->data[0] = 0;
+ if (++sprite->pos2.x > 0)
+ sprite->pos2.x = -6;
+ }
+ }
+ }
+}
+
+void sub_80E8398(u8 a)
+{
+ switch (a)
+ {
+ case 0:
+ gUnknown_083DB694->unk98->data[1] = a;
+ gUnknown_083DB694->unk98->pos2.x = a;
+ gUnknown_083DB694->unk98->invisible = FALSE;
+ break;
+ case 1:
+ gUnknown_083DB694->unk98->data[1] = a;
+ gUnknown_083DB694->unk98->pos2.x = 0;
+ gUnknown_083DB694->unk98->invisible = FALSE;
+ break;
+ case 2:
+ gUnknown_083DB694->unk98->data[1] = 1;
+ gUnknown_083DB694->unk98->pos2.x = 0;
+ gUnknown_083DB694->unk98->invisible = TRUE;
+ break;
+ }
+}
+
+const struct OamData gOamData_83DBC14 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83DBC1C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC24[] =
+{
+#if ENGLISH
+ ANIMCMD_FRAME(8, 5),
+#else
+ ANIMCMD_FRAME(0, 5),
+#endif
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC2C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC34[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC3C[] =
+{
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC44[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC4C[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC54[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC5C[] =
+{
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC64[] =
+{
+#if ENGLISH
+ ANIMCMD_FRAME(40, 5),
+#else
+ ANIMCMD_FRAME(16, 5),
+#endif
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC6C[] =
+{
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC74[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DBC7C[] =
+{
+ gSpriteAnim_83DBC1C,
+ gSpriteAnim_83DBC24,
+ gSpriteAnim_83DBC2C,
+ gSpriteAnim_83DBC34,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DBC8C[] =
+{
+ gSpriteAnim_83DBC3C,
+ gSpriteAnim_83DBC44,
+ gSpriteAnim_83DBC4C,
+ gSpriteAnim_83DBC54,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DBC9C[] =
+{
+ gSpriteAnim_83DBC5C,
+ gSpriteAnim_83DBC64,
+ gSpriteAnim_83DBC6C,
+ gSpriteAnim_83DBC74,
+};
+
+/*
+const struct SpriteTemplate gSpriteTemplate_83DBCAC =
+{
+ .tileTag = 1,
+ .paletteTag = 1,
+ .oam = &gOamData_83DBC14,
+ .anims = gSpriteAnimTable_83DBC7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E85F8,
+};
+*/
+
+void sub_80E8420(void)
+{
+ struct SpriteTemplate spriteTemplate_83DBCAC =
+ {
+ .tileTag = 1,
+ .paletteTag = 1,
+ .oam = &gOamData_83DBC14,
+ .anims = gSpriteAnimTable_83DBC7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E85F8,
+ };
+ u8 spriteId;
+
+ spriteId = CreateSprite(&spriteTemplate_83DBCAC, 0, 0, 3);
+ gUnknown_083DB694->unk9C = &gSprites[spriteId];
+
+ spriteTemplate_83DBCAC.anims = gSpriteAnimTable_83DBC8C;
+ spriteTemplate_83DBCAC.callback = sub_80E872C;
+ spriteId = CreateSprite(&spriteTemplate_83DBCAC, 0, 0, 4);
+ gUnknown_083DB694->unkA0 = &gSprites[spriteId];
+
+ spriteTemplate_83DBCAC.anims = gSpriteAnimTable_83DBC9C;
+ spriteTemplate_83DBCAC.callback = sub_80E8760;
+ spriteId = CreateSprite(&spriteTemplate_83DBCAC, 0, 0, 5);
+ gUnknown_083DB694->unkA4 = &gSprites[spriteId];
+
+ gUnknown_083DB694->unk9C->data[0] = 0;
+ gUnknown_083DB694->unkA0->data[0] = 0;
+ gUnknown_083DB694->unkA4->data[0] = 0;
+
+ gUnknown_083DB694->unk9C->data[3] = 0x0101 + IndexOfSpritePaletteTag(1) * 16;
+ sub_80E8534();
+ gUnknown_083DB694->unk96 = 1;
+ REG_BLDCNT = 0x3F40;
+}
+
+void sub_80E8504(void)
+{
+ DestroySprite(gUnknown_083DB694->unk9C);
+ DestroySprite(gUnknown_083DB694->unkA0);
+ DestroySprite(gUnknown_083DB694->unkA4);
+}
+
+void sub_80E8534(void)
+{
+ if (gUnknown_083DB694->unk1B7 != 0)
+ gUnknown_020388AC = 1;
+ else if (gUnknown_083DB694->unk26 == 0)
+ gUnknown_020388AC = 0;
+ else if (gUnknown_083DB694->unk1A8 == 0 && gUnknown_083DB694->unk1A9 == 6)
+ gUnknown_020388AC = 2;
+ else
+ gUnknown_020388AC = 3;
+
+ gUnknown_083DB694->unk9C->data[2] = gUnknown_020388AC;
+ gUnknown_083DB694->unkA0->data[2] = gUnknown_020388AC;
+ gUnknown_083DB694->unkA4->data[2] = gUnknown_020388AC;
+
+ StartSpriteAnim(gUnknown_083DB694->unk9C, gUnknown_020388AC);
+ StartSpriteAnim(gUnknown_083DB694->unkA0, gUnknown_020388AC);
+ StartSpriteAnim(gUnknown_083DB694->unkA4, gUnknown_020388AC);
+
+ gUnknown_083DB694->unk9C->data[5] = 8;
+ gUnknown_083DB694->unk9C->data[6] = 8;
+ gUnknown_083DB694->unk9C->data[1] = 0;
+}
+
+extern const s8 gUnknown_083DBCC4[][7];
+
+void sub_80E85F8(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+ if (sprite->data[0] & 1)
+ sprite->data[5] = 8 + (gSineTable[sprite->data[1]] >> 5);
+ else
+ sprite->data[6] = 8 - (gSineTable[sprite->data[1]] >> 5);
+
+ sprite->data[1] = (sprite->data[1] + 5) & 0xFF;
+
+ REG_BLDALPHA = (sprite->data[6] << 8) | sprite->data[5];
+
+ if (gUnknown_083DB694->unk96 != 0)
+ {
+ sub_80E8534();
+
+ gUnknown_083DB694->unk9C->data[5] = 8;
+ gUnknown_083DB694->unk9C->data[6] = 8;
+ gUnknown_083DB694->unk9C->data[1] = 0;
+
+ switch (sprite->data[2])
+ {
+ case 0:
+ sprite->pos1.x = gUnknown_083DB694->unk1A9 * 88 + 32;
+ sprite->pos1.y = (gUnknown_083DB694->unk1A8 - gUnknown_083DB694->unk1B5) * 16 + 96;
+ break;
+ case 1:
+ sprite->pos1.x = 216;
+ sprite->pos1.y = gUnknown_083DB694->unk1A8 * 16 + 96;
+ break;
+ case 2:
+ sprite->pos1.x = 151;
+ sprite->pos1.y = 96;
+ break;
+ case 3:
+ sprite->pos1.x = gUnknown_083DBCC4[gUnknown_083DB694->unk1A8][gUnknown_083DB694->unk1A9] * 8 + 31;
+ sprite->pos1.y = (gUnknown_083DB694->unk1A8 - gUnknown_083DB694->unk1B5) * 16 + 96;
+ break;
+ }
+ }
+}
+
+void sub_80E872C(struct Sprite *sprite)
+{
+ if (gUnknown_083DB694->unk96 != 0 && sprite->data[2] == 0)
+ {
+ sprite->pos1.x = gUnknown_083DB694->unk9C->pos1.x + 32;
+ sprite->pos1.y = gUnknown_083DB694->unk9C->pos1.y;
+ }
+}
diff --git a/src/easy_chat_before.c b/src/easy_chat_before.c
index b5e87337f..5d606ef10 100644
--- a/src/easy_chat_before.c
+++ b/src/easy_chat_before.c
@@ -6,10 +6,12 @@
#include "easy_chat.h"
#include "event_data.h"
#include "ewram.h"
+#include "graphics.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
#include "sound.h"
+#include "sprite.h"
#include "string_util.h"
#include "strings.h"
#include "unknown_task.h"
@@ -19,86 +21,6 @@ extern const struct WindowConfig gWindowConfig_81E6DA8;
extern void sub_80546B8(void);
-struct Shared1000
-{
- void (*unk0)(void); // main cb 2
- u16 *unk4;
- u8 unk8;
- u8 unk9;
- u8 unkA;
- u8 unkB;
- u16 unkC[(0x20-0xC)/2]; // unknown length
- void (*unk20)(void);
- u16 unk24;
- u8 unk26;
- u8 unk27;
- u16 unk28;
- u8 unk2A[11][2]; // unknown length
- u8 unk40[4][14];
- u8 unk78[0x7D - 0x78]; // unknown length
- u8 unk7D;
- u8 unk7E[0x83-0x7E];
- s8 unk83; // s8?
- //u8 unk83; // s8?
- s8 unk84;
- s8 unk85;
- s8 unk86;
- bool8 unk87;
- u16 unk88;
- u16 unk8A;
- u8 unk8C[(0x96-0x8C)/2][2];
- u8 unk96;
- u8 filler97[0x1A8-0x97];
- s8 unk1A8;
- s8 unk1A9;
- s8 unk1AA[0xB5-0xAA]; // unknown length
- s8 unk1B5;
- s8 unk1B6;
- s8 unk1B7;
- u8 unk1B8;
- u8 unk1B9;
- u16 unk1BA;
- u8 filler1BC[0xBE - 0xBC];
- u8 unk1BE;
- u8 filler1BF;
- s8 unk1C0;
- u8 filler1C1[3];
- void (*unk1C4)(void);
- u8 filler1C8[0x4142-0x1C8];
-#if GERMAN
- u8 filler4142_de[0x32A];
-#endif
- u16 unk4142[(0x78-0x42)/2];
- u16 unk4178[(0x99A4-0x4178)/2]; // unknown length
-#if GERMAN
- u8 filler99A4_de[2];
-#endif
- s8 unk99A4;
- s8 unk99A5;
- s8 unk99A6[0xA28-0x9A6];
- s8 unk9A28;
- s8 unk9A29;
- //u8 filler9A2A[0xC7C-0xA2A];
- u16 unk9A2A[0x94][2]; // unknown length
- u8 filler9C7A[2];
- u16 unk9C7C; // this is at 0x9FA8 in German
- s16 unk9C7E;
- u8 unk9C80[0xC9-0x80];
- u8 unk9CC9[0xD12-0xCC9];
- u8 unk9D12[0x5B-0x12];
- u8 unk9D5B[0xA4-0x5B];
- u8 unk9DA4[0xC8-0xA4];
- u8 filler9DC8[0xE14 - 0xDC8];
- u8 unk9E14[0xE41 - 0xE14];
- u8 unk9E41[0xF6E - 0xE41];
- u8 unk9F6E[1]; // unknown length
-};
-
-#define static_assert(cond) \
- typedef char test_[(cond) ? 1 : -1]
-
-//static_assert(offsetof(struct Shared1000, unk9DA4) == 0x9DA4);
-
#define shared1000 (*(struct Shared1000 *)(gSharedMem + 0x1000))
const u16 gMysteryEventPhrase[] = {EC_WORD_MYSTERY, EC_WORD_EVENT, EC_WORD_IS, EC_WORD_EXCITING};
@@ -231,12 +153,15 @@ u8 sub_80E810C(void);
void sub_80E81C0(void);
void sub_80E81FC(void);
void sub_80E8218(void);
+
void sub_80E8398();
void sub_80E8420(void);
void sub_80E8504(void);
void sub_80E87CC();
+
void sub_80E88F0(void);
void sub_80E8958();
+
void sub_80E8BF4();
void sub_80E8CEC(void);
void sub_80E8D54(void);
@@ -270,7 +195,7 @@ u8 sub_80EAD7C(u8);
void sub_80EAECC(void);
void sub_80EB040(void);
void sub_80EB0B0(void);
-void sub_80EB218();
+u8 *sub_80EB218(u8 *, u16, u16);
u16 sub_80EB2D4();
bool8 sub_80EB680(u16 *, u16, u16, u16);
@@ -602,8 +527,6 @@ const u16 gUnknown_083DB7F4[] =
EC_WORD_EXCL,
};
-const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal");
-
// ResetDefaultEasyChatPhrases
void InitEasyChatPhrases(void)
{
@@ -1773,3 +1696,49 @@ bool8 sub_80E8094(void)
}
return TRUE;
}
+
+u8 sub_80E810C(void)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ u8 *ptr;
+ u8 *r3;
+
+ ptr = sub_80EB218(shared1000.unk9E6E, shared1000.unkC[0], 0);
+ *ptr++ = CHAR_SPACE;
+ sub_80EB218(ptr, shared1000.unkC[1], 0);
+
+ ptr = sub_80EB218(shared1000.unk9EEE, gBerryMasterWifePhrases[i][0], 0);
+ *ptr++ = CHAR_SPACE;
+ sub_80EB218(ptr, gBerryMasterWifePhrases[i][1], 0);
+
+ ptr = shared1000.unk9E6E;
+ r3 = shared1000.unk9EEE;
+ while (*ptr != EOS && *r3 != EOS)
+ {
+ if (*ptr++ != *r3++)
+ break;
+ }
+ if (*ptr == EOS && *r3 == EOS)
+ return i + 1;
+ }
+ return 0;
+}
+
+void sub_80E81C0(void)
+{
+ u8 *ptr;
+
+ ptr = sub_80EB218(gStringVar2, shared1000.unk9C7C, 0);
+ *ptr++ = CHAR_SPACE;
+ sub_80EB218(ptr, shared1000.unk9C7E, 0);
+}
+
+void sub_80E81FC(void)
+{
+ PlaySE(SE_SELECT);
+ sub_80E95A4();
+ MenuZeroFillWindowRect(0, 0, 29, 13);
+}