feat(biome): abyssal bioluminescent + glow blocks + abyssal jellyfish + particles

- BlockDatabase: GLOW_CORAL_CYAN(10), GLOW_CORAL_VIOLET(11), LAVA_VENT(12) with emission data
- WorldGenerator: abyssal blocks at y<-40 (cyan 4%, violet 1%, vent 0.5% via 3D noise)
- Chunk.gd: multi-surface mesh (solid + 3 emissive surfaces with StandardMaterial3D emission)
- MobSpawner: abyssal jellyfish spawn when player y<-30, max 8
- AbyssalJellyfish: cyan fluo, slower, double damage (10), bioluminescent flash on attack
- BioluminescentParticles: 200 cyan-green particles follow player, only emit in abyss

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Floppyrj45
2026-04-19 18:12:37 +02:00
parent e1fda4d393
commit d8e19932cc
6 changed files with 324 additions and 28 deletions

View File

@@ -26,6 +26,11 @@ static func generate_chunk(chunk_x: int, chunk_y: int, chunk_z: int, seed: int)
noise_wreck.noise_type = FastNoiseLite.TYPE_CELLULAR
noise_wreck.frequency = 0.03
var noise_glow: FastNoiseLite = FastNoiseLite.new()
noise_glow.seed = seed + 7777
noise_glow.noise_type = FastNoiseLite.TYPE_SIMPLEX_SMOOTH
noise_glow.frequency = 0.08
for lx: int in range(CHUNK_SIZE):
for lz: int in range(CHUNK_SIZE):
var wx: int = chunk_x * CHUNK_SIZE + lx
@@ -45,7 +50,7 @@ static func generate_chunk(chunk_x: int, chunk_y: int, chunk_z: int, seed: int)
var idx: int = lx + ly * CHUNK_SIZE + lz * 256
data[idx] = _get_block_at(wy, ground_height, biome, wx, wz, lx, lz,
is_wreck_center, noise_detail, seed)
is_wreck_center, noise_detail, noise_glow, seed)
return data
@@ -61,11 +66,28 @@ static func _get_biome(biome_val: float, ground_height: int) -> int:
static func _get_block_at(wy: int, ground_height: int, biome: int,
wx: int, wz: int, lx: int, lz: int,
is_wreck_center: bool, noise_detail: FastNoiseLite, seed: int) -> int:
is_wreck_center: bool, noise_detail: FastNoiseLite, noise_glow: FastNoiseLite, seed: int) -> int:
if wy <= -60:
return BlockDatabase.BlockType.BEDROCK
# --- Abyssal bioluminescent decorations (deep zone) ---
if ground_height < -30 and wy >= ground_height and wy < ground_height + 3:
if wy < -40:
var glow_val: float = noise_glow.get_noise_3d(float(wx), float(wy), float(wz))
# GLOW_CORAL_CYAN patches — 4% density on surfaces
if glow_val > 0.65:
return BlockDatabase.BlockType.GLOW_CORAL_CYAN
# GLOW_CORAL_VIOLET rare columns — 1%
var violet_val: float = noise_glow.get_noise_3d(float(wx) * 1.3, float(wy) * 0.5, float(wz) * 1.3)
if violet_val > 0.82:
return BlockDatabase.BlockType.GLOW_CORAL_VIOLET
# LAVA_VENT columns — 0.5% density, very deep
if wy < -50 and wy < ground_height + 3:
var vent_val: float = noise_glow.get_noise_3d(float(wx) * 0.5, float(wy) * 2.0, float(wz) * 0.5)
if vent_val > 0.88:
return BlockDatabase.BlockType.LAVA_VENT
if wy < ground_height - 5:
return BlockDatabase.BlockType.ROCK