Skip navigation

===[[[ The Mikeflow: a guide for aspiring game developers -OR- anyone, really ]]]===

0. This is an algorithmic abstraction of my own work process. For the last year I have been working on an iOS game. My whole life, I have been working on becoming a game developer. Last night, I entered self-declared beta development phase. It took 26 years, 4 months, 2 weeks, from birth to beta. Here is how I did it without giving you the long history:

0a. You’re reading this list from top to bottom, or “highest priority to lowest priority”, so you should do things in this order, or through these filters (depending on if you’re linear/non-linear brained):

1. Trust your feelings / thoughts / instincts by exploring them. If it isn’t fun, stop doing it immediately and re-filter through this list

2. Immerse yourself in the becoming process by assuming you already are.

3. Give your unconscious mind time to integrate new experience by spending time away from the becoming process by assuming you are not and perhaps never have been / never will (but do not trick yourself into thinking this is actually true).

4. When your experience reaches a critical point, your gains become negligible and you must take on bigger challenges to continue leveling up.

5. Find a suitable farming location for your level

6. Speed through the game’s story elements as quickly as you can but try to find players you can level with

7. Get the gear you need for your class and level. Make sure you have your inventory stocked up

8. Institute a system to chart as many variables as you care about optimizing. Attempt to optimize the logging system itself to extend to N-variables -BUT- be able to show how optimizing a variable is beneficial.

9. Start grinding. Get into a good flow. Take a food/piss/gaming/exercise/sleep break regularly.

10. Layer other activities/processes on top of this one so that you can sync progress with one project to another so that nothing gets left out.

11. Don’t do too many things at once. Balance. Remember the rule of 3

Life is great. That is all ;D

Warning: naughty language

Awakening to reality, I find myself approximately 18 days from submitting a 25,000+ line Objective-C iOS “app” to Apple for inspection and selling on their “App Store”. I’ve been working on it solidly for about one year now. I’m exhausted, but excited! I’m not “done” by a long shot, but once it’s submitted and approved, I can rest a bit easier and take a short vacation.

I actually love coding in Objective-C. At first, I thought “wtf, this shit is gay”. The syntax is ugly if you grew up learning C and Java. But, it’s a small price to pay for how awesome this makes your program’s syntax look overall. You can almost literally read your program like a story book if written properly. It makes figuring out wtf is going on all the easier because of shit like:

[thisShit isGay];
[thisShit isGay:YES butIsAlsoAwesomeAsFuck:YES];

Secondly, the other night, I discovered you can pretty much instantiate objects with an arbitrary identifier like javascript’s “var” keyword, which is unusual to me for a C-language. Example:

NSObject *anObject; //normally you declare object-pointers, right? Check this next shit out...
id alsoAnObject; //oh my mother fucking GOD that makes shit so much easier!!!

“but mike…how do we know it’s the same type?”

WE DONT!!!

Well, not right away. This is “duck-typing”, which is the bees-knees for speed-coding and doing just bullshit crazy-awesomeness. As the programmer, you should be naming your shit properly, so if you do, then you should also know the methods available to an object at a given time. Just attempt to call a method and see if the object responds to it. Worst-case, you can actually return the class of the object and check it.

id thisShit;
thisShit = [[Shit alloc] init];
[thisShit isSoCool]; //ex1 - works because isSoCool is a method of class Shit
[thisShit wontWorkBecauseUndefinedOrSomeShit]; //ex2 - crashes because undefined method

Anyway…also, third thing: I discovered you can do this same shit with functions like in functional languages…WHAT??? That is some craziness. Just look:

(void)(^foo)(void) = ^() {
//code goes here;
}

(BOOL)(^isThisAwesome)(BOOL) = ^(BOOL win) {
return win ? win : !win;
}

foo();
if (isThisAwesome())
NSLog(@"This is awesome");

This has extremely awesome implications for functional programming in a C-like language. Too bad I’m not better versed in C++…template metaprogramming could possibly be hybridized here. But god, what a nightmare to maintain…

Occam’s razor wins again. Which is why I still love Objective-C. Simplicity. And power. And win.


In other news, working out regularly, eating awesome food all the time, recently went to see Andrew W.K. live and got to crowdsurf and rock out on stage with him, that was beyond words. I want to party as hard as him! I also got to see Descendants of Erdrick up in Austin, which was amazing. And I got to take a new friend with me, which was really fucking cool. She’s been playing chess with me, and kicking my ass at it! But also inspiring me to actually learn the game and not-suck at it for once. I’ve been enjoying it more than video games lately (even tho I still primarily play it on an electronic device of some sort…)

