Friday, June 20, 2008

Plan of Attack

Here are the things that I wanted to do for the next few days until Sunday.

==Requirement==
*The CopyPirate's map engine can be forked into an engine library of some sort.
*Development of The CopyPirate 0.0.2 can begin.

==Hope for==
*Rake file for zipping things up
*Start development on Human Robohunt

==Pipe dream==
*Rbgooey being transformed in the world's most sophisticated game UI

Wednesday, June 18, 2008

RubyWeekend Postmortem

This postmortem is about my first game entry for the first ever Ruby game programming competition. This game is called The CopyPirate.

What went right?

1. I finished my game before everyone else. This is probably because I was motivated by my previous failure to submit my game in time for PyWeek, the first contest that I participate in. The shorter time also don't give me breathing room so I forged ahead of everybody.

2. Merging and reusing my code was a snap. I was able to use most of the code from Twisted Shootout and SpaceFighterAce and merge them together. Very little time is spent on coding new gameplay elements. I was probably the laziest programmer in the entire contest.

3. There are little downtime. I did not have to waste 3 hours in tracking down bugs. Because the codebase was essentially finished even before there was even a codebase, the code I used were proven to work and are generally free of bugs.

What went wrong?


1. Readme's instruction manual were difficult to get it right. Because I did not use virtual machines, I have to relies on others to check my work. It took me several try to get it right. Even as I finished the instruction, I lack information on how to install rubygem, a package manager essential to the installing process.

2. My codebase have magic number syndrome. Even though my codebase was known to work, it was also entirely undocumented. This make future modification of the codebase in delicate and complicated areas risky operations.

3. The game have uncompelling gameplay. Due to my lack of knowledge about gamepplay design, my game wasn't able to compell anybody to vote for my game. Thus I probably rank dead last or near dead last in the contest.
What I learned.

1. People like to read programming journals. It also draws traffics, which boost ads revenues as a bonus.

2. Extreme but reasonable deadline and blogging are useful productivity tools. I look forward to using it outside of this contest.

3. I learned that what I see in my text editor isn't actually what I will actually see in my git repoistory. I was also advised not to use tab space, but instead, actual spaces. Tabs ruins formatting I believed I was told.

What I would do differently.

1. I would clean up, document, and port my map engine so I haave more time to work on the gameplay during the contest.

2. I would try a rush hour every 8 hours or so. The rush hour is when I just simply focus all my energy on coding rather than spending part of my time chatting on IRC.

3. I would try to find a teammate to do the artwork for me so I can focus purely on coding and gameplay design.

Sunday, June 15, 2008

RubyWeekend Hour 33: The CopyPirate Uploaded

The CopyPirate is ready for public consumption!

Visit this site for download!

I finished first!

RubyWeekend Hour 32: Approaching Last Milestone

I finished the the maps and just got started on the HUD.

The hud will be simple. The information it will have is simply health and items collected.

Time to code it! I am going to try to finish this in the next hour.

RubyWeekend Hour 31: The End is Finally Near?

Well, I am finishing up the tiles graphics for the map. Once that is done, I will be finishing the final part of the game, the HUD.

I imagine the HUD to be an easy affair.

Once that's done, it is time to write a README and package the game and SHHHHHHHHHIP it.

Forget additional enhancement and the like during the contest, because I have ENOUGH of this.

RubyWeekend Hour 30: MapObj Organized and Design Choice

Well, the arrays in mapobj class are now organized and editable. The map engine is now no longer a nightmare to edit anything by hand for the first time in its evolutionary history.

Also, I decided to leave the weapon system as it would make the game way too easy since there are no zombie creation system.

RubyWeekend Hour 29: Map editable by hands

In theory the maps were editable by hand. However, in reality, it is difficult to edit because you do not know the location that this map part correspond to unless you count, which is a tedious and error prone process.

Creating a map editor would eat up time in the contest. Times that I don't simply have. It might be worth it in the long run but the game map must be completed
in time for the contest.

So I just organized the maps and now you don't have to count. It is very easy to find out where a part correspond on the map just by looking at it. Thus, I don't need a map editor to edit my maps.

