func _spawn_cleanser_particles(pos: Vector2i) -> void: """Spawn bright cleansing particles when sticky is cleared.""" if not main_scene or not gridmap: return var world_pos = Vector3( pos.x * gridmap.cell_size.x + gridmap.cell_size.x / 2.0, 0.5, pos.y * gridmap.cell_size.z + gridmap.cell_size.z / 2.0 ) var particles = GPUParticles3D.new() particles.emitting = true particles.one_shot = true particles.amount = 12 particles.lifetime = 0.6 particles.explosiveness = 0.9 var material = ParticleProcessMaterial.new() material.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_SPHERE material.emission_sphere_radius = 0.3 material.direction = Vector3(0, 1, 0) material.spread = 180.0 material.initial_velocity_min = 3.0 material.initial_velocity_max = 5.0 material.gravity = Vector3(0, -5.0, 0) material.scale_min = 0.05 material.scale_max = 0.15 var mesh = SphereMesh.new() mesh.radius = 0.2 mesh.height = 0.4 var spatial_mat = StandardMaterial3D.new() spatial_mat.albedo_color = Color(0.2, 1.0, 1.0) # Cyan/Blue for cleanser spatial_mat.emission_enabled = true spatial_mat.emission = Color(0.2, 1.0, 1.0) spatial_mat.emission_energy_multiplier = 3.0 mesh.material = spatial_mat particles.draw_pass_1 = mesh particles.process_material = material particles.position = world_pos main_scene.add_child(particles) await get_tree().create_timer(1.2).timeout if particles and is_instance_valid(particles): particles.queue_free()