Also finished Seinfeld. That was a long-time coming.

A new age rings forth
As the darkness recedes and the light shines brightly
“You were given your chance”, I said
“But it is all too clear now.”

And within this immortal cry, Prometheus rips from his head the Akashic Record and reads the part where he reads the part where he reads the part where he reads the part…

One foot in front of the other
Engaging in the process of advancement
Walking past the withering sakura
Walking as she silently dies

I write my fate, I am no slave, This is the truth of man
For in this chaos truth be held to be bound to no one man

Make no mistake, I will not wait
I will not sit and watch you die
My time is now, I must create
A universe to survive

And if I in my travels encounter fairer flowers than thee
Rest assured I learned quite well my alien humanity

THERE IS ANOTHER
THERE IS ANOTHER
THERE IS ANOTHER
THERE IS ANOTHER

CAN YOU DEAL WITH THAT?
CAN YOU DEAL WITH THAT NOW?
CAN YOU DEAL WITH THAT?
CAN YOU DEAL WITH THAT RIGHT NOW?

All I really want is a chance to be truly happy
Something beyond this illusion of contentedness
Before I do something unsavory
I must go on, I must go on

I’ve come this far all on my own and all I need now is this one thing
This feeling this drive this need this want this desire to unite with another
Why do I weep so hard inside when my outside is so cold
Because I’ve felt the need so long, been broken, beaten, my soul’s grown old

So let me tell you one last time that I am the real deal
I cannot make others happy until I am happy too
I need some help, I need someone else
You’ve given nothing and taken everything

I just want to be loved
Before I die, before I die

Slayer betrayer / I am the nay-sayer
Up-late container / Code bacon-ator
Max hater / flaker / grand mastur-bator
I’ll see you later / in the elevator
Grand escalator / I am a player
Just make a layer / at the equator
What the fuck / am I out of luck
My crux is fucked / synth max deluxe
Charismatic apocrypha / battlestar galactica
Future of humanity / declaring my insanity

Humanity, the vile
Our entire history we defile
Through self-poisoning that I so revile
Refilling the ink in my vial

Magnitude so great
Yet unable to control our own fate
I was born from another soul
Yet left to fill the widening hole

Chemicals, o chemicals collide
Leaving me only to decide
How to deal with this heightening emotion
In one catastrophic motion

I fail to grasp this notion
Of monogamic devotion
Upon others I dare not approach
For others’ property I’dve encroached

I shall be like an oak
In my chosen soil I shall soak
The earth around me, I shall watch life
Pass by me with strife

With this pen I scribe
With this paper I bribe
For humanity to accept my writ
And let this old man sit

And die

Recently, I began watching Destroy All Software Screencasts.

Setting up Command-T on Mac OSX Lion

1. Compile/install a version of vim with Ruby support (Ruby must be installed, obviously)
2. Download the Command-T install script: http://www.vim.org/scripts/script.php?script_id=3025
3. Open the script in vim and source it
vim command-t.vba
:so %

4. Compile the C-extension
cd ~/.vim/ruby/command-t
ruby extconf.rb
make

I forget if there were any other steps…but if you’re at this point in your training, you’ll have to do stuff on your own anyway so hopefully I’ve power-leveled you a bit :D

5. In your .vimrc, add the following

let mapleader = "`"
cnoremap %% <C-R>=expand('%:h').'/'<cr>

map <leader>w :CommandTFlush<cr>\|:CommandT<cr>
map <leader>e :CommandTFlush<cr>\|:CommandT %%<cr>

nnoremap <leader><leader> <c-^>

Using this setup

I have only been using it for about a day but already I feel pretty comfortable. From within vim, to open a file…

`e{typepartialnameoffilepathhere}

where {typepartialnameoffilepathhere} is a series of substrings of your filepath.

For example, if you were in directory /home/mike and you want to open file /home/mike/Documents/source-control/project/file.c, you would type something like…

`edocsopf

That weirdness stands for /home/mike/Documents/source-control/project/file.c. But, in other words, you can very quickly open files, provided you already know where they are.

Now, something else. Suppose you’ve opened a 2nd file, and you want to return to the previous one.

``

That two-key quickpress will immediately open the previous file (provided you have saved any changed to the current one).

More to come

I’m getting back into my vim groove. I can leave XCode4 open and code in vim if I want now…XCode automatically indexes/updates any files I change. Sucks I have to rely on it to actually test the app but…maybe I can figure out how to write tests without having to run the app?

