mirror of
https://github.com/pret/pokediamond.git
synced 2026-03-21 17:54:29 -05:00
374 lines
15 KiB
C
374 lines
15 KiB
C
#ifndef POKEDIAMOND_MAP_OBJECT_H
|
|
#define POKEDIAMOND_MAP_OBJECT_H
|
|
|
|
#include "global.h"
|
|
|
|
#include "field_system.h"
|
|
#include "field_types_def.h"
|
|
#include "filesystem.h"
|
|
#include "heap.h"
|
|
#include "unk_0200CA44.h"
|
|
|
|
typedef void (*LocalMapObject_UnkCallback)(LocalMapObject *object);
|
|
|
|
typedef struct SavedMapObject {
|
|
u32 flags;
|
|
u32 flags2;
|
|
u8 objId;
|
|
u8 movement;
|
|
s8 xRange;
|
|
s8 yRange;
|
|
s8 initialFacing;
|
|
s8 currentFacing;
|
|
s8 nextFacing;
|
|
u16 mapId;
|
|
u16 spriteId;
|
|
u16 type;
|
|
u16 eventFlag;
|
|
u16 script;
|
|
s16 param[3];
|
|
s16 initialX;
|
|
s16 initialY;
|
|
s16 initialZ;
|
|
s16 currentX;
|
|
s16 currentY;
|
|
s16 currentZ;
|
|
fx32 vecY;
|
|
u8 unk30[16];
|
|
u8 unk40[16];
|
|
} SavedMapObject;
|
|
|
|
struct MapObjectManager {
|
|
u32 flags;
|
|
u32 objectCount;
|
|
u32 unk8;
|
|
u32 priority;
|
|
u8 padding[0x4];
|
|
NARC *mapModelNarc;
|
|
u32 unk18;
|
|
u8 padding2[0x104];
|
|
u32 unk120;
|
|
LocalMapObject *objects;
|
|
FieldSystem *fieldSystem;
|
|
};
|
|
|
|
struct LocalMapObject {
|
|
u32 flags;
|
|
u32 flags2;
|
|
u32 id;
|
|
u32 mapId;
|
|
u32 spriteId;
|
|
u32 movement;
|
|
u32 type;
|
|
u32 eventFlag;
|
|
u32 scriptId;
|
|
u32 initialFacing;
|
|
u32 currentFacing;
|
|
u32 nextFacing;
|
|
u32 previousFacing;
|
|
u32 nextFacingBackup;
|
|
s32 param[3];
|
|
s32 xRange;
|
|
s32 yRange;
|
|
u32 initialX;
|
|
u32 initialY;
|
|
u32 initialZ;
|
|
u32 previousX;
|
|
u32 previousY;
|
|
u32 previousZ;
|
|
u32 currentX;
|
|
s32 currentY;
|
|
u32 currentZ;
|
|
VecFx32 positionVector;
|
|
VecFx32 facingVector;
|
|
VecFx32 unk88;
|
|
VecFx32 unk94;
|
|
u32 unkA0;
|
|
u32 movementCmd;
|
|
u32 movementStep;
|
|
u16 unkAC;
|
|
u16 unkAE;
|
|
SysTask *unkB0;
|
|
MapObjectManager *manager;
|
|
LocalMapObject_UnkCallback unkB8;
|
|
LocalMapObject_UnkCallback unkBC;
|
|
LocalMapObject_UnkCallback unkC0;
|
|
LocalMapObject_UnkCallback unkC4;
|
|
LocalMapObject_UnkCallback unkC8;
|
|
LocalMapObject_UnkCallback unkCC;
|
|
LocalMapObject_UnkCallback unkD0;
|
|
LocalMapObject_UnkCallback unkD4;
|
|
u8 unkD8[0x10];
|
|
u8 unkE8[0x10];
|
|
u8 unkF8[0x10];
|
|
u8 unk108[0x20];
|
|
};
|
|
|
|
struct ObjectEvent {
|
|
u16 id;
|
|
u16 spriteId;
|
|
u16 movement;
|
|
u16 type;
|
|
u16 eventFlag;
|
|
u16 scriptId;
|
|
s16 facingDirection;
|
|
u16 param[3];
|
|
s16 xRange;
|
|
s16 yRange;
|
|
u16 x;
|
|
u16 z;
|
|
s32 y;
|
|
// todo this should be in map_events_internal.h
|
|
};
|
|
|
|
typedef enum MapObjectFlagBits {
|
|
MAPOBJECTFLAG_ACTIVE = (1 << 0),
|
|
MAPOBJECTFLAG_SINGLE_MOVEMENT = (1 << 1),
|
|
MAPOBJECTFLAG_UNK2 = (1 << 2),
|
|
MAPOBJECTFLAG_UNK3 = (1 << 3),
|
|
MAPOBJECTFLAG_UNK4 = (1 << 4),
|
|
MAPOBJECTFLAG_UNK5 = (1 << 5),
|
|
MAPOBJECTFLAG_MOVEMENT_PAUSED = (1 << 6),
|
|
MAPOBJECTFLAG_UNK7 = (1 << 7),
|
|
MAPOBJECTFLAG_UNK8 = (1 << 8),
|
|
MAPOBJECTFLAG_VISIBLE = (1 << 9),
|
|
MAPOBJECTFLAG_KEEP = (1 << 10),
|
|
MAPOBJECTFLAG_UNK11 = (1 << 11),
|
|
MAPOBJECTFLAG_UNK12 = (1 << 12),
|
|
MAPOBJECTFLAG_UNK13 = (1 << 13),
|
|
MAPOBJECTFLAG_UNK14 = (1 << 14),
|
|
MAPOBJECTFLAG_UNK15 = (1 << 15),
|
|
MAPOBJECTFLAG_UNK16 = (1 << 16),
|
|
MAPOBJECTFLAG_UNK17 = (1 << 17),
|
|
MAPOBJECTFLAG_UNK18 = (1 << 18),
|
|
MAPOBJECTFLAG_UNK19 = (1 << 19),
|
|
MAPOBJECTFLAG_UNK20 = (1 << 20),
|
|
MAPOBJECTFLAG_UNK21 = (1 << 21),
|
|
MAPOBJECTFLAG_UNK22 = (1 << 22),
|
|
MAPOBJECTFLAG_IGNORE_HEIGHTS = (1 << 23),
|
|
MAPOBJECTFLAG_UNK24 = (1 << 24),
|
|
MAPOBJECTFLAG_UNK25 = (1 << 25),
|
|
MAPOBJECTFLAG_UNK26 = (1 << 26),
|
|
MAPOBJECTFLAG_UNK27 = (1 << 27),
|
|
MAPOBJECTFLAG_UNK28 = (1 << 28),
|
|
MAPOBJECTFLAG_UNK29 = (1 << 29),
|
|
MAPOBJECTFLAG_UNK30 = (1 << 30),
|
|
MAPOBJECTFLAG_UNK31 = (1 << 31),
|
|
} MapObjectFlagBits;
|
|
|
|
// this may be the same as above, I don't know
|
|
typedef enum MapObjectManagerFlagBits {
|
|
MAPOBJECTMANAGERFLAG_NONE = 0,
|
|
MAPOBJECTMANAGERFLAG_UNK0 = (1 << 0),
|
|
MAPOBJECTMANAGERFLAG_UNK1 = (1 << 1),
|
|
MAPOBJECTMANAGERFLAG_UNK2 = (1 << 2),
|
|
MAPOBJECTMANAGERFLAG_UNK3 = (1 << 3),
|
|
} MapObjectManagerFlagBits;
|
|
|
|
#define MAP_OBJECT_GFX_ID_INVALID 0xFFFF
|
|
|
|
typedef struct MapObjectInitArgs {
|
|
u32 mapNo;
|
|
int objectEventCount;
|
|
int index;
|
|
MapObjectManager *manager;
|
|
ObjectEvent *objectEvents;
|
|
} MapObjectInitArgs;
|
|
|
|
typedef struct UnkLMOCallbackStruct {
|
|
u32 unk0;
|
|
LocalMapObject_UnkCallback unk4;
|
|
LocalMapObject_UnkCallback unk8;
|
|
LocalMapObject_UnkCallback unkC;
|
|
LocalMapObject_UnkCallback unk10;
|
|
} UnkLMOCallbackStruct;
|
|
|
|
typedef struct UnkLMOCallbackStruct2 {
|
|
LocalMapObject_UnkCallback unk0;
|
|
LocalMapObject_UnkCallback unk4;
|
|
LocalMapObject_UnkCallback unk8;
|
|
LocalMapObject_UnkCallback unkC;
|
|
LocalMapObject_UnkCallback unk10;
|
|
} UnkLMOCallbackStruct2;
|
|
|
|
typedef struct UnkLMOCallbackStruct3 {
|
|
u32 spriteId;
|
|
UnkLMOCallbackStruct2 *callbackStruct;
|
|
} UnkLMOCallbackStruct3;
|
|
|
|
MapObjectManager *MapObjectManager_Init(FieldSystem *fieldSystem, u32 objectCount, u32 priority);
|
|
void MapObjectManager_Delete(MapObjectManager *manager);
|
|
void sub_020573C8(MapObjectManager *manager, u32 unused, u32 mapId, u32 objectCount, ObjectEvent *objectEvents);
|
|
LocalMapObject *MapObject_Create(MapObjectManager *manager, u32 x, u32 y, u32 direction, u32 sprite, u32 movement, u32 mapNo);
|
|
LocalMapObject *MapObject_CreateFromObjectEventWithId(MapObjectManager *manager, u16 id, u32 objectEventCount, u32 mapNo, const ObjectEvent *events);
|
|
void sub_02057614(LocalMapObject *object, u32 sprite);
|
|
void sub_02057634(LocalMapObject *object, u32 sprite);
|
|
void MapObject_Remove(LocalMapObject *object);
|
|
void MapObject_Delete(LocalMapObject *object);
|
|
void sub_020576A8(LocalMapObject *object);
|
|
void MapObjectManager_RemoveAllActiveObjects(MapObjectManager *manager);
|
|
void sub_02057750(MapObjectManager *manager);
|
|
void sub_020577A8(MapObjectManager *manager);
|
|
void FieldSystem_SyncMapObjectsToSaveEx(FieldSystem *fieldSystem, MapObjectManager *manager, SavedMapObject *savedObjects, s32 count);
|
|
void MapObjectManager_RestoreFromSave(MapObjectManager *manager, SavedMapObject *savedObjects, u32 objectCount);
|
|
void MapObject_CreateFromMultipleObjectEvents(MapObjectManager *manager, u32 mapNo, u32 objectEventCount, ObjectEvent *objectEvents);
|
|
LocalMapObject *MapObjectManager_GetFirstActiveObjectByID(MapObjectManager *manager, u32 id);
|
|
LocalMapObject *MapObjectManager_GetFirstActiveObjectWithMovement(MapObjectManager *manager, u32 movement);
|
|
BOOL MapObjectManager_GetNextObjectWithFlagFromIndex(MapObjectManager *manager, LocalMapObject **objectDest, s32 *index, MapObjectFlagBits flag);
|
|
u32 MapObject_GetPriorityPlusValue(LocalMapObject *object, u32 value);
|
|
BOOL sub_020582A8(LocalMapObject *object, u32 objectId, u32 mapId);
|
|
BOOL sub_020582F8(LocalMapObject *object, u32 spriteId, u32 objectId, u32 mapId);
|
|
u32 MapObjectManager_GetObjectCount(MapObjectManager *manager);
|
|
void MapObjectManager_SetFlagsBits(MapObjectManager *manager, MapObjectManagerFlagBits bits);
|
|
void MapObjectManager_ClearFlagsBits(MapObjectManager *manager, MapObjectManagerFlagBits bits);
|
|
u32 MapObjectManager_GetFlagsBitsMask(MapObjectManager *manager, MapObjectManagerFlagBits bits);
|
|
u32 MapObjectManager_GetPriority(MapObjectManager *manager);
|
|
void *sub_020583A0(MapObjectManager *manager);
|
|
void sub_020583A4(MapObjectManager *manager, u32 param1);
|
|
u32 sub_020583AC(MapObjectManager *manager);
|
|
LocalMapObject *MapObjectManager_GetObjects2(MapObjectManager *manager);
|
|
LocalMapObject *MapObjectManager_GetObjects(MapObjectManager *manager);
|
|
void MapObjectArray_NextObject(LocalMapObject **objects);
|
|
void MapObjectManager_SetMapModelNarc(MapObjectManager *manager, NARC *mapModelNarc);
|
|
NARC *MapObjectManager_GetMapModelNarc(MapObjectManager *manager);
|
|
void MapObject_SetFlagsBits(LocalMapObject *object, MapObjectFlagBits bits);
|
|
void MapObject_ClearFlagsBits(LocalMapObject *object, MapObjectFlagBits bits);
|
|
u32 MapObject_GetFlagsBitsMask(LocalMapObject *object, MapObjectFlagBits bits);
|
|
BOOL MapObject_TestFlagsBits(LocalMapObject *object, MapObjectFlagBits bits);
|
|
void MapObject_SetID(LocalMapObject *object, u32 id);
|
|
u32 MapObject_GetID(LocalMapObject *object);
|
|
u32 MapObject_GetMapID(LocalMapObject *object);
|
|
void MapObject_SetSpriteID(LocalMapObject *object, u32 spriteId);
|
|
u32 MapObject_GetSpriteID(LocalMapObject *object);
|
|
u32 sub_0205845C(LocalMapObject *object);
|
|
u32 MapObject_GetMovement(LocalMapObject *object);
|
|
void MapObject_SetType(LocalMapObject *object, u32 type);
|
|
u32 MapObject_GetType(LocalMapObject *object);
|
|
void MapObject_SetEventFlag(LocalMapObject *object, u32 eventFlag);
|
|
void MapObject_SetScriptID(LocalMapObject *object, u32 scriptId);
|
|
u32 MapObject_GetScriptID(LocalMapObject *object);
|
|
u32 MapObject_GetInitialFacingDirection(LocalMapObject *object);
|
|
void MapObject_SetFacingDirectionDirect(LocalMapObject *object, u32 direction);
|
|
void MapObject_SetFacingDirection(LocalMapObject *object, u32 direction);
|
|
u32 MapObject_GetFacingDirection(LocalMapObject *object);
|
|
u32 MapObject_GetPreviousFacingDirection(LocalMapObject *object);
|
|
void MapObject_SetNextFacingDirection(LocalMapObject *object, u32 direction);
|
|
u32 MapObject_GetNextFacingDirection(LocalMapObject *object);
|
|
void MapObject_SetOrQueueFacing(LocalMapObject *object, u32 direction);
|
|
void MapObject_SetParam(LocalMapObject *object, s32 value, u32 param);
|
|
s32 MapObject_GetParam(LocalMapObject *object, u32 param);
|
|
void MapObject_SetXRange(LocalMapObject *object, s32 xRange);
|
|
s32 MapObject_GetXRange(LocalMapObject *object);
|
|
void MapObject_SetYRange(LocalMapObject *object, s32 yRange);
|
|
s32 MapObject_GetYRange(LocalMapObject *object);
|
|
void sub_02058544(LocalMapObject *object, u32 param1);
|
|
u32 sub_0205854C(LocalMapObject *object);
|
|
MapObjectManager *MapObject_GetManager(LocalMapObject *object);
|
|
u8 *sub_0205858C(LocalMapObject *object, s32 size);
|
|
u8 *sub_020585B0(LocalMapObject *object);
|
|
u8 *sub_020585B4(LocalMapObject *object, s32 size);
|
|
u8 *sub_020585D8(LocalMapObject *object);
|
|
u8 *sub_020585DC(LocalMapObject *object, s32 size);
|
|
u8 *sub_02058600(LocalMapObject *object);
|
|
u8 *sub_02058604(LocalMapObject *object, s32 size);
|
|
u8 *sub_02058628(LocalMapObject *object);
|
|
void sub_02058638(LocalMapObject *object);
|
|
void sub_0205864C(LocalMapObject *object);
|
|
void sub_020586A0(LocalMapObject *object);
|
|
void sub_020586DC(LocalMapObject *object);
|
|
void MapObject_SetMovementCommand(LocalMapObject *object, u32 command);
|
|
u32 MapObject_GetMovementCommand(LocalMapObject *object);
|
|
void MapObject_SetMovementStep(LocalMapObject *object, u32 step);
|
|
void MapObject_IncrementMovementStep(LocalMapObject *object);
|
|
u32 MapObject_GetMovementStep(LocalMapObject *object);
|
|
void sub_02058718(LocalMapObject *object, u16 param1);
|
|
u16 sub_02058720(LocalMapObject *object);
|
|
void sub_02058728(LocalMapObject *object, u16 param1);
|
|
u16 sub_02058730(LocalMapObject *object);
|
|
FieldSystem *MapObject_GetFieldSystem(LocalMapObject *object);
|
|
u32 MapObject_GetPriority(LocalMapObject *object);
|
|
u32 sub_02058750(LocalMapObject *object);
|
|
void sub_02058768(MapObjectManager *manager);
|
|
void sub_02058774(MapObjectManager *manager);
|
|
void MapObjectManager_PauseAllMovement(MapObjectManager *manager);
|
|
void MapObjectManager_UnpauseAllMovement(MapObjectManager *manager);
|
|
BOOL sub_020587E0(MapObjectManager *manager);
|
|
u32 sub_020587F4(LocalMapObject *object, MapObjectManagerFlagBits bits);
|
|
void sub_02058804(MapObjectManager *manager, BOOL clear);
|
|
BOOL sub_0205881C(MapObjectManager *manager);
|
|
BOOL MapObject_CheckActive(LocalMapObject *object);
|
|
void MapObject_SetSingleMovement(LocalMapObject *object);
|
|
void MapObject_ClearSingleMovement(LocalMapObject *object);
|
|
BOOL MapObject_CheckSingleMovement(LocalMapObject *object);
|
|
void MapObject_SetFlag2(LocalMapObject *object);
|
|
void MapObject_ClearFlag3(LocalMapObject *object);
|
|
BOOL MapObject_CheckFlag14(LocalMapObject *object);
|
|
BOOL MapObject_CheckVisible(LocalMapObject *object);
|
|
void MapObject_SetVisible(LocalMapObject *object, BOOL set);
|
|
void MapObject_ClearFlag18(LocalMapObject *object, BOOL clear);
|
|
BOOL MapObject_CheckFlag19Disabled(LocalMapObject *object);
|
|
void MapObject_SetFlag19(LocalMapObject *object, BOOL set);
|
|
void MapObject_PauseMovement(LocalMapObject *object);
|
|
void MapObject_UnpauseMovement(LocalMapObject *object);
|
|
BOOL MapObject_CheckMovementPaused(LocalMapObject *object);
|
|
BOOL sub_02058934(LocalMapObject *object);
|
|
void MapObject_SetIgnoreHeights(LocalMapObject *object, BOOL set);
|
|
BOOL MapObject_CheckIgnoreHeights(LocalMapObject *object);
|
|
void MapObject_SetKeep(LocalMapObject *object, BOOL set);
|
|
BOOL MapObject_CheckFlag25(LocalMapObject *object);
|
|
void MapObject_SetFlag26(LocalMapObject *object, BOOL set);
|
|
BOOL MapObject_CheckFlag26(LocalMapObject *object);
|
|
void MapObject_SetFlag27(LocalMapObject *object, BOOL set);
|
|
BOOL MapObject_CheckFlag27(LocalMapObject *object);
|
|
void MapObject_SetFlag28(LocalMapObject *object, BOOL set);
|
|
BOOL MapObject_CheckFlag28(LocalMapObject *object);
|
|
void MapObject_SetFlag24(LocalMapObject *object, BOOL set);
|
|
BOOL MapObject_CheckFlag24(LocalMapObject *object);
|
|
BOOL MapObject_CheckFlag4(LocalMapObject *object);
|
|
void MapObject_SetFlag29(LocalMapObject *object, BOOL set);
|
|
BOOL MapObject_CheckFlag29(LocalMapObject *object);
|
|
u32 MapObject_GetInitialX(LocalMapObject *object);
|
|
u32 MapObject_GetInitialY(LocalMapObject *object);
|
|
u32 MapObject_GetInitialZ(LocalMapObject *object);
|
|
u32 MapObject_GetPreviousX(LocalMapObject *object);
|
|
void MapObject_SetPreviousX(LocalMapObject *object, u32 previousX);
|
|
u32 MapObject_GetPreviousY(LocalMapObject *object);
|
|
void MapObject_SetPreviousY(LocalMapObject *object, u32 previousY);
|
|
u32 MapObject_GetPreviousZ(LocalMapObject *object);
|
|
void MapObject_SetPreviousZ(LocalMapObject *object, u32 previousZ);
|
|
u32 MapObject_GetCurrentX(LocalMapObject *object);
|
|
void MapObject_SetCurrentX(LocalMapObject *object, u32 currentX);
|
|
void MapObject_AddCurrentX(LocalMapObject *object, u32 currentX);
|
|
s32 MapObject_GetCurrentY(LocalMapObject *object);
|
|
void MapObject_SetCurrentY(LocalMapObject *object, s32 currentY);
|
|
void MapObject_AddCurrentY(LocalMapObject *object, s32 currentY);
|
|
u32 MapObject_GetCurrentZ(LocalMapObject *object);
|
|
void MapObject_SetCurrentZ(LocalMapObject *object, u32 currentZ);
|
|
void MapObject_AddCurrentZ(LocalMapObject *object, u32 currentZ);
|
|
void MapObject_CopyPositionVector(LocalMapObject *object, VecFx32 *positionVector);
|
|
void MapObject_SetPositionVector(LocalMapObject *object, VecFx32 *positionVector);
|
|
VecFx32 *MapObject_GetPositionVector(LocalMapObject *object);
|
|
fx32 MapObject_GetPositionVectorYCoord(LocalMapObject *object);
|
|
void MapObject_CopyFacingVector(LocalMapObject *object, VecFx32 *facingVector);
|
|
void MapObject_SetFacingVector(LocalMapObject *object, VecFx32 *facingVector);
|
|
void sub_02058BA4(LocalMapObject *object, VecFx32 *vector);
|
|
void sub_02058BB4(LocalMapObject *object, VecFx32 *vector);
|
|
void sub_02058BC4(LocalMapObject *object, VecFx32 *vector);
|
|
void sub_02058BD4(LocalMapObject *object, VecFx32 *vector);
|
|
u32 MapObject_GetPositionVectorYCoordUInt(LocalMapObject *object);
|
|
LocalMapObject *MapObjectManager_GetFirstObjectWithXAndZ(MapObjectManager *manager, u32 x, u32 z);
|
|
void MapObject_SetPositionFromVectorAndDirection(LocalMapObject *object, VecFx32 *positionVector, u32 direction);
|
|
void MapObject_SetPositionFromXYZAndDirection(LocalMapObject *object, u32 x, u32 y, u32 z, u32 direction);
|
|
void sub_02058E90(LocalMapObject *object, u32 movement);
|
|
void sub_02058EB0(LocalMapObject *object, u32 id);
|
|
void sub_02058EC8(LocalMapObject *object);
|
|
void sub_02058ECC(LocalMapObject *object);
|
|
void sub_02058ED0(LocalMapObject *object);
|
|
void sub_02058ED4(LocalMapObject *object);
|
|
void sub_02058ED8(LocalMapObject *object);
|
|
void sub_02058EDC(LocalMapObject *object);
|
|
void sub_02058EE0(LocalMapObject *object);
|
|
void sub_02058EE4(LocalMapObject *object);
|
|
|
|
#endif // POKEDIAMOND_MAP_OBJECT_H
|