Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions include/extra/FE8.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Vanilla definitions not in gbafe.h.

// Functions.
const void NewFadeIn(int fadeRate);
const void NewFadeOut(int fadeRate);
const int FadeInExists();
const int FadeOutExists();
const void StartEkrAnimeDrvProc();
const void EndEkrAnimeDrvProc();
const int GetValueFromEasingFunction(u8 rateFunction, int startX, int endX, u32 currentT, u32 endT); //! FE8U = 0x8012DCC
const void CopyTileGfxForObj(void* src, void* dest, u8 width, u8 height);
ProcState* startopinfoview(ProcState* parent, int charIndex);
const void drawopinfochars(u8 charIndex, int X, int Y, u16 width, u16 height, u8 paletteDarkness);
const void _ProcSleepCallback(Proc* proc);
const void* MMS_GetGfx(u8 classID);
const void Sound_SongTransition(u16 songID, u32 unk1, u32 unk2, int speed, u32 unk4);
const Proc* StartScreenMenuScrollingBg(Proc* parent, void* graphicsDest, u8 paletteSlot); //! FE8U = 0x8086BB8
const void SetEventId(u16 eventId); //! FE8U = 0x8083D80
const void UnsetEventId(u16 eventId); //! FE8U = 0x8083D94
const u8 CheckEventId(u16 eventId); //! FE8U = 0x8083DA8

// Procs.
extern const ProcInstruction gProc_FadeOut[];
extern const ProcInstruction gProc_FadeIn[];
extern const ProcInstruction gProc_ekrUnitMainMini[];

// Graphics.
extern const void* ClassReelBGTiles;
extern const u16 ClassReelBGPalette[16];
extern const u16 gPal_ClassReelGlyphs2[16]; //! FE8U = 0x8A37300
extern const void* op_class_font_address[];
extern Proc* ClassReelLetterProcs[20];
extern const u16 gPal_MapSprite[112];

// OAMData.
extern const ObjData gObj_8x8;
extern const ObjData gObj_16x16;
extern const ObjData gObj_32x32;
extern const ObjData gObj_16x32;

// Buffers.
extern u8 gSMSGfxBuffer_Frame1[0x2000];
extern u8 gSMSGfxBuffer_Frame2[0x2000];
extern u8 gSMSGfxBuffer_Frame3[0x2000];
extern u16 gpStatScreenPageBg0Map[0x280]; //! FE8U = 0x2003D2C
extern u16 gpStatScreenPageBg1Map[0x280]; //! FE8U = 0x200422C
extern u16 gpStatScreenPageBg2Map[0x280]; //! FE8U = 0x200472C
43 changes: 39 additions & 4 deletions include/gbafe/animinterpreter.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

typedef struct AnimationInterpreter AnimationInterpreter;
typedef struct AnimationInterpreter AIStruct;
typedef struct AnimationInterpreterBuffer AISBuffer;