All I know is vim is fucking powerful and I’ve missed using it badly.

Today is TJ’s birthday. TJ is my only male cousin, and closest thing I have to a biological brother. I should say “had”, but in my family, it is customary to speak of TJ as if he were still alive. About eight years ago, TJ killed himself. His girlfriend of five years had broken up with him; she had “found someone else”. The sadness must have overloaded his circuits as well as his fundamental survival circuits.

The memories I have of TJ are few. We played Double Dragon together on the NES when I was age five, at a family reunion. I then saw him again at age sixteen when I moved to Texas, and my cousin Terry (his sister) got re-married. He grew up to be a tall, athletic dude who also happened to be very smart, hard-working, and also a great video gamer.

When I got the news of what happened, I instinctually broke into a sob. It’s not every day you hear a biological family member attempted suicide.

TJ attempted to drink anti-freeze, then choked on the vomit and was discovered unconscious the next day. He was lying in ER last I saw him, with tape over his eyes and life support tubing inserted into his nostrils and mouth.

The event brought the family together, and continues to bring the family together once a year on his birthday, at his grave.

It’s been a while since I’ve been. The events of my own life have kept me rather busy the last few years and now that things are stabilizing I am able to invest energy into these things once more. I hold a great deal of respect for TJ and how the end of his own life fits into my own life.

Who hasn’t thought about killing themselves? The thoughts usually occur when we consciously experience what we perceive to be a dramatic flux in our personal situations. This can range from:

“Oh I’m so sad that my girlfriend left me and said she doesn’t love me anymore boohoo think I’ll go kill myself.”

to

“I can’t believe the drive thru guys got my order wrong, will you look at these fries? What a world, think I’ll go kill myself.”

and everything in between.

The thought itself may be experienced by ourselves as a call to end our own lives from within, but re-analyzing the signal reveals to me some new insights…

The thought to “kill yourself” doesn’t actually mean for you to “kill yourself”, it means to “kill your current self and evolve into a higher lifeform”.

This misinterpretation of our own mind’s signal to EVOLVE may explain for a fundamental switch-paradigm existing in our own DNA that enables -or- disables our ability to properly process this signal as it was intended.

For reference see Mitchell Heisman’s “Suicide Note”.

So, tomorrow/later-today, I will visit TJ’s grave, I will say some utterance and have enough respect around my family for shit to not totally go awry, and I will depart. What happened is a tragedy that I continue to reflect upon, that I may not meet the same fate, to have wanted to be loved by someone so badly that you’d kill yourself…can’t say I don’t know what that feels like, but I can say that I have enough experience being alone that I have hardened into an icy demon who is capable of taking any pain given to it. There is no harm you can do to me that has not already been done, and there is no end to the infinity of death and destruction that would meet upon the heads of those damned individuals who dare cross me or those that I love. And in the end, the Universe shall balance out the shifting from Yin to Yang, and in the center, all shall be right and good and whole.

Rest well, TJ.

This is the reason I make games

Just get the game

To get the most recent version of the rpgsandbox, download and unzip this file:

http://www.mikedesu.com/rpgsandbox.zip

Then, in the bin folder, double-click/run the GameApplet.jar file. You may need to click/drag resize the window (I haven’t figured out how to set that option yet)

Git the source

I’ve made my budding RPG engine available via source code. You need to be using “git”, so, get it for your system, make a new directory, go into it via the console/terminal/whatever, and then clone the rpgsandbox repository. On Mac OSX and Linux, it looks like this:

git clone http://www.mikedesu.com/rpgsandbox.git

In order to run the game, go into the “rpgsandbox/bin” directory and run (either from the commandline or double-clicking on the file) the “GameApplet.jar” file.

java GameApplet

After having some problems thinking how to handle new things like camera panning and animation and scripting, I decided to scrap the first engine and go from scratch again. Here are my results so far, in maybe 2 days / 10-12 hours work:

You can tell by the way I use my walk that I'm a woman's man, no time to talk

So yeah…things are going better this time around. I need to get entity scripting in so I can actually tell the entities to “sit”, rather than them deciding to sit on their own. Then I can make them move randomly. I’ve been very thorough with the menu systems so I can have an easier time creating the game, period. Ultimately, I’m playing the game in debug mode, so I need tons of “hidden” features unavailable on the normal game…

I’ll post more as I get more features accomplished. This one doesn’t seem in danger of stopping anytime soon