TT_000 PSP more functions (#1148)

More PSP matches and a lot of fixes on types and symbols from the PSX
counterpart. I am very happy with the results so far.

`func_80173F74` has some weird `#ifdef VERSION_PSP` I cannot remove. Any
help will be very welcomed.
This commit is contained in:
Luciano Ciccariello 2024-05-19 11:26:23 +01:00 committed by GitHub
parent c6e1f2517e
commit bbdc1b31f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 184 additions and 194 deletions

View File

@ -44,8 +44,11 @@ D_80170720 = 0x092EC9E8;
g_Events = 0x092ECA28;
g_EventQueue = 0x092ed358;
g_ServantDesc = 0x092ED360;
D_801748D8 = 0x092ED480;
g_CurrentServant = 0x092ed808;
g_CurrentRoomX = 0x092ed810;
g_CurrentRoomY = 0x092ed818;
D_80174D3C = 0x092ed828;
D_80174D40 = 0x092ED820;
D_80174D3C = 0x092ED828;
D_80174C3C = 0x092ED830;
D_80174C30 = 0x092ed930;

View File

@ -16,6 +16,7 @@ g_api_FreePrimitives = 0x091cf778;
g_api_AllocPrimitives = 0x091cf77c;
g_api_PlaySfx = 0x091cf7a0;
g_api_func_8011A3AC = 0x091cf838;
g_PrimBuf = 0x091CFAF8;
D_8003C708 = 0x091e1308;
g_Tilemap = 0x091e1628;
g_Tilemap_tileDef = 0x091e162C;

View File

@ -1,6 +1,7 @@
g_StageId = 0x091CE5B8;
g_Player = 0x091CF030;
g_api = 0x091CF738;
g_PrimBuf = 0x091CFAF8;
D_8003C708 = 0x091E1308;
g_Tilemap = 0x091E1628;
g_Entities = 0x091E1680;

View File

@ -1030,10 +1030,10 @@ typedef struct {
/* 0x06 */ s16 height;
/* 0x08 */ s16 clut;
/* 0x0A */ s16 tpage;
/* 0x0C */ u8 texLeft, dummyLeft;
/* 0x0E */ u8 texTop, dummyTop;
/* 0x10 */ u8 texRight, dummyRight;
/* 0x12 */ u8 texBottom, dummyBottom;
/* 0x0C */ s16 texLeft;
/* 0x0E */ s16 texTop;
/* 0x10 */ s16 texRight;
/* 0x12 */ s16 texBottom;
} Sprite; /* size=0x14 */
typedef struct {
@ -1330,7 +1330,7 @@ typedef struct {
/* 8003C86C */ void (*func_800F1FC4)(s32 arg0);
/* 8003C870 */ void (*func_800F2288)(s32 arg0);
/* 8003C874 */ void (*func_8011A3AC)(
Entity* entity, s32 arg1, s32 arg2, Unkstruct_8011A3AC* arg3);
Entity* entity, s32 spellId, s32 arg2, FamiliarStats* out);
/* 8003C878 */ s32 (*func_800FF460)(s32 arg0);
/* 8003C87C */ s32 (*func_800FF494)(EnemyDef* arg0);
/* 8003C880 */ bool (*CdSoundCommandQueueEmpty)(void);
@ -1404,7 +1404,7 @@ extern void (*g_api_func_8010BF64)(Unkstruct_8010BF64* arg0);
extern void (*g_api_func_800F1FC4)(s32 arg0);
extern void (*g_api_func_800F2288)(s32 arg0);
extern void (*g_api_func_8011A3AC)(
Entity* entity, s32 arg1, s32 arg2, Unkstruct_8011A3AC* arg3);
Entity* entity, s32 spellId, s32 arg2, FamiliarStats* out);
extern s32 (*g_api_func_800FF460)(s32 arg0);
extern s32 (*g_api_func_800FF494)(EnemyDef* arg0);
extern bool (*g_api_CdSoundCommandQueueEmpty)(void);
@ -1704,7 +1704,6 @@ extern PlayerStatus g_Status;
extern u8 D_80097B9C[];
extern s32 subWeapon; // g_SubweaponId
extern u8 g_SaveName[12] ALIGNED4;
extern Unkstruct_8011A3AC D_80097C38[];
extern u32 D_80097C40[];
extern s32 D_80097C98;
extern PlayerDraw g_PlayerDraw[0x10];

View File

@ -20,7 +20,11 @@ typedef enum {
#define PLAYER g_Entities[PLAYER_CHARACTER]
#define SQ(x) ((x) * (x))
#ifndef VERSION_PSP
#define ABS(x) ((x) < 0 ? -(x) : (x))
#else
#define ABS abs
#endif
#define ABS_ALT(x) ((x) >= 0 ? (x) : -(x))
#define MIN(a, b) (a > b ? b : a)
#define DECR(x) ((x) == 0 ? 0 : --(x))

View File

@ -9,7 +9,7 @@
#define blendMode drawMode // maintained to easily migrate existing scratches
typedef struct Primitive {
/* 0x00 */ struct Primitive* next;
#ifdef VERSION_PC
#if defined(VERSION_PC) || defined(VERSION_PSP)
u_long dummy;
#endif
/* 0x04 */ u8 r0;

View File

@ -53,11 +53,11 @@ typedef struct ServantEvent {
extern ServantDesc g_ServantDesc;
extern SpriteParts* D_80170040[];
extern u16 D_80170448[];
extern s32 D_801704A8[];
extern s32 D_80170514[];
extern s32 D_8017054C[];
extern s32 D_801705EC[];
extern s32* D_801705F4[];
extern AnimationFrame D_801704A8[];
extern AnimationFrame D_80170514[];
extern AnimationFrame D_8017054C[];
extern AnimationFrame D_801705EC[];
extern AnimationFrame* D_801705F4[];
extern Sprite D_80170608[];
extern s32 D_80170658[][5];
extern u16 D_80170720[];

View File

@ -95,12 +95,6 @@ typedef struct {
/* 0x0C */ s32 unkC;
} Unkstruct_800EA5E4;
typedef struct {
s32 unk0;
s32 unk4;
s32 unk8;
} Unkstruct_8011A3AC;
typedef struct {
s32 unk0;
s32 unk4;

View File

@ -1607,21 +1607,21 @@ void func_8011A328(Entity* entity, s32 arg1) {
func_80118894(entity);
}
void func_8011A3AC(Entity* arg0, s32 arg1, s32 arg2, Unkstruct_8011A3AC* arg3) {
void func_8011A3AC(Entity* entity, s32 spellId, s32 arg2, FamiliarStats* out) {
SpellDef spell;
*arg3 = D_80097C38[g_Servant];
*out = g_Status.statsFamiliars[g_Servant - 1];
if (arg2 != 0) {
func_800FD9D4(&spell, arg1);
arg0->attack = spell.attack;
arg0->attackElement = spell.attackElement;
arg0->hitboxState = spell.hitboxState;
arg0->nFramesInvincibility = spell.nFramesInvincibility;
arg0->stunFrames = spell.stunFrames;
arg0->hitEffect = spell.hitEffect;
arg0->entityRoomIndex = spell.entityRoomIndex;
arg0->attack = spell.attack * ((arg3->unk0 * 4 / 95) + 1);
func_80118894(arg0);
func_800FD9D4(&spell, spellId);
entity->attack = spell.attack;
entity->attackElement = spell.attackElement;
entity->hitboxState = spell.hitboxState;
entity->nFramesInvincibility = spell.nFramesInvincibility;
entity->stunFrames = spell.stunFrames;
entity->hitEffect = spell.hitEffect;
entity->entityRoomIndex = spell.entityRoomIndex;
entity->attack = spell.attack * ((out->level * 4 / 95) + 1);
func_80118894(entity);
}
}

View File

@ -909,8 +909,7 @@ void func_80115C50(void);
void func_80118894(Entity*);
void func_80118C28(s32 arg0);
void func_8011A3AC(
Entity* entity, s32 arg1, s32 arg2, Unkstruct_8011A3AC* arg3);
void func_8011A3AC(Entity* entity, s32 spellId, s32 arg2, FamiliarStats* out);
Entity* CreateEntFactoryFromEntity(Entity* entity, u32, s32);
// Forward declarations for all the entity updating functions

View File

@ -53,7 +53,7 @@ u32 CheckEquipmentItemCount(u32 itemId, u32 equipType);
void func_8010BF64(Unkstruct_8010BF64* arg0);
void func_800F1FC4(s32 arg0);
void func_800F2288(void); // unknown signature
void func_8011A3AC(Entity* arg0, s32 arg1, s32 arg2, Unkstruct_8011A3AC* arg3);
void func_8011A3AC(Entity* entity, s32 spellId, s32 arg2, FamiliarStats* out);
s32 func_800FF460(s32 arg0);
s32 func_800FF494(EnemyDef* arg0);
bool CdSoundCommandQueueEmpty(void);

View File

@ -35,7 +35,7 @@ s16 D_80174BCC[16];
s16 D_80174BEC[16];
s16 D_80174C0C[16];
s32 D_80174C2C;
Unkstruct_8011A3AC D_80174C30;
FamiliarStats D_80174C30;
Point16 D_80174C3C[4][16];
s32 D_80174D3C;
s32 D_80174D40;
@ -68,6 +68,10 @@ ServantDesc g_ServantDesc = {
#ifdef VERSION_PSP
extern s32 D_80174D3C;
extern FamiliarStats D_80174C30;
extern Point16 D_80174C3C[4][16];
extern s32 D_801748D8[0x80];
extern s32 D_80174D40;
void DestroyEntity(Entity* entity);
#endif
@ -96,7 +100,7 @@ Entity* func_8017110C(Entity* self) {
e = &g_Entities[STAGE_ENTITY_START];
for (i = 0; i < EntitySearchCount; i++, e++) {
D_801748D8[i] = 0;
if (e->entityId == 0) {
if (!e->entityId) {
continue;
}
if (e->hitboxState == 0) {
@ -105,12 +109,11 @@ Entity* func_8017110C(Entity* self) {
if (e->flags & FLAG_UNK_00200000) {
continue;
}
entityX = e->posX.i.hi;
if (entityX < -0x10) {
if (e->posX.i.hi < -0x10) {
continue;
}
if (entityX > 0x110) {
if (e->posX.i.hi > 0x110) {
continue;
}
if (e->posY.i.hi > 0xF0) {
@ -119,7 +122,7 @@ Entity* func_8017110C(Entity* self) {
if (e->posY.i.hi < 0) {
continue;
}
if (e->hitboxState & 8 && D_80170658[D_80174C30.unk0 / 10][4] == 0) {
if (e->hitboxState & 8 && !D_80170658[D_80174C30.level / 10][4]) {
continue;
}
@ -145,20 +148,21 @@ Entity* func_8017110C(Entity* self) {
continue;
}
if (!(e->flags & FLAG_UNK_80000)) {
if (e->flags & FLAG_UNK_80000) {
if (e->hitPoints >= D_80170658[D_80174C30.level / 10][3]) {
found++;
D_801748D8[i] = 1;
}
} else {
e->flags |= FLAG_UNK_80000;
return e;
}
if (e->hitPoints >= D_80170658[D_80174C30.unk0 / 10][3]) {
found++;
D_801748D8[i] = 1;
}
}
if (found > 0) {
foundIndex = D_80174D40 % EntitySearchCount;
for (i = 0; i < 0x80; i++) {
if (D_801748D8[foundIndex] != 0) {
if (D_801748D8[foundIndex]) {
e = &g_Entities[STAGE_ENTITY_START + foundIndex];
D_80174D40 = (foundIndex + 1) % EntitySearchCount;
return e;
@ -266,9 +270,6 @@ void func_8017160C(s32 amount, s32 entityId) {
}
}
#ifdef VERSION_PSP
INCLUDE_ASM("servant/tt_000/nonmatchings/10E8", func_8017170C);
#else
void func_8017170C(Entity* entity, s32 frameIndex) {
Primitive* prim;
s32 tpage;
@ -282,7 +283,7 @@ void func_8017170C(Entity* entity, s32 frameIndex) {
return;
}
index = frameIndex - 1;
if (entity->facingLeft != 0) {
if (entity->facingLeft) {
x = entity->posX.i.hi + 2;
} else {
x = entity->posX.i.hi - 16;
@ -294,11 +295,7 @@ void func_8017170C(Entity* entity, s32 frameIndex) {
prim->x1 = prim->x3 = prim->x0 + D_80170608[index].width;
prim->y2 = prim->y3 = prim->y0 + D_80170608[index].height;
prim->clut = D_80170608[index].clut;
tpage = D_80170608[index].tpage;
if (tpage < 0) {
tpage += 3;
}
prim->tpage = tpage >> 2;
prim->tpage = D_80170608[index].tpage / 4;
prim->u0 = prim->u2 = D_80170608[index].texLeft;
prim->v0 = prim->v1 = D_80170608[index].texTop;
prim->u1 = prim->u3 = D_80170608[index].texRight;
@ -306,11 +303,7 @@ void func_8017170C(Entity* entity, s32 frameIndex) {
prim->priority = entity->zPriority + 1;
prim->drawMode = 0x102;
}
#endif
#ifdef VERSION_PSP
INCLUDE_ASM("servant/tt_000/nonmatchings/10E8", func_801718A0);
#else
void func_801718A0(Entity* entity) {
Primitive* prim;
s32 frame;
@ -318,7 +311,7 @@ void func_801718A0(Entity* entity) {
s32 x;
frame = 2;
if (entity->facingLeft != 0) {
if (entity->facingLeft) {
x = entity->posX.i.hi + 2;
} else {
x = entity->posX.i.hi - 16;
@ -334,17 +327,13 @@ void func_801718A0(Entity* entity) {
prim->x1 = prim->x3 = prim->x0 + D_80170608[frame].width;
prim->y2 = prim->y3 = prim->y0 + D_80170608[frame].height;
}
#endif
#ifdef VERSION_PSP
INCLUDE_ASM("servant/tt_000/nonmatchings/10E8", func_801719E0);
#else
void func_801719E0(Entity* self) {
s32 i;
if (self->ext.bat.unk80 == 0) {
self->ext.bat.unk8E = 0;
if (!self->ext.bat.unk80) {
self->ext.bat.unk82 = self->params;
self->ext.bat.unk8E = 0;
switch (self->entityId) {
case 0xD1:
self->primIndex = g_api.AllocPrimitives(PRIM_GT4, 1);
@ -355,7 +344,7 @@ void func_801719E0(Entity* self) {
func_8017170C(self, 0);
self->flags = FLAG_UNK_08000000 | FLAG_UNK_04000000 |
FLAG_HAS_PRIMS | FLAG_UNK_20000;
func_801710E8(self, &D_801704A8);
func_801710E8(self, D_801704A8);
self->ext.bat.unk84 = rand() % 4096;
self->ext.bat.unk86 = 0;
self->ext.bat.unk88 = 0xC;
@ -372,8 +361,8 @@ void func_801719E0(Entity* self) {
func_8017170C(self, 0);
self->flags = FLAG_UNK_08000000 | FLAG_UNK_04000000 |
FLAG_UNK_02000000 | FLAG_HAS_PRIMS | FLAG_UNK_20000;
func_801710E8(self, &D_801704A8);
if (self->ext.bat.unk82 == 0) {
func_801710E8(self, D_801704A8);
if (!self->ext.bat.unk82) {
self->ext.bat.follow = &PLAYER;
} else {
self->ext.bat.follow = &g_Entities[3 + self->ext.bat.unk82];
@ -381,7 +370,7 @@ void func_801719E0(Entity* self) {
self->ext.bat.cameraX = g_Tilemap.scrollX.i.hi;
self->ext.bat.cameraY = g_Tilemap.scrollY.i.hi;
if (self->ext.bat.unk82 == 0) {
if (!self->ext.bat.unk82) {
for (i = 0; i < 16; i++) {
D_80174C3C[self->ext.bat.unk82][i].x =
self->ext.bat.follow->posX.i.hi + self->ext.bat.cameraX;
@ -418,15 +407,15 @@ void func_801719E0(Entity* self) {
case 0xD1:
self->flags = FLAG_UNK_08000000 | FLAG_UNK_04000000 |
FLAG_HAS_PRIMS | FLAG_UNK_20000;
func_801710E8(self, &D_801704A8);
func_801710E8(self, D_801704A8);
self->ext.bat.unk8C = rand() % 4096;
self->step++;
break;
case 0xD2:
self->flags = FLAG_UNK_08000000 | FLAG_UNK_04000000 |
FLAG_UNK_02000000 | FLAG_HAS_PRIMS | FLAG_UNK_20000;
func_801710E8(self, &D_801704A8);
if (self->ext.bat.unk82 == 0) {
func_801710E8(self, D_801704A8);
if (!self->ext.bat.unk82) {
self->ext.bat.follow = &PLAYER;
} else {
self->ext.bat.follow = &g_Entities[3 + self->ext.bat.unk82];
@ -455,7 +444,6 @@ void func_801719E0(Entity* self) {
self->ext.bat.unk80 = self->entityId;
g_api.func_8011A3AC(self, 0, 0, &D_80174C30);
}
#endif
void func_80171ED4(s32 arg0) {
u16* dst;
@ -671,7 +659,7 @@ void func_80172120(Entity* self) {
func_801710E8(self, D_8017054C);
}
self->ext.bat.unk8C++;
if (D_80170658[D_80174C30.unk0 / 10][0] <
if (D_80170658[D_80174C30.level / 10][0] <
self->ext.bat.unk8C) {
self->ext.bat.unk8C = 0;
self->ext.bat.target = func_8017110C(self);
@ -697,7 +685,7 @@ void func_80172120(Entity* self) {
D_80174B20 = self->ext.bat.target->posY.i.hi;
self->hitboxWidth = 5;
self->hitboxHeight = 5;
g_api.func_8011A3AC(self, 0xF, 1, &D_80174C30);
g_api.func_8011A3AC(self, 15, 1, &D_80174C30);
self->ext.bat.unk86 = 0xC00;
func_801710E8(self, D_801705EC);
func_80171568(self);
@ -709,7 +697,7 @@ void func_80172120(Entity* self) {
D_80174B20 = self->ext.bat.target->posY.i.hi;
D_80174B0C = func_80173F30(self, (s16)D_80174B1C, (s16)D_80174B20);
D_80174B10 = func_80173F74(D_80174B0C, self->ext.bat.unk86,
(s16)D_80170658[D_80174C30.unk0 / 10][1]);
(s16)D_80170658[D_80174C30.level / 10][1]);
self->ext.bat.unk86 = D_80174B10;
self->velocityX = rcos(D_80174B10) << 6;
self->velocityY = -(rsin(D_80174B10) << 6);
@ -793,7 +781,7 @@ void func_80172C30(Entity* self) {
case 0:
func_801719E0(self);
if (self->ext.bat.unk82 == 0) {
func_8017160C(D_80170658[D_80174C30.unk0 / 10][2], 0xD2);
func_8017160C(D_80170658[D_80174C30.level / 10][2], 0xD2);
}
break;
case 1:
@ -1145,43 +1133,44 @@ Entity* func_80173EB0(s32 rangeIndex, s32 entityId) {
}
#endif
#ifdef VERSION_PSP
INCLUDE_ASM("servant/tt_000/nonmatchings/10E8", func_80173F30);
#else
s32 func_80173F30(Entity* entity, s16 x, s16 y) {
s16 diffx = x - entity->posX.i.hi;
return ratan2(-(s16)(y - entity->posY.i.hi), diffx) & 0xFFF;
s16 func_80173F30(Entity* entity, s16 x, s16 y) {
s16 angle;
s16 diffy;
s16 diffx;
diffx = x - entity->posX.i.hi;
diffy = y - entity->posY.i.hi;
angle = ratan2(-diffy, diffx) & 0xFFF;
return angle;
}
#endif
s16 func_80173F74(s16 x1, s16 x2, s16 minDistance) {
#ifdef VERSION_PSP
INCLUDE_ASM("servant/tt_000/nonmatchings/10E8", func_80173F74);
s16 diff = ABS(x2 - x1);
#else
s16 func_80173F74(s16 arg0, s16 arg1, s16 arg2) {
s32 diffTmp = arg1 - arg0;
s32 diffTmp = x2 - x1;
s16 diff = ABS(diffTmp);
s16 res;
if (arg2 > diff) {
arg2 = diff;
#endif
if (minDistance > diff) {
minDistance = diff;
}
if (arg1 < arg0) {
if (x2 < x1) {
if (diff < 0x800) {
res = arg1 + arg2;
x2 += minDistance;
} else {
res = arg1 - arg2;
x2 -= minDistance;
}
} else {
if (diff < 0x800) {
res = arg1 - arg2;
x2 -= minDistance;
} else {
res = arg1 + arg2;
x2 += minDistance;
}
}
return res & 0xFFF;
return x2 & 0xFFF;
}
#endif
#ifndef VERSION_PSP
s32 func_80173FE8(Entity* entity, s32 x, s32 y) {

View File

@ -1,104 +1,104 @@
#include "common.h"
#include <game.h>
s32 D_801704A8[] = {
/* 801704A8 */ 0x04150004,
/* 801704AC */ 0x04160001,
/* 801704B0 */ 0x04170001,
/* 801704B4 */ 0x041E0001,
/* 801704B8 */ 0x04180001,
/* 801704BC */ 0x04190001,
/* 801704C0 */ 0x041A0004,
/* 801704C4 */ 0x041B0002,
/* 801704C8 */ 0x041C0002,
/* 801704CC */ 0x041D0002,
/* 801704D0 */ 0x041E0001,
/* 801704D4 */ 0x04170002,
/* 801704D8 */ 0x04160002,
/* 801704DC */ 0x00000000,
AnimationFrame D_801704A8[] = {
/* 801704A8 */ {4, 0x0415},
/* 801704AC */ {1, 0x0416},
/* 801704B0 */ {1, 0x0417},
/* 801704B4 */ {1, 0x041E},
/* 801704B8 */ {1, 0x0418},
/* 801704BC */ {1, 0x0419},
/* 801704C0 */ {4, 0x041A},
/* 801704C4 */ {2, 0x041B},
/* 801704C8 */ {2, 0x041C},
/* 801704CC */ {2, 0x041D},
/* 801704D0 */ {1, 0x041E},
/* 801704D4 */ {2, 0x0417},
/* 801704D8 */ {2, 0x0416},
/* 801704DC */ {0, 0x0000},
};
s32 D_801704E0[] = {
/* 801704E0 */ 0x041F0005,
/* 801704E4 */ 0x04200005,
/* 801704E8 */ 0x041F0005,
/* 801704EC */ 0x04200005,
/* 801704F0 */ 0x041F0005,
/* 801704F4 */ 0x04200005,
/* 801704F8 */ 0x041F0004,
/* 801704FC */ 0x04200004,
/* 80170500 */ 0x041F0003,
/* 80170504 */ 0x04200003,
/* 80170508 */ 0x041F0002,
/* 8017050C */ 0x04200010,
/* 80170510 */ 0x00000000,
AnimationFrame D_801704E0[] = {
/* 801704E0 */ {5, 0x041F},
/* 801704E4 */ {5, 0x0420},
/* 801704E8 */ {5, 0x041F},
/* 801704EC */ {5, 0x0420},
/* 801704F0 */ {5, 0x041F},
/* 801704F4 */ {5, 0x0420},
/* 801704F8 */ {4, 0x041F},
/* 801704FC */ {4, 0x0420},
/* 80170500 */ {3, 0x041F},
/* 80170504 */ {3, 0x0420},
/* 80170508 */ {2, 0x041F},
/* 8017050C */ {16, 0x0420},
/* 80170510 */ {0, 0x0000},
};
s32 D_80170514[] = {
/* 80170514 */ 0x04150001,
/* 80170518 */ 0x04160001,
/* 8017051C */ 0x04170001,
/* 80170520 */ 0x041E0001,
/* 80170524 */ 0x04180001,
/* 80170528 */ 0x04190001,
/* 8017052C */ 0x041A0001,
/* 80170530 */ 0x041B0001,
/* 80170534 */ 0x041C0001,
/* 80170538 */ 0x041D0001,
/* 8017053C */ 0x041E0001,
/* 80170540 */ 0x04170001,
/* 80170544 */ 0x04160001,
/* 80170548 */ 0x00000000,
AnimationFrame D_80170514[] = {
/* 80170514 */ {1, 0x0415},
/* 80170518 */ {1, 0x0416},
/* 8017051C */ {1, 0x0417},
/* 80170520 */ {1, 0x041E},
/* 80170524 */ {1, 0x0418},
/* 80170528 */ {1, 0x0419},
/* 8017052C */ {1, 0x041A},
/* 80170530 */ {1, 0x041B},
/* 80170534 */ {1, 0x041C},
/* 80170538 */ {1, 0x041D},
/* 8017053C */ {1, 0x041E},
/* 80170540 */ {1, 0x0417},
/* 80170544 */ {1, 0x0416},
/* 80170548 */ {0, 0x0000},
};
s32 D_8017054C[] = {
/* 8017054C */ 0x04150001,
/* 80170550 */ 0x04160001,
/* 80170554 */ 0x04170001,
/* 80170558 */ 0x041E0001,
/* 8017055C */ 0x04180001,
/* 80170560 */ 0x04190001,
/* 80170564 */ 0x041A0001,
/* 80170568 */ 0x041B0001,
/* 8017056C */ 0x041C0001,
/* 80170570 */ 0x041D0001,
/* 80170574 */ 0x041E0001,
/* 80170578 */ 0x04170001,
/* 8017057C */ 0x04160001,
/* 80170580 */ 0x04150001,
/* 80170584 */ 0x04160001,
/* 80170588 */ 0x04170001,
/* 8017058C */ 0x041E0001,
/* 80170590 */ 0x04180001,
/* 80170594 */ 0x04190001,
/* 80170598 */ 0x041A0002,
/* 8017059C */ 0x041B0002,
/* 801705A0 */ 0x041C0002,
/* 801705A4 */ 0x041D0002,
/* 801705A8 */ 0x041E0002,
/* 801705AC */ 0x04170002,
/* 801705B0 */ 0x04160002,
/* 801705B4 */ 0x04150002,
/* 801705B8 */ 0x04160002,
/* 801705BC */ 0x04170002,
/* 801705C0 */ 0x041E0002,
/* 801705C4 */ 0x04180002,
/* 801705C8 */ 0x04190002,
/* 801705CC */ 0x041A0003,
/* 801705D0 */ 0x041B0003,
/* 801705D4 */ 0x041C0003,
/* 801705D8 */ 0x041D0003,
/* 801705DC */ 0x041E0003,
/* 801705E0 */ 0x04170003,
/* 801705E4 */ 0x04160003,
/* 801705E8 */ 0x0000FFFE,
AnimationFrame D_8017054C[] = {
/* 8017054C */ {1, 0x0415},
/* 80170550 */ {1, 0x0416},
/* 80170554 */ {1, 0x0417},
/* 80170558 */ {1, 0x041E},
/* 8017055C */ {1, 0x0418},
/* 80170560 */ {1, 0x0419},
/* 80170564 */ {1, 0x041A},
/* 80170568 */ {1, 0x041B},
/* 8017056C */ {1, 0x041C},
/* 80170570 */ {1, 0x041D},
/* 80170574 */ {1, 0x041E},
/* 80170578 */ {1, 0x0417},
/* 8017057C */ {1, 0x0416},
/* 80170580 */ {1, 0x0415},
/* 80170584 */ {1, 0x0416},
/* 80170588 */ {1, 0x0417},
/* 8017058C */ {1, 0x041E},
/* 80170590 */ {1, 0x0418},
/* 80170594 */ {1, 0x0419},
/* 80170598 */ {2, 0x041A},
/* 8017059C */ {2, 0x041B},
/* 801705A0 */ {2, 0x041C},
/* 801705A4 */ {2, 0x041D},
/* 801705A8 */ {2, 0x041E},
/* 801705AC */ {2, 0x0417},
/* 801705B0 */ {2, 0x0416},
/* 801705B4 */ {2, 0x0415},
/* 801705B8 */ {2, 0x0416},
/* 801705BC */ {2, 0x0417},
/* 801705C0 */ {2, 0x041E},
/* 801705C4 */ {2, 0x0418},
/* 801705C8 */ {2, 0x0419},
/* 801705CC */ {3, 0x041A},
/* 801705D0 */ {3, 0x041B},
/* 801705D4 */ {3, 0x041C},
/* 801705D8 */ {3, 0x041D},
/* 801705DC */ {3, 0x041E},
/* 801705E0 */ {3, 0x0417},
/* 801705E4 */ {3, 0x0416},
/* 801705E8 */ {-2, 0x0000},
};
s32 D_801705EC[] = {
/* 801705EC */ 0x04150001,
/* 801705F0 */ 0x0000FFFF,
AnimationFrame D_801705EC[] = {
/* 801705EC */ {1, 0x0415},
/* 801705F0 */ {-1, 0x0000},
};
s32* D_801705F4[] = {
AnimationFrame* D_801705F4[] = {
/* 801705F4 */ D_801704A8,
/* 801705F8 */ D_801704E0,
/* 801705FC */ D_80170514,

View File

@ -1,10 +1,10 @@
#include "servant.h"
Sprite D_80170608[] = {
{-4, -4, 8, 8, 0x144, 0x78, 8, 0, 0, 0, 16, 0, 8, 0},
{-4, -4, 8, 8, 0x144, 0x78, 120, 0, 8, 0, 128, 0, 16, 0},
{-4, -4, 8, 8, 0x144, 0x78, 228, 0, 135, 0, 236, 0, 143, 0},
{-4, -4, 8, 8, 0x144, 0x78, 80, 0, 0, 0, 88, 0, 8, 0},
{-4, -4, 8, 8, 0x144, 0x78, 8, 0, 16, 8},
{-4, -4, 8, 8, 0x144, 0x78, 120, 8, 128, 16},
{-4, -4, 8, 8, 0x144, 0x78, 228, 135, 236, 143},
{-4, -4, 8, 8, 0x144, 0x78, 80, 0, 88, 8},
};
s32 D_80170658[][5] = {
{90, 64, 0, 128, 1}, //