About this blog
One programmer's journey through game development
Entries in this blog
Hey all! It's been a busy week between the World Cup and 4th of July, I haven't devoted as much time to progressing on my project, but I've picked up quite a bit in the past few days.
It dawned on me this past weekend that I most likely won't have time to implement all the features and elements I want. The problem is, it takes only a few minutes to think of a cool feature to add to the game, but can take hours to actually code and implement said feature. And sadly my time is limited, once school starts up for me again in September my time to program will go down dramatically. Moreover, I personally suck at making art, models, and animation so I am extremely limited in what kind of graphics and art I can have.
So while I still have the long-term goal of creating an excellent Sci-Fi Third Person Shooter MOBA that can compete with Dota 2, LoL and other large names in the scene, I have adapted a more achievable mid-term goal. I want to build a demo that has many of the elements of what I want my full-featured MOBA to have but on a much smaller scale. For instance, instead of having a 3v3, 5v5, and 10v10 map. I will have a simple 1v1 Map. Instead of having a unique player model for each combination of race and gender, I will have one generic model for all genders and races. The item system will not have cosmetic properties, but solely be stat modifiers. Models will be low poly and have simple or non-existent textures.
Once I have a demo done, I will go around showcasing it on various websites/forums and hopefully will be able to recruit a few artists (and maybe another programmer) to help expand my small demo project into a full-featured game. Although, I'm not in this for profit or any compensation, it would be nice to one day have this publish through steam green light or another publishing platform. Anyways I'm getting ahead of myself... Check out the game updates below!
Build 0.0.5: (July 3rd, 2014)
Fixed a bug in the Character Creation process that required a client restart before being able to log in.
Added users to the chat system...
Build 0.0.6: (July 7th, 2014)
Added a play button...
Programmed server side extension to check if the player wants to "play". Searches for an open match, if none exists, creates a room and waits for an opponent.
This is a very bare bones matchmaking system, but in the future will easily be scale-able to look for users with similar gear and skill level. Next build I will be finally able to dive into creating the game itself.
Build 0.0.7: (July 8th, 2014)
Designed a crude 1v1 Demo Level in Blender and imported into Unity
Programmed basic 1v1 Match Script (Currently still bugged, game crashes when you try to exit)
Fixed bug to allow players queued for a match to continue chatting in the lobby.
Fixed weird bug where players would occasionally Join an existing match AND create their own.
Rewrote some server-side code to make the lobby run smoother. (No cosmetic changes)
Build 0.0.8: (July 9th, 2014)
Purchased a low poly Sci-Fi art asset set that came with two fully animated prefabs and some environment models. This will hopefully be enough art until I can get a demo done and showcase it in hopes of recruiting some artists (If your an artist and interested in helping out with this project, feel free to contact me!)
Imported the Assault Trooper asset into my build.
Wrote a simple player controller to allow the player to move his character (and in the future will communicate with the server)
Programmed a SpawnLocalPlayer method which dynamically adds a LocalPlayer game object using the Assault Troop Prefab and Player Controller.
Programmed the LocalPlayer game object to play his run animation if he is moving
Began programming the interpolation process that will be used in future builds, I'm not very confident in it as I've never done interpolation before
So, I've decided from here on out, I'm going to format my Dev Blog updates to be broken down into two parts. One part will explain a bit more about the Game Design, I'll usually focus on one or two specific aspects that I've penned down either in a note pad or on paper. The second half will be tangible updates to the client and server. If any of you have questions or feedback regarding anything I discuss, feel free to comment and inquiry!
Game Design - Item System
Unlike other MOBAs, namely LoL and Dota 2, players do not buy items during a match. Instead all items are equipped by the player prior to starting the game. So how do you balance items if one player enters a match with Sword of Awesomeness and another with Wooden Sword of Lameness?
Well ideally, players will be matched up with of similarly geared players. Moreover there isn't going to be a long process of itemization to obtain all the best gear in game. What matters more is how you itemize your character.
What do you mean "how you itemize your character"?
Items will be specifically designed to cater to different roles found in a MOBA. Most items will follow the formula:
Value = Base + HeroKillMod*(HeroKills) + CreepKillMod*(CreepKills) and a ValueCap that Value can not exceed
So two identical weapons may have a different attack later on in the match due to player performance. Additionally, this formula opens up different styles of play. Some items will have high Base, but low Hero/Creep modifier, a good choice for a support role who won't get lots of kills. Some items will have a higher Creep/Hero mod but lower ValueCap, a good choice for a early game lane pusher or ganker. Not to forget end game carries will want to go with items that have higher ValueCap even if that means they will need to get babysat by support and early game gankers/pusher.
This item system offers a new twist to an old idea. Team will need to coordinate who will be geared with what, and who will be doing what role during the game. Combining this with the previously discussed barracks system, teams will need to devise a meta-game that takes into account item composition, role composition, as well as a strategy for where on the map to attack/push and how to counter their opponent's composition and strategy.
Build 0.0.2: (June 27th, 2014)
Added Character Name, Gender, and Species fields to character creation screen.
Fixed a bug in the client updater.
Build 0.0.3: (June 29th, 2014)
Character Creation is functional. A player can create his/her character send it to the server which will in turn properly store it in the database.
No visual update for this build, since most code was done server-side which is literally just a console box.
Next build will be much more exciting, working on the lobby and chat system
Build 0.0.3b: (July 1, 2014)
Migrated Server to a Ubuntu VPS. Wiped local test database, and created a new DB on the VPS. Client now connects via the internet to a development VPS. This way come alpha testing, I'll be able to send out copies of the client to alpha testers.
Tweaked Server-side Login Extension, and some database settings.
Login, Registration, and Character Creation now work via remote connection.
Build 0.0.4: (July 2, 2014)
Programmed server-side extension to connect user to the game lobby
Implemented server-side extension handler to properly update a basic chat system
Quickly threw together a client-side chat system to send a user's chat to the server and receive and display chat updates from the server.
So in my first journal, I talked about the tool sets I'd be using (Smartfox and Unity). It's been about a week since I've started working with both of these development tools and I can happily say I'm chugging right along. Granted in the grand scheme of things, I'm still a long way from my final design, but for me, it's not about having a polished final project, it's about the baby steps that I've taken to get their and learning along the way.
Giant Strides (Design):
So, I spent a good portion of this weekend playing a lot of different genre games, namely Starcraft 2, Dota 2, LoL, Civilization 5, Dragon Age: Origins, and while I obviously enjoy all of these games, that wasn't the reason I was playing them. I wanted to refresh myself on the core competencies that these games utilize in order to be considered successful.
The e-sport games (SC2, D2, LoL) rely on a competitive scene and what is considered fairly balanced game play, all players at the start of the match have equal opportunity to win. Simply put, their success is limited entirely by their skill level and maybe internet speed but that's a different topic... The downside to this core competency is player frustration at losing several matches in a row. For me personally, I suck monkey balls at Starcraft 2, and after losing 4 1v1 matches in a row, I was no longer enjoying myself. I reasoned that this frustration could potentially be mitigated if the game had a meta game that allowed the user to progress regardless of the outcome of the match.
That said, I wanted to make a new kind of Moba that involved strategy and tactics in the match as well as a meta game outside of individual matches that also had an element of persistence and progression for users. Furthermore, I didn't want to use Aeons of Strife map (Map used in HoN/LoL/Dota) and I also wanted to make "lanes" more dynamic than what they currently are.
For today, let's talk about individual matches:
As with most MOBAs, two sides, each with a base. The goal of the game is to destroy the opponent's base resulting in victory. However instead of predetermined lanes with creeps/minions spawning every 30 seconds, Project Anera utilizes a node-based system. These capture-able nodes, lets call them barracks, spawn X amount of soldiers every 30 seconds. The players can change the direction at which these troops move, creating truly unique lanes.
3v3/5v5/10v10 concept maps (Blue Circles are Bases, Green Triangles are Barracks)
"Do you want to divert all barracks down the center for a one massive head-on attack?" "Would that strategy be weak to easy flanks?" "Are you going to keep an equal amount of troops along your entire front line?" "Can the enemy penetrate your front line easily?" "Where will you go as a hero?"
In order to balance the snowball effect of one side owning more barracks (thus spawning more troops per 30 seconds) respawn time for players is increased for having more barracks, and reduced for having less barracks, thus allowing a team on the brink of losing to respawn quickly and continue defending their base.
Baby Steps (Coding):
The first thing I did was briefly look through the documentation of both Unity and Smartfox, luckily they both seemed fairly easy to grasp at a conceptual level. After watching a few video tutorials, I started to dig into the tools and begin my own project. I was able to quickly put together a Login/Registration screen using Unity's GUI class, which seems incredibly easy to utilize. The next step was connecting this screen to a server, which was definitely alot more complicated seeing as I haven't ever done networking code. However after a few hours of tutorials I understood how to setup a server, write custom extensions/event handlers and maintain a connection to the server. The last step was rigging up a database to the server and making sure users were logging in with the right credentials, which was easier than I thought as well (Smartfox comes with a Login assistant component )
So as of now Project Anera's 0.0.1 has a fully functional Register and Login screen that will let a new user register and an existing user to Login in. Furthermore it checks if the user has created a character yet, and will either send the user to a lobby or character creation depending on the result. In addition, I've begun working on the Client Launcher/Updater, and have it set up to access a web server to check if the user's client is up to date.
Project Anera 0.0.1:
A little about myself: I use to lurk on this site, as well as a site called DevMaster, a few years ago as I started learning how to program and code. Suffice to say a lot of my earliest games were rather poorly made as I never fully wrapped my head around OOP or how to program windows applications. My first game was a console based Tic-Tac-Toe followed by a console text-based adventure. Depressed at how hard it was for me to get into Direct X or windows programming, I stopped all together for about 2 years, focusing on learning some html and php instead of C++.
It wasn't until a year ago that I came back to programming; I started learning C# and dived head first into creating a 2D graphical game. Since then I've programmed on and off, I recently finished a small 2D RPG built entirely with the C#.net library that has nearly all functions a proper RPG should have (NPCs, inventory, combat, skills, levels, map editor, load/save etc, etc). Now that I've got that more or less finished, I've decided to set my eyes on 3D game.
A little about Project Anera: So the wheels only started churning in my head earlier this week. A large portion of close friends and online acquaintances that tested my 2D RPG stated that, while the game ran smoothly and it had the concepts of an RPG, it didn't do anything unique or different that a thousand other RPGs haven't already done. So at the forefront of conceptual design for Project Anera, I want to do something that hasn't been done, which is hard, because tons of new games come out every day on app stores, and sites like this. How does one make a game stand out amongst the horde of other indie games? That's the million dollar question.
So what have I gotten hammered down thus far? I've decided that I want some online or multiplayer component. I believe player-to-player interaction is extremely important for building a unique experience as well as adding replay-ability. In addition, I needed to find a good 3D engine, ideally one that utilized C# for programming the client. In the end, I've settled on using Unity3D to develop the client, and SmartFox to build the server. Now comes the slow-paced part of the project where I need to learn how best to utilize these two toolsets in conjunction with C# to build what eventually will be Project Anera.
Hope you enjoyed reading this, I know there isn't anything to show yet, but this is really just an introduction to my development journal, future updates will have more substance.