Ever wonder what it’s like to quit your job to pursue a career as an indie game developer? Well, I did just that and have gone through the ups and downs of working as a lonely game developer in today’s competitive market.
In this video, I’ll share my experiences as an indie game dev and try to shed some light on the truth behind following your passion to make your own video game. It’s not always as great as it sounds on the surface, so don’t be surprised if things don’t go the way you envision.
If you enjoyed this video, then be sure to hit that LIKE button and SUBSCRIBE if you haven’t already to follow my journey as an indie game developer.
What has your experience as an indie game developer been like or do you have a question you’d like to ask? Want to share your story? Feel free to leave a comment and I’ll try my best to respond to everyone.
There’s a new video out on my YouTube channel where I discuss the current state of my indie football game, Legend Bowl. There’s also talk on what it will take for the game to be successful and my plans for new content on my channel.
Please stop by the steam store and wishlist Legend Bowl today!
Hey everyone! I know I’ve been quiet lately with the posts and news on Legend Bowl, but I have some good news coming very soon to share with you today.
The main reason why I’ve been so quiet is because I’ve been working hard on the game and trying to get some type of basic gameplay built.
The goal was to have a working demo with basic gameplay to get a feel for the game and begin the polishing stages to make the game fun and rewarding. I’m very close to having a alpha demo out that shows off the gameplay and let’s you play through a complete match with stat tracking and basic playcalling.
I’m excited to get this moving and bring you more news as the game progresses. There will be videos on my YouTube channel, as well as QJB’s channel, so stay tuned!
Here are some new pics of the game to wet your appetites!
The past couple of weeks have been extremely busy and arduous, to say the least. As I’m rebuilding Legend Bowl from the ground up, I’ve set a priority on gameplay and building a robust artificial intellligence (AI) engine as its foundation.
Let’s talk about AI and what it means to a video game as complicated as sports and a sport such as football to be exact. There are various concepts out there when it comes to AI in games, but the one that stands out the most is a concept called “Steering Behaviors” developed by a fellow named Craig Reynolds. Just google it and you’ll find thousands of interesting articles and videos describing these concepts and how much power they can have on your game while eliminating much of the overhead used in complex AI systems.
Seek and Flee
Pursue and Evade
My previous build of Legend Bowl included these steering behaviors as the core movement system throughout the entire engine. As I moved further into the development of the game, I began to notice weird behaviors coming from my agents. For example, there would be oscillation when a player was flipping back and forth while deciding on what direction to move in next.
Crowd Path Following
Another issue was related to the positioning of players and many times players would get locked up when trying to move to a location as other players were blocking their path. There were several other issues I won’t bore you with in this blog, but needless to say the AI system just wasn’t organic and cleanly enough for a complicated sport such as football and I knew I needed something better to take its place.
My “Home Grown” AI System
My intial approach was to try and build my own “home grown” AI system for a ball returner to see if that would be any better. You can see that in the image below where I was creating a rectangle that turned at the same angle the player was turning and then would check for collisions to avoid tacklers.
Then I moved on from making my own custom rectangle/box collision system using vectors and points to something a member of the GMS2 community created for these types of wide-range collisions. This was great because you could easily change the dimensions of the rectangle collision object to your liking and anything that would collide to it would be detected without needing to code up a sophisticated system to detect all of these collisions.
The overhead of creating “raycast” lasers to check every point would bring any game to a crawl and this seemed like a creative solution to try out in Legend Bowl.
Even though this was an improvement from both a performance perspective, but also was robust enough to use everywhere it still seemed like I needed more.
Context Map Behaviors
Fast forwarded 6 plus months later and now being back on Legend Bowl I began to research how to fix some of the AI issues I was experiencing. As I was looking through articles, I ran into a concept I once heard of while researching Steering Behaviors called, “Context Map” behaviors which seemed to simplify the process and think of decision-making AI as something less complicated, but gave the power and organic nature of a real human decision making system.
All of this research lead me to a man by the name of Andrew Fray, who’s an AI engineer on several AAA game titles, but notaby for F1 racing. I believe he came up with this AI concept and shows how powerful it can be when used for agents making decisions in a crowded space where steering behaviors could not cut it. He has some articles explaining Context Behaviors on his website if you wish to read in more detail and also did a GDC presentation in 2013 about AI and goes in depth on the system.
The concept just blew my mind and made it crystal clear that this was the choice for Legend Bowl’s AI system. So without much hesitation, I began the process of building a prototype of the AI using Game Maker Studio 2.
Let’s just say I had MANY questions on how to accomplish his simple, yet very complex theory. One question was how to determine the number of “antennas” as I like to call them would serve my game. Another was how the hell to code this and make it morph into what I need. So I rolled up my sleeves and began typing away, while researching more on the topic and getting as familiar with it as I possible could. I quickly began to put things together and found another article by James Keats who did this for a school project. This is where I could test the AI out using his demo to get a feel for what I could build in GMS2… that’s why they look so familiar!
Even though I had something I could tinker around with and play, it still wasn’t enough to show me how to “code” it into my engine. He didn’t share much code and there were still many gray areas I was missing. Long story short, I pounded my way through it and finished my first prototype somehow.
Legend Bowl AI Prototype
My plan to develop a prototype was to start up a clean empty GameMaker Studio 2 project and build the context behavior AI for a ball carrier. I started out with building the lists to hold the various danger and interest spots for each player. Then I moved on into building the script to evaluate the closest danger players in 8 directions and rank them in some sort of weighted scale.
The next step was to grab the closest interest object and move away from the most prominent danger directions to come up with a final direction to pursue. This was all hardcoded to 8 directions and after several attempts and tweaking I was able to get something that started to look like a football player running with the ball, while avoiding tacklers!
Early prototypes below illustrate the player arrow moving towards the green interest objects and trying to avoid the red danger objects.
The next steps were to tune and tweak the logic so the player could see further and adjust to danger in a more realistic fashion. I also began adding more realistic danger objects to see if the player could sift through the field without getting touched by defenders.
The final step in the prototype was to refactor it so I coudl dynamically adjust the number of directions for testing when I ported it over into Legend Bowl. It took me a full day or so, but I was able to reduce the number of lines of code by 70% while adding a much more dynamic system that could expand and collapse to whatever number of directions needed for testing.
Increasing the number of “antennas” as I like to call them really didn’t always make for much of an improvement and in some cases made the players try to “squeeze” through too small of holes, instead of going around the crowd of defenders. Although it was nice to have the option of allowing less or more paths for the player to take depending on the situation.
In summary, Context Map Behaviors started to feel like the obvious choice based on my prototypes. I was really happy with the results, but wasn’t sure how well they would translate into the actual game.
In the next blog post, I’ll share how all of this prototyping and testing made its way into Legend Bowl. Thanks for reading and stay tuned for more news and information in the coming weeks!
It’s been awhile since I’ve posted a video on Legend Bowl, so I thought I’d share some updates with you guys!
Let’s start with some back story to get you up to speed on all that’s happened since my last dev log. Around May of last year, I took a detour and started working on another project I planned on trying to knock out in a few months. Like any other software development project, things always take two to three times longer to finish and planning is almost always a difficult task to master.
Leading up to the break on Legend Bowl, my main developer was beginning to distance himself and eventually left the project without any notice or warning. Fast forward 6 months and now I’m back at Legend Bowl 100% and I’m rebuilding the code base from scratch. Yea that’s right, from scratch!
The reason is two fold… for starters the previous code base was too robust and things were beginning to get a bit unorganized and cumbersome. Secondly, since my developer left I thought it was time for be to quickly transition into something more manageable. Something I could build on my own to be 100% intune with all aspects of the project without depending on another coder.
I’ve been working on Legend Bowl again since the start of the new year. I’m super excited to get this project moving and I’ve made quite a bit of progress leading up to this post. My plan is build a brand new “state” system which allows me to isolate player behaviors and animations without needing to jump through 20 hoops to get there. This will be the foundation of the new engine and will allow for quicker tuning for improved gameplay and behavior.
The plan is to get the on-field game working at some basic level and then move onto the polish. I’ll be sharing the journey with new videos and I progress through this phase so stay tuned!