o
odin.langpkg.dev
packages / app / nabongo-lion-of-wanga

nabongo-lion-of-wanga

8ced18dapp

Story-driven top-down action-RPG in Odin + raylib โ€” 3 acts, 9 procedural levels, 9 bosses, set in the Luhya/Abawanga world of Nabongo Mumia.

No license ยท updated 3 weeks ago

๐Ÿฆ Nabongo: The Lion of Wanga

A story-driven, top-down action-RPG set in the Luhya/Abawanga world of Nabongo Mumia โ€” built from scratch in Odin + raylib.

Three acts, nine procedurally-generated levels, nine bosses, an adaptive learning AI, and a narrated prologue. You are Wekesa, the Nabongo's shield, sent to reclaim the stolen great Drum of Wanga โ€” and to cleanse the blight and wildwood beyond.

Title screen

License: PolyForm Noncommercial 1.0.0 Language: Odin Engine: raylib 5.5 Platforms: Linux โ€ข Windows Status: Playable


๐Ÿ“– Table of Contents


๐Ÿ“ธ Screenshots

The Catacombs (Act I boss) The Cursed Land (Act II) The Fantasy Forest (Act III)
Catacombs Cursed Land Fantasy Forest
Full map (M / Tab) Journal (objectives) Fast-travel
Map Journal Travel

๐ŸŒ What is this?

Nabongo is a complete, self-contained action-RPG written without a game engine โ€” just the Odin standard library and raylib for windowing, input, drawing and audio. Everything else (the tilemap renderer, animation system, combat, AI, pathfinding, procedural level generation, quest engine, menus, save system) is hand-built and lives in this repo.

It is also a small history project: the story, names and places draw on the oral history of Nabongo Mumia and the Wanga kingdom of western Kenya.

โš ๏ธ Assets are not included. The character/tileset/UI art is a commercial CraftPix.net pack whose license forbids public redistribution, so it is gitignored. The code, maps, generated music/narration and (CC0) sound effects are here; see docs/ASSETS.md to obtain the art and run the game with visuals.


๐ŸŽฌ The Three Acts

The campaign is a single 21-objective quest line across three distinct environments, each a 3-level procedural sub-world with its own art, foes and bosses.

Act I โ€” The Dungeon ยท reclaim the Drum (3 levels ยท 3 Gorgons)
Level Theme Boss
The Catacombs flagstone crypt Inanyi, the Ash-Mouthed (Gorgon โ€” two-phase evolution)
The Cursed Grove crimson-washed crypt Sirull, the Bone-Crowned
The Ash Barrows ashen-green crypt Nyangwe, the Drum-Eater (holds the Drum)

The Gorgons are side-view strip-animated bosses with personality dialogue, a surprise mid-fight transformation (a second health bar), and lair-locked arenas.

Act II โ€” The Cursed Land ยท cleanse the blight (3 levels ยท 3 warlords)

Cracked red earth and root-overgrowth. Enemies are orcs, slimes and plants.

Level Boss (giant "warlord" elite)
Bleeding Fields Kamabeka, the Bramble Maw (giant plant)
Marrow Mire Mukhwana, the Mire Mother (giant slime โ€” splits on death)
Heart of Rot Sululu, the Rot-Chief (giant orc)
Act III โ€” The Fantasy Forest ยท free the wildwood (3 levels ยท 3 warlords)

Bright grass clearings walled by dense canopy.

Level Boss
Wildwood Eaves Sirikwa, the Thorn King (giant plant)
Hollow Deep Nasimiyu, the Bog Mother (giant slime)
Heartwood Mwambu, the Elder Tusk (giant orc)

Every lair is a sealed single-entrance arena opened by finding and pulling a hidden lever โ€” the dungeon puzzle. Each of the nine levels has 6 baked layout variants, and the game picks one at random on entry, so every descent is different.


๐Ÿš€ Quick Start

You need the Odin toolchain (which bundles raylib 5.5). See https://odin-lang.org/docs/install/.

Linux / WSL
git clone https://github.com/nyongesa637/nabongo-lion-of-wanga.git
cd nabongo-lion-of-wanga

