Importing remainder of ghost data (#1747)

Imported the remainder of the data.
This commit is contained in:
H.M. Burger 2024-10-05 21:05:22 -05:00 committed by GitHub
parent bc71a8940a
commit 5b717b4ec4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 119 additions and 79 deletions

View File

@ -38,13 +38,14 @@ segments:
align: 4
subalign: 4
subsegments:
- [0x0, .data, F84]
- [0x40, .data, spriteparts]
- [0x448, .data, clutdata]
- [0x4A8, .data, animationdata]
- [0x508, data]
- [0xEFC, .rodata, F84]
- [0xF3C, .rodata, F84] # ProcessSfxState
- [0xF60, c, F84]
- [0x0, .data, ghost]
- [0x40, .data, servant_spriteparts]
- [0x448, .data, servant_clutdata]
- [0x4A8, .data, ghost_animation_data]
- [0x508, .data, ghost_data]
- [0x5AF, .data, servant_events]
- [0xEFC, .rodata, ghost]
- [0xF3C, .rodata, ghost] # ProcessSfxState
- [0xF60, c, ghost]
- [0x35B0, sbss]
- [0xA000]

View File

@ -0,0 +1,63 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#define E_UNK_DC 220
#define E_UNK_DF 223
// clang-format off
#define MAKE_EVENT(servant, roomX, roomY, camX, camY, check, delay, entity, params) \
{ 0, 0, servant, roomX, roomY, camX, camY, check, delay, entity, params, 1 }
#define NULL_EVENT \
{ 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0 }
ServantEvent g_Events[] = {
NULL_EVENT,
MAKE_EVENT(FAM_ACTIVE_BAT, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_GHOST, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_DEMON, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_DEMON, 32, 40, 0, 4, FOR_CASTLE_FLAG(0x50), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_DEMON, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_DEMON, -31, 20, 0, 772, FOR_CASTLE_FLAG(0x58), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_DEMON, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 32, 40, 0, 4, FOR_CASTLE_FLAG(0x50), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, -31, 20, 0, 772, FOR_CASTLE_FLAG(0x58), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 48, E_UNK_DC, 1),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 21, 22, 150, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 60, 26, 0, 255, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 44, 18, 633, 772, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 10, 15, 790, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 39, 37, 0, 516, FOR_CASTLE_FLAG(0xC4), 96, E_UNK_DC, 3),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 36, 27, 0, 4, FOR_CASTLE_FLAG(0xC6), 256, E_UNK_DC, 4),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 12, 32, 0, 516, FOR_CASTLE_FLAG(0x81), 160, E_UNK_DC, 5),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 12, 32, 0, 511, FOR_CASTLE_FLAG(0x82), 32, E_UNK_DC, 6),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 27, 21, 512, 260, FOR_CASTLE_FLAG(0x20), 64, E_UNK_DC, 7),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 49, 18, 0, 4, FOR_CASTLE_FLAG(0x70), 512, E_UNK_DC, 8),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 50, 11, 0, 4, FOR_CASTLE_FLAG(0xA2), 32, E_UNK_DC, 9),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 43, 10, 0, 255, FOR_CASTLE_FLAG(0xA1), 0x80, E_UNK_DC, 10),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DC, 15),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 48, E_UNK_DC, 1),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 21, 22, 150, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 60, 26, 0, 255, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 44, 18, 633, 772, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 10, 15, 790, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 39, 37, 0, 516, FOR_CASTLE_FLAG(0xC4), 96, E_UNK_DC, 3),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 36, 27, 0, 4, FOR_CASTLE_FLAG(0xC6), 256, E_UNK_DC, 4),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 12, 32, 0, 516, FOR_CASTLE_FLAG(0x81), 160, E_UNK_DC, 5),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 12, 32, 0, 511, FOR_CASTLE_FLAG(0x82), 32, E_UNK_DC, 6),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 27, 21, 512, 260, FOR_CASTLE_FLAG(0x20), 64, E_UNK_DC, 7),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 49, 18, 0, 4, FOR_CASTLE_FLAG(0x70), 512, E_UNK_DC, 8),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 50, 11, 0, 4, FOR_CASTLE_FLAG(0xA2), 32, E_UNK_DC, 9),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 43, 10, 0, 255, FOR_CASTLE_FLAG(0xA1), 128, E_UNK_DC, 10),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DC, 15),
MAKE_EVENT(FAM_ACTIVE_SWORD, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_SWORD, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_SWORD, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DC, 15),
#if defined(VERSION_US)
NULL_EVENT
#elif defined(VERSION_HD)
{ 0, 0, -1, 1, -1, -1, -1, -1, -1, -1, 0, 0, 0 },
#endif
};

