Data Import tt_002 (#1896)
Some checks are pending
Format code / format (push) Waiting to run
Build C code / extract-assets (push) Waiting to run
Build C code / build-linux (i686, Debug, clang, custom) (push) Blocked by required conditions
Build C code / build-linux (i686, Debug, clang, lle) (push) Blocked by required conditions
Build C code / build-linux (i686, Debug, gcc, custom) (push) Blocked by required conditions
Build C code / build-linux (i686, Debug, gcc, lle) (push) Blocked by required conditions
Build C code / build-linux (i686, RelWithDebInfo, clang, custom) (push) Blocked by required conditions
Build C code / build-linux (i686, RelWithDebInfo, clang, lle) (push) Blocked by required conditions
Build C code / build-linux (i686, RelWithDebInfo, gcc, custom) (push) Blocked by required conditions
Build C code / build-linux (i686, RelWithDebInfo, gcc, lle) (push) Blocked by required conditions
Build C code / build-linux (x86_64, Debug, clang, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, Debug, clang, lle) (push) Blocked by required conditions
Build C code / build-linux (x86_64, Debug, gcc, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, Debug, gcc, lle) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, clang, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, clang, lle) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, gcc, custom) (push) Blocked by required conditions
Build C code / build-linux (x86_64, RelWithDebInfo, gcc, lle) (push) Blocked by required conditions
Build C code / build-macos (Debug, custom) (push) Blocked by required conditions
Build C code / build-macos (Debug, lle) (push) Blocked by required conditions
Build C code / build-macos (RelWithDebInfo, custom) (push) Blocked by required conditions
Build C code / build-macos (RelWithDebInfo, lle) (push) Blocked by required conditions
Build C code / build-windows (Debug, custom) (push) Blocked by required conditions
Build C code / build-windows (Debug, lle) (push) Blocked by required conditions
Build C code / build-windows (RelWithDebInfo, custom) (push) Blocked by required conditions
Build C code / build-windows (RelWithDebInfo, lle) (push) Blocked by required conditions
Build Saturn version / build-and-test-saturn (push) Waiting to run
Build Saturn version / function-finder-saturn (push) Waiting to run
Build Debug Module tool / build (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, hd) (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, pspeu) (push) Waiting to run
Build PSX and PSP version / build-and-test (us, us) (push) Waiting to run
Build PSX and PSP version / generate-progress-report (pspeu, hd) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (pspeu, pspeu) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report-psp (pspeu, pspeu) (push) Blocked by required conditions

Importing the remaining data for tt_002
Importing sbss data
Adjusting the data files

The data except for the servant_events data is all unique to the faerie.
I suppose all the data could be put in 1 file, but I had it split up
because ghost and bat shared a significant amount of data.

~~D_us_801724CC[] should actually be an array of Unkstruct_801724CC;
however, that doesn't match because it's on a 2 byte barrier and the
compiler wants to align it to 4 bytes. I tried #pragma pack and
__attributed__((packed)) and a few other things with no avail. So that
and the cast to Unkstruct_801724CC in func_us_80177F84 are just going to
have to be wonky.~~
This issue was figured out by @Xeeynamo 

I didn't really do any refactoring beyond what I needed to in order to
get the data in. I'll work on that next.
This commit is contained in:
H.M. Burger 2024-11-13 08:41:34 -06:00 committed by GitHub
parent e10458d4b8
commit a91c2acd3c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 587 additions and 203 deletions

View File

@ -38,16 +38,13 @@ segments:
align: 4
subalign: 4
subsegments:
- [0x0, .data, 3678]
- [0x0, .data, faerie]
- [0x40, .data, faerie_spriteparts]
- [0x22E8, .data, faerie_clutdata]
- [0x2368, .data, faerie_data_2368]
- [0x2408, data]
- [0x2368, .data, faerie_ability_data]
- [0x2600, .data, faerie_animation_data]
- [0x2B2C, data]
- [0x2C24, .data, faerie_data_2C24]
- [0x2BCC, .data, faerie_data]
- [0x2D2C, .data, servant_events]
- [0x3678, .rodata, 3678]
- [0x3994, c, 3678]
- [0x92D0, sbss]
- [0x3678, .rodata, faerie]
- [0x3994, c, faerie]
- [0x92D0, .bss, faerie]
- [0xA000]

View File

