Een WarCraft-geinspireerde RTS met Brabantse ziel — van concept tot code
Het jaar 1473. Het Gouden Worstenbroodje is gestolen. Brabant staat op. Vier facties botsen in een strijd om cultuur, identiteit en het recht op een frikandel speciaal.
Brabandse units worden sterker naarmate ze dichter bij elkaar staan. +50% stats bij 20+ units. Nergens anders.
Gebaseerd op echte cultuurverschillen. Brabanders feesten, Randstad vergadert, Limburg graaft tunnels, Belgen diplomatiseren. 39 unit types, 25 campaign missies.
Control groups (Ctrl+1-9), attack-move (A), Ctrl+click same-type selectie, rally points, drag-select. De volledige RTS-ervaring in de browser.
17-bone humanoid armature, distance-based weight painting, 7 animatiesets (Idle, Walk, Attack, Death, Gather, Build, Heal). Blender CLI auto-rig pipeline.
525+ voice lines via ElevenLabs met echt dialect: Brabants (Joost), Limburgs (Luk Balcer), Vlaams (Hans Claesen), ABN (Serge de Beer). 4 unieke factiestemmen.
Three.js + TypeScript + bitECS. Geen install, direct speelbaar. Desktop-first, mobile secondary. 60fps target bij 200+ units.
Meshy Studio v6 voor 3D modellen, Blender CLI auto-rig, ElevenLabs dialect voices, Suno muziek. Totale kosten: ~$75.
Gemaakt door iemand met een WarCraft: Reign of Chaos tattoo. Dit is geen clone — het is een liefdeverklaring. 67 bronbestanden, 33.000 LOC, 166 tests.
Vier facties, elk met een unieke mechanic, playstyle en persoonlijkheid. Gebaseerd op echte regionale cultuurverschillen — met een dikke laag humor.
"Samen staan we sterk — en we staan altijd samen"
Warmte, feest, saamhorigheid. De Brabanders winnen door samen te staan — letterlijk. Resources: Worstenbroodjes (goud), Bier (hout), Gezelligheid (tertiair). Stem: Joost (primair mannelijk), Roos (vrouwelijk).
"De Prins is hier!" / Ultimate: "ALAAF!" -- alle units 8s invincible
Burly master farmer, oversized pitchfork, straw hat. 1.5x scale.
"Dit staat niet in de planning"
Bureaucratie, efficienty, corporate power. De Randstad is traag aan de start maar wordt de snelste factie na genoeg acties. Resources: PowerPoints (goud), LinkedIn Connections (hout), Havermoutmelk (tertiair). Stemmen: Serge de Beer (primair), Daniel Wichers (alternatief), Tijs (CEO), Emma (HR).
"Vijandige Overname" -- capture vijandelijk gebouw. Stem: Tijs.
Mobile podium, microphone staff, Dutch flag pin. Ranged hero.
"Gluck auf" — De Mijnwerkers
Mysterie, diepte, veerkracht, zachte kracht. De Limburgers winnen niet door brute force maar door onverwachte tunnelverrassingen en geduldig fort-spel. Resources: Vlaai (goud), Mergel (hout), Kolen (tertiair). Stemmen: Luk Balcer (primair), Nick (alternatief). Tankiest faction: Mergelridder 280 HP / 6 armor.
"Gluck auf... veur dich is 't aafgeloupe!" — Mijnschacht Instorten (AoE stun), Tunnelcommando (teleport), Aardbeving (ultimate)
"De vloed komt!" — Maasvloed (line AoE knockback), Nevelgordijn (fog), Watersnood (ultimate AoE)
"Ceci n'est pas une army" — De Diplomaten
Chaos, bureaucratische overvloed, surrealistisch genie. De Belgen winnen door niemand te laten begrijpen wat ze eigenlijk aan het doen zijn. Resources: Frieten (goud), Trappist (hout), Chocolade (tertiair). Stemmen: Hans Claesen (primair), Walter (hero), Petra Vlaams (vrouwelijk). Glass cannon: Bierbouwer 0 armor, Chocolatier 40 HP.
"In naam van de Gouden Friet!" — Koninklijke Portie (AoE heal+buff), Belgisch Decreet (unit conversion), Het Belgisch Compromis (ultimate)
"De waarheid zit in de tweede gisting" — Stiltegelofte (silence), Trappistenzegen (regen), Laatste Avondbrouwsel (ultimate)
Elke factie heeft een mechanic die nergens anders bestaat. Gebaseerd op echte culturele stereotypen, vertaald naar strategische diepte.
Brabandse units worden sterker naarmate ze dichter bij elkaar zijn. Dit stimuleert deathball-strategieen maar maakt ze kwetsbaar voor AoE.
Elke actie duurt 20% langer. Maar elke voltooide actie geeft +3% snelheid (stapelbaar). Na 20 acties is de Randstad SNELLER dan iedereen. Plus: elke 5 minuten pauzeren alle gebouwen 8 seconden voor "werkoverleg".
| Timing | Snelheid vs baseline | Werkoverleg |
|---|---|---|
| Start game | -20% (traag) | Elke 5 min: 8s pauze |
| Na 10 acties | +10% (normaal) | Elke 5 min: 8s pauze |
| Na 20 acties | +40% (snel!) | Uitschakelbaar via Tier 3 tech |
De signatuur-mechanic van de Limburgers. Grotten en Mijnschachten fungeren als tunnel-endpoints die automatisch met elkaar verbinden. Units reizen onzichtbaar onder de grond voor verrassingsaanvallen.
| Eigenschap | Waarde |
|---|---|
| Max tunnel-endpoints | 4 standaard (5 met Geheime Gangen upgrade) |
| Transporttijd | 3 seconden (1.5s met upgrade) |
| Capaciteit | Max 12 units tegelijk in transit |
| Zichtbaarheid | Vijand ziet NIETS — geen tunnels, geen indicators |
| Unit types | Alle ground units + heroes. Siege units NIET. |
| Onderhoud | 1 Kolen/30s per Grot. Bij 0 Kolen: tunnels sluiten. |
| Verrassingsaanval | +25% attack buff bij uitkomen tunnel |
Counter: scouts met hoge sight range, AoE bij exits, Grot vernietigen (transit-units spawnen kwetsbaar op oppervlak), Mijnschachten vernietigen = geen Kolen = tunnels dicht.
De Belgen zijn de ENIGE factie met een actief diplomatie-systeem. Via de Diplomatiek Salon (Tier 3) kunnen ze onderhandelen, saboteren en manipuleren. Oorlogen winnen zonder een slag te leveren.
| Type Compromis | Kosten (Chocolade) | Effect | Duur |
|---|---|---|---|
| Wapenstilstand | 30 | Geen aanvallen van/naar vijand | 60s |
| Handelsovereenkomst | 20 | +25% gathering (zelf) / +15% (vijand) | 90s |
| Culturele Uitwisseling | 25 | Train 1 vijandelijk unit-type (tijdelijk) | 120s |
| Niet-aanvalspact | 15 | Wederzijds gebouwen-bescherming | 45s |
Chocolade-Overtuiging: De Frietkoning kan vijandelijke units tijdelijk "overtuigen" (20 Chocolade, 10s team switch). Commissie Oprichten: Target vijandelijk gebouw produceert 40% langzamer (15 Chocolade, 30s). Damage Split: Bij damage >40% max HP wordt 50% van overtollige damage doorgestuurd naar dichtstbijzijnde vijand.
Factie-ability: Diplomatieke Verwarring -- 50% kans commando's genegeerd, 25% friendly fire, 10% "vergadermodus" (unit doet 10s niks), 15% random movement. Visueel: Magritte-wolken en bowler hats uit de lucht.
Volledige RTS-besturing gebaseerd op het WarCraft-model. Alle essentials zijn geimplementeerd.
| Actie | Input | Details |
|---|---|---|
| Rally Points | Rechtermuisklik op gebouw | Nieuw geproduceerde units lopen automatisch naar rally point |
| Control Groups | Ctrl+1-9 (assign), 1-9 (recall) | Sla selecties op, recall met nummertoets, dubbeltap centert camera |
| Attack-move | A-toets + klik | Units bewegen naar locatie en vallen alles aan onderweg |
| Same-type Select | Ctrl+klik op unit | Selecteert alle units van hetzelfde type op het scherm |
| Drag Box Select | Klik + sleep | Rechthoek-selectie over meerdere units |
Drie lagen van automatisch verdedigen zorgen ervoor dat units niet passief sterven.
| Laag | Bereik | Gedrag |
|---|---|---|
| Self-Defense | 6 units | Workers verdedigen zichzelf automatisch als vijanden binnen range komen |
| Auto-Aggro | 12 units | Idle units vallen automatisch vijanden aan binnen aggro-range |
| Retaliation | Onbeperkt | Beschadigde units slaan terug tegen hun aanvaller |
Workers keren automatisch terug naar gathering na een gevecht.
Units klonteren niet samen op een punt. SeparationSystem met O(n) spatial grid zorgt voor:
| Eigenschap | Details |
|---|---|
| Spawn Scatter | Units spawnen met kleine random offset rond rally/spawn punt |
| Formation Scatter | Bij move-commando: natuurlijke spread rond doellocatie |
| Separation Force | Overlappende units duwen elkaar weg (spatial grid, O(n)) |
Gebouwen tonen constructie-voortgang als visuele bar. Health bars op alle gebouwen en units. Production queue is zichtbaar in het dynamische productie-paneel per gebouw.
Een volledige AI-pipeline: Meshy Studio v6 voor 3D modellen, Blender CLI auto-rig voor skeletal animatie, ElevenLabs voor dialect voices, Suno voor muziek.
Alle unit-modellen worden automatisch gerigged via Blender 5.1 CLI in headless mode. Het systeem creert een 17-bone armature, past distance-based weight painting toe, en genereert animatieclips als NLA tracks.
| Feature | Details |
|---|---|
| Weight Painting | Distance-based, automatisch per vertex |
| Head Zone Lock | Alles boven 72% hoogte = Head bone (voorkomt torso-deformatie in gezicht) |
| Rigid Weapon Pass | Wapens en props worden rigid gebonden aan Hand bone |
| Per-category Anims | Infantry, Worker, Ranged, Healer, Heavy, Siege, Hero -- elk eigen set |
| Clip | Melee | Ranged | Worker | Healer | Heavy | Siege | Hero |
|---|---|---|---|---|---|---|---|
| Idle | X | X | X | X | X | - | X |
| SiegeIdle | - | - | - | - | - | X | - |
| Walk | X | X | X | X | X | X | X |
| Attack | X | X | X | X | X | X | X |
| RangedAttack | - | X | - | - | - | - | - |
| HeavyAttack | - | - | - | - | X | - | X |
| SiegeAttack | - | - | - | - | - | X | - |
| Gather | - | - | X | - | - | - | - |
| Build | - | - | X | - | - | - | - |
| Heal | - | - | - | X | - | - | X |
| Death | X | X | X | X | X | X | X |
| Totaal clips | 4 | 5 | 6 | 5 | 5 | 5 | 6 |
Directe API-toegang tot Meshy Studio vervangt de fal.ai proxy. 20 concurrent tasks, async polling, apart rigging endpoint.
| Eigenschap | fal.ai (oud) | Meshy Studio Direct (nieuw) |
|---|---|---|
| Mode | Sync (blokkeert 2-5 min) | Async met polling |
| Concurrent tasks | ~10 | 20 |
| Rigging | In dezelfde call | Apart /v1/rigging endpoint |
| Timeout risico | Hoog | Laag (polling) |
| Parallel generatie | Gelimiteerd door sync blocking | 20 modellen tegelijk |
Parameters: ai_model=meshy-6, target_polycount=15000 (units) / 20000 (buildings), enable_pbr=true, origin_at=bottom. 10 unieke Limburgers+Belgen modellen gegenereerd via parallel batch script.
| Factie | Bestaand (v02+v03) | Nieuw nodig | Uniek nodig | Totaal |
|---|---|---|---|---|
| Brabanders | 3 | 3 | 4 | 10 |
| Randstad | 3 | 4 | 3 | 10 |
| Limburgers | 3 | 4 | 3 | 10 |
| Belgen | 3 | 3 | 3 | 9 |
| Totaal | 12 | 14 | 13 | 39 |
27 nieuwe modellen nodig (14 shareable + 13 unique). Cross-faction sharing is NOOIT toegestaan -- elke factie moet herkenbaar zijn aan silhouet en kleur op RTS-zoomniveau.
Van een typo ("Zu") tot een volledige PRD met concept art — dit is hoe Game Master en zijn team van AI agents te werk gaan.
Het Game Master systeem orkestreert 5+ parallelle agents per sprint. Elke agent heeft een specifieke verantwoordelijkheid, met een integrator die de output samenvoegt.
| Agent | Rol |
|---|---|
| Asset Generator | Meshy 3D modellen, Flux concept art, fal.ai sprites |
| Audio Director | ElevenLabs voices, Suno muziek, Web Audio API |
| 3D Animation Director | Blender CLI rigging, animatieclips, Three.js integratie |
| Scenario Writer | Campaign missies, dialoog, voice line scripts |
| Game Deployer | FTP deploy, Cloudflare cache purge, testing |
| Game Analyzer | Kwaliteitsscores, verbeterpunten, audit |
| Game Master Improvement | Meta-agent: evalueert en verbetert het hele proces |
Regel: verdeel op output, een integrator, audit na elke ronde. ~30 agents totaal ingezet over het hele project.
Dankzij de Blender-first strategie en bestaande abonnementen kost deze game bijna niks aan tooling.
| Tool | Items | Kosten | Notes |
|---|---|---|---|
| Blender procedureel | 127 modellen | $0 | <60s generatietijd, alleen CPU |
| Meshy v6 / Tripo3D | 28 modellen | ~$48 | 1 maand Max plan |
| fal.ai (Flux) | 30 images | ~$2 | Pay-per-use |
| Nano Banana | 90 images | $0 | Free tier (50/dag) |
| ElevenLabs | 216 voices + 41 SFX | $0 | Bestaand abonnement |
| Suno | 10 tracks | $0 | Bestaand abonnement |
De gouden regel: humor in de flavor, strategie in de mechanics. Unit responses doen het zware humorwerk. Abilities hebben grappige namen maar serieuze effecten.
| Resource | Brabanders | Randstad | Limburgers | Belgen |
|---|---|---|---|---|
| Goud | Worstenbroodjes | PowerPoints | Vlaai | Frieten |
| Hout | Bier | LinkedIn Connections | Mergel | Trappist |
| Speciaal | Gezelligheid | Havermoutmelk | Kolen | Chocolade |
Boer (select): "Ja?" / "Zeg het maar"
Carnavalvierder (attack): "ALAAF!" / "Pansen erop!"
Sluiper (move): "Sssst, ik ga al"
Boerinne (select): "Hedde al gegeten?"
Tractorrijder: "UIT DE WEG!"
Stagiair: "Kan ik dit op mijn LinkedIn zetten?"
Manager (attack): "Dit eskaleert!"
Consultant: "Vanuit mijn optiek..."
Hipster: "Dit was populairder voordat jullie het ontdekten"
CEO (ultimate): "Vijandige Overname!"
Mijnwerker: "Jao?" / "Waat is 't?"
Vlaaienwerper: "Kersenvlaai SPECIAAL!"
Mergelridder: "Steen breekt neet"
Mijnbaas (ultimate): "DE GROND BEEFT!"
Maasridder: "Verdrinke in de Maas!"
Frietkraamhouder: "Frieten, niet patat! NOOIT patat!"
Bierbouwer: "Ge hebt mijn bier gemorst!"
Chocolatier: "Proef en sterf!"
Dubbele Spion: "Ceci n'est pas un espion"
Frietkoning: "In naam van de Gouden Friet!"
Campaign "De Grote Overname":
R1: "De Eerste Vergadering" -- gather PowerPoints, survive Brabander protest
R2: "Het Consultancy Rapport" -- Vergaderzaal, Managers, Consultants
R4: "Gentrificatie" -- survive Belgen counter-attacks in corporate district
R5: "De Boardroom Beslissing" -- defeat ALLE 3 facties op 256 map
VLAAI STORM: Random vlaaien uit de lucht
GUUS MEEUWIS: Alle muziek = Guus Meeuwis
VERGADERING: Vijanden stoppen permanent
SPROOKJESBOS: Unlock Efteling-factie
525+ voice lines met echt dialect via ElevenLabs. Per-factie stemcasting met specifieke voice IDs. 4 unieke dialecten: Brabants, ABN, Limburgs en Vlaams.
| Factie | Primair | Alternatief | Hero | Vrouwelijk | Dialect |
|---|---|---|---|---|---|
| Brabanders | Joost | Richard (cloned) | Richard (dieper) | Roos | Brabants ("ge", "hedde", "nie", "moar") |
| Randstad | Serge de Beer | Daniel Wichers | Tijs (CEO) | Emma (HR) | ABN / Standaard Nederlands |
| Limburgers | Luk Balcer | Nick | Luk Balcer (Mijnbaas) | Melanie (met dialect) | Limburgs ("ich", "dich", "sjoen", "jao") |
| Belgen | Hans Claesen | Bart | Walter (Frietkoning) | Petra Vlaams | Vlaams ("amai", "allez", "goesting") |
| Dialect | Score | Strategie |
|---|---|---|
| ABN / Randstad | 10/10 | 60+ standaard NL stemmen, werkt perfect out-of-the-box |
| Vlaams / Belgen | 9/10 | 18+ Vlaamse stemmen beschikbaar, authentiek accent |
| Brabants | 7/10 | Joost (Brabantse stem) + Richard's geclonede stem als basis |
| Limburgs | 6/10 | Luk Balcer (Belgisch Limburg, 55 jaar) + Nick. Nasaal karakter aanwezig. |
Voice lines worden gegenereerd via de ElevenLabs multilingual v2 model. Per unit-type andere voice settings voor unieke persoonlijkheden.
| Unit | Stability | Style | Karakter |
|---|---|---|---|
| Boer (Brabanders) | 0.50 | 0.30 | Kalm, nuchter |
| Carnavalvierder | 0.30 | 0.60 | Instabiel, expressief, feestelijk |
| Sluiper | 0.30 | 0.20 | Fluisterend, laag, speed 0.9 |
| Tractorrijder | 0.55 | 0.45 | Luid, krachtig |
| De CEO (Randstad) | 0.60 | 0.30 | Autoritair, diep (Tijs) |
| Mijnbaas (Limburgers) | 0.55 | 0.30 | Wijs, diep, 55 jaar (Luk Balcer) |
| Frietkoning (Belgen) | 0.50 | 0.40 | Warm, storytelling (Walter) |
Alle Brabanders voice lines zijn herschreven: het nep-dialect met "-ansen" suffix is vervangen door authentiek Brabants dialect. 40+ locaties opgeschoond in v0.16.3.
| Oud (v0.5) | Nieuw (v0.7+) |
|---|---|
| Kansen | Sluiper |
| Muzikansen | Muzikant |
| Prins van Brabansen | Prins van Brabant |
| Factie | Units | Lijnen/unit | Generic | Totaal |
|---|---|---|---|---|
| Brabanders | 10 | 15 | 18 | 168 |
| Randstad | 10 | 15 | 18 | 168 |
| Limburgers | 8 | 15 | 18 | 138 |
| Belgen | 8 | 15 | 18 | 138 |
| Narrator | - | - | - | ~20 |
| Totaal | 36 | ~632 |
Kosten: Creator tier ($22/maand), 100.000 characters = genoeg voor alle lijnen + retakes. Instant Voice Cloning inbegrepen.
Vier speelbare campaigns met in totaal 25 missies. Van een boer in Reusel tot de Boardroom Beslissing in de Randstad. Elke factie heeft een eigen verhaallijn met unieke mechanics.
Van een simpele boer in Reusel tot de Slag om de Randstad. Geschatte speelduur: 7-9 uur.
| # | Naam | Locatie | Type |
|---|---|---|---|
| 1 | Tutorial | Reusel | Introductie |
| 2 | Eerste Gevecht | Tilburg | Combat intro |
| 3 | Verdediging | Den Bosch | Defense |
| 4 | De Binnendieze | Den Bosch | Stealth commando (noPlayerTownHall) |
| 5 | Heuvelland Diplomatie | Limburg | Survive Limburgse tests |
| 6 | De Boerenopstand | Brabant | Free tractors, destroy garrison |
| 7 | De Markt van Brabant | Oeteldonk | Economy + defense |
| 8 | Het Beleg van Eindhoven | Eindhoven | Siege warfare |
| 9 | De Brabantse Nacht | Brabant | Epic 2-front finale |
| 10 | De Raad van Brabant | Den Bosch (256x256) | Alliantie-missie |
| 11 | De Slag om de A2 | A2-corridor (384x384) | Grootste battle, 6 golven |
| 12 | Het Gouden Worstenbroodje | Randstad (320x320) | 3-ring finale, CEO boss fight |
De Limburgers campaign leert de tunnel-mechanic en Kolen-economie progressief aan.
| # | Naam | Type |
|---|---|---|
| L1 | Eerste Mijnschacht | Tutorial: resources, tunnels |
| L2 | De Mergelgroeve | Build + defend mijnoperatie |
| L3 | Tunneloffensief | Surprise attacks via tunnels |
| L4 | De Kolenoorlog | Resource denial, Kolen-management |
| L5 | Gluck Auf! | Finale: verdedig de Mijn |
De Belgen leren diplomatiseren, Chocolade gebruiken en vijanden manipuleren.
| # | Naam | Type |
|---|---|---|
| B1 | De Eerste Frituur | Tutorial: economy, Frietkraamhouders |
| B2 | Het Chocolade Verdrag | Diplomatie-mechanic introductie |
| B3 | De Commissievergadering | Compromis + combat combinatie |
De Randstad campaign leert corporate mechanics progressief aan. Van je eerste vergadering tot de ultieme boardroom beslissing.
| # | Naam | Type |
|---|---|---|
| R1 | De Eerste Vergadering | Tutorial: gather PowerPoints, recruit Stagiairs, survive protest |
| R2 | Het Consultancy Rapport | Build Vergaderzaal, train Managers/Consultants, destroy outpost |
| R3 | De Vijandige Overname | Two-front attack op Limburger mining operations, AI enabled |
| R4 | Gentrificatie | Survive 4 waves Belgen counter-attacks, build corporate district |
| R5 | De Boardroom Beslissing | Epic finale: defeat 3 facties op 256 map |
In Den Bosch — het kloppende hart van Brabant — roepen we de Raad van Brabant bijeen. Brabanders, Limburgers en Belgen aan dezelfde tafel. Voor het eerst in de geschiedenis.
Nieuwe mechanics: parallelle quest objectives, kanaliseer-mechanic (hero ongestoord bij locatie), verborgen vijanden die zich mid-missie onthullen, diplomatie door resource-giften.
Langs de A2, in een eindeloze kolonne van pakken en PowerPoints, marcheerde de Randstad naar het zuiden. Meer dan we ooit gezien hadden. Brabant, Limburg en Belgie — zij aan zij.
Nieuwe mechanics: mobiel vijandelijk Veldkwartier, vernietigbare bruggen, A2 als speed-bonus terrein, 3-factie alliantie-warfare simultaan. Grootste campaign map: 384x384.
Dit is het, Brabant. Ergens daarbinnen — in de kluis van het Corporate Tower, veertig verdiepingen hoog — ligt het Gouden Worstenbroodje. VOOR HET WORSTENBROODJE!
CEO Boss Fight: Fase 1 op het dak (Board Room), Fase 2 achtervolging door Ring 2 (Elevator Pitch), Fase 3 laatste stand bij de ruines (De Gouden Handdruk). ~80 vijandelijke units + continue productie.
| Bonus behaald in | Effect in latere missie |
|---|---|
| Missie 10: Alle taken binnen 15 min | Missie 11: 6 extra alliantie-units (zelf controleerbaar) |
| Missie 10: 1000/800 oorlogsvoorraad | Missie 12: +25% startresources |
| Missie 11: Alle forten >50% HP | Missie 12: 2 extra Kantoor-torens (defense) |
| Missie 11: <20 unit verliezen | Missie 12: gratis Carnavalsrage bij start |
| Missie 9: Geen Grot verloren | Missie 12: geheime tunnel naar Ring 3 |
12 Brabanders + 5 Limburgers + 3 Belgen + 5 Randstad. Geschatte totale speelduur: 15-20 uur.
Reusel, Tilburg, Den Bosch, Limburg, Eindhoven, A2-corridor, Randstad, Belgische fritkotten, mergelgrotten.
De CEO als memorabele eindbaas: komisch, dreigend, en uiteindelijk tragisch. "IK... BIN... DE... SYNERGIEEEEE!"
Stealth commando missie met noPlayerTownHall flag -- geen basis, alleen een squad. Uniek in het genre.
67 bronbestanden, 33.000 LOC TypeScript, 166 geautomatiseerde tests. Hybrid UnitRenderer met SkinnedMesh + InstancedMesh, 4-faction architectuur, en een entity factory met 72 archetypes.
Combinatie van SkinnedMesh (voor geanimeerde units) en InstancedMesh (voor statische units). Skeletal animatie met per-unit AnimationMixer, crossfade transitions, one-shot/loop configuratie per clip.
FactionId enum met Brabanders (0), Randstad (1), Limburgers (2), Belgen (3). GameConfig singleton vervangt alle hardcoded faction references. factionData.ts: 1461 LOC.
Vitest test suite: MapGenerator (13), PlayerState (24), AIController (16), en meer. Alle tests groen. 232ms runtime.
O(n) spatial grid voor unit separation. Voorkomt unit-stacking. Natural scatter bij spawn en formation move.
Expliciete playerFactionId/aiFactionIds vervangt hardcoded FactionId.AI. Faction remap systeem zet speler altijd in slot 0. Alle game systems gebruiken GameConfig.
Visuele constructie-voortgang per gebouw. Health bars op alle entities. Dynamic production panel met queue display per gebouw/factie.
256 segments (was 128), height 2.0, slope-based color blending, spawn area flattening voor building placement. Water depth gradient + 3-wave animation.
4 skirmish map templates: Klassiek, Kruispunt (edge spawns), Eilanden (peninsula bases), Arena (close-quarters). Template selector in skirmish menu.
| Prioriteit | Bug | Fix |
|---|---|---|
| CRITICAL | VisionSystem hardcoded naar Brabanders | GameConfig.playerFactionId |
| CRITICAL | CommandSystem hardcoded naar Brabanders | GameConfig.isPlayerFaction() |
| CRITICAL | AISystem.setFaction() nooit aangeroepen | Aanroep in Game.init() na remap |
| CRITICAL | Tertiair resource field mismatch | getTertiary() i.p.v. getGezelligheid() |
| HIGH | AI hero timer += 2 per tick (hero elke 0.08s) | Frame-based timer |
| HIGH | Victory/defeat race condition | Guard op required objectives > 0, 0.5s delay |
| MEDIUM | Attack wave spam (lastArmySize reset) | Verwijder erroneous reset |
| Verbetering | Details |
|---|---|
36 any types vervangen | NavMeshManager, ProductionSystem, DeathSystem, BuildSystem |
| Dead imports opgeruimd | 15 source files |
| Unused dependency verwijderd | yuka uit package.json |
| Non-overlapping upgrade ranges | Brabanders 10-13, Randstad 20-23, Limburgers 30-33, Belgen 40-43 |
| cleanup() method | Proper teardown event listeners, EventBus, HUD, meshes, ECS world |
| Idempotency guards | setupInput() en setupEventListeners() voorkomen dubbele registratie |
| -ansen purge | 40+ occurrences nep-dialect suffix verwijderd uit 12 bestanden |
Van gekleurde dozen tot een volledige RTS met 4 facties, 25 campaign missies, skeletal animatie en WarCraft-style controls.
| Phase | Wat | Status |
|---|---|---|
| 0. PRD | 22.000 regels game design, 6 sub-PRDs, 6 PoC docs | Klaar |
| 1. Core Engine | Three.js renderer, bitECS, terrein, camera, pathfinding | Klaar |
| 2. Economy | Resources, bouwen, unit productie, gather loop | Klaar |
| 3. Combat | Damage, projectiles, auto-aggro, auto-defend, death system | Klaar |
| 4. AI | Per-faction AI strategies, faction-aware build orders, hero training | Klaar |
| 5. Factions | 4 facties: Gezelligheid, Bureaucratie, Underground, Compromis | Klaar |
| 6. Assets | 22+ Meshy modellen (4 facties), concept art, faction-specific models | Klaar |
| 7. Heroes | 8 heroes (2 per factie), 12+ abilities, hero revival, AI hero training | Klaar |
| 8. Campaign 1-12 | Brabanders: 12 missies, van Reusel tot Het Gouden Worstenbroodje | Klaar |
| 9. UI/Flow | Main menu, faction select, tutorial, pause menu, drag-select, hotkeys | Klaar |
| 10. Visuals | Fog of war, shadows, particles, camera intro, post-processing | Klaar |
| 11. Muziek | 10 Suno tracks, dynamic battle intensity, 4 faction themes | Klaar |
| 12. Voices | 525+ ElevenLabs voice lines, 4 dialecten, per-unit persoonlijkheid | Klaar |
| 13. Hout & Tech Tree | 2e resource (hout), Lumber Camp, Blacksmith, 7 upgrades | Klaar |
| 14. 4-Faction System | factionData.ts (1461 LOC), GameConfig singleton, faction remap | Klaar |
| 15. Instanced Rendering | InstancedMesh, 6 draw calls, 768 units@60 FPS | Klaar |
| 16. Underground & Diplomacy | Tunnel-netwerk (Limburgers), Compromis-systeem (Belgen), Entity Factory | Klaar |
| 17. Balance Pass | Asymmetrisch: tanky Limburgers, glass cannon Belgen, expensive Randstad | Klaar |
| 18. All 4 Campaigns | +5 Limburgers, +3 Belgen, +5 Randstad = 25 missies totaal | Klaar |
| 19. Meshy 3D Models | 10 faction-specific modellen (Limburgers+Belgen), parallel batch gen | Klaar |
| 20. Controls & QoL | Ctrl groups, A-move, drag-select, auto-defend, camera intro, pause menu | Klaar |
| 21. Blender Auto-Rig | 17-bone armature, 7 anim sets, batch processing pipeline | Klaar |
| 22. Testing | 166 automated tests (Vitest), 6 test files, 232ms runtime | Klaar |
| 23. Hero Models | Hero-specifieke 3D modellen, 1.5x scale, ornate details | Volgende |
| 24. Dashboard Polish | Dashboard UI, remaining audit items, performance optimalisatie | Volgende |
| 25. Voice Recording | 506/551 remaining voice lines opnemen + sync | Volgende |
| 26. Deploy | Deploy naar theuws.com/games/reign-of-brabant/ | Volgende |
| 27. Skirmish Victory/Defeat | Skirmish mode victory/defeat condities, post-game stats | Planned |
| 28. Rally Points Visual | Visuele rally point indicators op gebouwen | Planned |
| 29. Multiplayer | Colyseus, invite links, ELO, leaderboard | Planned |
| 30. Klapper | Epic Replay, Brabants weer, AI commentator | Planned |
256x256 game units. Vlak met heuvels, bossen, vennen. 6 gold mines, 8-10 bomen-clusters, chokepoints via water.
Carnavalvierders vs Corporate Managers. Confetti vs spreadsheets. Worstenbroodjes vs PowerPoints.
WarCraft-style besturing met muis en toetsenbord. Alle essentials voor een RTS zijn geimplementeerd.
| Actie | Input | Effect |
|---|---|---|
| Selecteer unit | Linkermuisklik | Selecteert de aangeklikte unit |
| Multi-select | Klik + sleep (drag box) | Selecteert alle eigen units in de rechthoek |
| Same-type select | Ctrl + klik op unit | Selecteert alle units van hetzelfde type op het scherm |
| Beweeg / Gather | Rechtermuisklik op terrein/resource | Geselecteerde units bewegen naar locatie of gatheren resource |
| Aanvallen | Rechtermuisklik op vijand | Geselecteerde units vallen de vijand aan |
| Rally point | Rechtermuisklik met gebouw geselecteerd | Nieuw geproduceerde units lopen naar dit punt |
| Camera pan | Muis naar schermrand / Middle mouse drag | Camera beweegt in die richting |
| Camera zoom | Scrollwiel | In/uit zoomen |
| Toets | Actie | Details |
|---|---|---|
| Ctrl + 1-9 | Control group opslaan | Sla huidige selectie op als control group |
| 1-9 | Control group oproepen | Selecteer de opgeslagen groep. Dubbeltap centert camera. |
| A | Attack-move | Klik daarna op locatie: units bewegen erheen en vallen alles aan onderweg |
| ESC | Pause menu | Opent pause menu met hotkey referentie overlay |
| WASD / Pijltjes | Camera pan | Beweeg de camera |
| Q / W / E | Hero abilities | Activeer hero ability 1, 2, 3 |
| F11 | Fullscreen | Toggle fullscreen mode (tip getoond bij game start) |
| Actie | Methode | Details |
|---|---|---|
| Gebouw plaatsen | Klik build-knop in HUD, dan klik op terrein | Worker loopt naar locatie en begint bouwen |
| Unit produceren | Klik productie-knop in gebouw-panel | Unit wordt aan queue toegevoegd, progress bar zichtbaar |
| Rally point instellen | Rechtermuisklik met gebouw geselecteerd | Alle nieuw geproduceerde units lopen naar rally point |
Mobile ondersteuning is gepland voor een toekomstige versie. De huidige besturing is geoptimaliseerd voor desktop met muis en toetsenbord.
8 gespecialiseerde agents werkten parallel aan gedetailleerde specificaties. Elk document is direct implementeerbaar.
Colyseus op Mac mini M4, invite via link (geen account), ELO rating, reconnection, anti-cheat, Carnavalsmode party game.
38 missies, 4 campaigns + geheime Efteling campaign, survival/tower defense/boss rush, 28 easter eggs, 30+ achievements.
16 schermen, 39 settings, 14 error scenarios, 3 colorblind modes, 19-staps tutorial, 50 loading tips, 20 achievements.
516 voice line scripts, 80 SFX, 15 muziek tracks, 3D spatial audio, voice recording guide voor Richard.
bitECS met 29 systems, rendering pipeline, recast pathfinding, AI FSM, save/load, performance budgets, security.
Epic Replay met AI-commentator, echt Brabants weer in-game, seizoensevents, geheime Efteling-factie, GIF generator.
10 units, 10 buildings, underground tunnel-netwerk, tech tree, 156 voice lines in Limburgs dialect. Complete factie-specificatie.
9 units, 12 buildings, diplomatie/compromis mechanic, Chocolade-Overtuiging, 135 voice lines in Vlaams dialect.
De Raad van Brabant, De Slag om de A2 (384x384!), Het Gouden Worstenbroodje (3-fasen boss fight). Complete campaign finale.