RubyWeekend Hour 28: You can now win the game!



All parts necessary to win the game are in place. This include the item gathering and reaching the internet pipe as well the victory screen.

Next stop will be a proper map and the final gameplay element, the combat system.

RubyWeekend 28: A Slow Start

The last post is an hour late. Sorry about that.

The development is off to a slow start but nonetheless, it is a start. We have 14 hours left. Even with this much time, I feel like to have to run the whole way.


For now, the win condition code is in place.

RubyWeekend Hour 27: The Start of the Last Day

This is it. It is the last day of the contest. I started the day on working on the win condition code.

Saturday, June 14, 2008

RubyWeekend Hour 26: I am out!

I finished the game over death scene and I just started working on the win condition part.

But development stop now! It already is midnight and I need sleep.

So....good night!

RubyWeekend Hour 25: You can die

Zombies can now do some real damages and even kill you. However, there is still of no real consequences when your health goes to zero other than saying that you're dead.

I am working on that death screen next and then I will call it a night. Hopefully, tomorrow is plenty of time to finish my project. The last thing I want to do is not finish a contest I proposed in the first place.

RubyWeekend Hour 24: Item gameplay down

Part one of the gameplay done. Now you can collect items necessary to unlock the way out.

Time for me to focus on the fighting aspect.

RubyWeekend Hour 23: Items are sync

The items are now sync. All we need is to add some functionality to these items to complete the whole part of that gameplay aspect.

RubyWeekend Hour 22: Items and things

The enemy zombies can't go through each other anymore.

Also, I begun work on the items, which will be essential to winning the game.

RubyWeekend Hour 21 : New walls among other things

In this hour, I finished an AI enhancement which will ensure that the roaming AIs won't get stuck.

I also added a few new walls and edit to make the beginning of the map.


Next stop, make enemies AI not be able to go through each other.

RubyWeekend Hour 20: Enemies follow the rules too

Nothing much here except that the enemy are now up to date when it come to following the rules of the gaming universe.

Time to make roaming AI more intelligent.

RubyWeekend Hour 18-19: MapLaw Finished!

The mapengine coding has spilled over to the next hour because I was in the middle of coding. It was only after the end of hour 19 that I was able to stop coding.

In that time, I finished porting MapLaw. MapLaw is basically the physics of the game world. The law I impelemented is that for some map tiles, you cannot go through it, effectively making them walls.

Now, I just need to apply it to enemies too. It also mean that I will need to reprogram the roam AI so they don't get stuck forever when they hit the walls.

RubyWeekend Hour 17: Sync complete

The sync of the enemy's goal to the map engine is complete.

Now it is time to make the map tiles a physical reality in the game world.

RubyWeekend Hour 16: AI finished

I just finished writing the code for zombie movement, although it is incomplete for the roam part.

However, it also have to be synced with the map engine too. So I will be off to the mapengine again.

RubyWeekend Hour 15: More Work on Enemy AI

Argh. Like everything else, the enemy AI take forever to program. Perhaps that is due to me being distracted by other things.


In any case, the foundation are almost in place for the enemy AI.

RubyWeekend Hour 14: I Just Woke Up

OK, I just woke up so there isn't much going on, progress-wise.

We're just getting started with programming the zombie's AI. The AI will be the same for the RIAA vampire lawyers as well. However, the vampire lawyers will be more intelligent if I finished the game with time to improve on the game's gameplay.

Friday, June 13, 2008

RubyWeekend Hour 13: Done for the night

The enemies are synced up with the map engine's camera.

That's it. I am done for the night. See you all tommorow.

RubyWeekend Hour 12: Yay, the enemies are displayed



The enemies are finally displayed. They can't really do anything, not even generate new zombies. That will change tomorrow.

In the meantime, I am going to sync up the zombies to the map engine because you can't even touch a zombies because they move along with the players.

RubyWeekend Hour 11: Still coding that thing

I am going to be really brief with this post.


I am still coding that enemy generation thingie.

RubyWeekend Hour 10: A game is starting to emerge

