Sunday, June 1, 2025

The Start

Since I was young, I have always loved games. Board games. Card games. Video games. There's not much time in my life that I haven't keep some form of gaming close to me. Making games has always been in the back of my mind. When I was young, I didn't apply myself. As I grew older, life was filled with other obligations. It was a passion that went through phases where I thought it was impossible or impractical or just not worth the effort. So, I just kind of walked along with it following me like something clinging to a loose thread. Never gone, but often ignored.

Last year, my son brought up a game that a friend had showed him called Warsim: The Realm of Aslona. A game released a few years ago that looks like it could have come out 45 years ago. I had already been introduced to the world of traditional roguelikes like Brogue, Angband, Dwarf Fortress(before the Steam addition with graphics), and Caves of Qud. So, I wasn't shocked by the apparent graphical deficiency when compared to most modern games. I was well aware that they often offered some great gameplay, often difficult, that was not palatable to the mainstream gamer. What made this one stand out to me was that it didn't require the map movement of these roguelike games and all of a sudden, I could see myself possibly making a game like Warsim. A game where most of the information and setting was delivered in text and numbers, but could be a deep, complex mess of mechanics under the hood.

Unfortunately, I have never been able to play Warsim, because it is not available on Mac. I know that I could go through some process to emulate Windows on here. I've done stuff like that in the past when I ran Linux OSs, but I didn't want to deal with that chore. So, I took advantage of the Internet. I searched out a content creator I liked on YouTube, and watched them play it, this time it was Big Simple. I didn't need to understand what was happening in the game itself so much as just get a taste of the experience the game offered.

I did some searching and found a group on Reddit called r/roguelikedev. Here, I found a community of people making games, particularly of the traditional roguelike variety, with resources to help others do the same. Strong recommendations came from there to start with the programming language Python. So, I started trying to learn Python. I was trying to use free resources online, which was difficult since I was also working on a laptop. Juggling the different windows of VSCode and the browser for the lessons was a less than ideal set up. I did it for a short time and then fell off.

About a month ago, I got into a conversation with a friend who was trying to learn Python and was having an issue. I had worked on a small project a year ago and had overcome that same problem. This interaction caused me to revisit the idea of learning Python again with the goal of making a game. So, I bought a book(affiliate link) this time. No more juggling screen space. While you can learn from free resources, having a book that was well written to teach is much easier. I worked my way through the book, being careful not to go too fast or underestimate something as too simple. I gave myself days off when I didn't feel like I had the mental capacity left after work to learn well. I felt like I was getting it, but it takes a project to see what you really understand.

So, I started with just wanting to simulate a standard deck of playing cards. I thought that I had learned enough to make a program that the cards could be simulated again displayed as simple two character cards, like 'As' for an ace of spades. I knew this would not be enough to use in a game, but my goal was to be able to shuffle the deck and deal two hands of five cards each and then print them on the screen. As I was trying to build a program that would shuffle them, I learned there was already a command shuffle() built into the random library. First small goal accomplished.

Now, I began to think about trying to make a program that would allow me to play Gin Rummy against the computer. This would be quite a task to build the logic to enforce the rules and get some rudsimentary AI built to play against. However, I had a couple of games from the past come to me one morning. Vegas Stakes and Vegas Dream. I remembered enjoying these games when I was younger. I realized that wasn't aware of any casino games similar to them that was released recently. Searching back, it didn't look like anything has filled that spot since around 2000. So, I began to wonder if I potentially could make a successor to that niche similar to how Stardew Valley was inspired by the older Harvest Moon games of the past. Stardew Valley was originally made by the team of one person, so it is an amazing success story for an aspiring game dev.

So, I shifted from the idea of Gin Rummy to Blackjack. Easier game rules. Dealer plays by very simple rules. So, this became the new goal. If I built a functioning Blackjack game, I could take components, or at least experience, into a bigger game in the future. I knew when I made my rudimentary card shuffling program that my simple cards would not work in a game. So, I tried to make a game that had each card represented as a dictionary. I fought with it for well over an hour and then took a break. I decided that I would search the Internet for advice. That gave me a block of code from Google AI. I didn't quite understand it though and I was unwilling to use code that I couldn't understand. I also couldn't see how to use what I did understand as a functioning deck of cards for a game. So, I quit for the night. I did see that I needed to make them into objects with a class() function rather than what I was trying.

The next day after work, I searched YouTube and found a video where the presenter explained what he was doing and why. I was able to see where I was trying to do something much harder than was necessary. It showed me that I had learned everything I needed from my book so far, but just wasn't applying it correctly. So, I used what I learned from the video and had a functioning deck of cards. I expanded on that by adding shuffling the deck and dealing the starting hands for a game of Blackjack. Then I added a function to display the value of the two hands and declare a winner by who had the highest total.

This got me motivated to get this game built until I woke up a couple days ago. I was thinking about how unsatisfying the display of the game would be since I was going to be reprinting the hands so much once the player started drawing cards. My current knowledge only allows me to keep reprinting and scrolling the previous displays upward fromt he bottom of the screen.

My motivation had sunk a little, but then I thought about this fantasy console called PICO-8. I thought I could finish the game logic and maybe I would make a graphical version with this. Then I remembered about pygame, a library that helps make games in Python. I searched YouTube for an introduction to pygame and found a video that was very beginner friendly. I had only watched the first 30 minutes of the 4 hour lesson, but I was given hope of being able to get my project into a state that I would be proud of. I remembered a game from the past that I didn't play too much, but my uncle had it on his Intellivision and the memory of how it looked was now the inspiration I was going to shoot for.

Yesterday, I used nearly all of my day working on making the Blackjack game playable. I haven't finished it, but I wrote a lot of code and made a lot of progress. It's amazing how many little things come up that you don't think about. I realized that I had not considered that the dealer needs to have one card face down, so I found a way to fix it so that it wouldn't show up until the proper time. I had to figure out how to get aces to take on the appropriate values of 1 or 11. A function was need to to offer the player a chance to buy insurance if the dealer was showing an ace...but not if the player already had blackjack themselves. How to make sure they don't bet more than they have available. Have the deck checked to see if it needs to be replaced because there may not be enough cards for the next hand. While I haven't implemented it yet, I already know how to change things to play with more decks shuffled together, like the 6 or 8 decks that casinos typically use. How do I add additional hands if the player splits their hand?

I've been working out all these details while trying to keep the display function separate so that I only need to rebuild that to add graphics later. While I had hoped to have this functional before I return to work tomorrow, I'm not sure that it's possible. Regardless, I'm making progress on this project.

My goal with build a game isn't so much on making a commercially viable product, at least not for now. This Blackjack game is a learning project. Maybe next I'll make a traditional roguelike just to understand how to due procedural map generation. I don't know. In the back of my head there is a strange game that looks like Warsim, but is about managing a wrestling federation with a lot of complicated systems running that will allow an emerging narrative experience for the player. There's also an idea that still stays with the Warsim inspiration, but is influenced more by Battlestar Galactica with a relationship system similar to Crusader Kings 3, that is also driven by the goal of delivering an emergent narrative for the player. For now, their vision is beyond my scope as a programmer. I'll be back for them though. I don't know how long it will take, but I'll be back for them.

The Start

Since I was young, I have always loved games. Board games. Card games. Video games. There's not much time in my life that I haven't ...