kyle kukshtel makes games and tools and tools that make games. he specializes in exploring the intersection of games, new media, art, film, and| kylekukshtel.com
Using LLMs to implement workflow enhancements you wouldn't have attempted otherwise| kylekukshtel.com
Stringing together lots of tools to turn a podcast into a video screensaver for Youtube| kylekukshtel.com
Exploring a future of AAA game development focused around controlling diffusion models| kylekukshtel.com
Seeing how far current LLMs can get with designing and programming a complex turn-based strategy game| kylekukshtel.com
On using Cline and Claude Code to release a major update to production software| kylekukshtel.com
When I set out to make Zinc I had a few goals in mind. A large portion of those goals were around engine ergonomics and“making happy developers,” but one very specific technical goal was“make it work on the web”. I didn’t know how to do this. I didn’t even really know how to approach the problem at the time, or even really understand how web builds would (or even“do” for engines that support it) work. I understand how most JavaScript game frameworks work — they wrap WebGL an...| k-hole
I listen to a lot of game development-flavored podcasts, and one thing that has really stood out to me for a long time was how basically none of the podcasts were actually about development. There are plenty dedicated to creator interviews that discuss inspiration, design, etc., but practically none about the actual specifics of programming games. Beyond that, I’ve had my own pet interest in the concept of data tooling in games. So much so that I have built my own data tool to address what ...| k-hole
I’ve been unsatisfied with how entity creation works in Dinghy (now renamed“Zinc”) for a while. I said as much a few months ago on the forums and I’ve been mulling it over ever since. Specifically, the more you lean into using ECS, the more the requirements around interfacing with it tend to grow like a virus in your codebase. Especially for“real” ECSs where you shouldn’t ever really be passing around references to components, having to use things like ref a lot to just do somet...| k-hole
I recently needed to send a friend some images in a way that could be referred to later/added to. Images to create a“mood”. A“moodboard” if you will. Here were my options: Make a folder in Dropbox/drive and manage the sharing permissions on the folder to be public. Use a design tool like Figma or Miro to throw lots of images into and share a share link with him Use a“mood boarding” tool like Milanote and put the images in there Use a“social gallery” site like are.na and make a...| k-hole
I’ve been really interested in what the record type (and its accompanying syntax) provides in C# and have been musing a bit on an idea that started with some tooltip explorations a while ago. Specifically something with the self-described pattern of Immutable“Prefabs” Mutated With Specific Data. The idea is that you create a base record type that is some pseudo-generic type, and then provide static versions of that type that“define” some base functionality. You then compose those ty...| k-hole
I’m starting up making a small game with Dinghy to dogfood some of its concepts, and part of this is to actually try and use the ECS system instead of just programming games the old way. I actually started trying to do stuff the old way and quickly started to find myself in event callback hell and thought“I think I should try and actually use ECS”. One of the first things I ran into was managing collision. Dinghy provides simple entity callbacks for basic collision handling, but managin...| k-hole
Got a quick one for you today. I’ve encountered a thing in the past where, when OSX/macOS downloads an archive file, it will automatically extract it or do weird things with the download such that the downloaded file doesn’t actually match what you downloaded from a server. Debugging this is a bit of a pain, and what to do varies on a case-by-case basis of what service you’re downloading from and what you’re trying to do with your downloaded file. My recent similar pain comes from try...| k-hole
While working on Dinghy, I’ve got a general flow that works. Namely, that there is a core .csproj Dinghy.Core (Library Project) that is the engine code itself, and there is another project, Dinghy.Sandbox (Executable Project), that references Dinghy.Core via a Project Reference. The Sandbox project is meant to mock out the end-user experience of Dinghy and give me a general testbed for Dinghy features. Great. Additionally, the project reference to Core allows me to make changes in Core and ...| k-hole
This will be a short one because I need to get back to other things, BUT I wanted to make a small post here to say that I just released a the first version of Luau.NET. I had been interested in Luau since the first post announcing that it was going open source. I’ve never played Roblox or experimented with its creator tools, so my interest in it was less in that, but more that the language is currently secretly a major force in programming language learning for younger kids/teens, and so th...| k-hole
I wanted to capture some thoughts and impressions on Lorcana after some plays of it a few days ago, especially in relation to it’s obvious competitor/inspiration, Magic: The Gathering. I played three games (I was the Sleeping Beauty/Simba set vs. the Cruella/Aladdin set) over the course of an hour or two, so these impressions come from some plays right after learning. Theme -> Mechanics -> Theme So, first! Obviously one of the main appeals of the game, and why I picked it up, was the theme...| k-hole
It is with distinct pleasure that I can say that the ambitious tactical-strategy game my team has been working on for the past few years (and me for nearly a decade) has finally released into 1.0 from Early Access. For those who don’t know, Cantata is a game that combines elements of 4X, Grand Strategy, Tactics, Automation, and RTS games into something we call a“Grand Tactics” game. Think something like Total War, but with no distinction between the“tactical” and“strategic” view...| k-hole
Apropos of nothing I found myself circling the painter Francis Bacon today in more ways than one. It started a bit with discovering this piece on him: What would have happened to Bacon’s career had he been subscribed to nine podcasts? Had he been posting his work to Instagram, and Facebook, and Twitter? Pressure would have leaked from the pressure cooker and the violence of his work would have dissipated. We can debate how much the violence would dissipate, but I’m utterly convinced that ...| k-hole
I’ve been thinking a lot recently about Creative AI tooling and its intersections with game development, and mostly how I think a lot of the applications (and discussions) of it right now are naïve. This really hit when listening to a recent episode of the Interdependence podcast with Runway ML founder Cristóbal Valenzuela. In the podcast they talk deeply about mental models around the current creative AI moment, and what’s possible. But more specifically, they talk about how the thinki...| k-hole
I’ve been recently picking up work on Dinghy again and as part of it have been looking at different approaches for doing bindings. Previously I was using Mono’s CppSharp to generate bindings for Sokol, which“worked” but also generated a ton of cruft around function calls. The main issue was that PInvoking to the extern methods used a lot of marshalling, so they went through great pains to track pointer references to make things more GC proof. So you’d get a lot of functions with a l...| k-hole
UPDATE: New fix at the end of the post I had a weird issue in FMOD recently that I was struggling to find any information on so just capturing it here in hopes to help other people that run into something similar. I recently set up callbacks in Unity for FMOD event instances. The code was much simpler that I thought it would be, and consisted of basically just creating a delegate of the correct type and passing that to the event instance. Here’s the full code: FMOD.Studio.EVENT_CALLBACK FMO...| k-hole
Since last year I’ve been thinking about how to handle tooltips in games. For Cantata, we have a procedural tooltip system. This means that, instead of hand creating every possible tooltip and toggling it on/off when the player mouses over something, we have no handcrafted tooltips and instead build them procedurally from components at runtime. This has a ton of benefits, but one of the pain points has always been stuff like this: Though we don’t have explicit Gameobject tooltips, each to...| k-hole
It’s no secret that I’m intothe new AI stuff. Not only that, but I think we’re in a real“adapt or die” moment. It’s not obviously that dire (yet), but the advances the field made in 2022 have definitely got me thinking about how to rearticulate my own creative practice moving forward, and doing so in such a way as to incorporate AI collaborators throughout. To quote Pentiment,“you can’t roll back the wheel of time”. At the same time, my own practice is at a bit of a crossroa...| k-hole
I’ve been actively using Midjourney since I wrote that post back in June. The experience has been staggering in how so clearly there is my creative process before AI Art and after AI Art. The thing is, you’ll probably never see anything I generate (besides blog header images). This is maybe counter to a lot of the“protests” around AI Art. Roughly stated I think there is a (somewhat) legitimate worry about the displacing of artists through image generators like Midjourney, StableDiffus...| k-hole
Exploring what to do when you're trying to find answers to hard technical problems on the internet, and all the usual options aren't working.| kylekukshtel.com
This is a bit of meta post as this post isn’t actually on my blog, but I wrote about the recent Triforce% run over on Dirt. It’s 2500 words musing on the role of runners and how they relate to the games they play, and how the Triforce% run challenges and expands common speedrunning aims. It’s also about nostalgia, which seems like its becoming a theme for me. Read it here.| k-hole
Writing for TANK magazine in 2019, Josh Citarella mused on how WoW Classic tied into Mark Fischer’s idea of“the slow cancellation of the future” (aka“where are my hoverboards”) — its release acting as further evidence of the collapsing gap of space between cultural time (cultural cycles) and nostalgia. I tend to agree with his position here, and have adopted a refrain I like to throw around now —“culture has stopped”. Cirtrella points to the collapsing gap between items that...| k-hole
The blog has been a little quiet recently, and there’s been two reasons for that, one major and one minor. The major reason is that the company I run is gearing up to release Cantata in less than two months (!) and the other is that I’ve been laptop-less for nearly ~6 months. It sounds silly but I feel I’m best able to write on a laptop. Desktops don’t cut it (feel too“serious”), and though I have an iPad, something about the form factor of a laptop just feels like perfectly match...| k-hole