A dream-themed shooter built in Godot. Surreal environments, procedurally generated levels, and particle effects that blur the line between waking and sleeping. Where game physics learned to bend.
DreamBlaster is a surreal shooter where dreamscapes shift and morph as you play. Built in Godot with procedural level generation, it pushed into territory COLORWAR never touched: runtime randomness, layered particle systems, and physics that deliberately break the rules. The dream theme was an excuse to experiment freely -- if something looked wrong, it was "intentional."
Same engine as COLORWAR, but deeper. Heavy use of GPUParticles2D, shader materials, and procedural room generation with random seeds.
The dream world is generated at runtime. Room templates are shuffled and connected via doorway nodes, with enemy spawns and visual themes selected per-room.
The procedural room generator -- places rooms using a random walk algorithm and links their doorways.
extends Node2D @export var room_templates: Array[PackedScene] @export var max_rooms: int = 12 @export var room_spacing: float = 512.0 var rng = RandomNumberGenerator.new() var placed_rooms: Array = [] func generate_dream(seed_val: int): rng.seed = seed_val var cursor = Vector2.ZERO for i in max_rooms: var template = room_templates[rng.randi_range(0, room_templates.size() - 1)] var room = template.instantiate() room.position = cursor add_child(room) placed_rooms.append(room) # Random walk to next position var dir = [Vector2.RIGHT, Vector2.DOWN, Vector2.LEFT, Vector2.UP] cursor += dir[rng.randi_range(0, 3)] * room_spacing link_doorways()
Once rooms started connecting randomly, every run felt different. The random walk algorithm was simple but the emergent layouts were complex. Seed-based generation meant interesting layouts could be saved and shared.
Adding particles is easy. Making them feel right takes iteration. Every effect needed tuning: lifetime, emission rate, gravity, color curves. The "dream fog" went through 15 versions before it felt ethereal instead of laggy.
Writing the first shader was terrifying. Fragment functions, UV coordinates, uniforms. But once chromatic aberration worked, every visual problem looked like a shader problem. The dream dissolve transition was the proudest moment.
When enemies clip through walls in a normal game, it is a bug. In a dream game, it is "reality breaking down." The surreal theme was a genuine design advantage -- imperfection became aesthetic.