diff options
author | camthesaxman <cameronghall@cox.net> | 2018-01-04 17:29:36 -0600 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2018-01-04 17:29:36 -0600 |
commit | c6fd37b0dffe1975159699cee3ce57c9ea5716d4 (patch) | |
tree | 4b98a43fb81a48f62d741aaaa0a90bc2747fce90 /src | |
parent | e395cc60199ef0b8dec56d3852037eaeeab42c56 (diff) |
decompile sub_80E8BF4 - sub_80E95A4
Diffstat (limited to 'src')
-rw-r--r-- | src/easy_chat_2.c | 538 | ||||
-rw-r--r-- | src/field/field_map_obj.c | 4 |
2 files changed, 540 insertions, 2 deletions
diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 0c0bc9e80..15ffa4665 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -1,9 +1,17 @@ #include "global.h" +#include "constants/map_objects.h" +#include "decompress.h" #include "easy_chat.h" +#include "field_map_obj.h" #include "graphics.h" +#include "menu.h" +#include "palette.h" #include "sprite.h" +#include "strings.h" #include "trig.h" +extern void sub_809D104(); + void sub_80E8268(void); void sub_80E82BC(struct Sprite *); void sub_80E8534(void); @@ -14,6 +22,12 @@ void sub_80E8818(void); void sub_80E8860(struct Sprite *); void sub_80E8A7C(void); void sub_80E8B78(struct Sprite *); +void sub_80E8FA4(void); +void sub_80E9198(u8); +void sub_80E91D4(u8); +void sub_80E948C(void); +void sub_80E95A4(void); +void sub_80E9620(u16, u16); const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal"); const u16 InterviewPalette_1[] = INCBIN_U16("graphics/misc/interview_pal1.gbapal"); @@ -706,3 +720,527 @@ void sub_80E8B78(struct Sprite *sprite) } } } + +// defined below +extern const struct SpriteTemplate gSpriteTemplate_83DBD48; + +void sub_80E8BF4(u8 reporter, u8 b) +{ + struct CompressedSpriteSheet gUnknown_083DBD30 = {gMenuInterviewFrame_Gfx, 2048, 0x0006}; + struct SpritePalette gUnknown_083DBD38 = {gMenuInterviewFrame_Pal, 0x0004}; + s16 x; + s16 y; + u16 gabbyTyGfxId; + u8 spriteId; + + switch (b) + { + case 2: + default: + x = 64; + y = 40; + break; + case 5: + x = 36; + y = 48; + break; + } + + switch (reporter) + { + case 0: // Gabby + default: + gabbyTyGfxId = MAP_OBJ_GFX_REPORTER_M; + break; + case 1: // Ty + gabbyTyGfxId = MAP_OBJ_GFX_REPORTER_F; + break; + } + + LoadCompressedObjectPic(&gUnknown_083DBD30); + LoadSpritePalette(&gUnknown_083DBD38); + CreateSprite(&gSpriteTemplate_83DBD48, x, y, 1); + + spriteId = AddPseudoFieldObject( + (gSaveBlock2.playerGender == MALE) ? MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL : MAP_OBJ_GFX_RIVAL_MAY_NORMAL, + SpriteCallbackDummy, x - 12, y, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.priority = 0; + StartSpriteAnim(&gSprites[spriteId], 3); + } + + spriteId = AddPseudoFieldObject(gabbyTyGfxId, SpriteCallbackDummy, x + 12, y, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.priority = 0; + StartSpriteAnim(&gSprites[spriteId], 2); + } +} + +const struct OamData gOamData_83DBD40 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct SpriteTemplate gSpriteTemplate_83DBD48 = +{ + .tileTag = 6, + .paletteTag = 4, + .oam = &gOamData_83DBD40, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct CompressedSpriteSheet gUnknown_083DBD60 = {gMenuWordGroupIndicator_Gfx, 4096, 0x0007}; + +const struct SpritePalette gUnknown_083DBD68 = {gMenuWordGroupIndicator_Pal, 0x0005}; + +const struct OamData gOamData_83DBD70 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83DBD78[] = +{ + ANIMCMD_FRAME(96, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DBD80[] = +{ + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(96, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DBD94[] = +{ + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(96, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DBDA8[] = +{ + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DBDB4[] = +{ + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DBDC0[] = +{ + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(96, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DBDCC[] = +{ + gSpriteAnim_83DBD78, + gSpriteAnim_83DBD80, + gSpriteAnim_83DBD94, + gSpriteAnim_83DBDA8, + gSpriteAnim_83DBDB4, + gSpriteAnim_83DBDC0, +}; + +const struct SpriteTemplate gSpriteTemplate_83DBDE4 = +{ + .tileTag = 7, + .paletteTag = 5, + .oam = &gOamData_83DBD70, + .anims = gSpriteAnimTable_83DBDCC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void sub_80E8CEC(void) +{ + u8 spriteId; + + LoadCompressedObjectPic(&gUnknown_083DBD60); + LoadSpritePalette(&gUnknown_083DBD68); + + spriteId = CreateSprite(&gSpriteTemplate_83DBDE4, 224, 88, 0); + if (spriteId != MAX_SPRITES) + gUnknown_083DB694->unk9C74 = &gSprites[spriteId]; + else + gUnknown_083DB694->unk9C74 = NULL; +} + +void sub_80E8D54(void) +{ + if (gUnknown_083DB694->unk9C74 != NULL) + { + if (gUnknown_083DB694->unk26 == 0) + StartSpriteAnim(gUnknown_083DB694->unk9C74, 1); + else + StartSpriteAnim(gUnknown_083DB694->unk9C74, 2); + } +} + +void sub_80E8D8C(u8 a) +{ + if (gUnknown_083DB694->unk9C74 != NULL) + { + if (a != 0) + { + if (gUnknown_083DB694->unk26 == 0) + StartSpriteAnim(gUnknown_083DB694->unk9C74, 3); + else + StartSpriteAnim(gUnknown_083DB694->unk9C74, 4); + } + else + { + StartSpriteAnim(gUnknown_083DB694->unk9C74, 5); + } + } +} + +extern const u16 gUnknown_083DBDFC[]; + +extern const u16 gUnknown_083DBE40[]; + +void sub_80E8DD8(void) +{ + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + + REG_BG0CNT = 0x8B00; + REG_BG1CNT = 0x0D09; + + CpuCopy16(gUnknown_08E945D0, gUnknown_083DB694->unk1C8, 0x500); + LZ77UnCompWram(gUnknown_08E953D0, gUnknown_083DB694->unk6C8); + LZ77UnCompVram(gMenuWordGroupFrame_Gfx, (void *)(VRAM + 0x8000)); + CpuCopy16(gUnknown_083DB694->unk1C8, (void *)(VRAM + 0x6800), 0x500); + LoadPalette(gMenuWordGroupFrame1_Pal, 64, 64); + + REG_BG2CNT = 0x0E02; + + DmaClear16(3, (void *)(VRAM + 0x7000), 0x800); + DmaCopy16Defvars(3, gUnknown_08E9AB00, (void *)(VRAM + 0x6000), 64); + LZ77UnCompVram(gUnknown_08E9AB60, (void *)(VRAM + 0x7000)); + LoadPalette(gUnknown_08E9AB40, 0, 32); + LoadPalette(gUnknown_083DBDFC, 16, 32); + + REG_BG3CNT = 0x0F0F; + + DmaClear32(3, (void *)(VRAM + 0x7800), 0x800); + LoadPalette(gUnknown_083DBE40, 32, 32); + gPlttBufferUnfaded[63] = RGB(31, 31, 31); + gPlttBufferUnfaded[49] = RGB(27, 26, 27); + gPlttBufferUnfaded[56] = RGB(28, 28, 28); + gPlttBufferFaded[63] = RGB(31, 31, 31); + gPlttBufferFaded[49] = RGB(27, 26, 27); + gPlttBufferFaded[56] = RGB(28, 28, 28); + + gUnknown_083DB694->unkBC = 0; + sub_80E8FA4(); + sub_80E948C(); + sub_80E9198(10); + sub_80E91D4(0); + sub_80E95A4(); + + REG_BLDCNT = 0; +} + +// The components are ORed in the reverse order from the normal RGB macro +#define RGB_(r, g, b) ((((b) & 0x1F) << 10) | (((g) & 0x1F) << 5) | ((r) & 0x1F)) + +#define R_VAL(color) ((color) & 0x1F) +#define G_VAL(color) (((color) >> 5) & 0x1F) +#define B_VAL(color) (((color) >> 10) & 0x1F) + +void sub_80E8FA4(void) +{ + u16 i; + u16 r3; + u16 r4; + s32 sp0[3]; + s32 spC[3]; + s32 sp18[3]; + + for (i = 0; i < 3; i++) + { + sp0[0] = R_VAL(*(gMenuWordGroupFrame2_Pal + i + 1)) << 8; + spC[0] = R_VAL(*(gMenuWordGroupFrame2_Pal + i + 4)) << 8; + sp0[1] = G_VAL(*(gMenuWordGroupFrame2_Pal + i + 1)) << 8; + spC[1] = G_VAL(*(gMenuWordGroupFrame2_Pal + i + 4)) << 8; + sp0[2] = B_VAL(*(gMenuWordGroupFrame2_Pal + i + 1)) << 8; + spC[2] = B_VAL(*(gMenuWordGroupFrame2_Pal + i + 4)) << 8; + + for (r3 = 0; r3 < 3; r3++) + sp18[r3] = (spC[r3] - sp0[r3]) / 8; + + for (r4 = 0; r4 < 8; r4++) + { + gUnknown_083DB694->unk9C34[i][r4] = RGB_(sp0[0] >> 8, sp0[1] >> 8, sp0[2] >> 8); + for (r3 = 0; r3 < 3; r3++) + sp0[r3] += sp18[r3]; + } + gUnknown_083DB694->unk9C34[i][r4] = RGB_(spC[0] >> 8, spC[1] >> 8, spC[2] >> 8); + } + gUnknown_083DB694->unk9C32 = 0; +} + +void sub_80E9108(u8 a) +{ + u16 i; + + gUnknown_083DB694->unk9C32 += a; + for (i = 0; i < 3; i++) + { + gPlttBufferUnfaded[81 + i] = gUnknown_083DB694->unk9C34[i][gUnknown_083DB694->unk9C32]; + gPlttBufferFaded[81 + i] = gUnknown_083DB694->unk9C34[i][gUnknown_083DB694->unk9C32]; + } +} + +void sub_80E9178(void) +{ + gUnknown_083DB694->unk9C32 = 0; + sub_80E9108(0); +} + +void sub_80E9198(u8 a) +{ + gUnknown_03000740 = a; +} + +u8 sub_80E91A4(void) +{ + return gUnknown_03000740; +} + +void sub_80E91B0(const u8 *a, u8 b, u8 c, u8 d) +{ + sub_8072AB0(a, b * 8, c * 8, 176, d * 8, 1); +} + +void sub_80E91D4(u8 a) +{ + BasicInitMenuWindow(&gWindowConfig_81E6DA8); + + if (a == 10) + { + MenuZeroFillWindowRect(3, 14, 26, 19); + sub_80E9198(10); + return; + } + + //_080E9200 + if (sub_80E91A4() == 10) + MenuDrawTextWindow(3, 14, 26, 19); + + //_080E9218 + sub_80E9198(a); + switch (a) + { + case 0: + sub_80E91B0(gUnknown_083DB694->unk9C80, 4, 15, 2); + sub_80E91B0(gUnknown_083DB694->unk9CC9, 4, 17, 2); + break; + case 1: + sub_80E91B0(gUnknown_083DB694->unk9D12, 4, 15, 2); + sub_80E91B0(gUnknown_083DB694->unk9D5B, 4, 17, 2); + break; + case 2: + sub_80E91B0(gOtherText_TextDeletedConfirmPage1, 4, 15, 2); + sub_80E91B0(gOtherText_TextDeletedConfirmPage2, 4, 17, 2); + break; + case 3: + switch (gUnknown_083DB694->unk8) + { + case 9: + sub_80E91B0(gOtherText_QuitGivingInfo, 4, 15, 4); + break; + case 4: + sub_80E91B0(gOtherText_StopGivingMail, 4, 15, 4); + break; + default: + sub_80E91B0(gOtherText_QuitEditing, 4, 15, 4); + break; + } + break; + case 4: + sub_80E91B0(gOtherText_EditedTextNoSavePage1, 4, 15, 2); + sub_80E91B0(gOtherText_EditedTextNoSavePage2, 4, 17, 2); + break; + case 5: + sub_80E91B0(gOtherText_EnterAPhraseOrWord, 4, 15, 4); + break; + case 6: + sub_80E91B0(gOtherText_TextNoDelete, 4, 15, 4); + break; + case 7: + sub_80E91B0(gOtherText_OnlyOnePhrase, 4, 15, 2); + sub_80E91B0(gOtherText_OriginalSongRestored, 4, 17, 2); + break; + case 8: + sub_80E91B0(gOtherText_TrendyAlready, 4, 15, 4); + break; + case 9: + sub_80E91B0(gOtherText_CombineTwoPhrases, 4, 15, 4); + break; + } +} + +void sub_80E9368(u8 a) +{ + const u8 *r4; + + switch (a) + { + case 0: + r4 = gOtherText_Profile; + break; + case 1: + r4 = gOtherText_AtBattleStart; + break; + case 2: + r4 = gOtherText_UponWinningBattle; + break; + case 3: + r4 = gOtherText_UponLosingBattle; + break; + case 6: + r4 = gOtherText_TheBardsSong; + break; + case 9: + r4 = gOtherText_WhatsHipHappening; + break; + case 5: + case 7: + case 8: + case 10: + case 11: + case 12: + r4 = gOtherText_Interview; + break; + case 13: + r4 = gOtherText_GoodSaying; + break; + default: + r4 = NULL; + break; + } + + BasicInitMenuWindow(&gWindowConfig_81E6D8C); + gUnknown_083DB694->unk9F8E[0] = EXT_CTRL_CODE_BEGIN; + gUnknown_083DB694->unk9F8E[1] = 5; + gUnknown_083DB694->unk9F8E[2] = 1; + if (r4 != NULL) + { + sub_8072C74(gUnknown_083DB694->unk9F8E + 3, r4, 240, 2); + MenuPrint(gUnknown_083DB694->unk9F8E, 0, 0); + } + else + { + u8 *str = gUnknown_083DB694->unk9F8E + 3; + + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = 0x11; + str[2] = 0x10; + str[3] = EOS; + + MenuPrint(gUnknown_083DB694->unk9F8E, 0, 0); + MenuPrint(gUnknown_083DB694->unk9F8E, 28, 0); + } + BasicInitMenuWindow(&gWindowConfig_81E6DA8); +} + +void sub_80E948C(void) +{ + switch (gUnknown_083DB694->unk9) + { + case 4: + sub_809D104((void *)(VRAM + 0x6800), 3, 3, gUnknown_08E94AD0, 0, 26, 24, 6); + break; + case 5: + sub_809D104((void *)(VRAM + 0x6800), 14, 2, gUnknown_08E94AD0, 0, 18, 13, 8); + break; + case 0: + sub_809D104((void *)(VRAM + 0x6800), 2, 2, gUnknown_08E94AD0, 0, 10, 26, 8); + break; + case 1: + sub_809D104((void *)(VRAM + 0x6800), 2, 0, gUnknown_08E94AD0, 0, 0, 26, 10); + break; + case 2: + sub_809D104((void *)(VRAM + 0x6800), 14, 3, gUnknown_08E94AD0, 13, 18, 13, 4); + break; + case 3: + sub_809D104((void *)(VRAM + 0x6800), 3, 2, gUnknown_08E94AD0, 0, 32, 24, 4); + break; + } +} + +void sub_80E95A4(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E6D8C); + switch (gUnknown_083DB694->unk9) + { + case 4: + sub_80E9620(4, 6); + break; + case 5: + sub_80E9620(2, 17); + break; + case 0: + sub_80E9620(3, 5); + break; + case 1: + sub_80E9620(0, 5); + break; + case 2: + sub_80E9620(4, 17); + break; + case 3: + sub_80E9620(3, 6); + break; + } + BasicInitMenuWindow(&gWindowConfig_81E6DA8); +} diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index ba7c3d68e..77b4c8b5c 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -2440,7 +2440,7 @@ void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjT MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObjTemplate->graphicsId, mapObjTemplate->movementType, sprTemplate, subspriteTables); } -u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 c, s16 d, u8 subpriority) +u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { struct SpriteTemplate spriteTemplate; const struct SubspriteTable *subspriteTables; @@ -2449,7 +2449,7 @@ u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 c MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, callback, &spriteTemplate, &subspriteTables); if (spriteTemplate.paletteTag != 0xFFFF) sub_805BDF8(spriteTemplate.paletteTag); - spriteId = CreateSprite(&spriteTemplate, c, d, subpriority); + spriteId = CreateSprite(&spriteTemplate, x, y, subpriority); if (spriteId != 64 && subspriteTables != NULL) { SetSubspriteTables(&gSprites[spriteId], subspriteTables); |