DevOps engineer. I keep telecom systems running for a living, and I'm building a systems-driven war sim in Godot the rest of the time.

Hobbies

  • CodingThe war sim, a Discord bot for the friend group, and a daily gun identification quiz.
  • AII use a lot of agentic AI, at work and on my own projects, to maximise efficiency and productivity without compromising on quality.
  • HistoryFrom the Scramble for Africa to Fallujah. WW1, WW2, Vietnam, and the Angolan and Rhodesian wars are the standouts.
  • Sport shootingFirst fired a gun in November 2023. Now it's range days and IPSC and defensive competitions.
  • GamingHearts of Iron IV, Bannerlord, War Thunder, Counter-Strike, No Man's Sky. Mostly things with a map and a supply line.
Kieran Rens

Commits

AugSepOctNovDecJanFebMarAprMayJunJul

510 commits in the last year, all in private repos. Updates weekly.

Personal projects

Under the Flares

Vietnam, 1968. You command a firebase through one bad stretch of nights, from a bunker, off a paper map that only shows what your men have reported.

Solo project, built in Godot. Every system is custom-built, including the night sim, intel model, dialogue engine, audio generation, and soldier generation. Inspired by Full Metal Jacket, Apocalypse Now, and We Were Soldiers.

Built as a passion project, the game I wish other games would be. Riding the line between historical authenticity and emergent gameplay is a unique challenge.

The map table mid-fight, tracers and speech pinned to it
The after action report sheet
The dawn walk, graves and the campfire
A conversation, the typewriter reply half landed

The map

The map only shows what your men have reported, so it is always a little out of date and sometimes wrong. Positions that go quiet fade out. Fog cuts the counts down. Firing a flare gets you 60 seconds of real information over one lane, and it helps the enemy aim too.

Dialogue

All the words live in data files instead of code. A line can require a personality, a trait, or a memory the soldier has to hold before he is allowed to say it, so the same question gets a different answer depending on who is standing in front of you. I add dialogue to the game by adding a file.

The director

A director paces each night off what is actually happening in the fight, inspired by Left 4 Dead's director and RimWorld's storyteller systems. There is no hidden timer. Damage comes from the tracers you can see on the map, and runs are seeded, so the same seed plays out the same way twice.

SlothBot

A Discord bot for the friend group's server. Music playback, birthdays, a quote archive, and the daily Gundle post, with everything durable kept in SQLite.

Node.js and discord.js, running around the clock.

Built because of the limitations and frustrations of vanilla Discord. I wanted to customise the experience for the server, and it's just fun to build and use.

Basics

  • /helpList all available commands and their parameters/help
  • /pingCheck if SlothBot is awake/ping
  • /avatarGet a user's profile picture/avatar [user]

Utility

  • /quoteSave a quote to the quote box/quote <user> <text> [prefix] [suffix] [date]
  • /grabpostFetch images or video from an X, Instagram, Facebook, TikTok, or Reddit post/grabpost <url> [format] [source]
  • /rollRoll some dice/roll <dice>
  • /timerSet a countdown timer/timer <duration> <message>
  • /mixteamsShuffle and split everyone in your voice channel into two teams/mixteams [channel]
  • /rerollstatusPick a new random status from the pool/rerollstatus [status]

Music playback

  • /playPlay a song or URL in your voice channel/play <query>
  • /sharesongShow off a song or performance without queueing it/sharesong <query>
  • /queueShow the current music queue/queue
  • /nowplayingShow the current song with its source link/nowplaying
  • /radioStream internet radio in your voice channel/radio play <query> · /radio stop

Music controls

  • /pausePause the current song/pause
  • /resumeResume paused playback/resume
  • /skipSkip the current song/skip
  • /stopStop the music/stop
  • /leaveDisconnect from the voice channel/leave
  • /removeRemove a song from the upcoming queue/remove <position>
  • /shuffleShuffle the upcoming queue/shuffle
  • /moveMove an upcoming song to a different queue position/move <from> <to>
  • /loopSet the queue loop mode/loop <off|song|queue>

Gundle

  • /gundleIdentify the firearm! The great game of guns/gundle play · leaderboard · stats · badges · notify

Server

  • /birthdayManage birthdays/birthday set · edit · list
  • /releasePost the latest changelog entry to this channel/release

Gundle

A daily firearm identification quiz in the browser. One gun, four options, and the image fights back: zoomed, flipped, rotated, or blurred depending on the difficulty you pick.

Vue 3, no backend. SlothBot posts the day's round to the server every morning.