View File

@ -0,0 +1,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
s32 g_PlaySfxStep = 99;
EntitySearch g_EntityRanges[] = {{5, 7}, {32, 63}};
ServantEvent* g_EventQueue = g_Events;
u32 g_CurrentServant = 0;
u32 g_CurrentRoomX = 0;
u32 g_CurrentRoomY = 0;

View File

@ -1,12 +1,20 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#include "servant.h"
// sprite data
Sprite D_80170608[] = {
{-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},
};
// ability by level table
// 0 - attack delay (frames?)
// 1 - max angle of attack
// 2 - additional bat count
// 3 - min enemy HP
// 4 - make bad attacks (attack invincible?)
s32 D_80170658[][5] = {
{90, 64, 0, 128, 1}, //
{90, 96, 0, 128, 1}, //
@ -20,6 +28,7 @@ s32 D_80170658[][5] = {
{30, 352, 3, 16, 0}, //
};
// Bat specific clut
u16 D_80170720[] = {
0x0000, 0xFC00, 0xF400, 0xEC00, 0xE400, 0xDC00, 0xD400, 0xCC00,
0xC400, 0xBC00, 0xB400, 0xAC00, 0xA400, 0x9C00, 0x9400, 0x8C00,
@ -27,73 +36,5 @@ u16 D_80170720[] = {
0x0000, 0x000C, 0x0C76, 0x14BF, 0x295F, 0x39FF, 0x463F, 0x7BDE,
};
#define E_UNK_DC 220
#define E_UNK_DF 223
// clang-format off
#define MAKE_EVENT(servant, roomX, roomY, camX, camY, check, delay, entity, params) \
{ 0, 0, servant, roomX, roomY, camX, camY, check, delay, entity, params, 1 }
#define NULL_EVENT \
{ 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0 }
ServantEvent g_Events[] = {
NULL_EVENT,
MAKE_EVENT(FAM_ACTIVE_BAT, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_GHOST, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_DEMON, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_DEMON, 32, 40, 0, 4, FOR_CASTLE_FLAG(0x50), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_DEMON, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_DEMON, -31, 20, 0, 772, FOR_CASTLE_FLAG(0x58), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_DEMON, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 32, 40, 0, 4, FOR_CASTLE_FLAG(0x50), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DF, 0),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, -31, 20, 0, 772, FOR_CASTLE_FLAG(0x58), 8, E_UNK_DF, 1),
MAKE_EVENT(FAM_ACTIVE_NOSE_DEMON, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DF, 15),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 48, E_UNK_DC, 1),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 21, 22, 150, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 60, 26, 0, 255, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 44, 18, 633, 772, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 10, 15, 790, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 39, 37, 0, 516, FOR_CASTLE_FLAG(0xC4), 96, E_UNK_DC, 3),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 36, 27, 0, 4, FOR_CASTLE_FLAG(0xC6), 256, E_UNK_DC, 4),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 12, 32, 0, 516, FOR_CASTLE_FLAG(0x81), 160, E_UNK_DC, 5),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 12, 32, 0, 511, FOR_CASTLE_FLAG(0x82), 32, E_UNK_DC, 6),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 27, 21, 512, 260, FOR_CASTLE_FLAG(0x20), 64, E_UNK_DC, 7),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 49, 18, 0, 4, FOR_CASTLE_FLAG(0x70), 512, E_UNK_DC, 8),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 50, 11, 0, 4, FOR_CASTLE_FLAG(0xA2), 32, E_UNK_DC, 9),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 43, 10, 0, 255, FOR_CASTLE_FLAG(0xA1), 0x80, E_UNK_DC, 10),
MAKE_EVENT(FAM_ACTIVE_FAERIE, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DC, 15),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 48, E_UNK_DC, 1),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 21, 22, 150, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 60, 26, 0, 255, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 44, 18, 633, 772, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 10, 15, 790, 4, FOR_RELIC(RELIC_FORM_OF_MIST), 96, E_UNK_DC, 2),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 39, 37, 0, 516, FOR_CASTLE_FLAG(0xC4), 96, E_UNK_DC, 3),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 36, 27, 0, 4, FOR_CASTLE_FLAG(0xC6), 256, E_UNK_DC, 4),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 12, 32, 0, 516, FOR_CASTLE_FLAG(0x81), 160, E_UNK_DC, 5),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 12, 32, 0, 511, FOR_CASTLE_FLAG(0x82), 32, E_UNK_DC, 6),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 27, 21, 512, 260, FOR_CASTLE_FLAG(0x20), 64, E_UNK_DC, 7),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 49, 18, 0, 4, FOR_CASTLE_FLAG(0x70), 512, E_UNK_DC, 8),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 50, 11, 0, 4, FOR_CASTLE_FLAG(0xA2), 32, E_UNK_DC, 9),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 43, 10, 0, 255, FOR_CASTLE_FLAG(0xA1), 128, E_UNK_DC, 10),
MAKE_EVENT(FAM_ACTIVE_YOUSEI, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DC, 15),
MAKE_EVENT(FAM_ACTIVE_SWORD, 49, 20, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_SWORD, 16, 21, 0, 4, CHECK_NONE, 0, E_UNK_DC, 0),
MAKE_EVENT(FAM_ACTIVE_SWORD, 41, 50, 0, 4, FOR_CASTLE_FLAG(0x42), 1, E_UNK_DC, 15),
#if defined(VERSION_US)
NULL_EVENT
#elif defined(VERSION_HD)
{ 0, 0, -1, 1, -1, -1, -1, -1, -1, -1, 0, 0, 0 },
#endif
};
// clang-format on
s32 g_PlaySfxStep = 99;
EntitySearch g_EntityRanges[] = {{5, 7}, {32, 63}};
ServantEvent* g_EventQueue = g_Events;
u32 g_CurrentServant = 0;
u32 g_CurrentRoomX = 0;
u32 g_CurrentRoomY = 0;
#include "../shared_events.h"
#include "../shared_globals.h"

