2025: New Year, New Me!

Happy New Year Everyone!

I hope everyone had a happy new year. Ever since I graduated as a software engineer from college at the end of 2020, the past few years have flown by fast, and I’ve been super busy with many side projects and career development.

Big Plans for 2025

I spent a lot of time thinking about different directions I’d like to go with my blog over the past few years. This year I am proud to announce I will be reviving my blog with regular content on a weekly basis with a variety of video game development related topics, ranging from computer engineering and hardware design to writing software for retro video game consoles.

I have a bunch of exciting blog plans for 2025. Here’s a list of major updates for this year:

  • I created a Buy Me A Coffee page for donations. This is in case you’d like to support my blog posts, upcoming video game development projects, future course content, and more. Follow me at buymeacoffee.com/aaronmh0305

  • I am planning to narrowly focus on one major topic at a time in a series of easy-to-understand blog posts, while interleaving other small topics related to video game development to provide a little bit of a break from the major topics. Some posts will be personal vlogs to show both hardware and software in practice, while others will be purely textbook-style with hand-crafted diagrams and explanations. I would like to accommodate a variety of different learning styles (visual, auditory, tactile) so the posts are easy to digest in different ways.

  • The first series of blog posts will teach an introduction to computer engineering, since this is a critical piece of knowledge for both hardware and software engineering of retro video game consoles. In this section of my blog, we will discuss topics including the history of numbering systems, how to count in the binary numbering system, how to convert from one numbering system to another, boolean algebra, basic logic gates, signed and unsigned numbers, and much more.

Join me on this journey as we begin to explore the intricacies of retro video game technology from both a hardware and software perspective. Stay tuned for so many great things to come!

Up Next:

Let’s start the 2025 year strong with an introduction to computer engineering!

A Retro Revival in the Making

What is Retro?

Within the last few years, there has been a rising interest in retro technology, including old-school video game consoles, portable audio players, and even mobile phones. The word retro is the latin prefix for “backwards” and refers to memorable objects from the past. Because the definition of retro is fluid over time, the objects we classify as “retro” become a matter of perspective. For instance, older generations of people may classify “retro” as the 1970s and 1980s, whereas the current generation of kids may classify “retro” as anything beyond 10 years old. Many of these retro technology collectibles are hard to find and tend to be very expensive, ranging from a few hundred to a few thousand dollars. So what exactly is spurring on this retro revival?

The Retro Strikes Back

There are a variety of reasons why retro is making a comeback. Some people crave that strong sense of nostalgia from their childhoods and a desire to relive better times, while others are reminded of the unique creative expression and imagination of previous eras. Some individuals even prefer vintage technology for its lack of internet connectivity because it allows them to completely disconnect from today’s highly sophisticated technological world.

Because vintage technology is trending again, retro enthusiasts have formed whole communities to collectively document and share detailed information on different retro devices. For those interested in classic cartridge-based game consoles of the 70s’ and 80s’, communities such as AtariAge and NesDev offer great resources for Atari or Nintendo Entertainment System game development respectively. The Internet Archive is another community that provides many informative books, videos, and webpages on the technical specifications of retro technology that are available to download for free. Other old-school communities are hosted on Reddit and Discord channels as well.

But Wait, There’s More!

The TODAY show recently reported on a special news story about how retro technology is trending again. I have uploaded the news story from YouTube below. From the Sony Walkman audio player to the Nintendo GameBoy and beyond, retro is undeniably back in style and doesn’t have any intentions on leaving anytime soon.

Follow along with me on our journey as we explore the origins and inner workings of retro technology from hardware to software. Out with the new, in with the retro!

Microsoft Excel 95 “The Hall of Tortured Souls” Easter Egg

As I was working the final few days at my internship with JPMorgan Chase, one of my coworkers mentioned to me that I never showed him my game X-Squadron that I mentioned to him at the beginning of my internship. I immediately sent him a link to the game when he asked me:

“What interests you about gaming?”

