LÖVE is the prototyping bench — built directly against the callback surface, no wrapping engine, no entity component DSL. Productized work runs in Unity (Passages) and explorations sit in Rust/Bevy and SDL2/C++ below.
love.update(dt)
fixed step
love.draw()
canvas batched
love.physics
box2d body sim
Active & Past Buildsunity // c // rust+bevy // sdl2
resource
vitality/essence
dual-pool combat
in_development
pending_captures
[0x01]_PASSAGES
LitRPG-inspired third-person action RPG
Combat blends FF12's Gambit system with the rule-driven party logic of .hack//GU. A dual-resource system (Vitality / Essence) governs both health and casting. The Attunement Scripts editor lets the player wire per-companion behavior trees. Abilities authored as ScriptableObjects so designers iterate without recompiling.
A BSP renderer written from scratch in C as a graphics deep-dive — tree construction, polygon splitting, painter's-order traversal. Separately, a 3D shooter prototype in Unity to feel the C# tooling end of the same pipeline. Both research artifacts, not productized.
CUnityBSPrendererresearch
research
pong → breakout
↓
top-down shooter
↓
bevy
in_progress
[0x03]_BEVY + SDL2 TRACK
Sequential learning ladder — SDL2 first, Bevy after
Sequential ladder, not a single project. SDL2/C++ for the fundamentals (Pong, then Breakout, then a top-down shooter), then graduate the same exercises into Rust + Bevy to feel ECS-first authoring against the same problems. Active track.
RustBevySDL2C++ECS
love2d_loop.lua
function love.load()
world = love.physics.newWorld(0, 9.81*64)
player = entities.spawn("player", 100, 100)
endfunction love.update(dt)
accumulator = accumulator + dt
while accumulator >= STEP do
world:update(STEP)
input.poll()
ai.tick(STEP)
accumulator = accumulator - STEP
endendfunction love.draw()
camera:attach()
tilemap:draw()
entities:draw()
camera:detach()
hud:draw()
end