# 1) Add the art assets (not in the repo) โ€” see docs/ASSETS.md
# 2) Build & run:
odin run src -out:build/nabongo
Windows (required for gamepad)

WSL does not pass USB controllers through to Linux processes, so gamepads only work in a native Windows build.

  1. Install Odin for Windows and put it on PATH.
  2. From a Windows terminal in the project folder (reachable from WSL at \\wsl.localhost\<distro>\home\<you>\Projects\Nabongo, or copy it to C:\Nabongo):
    build_windows.bat
  3. Run nabongo.exe with the assets\ folder beside it and your controller connected.

Odin cannot cross-link Linux โ†’ Windows, so the .exe must be built on Windows.

Screenshot / headless mode

The binary accepts a shot <screen> argument that loads a scene, renders a few frames and writes a PNG โ€” used to verify the game without a display:

./build/nabongo shot forest    # menu | dungeon | cursed | ash | land | forest | map | journal | travel | inv | โ€ฆ

๐ŸŽฎ Controls

Fully rebindable in Settings โ†’ Controls, with a keyboard/mouse vs. controller device toggle.

Action Keyboard Gamepad
Move W A S D / Arrows Left stick / D-pad
Attack J A / โœ•
Sprint hold a direction (auto)
Interact / talk / lever E B / โ—ฏ
Inventory I Y
Map (mini โ†’ full) M / Tab โ€”
Pause / Journal / Travel Esc Start

Combat moves: a tight melee swing, a 2-hit combo (press attack again during recovery), and a run-lunge (attack while sprinting). Health is staged: 3 โ†’ 5 โ†’ 7 hearts as you reach new tiers.


โš™๏ธ Gameplay Systems