I explained to him that I’ve always been fascinated with the history of video games and graphics and the way it currently is headed, particularly since the 1990s. I always have felt that the past has a lot to offer in terms of creativity and inspiration for next generation video game developers, especially since those days of game development involved much more hand-crafted code bases rather than preexisting engines like Unity and Unreal today.

When I mentioned 1990s games, my coworker asked me if I ever heard of the Microsoft Excel 95 hidden raycaster game called The Hall of Tortured Souls, which was a way for the developers to express appreciation for all their hard work on that advanced piece of software at the time. I found a video of this game on YouTube and thought it was super interesting, so I have attached it below.

For anyone who loves the classic game DOOM from 1993, check out this neat easter egg! Maybe this will even inspire some of your future software applications to have simple games built-in.

As always, I want to say: Happy Coding!

News: My 2-Year Anniversary of Game Programming and Project Updates

Hello everyone,

This summer I am excited to announce I have finally been working on building my very own Java 2.5D Raycaster game engine with my friend Steven Bajmakovich. I can’t believe it has been two years since I began my game development journey with Steven, where we developed our very first game called X-Squadron from the ground up using the Unity game engine. I’m also super thrilled to announce that we will be releasing the updated X-Squadron game at the end of this summer with a whole new mission mode filled with waves of enemies and bosses! There will also be an information log in game to learn about the enemies and the lore behind the x-squadron team! The art has recently been vastly updated and greatly improved! With these things in mind, I’d like to post two very engaging videos about building a 2.5D Raycaster game engine. Many of the games from the 1990s such as Wolfenstein 3D, Doom, Duke Nukem 3D, and Elder Scrolls Arena, have been created with a Raycaster game engine.

Check out these videos! I’ll keep you guys posted on more updates as I go along. Plus, I will be updating my blog with new projects I’ve worked on in the past recently. I’ve done a lot of neat programs within the past year and I’d be happy to share these with all of you in the upcoming weeks.

The Great Minds in STEM Conference in Orlando

I am honored to have received the prestigious Intel Corporation Great Minds in STEM Scholarship recently. As a GMiS Scholar, I had the opportunity to attend the Great Minds in STEM conference in Orlando, Florida this week. The conference was filled with networking opportunities, informative career presentations, career fairs and recognition events for outstanding STEM achievers from across the country. I would highly recommend attending this conference for STEM students who are seeking insights on how to begin their careers and who enjoy meeting fellow STEM enthusiasts. Now I’m heading back home and back to the books at the University of Wisconsin!

PerBlue - Thanks for a Great Summer Internship!

I spent this summer working at PerBlue, an independent mobile gaming studio based in Madison, Wisconsin that makes RPG and strategy games played by millions of people around the world. As a Game Engine Developer Intern, I worked on the engine team and programmed battle sequences for several characters in the Disney Heroes game, which put my math, physics and programming skills to work! The experience of being part of an Agile Software Development Team at such a progressive company was invaluable. As an indie game developer myself, it was fun to work in a field that I find fascinating for the summer. Thank you to everyone on the PerBlue team for making my intern experience so great. I miss working with you and wish all of you the best!

PerBlue 2019.jpg

Die Flucht - One of my Favorite Animations

I’ve always been a fan of animation systems and how they work underneath the surface. Because of this, I plan on writing about Animation systems in the near future, perhaps after discussing some graph-based AI. This is by far my favorite short animation and was made by Carter Boyce, a student from DePaul University in Chicago.

Next Topic: Graph-Based Data Structures and Artificial Intelligence

For the next chapter of AI, I’m going to begin talking about different types graph data structures and their uses in video games. It has been a while, I know! I’ve been busy and distracted by cool graphics programming, which may be a subject I write about in the future!

Today I just briefly want to explain what I will be discussing and the concepts behind them.

In terms of Artificially Intelligent agents in video games, graph data structures are very useful for:

  • Navigation around an environment

  • State-driven behaviors ( i.e. Finite State Machines )

  • Logical, decision-making in strategy games based on prediction

  • Shortest-path calculations

  • Searching