There is not much to see here because I am still coding the foundation of enemies generation. Nonetheless, I did created the zombie graphic. My idea is to create variants of these. However, due to time constraint, I won't produce variants until the game is feature complete.

When the enemy generation feature is complete, the program will start to resembles a game.

My goal doesn't really reach far beyond feature complete stage. All I hope for is for a complete game ready to submit for judging. When the next RubyWeekend contest comes, I hope I will be a faster coder and thus able to extend my goal a little bit beyond feature complete stage.

RubyWeekend Hour 9: New graphics

Instead of coding the enemy generation system or the weapon system, I decided to create new graphics.

The first image was music item, which you will need to acquire a certain amount in order to escape the zombie infested server and win the game.

The second image was the infamous GNU tnt bomb first seen in the title screen. It have a 3 by 3 blast radius and a delay of 5 second. Anything in its radius is automatically killed, including the vampire lawyer and the player pirate himself.

RubyWeekend Hour 8: Camera complete

I finally got the camera class finished for now. That's a lot of code for one class.

Next stop, it seem will be zombie generation and weapon system.

RubyWeekend Hour 7: Take Forever to Get This One Right

The progress so far...


I finally finished the right and left proportion of the camera class. It took me a while to get it right because it crash so slow sometime. Also it involves lot of python to ruby code conversion. So it added to the time of coding the camera part.

The good thing is that I didn't have to figure how to do camera out.(Thank god!)

The next time I posts on this blog, I hope to get the camera done too.

RubyWeekend Hour 6: Yay for maps being shown!


Map tiles are shown for the first time. You can see it in the left corner.

As you can see, I gotten far enough to display these babies. I also begun work on camera, which did not see much progress after I finished the map displaying work.

It seem that I have pull an all nighter if I want to complete this project just in time for judging. Progress are pitifully slow.

RubyWeekend Hour 5: MapEngine work

There isn't much to show for the mapengine class partially because it is a lot of work and partially because I am slow.

I only added the mapobj class, which keep all of the map data in the last hours or so. I spent much of my time flipping through the files to do lot of little things.

I hope to get some map tiles showing the next hour I post on this blog.

RubyWeekend Hour 4: Brainless merging, Pirate Creativity, more Brainless Merging



New clean artwork are created for the pirate player character. Then I implemented code for moving this character. You can move up, down, right, left, and also move diagonally. Moving diagonally is hard because you need precise timing. However, I don't really care because it is a minor and unnoticeable blunder to the vague game play I have in mind.

Next, I set to work on working on the mapengine, creating the mapengine class.

The CopyPirate(the name of the game) is really a merger of two game, Twisted Shootout and SpaceFighterAce, and some pirate creativity that I have to do. Thanks to the experiences and the codebase I worked on over the year, I can really be lazy in this contest.

RubyWeekend Hour 3: The onstructioncontroller is under c

The progress thus far:

I finished the titlescreen UI and started work on controller by displaying the pine background to represent the ship(or server)'s deck. I also managed to sneak in a game loop where you can only do really basic stuff like quit the game.

The controller is basically a class that talk to every game element classes in the program and manage the game. So it basically snitches together all the stuff neccessary needed to make the game do its stuff, sorta like a car chassis.

RubyWeekend Hour 2: Titlescreen UI coming along

I got the titlescreen UI almost put together. I just need to add mouse functionality and the startup screen will be good to go!

I noticed a typo in the titlescreen jpeg but it will be easy to fix.

The progress I made so far is to make it go up and running, as well building the titlescreen UI. Not much but it is a start.


I think I am far ahead of everybody since some people are surprised that the contest just got started.

RubyWeekend Hour 1: Internet Pirates versus RIAA zombies



RubyWeekend has just started an hour ago!

Ok, it isn't exactly one hour into the contest, but it is quite close.

I already decided what my game will be and what I will be coding. Since the theme is about pirates versus zombie, I choose to parody file sharers as pirates as they're often called and the RIAA as zombies because they're accused of taking advantages of artists.

Also I am planning to port the Twisted Shootout's map engine so I can save development time and concentrate on trying to create good gameplay.

As you can see, the titlescreen is already done. I also done some inital brainless inital work.(Again using older codebase as templates)