Discover geo types and rename tiles to geo

This commit is contained in:
Ryan Dwyer
2022-07-17 11:45:27 +10:00
parent b5fd42aed2
commit ffae7d36fb
21 changed files with 560 additions and 571 deletions
+1 -1
View File
@@ -39,7 +39,7 @@ extern s32 *var8009a888;
extern union filedataptr g_TileFileData;
extern s32 g_TileNumRooms;
extern u32 *g_TileRooms;
extern struct tiletype2 var8009a918;
extern struct geoblock var8009a918;
extern u8 g_RdpDramStack[SP_DRAM_STACK_SIZE8];
extern N_ALSndPlayer var8009c2d0;
extern struct var8009c340 var8009c340;
+23 -23
View File
@@ -1125,6 +1125,28 @@
#define GBGAME_OTHER 0
#define GBGAME_PD 2
#define GEOFLAG_0001 0x0001
#define GEOFLAG_0002 0x0002
#define GEOFLAG_COLLISIONS 0x0004
#define GEOFLAG_0008 0x0008
#define GEOFLAG_OPAQUE 0x0010 // Block AI fire/sight
#define GEOFLAG_LIFTFLOOR 0x0020
#define GEOFLAG_LADDER 0x0040
#define GEOFLAG_0080 0x0080
#define GEOFLAG_0100 0x0100 // Editor: Low wall/edge
#define GEOFLAG_UNDERWATER 0x0200
#define GEOFLAG_0400 0x0400 // Unused
#define GEOFLAG_AIBOTCROUCH 0x0800
#define GEOFLAG_AIBOTDUCK 0x1000
#define GEOFLAG_STEP 0x2000 // Ascend regardless of steepness
#define GEOFLAG_DIE 0x4000
#define GEOFLAG_CLIMBABLELEDGE 0x8000 // Used for most ledges in Chicago, but not near drain pickup
#define GEOTYPE_TILE_I 0 // Tiles with integer vertices - used for BG
#define GEOTYPE_TILE_F 1 // Tiles with float vertices - used for lifts
#define GEOTYPE_BLOCK 2 // Most objects - multiple x/z vertices, and a single ymin and ymax
#define GEOTYPE_CYL 3 // Cylinder - used by chrs and the hoverbike
#define GOPOSFLAG_SPEED 0x03 // bits 0x01 and 0x02 combined
#define GOPOSFLAG_INIT 0x04
#define GOPOSFLAG_FORPATHSTART 0x08
@@ -3059,7 +3081,7 @@
#define OBJFLAG3_PLAYERUNDROPPABLE 0x00400000 // Player does not drop item when dead
#define OBJFLAG3_00800000 0x00800000 // Not used in scripts
#define OBJFLAG3_01000000 0x01000000 // Not used in scripts
#define OBJFLAG3_GEOTYPE3 0x02000000 // If set then obj uses tiletype3 else tiletype2
#define OBJFLAG3_GEOCYL 0x02000000 // Use cylinder geometry rather than block
#define OBJFLAG3_04000000 0x04000000 // Not used in scripts
#define OBJFLAG3_08000000 0x08000000 // Not used in scripts
#define OBJFLAG3_10000000 0x10000000 // Editor: "Keep Collisions After Fully Destroyed"
@@ -3975,28 +3997,6 @@
#define TICKOP_GIVETOPLAYER 4
#define TICKOP_5 5
#define TILEFLAG_0001 0x0001 // Editor: Traversable
#define TILEFLAG_0002 0x0002
#define TILEFLAG_0004 0x0004 // Editor: Collisions
#define TILEFLAG_0008 0x0008
#define TILEFLAG_0010 0x0010 // Editor: Block AI fire/sight
#define TILEFLAG_0020 0x0020
#define TILEFLAG_LADDER 0x0040
#define TILEFLAG_0080 0x0080
#define TILEFLAG_0100 0x0100 // Editor: Low wall/edge
#define TILEFLAG_UNDERWATER 0x0200
#define TILEFLAG_0400 0x0400
#define TILEFLAG_AIBOTCROUCH 0x0800
#define TILEFLAG_AIBOTDUCK 0x1000
#define TILEFLAG_2000 0x2000 // Editor: Incline
#define TILEFLAG_DIE 0x4000
#define TILEFLAG_CLIMBABLELEDGE 0x8000 // used for most ledges in Chicago, but not near drain pickup
#define TILETYPE_00 0 // Standard BG tiles
#define TILETYPE_01 1
#define TILETYPE_02 2
#define TILETYPE_03 3 // Chr/obj geometry
#define TIMEPRECISION_DAYS 0
#define TIMEPRECISION_HOURS 1
#define TIMEPRECISION_MINUTES 2
+16 -16
View File
@@ -14,22 +14,22 @@
.set FLOORTYPE_DIRT, 7
.set FLOORTYPE_SNOW, 8
.set TILEFLAG_0001, 0x0001
.set TILEFLAG_0002, 0x0002
.set TILEFLAG_0004, 0x0004
.set TILEFLAG_0008, 0x0008
.set TILEFLAG_0010, 0x0010
.set TILEFLAG_0020, 0x0020
.set TILEFLAG_LADDER, 0x0040
.set TILEFLAG_0080, 0x0080
.set TILEFLAG_0100, 0x0100
.set TILEFLAG_UNDERWATER, 0x0200
.set TILEFLAG_0400, 0x0400
.set TILEFLAG_AIBOTCROUCH, 0x0800
.set TILEFLAG_AIBOTDUCK, 0x1000
.set TILEFLAG_2000, 0x2000
.set TILEFLAG_DIE, 0x4000
.set TILEFLAG_CLIMBABLELEDGE, 0x8000
.set GEOFLAG_0001, 0x0001
.set GEOFLAG_0002, 0x0002
.set GEOFLAG_COLLISIONS, 0x0004
.set GEOFLAG_0008, 0x0008
.set GEOFLAG_OPAQUE, 0x0010
.set GEOFLAG_LIFTFLOOR, 0x0020
.set GEOFLAG_LADDER, 0x0040
.set GEOFLAG_0080, 0x0080
.set GEOFLAG_0100, 0x0100
.set GEOFLAG_UNDERWATER, 0x0200
.set GEOFLAG_0400, 0x0400
.set GEOFLAG_AIBOTCROUCH, 0x0800
.set GEOFLAG_AIBOTDUCK, 0x1000
.set GEOFLAG_STEP, 0x2000
.set GEOFLAG_DIE, 0x4000
.set GEOFLAG_CLIMBABLELEDGE, 0x8000
.set VERSION_NTSC_BETA, 0
.set VERSION_NTSC_1_0, 1
+5 -5
View File
@@ -50,9 +50,9 @@ f32 func0f0669bc(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f0669ec(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f066a1c(struct modelrodata_bbox *bbox, f32 arg1, f32 arg2, f32 arg3);
f32 func0f066abc(struct modelrodata_bbox *bbox, f32 arg1, f32 arg2, f32 arg3);
s32 func0f066b5c(f32 xmin, f32 xmax, f32 ymin, f32 ymax, f32 zmin, f32 zmax, Mtxf *mtx, struct tiletype2 *tile);
void func0f067424(struct modelrodata_bbox *bbox, Mtxf *mtx, struct tiletype2 *tile);
void func0f0674bc(struct modelrodata_type19 *rodata19, struct modelrodata_bbox *bbox, Mtxf *mtx, struct tiletype2 *tile);
s32 func0f066b5c(f32 xmin, f32 xmax, f32 ymin, f32 ymax, f32 zmin, f32 zmax, Mtxf *mtx, struct geoblock *tile);
void func0f067424(struct modelrodata_bbox *bbox, Mtxf *mtx, struct geoblock *block);
void func0f0674bc(struct modelrodata_type19 *rodata19, struct modelrodata_bbox *bbox, Mtxf *mtx, struct geoblock *block);
bool func0f0675c8(struct coord *pos, f32 arg1, struct modelrodata_bbox *bbox, Mtxf *mtx);
bool func0f0677ac(struct coord *coord, struct coord *arg1, struct coord *pos, struct coord *normal, struct coord *up, struct coord *look, f32 xmin, f32 xmax, f32 ymin, f32 ymax, f32 zmin, f32 zmax);
bool func0f0678f8(struct coord *coord, struct coord *arg1, s32 padnum);
@@ -89,7 +89,7 @@ void func0f069144(struct prop *prop, u8 *nextcol, u16 floorcol);
void func0f069630(struct prop *prop, u8 *nextcol, u16 floorcol);
void colourTween(u8 *col, u8 *nextcol);
void func0f069750(s32 *arg0, s32 arg1, f32 *arg2);
void func0f069850(struct defaultobj *obj, struct coord *pos, f32 rot[3][3], struct tiletype3 *tile);
void func0f069850(struct defaultobj *obj, struct coord *pos, f32 rot[3][3], struct geocyl *cyl);
void func0f069b4c(struct defaultobj *obj);
void func0f069c1c(struct defaultobj *obj);
void func0f069c70(struct defaultobj *obj, bool arg1, bool arg2);
@@ -136,7 +136,7 @@ void func0f07079c(struct prop *prop, bool fulltick);
s32 glassCalculateOpacity(struct coord *pos, f32 xludist, f32 opadist, f32 arg3);
void func0f070a1c(struct modelrodata_bbox *bbox, f32 realrot[3][3], struct coord *pos, struct coord *vertices);
void func0f070bd0(struct modelrodata_type19 *rodata, f32 realrot[3][3], struct coord *pos, struct coord *vertices);
void func0f070ca0(struct defaultobj *obj, struct tiletype1 *tile, u32 flags, struct modelrodata_bbox *bbox, struct modelrodata_type19 *rodata);
void func0f070ca0(struct defaultobj *obj, struct geotilef *tile, u32 flags, struct modelrodata_bbox *bbox, struct modelrodata_type19 *rodata);
void liftActivate(struct prop *prop, u8 liftnum);
struct prop *liftFindByPad(s16 padnum);
f32 liftGetY(struct liftobj *lift);
+27 -27
View File
@@ -22,45 +22,45 @@ void cd00025038(struct coord *arg0, struct coord *arg1, struct prop *prop, f32 a
void cd000250cc(struct coord *arg0, struct coord *arg1, f32 width);
void cd00025168(struct prop *prop);
void cd000251ac(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct prop *prop);
void cd00025254(struct coord *arg0, struct coord *arg1, struct coord *pos, struct prop *prop, f32 arg4, struct tile *tile);
void cd00025254(struct coord *arg0, struct coord *arg1, struct coord *pos, struct prop *prop, f32 arg4, struct geo *tile);
void cd00025314(struct coord *pos, struct coord *arg1);
bool cd00025364(struct coord *arg0, struct coord *arg1);
void cd000253c4(struct tiletype2 *tile);
void cd000253c4(struct geoblock *tile);
s32 cd00025410(f32 arg0, f32 arg1, f32 arg2, f32 arg3);
s32 cd000254d8(struct coord *arg0, struct coord *arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, s32 *arg6);
f32 cd00025654(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3);
f32 cd00025724(f32 x1, f32 z1, f32 x2, f32 z2);
bool cd00025774(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3);
void cd00025848(f32 tilex, f32 tilez, f32 tilewidth, f32 posx, f32 posz, f32 *x1, f32 *z1, f32 *x2, f32 *z2);
void cd00025928(struct tile *tile, struct coord *arg1);
void cdGetFloorCol(struct tile *tile, u16 *floorcol);
void cdGetFloorType(struct tile *tile, u8 *floortype);
f32 cdFindGroundInTileType0AtVertex(struct tiletype0 *tile, f32 x, f32 z, s32 vertexindex);
f32 cdFindGroundInTileType0(struct tiletype0 *tile, f32 x, f32 z);
f32 cdFindGroundInTileType1(struct tiletype1 *tile, f32 x, f32 z);
bool cdIs2dPointInTileType0(struct tiletype0 *tile, f32 x, f32 z);
bool cdIs2dPointInTileType1(struct tiletype1 *tile, f32 x, f32 z);
bool cdIs2dPointInTileType2(struct tiletype2 *tile, f32 x, f32 z);
bool cdIs2dPointInTileType3(struct tiletype3 *tile, f32 x, f32 z);
bool func000266a4(f32 x, f32 z, struct tile *tile);
void cd00025928(struct geo *tile, struct coord *arg1);
void cdGetFloorCol(struct geo *tile, u16 *floorcol);
void cdGetFloorType(struct geo *tile, u8 *floortype);
f32 cdFindGroundInIntTileAtVertex(struct geotilei *tile, f32 x, f32 z, s32 vertexindex);
f32 cdFindGroundInIntTile(struct geotilei *tile, f32 x, f32 z);
f32 cdFindGroundInFltTile(struct geotilef *tile, f32 x, f32 z);
bool cdIs2dPointInIntTile(struct geotilei *tile, f32 x, f32 z);
bool cdIs2dPointInFltTile(struct geotilef *tile, f32 x, f32 z);
bool cdIs2dPointInBlock(struct geoblock *tile, f32 x, f32 z);
bool cdIs2dPointInCyl(struct geocyl *cyl, f32 x, f32 z);
bool func000266a4(f32 x, f32 z, struct geo *tile);
void cdGetPropsOnPlatform(struct prop *platform, s16 *propnums, s32 len);
bool cd00026a04(struct coord *pos, u8 *start, u8 *end, u16 flags, s32 room, struct tile **tileptr, s32 *roomptr, f32 *groundptr, bool arg8);
void cd00026e7c(struct coord *pos, s16 *rooms, u16 arg2, struct tile **tileptr, s16 *room, f32 *arg5, struct prop **arg6, s32 arg7);
bool cd0002709c(struct tiletype0 *tile, f32 x, f32 z, f32 width, struct prop *prop, struct collisionthing *thing);
bool cd000272f8(struct tiletype1 *tile, f32 x, f32 z, f32 radius, struct prop *prop, struct collisionthing *thing);
s32 cd000274e0(struct tiletype2 *tile, f32 x, f32 z, f32 width, struct prop *prop, struct collisionthing *thing);
bool cd000276c8(struct tiletype3 *tile, f32 x, f32 z, f32 width, struct prop *prop, struct collisionthing *thing);
bool cd00026a04(struct coord *pos, u8 *start, u8 *end, u16 flags, s32 room, struct geo **tileptr, s32 *roomptr, f32 *groundptr, bool arg8);
void cd00026e7c(struct coord *pos, s16 *rooms, u16 arg2, struct geo **tileptr, s16 *room, f32 *arg5, struct prop **arg6, s32 arg7);
bool cd0002709c(struct geotilei *tile, f32 x, f32 z, f32 width, struct prop *prop, struct collisionthing *thing);
bool cd000272f8(struct geotilef *tile, f32 x, f32 z, f32 radius, struct prop *prop, struct collisionthing *thing);
s32 cd000274e0(struct geoblock *tile, f32 x, f32 z, f32 width, struct prop *prop, struct collisionthing *thing);
bool cd000276c8(struct geocyl *tile, f32 x, f32 z, f32 width, struct prop *prop, struct collisionthing *thing);
void cd00027738(struct coord *pos, f32 width, u8 *start, u8 *end, u16 flags, bool checkvertical, f32 arg6, f32 arg7, struct prop *prop, struct collisionthing *things, s32 maxthings, s32 *thingnum, s32 roomnum);
void cd00027d1c(struct coord *pos, f32 radius, s16 *rooms, u32 types, u16 arg4, u32 arg5, f32 arg6, f32 arg7, struct collisionthing *arg8, s32 arg9);
u32 cd00027f78(void);
s32 cd00028200(struct tiletype0 *tile, struct coord *pos, f32 width, f32 y1, f32 y2);
s32 cd00028200(struct geotilei *tile, struct coord *pos, f32 width, f32 y1, f32 y2);
u32 cd0002840c(void);
u32 cd00028638(void);
u32 cd0002885c(void);
s32 cd00028914(u8 *start, u8 *end, struct coord *pos, f32 width, u16 flags, bool checkvertical, f32 arg6, f32 arg7, struct prop *prop, struct collisionthing *things, s32 maxthings, s32 *thingnum);
void cd00028df0(struct coord *pos, f32 width, s16 *rooms, u32 types, u16 arg4, u32 arg5, f32 ymax, f32 ymin, struct collisionthing *arg8, s32 arg9);
void cd0002901c(struct coord *pos, struct coord *dist, f32 width, struct collisionthing *arg3);
f32 cd000296a0(struct collisionthing *arg0, struct coord *pos, struct tilething **arg2, f32 width);
f32 cd000296a0(struct collisionthing *arg0, struct coord *pos, struct collisionthing **arg2, f32 width);
bool cd00029ffc(struct coord *pos, f32 width, f32 foreheadheight, f32 inversefeettoeyesheight, s16 *rooms, u16 arg5, struct coord *laddernormal);
bool cd0002a13c(struct coord *pos, f32 radius, f32 arg2, f32 arg3, s16 *rooms, u16 arg5);
f32 cdFindGroundY(struct coord *pos, f32 radius, s16 *rooms, u16 *floorcol, u8 *floortype, u16 *floorflags, s16 *floorroom, s32 *inlift, struct prop **lift);
@@ -90,7 +90,7 @@ u32 cd0002b954(void);
bool cd0002bd04(u8 *start, u8 *end, struct coord *arg2, struct coord *arg3, struct coord *arg4, s32 arg5, s32 arg6, s32 arg7, f32 arg8, f32 arg9);
u32 cd0002c328(void);
u32 cd0002c528(void);
bool cd0002c714(u8 *start, u8 *end, struct coord *arg2, struct coord *arg3, struct coord *arg4, u16 arg5, s32 arg6, s32 arg7, f32 ymax, f32 ymin, f32 *arg10, struct coord *arg11, struct coord *arg12, struct coord *arg13, struct tile **tile, s32 roomnum);
bool cd0002c714(u8 *start, u8 *end, struct coord *arg2, struct coord *arg3, struct coord *arg4, u16 arg5, s32 arg6, s32 arg7, f32 ymax, f32 ymin, f32 *arg10, struct coord *arg11, struct coord *arg12, struct coord *arg13, struct geo **tile, s32 roomnum);
bool cd0002d15c(struct coord *pos, struct coord *coord2, s16 *rooms, u32 types, u16 arg4, s32 arg5, s32 arg6, f32 arg7, f32 arg8);
s32 cd0002d3b0(struct coord *arg0, struct coord *arg1, s16 *arg2, s32 types, u16 arg4, s32 arg5, s32 arg6, f32 ymax, f32 ymin);
bool cd0002d6ac(struct coord *pos, s16 *rooms, struct coord *targetpos, u32 types, u32 arg4, f32 arg5, f32 arg6);
@@ -111,15 +111,15 @@ s32 cd0002de10(struct coord *pos, s16 *rooms, struct coord *pos2, u32 types);
s32 cd0002de34(struct coord *arg0, s16 *arg1, struct coord *arg2, s16 *arg3, u32 types, u16 arg5);
s32 cd0002deac(struct coord *arg0, s16 *arg1, struct coord *arg2, s16 *arg3, u32 types);
bool cd0002ded8(struct coord *arg0, struct coord *arg1, struct prop *prop);
bool cd0002dffc(struct tiletype2 *arg0, struct tiletype2 *arg1);
s32 cd0002e278(u8 *start, u8 *end, struct tiletype2 *ref, u16 flags);
s32 cd0002e4c4(struct tiletype2 *geo, s16 *rooms, u32 types);
bool cd0002dffc(struct geoblock *arg0, struct geoblock *arg1);
s32 cd0002e278(u8 *start, u8 *end, struct geoblock *ref, u16 flags);
s32 cd0002e4c4(struct geoblock *geo, s16 *rooms, u32 types);
u32 cd0002e680(void);
u32 cd0002e82c(void);
u32 cd0002e9d8(void);
u32 cd0002eb84(void);
bool cd0002ed30(u8 *start, u8 *end, struct tiletype2 *tile, s32 numvertices, struct coord *arg4, struct coord *arg5, s32 arg6, struct prop *prop);
s32 cd0002f02c(struct tiletype2 *tile, s16 *rooms, s32 types);
bool cd0002ed30(u8 *start, u8 *end, struct geoblock *tile, s32 numvertices, struct coord *arg4, struct coord *arg5, s32 arg6, struct prop *prop);
s32 cd0002f02c(struct geoblock *block, s16 *rooms, s32 types);
bool cd0002f308(struct coord *viewpos, s16 *rooms, struct coord *targetpos, f32 distance, s32 arg4, u16 arg5);
bool cd0002f450(struct coord *viewpos, s16 *rooms, struct coord *targetpos, f32 distance, s32 arg4);
+19 -27
View File
@@ -829,14 +829,14 @@ struct aibot {
/*0x2dc*/ u32 unk2dc;
};
struct tile {
struct geo {
/*0x00*/ u8 type;
/*0x01*/ u8 numvertices;
/*0x02*/ u16 flags;
};
struct tiletype0 {
struct tile header;
struct geotilei {
struct geo header;
/*0x04*/ u16 floortype;
/*0x06*/ u8 xmin; // These are byte offsets relative to the start of tile
/*0x07*/ u8 ymin;
@@ -848,8 +848,8 @@ struct tiletype0 {
/*0x0e*/ s16 vertices[64][3];
};
struct tiletype1 {
struct tile header;
struct geotilef {
struct geo header;
/*0x04*/ u16 floortype;
union {
// The arrays are surely the correct type here, but they create
@@ -872,15 +872,15 @@ struct tiletype1 {
/*0x10*/ struct coord vertices[64];
};
struct tiletype2 {
struct tile header;
struct geoblock {
struct geo header;
/*0x04*/ f32 ymax;
/*0x08*/ f32 ymin;
/*0x0c*/ f32 vertices[8][2];
};
struct tiletype3 {
struct tile header;
struct geocyl {
struct geo header;
/*0x04*/ f32 ymax;
/*0x08*/ f32 ymin;
/*0x0c*/ f32 x;
@@ -888,14 +888,6 @@ struct tiletype3 {
/*0x14*/ f32 radius;
};
struct tilething {
struct tile *tile;
u32 unk04;
u32 unk08;
struct prop *lift;
u32 floorroom;
};
struct act_stand {
/*0x2c*/ s32 prestand;
/*0x30*/ s32 flags;
@@ -1205,7 +1197,7 @@ struct chrdata {
/*0x12e*/ s16 chrseeshot;
/*0x130*/ s16 chrseedie;
/*0x132*/ s16 chrdup;
struct tiletype3 geo;
struct geocyl geo;
/*0x14c*/ f32 shotbondsum;
/*0x150*/ f32 aimuplshoulder;
/*0x154*/ f32 aimuprshoulder;
@@ -1469,10 +1461,10 @@ struct defaultobj {
/*0x1c*/ f32 realrot[3][3];
/*0x40*/ u32 hidden;
union {
/*0x44*/ struct tiletype1 *geo1;
/*0x44*/ struct tiletype2 *geo2;
/*0x44*/ struct tiletype3 *geo3;
/*0x44*/ struct tiletype3 *unkgeo; // temporary, to indicate that I don't know which geo pointer is being used
/*0x44*/ struct geotilef *geotilef;
/*0x44*/ struct geoblock *geoblock;
/*0x44*/ struct geocyl *geocyl;
/*0x44*/ struct geocyl *unkgeo; // temporary, to indicate that I don't know which geo pointer is being used
};
union {
/*0x48*/ struct projectile *projectile;
@@ -1483,7 +1475,7 @@ struct defaultobj {
/*0x50*/ u8 shadecol[4];
/*0x54*/ u8 nextcol[4];
/*0x58*/ u16 floorcol;
/*0x5a*/ s8 numtiles;
/*0x5a*/ s8 geocount;
};
struct doorobj { // objtype 0x01
@@ -2678,8 +2670,8 @@ struct player {
/*0x19c0*/ f32 vv_headheight; // 172 when Jo, regardless of crouch state
/*0x19c4*/ f32 vv_eyeheight; // 159 when Jo, regardless of crouch state
/*0x19c8*/ bool haschrbody;
/*0x19cc*/ struct tiletype3 periminfo;
/*0x19e4*/ struct tiletype3 perimshoot;
/*0x19cc*/ struct geocyl periminfo;
/*0x19e4*/ struct geocyl perimshoot;
/*0x19fc*/ f32 bondprevtheta;
/*0x1a00*/ struct coord grabbedprevpos;
/*0x1a0c*/ f32 grabbedrotoffset;
@@ -5781,11 +5773,11 @@ struct texturepair {
};
struct collisionthing {
struct tile *tile;
struct geo *geo;
u32 unk04;
s32 unk08;
struct prop *prop;
u32 roomnum;
s32 room;
};
struct escastepkeyframe {