diff --git a/game/graphics/gfx.h b/game/graphics/gfx.h index 5571931555..0a32416728 100644 --- a/game/graphics/gfx.h +++ b/game/graphics/gfx.h @@ -50,8 +50,8 @@ struct GfxRendererModule { // runtime settings static constexpr int PAT_MOD_COUNT = 4; -static constexpr int PAT_EVT_COUNT = 15; -static constexpr int PAT_MAT_COUNT = 29; +static constexpr int PAT_EVT_COUNT = 20; +static constexpr int PAT_MAT_COUNT = 34; struct GfxGlobalSettings { bool debug = true; // graphics debugging @@ -101,7 +101,7 @@ struct GfxGlobalSettings { enum CollisionRendererMode { None, Mode, Event, Material, Skip, SkipHide } collision_mode = Mode; std::array collision_mode_mask = {UINT32_MAX}; std::array collision_event_mask = {UINT32_MAX}; - std::array collision_material_mask = {UINT32_MAX}; + std::array collision_material_mask = {UINT32_MAX, UINT32_MAX}; u32 collision_skip_mask = 0; u32 collision_skip_hide_mask = 0; bool collision_skip_nomask_allowed = true; diff --git a/game/graphics/opengl_renderer/CollideMeshRenderer.cpp b/game/graphics/opengl_renderer/CollideMeshRenderer.cpp index c96387cd47..35e689baf4 100644 --- a/game/graphics/opengl_renderer/CollideMeshRenderer.cpp +++ b/game/graphics/opengl_renderer/CollideMeshRenderer.cpp @@ -104,6 +104,66 @@ const static std::vector mode_colors_jak2 = { 1.0f, 1.0f, 0.1f, // 3, halfpipe }; +const static std::vector material_colors_jak3 = { + 1.0f, 0.1f, 1.0f, // 0, unknown + 0.1f, 2.0f, 2.0f, // 1, ice + 0.75f, 0.25f, 0.1f, // 2, quicksand + 0.1f, 0.25f, 0.75f, // 3, waterbottom + 0.5f, 0.15f, 0.1f, // 4, tar + 2.0f, 1.5f, 0.5f, // 5, sand + 1.5f, 0.75f, 0.1f, // 6, wood + 0.1f, 1.35f, 0.1f, // 7, grass + 1.7f, 1.3f, 0.1f, // 8, pcmetal + 1.8f, 1.8f, 1.8f, // 9, snow + 1.5f, 0.2f, 1.0f, // 10, deepsnow + 1.2f, 0.5f, 0.3f, // 11, hotcoals + 1.4f, 0.1f, 0.1f, // 12, lava + 0.8f, 0.3f, 0.1f, // 13, crwood + 1.0f, 0.4f, 1.0f, // 14, gravel + 1.5f, 0.5f, 0.15f, // 15, dirt + 0.7f, 0.7f, 1.0f, // 16, metal + 0.1f, 0.1f, 1.2f, // 17, straw + 0.75f, 1.75f, 0.75f, // 18, tube + 0.4f, 0.1f, 0.8f, // 19, swamp + 0.1f, 0.4f, 0.8f, // 20, stopproj + 1.9f, 0.1f, 1.9f, // 21, rotate + 1.0f, 1.0f, 1.0f, // 22, neutral + 1.0f, 0.7f, 1.0f, // 23, stone + 0.8f, 1.2f, 1.2f, // 24, crmetal + 0.7f, 0.0f, 0.0f, // 25, carpet + 0.1f, 0.9f, 0.1f, // 26, grmetal + 1.4f, 0.7f, 0.1f, // 27, shmetal + 0.5f, 0.5f, 0.0f, // 28, hdwood + 2.0f, 1.2f, 1.2f, // 29, squish + 2.0f, 1.25f, 0.1f, // 30, mhshroom + 0.5f, 1.0f, 0.5f, // 31, forest + 1.25f, 2.0f, 0.75f, // 32, mhswamp + 0.85f, 0.5f, 2.0f, // 33, dmaker +}; + +const static std::vector event_colors_jak3 = { + 1.0f, 1.0f, 1.0f, // 0, none + 0.5f, 1.0f, 1.0f, // 1, deadly + 0.1f, 1.0f, 0.1f, // 2, endlessfall + 1.0f, 1.0f, 0.1f, // 3, burn + 0.1f, 0.1f, 1.0f, // 4, deadlyup + 1.0f, 0.1f, 0.5f, // 5, burnup + 1.0f, 0.1f, 0.1f, // 6, melt + 0.1f, 0.7f, 0.7f, // 7, slide + 1.0f, 0.2f, 1.0f, // 8, lip + 0.5f, 0.2f, 1.0f, // 9, lipramp + 0.1f, 0.5f, 1.0f, // 10, shock + 0.5f, 0.6f, 1.0f, // 11, shockup + 0.5f, 0.6f, 0.5f, // 12, hide + 0.5f, 1.0f, 0.5f, // 13, rail + 0.7f, 0.7f, 0.7f, // 14, slippery + 1.2f, 1.2f, 0.1f, // 15, drag + 1.2f, 2.0f, 2.0f, // 16, waterfloor + 2.0f, 1.0f, 0.1f, // 17, hang + 1.2f, 0.1f, 0.1f, // 18, fry + 0.1f, 2.0f, 0.1f // 19, slime +}; + CollideMeshRenderer::CollideMeshRenderer(GameVersion version) { glGenVertexArrays(1, &m_vao); glGenBuffers(1, &m_ubo); @@ -121,17 +181,17 @@ CollideMeshRenderer::~CollideMeshRenderer() { } void CollideMeshRenderer::init_pat_colors(GameVersion version) { - for (int i = 0; i < 4; ++i) { + for (int i = 0; i < PAT_MOD_COUNT; ++i) { m_colors.pat_mode_colors[i].x() = -1.f; m_colors.pat_mode_colors[i].y() = -1.f; m_colors.pat_mode_colors[i].z() = -1.f; } - for (int i = 0; i < 32; ++i) { + for (int i = 0; i < PAT_MAT_COUNT; ++i) { m_colors.pat_material_colors[i].x() = -1.f; m_colors.pat_material_colors[i].y() = -1.f; m_colors.pat_material_colors[i].z() = -1.f; } - for (int i = 0; i < 32; ++i) { + for (int i = 0; i < PAT_EVT_COUNT; ++i) { m_colors.pat_event_colors[i].x() = -1.f; m_colors.pat_event_colors[i].y() = -1.f; m_colors.pat_event_colors[i].z() = -1.f; @@ -148,11 +208,15 @@ void CollideMeshRenderer::init_pat_colors(GameVersion version) { mode_colors = &mode_colors_jak1; break; case GameVersion::Jak2: - case GameVersion::Jak3: material_colors = &material_colors_jak2; event_colors = &event_colors_jak2; mode_colors = &mode_colors_jak2; break; + case GameVersion::Jak3: + material_colors = &material_colors_jak3; + event_colors = &event_colors_jak3; + mode_colors = &mode_colors_jak2; // unchanged from jak2 + break; } if (material_colors) { diff --git a/game/graphics/opengl_renderer/CollideMeshRenderer.h b/game/graphics/opengl_renderer/CollideMeshRenderer.h index e73daad66f..9dd1b5c873 100644 --- a/game/graphics/opengl_renderer/CollideMeshRenderer.h +++ b/game/graphics/opengl_renderer/CollideMeshRenderer.h @@ -2,11 +2,12 @@ #include "common/versions/versions.h" #include "game/graphics/opengl_renderer/BucketRenderer.h" +#include struct PatColors { - math::Vector4f pat_mode_colors[4]; - math::Vector4f pat_material_colors[32]; - math::Vector4f pat_event_colors[32]; + math::Vector4f pat_mode_colors[PAT_MOD_COUNT]; + math::Vector4f pat_material_colors[PAT_MAT_COUNT]; + math::Vector4f pat_event_colors[PAT_EVT_COUNT]; }; class CollideMeshRenderer { diff --git a/game/graphics/opengl_renderer/shaders/collision.vert b/game/graphics/opengl_renderer/shaders/collision.vert index b25eb19f81..eecb806e02 100644 --- a/game/graphics/opengl_renderer/shaders/collision.vert +++ b/game/graphics/opengl_renderer/shaders/collision.vert @@ -19,8 +19,8 @@ uniform int version; out vec4 fragment_color; const int PAT_MOD_COUNT = 4; -const int PAT_EVT_COUNT = 15; -const int PAT_MAT_COUNT = 29; +const int PAT_EVT_COUNT = 20; +const int PAT_MAT_COUNT = 34; uniform uint collision_mode_mask[(PAT_MOD_COUNT + 31) / 32]; uniform uint collision_event_mask[(PAT_EVT_COUNT + 31) / 32]; uniform uint collision_material_mask[(PAT_MAT_COUNT + 31) / 32]; @@ -42,9 +42,9 @@ bool logtest(uint a, uint b) { return (a & b) != 0; } bool logtesta(uint a, uint b) { return (a & b) == b; } layout(std140) uniform PatColors { - vec4 pat_mode_colors[4]; - vec4 pat_material_colors[32]; - vec4 pat_event_colors[32]; + vec4 pat_mode_colors[PAT_MOD_COUNT]; + vec4 pat_material_colors[PAT_MAT_COUNT]; + vec4 pat_event_colors[PAT_EVT_COUNT]; }; void main() {