sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

surface_collision.h (1521B)


      1 #ifndef SURFACE_COLLISION_H
      2 #define SURFACE_COLLISION_H
      3 
      4 #include <PR/ultratypes.h>
      5 
      6 #include "types.h"
      7 
      8 // Range level area is 16384x16384 (-8192 to +8192 in x and z)
      9 #define LEVEL_BOUNDARY_MAX  0x2000 // 8192
     10 
     11 #define CELL_SIZE           (1 << 10) // 0x400
     12 
     13 #define CELL_HEIGHT_LIMIT           20000
     14 #define FLOOR_LOWER_LIMIT           -11000
     15 #define FLOOR_LOWER_LIMIT_MISC      (FLOOR_LOWER_LIMIT + 1000)
     16 // same as FLOOR_LOWER_LIMIT_MISC, explicitly for shadow.c
     17 // It doesn't match if ".0" is removed or ".f" is added
     18 #define FLOOR_LOWER_LIMIT_SHADOW    (FLOOR_LOWER_LIMIT + 1000.0)
     19 
     20 struct WallCollisionData {
     21     /*0x00*/ f32 x, y, z;
     22     /*0x0C*/ f32 offsetY;
     23     /*0x10*/ f32 radius;
     24     /*0x14*/ u8 filler[2];
     25     /*0x16*/ s16 numWalls;
     26     /*0x18*/ struct Surface *walls[4];
     27 };
     28 
     29 struct FloorGeometry {
     30     u8 filler[16]; // possibly position data?
     31     f32 normalX;
     32     f32 normalY;
     33     f32 normalZ;
     34     f32 originOffset;
     35 };
     36 
     37 s32 f32_find_wall_collision(f32 *xPtr, f32 *yPtr, f32 *zPtr, f32 offsetY, f32 radius);
     38 s32 find_wall_collisions(struct WallCollisionData *colData);
     39 f32 find_ceil(f32 posX, f32 posY, f32 posZ, struct Surface **pceil);
     40 f32 find_floor_height_and_data(f32 xPos, f32 yPos, f32 zPos, struct FloorGeometry **floorGeo);
     41 f32 find_floor_height(f32 x, f32 y, f32 z);
     42 f32 find_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor);
     43 f32 find_water_level(f32 x, f32 z);
     44 f32 find_poison_gas_level(f32 x, f32 z);
     45 void debug_surface_list_info(f32 xPos, f32 zPos);
     46 
     47 #endif // SURFACE_COLLISION_H