diff --git a/decompiler/level_extractor/extract_merc.cpp b/decompiler/level_extractor/extract_merc.cpp index 148b4ac403..5e08e1d9a8 100644 --- a/decompiler/level_extractor/extract_merc.cpp +++ b/decompiler/level_extractor/extract_merc.cpp @@ -957,6 +957,16 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, use_alpha_blend = true; } + // workaround for https://github.com/open-goal/jak-project/issues/3682 + // when the pillar is very close to the screen, they fade it out, to avoid blocking the camera. + // but, for unknown reasons, they move this to an alpha bucket as well (normally not required + // for fade), but rely on merc disabling alpha blend. OpenGOAL's detection of alpha blending + // just checks the bucket, but there's more logic than this in the shader. Rather than figuring + // this out, just fix this specific case for now: + if (debug_name == "comb-pillar-lod0") { + use_alpha_blend = false; + } + handle_frag(debug_name, ctrl_header, frag, frag_ctrl, merc_state, result.vertices, merc_memories[memory_buffer_toggle], can_be_modified, combined_lump4_addr, fi); u32 vert_count = frag.lump4_unpacked.size() / 3; diff --git a/game/graphics/opengl_renderer/background/Hfrag.cpp b/game/graphics/opengl_renderer/background/Hfrag.cpp index 3fb68a2931..b4e73ecd9a 100644 --- a/game/graphics/opengl_renderer/background/Hfrag.cpp +++ b/game/graphics/opengl_renderer/background/Hfrag.cpp @@ -415,7 +415,10 @@ void Hfrag::render_hfrag_level(Hfrag::HfragLevel* lev, continue; // no need to bind texture. } glBindTexture(GL_TEXTURE_2D, lev->montage_texture[bucket_idx].fb.texture()); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // HACK rm + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); const auto& bucket = lev->hfrag->buckets[bucket_idx]; for (u32 corner_idx : bucket.corners) { diff --git a/goal_src/jak3/pc/progress/progress-pc.gc b/goal_src/jak3/pc/progress/progress-pc.gc index 19aa5a8777..eb3b64bfc5 100644 --- a/goal_src/jak3/pc/progress/progress-pc.gc +++ b/goal_src/jak3/pc/progress/progress-pc.gc @@ -1435,7 +1435,11 @@ (defmethod respond-progress ((this menu-sub-menu-option) (arg0 progress) (arg1 symbol)) (let ((s4-0 *progress-work*)) (when (and (not (-> s4-0 secrets-unlocked)) - (or (= (-> arg0 current-options) *title-pc*) + (or + ;; for some reason we hit this case on the non-debug first time title screen. + ;; we don't have to worry about insufficient memory card space, so this is just + ;; commented out. + ;; (= (-> arg0 current-options) *title-pc*) (= (-> arg0 current-options) *unlocked-secrets*) (= (-> arg0 current-options) *select-scene-options*) (= (-> arg0 current-options) *select-start-options*)