@ -254,6 +254,22 @@ enum SfxModes {
#define SFX_RBO3_UNK_802 0x802
#define SFX_RBO3_UNK_804 0x804
// TT_002 - Faerie
#define SFX_TT002_UNK_885 0x885
#define SFX_TT002_UNK_886 0x886
#define SFX_TT002_UNK_887 0x887
#define SFX_TT002_UNK_888 0x888
#define SFX_TT002_UNK_889 0x889
#define SFX_TT002_UNK_88A 0x88A
#define SFX_TT002_UNK_88B 0x88B
#define SFX_TT002_UNK_88C 0x88C
#define SFX_TT002_UNK_88D 0x88D
#define SFX_TT002_UNK_88E 0x88E
#define SFX_TT002_UNK_88F 0x88F
#define SFX_TT002_UNK_890 0x890
#define SFX_TT002_UNK_891 0x891
#define SFX_TT002_UNK_892 0x892
// SHARED SOUNDS
// These are sounds that are shared across multiple BIN files
#define SE_BOSS_DEFEATED 0x7D2

View File

@ -124,8 +124,9 @@ typedef struct {
/* 0x10 */ s16 b;
/* 0x12 */ u16 priority;
/* 0x14 */ s16 drawMode;
/* 0x16 */ u32 flags;
} Unkstruct_801724CC; // size = 0x1A
/* 0x16 */ s16 : 16;
/* 0x18 */ u32 flags;
} Unkstruct_801724CC; // size = 0x1C
typedef struct {
/* 0x0 */ s16 animSet;

View File

@ -4,60 +4,46 @@
#include "sfx.h"
#include "items.h"
extern s32 s_ServantId;
static u32 D_us_801792D0;
static s32 D_us_801792D4;
static s32 D_us_801792D8;
static s32 s_ServantId;
static s32 s_zPriority;
static FamiliarStats s_FaerieStats;
static s32 D_us_801792F0;
static s32 D_us_801792F4;
static s32 D_us_801792F8;
static s32 D_us_801792FC[5];
static s32 D_us_80179310;
static s16 D_us_80179314;
STATIC_PAD_BSS(2);
static s16 D_us_80179318;
STATIC_PAD_BSS(2);
static s32 D_us_8017931C;
static s32 D_us_80179320;
static s32 s_TargetLocationX;
static s32 s_TargetLocationY;
static s32 s_TargetLocationX_calc;
static s32 s_TargetLocationY_calc;
static s32 s_AngleToTarget;
static s32 s_AllowedAngle;
static s32 s_DistToTargetLocation;
static s16 s_TargetLocOffset_calc;
extern u16 g_FaerieClut[];
// During cleanup, rename this. May not actually be this familiar, unknown
// where it's set
extern Entity thisFamiliar;
extern s32 s_zPriority;
extern FamiliarStats s_FaerieStats;
extern FaerieAbilityStats D_us_80172408[];
extern s32 D_us_8017931C;
extern s32 D_us_80179320;
extern s32 D_us_80179310;
extern s16 D_us_80179314;
extern s16 D_us_80179318;
extern s32 s_AllowedAngle;
extern s32 s_AngleToTarget;
extern s32 s_DistToTargetLocation;
extern s16 s_TargetLocOffset_calc;
extern s32 s_TargetLocationX;
extern s32 s_TargetLocationX_calc;
extern s32 s_TargetLocationY;
extern s32 s_TargetLocationY_calc;
// These are likely able to be consolidated during data cleanup
extern u8 D_80097A1A[];
extern u8 D_80097A1B;
extern u8 D_80097A1D;
extern u8 D_80097A29;
extern u8 D_80097A2A;
extern s32 D_us_80172BCC;
extern s32 D_us_80172BD8;
extern s16 D_us_80172494[];
extern s16 D_us_801724C4[];
extern s32 D_us_80172BD0;
extern s32 D_800973FC;
// this is likely incorrect typing
extern s32 D_80097420[];
extern FaerieAbilityStats g_FaerieAbilityStats[];
extern s32 D_us_80172BCC[];
extern s16 g_ResistItemsParamMap[];
extern s16 g_PotionItemsParamMap[];
extern s32 D_800973FC; // this is in unkGraphicsStruct
extern s32 D_80097420[]; // this is in unkGraphicsStruct
extern Unkstruct_801724CC D_us_801724CC[];
extern s32 D_us_80172BD4;
extern s32 D_us_80172BDC;
extern u16 g_FaerieFrameCount1;
extern u16 g_FaerieFrameCount2;
extern u32 D_us_801792D0;
extern s32 D_us_801792EC;
extern s32 D_us_801792F0;
extern s32 D_us_801792F4;
extern s32 D_us_801792F8;
extern s32 D_us_801792FC[];
extern s32 D_us_8017930C[];
// Ranked lookup tables
extern s32 D_us_80172C04[];
@ -65,6 +51,8 @@ extern s32 D_us_80172BE4[];
extern s32 D_us_80172C3C[];
extern s32 D_us_80172C64[];
extern Unk2CB0 D_us_80172CB0[];
extern FaerieAnimIndex D_us_80172368[];
extern AnimationFrame* g_FaerieAnimationFrames[];
@ -72,6 +60,11 @@ void SetAnimationFrame(Entity*, s32);
void unused_39C8(Entity*);
void func_us_80173D60(Entity*);
static s16 CalculateAngleToEntity(Entity* entity, s16 targetX, s16 targetY);
static s32 CalculateDistance(Entity* entity, s32 targetX, s32 targetY);
static s16 GetTargetPositionWithDistanceBuffer(
s16 currentX, s16 targetX, s16 distanceBuffer);
static void ServantInit(InitializeMode mode);
static void func_us_80174998(Entity* self);
static void func_us_80174F0C(Entity* self);
@ -95,11 +88,6 @@ ServantDesc faerie_ServantDesc = {
func_us_80176504, func_us_80176B6C, func_us_80176C98, func_us_80177380,
func_us_80177958, func_us_80177AC4, func_us_80177F64, func_us_80177F84};
static s16 CalculateAngleToEntity(Entity* entity, s16 targetX, s16 targetY);
static s32 CalculateDistance(Entity* entity, s32 targetX, s32 targetY);
static s16 GetTargetPositionWithDistanceBuffer(
s16 currentX, s16 targetX, s16 distanceBuffer);
static void SetAnimationFrame(Entity* self, s32 animationIndex) {
if (self->anim != g_FaerieAnimationFrames[animationIndex]) {
self->anim = g_FaerieAnimationFrames[animationIndex];
@ -282,7 +270,8 @@ void func_us_80173D60(Entity* self) {
}
if (g_Player.status & PLAYER_STATUS_UNK40000) {
rnd = rand() % 100;
if (rnd <= D_us_80172408[s_FaerieStats.level / 10].unk1) {
// for faerie, this is always true. stats table.unk1 is 0x00FF
if (rnd <= g_FaerieAbilityStats[s_FaerieStats.level / 10].unk1) {
self->entityId = 0xD2;
self->step = 0;
return;
@ -298,15 +287,18 @@ void func_us_80173D60(Entity* self) {
return;
}
self->ext.faerie.timer = D_us_80172408[s_FaerieStats.level / 10].unk0;
self->ext.faerie.timer =
g_FaerieAbilityStats[s_FaerieStats.level / 10].timer;
if (self->entityId == 0xD3) {
return;
}
if (PLAYER.step == 0xB && (!IsMovementAllowed(0)) && D_80097A1D) {
if (PLAYER.step == 0xB && (!IsMovementAllowed(0)) &&
g_Status.equipHandCount[ITEM_HAMMER]) {
rnd = rand() % 100;
if (rnd <= D_us_80172408[(s_FaerieStats.level / 10)].unk2) {
if (rnd <=
g_FaerieAbilityStats[(s_FaerieStats.level / 10)].hammerChance) {
self->ext.faerie.unk8E = 0;
self->entityId = 0xD3;
self->step = 0;
@ -319,9 +311,10 @@ void func_us_80173D60(Entity* self) {
}
if (g_Player.status & PLAYER_STATUS_CURSE) {
if (D_80097A1B) {
if (g_Status.equipHandCount[ITEM_UNCURSE]) {
rnd = rand() % 100;
if (rnd <= D_us_80172408[(s_FaerieStats.level / 10)].unk3) {
if (rnd <= g_FaerieAbilityStats[(s_FaerieStats.level / 10)]
.uncurseChance) {
self->ext.faerie.unk90 = false;
self->entityId = 0xD4;
self->step = 0;
@ -341,9 +334,10 @@ void func_us_80173D60(Entity* self) {
}
if (g_Player.status & PLAYER_STATUS_POISON) {
if (D_80097A1A[0]) {
if (g_Status.equipHandCount[ITEM_ANTIVENOM]) {
rnd = rand() % 100;
if (rnd <= D_us_80172408[s_FaerieStats.level / 10].unk4) {
if (rnd <= g_FaerieAbilityStats[s_FaerieStats.level / 10]
.antivenomChance) {
self->ext.faerie.unk92 = false;
self->entityId = 0xD5;
self->step = 0;
@ -373,10 +367,11 @@ void func_us_80173D60(Entity* self) {
params = 5;
}
if (!g_api.func_800FF110(D_us_80172494[params * 4]) &&
g_Status.equipHandCount[D_us_80172494[(params * 4) + 1]]) {
if (!g_api.func_800FF110(g_ResistItemsParamMap[params * 4]) &&
g_Status.equipHandCount[g_ResistItemsParamMap[(params * 4) + 1]]) {
rnd = rand() % 100;
if (rnd <= D_us_80172408[s_FaerieStats.level / 10].unk5) {
if (rnd <=
g_FaerieAbilityStats[s_FaerieStats.level / 10].resistChance) {
self->entityId = 0xD6;
self->step = 0;
self->params = params;
@ -424,9 +419,10 @@ void func_us_80173D60(Entity* self) {
return;
}
if (D_80097A29 | D_80097A2A) {
if (g_Status.equipHandCount[ITEM_POTION] |
g_Status.equipHandCount[ITEM_HIGH_POTION]) {
rnd = rand() % 100;
if (rnd <= D_us_80172408[s_FaerieStats.level / 10].unk6) {
if (rnd <= g_FaerieAbilityStats[s_FaerieStats.level / 10].healChance) {
self->ext.faerie.unk94 = true;
self->entityId = 0xD7;
self->step = 0;
@ -732,14 +728,14 @@ void func_us_80174F0C(Entity* self) {
self->facingLeft = PLAYER.facingLeft;
SetAnimationFrame(self, 0x13);
if (s_ServantId == FAM_ACTIVE_YOUSEI) {
g_api.PlaySfx(D_us_80172BD4);
g_api.PlaySfx(D_us_80172BCC[2]);
}
self->step++;
break;
case 0x6:
if (self->animFrameIdx == 0xA) {
if (s_ServantId == FAM_ACTIVE_FAERIE) {
g_api.PlaySfx(D_us_80172BD4);
g_api.PlaySfx(D_us_80172BCC[2]);
}
self->step++;
}
@ -795,7 +791,7 @@ void func_us_80174F0C(Entity* self) {
case 0x5A:
SetAnimationFrame(self, 0x20);
g_api.PlaySfx(D_us_80172BDC);
g_api.PlaySfx(D_us_80172BCC[4]);
self->step++;
break;
case 0x5B:
@ -841,7 +837,7 @@ void func_us_801753E4(Entity* self) {
break;
case 2:
self->facingLeft = PLAYER.facingLeft;
if (D_80097A1A[paramOffset]) {
if (g_Status.equipHandCount[ITEM_HAMMER]) {
SetAnimationFrame(self, 0x17);
for (rnd = rand() % 0x100, i = 0; true; i++) {
@ -854,14 +850,14 @@ void func_us_801753E4(Entity* self) {
self->step++;
} else {
SetAnimationFrame(self, 0x10);
g_api.PlaySfx(D_us_80172BD8);
g_api.PlaySfx(D_us_80172BCC[3]);
self->ext.faerie.frameCounter = 0;
self->step += 2;
}
break;
case 3:
if (self->animFrameIdx == 5) {
D_80097A1A[paramOffset]--;
g_Status.equipHandCount[ITEM_HAMMER]--;
g_api.CreateEntFactoryFromEntity(
self, FACTORY(0x37, paramOffset), 0);
CreateEventEntity_Dupe(self, 0xDF, 1);
@ -920,7 +916,7 @@ void func_us_80175730(Entity* self) {
}
break;
case 2:
if (!D_80097A1A[paramOffset]) {
if (!g_Status.equipHandCount[ITEM_UNCURSE]) {
SetAnimationFrame(self, 0x14);
self->step = 5;
break;
@ -932,7 +928,7 @@ void func_us_80175730(Entity* self) {
}
SetAnimationFrame(self, 0x12);
if (s_ServantId == FAM_ACTIVE_YOUSEI) {
g_api.PlaySfx(D_us_80172BCC);
g_api.PlaySfx(D_us_80172BCC[0]);
}
self->step++;
break;
@ -941,10 +937,10 @@ void func_us_80175730(Entity* self) {
self->facingLeft = PLAYER.facingLeft ? 0 : 1;
if (self->animFrameIdx == 0xB) {
if (s_ServantId == FAM_ACTIVE_FAERIE) {
g_api.PlaySfx(D_us_80172BCC);
g_api.PlaySfx(D_us_80172BCC[0]);
}
D_80097A1A[paramOffset]--;
g_Status.equipHandCount[ITEM_UNCURSE]--;
g_api.CreateEntFactoryFromEntity(
self, FACTORY(0x37, paramOffset), 0);
@ -966,7 +962,7 @@ void func_us_80175730(Entity* self) {
case 5:
self->facingLeft = PLAYER.facingLeft;
if (self->animFrameIdx == 0x20) {
g_api.PlaySfx(D_us_80172BD8);
g_api.PlaySfx(D_us_80172BCC[3]);
self->ext.faerie.frameCounter = 0;
self->step++;
}
@ -1012,7 +1008,7 @@ void func_us_80175A78(Entity* self) {
}
break;
case 2:
if (!D_80097A1A[paramOffset]) {
if (!g_Status.equipHandCount[ITEM_ANTIVENOM]) {
SetAnimationFrame(self, 0x14);
self->step = 5;
break;
@ -1024,7 +1020,7 @@ void func_us_80175A78(Entity* self) {
}
SetAnimationFrame(self, 0x12);
if (s_ServantId == FAM_ACTIVE_YOUSEI) {
g_api.PlaySfx(D_us_80172BCC);
g_api.PlaySfx(D_us_80172BCC[0]);
}
self->step++;
break;
@ -1033,10 +1029,10 @@ void func_us_80175A78(Entity* self) {
self->facingLeft = PLAYER.facingLeft ? 0 : 1;
if (self->animFrameIdx == 0xB) {
if (s_ServantId == FAM_ACTIVE_FAERIE) {
g_api.PlaySfx(D_us_80172BCC);
g_api.PlaySfx(D_us_80172BCC[0]);
}
D_80097A1A[paramOffset]--;
g_Status.equipHandCount[ITEM_ANTIVENOM]--;
g_api.CreateEntFactoryFromEntity(
self, FACTORY(0x37, paramOffset), 0);
@ -1058,7 +1054,7 @@ void func_us_80175A78(Entity* self) {
case 5:
self->facingLeft = PLAYER.facingLeft;
if (self->animFrameIdx == 0x20) {
g_api.PlaySfx(D_us_80172BD8);
g_api.PlaySfx(D_us_80172BCC[3]);
self->ext.faerie.frameCounter = 0;
self->step++;
}
@ -1104,7 +1100,8 @@ void func_us_80175DBC(Entity* self) {
break;
case 2:
self->facingLeft = PLAYER.facingLeft;
if (!g_Status.equipHandCount[D_us_80172494[self->params * 4 + 1]]) {
if (!g_Status
.equipHandCount[g_ResistItemsParamMap[self->params * 4 + 1]]) {
SetAnimationFrame(self, 0x10);
self->step = 5;
break;
@ -1133,12 +1130,14 @@ void func_us_80175DBC(Entity* self) {
}
}
g_Status.equipHandCount[D_us_80172494[self->params * 4 + 1]]--;
g_Status
.equipHandCount[g_ResistItemsParamMap[self->params * 4 + 1]]--;
g_api.CreateEntFactoryFromEntity(
self, FACTORY(0x37, D_us_80172494[self->params * 4 + 2]), 0);
self,
FACTORY(0x37, g_ResistItemsParamMap[self->params * 4 + 2]), 0);
CreateEventEntity_Dupe(
self, 0xDF, D_us_80172494[self->params * 4 + 3]);
self, 0xDF, g_ResistItemsParamMap[self->params * 4 + 3]);
self->ext.faerie.frameCounter = 0;
self->step++;
}
@ -1155,7 +1154,7 @@ void func_us_80175DBC(Entity* self) {
case 5:
self->facingLeft = PLAYER.facingLeft;
if (self->animFrameIdx == 0x20) {
g_api.PlaySfx(D_us_80172BD8);
g_api.PlaySfx(D_us_80172BCC[3]);
self->ext.faerie.frameCounter = 0;
self->step++;
}
@ -1198,14 +1197,15 @@ void func_us_80176178(Entity* self) {
}
break;
case 2:
if (!g_Status.equipHandCount[D_us_801724C4[self->params * 2]]) {
if (!g_Status.equipHandCount[g_PotionItemsParamMap[self->params * 2]]) {
if (self->params) {
temp = 0;
} else {
temp = 1;
}
self->params = temp;
if (!g_Status.equipHandCount[D_us_801724C4[self->params * 2]]) {
if (!g_Status
.equipHandCount[g_PotionItemsParamMap[self->params * 2]]) {
SetAnimationFrame(self, 0x14);
self->step = 5;
break;
@ -1224,10 +1224,11 @@ void func_us_80176178(Entity* self) {
case 3:
self->facingLeft = PLAYER.facingLeft ? 0 : 1;
if (self->animFrameIdx == 0xB) {
g_api.PlaySfx(D_us_80172BD0);
g_Status.equipHandCount[D_us_801724C4[self->params * 2]]--;
g_api.PlaySfx(D_us_80172BCC[1]);
g_Status.equipHandCount[g_PotionItemsParamMap[self->params * 2]]--;
g_api.CreateEntFactoryFromEntity(
self, FACTORY(0x37, D_us_801724C4[self->params * 2 + 1]), 0);
self,
FACTORY(0x37, g_PotionItemsParamMap[self->params * 2 + 1]), 0);
CreateEventEntity_Dupe(self, 0xDF, 2);
self->ext.faerie.frameCounter = 0;
self->step++;
@ -1245,7 +1246,7 @@ void func_us_80176178(Entity* self) {
case 5:
self->facingLeft = PLAYER.facingLeft;
if (self->animFrameIdx == 0x20) {
g_api.PlaySfx(D_us_80172BD8);
g_api.PlaySfx(D_us_80172BCC[3]);
self->ext.faerie.frameCounter = 0;
self->step++;
}
@ -1331,7 +1332,7 @@ void func_us_80176504(Entity* arg0) {
break;
case 2:
rnd = rand() % 0x100;
if (D_us_801792EC == 1) {
if (s_FaerieStats.unk8 == 1) {
for (i = 0; true; i++) {
if (rnd <= D_us_80172C3C[i * 2]) {
arg0->ext.faerie.unkA4 = D_us_80172C3C[i * 2 + 1];
@ -1641,10 +1642,6 @@ void func_us_80176C98(Entity* self) {
D_us_801792D0 = ServantUpdateAnim(self, NULL, g_FaerieAnimationFrames);
}
extern s32 D_us_801792D4;
extern s32 D_us_801792D8;
extern Unk2CB0 D_us_80172CB0[];
void func_us_80177380(Entity* self) {
char pad[2];
@ -1766,7 +1763,7 @@ void func_us_80177380(Entity* self) {
case 4:
SetAnimationFrame(self, 14);
g_PauseAllowed = 1;
self->entityId = 0xD1;
self->entityId = ENTITY_ID_SERVANT;
self->step = 0;
break;
}
@ -1983,7 +1980,8 @@ void func_us_80177F84(Entity* self) {
posX2 = self->posX.i.hi;
posY = self->posY.i.hi;
unkStruct = &D_us_801724CC[LOH(self->params)];
unkStruct = &D_us_801724CC[(s16)self->params];
switch (self->step) {
case 0:
self->primIndex =

View File

@ -10,13 +10,13 @@ typedef struct {
// It looks like most if not all of the ability stats for faerie are
// essentially % chance for abilities to trigger.
typedef struct {
s16 unk0;
s16 timer;
s16 unk1;
s16 unk2;
s16 unk3;
s16 unk4;
s16 unk5;
s16 unk6;
s16 hammerChance;
s16 uncurseChance;
s16 antivenomChance;
s16 resistChance;
s16 healChance;
} FaerieAbilityStats;
typedef struct {

View File

@ -0,0 +1,250 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#include "faerie.h"
#include "items.h"
FaerieAnimIndex D_us_80172368[] = {
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {4, 1}, {4, 1}, {0, 0},
{4, 1}, {4, 1}, {3, 0}, {5, 0}, {0, 0}, {0, 0}, {0, 0}, {4, 1},
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {4, 1}, {0, 0},
{0, 0}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1},
{4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1},
};
FaerieAbilityStats g_FaerieAbilityStats[] = {
{.timer = 0x1E, // lvl 0-9
.unk1 = 0xFF,
.hammerChance = 0x20,
.uncurseChance = 0x10,
.antivenomChance = 0x10,
.resistChance = 0x10,
.healChance = 0xC0},
{.timer = 0x14, // lvl 10-19
.unk1 = 0xFF,
.hammerChance = 0x20,
.uncurseChance = 0x10,
.antivenomChance = 0x10,
.resistChance = 0x20,
.healChance = 0xC0},
{.timer = 0x0F, // lvl 20-29
.unk1 = 0xFF,
.hammerChance = 0x40,
.uncurseChance = 0x20,
.antivenomChance = 0x20,
.resistChance = 0x20,
.healChance = 0xD0},
{.timer = 0x0A, // lvl 30-39
.unk1 = 0xFF,
.hammerChance = 0x40,
.uncurseChance = 0x20,
.antivenomChance = 0x20,
.resistChance = 0x40,
.healChance = 0xD0},
{.timer = 0x0A, // lvl 40-49
.unk1 = 0xFF,
.hammerChance = 0x60,
.uncurseChance = 0x20,
.antivenomChance = 0x30,
.resistChance = 0x40,
.healChance = 0xE0},
{.timer = 0x05, // lvl 50-59
.unk1 = 0xFF,
.hammerChance = 0x60,
.uncurseChance = 0x40,
.antivenomChance = 0x30,
.resistChance = 0x40,
.healChance = 0xE0},
{.timer = 0x03, // lvl 60-69
.unk1 = 0xFF,
.hammerChance = 0x80,
.uncurseChance = 0x40,
.antivenomChance = 0x40,
.resistChance = 0x60,
.healChance = 0xE0},
{.timer = 0x02, // lvl 70-79
.unk1 = 0xFF,
.hammerChance = 0xA0,
.uncurseChance = 0x60,
.antivenomChance = 0x50,
.resistChance = 0x60,
.healChance = 0xFF},
{.timer = 0x01, // lvl 80-89
.unk1 = 0xFF,
.hammerChance = 0xC0,
.uncurseChance = 0x60,
.antivenomChance = 0x60,
.resistChance = 0x80,
.healChance = 0xFF},
{.timer = 0x00, // lvl 90-99
.unk1 = 0xFF,
.hammerChance = 0xC0,
.uncurseChance = 0x60,
.antivenomChance = 0x60,
.resistChance = 0x80,
.healChance = 0xFF},
};
// This may be able to be broken into a 4 short struct
// unknown param for D_80139828, ItemId, FactoryParam, EventParam
s16 g_ResistItemsParamMap[] = {
0x0005, ITEM_RESIST_FIRE, 0x0009, 0x0005,
0x0007, ITEM_RESIST_THUNDER, 0x000A, 0x0006,
0x0006, ITEM_RESIST_ICE, 0x000B, 0x0007,
0x0009, ITEM_RESIST_HOLY, 0x000E, 0x0008,
0x000B, ITEM_RESIST_DARK, 0x000F, 0x0009,
0x000A, ITEM_RESIST_STONE, 0x000C, 0x000A,
};
// itemId, FACTORY() param
// check if can be made struct, but PSP may be a problem.
s16 g_PotionItemsParamMap[] = {
ITEM_POTION,
0x0010,
ITEM_HIGH_POTION,
0x0011,
};
Unkstruct_801724CC D_us_801724CC[] = {
{.count = 0x80,
.unk2 = 1,
.unk4 = 1,
.unk6 = 0,
.w = 1,
.h = 1,
.r = 0x7F,
.g = 0x7F,
.b = 0x7F,
.priority = 1,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 1,
.w = 2,
.h = 2,
.r = 0x7F,
.g = 0x7F,
.b = 0x7F,
.priority = 2,
.drawMode = DRAW_UNK02,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x2F,
.g = 0xFF,
.b = 0x2F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x5F,
.g = 0x0F,
.b = 0x5F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x7F,
.g = 0x3F,
.b = 0x0F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0xFF,
.g = 0x7F,
.b = 0x1F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x7F,
.g = 0x7F,
.b = 0x0F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x0F,
.g = 0x0F,
.b = 0x7F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x0F,
.g = 0xFF,
.b = 0x2F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x7F,
.g = 0x3F,
.b = 0x3F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
{.count = 0x20,
.unk2 = 0x20,
.unk4 = 0,
.unk6 = 2,
.w = 1,
.h = 1,
.r = 0x3F,
.g = 0x3F,
.b = 0x3F,
.priority = 2,
.drawMode = DRAW_TPAGE2 | DRAW_TPAGE | DRAW_UNK02 | DRAW_TRANSP,
0,
.flags = 0x0C800000},
};

View File

@ -25,71 +25,191 @@ AnimationFrame D_us_8017262C[] = {
};
AnimationFrame D_us_80172640[] = {
{1, 0x0074}, {1, 0x0001}, {1, 0x0075}, {1, 0x0001}, {0, 0x0000},
{2, 0x0013}, {2, 0x0014}, {0, 0x0000}, {2, 0x000E}, {2, 0x0076},
{2, 0x000E}, {2, 0x0076}, {2, 0x0015}, {2, 0x0077}, {2, 0x0015},
{2, 0x0077}, {6, 0x0012}, {0, 0x0000}, {9, 0x0012}, {2, 0x0015},
{2, 0x0077}, {2, 0x0015}, {2, 0x0077}, {2, 0x000E}, {2, 0x0076},
{2, 0x000E}, {2, 0x0076}, {-2, 0x002B}, {2, 0x0015}, {2, 0x0077},
{2, 0x0078}, {2, 0x0016}, {2, 0x0079}, {2, 0x0017}, {2, 0x007A},
{2, 0x0018}, {0, 0x0000}, {1, 0x003E}, {1, 0x0016}, {1, 0x003F},
{1, 0x0018}, {0, 0x0000}, {2, 0x0034}, {2, 0x0035}, {2, 0x0036},
{2, 0x0037}, {2, 0x0038}, {2, 0x0039}, {0, 0x0000}, {3, 0x005C},
{3, 0x005D}, {3, 0x005E}, {3, 0x005F}, {0, 0x0000}, {4, 0x0061},
{4, 0x0060}, {4, 0x004B}, {4, 0x0064}, {4, 0x0063}, {4, 0x0062},
{0, 0x0000}, {6, 0x0002}, {6, 0x0003}, {6, 0x0004}, {6, 0x0005},
{0, 0x0000}, {6, 0x0006}, {6, 0x0007}, {5, 0x0008}, {5, 0x0009},
{4, 0x000A}, {4, 0x000B}, {4, 0x000C}, {4, 0x000D}, {-2, 0x0010},
{4, 0x000E}, {4, 0x000F}, {4, 0x0010}, {4, 0x0011}, {0, 0x0000},
{10, 0x004D}, {6, 0x004E}, {8, 0x004F}, {0, 0x0000}, {4, 0x0012},
{2, 0x0015}, {1, 0x0077}, {2, 0x0016}, {1, 0x0078}, {2, 0x0017},
{1, 0x0079}, {2, 0x0018}, {1, 0x007A}, {2, 0x003F}, {2, 0x0019},
{1, 0x007B}, {1, 0x001A}, {1, 0x007C}, {2, 0x001B}, {2, 0x007D},
{-2, 0x002C}, {6, 0x0012}, {5, 0x0015}, {2, 0x0077}, {2, 0x0016},
{2, 0x0078}, {2, 0x0017}, {2, 0x0079}, {2, 0x0018}, {2, 0x007A},
{2, 0x0019}, {2, 0x007B}, {2, 0x001A}, {2, 0x007C}, {2, 0x001B},
{2, 0x007D}, {-2, 0x002D}, {6, 0x0012}, {5, 0x0015}, {5, 0x0016},
{5, 0x0017}, {5, 0x0018}, {4, 0x0015}, {4, 0x003E}, {4, 0x0017},
{4, 0x0018}, {3, 0x0015}, {3, 0x0016}, {3, 0x0017}, {3, 0x0018},
{2, 0x003F}, {2, 0x0016}, {2, 0x003E}, {2, 0x0018}, {2, 0x003E},
{2, 0x003F}, {2, 0x003E}, {2, 0x003F}, {2, 0x003E}, {2, 0x003F},
{2, 0x003E}, {2, 0x003F}, {2, 0x003E}, {2, 0x003F}, {4, 0x0022},
{4, 0x0023}, {4, 0x0022}, {4, 0x0023}, {4, 0x0022}, {4, 0x0023},
{-2, 0x0015}, {6, 0x0019}, {6, 0x001A}, {6, 0x0024}, {8, 0x0025},
{32, 0x0026}, {-1, 0x0000}, {10, 0x0054}, {1, 0x0066}, {6, 0x0067},
{1, 0x0069}, {1, 0x0068}, {1, 0x0069}, {1, 0x0068}, {1, 0x0069},
{1, 0x0068}, {1, 0x0069}, {6, 0x0067}, {1, 0x0066}, {0, 0x0000},
{4, 0x0022}, {4, 0x0017}, {17, 0x0027}, {7, 0x0028}, {6, 0x0029},
{4, 0x002A}, {6, 0x002B}, {6, 0x0065}, {-2, 0x000E}, {1, 0x002E},
{0, 0x0000}, {18, 0x002D}, {11, 0x002E}, {18, 0x002F}, {11, 0x002E},
{0, 0x0000}, {35, 0x002F}, {27, 0x0030}, {35, 0x0031}, {27, 0x0030},
{0, 0x0000}, {1, 0x002C}, {2, 0x0032}, {2, 0x0033}, {2, 0x0032},
{2, 0x0033}, {2, 0x0032}, {3, 0x0034}, {3, 0x0035}, {3, 0x0036},
{3, 0x0037}, {3, 0x0038}, {3, 0x0039}, {6, 0x003B}, {6, 0x003C},
{6, 0x003D}, {6, 0x003A}, {-1, 0x0000}, {5, 0x003B}, {5, 0x003C},
{5, 0x003D}, {0, 0x0000}, {1, 0x004A}, {0, 0x0000}, {4, 0x0060},
{0, 0x0000}, {6, 0x0050}, {6, 0x0055}, {6, 0x005A}, {6, 0x005B},
{0, 0x0000}, {3, 0x0058}, {2, 0x0059}, {1, 0x005A}, {1, 0x006A},
{1, 0x006B}, {3, 0x006C}, {2, 0x006B}, {1, 0x006A}, {1, 0x005A},
{1, 0x0059}, {0, 0x0000}, {6, 0x0050}, {6, 0x0051}, {6, 0x0052},
{6, 0x0053}, {0, 0x0000}, {6, 0x0054}, {6, 0x0055}, {6, 0x0056},
{6, 0x0057}, {0, 0x0000}, {8, 0x0058}, {8, 0x0059}, {8, 0x005A},
{8, 0x005B}, {0, 0x0000}, {6, 0x001A}, {6, 0x001B}, {6, 0x001C},
{6, 0x001D}, {24, 0x001E}, {-1, 0x0000}, {6, 0x001A}, {6, 0x0050},
{6, 0x006D}, {6, 0x006E}, {24, 0x006F}, {-1, 0x0000}, {6, 0x0040},
{6, 0x0041}, {6, 0x0042}, {6, 0x0043}, {7, 0x0044}, {8, 0x0045},
{8, 0x0046}, {7, 0x0047}, {7, 0x0048}, {7, 0x0049}, {-2, 0x000E},
{2, 0x0034}, {2, 0x0035}, {2, 0x0036}, {2, 0x0037}, {2, 0x0038},
{2, 0x0039}, {0, 0x0000}, {5, 0x003B}, {5, 0x003C}, {5, 0x003D},
{0, 0x0000}, {4, 0x000D}, {4, 0x000C}, {4, 0x000B}, {4, 0x000A},
{5, 0x0009}, {5, 0x0008}, {6, 0x0007}, {6, 0x0006}, {-2, 0x000E},
{5, 0x0004}, {6, 0x0003}, {6, 0x0002}, {9, 0x0006}, {0, 0x0000},
{7, 0x0006}, {6, 0x0002}, {7, 0x0003}, {9, 0x0004}, {0, 0x0000},
{6, 0x001C}, {6, 0x001D}, {38, 0x001E}, {-1, 0x0000}, {7, 0x001F},
{7, 0x0020}, {37, 0x0021}, {-1, 0x0000}, {0, 0x0000},
{1, 0x0074}, {1, 0x0001}, {1, 0x0075}, {1, 0x0001}, {0, 0x0000},
};
AnimationFrame D_us_80172654[] = {
{2, 0x0013},
{2, 0x0014},
{0, 0x0000},
};
AnimationFrame D_us_80172660[] = {
{2, 0x000E}, {2, 0x0076}, {2, 0x000E}, {2, 0x0076}, {2, 0x0015},
{2, 0x0077}, {2, 0x0015}, {2, 0x0077}, {6, 0x0012}, {0, 0x0000},
};
AnimationFrame D_us_80172688[] = {
{9, 0x0012}, {2, 0x0015}, {2, 0x0077}, {2, 0x0015}, {2, 0x0077},
{2, 0x000E}, {2, 0x0076}, {2, 0x000E}, {2, 0x0076}, {-2, 0x002B},
};
AnimationFrame D_us_801726B0[] = {
{2, 0x0015}, {2, 0x0077}, {2, 0x0078}, {2, 0x0016}, {2, 0x0079},
{2, 0x0017}, {2, 0x007A}, {2, 0x0018}, {0, 0x0000},
};
AnimationFrame D_us_801726D4[] = {
{1, 0x003E}, {1, 0x0016}, {1, 0x003F}, {1, 0x0018}, {0, 0x0000},
};
AnimationFrame D_us_801726E8[] = {
{2, 0x0034}, {2, 0x0035}, {2, 0x0036}, {2, 0x0037},
{2, 0x0038}, {2, 0x0039}, {0, 0x0000},
};
AnimationFrame D_us_80172704[] = {
{3, 0x005C}, {3, 0x005D}, {3, 0x005E}, {3, 0x005F}, {0, 0x0000},
};
AnimationFrame D_us_80172718[] = {
{4, 0x0061}, {4, 0x0060}, {4, 0x004B}, {4, 0x0064},
{4, 0x0063}, {4, 0x0062}, {0, 0x0000},
};
AnimationFrame D_us_80172734[] = {
{6, 0x0002}, {6, 0x0003}, {6, 0x0004}, {6, 0x0005}, {0, 0x0000},
};
AnimationFrame D_us_80172748[] = {
{6, 0x0006}, {6, 0x0007}, {5, 0x0008}, {5, 0x0009}, {4, 0x000A},
{4, 0x000B}, {4, 0x000C}, {4, 0x000D}, {-2, 0x0010},
};
AnimationFrame D_us_8017276C[] = {
{4, 0x000E}, {4, 0x000F}, {4, 0x0010}, {4, 0x0011}, {0, 0x0000},
};
AnimationFrame D_us_80172780[] = {
{10, 0x004D},
{6, 0x004E},
{8, 0x004F},
{0, 0x0000},
};
AnimationFrame D_us_80172790[] = {
{4, 0x0012}, {2, 0x0015}, {1, 0x0077}, {2, 0x0016}, {1, 0x0078},
{2, 0x0017}, {1, 0x0079}, {2, 0x0018}, {1, 0x007A}, {2, 0x003F},
{2, 0x0019}, {1, 0x007B}, {1, 0x001A}, {1, 0x007C}, {2, 0x001B},
{2, 0x007D}, {-2, 0x002C},
};
AnimationFrame D_us_801727D4[] = {
{6, 0x0012}, {5, 0x0015}, {2, 0x0077}, {2, 0x0016},
{2, 0x0078}, {2, 0x0017}, {2, 0x0079}, {2, 0x0018},
{2, 0x007A}, {2, 0x0019}, {2, 0x007B}, {2, 0x001A},
{2, 0x007C}, {2, 0x001B}, {2, 0x007D}, {-2, 0x002D},
};
AnimationFrame D_us_80172814[] = {
{6, 0x0012}, {5, 0x0015}, {5, 0x0016}, {5, 0x0017}, {5, 0x0018},
{4, 0x0015}, {4, 0x003E}, {4, 0x0017}, {4, 0x0018}, {3, 0x0015},
{3, 0x0016}, {3, 0x0017}, {3, 0x0018}, {2, 0x003F}, {2, 0x0016},
{2, 0x003E}, {2, 0x0018}, {2, 0x003E}, {2, 0x003F}, {2, 0x003E},
{2, 0x003F}, {2, 0x003E}, {2, 0x003F}, {2, 0x003E}, {2, 0x003F},
{2, 0x003E}, {2, 0x003F}, {4, 0x0022}, {4, 0x0023}, {4, 0x0022},
{4, 0x0023}, {4, 0x0022}, {4, 0x0023}, {-2, 0x0015},
};
AnimationFrame D_us_8017289C[] = {
{6, 0x0019}, {6, 0x001A}, {6, 0x0024},
{8, 0x0025}, {32, 0x0026}, {-1, 0x0000},
};
AnimationFrame D_us_801728B4[] = {
{10, 0x0054}, {1, 0x0066}, {6, 0x0067}, {1, 0x0069}, {1, 0x0068},
{1, 0x0069}, {1, 0x0068}, {1, 0x0069}, {1, 0x0068}, {1, 0x0069},
{6, 0x0067}, {1, 0x0066}, {0, 0x0000},
};
AnimationFrame D_us_801728E8[] = {
{4, 0x0022}, {4, 0x0017}, {17, 0x0027}, {7, 0x0028}, {6, 0x0029},
{4, 0x002A}, {6, 0x002B}, {6, 0x0065}, {-2, 0x000E},
};
AnimationFrame D_us_8017290C[] = {
{1, 0x002E},
{0, 0x0000},
};
AnimationFrame D_us_80172914[] = {
{18, 0x002D}, {11, 0x002E}, {18, 0x002F}, {11, 0x002E}, {0, 0x0000},
};
AnimationFrame D_us_80172928[] = {
{35, 0x002F}, {27, 0x0030}, {35, 0x0031}, {27, 0x0030}, {0, 0x0000},
};
AnimationFrame D_us_8017293C[] = {
{1, 0x002C}, {2, 0x0032}, {2, 0x0033}, {2, 0x0032}, {2, 0x0033},
{2, 0x0032}, {3, 0x0034}, {3, 0x0035}, {3, 0x0036}, {3, 0x0037},
{3, 0x0038}, {3, 0x0039}, {6, 0x003B}, {6, 0x003C}, {6, 0x003D},
{6, 0x003A}, {-1, 0x0000},
};
AnimationFrame D_us_80172980[] = {
{5, 0x003B},
{5, 0x003C},
{5, 0x003D},
{0, 0x0000},
};
AnimationFrame D_us_80172990[] = {
{1, 0x004A},
{0, 0x0000},
};
AnimationFrame D_us_80172998[] = {
{4, 0x0060},
{0, 0x0000},
};
AnimationFrame D_us_801729A0[] = {
{6, 0x0050}, {6, 0x0055}, {6, 0x005A}, {6, 0x005B}, {0, 0x0000},
};
AnimationFrame D_us_801729B4[] = {
{3, 0x0058}, {2, 0x0059}, {1, 0x005A}, {1, 0x006A},
{1, 0x006B}, {3, 0x006C}, {2, 0x006B}, {1, 0x006A},
{1, 0x005A}, {1, 0x0059}, {0, 0x0000},
};
AnimationFrame D_us_801729E0[] = {
{6, 0x0050}, {6, 0x0051}, {6, 0x0052}, {6, 0x0053}, {0, 0x0000},
};
AnimationFrame D_us_801729F4[] = {
{6, 0x0054}, {6, 0x0055}, {6, 0x0056}, {6, 0x0057}, {0, 0x0000},
};
AnimationFrame D_us_80172A08[] = {
{8, 0x0058}, {8, 0x0059}, {8, 0x005A}, {8, 0x005B}, {0, 0x0000},
};
AnimationFrame D_us_80172A1C[] = {
{6, 0x001A}, {6, 0x001B}, {6, 0x001C},
{6, 0x001D}, {24, 0x001E}, {-1, 0x0000},
};
AnimationFrame D_us_80172A34[] = {
{6, 0x001A}, {6, 0x0050}, {6, 0x006D},
{6, 0x006E}, {24, 0x006F}, {-1, 0x0000},
};
AnimationFrame D_us_80172A4C[] = {
{6, 0x0040}, {6, 0x0041}, {6, 0x0042}, {6, 0x0043},
{7, 0x0044}, {8, 0x0045}, {8, 0x0046}, {7, 0x0047},
{7, 0x0048}, {7, 0x0049}, {-2, 0x000E},
};
AnimationFrame D_us_80172A78[] = {
{2, 0x0034}, {2, 0x0035}, {2, 0x0036}, {2, 0x0037},
{2, 0x0038}, {2, 0x0039}, {0, 0x0000},
};
AnimationFrame D_us_80172A94[] = {
{5, 0x003B},
{5, 0x003C},
{5, 0x003D},
{0, 0x0000},
};
AnimationFrame D_us_80172AA4[] = {
{4, 0x000D}, {4, 0x000C}, {4, 0x000B}, {4, 0x000A}, {5, 0x0009},
{5, 0x0008}, {6, 0x0007}, {6, 0x0006}, {-2, 0x000E},
};
AnimationFrame D_us_80172AC8[] = {
{5, 0x0004}, {6, 0x0003}, {6, 0x0002}, {9, 0x0006}, {0, 0x0000},
};
AnimationFrame D_us_80172ADC[] = {
{7, 0x0006}, {6, 0x0002}, {7, 0x0003}, {9, 0x0004}, {0, 0x0000},
};
AnimationFrame D_us_80172AF0[] = {
{6, 0x001C},
{6, 0x001D},
{38, 0x001E},
{-1, 0x0000},
};
AnimationFrame D_us_80172B00[] = {
{7, 0x001F}, {7, 0x0020}, {37, 0x0021}, {-1, 0x0000}, {0, 0x0000},
};
AnimationFrame* g_FaerieAnimationFrames[] = {
D_us_80172600, D_us_80172608, D_us_80172610,
D_us_80172618, D_us_8017262C, D_us_80172640,
D_us_80172600, D_us_80172608, D_us_80172610, D_us_80172618, D_us_8017262C,
D_us_80172640, D_us_80172654, D_us_80172660, D_us_80172688, D_us_801726B0,
D_us_801726D4, D_us_801726E8, D_us_80172704, D_us_80172718, D_us_80172734,
D_us_80172748, D_us_8017276C, D_us_80172780, D_us_80172790, D_us_801727D4,
D_us_80172814, D_us_8017289C, D_us_801728B4, D_us_801728E8, D_us_8017290C,
D_us_80172914, D_us_80172928, D_us_8017293C, D_us_80172980, D_us_80172990,
D_us_80172998, D_us_801729A0, D_us_801729B4, D_us_801729E0, D_us_801729F4,
D_us_80172A08, D_us_80172A1C, D_us_80172A34, D_us_80172A4C, D_us_80172A78,
D_us_80172A94, D_us_80172AA4, D_us_80172AC8, D_us_80172ADC, D_us_80172AF0,
D_us_80172B00,
};

View File

@ -1,13 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#include "common.h"
u16 g_FaerieClut[] = {
0x0000, 0x10A2, 0x2D01, 0x45A8, 0x62CE, 0x2107, 0x4630, 0x5B17,
0xFC1F, 0x84C8, 0x8D0C, 0x9570, 0x8DB2, 0xA214, 0xA298, 0xC2B8,
0x0000, 0x7379, 0x1043, 0x2D6C, 0x4A2F, 0x2C81, 0x1908, 0x154A,
0x1D8C, 0x2DAF, 0x0D08, 0x2D29, 0x318C, 0x4E71, 0x3DCE, 0x5EF6,
0x0000, 0x10A4, 0x0102, 0x01A5, 0x1668, 0x24C5, 0x3DED, 0x5F14,
0x7C1F, 0x04C8, 0x0D2E, 0x1570, 0x0DB1, 0x2214, 0x2298, 0x42B8,
0x0000, 0x7379, 0x1043, 0x2D6C, 0x4A2F, 0x2C81, 0x1908, 0x154A,
0x1D8C, 0x2DAF, 0x0D08, 0x2D29, 0x318C, 0x4E71, 0x3DCE, 0x5EF6,
};

View File

@ -1,5 +1,19 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#include "faerie.h"
#include "sfx.h"
// SFX map
s32 D_us_80172BCC[] = {
SFX_TT002_UNK_885, SFX_TT002_UNK_886, SFX_TT002_UNK_887,
SFX_TT002_UNK_888, SFX_TT002_UNK_891, SFX_TT002_UNK_892,
};
// ranked lookup tables for sfx
s32 D_us_80172BE4[] = {0x3F, SFX_TT002_UNK_889, 0x7F, SFX_TT002_UNK_88A,
0xBF, SFX_TT002_UNK_88B, 0xFF, SFX_TT002_UNK_88C};
s32 D_us_80172C04[] = {0x3F, SFX_TT002_UNK_88D, 0x7F, SFX_TT002_UNK_88E,
0xBF, SFX_TT002_UNK_88F, 0xFF, SFX_TT002_UNK_890};
s16 D_us_80172C24[] = {0x0000, 0x0022, 0x0472, 0xFFFF, 0x000E, 0x0000};

View File

@ -1,10 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#include "faerie.h"
FaerieAnimIndex D_us_80172368[] = {
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {4, 1}, {4, 1}, {0, 0},
{4, 1}, {4, 1}, {3, 0}, {5, 0}, {0, 0}, {0, 0}, {0, 0}, {4, 1},
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {4, 1}, {0, 0},
{0, 0}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1},
{4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1}, {4, 1},
};

View File

@ -950,3 +950,14 @@ int D_80172274[] = {
0x0010FFEE, 0x00000010, 0x00400000, 0x00500000, 0x00000010, 0xFFEEFFFF,
0x00100010, 0x00000000, 0x00300010, 0x00400020, 0x00000000,
};
u16 g_FaerieClut[] = {
0x0000, 0x10A2, 0x2D01, 0x45A8, 0x62CE, 0x2107, 0x4630, 0x5B17,
0xFC1F, 0x84C8, 0x8D0C, 0x9570, 0x8DB2, 0xA214, 0xA298, 0xC2B8,
0x0000, 0x7379, 0x1043, 0x2D6C, 0x4A2F, 0x2C81, 0x1908, 0x154A,
0x1D8C, 0x2DAF, 0x0D08, 0x2D29, 0x318C, 0x4E71, 0x3DCE, 0x5EF6,
0x0000, 0x10A4, 0x0102, 0x01A5, 0x1668, 0x24C5, 0x3DED, 0x5F14,
0x7C1F, 0x04C8, 0x0D2E, 0x1570, 0x0DB1, 0x2214, 0x2298, 0x42B8,
0x0000, 0x7379, 0x1043, 0x2D6C, 0x4A2F, 0x2C81, 0x1908, 0x154A,
0x1D8C, 0x2DAF, 0x0D08, 0x2D29, 0x318C, 0x4E71, 0x3DCE, 0x5EF6,
};