summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2018-01-04 17:29:36 -0600
committercamthesaxman <cameronghall@cox.net>2018-01-04 17:29:36 -0600
commitc6fd37b0dffe1975159699cee3ce57c9ea5716d4 (patch)
tree4b98a43fb81a48f62d741aaaa0a90bc2747fce90 /src
parente395cc60199ef0b8dec56d3852037eaeeab42c56 (diff)
decompile sub_80E8BF4 - sub_80E95A4
Diffstat (limited to 'src')
-rw-r--r--src/easy_chat_2.c538
-rw-r--r--src/field/field_map_obj.c4
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);