These are just a few to keep in mind and this is NOT even close to being an exhaustive list. There are many applications where graph data structures can be useful.

I will discuss the graph data structure next! But in case you’re interested, here is a brief overview of graph data structures and game development in a video!

Artificial Intelligence: Behavior Trees Part 5

To finish off our brief discussion on Behavior Trees, I want to leave you guys off with a couple of videos that demonstrate the usage of this data structure in video games! Here are some examples of games/software that utilize Behavior Trees for the AI interaction.

  • Project Zomboid - Chris Simpson, the blogger I referenced for our discussion on Behavior Trees, actually worked on the game Project Zomboid. It is a zombie survival, role-playing game for PC, Mac and Linux that utilizes Behavior Trees for the zombie and survivor AI. Chris Simpson also stated that Project Zomboid was made with the Java programming language. You can build your own safehouse and scavenge the apocalyptic wasteland for supplies like food and weapons. You can even team up with your friends to try and survive together! The game contains a lot of realistic survival elements. It also has modding support. If you like zombie survival video games, and you’re curious to see how the behavior trees work in the actual game, you can buy the game on Steam for $15. Or you could simply watch a video on the game, like the one I posted below!

  • The Sims - The Sims games are real-life simulation games that focus on the everyday life of people, where the player controls artificial human beings to perform tasks such as cooking, bathing, going to work, exercising, you name it! The Sims games have some of the best examples of AI with behavior trees due to the fact that the sims can interact with tons of everyday items. For example, in one of the videos below, you can see a sim cooking a meal on the kitchen counter. This describes how that sim utilizes a sequence node to walk to the fridge, grab some materials to make the food item, walk to the counter, chop up the food, cook it, serve it at the table, and finally begin eating the food! Also, in the Sims, the player can interrupt the current sim’s actions if he/she wants to. In terms of our last example, this means the player can send a ‘failure’ status message up to that food sequence node that is currently executing, which ultimately causes the sim to stop what he/she is doing and put the food somewhere. When the player isn’t controlling the behaviors of a certain sim (i.e. when the player is playing as a different sim or is away from the controller), the sims automatically control their own behaviors depending on their daily needs, such as their thirst, their hunger, their bladder, their tiredness, their hygiene, and so on. These sims utilize behavior trees to maintain their wellbeing autonomously! Check out the sims if you haven’t before.

  • Unreal Engine 4 - Unreal Engine has a built-in node editor for Artificial Intelligence that utilizes behavior trees. The user of the engine can actually define some very complicated and rigorous AI that is suited to his/her own needs. This feature is what game developers use to construct video game AI without worrying about having to create the behavior tree structure completely from scratch! This is very powerful! Check out the videos below to see how they work in Unreal Engine.

Artificial Intelligence: Behavior Trees Part 4

Types of Decorator Nodes

Decorator nodes only have exactly one child node, and their purpose is to somehow alter the functionality of that individual child node through some sort of operation. You can think of Decorators as “manipulators”, since they are ultimately used to manipulate the return statuses of its only child. Common examples of Decorator nodes are inverting the returned status of its only child node, repeating the processing of the child node, or terminating its child node.

  • Inverter - Inverter Decorator nodes are used to negate the result of their child node’s returned status In other words, if the Inverter’s only child node returns “Success”, then the Inverter sends “Failure” back up to its parent. If the Inverter’s only child node returns “Failure”, then the Inverter sends “Success” back up to its parent. Inverters are often used in conditional tests.

  • Succeeder - Succeeder Decorator nodes ALWAYS return “Success” back to its parent, regardless of the returned status of the Succeeder’s child. This is extremely useful in cases where you anticipate “Failure” in some branch of the tree and when you don’t want to abandon processing of a sequence that that branch contains. Fun Fact: There is no need to create an opposite “Failer” Decorator node because you can easily attach an Inverter as the parent to the Succeeder to always guarantee “Failure” is returned back up the tree!

  • Repeater -A Repeater Decorator node reprocess its child node each time the child node returns a status back up. You can also use Repeaters to reprocess the child node a fixed number of times too, like a loop. Repeater Decorator nodes are commonly used towards the top of Behavior Tree to allow for the tree to run continuously.

  • Repeat Until Fail - A “Repeat Until Fail” Decorator node acts in the same way as the Repeater. It reprocesses its child node each time UNTIL the child node returns a “Failure” status. Once the “Repeat Until Fail” node receives the “Failure” status message from its child, it returns “Success” back up the tree.

