So this is a Vernum 4 greed and glory and I'll show you just my u my development environment. Now um this is all basically directly expanded code from the first editor I wrote for myself in '94. It's way way nicer and fancier now because in 1994, you know, I had a 640x480 monitor and '94 and that was a huge monitor for the time. So the the world's changed completely. So like it's not teensy anymore. To the left is the terrain area, which is where I draw. And so now, just for the heck of it, I'm going to put a pile of of ore there. And I'm going to delete that. Down here is the information about the section, the information about what I'm selecting. So, right, I'm just So, this is like the information about the town, what color the walls are. This is what the name of the script for the town is. Um, and then here's a door, and here's a wall. They go over to the right. Here's the buttons for editing things which are based on the button designs of a program called ClariS Works which was the main
Macintosh text editor and image editor in 1994. Below here's a little mini map for moving around quickly. And then then there's the different instances in the game. There's the these are the floor types. These are the terrain types. These are not interact withable. They just sit there and look pretty. Over here is the objects and I can mouse wheel up and down. And these are things that you can interact with like books and stuff like that. But there also stuff I like to ship shift around in the spaces like like chairs. And if I want to place a item, I have pull down menus up here. And if I want to place a creature, there's pull down menus up here. Now, oh my word, this is going to look really unwieldly and slow, but I have 87 million keyboard shortcuts and tricks and copy paste and stuff like that to be able to edit quickly. So, I have been like smooth. It's a very archaic seeming thing, but because I've been working with it for 30 years and tweaking it, I
can create content very quickly with this. Yeah. Where I get into trouble is not once, but twice I have written scenario editor systems. One was called Blades of Exile and one was called Blades of a Vernum, kind of a remaster where I could let users make their own scenarios. They'd send them to me and I'd make them available on my website. The first one came out in 1998 and it really caught on. Like a lot of really creative, hardworking people made scenarios and they're still available on my website. Like of exile is open source now and there's a guy out there who's working really hard to make it nice and polished, which is which is super cool. Um, but the problem is that like it's really hard making a system that other people can use, especially when you're used to something really wonky with shortcuts only. I understand. So, making it a scenario editor was an enormous amount of work. And um I just I never wanted to do it again. So, I stopped I stopped doing that cuz it was very much the opposite of fun. Here is Hey, let me ask a question if you don't mind. Um, that drop down menu where you can add
characters and stuff. Yeah. Is that like it's adding sprites or is it adding uh classes? It is. Okay. So, there's 256. Sorry, there's around 300 creature types. And so, I'm going to pick, let me pick a monster. I'm going to pick a brain rat. And I'll select that. I'll click here. Boom. Now, at this location in the game is a hostile brain rat. I'm go to its attitude and I'm going to change it. Now, it's friendly. Now, the outline is blue and it says friendly here. That means it's a friendly brain rat. It'll fight on your side. Um, and then I can change its facing. I have to like the camera is blocking the the my setup is weird. And then there's all sorts of things you can set for it. These are memory cells which are values that the script for the creature can reach. So, for example, suppose I want it to never be able to move. I select this and I would set this to two. Now when the script for this creature is loaded when you enter the town um the
script will say hey what value is in memory cell zero and then it'll get a two and it'll say oh that means the creature never moves. Um so that's an example and um why does it why does it mean that the creature never moves? Because that's what um that's what the script knows it means. Um let me let me bring up I got you. Oh man. So this is like a really this is like Jeff's world and yep. So this there's no way I would understand this jumping into this. Exactly. So when I made Blades of a Vernum, I made it with a really with this scripting system and it's really powerful and it was but but you have to know how to program and most people don't where the Blades of Exiles did not have a scripting system. It was a very simple system of just placing walls and putting monsters and very simple special encounters and people learned it very easily, made tons and tons of content. Now to to do what I do, it has to be complicated. I just don't want to do editors for it anymore. So this is a script using a scripting edger written by me. You'll see at the top it says basic npc.ext. And so this is the default if I don't
specialize a script that is a script a creature has. So now when this creature is created it runs the code in an it state. And you'll note it says if get memory cell 0 equals z. So when it says so this is run inside the game. The game loads this text parses it and follows these directions. So the game says okay I've entered a town. There's a brain rat here. What do I need to do with it when I initialize it? So, it goes and it runs this this code and it says so look at get memory cell zero which is here. What's the value? Two. Oh, if it's equal to two, set walk speed to zero. So, that is how all of the steps for me to make a creature permanently immobile. Is there a dictionary available or like a documentation for this so you can reference it or is it all in your head? a dictionary. Okay. So now if I'm going to go into my folder, um so this document is called the Vernon for scripting guide and it lists all of the script calls.
You can see that there are a lot of them. Um for example, set new ability. So I can give this creature a customized ability. Um set scaling. So I can set the creature size in the engine. Like I can make it the icon 50% smaller. Um, for if if for the script I want the creature to depend act differently depend on where the zone it is, it can check for its coordinates. Um, uh, if a script is an object that's a trap, there's a damage nearby function that I can use with, if I wanted to, I could say make a chest and give the chest a script and say when you open it, when the open section is called, the chest just kills everyone nearby and I could use a damaged nearby thing. That's how I program traps. Um, you see there's a lot of it. Now, you will note that none of this is commented. There is no documentation. That is because, and this is going to be one of those cute little time-saving things since I'm the only person ever works with this code, the fastest, most efficient way for me to find out what any of these calls do is to just look at
the code. Yep. Um, and no, it makes sense. Seriously, I I I've created a bunch of GDDs and reference documents and I always end up spending too much time making them and then I don't even reference them. I'm just trying to be professional, but I don't even use them, you know? Yeah. So, no, I am a fiend for commenting because this is my program. It's like 50 60 70,000 lines and very frequently I will get myself into a position where I have to go back and comprehend and tweak a very complicated piece of code I have not looked at in 15 years. This is my life. So how do I deal with this? So this is the hairiest command in any of my games and it's the do move. it is the a creature is about to move in the game and in a Vernum 4 it's it's sort of a stepbased movement um so it's a lot simpler my Gene Forge games have animated movement and it's a
lot more complicated but the reason I'm bringing this up is to show this is every creature is in the um is in the class active creature data type um I'll show you something hilarious in a second and this is do move and this is you know after all the variables have set every turn I call do move for every creature and then they see if they have a goal and then they move towards it. The reason I'm showing this is to show you my commenting. So this is describes what it is. It's very brief. So you will note comment comment comment comment. So I'm not don't go crazy with the commenting like this is the one comment for this big old chunk of code. But I don't go too you don't want to have too much commenting because you want to be able to actually see the code. But you want to have enough comments so that if every for every seven or eight lines of code, there's just a very brief sentence saying this is what you're looking at here. Um there's a bunch of it. This is like something commented out because it's
something that is not in this iteration of the game engine, but I might bring it back in the next iteration. And is all is all of this uh Jeff is all this handwritten code or are you using any kind of AI stuff or anything like that? So lately in every once in a while in advertisements I um I see someone brag that our that their game is is handmade or everything is handplaced and that's always vexed me because it's not like I'm I'm manipulating the editor with my nose or slapping at the keyboard with my flippers. Um, that's a that's a that complete side point. Just had to get that off my chest. All handcoded. Yeah, I just wrote it all. Um, I don't obviously I'm never going to use AI for coding because Jesus Christ, why would I do that? Um, that's just going to make that's every every minute I save on that is going to be one hour of debugging. Um, I'm not worried about AI taking my job soon because this is extremely finicky bespoke code. It's a complicated
game. It's uh you know I know like looks super crude and super low budget. Even a super crude super super low budget turn-based role playing game is a going to be a very hairy chunk of code. Um so yeah and so this is the movement code. You can see there's a lot of it and you know there's a sprinkle of sprinkle of code throughout. There's sometimes something that's all commented out because I want to remember that that's something I need to know a different sort of engine and so on. So this is actually very short for a movement call. The the one in Gene Forge where it's animated movement is is way longer than this. And this is C++, right? Correct. Uh but it's very simple C++. C++ is a language that gives you all the rope you need to hang yourself. You can make things incredibly complicated. And me, I make things as simple as possible because I'm going to have to understand I can't dump it on myself. I have to understand it later. So now I'm going back to this is the oar.cpp. that. So, this is the um file in over here is all of the files in the program. This is the
file that handles creatures. And so, you'll notice this is, you know, I'm going to you're going to hear the blood cells popping of of professional programmers all over the planet. It's all externs of all like this is the game data, this is the character data, this is the object data, this is projected data. Everything is external. Everything is global. There is a tiny bit of I do that too because why wouldn't I? It's just me. Who am I defending myself from? If I hurt myself, I have none but myself to blame. So I could put accessor functions for all this nonsense, but it would create an enormous amount of code bloat in various ways and save me absolutely nothing. How is the what's the what's the editor's code? Uh same thing. It's it's just it is a separate it is a separate C++ program. Um okay, obviously way way way smaller. It's a it's compared to the main game the editor code is baby. Uh
but but it's still it's not complicated at all or at least how how do you edit that? Is is it the same thing? You open it up in Xcode and then open it up Xcode make the changes build it. Can I can we see the code for the editor? Okay. And this is the editor and just compare the number of the files. Sorry, let me rearrange the order and you will see this is how many files are in the program and this is how many files are in the editor. And in in addition there are fewer files and they are much much shorter. Um much less complicated. Yes. Yes. Which which is good you know. And um here's the what's the what's the um file structure like I have no idea how an editor is written. No idea. Um what's like the first Okay, so let me bring up how would I get to that quickly? So this is
I have two this is ah file. This is all my headers. This is all my data structures. Again, nothing fancymancy here. I'm importing all of the SDL libraries at the very beginning. There's a um you see a billion defines. I love using hashtag defines. If you have if you want the editor, right, or something like that, then I strongly suggest not the editor, right? What? Oh, it's the same file. Some of the files are completely shared between the two. So, if I edit this file here, it will be edited for the editor too. like this file is shared between the editor and the main game just a lot less mus and fuss. Yeah. So, so here's the this is what these are the two basic location structures. One is for gamerect um it's which which is that the rectangles are stored as ins longs. Why not longs? Because longs take a different number of bytes on Windows and Macintosh. So you can that's a that's a
way that things can explode when you're I don't know what a long is. It's an eight. On a Windows, it is an a four byte integer. On Macintosh, it is an 8 byt integer. Okay. Oh, so you can't go over four. Uh window on Windows you can go over four, but you have to do I can't remember off the top of my head the name of an 8 byt or a 16 byt integer on Windows, but it totally exists. There's all sorts of crazy stuff you can do. Um okay, so here is something you change in the editor. So suppose an object for example an object is a chair. Suppose I place a chair in the game. Then it's going to look for um I have a list of placed objects. It's an array and it would find a free point in the array and it would place the chair. It would initialize the type which is there's a list of possible objects and the chair has one of the number say the chair is maybe object one or 58 and the list of objects that can possibly exist. Put that here. It would be assigned an ID, which is an unique
number that identifies every object that I use for accessing it in in scripts. There's the location where it starts in the game, and this is its own type because I have to remember there's two floors in every dungeon, so I have to remember what floor it's on and where it's positioned. The name of its script, and these are all things I can edit. I'm going to select since I said chair. First, I'm going to delete this mouse since I don't want it. And then I've just noticed okay here's a chair. So object chair it's object 105. So in the list of objects in the section this is object number 105. It has a unique ID which is this. It is object type 158. So these are all the objects and you can see I selected here object 162. So here this is object 158. So this is this sort of chair. Let's go back. This is the script. It has the default script. Chairs don't do anything. So so the default script will be a null script. It'll be just empty. And then there's six memory cells. If it gets a script, these can be accessed by the script to tell you special things about how the
object behaves. And finally, every object has this destroyed or not destroyed state, which means if destroyed, there's nothing fancy. It just means it looks all smashed up. So, can I ask you a question? Sure. Um, how does it look in in play mode when it's when you've built it? Does it look like that? Oh, yeah. That's a very good question. Let me run the game. Yes. That's what I really want to know is like what I'm looking at now is a grid of information. Right. Okay. What I'm going to do is I'm going to open the game. This is choice pres um exclusive content. Totally different. Yeah. Okay. So now Oh my god. Yeah. It's like I should show what the game looks like. So I'm in world coordinate. I'm I'm pointing it at my with my finger like a very smart person. Now, so the cur cursor here shows the coordinate of this location in the world. It's 14525. So, I'm gonna go in here. I'm going to
bring up the deep de my debug. This looks really pretty, Jess. Right. Port. Thank you. 140. And it should teleport me to that spot. There it here we are. Okay. So, it's it's a little dark cuz we don't have a torch lit, but you see. So over here you can see there's two ovens. Here are the two ovens in the game. What? Here is the chair we were just looking at. Here is how that chair looks when we're in the game. Now note, you're probably note this is sort of an isometric 3D view. This is a very straight graph paper like 2D view. How do I take what is this and process it in my mind to get an idea of what it's going to look like when it's drawn in more 3D? And the answer is that I have been doing this for 30 years and have gone slightly mad. I have in I have suffered a sort of low-level brain damage that lets me look at this
nonsense and this is a mess. It's like you see an oven takes up four spaces. It just draws four little ovens. But this is like, so here's some rubble on the ground. The rubble on the ground in here looks like this. The world's kind of dark. I apologize. So I have trans I when I look at this, it only takes a moment to trans to look at this and imagine what it will look like here because I've been making these isometric games with this engine so long that I'm used to it. But if I wrote an editor system like my old Blades of Blades of Exile games, people who' be using this editor, and I experienced this when I did Blades of Exile, Blades of Aver had a really hard time. So they actually I open sourced everything for the editor and people wrote special dice 3D editors where when they edited it here. Oh, that's great. And I considered doing that, but I didn't because I'm so used to this after working. Why not? for so many I've worked on this for so many years. It wouldn't be faster for me. So,
what's the how does it how is the lighting handled, Jeff? Um, incredibly simply, it's um it just the game is capable of casting a ray in in engine from a location to a location and then it looks for a lighting source. So, you can see there is a lantern here. Um, hell, look, it's nice new human art that our my Kickstarter backers helped me pay for. Bro, there is this is so pretty. Like there's something beautifully retro obviously about it. Yeah, it looks I'm actually really happy with how it looks. I've spent a fair amount of time. There's a lot of wonkiness in the previous games of inconsistencies in scale and coloring that made it look always a tiny bit off and now it looks a lot better and and so it's enough detail that it looks attractive but enough not detail that it gives your imagination room to work. Mhm. Um, so this is a lamp, a lantern. It's placed in the game. I'll I'll scroll down a little bit here. And you can see here is that lantern. And when
you load this section, the script will say the lantern sends light out to a readers about eight spaces. So, it's going to cast rays out from the lantern. And you can see it tries to do a ray from the lantern to this spot. This wall blocks it, which is why the space is still dark. But here the it's free so it can see it. And now I'm going to run I'll run outside really quick because it's all one giant continuous world text description that we don't need to see because reading is lame. And now I've left town. I'm out in the world. And this is very similar to Ultima 7 in that it's one seamless world. I walked out of town and now I'm in the wilderness. And look, there's like this looks like it's probably a ruin cuz Oh, it's it's lockpicking. I have a little lockpicking thing. You can see there's rocks everywhere. I'm not 100% happy with how this train looks. I don't like mixing these two rocks together. I normally try to put these trees on a
floor that looks less sandy cuz they look slightly odd. I'm not really happy with this train, but this terrain is at about 80% into the game and nobody is going to see it. So, so this terrain gets to look a tiny bit wonky. But if I go back to this is near the front of the game. I mean, it's not terrible. It's just to my designer's eye, it looks strange. Um, hey. Yeah. I I don't I don't I don't know if it looks I I think I kind of like it, but I I have a question, which is um Sure. It seems like you've built a system that is kind of locked tight from bugs. like just because you've been built you've built it for 15 years and you've got all these components and effectively prefabs. I don't know a better way to say it. It seems like you've just got a bunch of stuff that's been
that could just be used ever in new games, reused in new games, and so they're just going to work, right? Yeah. It's it's the my process has gotten very clean. The first 10-15 years beta testing and bug fixing was a nightmare. But part of it is that I managed to come up but it's gotten better because for I've for two reasons. One I there are some things that are just finished and work like the scripting engine. The scripts just work now. And part of is that I'm a better programmer. I've I like when I'm coding sometimes I will start working on something and my spider senses start tingling and I'm like I have to do this very carefully and I have to watch out for this mistake because I remember very well in 2005 I made this mistake and it cost me days of debugging and so I you know that's that and and thus you know I I learn and so it gets better. Beta testing is still a hassle, but it's far less of a hassle than it was before. And also, my beta
testers are super experienced and they've learned. They know the sort of mistake when I do make a mistake, they know what mistake is, that mistake is going to look like and then they can help me spot it and debug it together. Can you can you show us the art in Photoshop? Uh, let me see. I think Photoshop might be I can launch Photoshop. My my Mac really needs to be replaced. And I hope everyone's enjoying my pores. Um the Yeah, the LA I think the last thing to sort of wrap up here is I want to see how this art looks. Like it looks beautiful in it. This very clean isometric. Everything's the same size. I'm curious how you handle the the the sizes of the canvases in Photoshop. Is it all very precisely sized? Um, I've been working on screenshots. Okay, let's bring up the items. Okay, look look at the first the spinning spinning beach balls got to go away. So, you get So, you you hire out artists and they create
these sheets for you or I have several freelance artists and I license like there are a billion licensable art resources on stores online and it's and and a lot of it is icons I've made before. So what I do at the beginning of each game is I carefully plan. You know, I got a budget and art art is expensive. Bespoke art costs a lot of money. So I'm really careful to make sure before I get something bespoke, it has to be bespoke. So for example, my human art system is getting completely redone. So it's really the guy who's doing it is super good. And you can see this is an overlay like a paper doll for humans who are wearing peasant clothes. Can you zoom in for me? Sure. And there's six animation steps and eight facings. So 48 icons. And this is for the norm. You can see if you look at the top, it's the normal I it's is PE 01 peasantware normal idle. So if when the when a human peasant is in male is in because is in its idle
state, it'll play a sixstep animation. And this is the clothing. Now I'm going to bring up and this is something known I don't think anyone's ever seen is the is the items. Um, so these are all So there's items and objects. Items objects are things that sit on the ground like chairs and chests. Items are things you have in your inventory. So this is all of the item art that is in the game over here. Let me Sorry, don't zoom in. So here's a bunch of boots. Here's a bunch of belts. Here's a bunch of helmets. So there is a great deal of wonkiness in my item art. It comes from a million different sources. There is a lot of inconsistency of style. Little by little, as time goes on, I'm trying to bring it to a better, more unified style, but as it is, you know, if it's better than good, it's it's better than good, it's good enough. So, here's a ton of weapons. This is what it looks. This here is what it looks like on the ground
in the game. And here, the bigger version, is what it looks like in your inventory. So, I'm going to bring up this guy's inventory. Here is, let's say, a a Here's a potion. Okay. So, right, this is what it looks like in the inventory. I'm going to take it, move it to the ground, and you you couldn't really see it, but there's a cute little animation. And though, there's what it looks like on the ground. And then here's a billion little these are all incidental items. These are not really the only there's a ton of items where the only reason they are there is to is environmental storytelling and to flesh out the world. It's a very like Ultima 7 if you're interested in ancient history or Boulders Gate 3. You know, Boulders Skate 3, the world's full of boxes of crap, but it it's not it's it's doesn't have an ingame like this net here. This does not have an in-game purpose. You can't pick it up and catch fish. Though that would be cool if it was a usable item. If you were by water, you could get a fish. That would be neat. And it would take almost no time to program. I'm tired. So tired. But um but
if I put nets and a barrel of fish by a river, it tells you something about the world. It doesn't mean anything, but sure it does things. You know, you can that is the art of the thing. This game is full of tons and tons of stuff that has no gameplay value what it's do, but it has emotional value. is creating the image in your head of what this world is like. Yeah, that's especially important with these kind of isometric retro games where you're trying to do world building and do it in pretty much the only way you can. You either have to describe it with the text of the dialogue or you have to put something into the world. Yeah. And and so, you know, it's it's part of, you know, I'm I'm trying to get, you know, every drop of juice out of the lemon. I'm leveraging every possible thing I have as much as I have to make this world feel like a place cuz that's the product I sell. I'm selling
the ability to wander around in a in a in a as realized a world as I can make. Yeah. To um you know to create the purpose of the game is to create an emotional of any video game is to create feelings in someone to create an emotional state in another human being. Um Dark Souls does this in one way. My game does another way. Your guy game does it in another way. But that's what art does. You're when you're making art, you're trying to edit someone's brain and taking something in your brain and move it to theirs. And so every little one of these details when I put in a So when I you open someone's dresser and you find a mirror and a pot of makeup and a comb, that has an effect on your brain. Does it have gameplay value? Yes and no. You know, I mean, it changes the way you see the world. So, it changes the way you're going to interact with the world. That's gameplay value in a sense. So, let me
ask you this one final question here and then we'll wrap up because I got to run in in seven minutes. I can hear my kids about to come in my office. They always come in right at 5:30. I understand completely. One final question. What is different about how you're making this game than the games made in the '9s like this? Different in what sense? I guess what I'm asking is is this is this about as pure as it gets when it comes to like how games were made in the '90s? I think so. I mean, a lot Okay. So, games in the '9s were ramping up to a modern setting, but at the same time, in the '9s, a huge setting, a AAA setting setting was like 20, 30, 40 people. I worked briefly on Microsoft on a on a um on a major big budget product, but every person who worked on it could fit in a small room. You know, everyone knew
everyone on a first-name basis. Like, you know, Roller Coaster Tycoon, have you heard of the story of the creation of that game? Oh, no, I haven't. It it was one guy and he made this entire game and it's just it's an incredible an incredible masterpiece that game and it's a lot. It's isometric. It's tile based. And I'm curious, it's like, are you making games in 2025 the same way a game like Roller Coaster Tycoon was made, you know, or like the original Age of Empires games? I honestly I know so little about the world and how things work in the world that I honestly I I honestly couldn't say. All I know is that, you know, since I'm alone in this room fighting with my computer, it is my process is incredibly individual and no one else will have a process like mine. But there are so many massive hits. They're just one or two person teams. Like we just had Bellatro and just Botro and Stardew Valley or Undertale. You
know these are one man bands that you know they have get help from other people of course but these are very much single a single person's vision and there will always as long as one person is able to master the tools to make these things you're always going to have lone tinkerers lone japetto lurking in their homes you know making making these making these delightful strange little toys. Yeah, I think um when I see this, I was thinking about how you market this and I was thinking well and you know how to market your games, but in my head I was like he Jeff needs to tell people that this is all like it's like a time capsule. It's it's it's like a a handcrafted '90s game that was made in 2025, which I think is a really cool selling point. But then I realized when I look at it, it's obvious
that it has that it just looks like, dude, it looks like you could pop a CD in from the '9s and play this game. Yep. It has that in level of integrity. And I think that's really really cool that you didn't I don't know, you didn't like hit your wagon to the newest trends. You're just sort of stuck with what works. Yeah, pretty much. I'm a coward in a lot of ways. is I don't want to go out of business so I don't take a lot of risks. The thing is for marketing, if someone looks at a screenshot of one of my games or watches my trailer for 5 seconds, they know everything they need to know. That's right. You look someone looks at this game screen you're looking at. This is all you need to know about whether you want to buy what I'm selling. So my marketing challenge is simply getting the word out. Is just getting daylight. So, for example, this uh you know, this uh being on this podcast, this I've really enjoyed this. It's been a lot of fun, but this is going to make me money. Um and Balders's Gate 3 is going to make
me money because it teaches people that this sort of game exists. And when they finish Boulders Gate, um you know, they're going to start looking for other games like this and then they're going to come to Daddy. That's right. Cool, man. Well, hey, thanks for coming on. This was so great. Your process for making this game is so impressive. Um, well, thank you very much. I could kind of interpret maybe 20 30% of what I'm looking at. It's extremely complicated. It's simple to me, but it's because I've been my head's been in this for a long time most of my life. So, you know, but but I think I explained enough to see that there is a a logic to it. Yeah. That it's just it's just seeing where the it's a it's a chain. You just have to see where the links connect. Yep. Oh, man. Well, dude, thanks for coming on. This was Thank you very much. This is awesome. to talk to you again. Yeah. And looking forward to seeing it. All right, bud. Take it easy. Same deal. Bye. Yep. Bye. You may also be wondering how to turn that $100,000 or million dollar game idea into actual
money. And some of you might want to do it before you even finish your game. For that, I have a gift below for you. It's totally free. It's a workshop that shows you how to turn small game ideas into actual
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Thomas Brush · 2026
Game Developers Conference · 2026
Comments