Combat & movement
  • Feet-box collision against walls and solid bodies (you can't walk through enemies).
  • Tight, close-range hitboxes; i-frames on hit; knockback.
  • Hit sparks + screen shake on impact; enemies flash on damage.
  • Y-sorted rendering so actors layer correctly with walls and each other.
Leveling & a deliberately steep curve
  • XP from kills โ†’ levels (cap 10), with sprite tier-ups at L4 and L8.
  • Health grows only at tier-ups (3/5/7); damage grows every other level.
  • Reaching the cap takes a whole thorough run, not a few rooms.
Adaptive, learning difficulty
  • Three settings (Easy / Normal / Hard) plus an adaptive nudge that eases when you keep dying and tightens when you breeze through.
  • Enemies scale to your level and the zone depth, so a maxed-out hero still meets a real fight instead of one-shotting everything.
  • Foes "learn": aggression, flanking and attack tempo rise as you win.
Enemy AI & pathfinding
  • A shared flow-field (one BFS from the player per tile-change) routes every foe around walls โ€” no more getting stuck on corners.
  • Foes run when far, flank to surround when close, and coordinate so only a few strike at once while the rest pressure from angles.
  • Per-creature movesets: orcs charge / poke / swing; plants spit venom and lunge-bite; slimes hop and split into minis on death.
Bosses
  • Gorgons (Act I): side-view strip-animated, two-phase with a transform + second health bar, dialogue, and arena-lock.
  • Warlords (Acts IIโ€“III): giant orc/slime/plant elites with a screen-spanning health bar, a name-reveal banner, capped hits, and a big reward.
Quests, waypoints & navigation
  • A 21-objective main quest across three acts (see the in-game Journal, which scrolls).
  • A pulsing waypoint points at the current target (lever โ†’ boss โ†’ deeper portal), and an edge-arrow when it's off-screen.
  • A baked minimap + full map (M/Tab) with markers, and a pause-menu Travel to fast-travel to any place you've reached.
  • An NPC toll: the ferryman charges 3 cowries for the south passage.
Procedural generation
  • BSP room partition โ†’ guaranteed-connected rooms + corridors.
  • A final room is carved into a larger boss arena, then sealed to a single gated door wired to a hidden lever.
  • Autotiled dungeon walls; dirt+overgrowth and grass+canopy themes for the outdoor acts.
  • 6 seeded variants per level, baked to TMX; chosen at random per entry.
  • All generators live in tools/ (see below).

๐Ÿ—‚ Project Layout

src/
  main.odin            # game loop, modes, menus, HUD, camera, transitions, waypoints
  engine/              # reusable, game-agnostic layer
    assets.odin        # lazy (character,state) animation-clip registry
    anim.odin          # 4-direction + strip sprite animation
    tilemap.odin       # TMX render + collision grid + runtime door-opening
    tmx.odin           # custom TMX (XML/CSV) parser
    input.odin         # unified, rebindable keyboard + gamepad
    audio.odin         # music + SFX + narration
    ...
  game/                # the game itself
    player.odin  enemy.odin  boss.odin  projectile.odin  effects.odin
    difficulty.odin  quest.odin  world_items.odin  pathfind.odin
    inventory.odin  minimap.odin  save.odin  story.odin
tools/                 # Python generators + asset pipeline (see below)
assets/maps/           # generated Tiled maps (.tmx) โ€” kept
assets/audio/          # generated music + narration, Kenney SFX โ€” kept
assets/{sprites,tiles,ui}/   # CraftPix art โ€” NOT in the repo (see docs/ASSETS.md)
docs/                  # ARCHITECTURE, STORY, ASSETS, PLAN, screenshots
build_windows.bat      # native Windows build (gamepad)

๐Ÿ›  Tools & Asset Pipeline

All in tools/ (Python 3). They generate the maps and audio that ship in assets/.

Tool Purpose
gen_dungeon.py Act I โ€” BSP catacombs/grove/barrows + Gorgon arenas (6 variants each)
gen_cursed.py Act II โ€” 3 cursed-land levels + warlord arenas
gen_forest.py Act III โ€” 3 forest levels + warlord arenas
gen_elureko.py the Elureko hub town (roads + NPCs)
mapgen.py shared TMX builder + tile vocabulary
gen_music.py NumPy-synthesised OGG soundtracks (menu/town/dungeon/boss)
narrate.py Piper TTS deep-narrator prologue (venv in tools/ttsenv, gitignored)
python3 tools/gen_dungeon.py all   # regenerate all dungeon variants
python3 tools/gen_cursed.py  all
python3 tools/gen_forest.py  all

๐Ÿ“š Documentation

Doc Contents
docs/ARCHITECTURE.md engine/game split, systems, data flow
docs/STORY.md the narrative, characters and the three acts
docs/ASSETS.md how to obtain the CraftPix art and place it
docs/PLAN.md the original phased build plan
CONTRIBUTING.md how to build, propose changes, and the asset rule
CODE_OF_CONDUCT.md community standards
SECURITY.md how to report issues

๐Ÿ—บ Roadmap

  • Bespoke boss sprites for the warlords (currently scaled orcs/slimes/plants)
  • Dedicated wolf creature wired from the wolf sheets
  • More puzzle types (pressure plates, hidden rooms, keyed doors)
  • Runtime (in-engine) generation so seeds change without baking variants
  • Save slots & New Game+

๐Ÿค Contributing

Issues and pull requests are welcome โ€” please read CONTRIBUTING.md and the CODE_OF_CONDUCT.md first. The one hard rule: never commit the CraftPix art (it's gitignored for a reason โ€” see docs/ASSETS.md).


๐Ÿ“œ License

This project's original work (code, maps, generated audio, docs, screenshots) is released under the PolyForm Noncommercial License 1.0.0.

You may read, learn from, run and modify it for non-commercial purposes. You may not sell it or use it (or derivatives) for commercial advantage without a separate written agreement. ยฉ 2026 Nimrod Nyongesa (@nyongesa637).

Third-party assets are not covered by this license and are not redistributed here.


๐Ÿ™ Credits & Attribution

  • Code, design, story, maps, music & narration: Nimrod Nyongesa (@nyongesa637).
  • Art: CraftPix.net (characters, tilesets, UI) โ€” under CraftPix's license, obtained separately.
  • Sound effects: Kenney.nl โ€” CC0.
  • Engine/tools: Odin, raylib, Piper TTS, NumPy.
  • Story inspiration: the oral history of Nabongo Mumia and the Wanga kingdom.
Built with Odin + raylib โ€ข a hand-rolled engine, no game framework