struct AnimationInterpreter {
/* 00 */ u16 state;
Expand All @@ -20,21 +21,51 @@ struct AnimationInterpreter {
/* 13 */ u8 frameIndex;

/* 14 */ u8 queuedCommandCount;
/* 15 */ u8 commandQueue[0xB];
/* 15 */ u8 commandQueue[0x7];

/* 1C */ u16 oam0base;
/* 1E */ u16 oam1base;

/* 20 */ const void* pCurrentFrame;
/* 24 */ const void* pStartFrame;
/* 28 */ const void* pUnk28;
/* 2C */ const void* pUnk2C;
/* 28 */ const void* pSheet;
/* 2C */ const void* pSheetBuffer;
/* 30 */ const void* pStartObjData; // aka "OAM data"

/* 34 */ struct AnimationInterpreter* pPrev;
/* 38 */ struct AnimationInterpreter* pNext;

/* 40 */ const void* pUnk40;
/* 44 */ const void* pUnk44;
/* 44 */ const struct AISBuffer* pAISBuffer;
};

// Used by class reel, where it's stored at 0x2000000.
struct AnimationInterpreterBuffer {
/* 00 */ u8 unk0;
/* 01 */ u8 genericPalID;
/* 02 */ s16 xPos;
/* 04 */ s16 yPos;
/* 06 */ u16 animID;
/* 08 */ u16 charPalID; // If -1, genericPalID is used.
/* 0A */ u16 AISMode; // 0: melee, 1: melee critical, 6: Equipped with melee weapon, etc.
/* 0C */ u16 state2; // Orred with AIS+0xCh.
/* 0E */ u16 tileOffset;
/* 10 */ u16 palOffset;
/* 14 */ AIStruct* AIS1;
/* 18 */ AIStruct* AIS2;
/* 1C */ void* sheet;
/* 20 */ void* pal;
/* 24 */ void* rtlOAM;
/* 28 */ void* frameData;
/* 2C */ void* sheetPointer;
/* 30 */ struct AISMagicEffectsBuffer* magicEffects;
/* 34 */ Proc* Procs_ekrUnitMainMini;
};
extern AISBuffer gAISBuffer; //! FE8U = 0x2000000
const void LoadBufferIntoAIS(AISBuffer* aisBuffer);
const void StartEkrUnitMainMini(AISBuffer* aisBuffer);
const void EndEkrUnitMainMini(AISBuffer* aisBuffer);

extern u8 gBattleCharacterIndices[2]; //! FE8U = 0x203E190

void UpdateAISs(void); //! FE8U = 0x8004E41
Expand All @@ -50,4 +81,8 @@ int GetBattleAnimRoundType(int index); //! FE8U = 0x8058A0D

void StartEkrNamewinAppear(int, int, int);

// This function starts and returns a proc that mimics an AIS, without adding an AIS to the AISarray.
// unk3 is some kind of control code I think.
struct Proc* StartEkrsubAnimeEmulator(s16 X, s16 Y, void* frameData, u8 unk3, struct Proc* parent, u32 OAM0OAM1, u16 OAM2); //! FE8U = 0x80716C9

#endif // GBAFE_ANIMINTERPRETER_H
6 changes: 6 additions & 0 deletions include/gbafe/battle.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,15 @@ extern struct BattleHit* gBattleHitIterator;

// Functions

void CheckBattleUnitLevelUp(struct BattleUnit* bu); //! FE8U = 0x802BA29
void UpdateUnitFromBattle(Unit* u, struct BattleUnit* bu); //! FE8U = 0x802C1ED
int GetStatIncrease(int growth); //! FE8U = 0x802B9A1

int BattleUnit_ShouldDisplayWpnBroke(struct BattleUnit* bu); //! FE8U = 0x807A771
int BattleUnit_ShouldDisplayWRankUp(struct BattleUnit* bu); //! FE8U = 0x802C1B1

void InitBattleUnit(struct BattleUnit* bu, struct Unit* u); //! FE8U = 0x802A585

int IsBattleDeamonActive(); //! FE8U = 0x804FDA1

#endif // GBAFE_BATTLE_H
7 changes: 5 additions & 2 deletions include/gbafe/chapterdata.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,12 @@ struct ChapterState {
u32 textSpeedOption:2;
u32 gameSpeedOption:1;

u32 unk41_1:1;
u32 muteMusOption:1;
u32 muteSfxOption:1;
u32 unk41_3:5;
u32 windowColour:2;
u32 BWLDisplay:1;
u32 unk41_6:1;
u32 autoEndTurns:1;
u32 subtitleHelpOption:1;

u32 unk42_1:1;
Expand Down
43 changes: 43 additions & 0 deletions include/gbafe/dialogue.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,44 @@

#include "proc.h"

struct DialogueState {
/* 00 */ void* charPointer;
/* 04 */ u32 unk4;
/* 08 */ s8 defaultTextColId;
/* 09 */ u8 currLine;
/* 0A */ u8 displayLineCount;
/* 0B */ u8 currLineId;

/* 0C */ u8 xPos;
/* 0D */ u8 yPos;
/* 0E */ u8 width;

/* 0F */ u8 facePos;
/* 10 */ u8 facePos2;
/* 11 */ u8 currFacePos;

/* 12 */ u8 displayInstantly;
/* 13 */ u8 charDelay;
/* 14 */ u8 delayCounter;

/* 15 */ u8 textDrawnFlag;

/* 16 */ u8 toggleMouthMove;
/* 17 */ u8 toggleSmile;

/* 18 */ u32 faceProcs[8];
/* 38 */ u32 unk38;

/* 3C */ u32 goldAmount;
/* 40 */ char goldAmountChars[0x20];
/* 60 */ char someString[0x20];

/* 80 */ u16 bitfield; // Enumerated below

/* 82 */ u8 unk82;
/* 83 */ u8 toggleInvertFlags;
};

enum
{
// Dialogue flags
Expand All @@ -29,14 +67,19 @@ enum

// TODO: more

void Dialogue_BoxAppearingAnimationLoop(struct Proc* proc); //!< FE8U:080083F9
void Dialogue_InitGfx(unsigned tileId, unsigned lineCount, u8 boolUseBubble); //!< FE8U:0800680D
void Dialogue_InitFont(void); //!< FE8U:08006979
void StartDialogue(int xTile, int yTile, const char* cstring, struct Proc* parent); //!< FE8U:0800698D
void SetDialogueFlag(unsigned flag); //!< FE8U:08006AA9
void Dialogue_SetDefaultTextColor(int color); //!< FE8U:08006B11
void Dialogue_SetActiveFacePosition(unsigned dialogueSlot); //!< FE8U:08007839
// void StartDialogueFace(unsigned portrait, int x, int y, unsigned display, unsigned dialogueSlot); //!< FE8U:08007939
void Procs_TextBoxSlideAnimationLoop(Proc* proc); //!< FE8U: 08007FDC
void Procs_TextBoxSlideAnimation2Loop(Proc* proc); //!< FE8U: 08007DA4
// void Dialogue_ClearLines(void); //!< FE8U:08008251
int GetLastDialoguePromptResult(void); //!< FE8U:08008A01

extern struct DialogueState* gpDialogueState; //!< FE8U:0859133C

#endif // GBAFE_DIALOGUE_H
7 changes: 6 additions & 1 deletion include/gbafe/face.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ struct FaceProc
/* 44 */ struct Proc* _pu44Proc;
/* 48 */ struct Proc* pEyeWinkProc;
};
extern FaceProc* gpFaceProcs[4]; //! FE8U = 0x3004980

struct FaceBlinkProc
{
Expand All @@ -58,13 +59,17 @@ struct FaceGfxDefinition
const void* pTileRoot;
u16 paletteIndex;
};
extern FaceGfxDefinition gFaceGfxData[4]; //! FE8U = 0x202A68C.

const PortraitData* GetPortraitData(int portraitId); //! FE8U = 0x8005515
void Face_Init(void); //! FE8U = 0x8005529
void SetFaceGfxConfig(const FaceGfxDefinition[4]); //! FE8U = 0x8005545
struct FaceProc* StartFace(int faceId, int portraitId, int x, int y, int idk); //! FE8U = 0x800563D
void FACE_Load(FaceProc* faceProc); //! FE8U = 0x8005595
struct FaceProc* StartFace(int faceId, int portraitId, int x, int y, u32 displayBits); //! FE8U = 0x800563D
void EndFace(struct FaceProc*); //! FE8U = 0x8005739
void EndFaceById(int index); //! FE8U = 0x8005759
int SetFaceDisplayBits(FaceProc* proc, u32 displayBits); //! FE8U = 0x8005771
u32 GetFaceDisplayBits(FaceProc* proc); //! FE8U = 0x80057A5
int ShouldPortraitBeSmol(int portraitId); //! FE8U = 0x8005C25

#endif // GBAFE_FACE_H
5 changes: 3 additions & 2 deletions include/gbafe/hardware.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ struct KeyStatusBuffer
extern struct LCDIOBuffer gLCDIOBuffer; //! FE8U = 0x3003080

extern u16 gPaletteBuffer[0x200]; //! FE8U = 0x20228A8
extern u16 gPaletteFadeBuffer[0x200]; //! FE8U = 0x202B6B0

extern u16 gBg0MapBuffer[0x400]; //! FE8U = 0x2022CA8
extern u16 gBg1MapBuffer[0x400]; //! FE8U = 0x20234A8
Expand Down Expand Up @@ -122,8 +123,8 @@ void SyncLCDControl(void); //! FE8U = 0x8000E9D
u32 GetBgControlBuffer(int); //! FE8U = 0x8000F45
u32 GetBgTileDataOffset(int); //! FE8U = 0x8000F8D
int GetBgLocalTileIndex(int); //! FE8U = 0x8000FA5
void SetBgTileDataOffset(int, u32); //! FE8U = 0x8000FDD
void SetBgMapDataOffset(int, u32); //! FE8U = 0x8001005
void SetBgTileDataOffset(int BGID, u32 charBlock); //! FE8U = 0x8000FDD
void SetBgMapDataOffset(int BGID, u32 screenBlock); //! FE8U = 0x8001005
void SetBgScreenSize(int); //! FE8U = 0x800104D

void SyncPalettes_AdditiveFilter(int); //! FE8U = 0x8001095
Expand Down
2 changes: 2 additions & 0 deletions include/gbafe/other.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,6 @@ void* memset(void* dest, int ch, unsigned int count); //! FE8U = (0x080D1C6C+1)
char* strcpy(char* dest, const char* src);
unsigned strlen(const char* cstr);

void* FadePalette(u16* paletteBuffer, u8 palIndex, u8 palCount, u8 darkness); //! FE8U = 0x80712B1

#endif // GBAFE_OTHER_H
52 changes: 48 additions & 4 deletions include/gbafe/sound.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@
#include "common.h"
#include "chapterdata.h"

typedef struct SongTableEntry SongTableEntry;
typedef struct MusicPlayerInfo MusicPlayerInfo;

// TODO
int Sound_GetCurrentSong(void); //! FE8U = 0x8002259
u16 Sound_GetCurrentSong(void); //! FE8U = 0x8002259
s8 Sound_IsSongPlaying(void); //! FE8U = 0x8002265
void Sound_SetVolume_8002274(int volume); //! FE8U = 0x8002275
void Sound_SetSongVolume(int volume); //! FE8U = 0x80022ED
void Sound_FadeSongOut(int speed); //! FE8U = 0x800231D
void Sound_FadeOut_800237C(int speed); //! FE8U = 0x800237D
void Sound_FadeOut_80023E0(int speed); //! FE8U = 0x80023E1
void Sound_PlaySong(int songId, void* player); //! FE8U = 0x8002449 // TODO: struct MusicPlayerInfo
void Sound_FadeOut_Song(int speed); //! FE8U = 0x800237D
void Sound_FadeOut_Sfx(int speed); //! FE8U = 0x80023E1
void Sound_PlaySong(int songId, void* player); //! FE8U = 0x8002449
void Sound_PlaySongSmoothCommon(int songId, int speed, void* player); //! FE8U = 0x8002479
void Sound_PlaySongSmooth(int songId, void* player); //! FE8U = 0x80024D5
void Sound_PlaySongSmoothExt(int songId, int speed, void* player); //! FE8U = 0x80024E5
Expand All @@ -32,4 +35,45 @@ void m4aSongNumStart(int);
m4aSongNumStart(aSongId); \
} while (0)

struct SongTableEntry {
/* 00 */ const void* songHeader;
/* 04 */ const u32 priority;
};
extern const SongTableEntry gSongTable[]; //! FE8U = 0x224470

// Thanks to 7743 for the details on this. TODO, not everything here is final.
struct MusicPlayerInfo {
/* 00 */ void* songHeader;
/* 04 */ u32 status;
/* 08 */ u8 trackCount;
/* 09 */ u8 priority;
/* 0A */ u8 cmd;
/* 0B */ u8 unk_B;
/* 0C */ u32 clock;
/* 10 */ u8 gap[8];
/* 18 */ u32 memAccAreaPtr;
/* 1C */ u16 tempoD;
/* 1E */ u16 tempoU;
/* 20 */ u16 tempoI;
/* 22 */ u16 tempoC;
/* 24 */ u16 fadeOI;
/* 26 */ u16 fadeOC;
/* 28 */ u16 fadeOV;
/* 2A */ u16 _pad2A;
/* 2C */ void* tracksArray;
/* 30 */ void* instrument_tonedata_topdata;
/* 34 */ u32 ident;
/* 38 */ u32 func;
/* 3C */ u32 intp;
};
extern MusicPlayerInfo gMusicPlayerInfo0; //! FE8U = 0x3006440
extern MusicPlayerInfo gMusicPlayerInfo1; //! FE8U = 03006650
extern MusicPlayerInfo gMusicSEPlayerInfo2; //! FE8U = 03006690
extern MusicPlayerInfo gMusicSEPlayerInfo3; //! FE8U = 030066D0
extern MusicPlayerInfo gMusicSEPlayerInfoUnk1; //! FE8U = 030063C0
extern MusicPlayerInfo gMusicSEPlayerInfoUnk2; //! FE8U = 03006400
extern MusicPlayerInfo gMusicSEPlayerInfoUnk3; //! FE8U = 03006610
extern MusicPlayerInfo gMusicSEPlayerInfo4; //! FE8U = 03006720
extern MusicPlayerInfo gMusicSEPlayerInfo5; //! FE8U = 03006760

#endif // GBAFE_SOUND_H
2 changes: 1 addition & 1 deletion include/gbafe/unit.h
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ void UnitLoadStatsFromChracter(struct Unit*, const struct CharacterData*); //! F
void FixROMUnitStructPtr(struct Unit*); //! FE8U = 0x8017EBD
void UnitLoadSupports(struct Unit*); //! FE8U = 0x8017EF5
void UnitAutolevelWExp(struct Unit*); //! FE8U = 0x8017F21
void UnitAutolevelCore(struct Unit*, int, int); //! FE8U = 0x8017FC5
void UnitAutolevelCore(struct Unit*, u8 classIndex, s8 levelCount); //! FE8U = 0x8017FC5
void UnitAutolevelPenalty(struct Unit*, int, int); //! FE8U = 0x8018065
void UnitApplyBonusLevels(struct Unit*, int); //! FE8U = 0x80180CD
void UnitAutolevel(struct Unit*); //! FE8U = 0x8018121
Expand Down
7 changes: 7 additions & 0 deletions include/gbafeext.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#ifndef GBAFEEXT_H
#define GBAFEEXT_H

#include "gbafe.h"
#include "extra/FE8.h"

#endif // GBAFEEXT_H
Loading