PlayPendium
Bulwark · Voer voor de geest

Hoe een krijgsheer denkt

Speel je alleen, dan worden drie van de vier kastelen door een machine verdedigd. Elke computerkrijgsheer draait dezelfde korte lus — zoek de bal die te vrezen valt, raad waar hij je muur zal kruisen, schuif hem tegemoet — en het verschil tussen een makkie en een plaag komt neer op vier getallen.

Makkelijk · richtwiebel 0,18 railfracties afwijking
tegenover
Moeilijk · richtwiebel 0,015 bijna perfecte plaatsing

In het Engels geschreven en geredigeerd. Deze Nederlandse versie is met machinevertaling gemaakt; waar precisie ertoe doet, is het Engelse origineel leidend. Lees het origineel in het Engels →

01 · Kiezen wat je vreest

Niet elke bal is een bedreiging

De eerste taak van een krijgsheer, honderdtwintig keer per seconde, is triage. Met maximaal twee ballen los in de arena moet de AI beslissen welke zijn schild verdient. Hij geeft elke actieve, niet-vastgehouden bal een score op basis van de afstand tot zijn eigen koning, en trekt daar een vaste bonus van 250 eenheden af bij elke bal die daadwerkelijk op weg is naar de hoek; een bal die zich verwijdert wordt behandeld alsof hij 250 eenheden verder weg was dan in werkelijkheid. 1 De laagste score wint de aandacht van het schild.

Het resultaat is een verdediger die niet in paniek raakt van een bal die onschuldig voorbijzeilt, maar wel meteen aanklampt bij een bal die dichterbij is én op hem afkomt. Het is een grof model van wat een mens zonder nadenken doet: kijk naar wat op je afkomt, negeer wat wegtrekt. Het hele oordeel bestaat uit één inwendig product van de snelheid van de bal en de richting naar de koning; positief betekent “op mij gericht”, en dat is genoeg.

02 · Raden waar hij terechtkomt

De bal voorhouden op de rail

Zodra hij een bedreiging heeft gekozen, moet de krijgsheer bepalen waar op zijn diagonale rail hij moet staan. Hij lost niet het volledige stuiterpad op: geen spiegelingen natrekken, geen voorspellingen langs muren. Hij neemt de positie van de bal, duwt die een kort stukje vooruit langs zijn huidige snelheid (een voorsprong van 0,12 seconde), en projecteert dat toekomstige punt recht op de rail om een doelfractie tussen 0 en 1 te krijgen. 1

Dit is opzettelijk oppervlakkige voorspelling, en juist daarom is de AI te verslaan. Doordat hij maar een achtste seconde voorhoudt en nooit op een afketser anticipeert, laat een bal die via een muurstuiter aankomt hem in de luren lopen; hij legt zich vast op waar de bal nu heen wijst. Een mens die zijn schoten van de arenaranden laat stuiteren, buit precies deze blinde vlek uit. De machine reageert op het heden met een zweem van vooruitzien; ze plant niet.

De computer berekent de toekomst van de bal niet. Hij leunt een achtste seconde naar voren, richt zijn schild op waar de bal zou zijn als niets ertussen kwam, en laat alles wat ertussen komt jouw kans zijn.

03 · Drie niveaus, vier knoppen

Moeilijkheidsgraad is een tabel, geen herschrijving

De drie moeilijkheidsgraden delen één en dezelfde code. Wat tussen makkelijk, gemiddeld en moeilijk verandert, is een rij van vier instelgetallen. 1 Wiebel voegt willekeurige afwijking toe aan het doelpunt van het schild, zodat het richten van een makkelijke krijgsheer bijna een vijfde van zijn rail afdwaalt terwijl een moeilijke vrijwel exact is. Reactieafstand bepaalt hoe dichtbij een bal moet komen voordat de krijgsheer hem überhaupt volgt: een makkelijke negeert alles wat verder dan 420 eenheden van zijn koning is, iets minder dan de halve breedte van het bord; een moeilijke volgt over de hele arena. Vangkans is de kans dat hij een bal grijpt die dicht genoeg bij zijn schild komt om gevangen te worden. En richten-op-rivalen is één enkele schakelaar die bepaalt of de krijgsheer überhaupt aanvalt.

De insteltabel van de AI: het hele verschil tussen de niveaus
KnopMakkelijkGemiddeldMoeilijk
Richtwiebel (railfracties)0.180.070.015
Reactieafstand (eenheden)4207002,000
Vangkans0%25%55%
Richt op rivalen?neeneeja

