I've been working on some game development stuff recently. I was doing some work tonight and out of the blue, my laptop completely died. Normally, this wouldn't be a big problem as I have several old laptops laying around. However, I had not backed up any of my code or pushed it up to a Git repository (For some reason, I felt that the code wasn't good enough to even save). So, I lost everything. I definitely won't be making that mistake again. I was looking into hard drive data recovery when I decided to just start over from scratch. I figured this would be a good opportunity to document the entire journey from the beginning.
Let's talk about games. I haven't played any games in years. I've been busy with other things. However, games were extremely important to me as a child. I feel extreme nostalgia thinking about the first time I stepped foot into the World of Warcraft or logging into Old School RuneScape after school to gather some wood and ore. Before I learned how to code, I would have never thought about actually making a game. Now that I have some experience with programming and software engineering, I've been toying with the idea of making my own game. I could spend my time making something more "useful", but something always brings me back to the game idea. I've started many projects in the past, and I constantly have to reassure myself that the idea I'm working on is worth the effort. "Is this a good idea? Would anyone use this?" After building a prototype, I grow bored and scrap the idea. On the other hand, games are simple. A game's existence can be justified with the answer to a single question: is it fun? I look at this project as an attempt to engineer fun.
At this point, I don't know much about the game I am trying to create. I don't have a name, a strong theme, or much of anything. I know I want the game to have some classic RPG elements and I'm planning to borrow ideas from some of my favorite games like World of Warcraft, Old School RuneScape, and Diablo II. The most important thing is that the game must be multiplayer. The things I remember most about the games I played are the community and social aspects of those games. There are some amazing single-player games, but I just never got into those. Incorporating multiplayer into the game significantly increases the complexity of the project, but I wouldn't have it any either way.
Initially, I will only be working on the game server, and I will likely do a lot of work on the server before I even consider working on anything remotely related to the client or game visuals. In fact, I could probably spend all of my time just developing the server as there are dozens of topics to cover like scalability, real-time communication (sockets, TCP, UDP, etc.), databases, and many more. The programming language of choice for the server is Go and the client will most likely be written in C# as I plan to use the Unity3D game engine. I do not have much experience with Go, but I will start small, take it slowly, and adhere to best practices as much as possible. I won't be using any existing frameworks intended to make multiplayer game development easier. This project is as much about learning about multiplayer game development as it is about actually making a game. There is no rush to produce this game, and I have no deadlines other than the ones I set myself to continue making progress.
So, today marks the beginning of the journey. This first step feels much like that first step into the World of Warcraft almost 15 years ago. Thinking back to those days, I think it was the unknown that made it exciting. Everything was new. As I start this project, I feel like I'm venturing into the unknown once again, not knowing what challenges, triumphs, and friends I will encounter along the way.