From a1953afd1c9151d9057cbfbb46fcd449cd103810 Mon Sep 17 00:00:00 2001 From: Agent X <44549182+Agent-11@users.noreply.github.com> Date: Mon, 12 Sep 2022 22:56:24 -0400 Subject: [PATCH] SURFACE_RAYCAST (#177) * SURFACE_RAYCAST * Exclude from camera collision --- autogen/lua_definitions/constants.lua | 3 +++ data/dynos_bin_col.cpp | 1 + docs/lua/constants.md | 1 + include/surface_terrains.h | 1 + src/engine/surface_collision.c | 6 +++--- src/engine/surface_load.c | 1 + src/pc/lua/smlua_constants_autogen.c | 1 + 7 files changed, 11 insertions(+), 3 deletions(-) diff --git a/autogen/lua_definitions/constants.lua b/autogen/lua_definitions/constants.lua index 3fbca7d65..e8a18632d 100644 --- a/autogen/lua_definitions/constants.lua +++ b/autogen/lua_definitions/constants.lua @@ -11002,6 +11002,9 @@ SURFACE_PAINTING_WOBBLE_D2 = 0x00D2 --- @type integer SURFACE_QUICKSAND = 0x0026 +--- @type integer +SURFACE_RAYCAST = 0x0003 + --- @type integer SURFACE_SHALLOW_MOVING_QUICKSAND = 0x0025 diff --git a/data/dynos_bin_col.cpp b/data/dynos_bin_col.cpp index 7a610c7bf..f630c0e45 100644 --- a/data/dynos_bin_col.cpp +++ b/data/dynos_bin_col.cpp @@ -185,6 +185,7 @@ static s64 DynOS_Col_ParseConstants(const String& _Arg, bool* found) { // Surface constants col_constant(SURFACE_DEFAULT); col_constant(SURFACE_BURNING); + col_constant(SURFACE_RAYCAST); col_constant(SURFACE_0004); col_constant(SURFACE_HANGABLE); col_constant(SURFACE_SLOW); diff --git a/docs/lua/constants.md b/docs/lua/constants.md index 7ac323fa4..3f9747fd9 100644 --- a/docs/lua/constants.md +++ b/docs/lua/constants.md @@ -3859,6 +3859,7 @@ - SURFACE_PAINTING_WOBBLE_D1 - SURFACE_PAINTING_WOBBLE_D2 - SURFACE_QUICKSAND +- SURFACE_RAYCAST - SURFACE_SHALLOW_MOVING_QUICKSAND - SURFACE_SHALLOW_QUICKSAND - SURFACE_SLIPPERY diff --git a/include/surface_terrains.h b/include/surface_terrains.h index 669a0ac23..8e4abe794 100644 --- a/include/surface_terrains.h +++ b/include/surface_terrains.h @@ -4,6 +4,7 @@ // Surface Types #define SURFACE_DEFAULT 0x0000 // Environment default #define SURFACE_BURNING 0x0001 // Lava / Frostbite (in SL), but is used mostly for Lava +#define SURFACE_RAYCAST 0x0003 // Custom sm64ex-coop specific custom surface for using collision_find_surface_on_ray #define SURFACE_0004 0x0004 // Unused, has no function and has parameters #define SURFACE_HANGABLE 0x0005 // Ceiling that Mario can climb on #define SURFACE_SLOW 0x0009 // Slow down Mario, unused diff --git a/src/engine/surface_collision.c b/src/engine/surface_collision.c index d3d7e15c0..9f43652ca 100644 --- a/src/engine/surface_collision.c +++ b/src/engine/surface_collision.c @@ -245,7 +245,7 @@ static s32 find_wall_collisions_from_list(struct SurfaceNode *surfaceNode, } } else { // Ignore camera only surfaces. - if (surf->type == SURFACE_CAMERA_BOUNDARY) { + if (surf->type == SURFACE_CAMERA_BOUNDARY || surf->type == SURFACE_RAYCAST) { continue; } @@ -415,7 +415,7 @@ static struct Surface *find_ceil_from_list(struct SurfaceNode *surfaceNode, s32 } } // Ignore camera only surfaces. - else if (surf->type == SURFACE_CAMERA_BOUNDARY) { + else if (surf->type == SURFACE_CAMERA_BOUNDARY || surf->type == SURFACE_RAYCAST) { continue; } @@ -643,7 +643,7 @@ static struct Surface *find_floor_from_list(struct SurfaceNode *surfaceNode, s32 } } // If we are not checking for the camera, ignore camera only floors. - else if (surf->type == SURFACE_CAMERA_BOUNDARY) { + else if (surf->type == SURFACE_CAMERA_BOUNDARY || surf->type == SURFACE_RAYCAST) { continue; } diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 367858fb9..70e853b22 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -444,6 +444,7 @@ static s32 surf_has_no_cam_collision(s16 surfaceType) { s32 flags = 0; switch (surfaceType) { + case SURFACE_RAYCAST: case SURFACE_NO_CAM_COLLISION: case SURFACE_NO_CAM_COLLISION_77: // Unused case SURFACE_NO_CAM_COL_VERY_SLIPPERY: diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index edc3c4fd4..4b9f043db 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -3713,6 +3713,7 @@ char gSmluaConstants[] = "" "SOUND_OBJ2_MRI_SPINNING = SOUND_ARG_LOAD(SOUND_BANK_OBJ2, 0x6B, 0x00, SOUND_DISCRETE)\n" "SURFACE_DEFAULT = 0x0000\n" "SURFACE_BURNING = 0x0001\n" +"SURFACE_RAYCAST = 0x0003\n" "SURFACE_0004 = 0x0004\n" "SURFACE_HANGABLE = 0x0005\n" "SURFACE_SLOW = 0x0009\n"