Skip to content

[Audit][High] V2 Generator: incorrect underwater detection marks underground stone as submerged #740

@MichaelFisher1997

Description

@MichaelFisher1997

🔍 Module Scanned

(automated audit scan)

📝 Summary

In , the variable is computed incorrectly at line 379. The condition marks ANY stone block below sea_level-1 as "underwater" even when it's inside a mountain that rises above sea level, causing wrong surface/filler blocks to be placed.

📍 Location

  • File:
  • Function/Scope:

🔴 Severity: High

  • High: Memory leaks, race conditions, incorrect rendering, broken features

💥 Impact

When terrain extends below sea level (e.g., a mountain from y=80 down to y=50), stone blocks at y=62 will be treated as "underwater" and get sand/gravel surface instead of normal surface blocks, even though the mountain top is above water. This causes visible artifacts: underwater terrain textures appearing on hillsides above water line, and incorrect filler block composition in underground sections of above-sea-level terrain.

🔎 Evidence

The loop iterates top-to-bottom. The variable already tracks what block is directly above the current position. When , there is genuinely water above and the block IS underwater. But is a global height check that doesn't account for mountains that pierce the water surface.

Example bug scenario:

  • Mountain with surface at y=80, extending underground to y=50
  • When filling at y=62 (inside mountain, but below 64): = = - but at y=60: = , so stone at y=60 gets "underwater" treatment even though might be (not water)

🛠️ Proposed Fix

Remove the incorrect height-based fallback. The check is sufficient:

The logic should ONLY use because:

  1. The loop processes top-to-bottom, so correctly reflects what sits above the current block
  2. If , the current block is genuinely submerged
  3. If or (etc), there's no water above regardless of global height

The original was likely trying to handle floating underwater caves or rock spires, but the correct solution is to rely on the per-block tracking.

✅ Acceptance Criteria

  • Stone blocks inside above-sea-level mountains below y=sea_level-1 get correct surface (grass/dirt) not sand/gravel
  • Stone blocks genuinely underwater still get correct underwater surface (sand/gravel)
  • Zig 0.16.0 + SDL3 Dev Environment
    Compiler: 0.16.0
    assets/shaders/vulkan/water.frag
    assets/shaders/vulkan/culling.comp
    assets/shaders/vulkan/ui_tex.vert
    assets/shaders/vulkan/shadow.vert
    assets/shaders/vulkan/debug_shadow.frag
    assets/shaders/vulkan/debug_shadow.vert
    assets/shaders/vulkan/mesh.comp
    assets/shaders/vulkan/water.vert
    assets/shaders/vulkan/ssao.vert
    assets/shaders/vulkan/terrain.vert
    assets/shaders/vulkan/ui_tex.frag
    assets/shaders/vulkan/terrain.frag
    assets/shaders/vulkan/depth_pyramid.comp
    assets/shaders/vulkan/ssao_blur.frag
    assets/shaders/vulkan/ui.frag
    assets/shaders/vulkan/shadow.frag
    assets/shaders/vulkan/sky.frag
    assets/shaders/vulkan/bloom_downsample.vert
    assets/shaders/vulkan/bloom_upsample.vert
    assets/shaders/vulkan/debug_shadow.vert
    assets/shaders/vulkan/fxaa.vert
    assets/shaders/vulkan/post_process.vert
    assets/shaders/vulkan/shadow.vert
    assets/shaders/vulkan/sky.vert
    assets/shaders/vulkan/ssao.vert
    assets/shaders/vulkan/taa.vert
    assets/shaders/vulkan/terrain.vert
    assets/shaders/vulkan/ui.vert
    assets/shaders/vulkan/ui_tex.vert
    assets/shaders/vulkan/water.vert
    assets/shaders/vulkan/bloom_downsample.frag
    assets/shaders/vulkan/bloom_upsample.frag
    assets/shaders/vulkan/debug_shadow.frag
    assets/shaders/vulkan/fxaa.frag
    assets/shaders/vulkan/g_pass.frag
    assets/shaders/vulkan/post_process.frag
    assets/shaders/vulkan/shadow.frag
    assets/shaders/vulkan/sky.frag
    assets/shaders/vulkan/ssao.frag
    assets/shaders/vulkan/ssao_blur.frag
    assets/shaders/vulkan/taa.frag
    assets/shaders/vulkan/terrain.frag
    assets/shaders/vulkan/terrain_debug.frag
    assets/shaders/vulkan/ui.frag
    assets/shaders/vulkan/ui_tex.frag
    assets/shaders/vulkan/water.frag
    assets/shaders/vulkan/culling.comp
    assets/shaders/vulkan/depth_pyramid.comp
    assets/shaders/vulkan/lpv_inject.comp
    assets/shaders/vulkan/lpv_propagate.comp
    assets/shaders/vulkan/mesh.comp
    assets/shaders/vulkan/taa.vert
    assets/shaders/vulkan/g_pass.frag
    assets/shaders/vulkan/sky.vert
    assets/shaders/vulkan/taa.frag
    assets/shaders/vulkan/ssao.frag
    assets/shaders/vulkan/lpv_propagate.comp
    assets/shaders/vulkan/lpv_inject.comp
    assets/shaders/vulkan/ui.vert passes
  • Visual verification: mountains rising from ocean show correct surface textures at all heights

📚 References

Metadata

Metadata

Assignees

No one assigned

    Labels

    automated-auditIssues found by automated opencode audit scansbugSomething isn't workingenhancementNew feature or requestquestionFurther information is requested

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions