sm64pc/src/game/object_list_processor.h

109 lines
3.8 KiB
C
Raw Normal View History

2020-05-05 12:15:53 +00:00
#ifndef _OBJECT_LIST_PROCESSOR_H
#define _OBJECT_LIST_PROCESSOR_H
struct Object;
struct SpawnInfo;
/**
* Flags for gTimeStopState. These control which objects are processed each frame
* and also track some miscellaneous info.
*/
#define TIME_STOP_UNKNOWN_0 (1 << 0)
#define TIME_STOP_ENABLED (1 << 1)
#define TIME_STOP_DIALOG (1 << 2)
#define TIME_STOP_MARIO_AND_DOORS (1 << 3)
#define TIME_STOP_ALL_OBJECTS (1 << 4)
#define TIME_STOP_MARIO_OPENED_DOOR (1 << 5)
#define TIME_STOP_ACTIVE (1 << 6)
/**
* The maximum number of objects that can be loaded at once.
*/
#define OBJECT_POOL_CAPACITY 240
/**
* Every object is categorized into an object list, which controls the order
* they are processed and which objects they can collide with.
*/
enum ObjectList
{
OBJ_LIST_PLAYER, // (0) mario
OBJ_LIST_UNUSED_1, // (1) (unused)
OBJ_LIST_DESTRUCTIVE, // (2) things that can be used to destroy other objects, like
// bob-ombs and corkboxes
OBJ_LIST_UNUSED_3, // (3) (unused)
OBJ_LIST_GENACTOR, // (4) general actors. most normal 'enemies' or actors are
// on this list. (MIPS, bullet bill, bully, etc)
OBJ_LIST_PUSHABLE, // (5) pushable actors. This is a group of objects which
// can push each other around as well as their parent
// objects. (goombas, koopas, spinies)
OBJ_LIST_LEVEL, // (6) level objects. general level objects such as heart, star
OBJ_LIST_UNUSED_7, // (7) (unused)
OBJ_LIST_DEFAULT, // (8) default objects. objects that didnt start with a 00
// command are put here, so this is treated as a default.
OBJ_LIST_SURFACE, // (9) surface objects. objects that specifically have surface
// collision and not object collision. (thwomp, whomp, etc)
OBJ_LIST_POLELIKE, // (10) polelike objects. objects that attract or otherwise
// "cling" mario similar to a pole action. (hoot,
// whirlpool, trees/poles, etc)
OBJ_LIST_SPAWNER, // (11) spawners
OBJ_LIST_UNIMPORTANT, // (12) unimportant objects. objects that will not load
// if there are not enough object slots: they will also
// be manually unloaded to make room for slots if the list
// gets exhausted.
NUM_OBJ_LISTS
};
extern struct ObjectNode gObjectListArray[];
extern s32 gDebugInfoFlags;
extern s32 gNumFindFloorMisses;
extern UNUSED s32 unused_8033BEF8;
extern s32 gUnknownWallCount;
extern u32 gObjectCounter;
struct NumTimesCalled {
/*0x00*/ s16 floor;
/*0x02*/ s16 ceil;
/*0x04*/ s16 wall;
};
extern struct NumTimesCalled gNumCalls;
extern s16 gDebugInfo[][8];
extern s16 gDebugInfoOverwrite[][8];
extern u32 gTimeStopState;
extern struct Object gObjectPool[];
extern struct Object gMacroObjectDefaultParent;
extern struct ObjectNode *gObjectLists;
extern struct ObjectNode gFreeObjectList;
extern struct Object *gMarioObject;
extern struct Object *gLuigiObject;
extern struct Object *gCurrentObject;
extern const BehaviorScript *gBehCommand;
extern s16 gPrevFrameObjectCount;
extern s32 gSurfaceNodesAllocated;
extern s32 gSurfacesAllocated;
extern s32 gNumStaticSurfaceNodes;
extern s32 gNumStaticSurfaces;
extern struct MemoryPool *gObjectMemoryPool;
void bhv_mario_update(void);
void set_object_respawn_info_bits(struct Object *obj, u8 bits);
void unload_objects_from_area(s32 unused, s32 areaIndex);
void spawn_objects_from_info(s32 unused, struct SpawnInfo *spawnInfo);
void clear_objects(void);
void update_objects(s32 unused);
#endif /* _OBJECT_LIST_PROCESSOR_H */