mirror of
https://github.com/n64decomp/mk64
synced 2026-06-23 07:59:53 -04:00
Document render/update objects (#565)
* Document objects related code. * Including render/update objects code * Various renamings
This commit is contained in:
+87
-80
@@ -9,70 +9,71 @@
|
||||
//#pragma GCC diagnostic ignored "-Wmicrosoft-extension"
|
||||
//#pragma GCC diagnostic ignored "-Wmissing-member-name-in-structure-/-union"
|
||||
|
||||
/*
|
||||
gActorList should be understood to be populated by generic Actor structs.
|
||||
However, for human readability, many functions interacting with actor list elements expect one of the many
|
||||
specialized types found in this file.
|
||||
|
||||
Note that specialized types must be the same size as a plain Actor. Don't be mislead into thinking that
|
||||
because its a separate type that it can modified separately from plain Actor. If you modify/add an actor type
|
||||
and its size is different from plain Actor's, you WILL run into buggy (potentially crash inducing) behaviour.
|
||||
|
||||
Specialized structs are customizable so long as the following member specifications are met:
|
||||
|
||||
In general:
|
||||
0x00 -> s16 type
|
||||
0x02 -> s16 flags
|
||||
0x30 -> Collision unk30
|
||||
|
||||
If player can collide with the actor:
|
||||
0x0C -> f32 boundingBoxSize
|
||||
|
||||
If the actor makes sound (necessary for doppler/volume stuff):
|
||||
0x18 -> Vec3f pos
|
||||
0x24 -> Vec3f velocity
|
||||
|
||||
Other members are more flexible, and even the non-general specifications can be ignored IF AND ONLY IF you know
|
||||
exactly what you're doing.
|
||||
*/
|
||||
|
||||
#define ACTOR_TREE_MARIO_RACEWAY 0x02
|
||||
#define ACTOR_TREE_YOSHI_VALLEY 0x03
|
||||
#define ACTOR_TREE_ROYAL_RACEWAY 0x04
|
||||
#define ACTOR_FALLING_ROCK 0x05
|
||||
#define ACTOR_BANANA 0x06
|
||||
#define ACTOR_GREEN_SHELL 0x07
|
||||
#define ACTOR_RED_SHELL 0x08
|
||||
#define ACTOR_YOSHI_VALLEY_EGG 0x09
|
||||
#define ACTOR_PIRANHA_PLANT 0x0A
|
||||
#define ACTOR_ITEM_BOX 0x0C
|
||||
#define ACTOR_FAKE_ITEM_BOX 0x0D
|
||||
#define ACTOR_BANANA_BUNCH 0x0E
|
||||
#define ACTOR_TRAIN_ENGINE 0x0F
|
||||
#define ACTOR_TRAIN_TENDER 0x10
|
||||
#define ACTOR_TRAIN_PASSENGER_CAR 0x11
|
||||
#define ACTOR_COW 0x12
|
||||
#define ACTOR_TREE_MOO_MOO_FARM 0x13
|
||||
#define ACTOR_TRIPLE_GREEN_SHELL 0x15
|
||||
#define ACTOR_TRIPLE_RED_SHELL 0x16
|
||||
#define ACTOR_MARIO_RACEWAY_SIGN 0x17
|
||||
#define ACTOR_PALM_TREE 0x19
|
||||
#define ACTOR_TREE_BOWSERS_CASTLE 0x1C
|
||||
#define ACTOR_TREE_FRAPPE_SNOWLAND 0x1D
|
||||
#define ACTOR_CACTUS1_KALAMARI_DESERT 0x1E
|
||||
#define ACTOR_CACTUS2_KALAMARI_DESERT 0x1F
|
||||
#define ACTOR_CACTUS3_KALAMARI_DESERT 0x20
|
||||
#define ACTOR_BUSH_BOWSERS_CASTLE 0x21
|
||||
#define ACTOR_WARIO_STADIUM_SIGN 0x23
|
||||
#define ACTOR_BOX_TRUCK 0x25
|
||||
#define ACTOR_PADDLE_WHEEL_BOAT 0x26
|
||||
#define ACTOR_RAILROAD_CROSSING 0x27
|
||||
#define ACTOR_SCHOOL_BUS 0x28
|
||||
#define ACTOR_TANKER_TRUCK 0x29
|
||||
#define ACTOR_BLUE_SPINY_SHELL 0x2A
|
||||
#define ACTOR_HOT_AIR_BALLOON_ITEM_BOX 0x2B
|
||||
#define ACTOR_CAR 0x2C
|
||||
#define ACTOR_KIWANO_FRUIT 0x2D
|
||||
/**
|
||||
* gActorList should be understood to be populated by generic Actor structs.
|
||||
* However, for human readability, many functions interacting with actor list elements expect one of the many
|
||||
* specialized types found in this file.
|
||||
*
|
||||
* Note that specialized types must be the same size as a plain Actor. Don't be mislead into thinking that
|
||||
* because its a separate type that it can modified separately from plain Actor. If you modify/add an actor type
|
||||
* and its size is different from plain Actor's, you WILL run into buggy (potentially crash inducing) behaviour.
|
||||
*
|
||||
* Specialized structs are customizable so long as the following member specifications are met:
|
||||
*
|
||||
* In general:
|
||||
* 0x00 -> s16 type
|
||||
* 0x02 -> s16 flags
|
||||
* 0x30 -> Collision unk30
|
||||
*
|
||||
* If player can collide with the actor:
|
||||
* 0x0C -> f32 boundingBoxSize
|
||||
*
|
||||
* If the actor makes sound (necessary for doppler/volume stuff):
|
||||
* 0x18 -> Vec3f pos
|
||||
* 0x24 -> Vec3f velocity
|
||||
*
|
||||
* Other members are more flexible, and even the non-general specifications can be ignored IF AND ONLY IF you know
|
||||
* exactly what you're doing.
|
||||
*/
|
||||
enum ActorType {
|
||||
ACTOR_TREE_MARIO_RACEWAY = 0x02,
|
||||
ACTOR_TREE_YOSHI_VALLEY,
|
||||
ACTOR_TREE_ROYAL_RACEWAY,
|
||||
ACTOR_FALLING_ROCK,
|
||||
ACTOR_BANANA,
|
||||
ACTOR_GREEN_SHELL,
|
||||
ACTOR_RED_SHELL,
|
||||
ACTOR_YOSHI_VALLEY_EGG,
|
||||
ACTOR_PIRANHA_PLANT,
|
||||
ACTOR_ITEM_BOX = 0x0C,
|
||||
ACTOR_FAKE_ITEM_BOX,
|
||||
ACTOR_BANANA_BUNCH,
|
||||
ACTOR_TRAIN_ENGINE,
|
||||
ACTOR_TRAIN_TENDER,
|
||||
ACTOR_TRAIN_PASSENGER_CAR,
|
||||
ACTOR_COW,
|
||||
ACTOR_TREE_MOO_MOO_FARM,
|
||||
ACTOR_TRIPLE_GREEN_SHELL = 0x15,
|
||||
ACTOR_TRIPLE_RED_SHELL,
|
||||
ACTOR_MARIO_SIGN,
|
||||
ACTOR_PALM_TREE = 0x19,
|
||||
ACTOR_TREE_BOWSERS_CASTLE = 0x1C,
|
||||
ACTOR_TREE_FRAPPE_SNOWLAND,
|
||||
ACTOR_CACTUS1_KALAMARI_DESERT,
|
||||
ACTOR_CACTUS2_KALAMARI_DESERT,
|
||||
ACTOR_CACTUS3_KALAMARI_DESERT,
|
||||
ACTOR_BUSH_BOWSERS_CASTLE,
|
||||
ACTOR_WARIO_SIGN = 0x23,
|
||||
ACTOR_BOX_TRUCK = 0x25,
|
||||
ACTOR_PADDLE_BOAT,
|
||||
ACTOR_RAILROAD_CROSSING,
|
||||
ACTOR_SCHOOL_BUS,
|
||||
ACTOR_TANKER_TRUCK,
|
||||
ACTOR_BLUE_SPINY_SHELL,
|
||||
ACTOR_HOT_AIR_BALLOON_ITEM_BOX,
|
||||
ACTOR_CAR,
|
||||
ACTOR_KIWANO_FRUIT,
|
||||
};
|
||||
|
||||
#define ACTOR_LIST_SIZE 100
|
||||
|
||||
@@ -80,23 +81,29 @@ exactly what you're doing.
|
||||
#define ACTOR_IS_NOT_EXPIRED 0xF // The actor possesses some kind of collision and can be removed
|
||||
|
||||
// Actor shell->state (green, red and blue)
|
||||
#define HELD_SHELL 0 // Single shell that has not been dropped. (probably holding Z).
|
||||
#define RELEASED_SHELL 1 // This is the short window where single shells aren't being held or launched.
|
||||
#define MOVING_SHELL 2 // Moving towards its target after being shot.
|
||||
#define RED_SHELL_LOCK_ON 3 // Red shell is targeting.
|
||||
#define TRIPLE_GREEN_SHELL 4 // Loses triple shell state when shot.
|
||||
#define GREEN_SHELL_HIT_A_RACER 5 // A racer has been hit by a green shell.
|
||||
#define TRIPLE_RED_SHELL 6 // Loses triple shell state when shot.
|
||||
#define DESTROYED_SHELL 7 // Collision with the shell.
|
||||
#define BLUE_SHELL_LOCK_ON 8 // A blue shell has found a target and is hastily approaching it.
|
||||
#define BLUE_SHELL_TARGET_ELIMINATED 9 // Mission completed, well done boss.
|
||||
enum ShellState {
|
||||
HELD_SHELL, // Single shell that has not been dropped. (probably holding Z).
|
||||
RELEASED_SHELL, // This is the short window where single shells aren't being held or launched.
|
||||
MOVING_SHELL, // Moving towards its target after being shot.
|
||||
RED_SHELL_LOCK_ON, // Red shell is targeting.
|
||||
TRIPLE_GREEN_SHELL, // Loses triple shell state when shot.
|
||||
GREEN_SHELL_HIT_A_RACER, // A racer has been hit by a green shell.
|
||||
TRIPLE_RED_SHELL, // Loses triple shell state when shot.
|
||||
DESTROYED_SHELL, // Collision with the shell.
|
||||
BLUE_SHELL_LOCK_ON, // A blue shell has found a target and is hastily approaching it.
|
||||
BLUE_SHELL_TARGET_ELIMINATED, // Mission completed, well done boss.
|
||||
};
|
||||
|
||||
// Actor banana->state
|
||||
#define HELD_BANANA 0 // Single banana that has not been dropped.
|
||||
#define DROPPED_BANANA 1 // A banana in the state of being dropped on the ground (it only last for a few frames).
|
||||
#define FIRST_BANANA_BUNCH_BANANA 2 // The first banana of the banana bunch
|
||||
#define BANANA_BUNCH_BANANA 3 // Every banana of the banana bunch except the first one.
|
||||
#define BANANA_ON_GROUND 4 // A banana sitting on the ground.
|
||||
#define DESTROYED_BANANA 5 // Collision with the banana.
|
||||
enum BananaState {
|
||||
HELD_BANANA, // Single banana that has not been dropped.
|
||||
DROPPED_BANANA, // A banana in the state of being dropped on the ground (it only last for a few frames).
|
||||
FIRST_BANANA_BUNCH_BANANA, // The first banana of the banana bunch
|
||||
BANANA_BUNCH_BANANA, // Every banana of the banana bunch except the first one.
|
||||
BANANA_ON_GROUND, // A banana sitting on the ground.
|
||||
DESTROYED_BANANA, // Collision with the banana.
|
||||
};
|
||||
|
||||
// Actor fakeItemBox->state
|
||||
#define HELD_FAKE_ITEM_BOX 0 // Item box is being held be Z.
|
||||
#define FAKE_ITEM_BOX_ON_GROUND 1 // Item box is on the ground.
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ typedef struct {
|
||||
} BombKart; // size = 0x54
|
||||
|
||||
//! Indexes for the objects associated with the Bomb Karts
|
||||
extern s32 D_80183DD8[NUM_BOMB_KARTS_MAX];
|
||||
extern s32 gIndexObjectBombKart[NUM_BOMB_KARTS_MAX];
|
||||
|
||||
extern BombKart gBombKarts[NUM_BOMB_KARTS_MAX];
|
||||
extern Collision D_80164038[NUM_BOMB_KARTS_MAX];
|
||||
|
||||
+12
-7
@@ -13,14 +13,14 @@ typedef struct
|
||||
/* 0x04 */ Vec3f pos;
|
||||
/* 0x10 */ Vec3f origin_pos;
|
||||
/* 0x1C */ Vec3f unk_01C;
|
||||
/* 0x28 */ Vec3f unk_028;
|
||||
/* 0x28 */ Vec3f offset;
|
||||
/* 0x34 */ f32 unk_034;
|
||||
/* 0x38 */ Vec3f velocity;
|
||||
/* 0x38 */ Vec3f velocity; // acceleration
|
||||
/* 0x44 */ f32 unk_044;
|
||||
/* 0x48 */ s32 unk_048;
|
||||
/* 0x4C */ s32 unk_04C;
|
||||
/* 0x50 */ s32 unk_050;
|
||||
/* 0x54 */ s32 unk_054;
|
||||
/* 0x54 */ s32 status;
|
||||
/* 0x58 */ s32 unk_058;
|
||||
/* 0x5C */ s32 unk_05C;
|
||||
/* 0x60 */ u8 *activeTLUT;
|
||||
@@ -42,7 +42,7 @@ typedef struct
|
||||
/* 0x9A */ u16 unk_09A;
|
||||
/* 0x9C */ s16 unk_09C;
|
||||
/* 0x9E */ s16 unk_09E;
|
||||
/* 0xA0 */ s16 unk_0A0;
|
||||
/* 0xA0 */ s16 primAlpha;
|
||||
/* 0xA2 */ s16 unk_0A2;
|
||||
/* 0xA4 */ s16 type;
|
||||
/* 0xA6 */ s16 state;
|
||||
@@ -89,14 +89,14 @@ typedef struct
|
||||
/* 0x04 */ Vec3f pos;
|
||||
/* 0x10 */ Vec3f origin_pos;
|
||||
/* 0x1C */ Vec3f unk_01C;
|
||||
/* 0x28 */ Vec3f unk_028;
|
||||
/* 0x28 */ Vec3f offset;
|
||||
/* 0x34 */ f32 unk_034;
|
||||
/* 0x38 */ Vec3f velocity;
|
||||
/* 0x44 */ f32 unk_044;
|
||||
/* 0x48 */ s32 unk_048;
|
||||
/* 0x4C */ s32 unk_04C;
|
||||
/* 0x50 */ s32 unk_050;
|
||||
/* 0x54 */ s32 unk_054;
|
||||
/* 0x54 */ s32 status;
|
||||
/* 0x58 */ s32 unk_058;
|
||||
/* 0x5C */ s32 unk_05C;
|
||||
/* 0x60 */ u8 *activeTLUT;
|
||||
@@ -118,7 +118,7 @@ typedef struct
|
||||
/* 0x9A */ u16 unk_09A;
|
||||
/* 0x9C */ s16 unk_09C;
|
||||
/* 0x9E */ s16 unk_09E;
|
||||
/* 0xA0 */ s16 unk_0A0;
|
||||
/* 0xA0 */ s16 primAlpha;
|
||||
/* 0xA2 */ s16 unk_0A2;
|
||||
/* 0xA4 */ s16 currentItem;
|
||||
/* 0xA6 */ s16 itemDisplayState; // Usually a state tracker
|
||||
@@ -159,6 +159,11 @@ typedef struct
|
||||
|
||||
// This are other lists of indices in gObjectList.
|
||||
|
||||
/**
|
||||
* @brief Status flags for objects
|
||||
*/
|
||||
#define VISIBLE 0x00040000
|
||||
|
||||
/**
|
||||
* Use unknown. An object is reserved and its index is saved to
|
||||
* this variable, but it appears to go unreferenced
|
||||
|
||||
+4
-4
@@ -11,8 +11,8 @@
|
||||
#define LOCOMOTIVE_ONLY 0
|
||||
|
||||
// It seems like there's room for 2 Ferries, but only 1 is ever active
|
||||
#define NUM_ACTIVE_PADDLE_WHEEL_BOATS 1
|
||||
#define NUM_PADDLE_WHEEL_BOATS 2
|
||||
#define NUM_ACTIVE_PADDLE_BOATS 1
|
||||
#define NUM_PADDLE_BOATS 2
|
||||
|
||||
#define NUM_RACE_BOX_TRUCKS 7
|
||||
#define NUM_RACE_SCHOOL_BUSES 7
|
||||
@@ -59,7 +59,7 @@ typedef struct {
|
||||
* Probably audio related
|
||||
**/
|
||||
/* 0x28 */ s32 someFlags;
|
||||
} PaddleWheelBoatStuff; // size = 0x2C
|
||||
} PaddleBoatStuff; // size = 0x2C
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 unused; // Gets set to 0, but doesn't seem to have any purpose
|
||||
@@ -85,7 +85,7 @@ typedef struct {
|
||||
extern TrainStuff gTrainList[];
|
||||
|
||||
// This is an array, maybe they intended to have multiple boats at some point in development?
|
||||
extern PaddleWheelBoatStuff gFerries[];
|
||||
extern PaddleBoatStuff gPaddleBoats[];
|
||||
|
||||
// Lists for different vehicles in Toad's Turnpike
|
||||
extern VehicleStuff gBoxTruckList[];
|
||||
|
||||
Reference in New Issue
Block a user