Alle vier de waarden komen uit één kleine insteltabel in de spelengine van Bulwark, één rij per niveau. De reactieafstand op moeilijk staat genoteerd als tweemaal de breedte van de arena, en de arena is 1.000 eenheden in het vierkant, dus 2.000 eenheden betekent “altijd volgen”. 1

04 · Wanneer de machine aanvalt

De ene schakelaar die een moeilijke krijgsheer gevaarlijk maakt

Een makkelijke of gemiddelde krijgsheer vangt nooit met de bedoeling toe te slaan. Een makkelijke vangt helemaal nooit, en een gemiddelde slechts af en toe, zonder plan voor wat hij met de bal moet zodra hij hem eenmaal heeft. Zet je de schakelaar richten-op-rivalen om — het enige wat alleen het moeilijke niveau doet — dan houdt de AI op zuiver reactief te zijn. Zodra hij de bal vasthoudt, kijkt hij over het bord, kiest de zwaarst gehavende rivaal (die met de minste stenen over) en richt daarheen. 1

Hij doet dat zonder enige padvinding. Hij bemonstert elf kandidaatposities langs zijn eigen rail en reproduceert voor elk daarvan de loslaatberekening van de engine om te zien welke kant dat schot op zou vliegen, en houdt vervolgens de positie over waarvan de uitgaande vector het meest recht op het gekozen slachtoffer wijst. 1 Het is brute kracht over een handvol opties in plaats van slimheid, maar hij is er geduldig in: zodra hij een plek heeft gekozen, houdt de krijgsheer de bal vast tot het schild er daadwerkelijk heen is geschoven, en laat hij pas los als het is aangekomen of als hij zo lang heeft vastgehouden dat langer wachten meer zou kosten dan het schot waard is. De bedoeling is onmiskenbaar strategisch, precies wat een mens zou doen die op een makkelijke prooi jaagt. Het doelwit kiezen op “de minste stenen” richt drie onafhankelijke verdedigers op degene die toch al aan het verliezen is.

05 · Elke keer dezelfde krijgsheer

Toeval dat je opnieuw kunt afspelen

Alles wat een krijgsheer “willekeurig” doet — de wiebel in zijn richten, de kop-of-munt over wel of niet vangen — komt uit een generator met een seed: een compacte routine die bekendstaat als mulberry32 en die één startgetal omzet in een lange, herhaalbare stroom pseudowillekeurige waarden. 2 Geef hem dezelfde seed en hij levert voor altijd dezelfde reeks. Een live wedstrijd haalt zijn seed van de klok, zodat geen twee partijen hetzelfde beginnen, maar geef dezelfde seed terug en de wedstrijd verloopt weer precies zo: dezelfde lanceerhoeken, dezelfde wiebels, dezelfde vangsten.

Dat determinisme is geen cosmetisch detail. Het is wat het spel testbaar maakt — de testsuite speelt hele wedstrijden computer tegen computer vanaf een vaste seed en verwacht elke keer dezelfde uitkomst — en het is wat het mogelijk maakt de hele simulatie, inclusief de cursor van de generator, in JSON te verpakken en weer op te bouwen, zodat de host online zijn toestand kan uitzenden en elk van de andere spelers een identiek bord herbouwt. De krijgsheren voelen levend aan omdat hun fouten er menselijk uitzien; daaronder zijn hun “instincten” een korte rekenkundige recursie die iedereen tot het begin kan terugdraaien. Een machine die een kasteel bewaakt, blijkt maar een paar getallen en een stroom reproduceerbaar geluk nodig te hebben. 2

Sources & notes
  1. Bulwark game engine: the warlord AI. Threat scoring (distance from a ball to the king, minus a 250-unit bonus for inbound balls), the 0.12-second lead used to project the intercept point, the tuning table that holds jitter, react distance, catch chance and the aim-at-rivals switch for each tier, the “most wounded rival” target selection, and the eleven-sample search over release positions. Read from the game's own source.
  2. Bulwark game engine: the deterministic random generator, an implementation of mulberry32, the compact public-domain algorithm by Tommy Ettinger that maps a 32-bit seed to a repeatable stream. Its own comment notes that it seeds ball launches and AI jitter so that games are reproducible and testable, and it can save and restore its cursor so the state round-trips through JSON. Read from the game's own source.
    Algorithm origin: Tommy Ettinger, “Mulberry32 PRNG” (public domain).
Was this worth reading?
Play Bulwark
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Classic arcade games · © 2026