View File

@ -15,7 +15,7 @@ extern s32 D_us_801737DC;
extern FamiliarStats D_us_80173810;
extern SpriteParts* D_80170040[];
extern u16 D_us_80170580[48];
extern u16 D_us_80170580[32];
extern u16 D_us_80170448[48];
extern Primitive*

View File

@ -0,0 +1,23 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#include "servant.h"
// ability stats for level / 10
// 0 - delay counter
// 1 - spell Id
// 2 - make bad attacks (skips enemy hitbox & 8)
s32 D_us_80170508[][3] = {
{120, 17, 1}, {120, 17, 1}, {100, 17, 1}, {100, 17, 1}, {90, 17, 0},
{90, 17, 0}, {75, 17, 0}, {75, 18, 0}, {60, 18, 0}, {60, 18, 0},
};
// Ghost specific clut
u16 D_us_80170580[] = {
0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x7FFF, 0x8000,
0x8000, 0x8000, 0xFCE7, 0xFDEF, 0xFEF7, 0xFFFF, 0x8000, 0x8000,
};
// x offsets for positioning primitives
u16 D_us_801705A0[4] = {6, 3, 8, 0};
// y offsets for positioning primitives
u16 D_us_801705A8[4] = {-20, -18, -15, 0};

View File

@ -0,0 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
#include "servant.h"
#include "../shared_events.h"
#include "../shared_globals.h"