Artificial Intelligence: Behavior Trees Part 3

Hello everyone! I’m back from a long break of exhaustion of finishing another semester at college and from the holiday season!

I was previously talking about Behavior Trees, and today I want to continue where I left off with different types of Composite Nodes. Recall that Composite Nodes define the root of a particular branch of a Behavior Tree and the rules for how that branch is executed. In other words, they are mainly used for controlling the logic of each branch of the tree and which AI behavior(s) to perform on that branch.

Types of Composite Nodes

  • Sequences - Sequences are extremely useful when you have a series of AI behaviors that ALL must be completed “successfully” in a particular order before accomplishing a certain task. For example, imagine you want an AI to walk through a door that is currently closed. In order for the AI to complete this task, it first needs to walk to the door, open the door, then walk through the door, and finally close the door. These are all behaviors that must be completed in that order to complete the entire task. A Sequence is a type of Composite Node (i.e. a rule) that visits every child node in order from left-to-right in a linear fashion while checking for a “Success” status message to be returned for each node. If any one of the children nodes sends a “Failure” status message, the entire Sequence stops executing and is also said to “fail”. For example, with the door analogy used above, a failure message may be sent if the AI was interrupted by something, such as the player, another AI, or another event like the door being locked or the path being blocked. You can also think of a Sequence as an AND logic gate operation.

  • Selectors - Selectors are very useful when your AI has many different choices of the actions it can take in a given priority order, and you want the AI to find the single, best action that can be performed “Successfully”. For example, reconsider the last scenario with the game AI walking through a door. With the Sequence above, we assumed the door was always unlocked and could be opened. But what happens if the AI gets to the door and its locked? We can use a Selector here to check if the door can be opened! If the door is locked, meaning the ‘Open Door’ behavior sent a failure status message to the Selector, then the AI can attempt to unlock the door and then open the door. If that behavior “fails”, maybe the AI can try to bust the door in. If that behavior sends failure back to the Selector, then perhaps the door cannot be opened and the Selector also fails. However, you can see that a Selector gives the user a lot more control on the behaviors an AI can exhibit. A Selector is a type of Composite Node that visits it children in priority order from left-to-right and checks for the first child node that returns a “Success” status message. If all of the children nodes send a “Failure” status message, the entire Selector stops executing and also is said to “fail.” You can think of a Selector as an OR logic gate operation.

Here are some really good pictures to show what a Behavior Tree with just Sequences and Selectors looks like to help you understand! These pictures were made by another blogger named Chris Simpson. They are not made by me!

A Sequence Composite node that just describes an AI walking through a doorway. This tree just consists of a Leaf Nodes that define general behaviors for simplicity. The code structure to perform these behaviors is more complicated.Retrieved from htt…

A Sequence Composite node that just describes an AI walking through a doorway. This tree just consists of a Leaf Nodes that define general behaviors for simplicity. The code structure to perform these behaviors is more complicated.

Retrieved from http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php

A Behavior Tree with a Sequence and Selector Composite Nodes that also describes an AI walking through a doorway.Retrieved from: http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php

A Behavior Tree with a Sequence and Selector Composite Nodes that also describes an AI walking through a doorway.

Retrieved from: http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php

A Behavior Tree with a series of Sequences and Selectors that represent an AI attempting to get into a building through both a doorway and a window.Retrieved from: http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How…

A Behavior Tree with a series of Sequences and Selectors that represent an AI attempting to get into a building through both a doorway and a window.

Retrieved from: http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php