diff options
author | camthesaxman <cameronghall@cox.net> | 2018-01-03 14:30:23 -0600 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2018-01-03 14:30:23 -0600 |
commit | cf37681831a9a8289d5941e66ce673b896abf71f (patch) | |
tree | 1cdf9fa4eacec724c32dd228dc6134e29e353a1c /src | |
parent | 967d010f6dc9b7e07550154894307a24f165bbd8 (diff) |
decompile sub_80E810C - sub_80E872C
Diffstat (limited to 'src')
-rw-r--r-- | src/easy_chat_2.c | 403 | ||||
-rw-r--r-- | src/easy_chat_before.c | 135 |
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); +} |