Game · 3D · Python + Blender

Etheric Grove — a 3D explorer-shooter

A three-chapter first-person campaign built in pure Python: gather word-shards through the Twilight Grove, the Ashen Waste and the Inkfall Deep while the Ashbound hunt you. Worlds are modelled procedurally in Blender, rendered in raylib, and lit by a hand-written GLSL day/night shader.

Python raylib / pyray Blender (bpy) GLSL shader glTF assets Procedural SFX
etheric_grove.py — chapter 1: Twilight Grove_
Etheric Grove gameplay — a first-person view across a prop-scattered clearing at twilight

Native desktop capture — first-person view across a prop-scattered clearing at twilight.

Overview

Etheric Grove is a self-contained 3D action game with no game engine and almost no dependencies — just Python, raylib for the window and renderer, and Blender (run headless) to model the art. The pipeline is the interesting part: a build script drives Blender's bpy/bmesh to model trees, rocks, pillars, huts, crystals and enemy spectres, exports them to glTF, and the game loads those .glb props and scatters ~118 of them into a ring-bounded clearing.

What's in it

🌲 Procedural Blender worlds

Every prop is modelled in code via bpy/bmesh and exported to glTF, keeping per-part materials (brown trunks + green canopies, red-roofed huts, horned spectres).

🌅 GLSL day/night cycle

A small embedded shader gives every prop Lambert-shaded relief from a single directional sun; the sun, sky colour and ambient animate over ~150 s from noon to deep twilight.

👾 Six enemy archetypes + bosses

Melee spectres, flocking wisp swarms, splitters, ranged casters and flankable shield-wardens — plus three per-chapter bosses with distinct attack patterns.

🔫 Looted weapon roster

Blaster, Scatter, Lance and Rocket, each looted from crates and bosses, with a right-click charged AoE alt-fire and a fast-kill score-combo multiplier.

♾ Campaign + endless mode

Clear three themed chapters — choosing a boon between each — or take on escalating endless waves with a boss every fifth and a high score saved to disk.

🔊 Procedural sound

A seamless ambient pad plus blaster / hit / kill / hurt / pickup effects generated by the stdlib wave module — no audio assets, no numpy.

How it works

A native desktop game, so there's no in-browser demo — but the whole thing is reproducible from source: build the assets, generate the sound, and run. Browse the source →