Saturday, March 31, 2012

So why this blog?

I may get asked this question later, so why not answer it here.

I want this to serve as the developers blog for Void Nexus, but also a archive of useful information for novice programmers. So I am recording progress on the game as I start from scratch.

There is another reason to it as well... What would Minecraft be without the "Word of Notch"? The developers input is valuable when a project is started. It shapes the community and the game itself. Later on I want people to read and know that it's possible to make a really good idea come to fruition even if you have no expertise in whatever the idea is about.

I will be linking some helpful information on coding later this week. Might even write a guide or two if I have enough time.

Time Invested on Void Nexus Past Week = ~13 Hours
Total Time Invested = ~68 Hours

Friday, March 23, 2012

Learning, Coding, and Bugs (wash & repeat)

Alright, so a couple of new things.

Since I am learning Lua and LOVE at the same time, progress on the game itself has been very slow. Before I can make things like the physics, terrain generation, collision, weapons, players, etc. I need to know how to actual program them without the code blowing up my computer, so I am starting small with my test programs. So far, I have managed to get a simple pong physics program working. There are two balls that have different velocities. For one, if it collides with the edges of the screen it bounces. For the other, when it reaches the edge of the screen it is teleported on the opposite side of the axis it is on. In other words if it travels off screen from the right side, it will teleport to the left side and continue it's trajectory. It sounds simple, but for the first attempt at writing a physics program they both were challenging for me.

While running it, I came across my first bug! I did not think to set the equal sign (=) when I was checking for collision with the ball and the edge of the screen. I only used the greater than or less (< and >) than symbols. This resulted in the balls bouncing correctly up until around 30 seconds into runtime when one of the balls was equal to the exact location at the edge of the screen. The collision check I wrote was bypassed, and the ball continued traveling beyond the screen boundary into the void of nothingness.

So now I'm past that and moved on to playing with collision boxes (or collision squares/rectangles) for two separate objects with widths and heights. Luckily, it took less time to figure out. The next thing I will have to do is adjust the collision check to use angles for the tiles of ships and players. (which looks confusing...*gulp*)

The pong program was the main thing I've devoted my time to, but I have been working on other stuff too. Drawing a few graphics for the game, made a basic chat program that displays text typed by the player, and playing around with some trig functions (that I barely understand) to fire projectiles.

While at my jobs, I continue to brainstorm ideas for how Void Nexus will work. I feel like I have how 40%-60% of the main mechanics will function for the game and the rest are beyond my prediction capability. It's like pondering a chess move and where it will lead to. You can predict the first few moves with ease but as you try to go beyond that, it becomes harder to see where the other moves will lead to because of the vast possibilities. That is where some of the other mechanics for the game are at, I can't envision until the other stuff plays out. Although, what I have decided on and thought of currently has HUGE potential, and I'm confident that it can all be done. (it's just going to take time)

I'm going to post the pong and chat program I wrote below for anyone interested.

Pong Program - http://codepad.org/qs13jZmH
Chat Program - http://codepad.org/LAgyXDkL

(To Noob Programmers - I'm sorry I didn't write comments explaining stuff)

Time Invested on Void Nexus Past Week = ~15 Hours
(it feels like 70% of it is devoted to learning Lua though)
Total Time Invested = ~55 Hours

Thursday, March 15, 2012

The Gensis of Void Nexus

Before I talk about how the ideas for Void Nexus were spawned, I need to reveal a bit about my background.

Currently, I am a 21 year old male working three part-time jobs simultaneously. I work at a steakhouse as a dishwasher, retail as a sales associate, and a yogurt bar as a cashier. In my spare time at work, I attempt to think of new ideas to add to Void Nexus. When I am not working, I am either trying to code or learning new parts of Lua and LÖVE so that I can be proficient when I need to use the knowledge later.

I've been familiar with video games my whole life. I started off with the simple NES and SNES and then progressed. My parents were often worried while they watched me invest countless hours into many of the games they had purchased. I was the kind of gamer that would be stuck in a dangerous trance while playing. Many times I would forfeit sleep, food, and going to the restroom, as my attention would be completely drawn to completing a level or beating a boss. Needless to say, I managed to rack up a good amount of gameplay in my childhood. As I discovered new games from various systems, I learned what games were unique, exciting, and attention catching, while taking note of the negative attributes (boring, bland, repetitive) which made games bad. Back then, games didn't have the potential that they do now. (nor the amount of entertainment)

I have spent the past few months doing research and testing out things to help me achieve my goal. In the end I decided I would make Void Nexus in 2D, because the length of time needed to make this kind of game in 3D would be daunting. As a person who had no prior coding experience, determining what game engine to use was a project unto itself. I was clueless to the restrictions and freedoms were for any given engine or coding language. The only thing I had to guide me was what people said on forums. I was at first going to attempt to use Java, but then I found out that it consumes so much CPU (Darn you Minecraft!) so I ruled that option out. I was examining some very simple game engines such as Spheriki, GameMaker, and others that I can't recall. Then when I learned about the restrictions of those engines, I continued my search for something that would provide the game structure and environment that I was looking for. And then I found LÖVE.

LÖVE is well... uncanny in it's own right. I was baffled by the homepage when I first came across it. Everything about it seemed so overbearingly cheerful and happy, that it seemed phony. I almost closed the window without giving it a second look, but for some reason I decided to scroll through some of the games made, screenshots, and forums. The more I saw, the better potential I envisioned with using it as the basis for making my game. And so, I started my trek with tutorials in Lua and LÖVE simultaneously to pursue my endeavor for Void Nexus. I began progress roughly three weeks ago and even the small amount I've built so far has shown great promise.

The community on LÖVE has been very helpful and friendly in my attempts with learning. I feel as if I've only learned 5%-10% of all the componets of Lua and LÖVE so far and I seek help on a regular basis. I drop by the LÖVE irc to ask questions related to code or coding and chat about other miscellaneous topics with the folks there. All the cheerful and happy phoniness that I said earlier is not true. The community there is very LÖVE'ing, (get it?) and is a very strong point for using the game engine. Another pro is that the game engine itself is simple enough for a beginner such as myself to learn. :)

Now back to the start of my post as to the ideas and chain of events that lead to this game. I am a big fan of Minecraft. I played it and monitored the progress since the start of classic. I didn't actually buy the game until around the time rail tracks were added. As the game evolved with redstone, I saw a huge potential to build giant powered mechanisms that I fell in love with. Then I thought to myself, "what would be really cool is to make this into some kind of spaceship." The only problem- the ship was static. Thus, I wanted very much to either play a minecraft space mod or make one myself. Time passed, the few mods I was following didn't go far enough to appease my thirst for some kind of block based space game. Then I discovered Blockade Runner.

It was the game I had been waiting for, yet, it was still in early development. (and still is, I might add) So after finding that, I decided to hold off on any game making because what I wanted sounded like it was going to be made already. So I tried to go a different avenue and make a "Minecraft - Space Station 13" server. I learned how to use GIMP to design a texture pack, used MCEdit to build the map, looked at how to use terrain map generators to make planets and asteroids, and even began some beginners tutorials on how to code Java. In the meantime, Blockade Runner had a few updates which added a few things, but nothing that had turned the game into a playable state. They also did a few interviews about the direction they want to shape the game. After reading that, the lack of content, and updates, I became dispirited. :(

From what I gathered and guessed, AI were likely going to be used to crew a players ship, instead of other players. The reason I say this is because with the new updates the ship editor is allowing people to build bigger ships, easier and faster. The size limit was also removed. These two things together mean that players will be able to construct large ships on their own. (which require huge crews to manage) Unless Blockade Runner later has plans to restrict the number of large ships from being built, I foresee most of the players not willing to serve as crew members on others ships when they have the option of building their own. If that's the case then, a huge amount of work needs to be done to code the AI to crew ships. (which will be very time consuming)

Of course, all this is preemptive speculation on my part. I don't really know what their plans are... but this is the direction I see their game going. (of course I could be wrong) Anyway, this all lead to the epiphany for Void Nexus. I envisioned what the space game I wanted should be...

Now I'm here, and passionate about making it as quickly as possible. I think the end results of Void Nexus and Blockade Runner will be vastly different from each other. I have plenty of ideas how I want to shape Void Nexus and am slowly learning to manifest those ideas into code. I'm hoping that I will surpass the progress of blockade runner in a few months (after all 2D games should be faster to code than 3D ones right?) and have a working multiplayer soon. (which is my top goal!)

So that's it. The how, why, and when this game came to be. I've only just started... but the passion has been roaring inside my heart for a long time now to get this project undertaken.

To be fair, a tribute list for the most important games that inspired me to make Void Nexus.

Minecraft - (for the creativity and proof that small scale game developing is possible and can succeed)
King Arthur's Gold - (for showing that team-based coordination is possible on a 2D large scale)
Space Station 13 - (for the sheer amount of crazy mechanics involved)
Blockade Runner - (for being the catalysis that lead me to make Void Nexus)

And for my own personal records, I'm going to be keeping track of the amount of time I spend working on this project every week on this blog. (New programmers have to set benchmarks for themselves right?!)

Time Invested on Void Nexus Past Three Weeks = ~40 Hours
Prior Coding Life Experience = I didn't get very far past "Hello World" on java. That's about it... (sums up to nil )