tag:blogger.com,1999:blog-81804526959069186712024-02-19T03:30:01.404-05:00Game Developer JourneyIt's not the end result, but rather the journey that matters most!
<br>
Learning the Art of Game ProgrammingJWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.comBlogger71125tag:blogger.com,1999:blog-8180452695906918671.post-50698967917621923472016-10-28T01:25:00.001-04:002016-10-28T01:31:47.378-04:00JUMP! First Gameplay Video<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/e70RdhkvMgE" width="560"></iframe>
<br />
<br />
I'm very excited to share the first JUMP! gameplay video! This shows a couple levels of the game as well as the in-game Level Editor. Please let me know what you think in the comments.
<br />
<br />
Check out <a href="http://www.zendopixel.com">zendopixel.com</a> and LIKE the <a href="https://www.facebook.com/zendopixel">ZendoPixel Facebook Page</a> for the latest updates and game information. <strong>I will need beta testers soon.</strong> Liking and Sharing the <a href="https://www.facebook.com/zendopixel">ZendoPixel Facebook Page</a> or following <a href="https://www.twitter.com/zendopixel">ZendoPixel on Twitter</a> are great ways to get involved, helping me to spread the word, and getting early beta access to try it out for yourself.
<br />
<br />
Thanks so much for your help!
<br />
<br />
<a href="https://www.facebook.com/zendopixel">facebook.com/zendopixel</a><br />
<a href="https://www.twitter.com/zendopixel">twitter.com/zendopixel</a><br />
<a href="http://www.zendopixel.com">zendopixel.com</a><br />
<a href="http://www.zendopixel.com/blog">ZendoPixel Blog</a>
JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-51138477586427306962015-03-21T01:12:00.000-04:002015-03-21T01:12:31.812-04:00Marketing Guide for Indie Game DevelopersI just recently stumbled upon <a href="http://www.pixelprospector.com/the-marketing-guide-for-game-developers/">The Marketing Guide for Game Developers</a> and wanted to share it. There's a LOT of good information in there, spanning the gamut from working on the quality of your game to working with the press, blogging, social media, advertising and so much more. If you're new to marketing like myself, definitely check it out!JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com2tag:blogger.com,1999:blog-8180452695906918671.post-86943266581946442162015-03-17T09:05:00.000-04:002015-03-17T09:05:05.402-04:00Introducing ZendoPixelTM<div class="separator" style="clear: both; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaD54RuNS19XfgYihatVl-fh_M5QP1hqTUX9cOjTbkMCe2htrKUoMyXz0p8v-EyhbAIVRwkQl48e9dQJvtVavyAGTbUX_EgDxgqNbUS0qJioGLZD7r7DjXanTh7TuZeThhFMyOfG1ERI02/s1600/websiteBanner.png" style="width:100%" /></div>
<br />
Today is an exciting day for me, because I have the great pleasure of introducing <a href="http://www.zendopixel.com">ZendoPixel</a>! ZendoPixel is the new <strong>brand and trademark</strong> I've created for releasing apps and games on the Android platform. I've secured the website, Facebook, Twitter, and many others on <a href="https://www.namecheckr.com/">namecheckr</a> to make sure I can truly claim this trademark as my own.
<br /><br />
For details about the ZendoPixel brand and my first Android game that I plan to release before June of this year, check out the <a href="http://www.zendopixel.com">ZendoPixel Official Website</a>! It features information about my upcoming game, as well as a brand blog and forums where anyone can register to discuss ZendoPixel stuff. I'm still doing some tweaking, like trying to make the forum software look a little nicer, but would love to hear any feedback you might have.
<br /><br />
You can also get involved with ZendoPixel on the following social channels:
<br /><br />
Facebook: <a href="http://www.facebook.com/zendopixel">facebook.com/zendopixel</a><br />
Twitter: <a href="http://www.twitter.com/zendopixel">twitter.com/zendopixel</a><br />
Google+: <a href="http://plus.google.com/+ZendoPixelSoftware">plus.google.com/+ZendoPixelSoftware</a>
<br /><br />
Please share, like, reply, comment, tweet, and any other thing-a-ma-jig you can think of to help me spread the word! I'm just one guy trying to start something big for my family, and marketing is not my strength. However, I do believe in a big God who can do anything and blesses me every day. I am grateful for this new opportunity, and for every bit of support.
JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-75434515048250962542015-02-17T00:04:00.001-05:002015-02-17T00:04:55.528-05:00Building My Personal Brand<div class="separator" style="clear: both; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLVBK2HpVjCamVdE1Q5hefsEjAXz6mzOkB7m5dqiJ1XoIwGuUX0W1p6kAWyWIY3iLfBjU9kPCqfnCaw0EFk8Z-UgPmaARmxYXjczL1DOOqP0s9daCZT2oWGR2nvCRnDx6WQNC76vZyOg0/s400/5990712328_ef90a6fd97_z.jpg" /><div style="font-size:0.8em;line-height:0.5em;">"<a href="https://www.flickr.com/photos/derekgavey/5990712328">Branded</a>" by <a href="https://www.flickr.com/photos/derekgavey">Derek Gavey</a>, used under <a href="http://creativecommons.org/licenses/by/2.0/">CC BY</a></div></div>
<br />
One of the questions eating at me while preparing to release my Android game is "Do I need to establish a company (LLC) to sell on the Google Play market?" I know you can't trust everything you read on the internet, but <a href="http://gamedev.stackexchange.com/questions/72653/do-i-need-a-company-name-to-publish-on-google-play">this StackExchange post</a> leans toward the negative. I haven't pulled the trigger on creating my Google Play Developer account yet, trying to get some details in order first, but that post indicates there is a "Developer" field where I can simply enter the name I want to use for my brand.
<br /><br />
To do that, I thought really long and hard (and did quite a few Google searches) to find an obscure enough brand name that's easy to spell, easy to say, and sounds pretty darn cool. I'm almost too excited and about to blurt it out right now, but I've acquired the big three (website domain, Facebook, Twitter) and am in the process of fully configuring my accounts before a proper introduction. An <a href="http://techblog.orangepixel.net/2015/02/thinking-big-while-staying-small/">excellent blog post</a> from Mr. Bestebroer at OrangePixel got me thinking about the importance of building my brand. In addition to some useful marketing tips, he talks about including a little logo with each of your game icons to help players remember your games. It's a little mnemonic so that if they've played and enjoyed one of your games in the past, they are more inclined to try your newer games.
<br /><br />
With that in mind, I've spent the past couple days creating my brand logo. I used a free vector-graphics program called Inkscape so I can resize the logo to any size without losing image quality. And I think I have a good plan for using the first character of my logo as the brand on my game icons.
<br /><br />
Things are coming together, but I'm really not too good at the whole marketing aspect. I'm sure I have some friends who are way better at this, so if you have any tips or ideas about building your personal brand, or marketing in general, let me know in the comments below!JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com2tag:blogger.com,1999:blog-8180452695906918671.post-90310485612953856362015-02-16T22:51:00.002-05:002015-02-16T22:51:35.962-05:00Code Isn't EverythingI recently saw <a href="http://www.gamasutra.com/blogs/PascalBestebroer/20150119/234373/Gunslugs_2_done_now_comes_the_stress_struggles_and_adrenaline_of_a_oneman_team_doing_his_own_PR.php">this Gamasutra blog post</a> by Pascal Bestebroer, titled "My game's done. Now comes the stress, struggles, and adrenaline of a one-man team doing his own PR". And I thought... HOW RELEVANT!
<br /><br />
For the longest time I was laser-focused on writing the code for my game. And I would occasionally blog about it. But I didn't give much thought to marketing the game after it was completed. Kudos to Mr. Bestebroer for starting his PR as early as the <em>first week</em> of development! This guy clearly has had more time in the trenches than I.
<br /><br />
Marketing is perhaps more important than the coding of a successful game, at least by conventional definition of success. For me, I think just getting my game out on the Google Play store will be a success. But it's good to realize, as I'm learning, that you're not done once the game code is completed. And if you can get a head start on your PR efforts, the earlier the better.JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-19491281562290744102015-01-26T22:33:00.002-05:002015-02-12T01:55:53.370-05:00Finishing the Game<div class="separator" style="clear: both; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3g8EB6u_jGRx7zCjq4xq9hJ4RefVdj2YMgGm98ERaz7675kIUFgbvyFL_tjxBCbCGk75fQqwI5mdOfmptml34XZe5Slu4fASFd8wmLFdcpF_NIeiZG7G7wRCsf6XyCftmp4CGLJWfPCVC/s320/4923668178_9c6957976c_z.jpg" /><div style="font-size:0.8em;line-height:0.5em;">Image By: <a href="https://www.flickr.com/photos/timypenburg/4923668178">Tim Geers</a></div></div>
<br />
I've been out of the game development world for about a year. Part of the reason I stopped working on my Android game (code-named <em>PlaneRunner</em>) over a year ago was burnout. It's not easy working a full-time job and staying up til the wee hours working on a side project many nights of the week. We also endured a grueling process selling our home (which took about a year) and moving to a new area, and I think part of me succumbed to the idea that it was time to let my hobby go. Maybe it's not really my passion, or just not worth all the sacrifice.
<br /><br />
<strong>If only I had realized how close I was to the finish line...</strong>
<br /><br />
Thankfully, I decided to take a look at that old <em>PlaneRunner</em> project this year. Much to my surprise, it was closer to done than I remembered! I had implemented the ability to save games, the level editor looked beautiful, and when I fired it up on my new Android Kitkat 4.4 phone... <strong>it actually worked</strong>. So it was time to figure out which features and bugs actually needed to get resolved for me to be happy enough to call it "done". All software developers know a program is never perfect, so it's just about getting it to work the best you can. If you waited until it was perfect, it would NEVER get released.
<br /><br />
So the exciting news is that I'm now in the final stages of development. I'm not putting in any new features or bug fixes (unless I find something extremely annoying). This week I'm focusing on performance tuning, doing whatever I can to reduce memory allocation and garbage collection so the game runs <em>smoothly</em>. And this time I'm going to get it out there on Google Play so everyone can play it!JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com2tag:blogger.com,1999:blog-8180452695906918671.post-79233438297587382092015-01-18T02:08:00.001-05:002015-02-12T01:59:34.213-05:00Picking It Up Again<p dir="ltr">I used to wonder what happened to game developer blogs. I'd follow someone who updated frequently and then, as if out of nowhere, they'd disappear. Being a little older (and hopefully wiser too), I think I now understand.</p>
<p dir="ltr">For some, a game project consumes so much time that blogging takes a back seat. For others, life just gets in the way. Having kids, moving to a new location, new job, or other life changes just take precedence.  I've had quite a few changes myself, hence a year of no updates, neither on my Android game nor on this blog.</p>
<p dir="ltr">But I am excited to share that I've picked up where I left off with the game and was pleasantly surprised to see I'm not far from completion. In fact, I've resolved most bugs, created both a Lite (free) and Deluxe (paid) version, and am working through the process to get my game on the Google Play market. These are exciting days!</p>
JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-17015127427379641192013-11-13T00:48:00.000-05:002015-02-12T01:59:22.886-05:00Are You Willing to Pay???<div style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX2WiPyHJMwZydH9Owu63VajuJLJV5uvp6szYpmskB2keasAnBBuopvFEmvbbeAYTteAQ3t_RQWMOA-ibKwWIF7TeGgtSx8Ld6VvnrehbiAuTgnq1WLMOav_dZI2XkDJhuoQWRp8nOh5dF/s1600/7065701795_a64139c2de_o.jpg" /><div style="font-size:0.8em;line-height:0.5em;">Image By: <a href="http://www.flickr.com/photos/safari_vacation/7065701795">SalFalko</a></div></div>
<br />
How much is TOO MUCH for an Android game? How much is too little?
<br /><br />
These questions plague me as a I prepare to release my upcoming game on the Android Market, hopefully within a month or so. I've spent nearly a year and a half, mostly after hours because I have a day job also, developing a rather simple ball-jumping-platform-puzzler... for lack of a better description, and I'm quite proud of it. Heck, it even has an <strong>on-device level editor</strong> you can use to create your own levels! But it's no Mario. In fact, it's more along the lines of something like Lunar Lander. Will people be willing to pay 99 cents for something I've poured countless hours into? And honestly, it feels a little devaluing (is that a word?) to charge a mere buck for something that's taken so much time, effort, and... sacrifice.
<br /><br />
There's always a cost, or many costs, when you pursue something you truly enjoy. And I'm talking about more than just the cost of the man-hours invested in a project! In my case, I can't tell you how many family movie times, story times, or bedtime songs I've missed to "keep plugging away" at some urgent-seeming code. In retrospect, I doubt that any piece of code is ever that urgent.
<br /><br />
Also perhaps ironically, I haven't played any games in a long time, which is a very sad fact for someone who used to love first-person shooters and who is also on a journey to become a GAME developer! The truth is, whenever I consider playing a new game, my thought process goes something like "Why should I play another game right now when I could be using this precious little time to work on MY game?"
<br /><br />
And let's not forget the cost of lost sleep and late mornings. Feeling dead tired in the morning because you were up until 2 or 3am the night before is a major drain, repeated occurrences of which can (and in my case did) lead to major burnouts. At one point I had to take a couple months hiatus from my personal development to get some rest. That was a tough call for me, but was important to get some sanity back. In the end, taking some time off allowed me to get some distance and come back with fresh perspectives.
<br /><br />
All this isn't to say I regret the time I've spent working on the game. Over time, I've established a discipline of only developing a couple nights a week, though they do still tend to be late nights requiring a major shot of caffeine when I wake up. But I think it's good to realize with any passion you pursue, unless you're lucky enough to already do it for a living, that there are many potential costs to consider.
<br /><br />
So if you're about to pursue something awesome on your own time, the question remains...
<br /><br />
<strong>Are you willing to pay?</strong>
<br /><br />
Oh, and... keep your eyes open for a game called "JUMP!" landing on a market near you very soon :)JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com2tag:blogger.com,1999:blog-8180452695906918671.post-28649042134736296252013-10-20T01:21:00.000-04:002015-02-12T01:59:02.357-05:00A Complete Android Game Audio SolutionWhile audible sound effects and music won't necessarily make any video game more fun, they definitely do make it more <em>interesting</em> and more <em>immersive</em>. Before I added any sounds to my new Android game, I didn't really notice they were missing because I was so focused on gameplay elements. But after adding them, whenever I muted my device (or disabled the audio in code for performance troubleshooting) it was obvious... <strong>something was missing</strong>.
<br /><br />
<div style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCAk0lL0FilQW63lUQC4hPlwR55kwEk-9c8MgqplgKR7nIEA1sOFb4dQUtVSXxZnrn3m7ivN0f2JIhbDPfsB_GDhtkSwiZyiOc0r5EPq8iDOlRz5_3AaAcUu04T6tiqupOqyRUkn8NlgiF/s1600/8292706571_8719b3c526_o.jpg" /><div style="font-size:0.8em;line-height:0.5em;">Image By: <a href="http://www.flickr.com/photos/ourcage/8292706571">Siddartha Thota</a></div></div>
<br /><br />
If you want to learn how to code audio for your Android app or game yourself, the Android developer site's <a href="http://developer.android.com/training/managing-audio/index.html">Managing Audio Playback</a> and <a href="http://developer.android.com/guide/topics/media/mediaplayer.html">Media Playback</a> pages are a good place to start. There are also some good sites/blogs out there that mention how to play a single sound effect or play a single music file, but I had trouble finding a complete solution that handled sound effects AND music, so I created an audio class that allows you to easily play music and sound effects from any activity. I hope this will help others wanting to get started with audio in their Android apps/games.
<br /><br />
My GameAudio.java file and its code are licensed under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution License</a>, meaning you may freely use it and adapt it to your needs as long as you credit me as the original author in a header comment. If you wouldn't mind posting a comment here telling me how you're using it, that would also be really cool and be a good incentive for me to share additional code in the future :)
<br /><br />
<a href="https://docs.google.com/uc?export=download&id=0B7bI991TcnphS2kzdEZrTkxTNE0">Download GameAudio.java as a Zip File</a>
<br /><br />
<a href="javascript:ShowModal('#GameAudioCode', {width:900,height:600});">View Source of GameAudio.java in a Pop-Up Window</a>
<div id="GameAudioCode" title="GameAudio.java" style="display:none">
<pre class="brush:java">
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
/*
* This audio class was originally developed by Jeromie L. Walters
* and distributed for public use on 20 October 2013. This file and all
* contents are licensed under the Creative Commons Attribution "CC BY"
* license described here: http://creativecommons.org/licenses/by/3.0/
*/
public class GameAudio {
private static final int SOUND_STREAM_COUNT = 16; // Max number of streams played at once
private static final int SOUND_QUALITY = 0; // Not used currently but set to 0 (per docs) for future compatibility
private static final int SOUND_PRIORITY = 1; // Not use currently, but set to 1 (per docs) for future compatibility
private static boolean mIsInitialized;
private static Context mContext;
private static AudioManager mAudioManager;
private static MediaPlayer mMediaPlayer;
private static SoundPool mSoundPool;
private static List<Integer> mSoundStreams;
private static HashMap<Integer, Integer> mSoundMap;
// Initialize should be called once in each activity's onCreate method if audio is to be played in the Activity
public static void initialize(Activity activity, Integer soundArrayResourceId) {
mContext = activity;
mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// On API Level 8, it would be proper to request audio focus from mAudioManager,
// as well as handling loss of audio focus and abandoning audio focus when done.
if (soundArrayResourceId != null)
{
mSoundPool = new SoundPool(SOUND_STREAM_COUNT, AudioManager.STREAM_MUSIC, SOUND_QUALITY);
mSoundStreams = new ArrayList<Integer>();
mSoundMap = new HashMap<Integer, Integer>();
TypedArray soundResources = mContext.getResources().obtainTypedArray(soundArrayResourceId);
int soundCount = soundResources.length();
for (int i = 0; i < soundCount; i++)
{
int soundResourceId = soundResources.getResourceId(i, -1);
if (soundResourceId != -1) {
mSoundMap.put(soundResourceId, mSoundPool.load(mContext, soundResourceId, SOUND_PRIORITY));
}
}
soundResources.recycle();
}
mIsInitialized = true;
}
public static void playMusic(int musicResourceId, boolean loop, float volumeMultiplier) {
if (!mIsInitialized) return;
// Only play one music file at a time
stopMusic();
float actualVolume = (float)mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float)mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = (actualVolume / maxVolume) * volumeMultiplier;
mMediaPlayer = MediaPlayer.create(mContext, musicResourceId);
mMediaPlayer.setLooping(loop);
mMediaPlayer.setVolume(volume, volume);
mMediaPlayer.start();
}
public static void stopMusic() {
if (mMediaPlayer != null) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.release();
mMediaPlayer = null;
}
}
public static void playSound(int soundResourceId, boolean loop) {
if (!mIsInitialized) return;
float rate = 1.0f;
int priority = 0;
int loopCount = (loop ? -1 : 0);
float actualVolume = (float)mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float)mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = actualVolume / maxVolume;
if (mSoundPool != null && mSoundMap != null && mSoundMap.containsKey(soundResourceId)) {
int streamId = mSoundPool.play(mSoundMap.get(soundResourceId), volume, volume, priority, loopCount, rate);
mSoundStreams.add(streamId);
}
}
public static void playSound(int soundResourceId) {
playSound(soundResourceId, false);
}
public static void stopSounds() {
if (mSoundStreams != null) {
int streamCount = mSoundStreams.size();
for (int i = 0; i < streamCount; i++) {
int streamId = mSoundStreams.get(i);
mSoundPool.stop(streamId);
}
mSoundStreams.clear();
}
}
public static void stopAll() {
stopMusic();
stopSounds();
}
public static void releaseAll() {
stopMusic();
if (mAudioManager != null) {
mAudioManager = null;
}
if (mSoundPool != null) {
mSoundPool.release();
mSoundPool = null;
}
if (mSoundStreams != null) {
mSoundStreams.clear();
mSoundStreams = null;
}
// CRITICAL to release context to avoid Activity memory leak!
mContext = null;
mSoundMap = null;
mIsInitialized = false;
}
}
</pre>
</div>
<br /><br />
Below is an Activity code snippet showing how to use the GameAudio class. Note the placement of the <code>initialize</code> and <code>releaseAll</code> calls in onResume and onPause, respectively. The <code>playMusic</code> and <code>playSound</code> methods can be called anytime after <code>intialize</code> and before <code>releaseAll</code>.
<pre class="brush: java">
...
@Override
protected void onResume() {
super.onResume();
GameAudio.initialize(this, R.array.MenuSounds);
GameAudio.playMusic(R.raw.music_title_screen, true, 1.0f);
}
@Override
protected void onPause() {
super.onPause();
GameAudio.releaseAll();
}
public void onClick(View v) {
GameAudio.playSound(R.raw.sound_button_press);
...
</pre>
One final note, you may have noticed the initialize method takes an array resource input parameter -- <code>R.array.MenuSounds</code> in the snippet above. This is done to allow the GameAudio class to create a mapping between sound effect resource identifiers like <code>R.raw.sound_button_press</code> and the handle for the loaded sound created by the SoundPool.load function. If you only want to play music, you can pass null for that array resource identifier. Otherwise, create an entry like the one below in your res/values/arrays.xml file.
<pre class="brush: java">
<resources>
<!-- Sound Arrays Per Activity -->
<array name="MenuSounds">
<item>@raw/sound_button_press</item>
...
</array>
...
</resources>
</pre>
So that's it, the complete audio solution I'm using in my upcoming Android game. I hope this helps someone else just like the community's awesome docs, blogs, and websites have helped me.JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com1tag:blogger.com,1999:blog-8180452695906918671.post-39607560750086051902013-10-18T21:19:00.000-04:002015-02-12T01:59:10.153-05:00Changing It Up<div style="float: right;margin-left:10px;margin-bottom:10px;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU72BP5ztlBXKHy7Jcw3hibeTgZN8esGE3D3wGVK7GubB4j8bK3YstYgtq9ZvCo9uy_Rd7ToX_J1y9J-JsuXXWF1Ailax2y6YXcpgTJ9fhQv9CzA6JCcCwnuTnxPJdk4IOqIDd9q9m4nmo/s320/6262423962_13ae190893.jpg" /><div style="font-size:0.8em;line-height:0.5em;">Image By: <a href="http://www.flickr.com/photos/see-through-the-eye-of-g/6262423962">GollyGforce</a></div></div>
The season's are changing, and it's been a long time since I switched anything up here on the GDJ blog, so I figure it's time for something drastic. OK, those who know me realize it's more of a cautious type of drastic. But anyway, I'm mixing some things up on the look and feel. The BIGGEST change, of course, is that I'm finally switching from white-text-on-a-black-background to the way most people, or at least non-coders, see text: white on black. I originally chose the black background with white text for a couple reasons: 1) I liked it and thought it looked cool, and 2) I thought it made screenshots really pop. But mostly I just thought it looked really cool.
<br /><br />
Why change? Because we must. And because it's Fall. And because it's fun to mix things up once in a while. I'm still tweaking a little bit, so you may notice additional changes over the next couple weeks, but I think the white text on black background will be here for a while. Hope you like it, but if not let me know!
<br /><br />
Thanks for holding tight while the dust settles...JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com1tag:blogger.com,1999:blog-8180452695906918671.post-76980524221216725582013-10-12T15:24:00.000-04:002013-10-20T02:25:08.300-04:00Rave Reviews Are IN!!!<div style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2jPezPKHfQeU8wP_7YsA6RlyEaG48_ZT7Eg27OgDOK22nDGWe45IHjmq2CiGUP2GSIzp_YCyZhYzizZpvRmcl8sSR4rmbVjisPFyugNfxYM7DuyN6f1L6CW5X95YVodRj7z_aSnOt5kiI/s1600/thumbup.jpg" /><div style="font-size:0.8em;line-height:0.5em;">Image By: <a href="http://www.flickr.com/photos/sarahreido/3120877348/">Sarah Reid</a></div></div>
<br /><br />
The feedback is in, and so far people are LOVING my new Android game!
<br />
<blockquote>"<strong>Addicting!</strong>" - Anonymous Family Member</blockquote>
<blockquote>"<strong>I like this game. It's really fun!</strong>" - Anonymous Friend</blockquote>
<blockquote>"<strong>He can't stop talking about your game, it's all he ever talks about!</strong>" - Anonymous Mother</blockquote>
<br />
OK, OK, in all fairness these reviews aren't exactly new-ish. And I do mention somewhat tongue-in-cheek that these are anonymous sources because I haven't requested permission to use their names. But these quotes DID happen, and all I can say is that there is quite an amazing rush when someone else picks up something you've poured countless hours into and says "hey, this is pretty fun."
<br /><br />
Since the time of those feedbacks I've added sounds, music, and a number of visual (particle) effects to raise the bar. So if it was already fun then... well, I hope it's only getting better!JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-12572172099353258952013-10-09T01:21:00.000-04:002013-10-09T01:39:03.671-04:00What's YOUR backup strategy?Recently, I was working on my <a href="http://gamedeveloperjourney.blogspot.com/2013/06/android-game-teaser.html">afore-mentioned</a> forthcoming Android game. I currently use Subversion, coupled with TortoiseSVN, locally on my development laptop for change management. So if I get to a solid point where I'm happy with my changes, I can commit them to my local repository. Then if I later try something new and don't like my latest work I can just revert back to the last "golden" build.
<br /><br />
But there is a certain danger in this development flow. As I mentioned, I'm using Subversion <strong>locally on my development laptop</strong>. And every now and then, I get a sneaking suspicion that my laptop is just waiting to die on me right before I commit a large chunk of code with the most amazing changes I've ever made! So what is a poor indie game developer to do?
<br /><br />
In the past, collaborating with a team on a small PC game, my team used a commercial hosting plan. So our code was committed to a remote repository and that worked as our off-site backup. But for my small Android game, I didn't really want to pay for hosting OR use an open-source repository. So I've actually been using the much lower-tech method of zipping up my code folder and storing occasional backups on DropBox or my Google Drive. That gets the job done; I just worry I may not be doing that frequently enough, and like I said the laptop could choose to give up on any given day. One thing I've learned over the years is "Save early, Save often." and to not trust hardware, because it will let you down when you least expect it.
<br /><br />
So what's YOUR backup strategy? Leave a comment to let me know! But excuse me... I need to go, uh... make another backup... :)JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-87660744536826135892013-06-18T22:54:00.000-04:002013-06-18T22:54:56.388-04:00Android Game TeaserI've been working off-and-on for nearly a year on my current Android game project, code-named <em>Plane Runner</em>. Although I'm not an artist, I wanted to have a game that I can truly call my own creation. But I must say that even with my minimal "programmer art" skills I am pleased with how it is turning out so far and am hoping to release the game on the Android Market later this year.
<br /><br />
I'm keeping the title a secret for now, but below is the main menu background. Let me know what you think!
<br /><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj92exheUC-5T7gMN8XTMaZ4cQhE0MHAzPZguf_HtR_GFi1wYVcbTsMMSE4Tn5ab-7YZlifJ_LKUk06PYv5DrFOXUC9VZUs1GIU7ZBItRLcf3uwsv-6pSLXFXQzayw55mN0K5DuJS7JjuNJ/s1600/main_menu_bg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj92exheUC-5T7gMN8XTMaZ4cQhE0MHAzPZguf_HtR_GFi1wYVcbTsMMSE4Tn5ab-7YZlifJ_LKUk06PYv5DrFOXUC9VZUs1GIU7ZBItRLcf3uwsv-6pSLXFXQzayw55mN0K5DuJS7JjuNJ/s320/main_menu_bg.png" /></a></div>JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-29134004447579187342013-05-30T01:26:00.000-04:002013-05-30T01:27:17.867-04:00Geeking Out, Round 2In my <a href="http://gamedeveloperjourney.blogspot.com/2013/05/geeking-out-tumblr-ifttt.html">last post</a> I thought I had found the nirvana of blog-to-social-media management. Using <a href="http://www.ifttt.com">IFTTT</a>, a new Tumblr post would be created automagically whenever I created a new blog post. I expected (or maybe just hoped) that Tumblr would in turn automagically create similar Facebook and Twitter posts, but it seems the Facebook and Twitter updates only happen if you post directly on Tumblr.
<br /><br />
As a workaround for now, I've created three separate recipes on IFTTT: one to create a post on each of Tumblr, Facebook, and Twitter when I create a new blog post. I'm curious to see if this group works the way I expect.
<br /><br />
BUT, and this is a biggie, I just recently learned (thanks Bill!) about a service called <a href="https://hootsuite.com/">HootSuite</a> that can be used to manage multiple social media profiles. LifeHacker also has a list of the <a href="http://lifehacker.com/5752808/five-best-social-media-managers">five best social media managers</a>. And something even cooler is that there are IFTTT recipes for HootSuite also; so I could accomplish my multi-profile update with a single IFTTT recipe, but I'll play with that another day.
<br /><br />
Let's see if this works, pressing the big red button in 3... 2... 1...JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-34215744252866305642013-05-28T22:50:00.001-04:002013-05-28T22:50:39.369-04:00Geeking Out: Tumblr + IFTTTThis post is a slight diversion from the usual game-related content. I should probably be working on my <i>Plane Runner</i> game instead of this other geeky stuff :) But I've become more and more interested lately in 1) how to update all of my social networks at once, and 2) how to stay up-to-date with others' content on those networks in one place.
<br /><br />
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGXr5ywIGBLmx5rDKD_l6DyTkcQFdLZOzAq7E1L4DScb5AW3HNhQVeE1hgh4SRd-yRLi8V2JbIbRDmT4UBFXsv7tHMTNPMtajystRLminbC0m4u4Zuc7GRDAEMQy3OfsxfgPDymCf05tdC/s320/ifttt.png" />
<br /><br />
I recently stumbled upon <a href="http://www.tumblr.com">Tumblr</a> and <a href="http://www.ifttt.com">IFTTT</a> (IF This Then That). Tumblr is cool because once you post something there, it can syndicate directly to Facebook and Twitter. IFTTT allows you to create triggers that, when detected, trigger some other action. For example, I'm using the example illustrated above to create a link post on Tumblr when I create a new blog entry here.
<br /><br />
If I set this all up correctly, the act of creating this very blog post will cause IFTTT to create a Tumblr link post (linking to this blog entry), which I hope will in turn create similar Facebook and Twitter posts. If that doesn't work, I can probably just create multiple "recipes" on IFTTT to syndicate to all of the networks individually (instead of relying on Tumblr to post to Facebook and Twitter). Regardless, the geek in me is a little too excited about all of this automation updating my multiple online profiles!
<br /><br />
How are you using Tumblr, IFTTT, or [insert other cool site here] to update multiple social networks? If you blog, how do you keep all of your followers aware of new entries? What cool tools are you using to read content from Facebook, Twitter, Tumblr, etc.?JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-51138576359713578212013-05-26T21:16:00.000-04:002013-05-28T21:38:32.330-04:00Still TickingA couple years ago when I started really digging into the gaming scene and trying to get familiar with other game developers by their blogs, I found it odd that so many seemed to disappear or otherwise fall off the face of the earth. A couple years older and wiser, and with some game development experience under my belt, I now know why.
<br /><br />
For me, my regularity in posting drops off when I'm busy in a development cycle. The logic goes something like this: Why should I write about my game when I can be developing my game? Why write a blog post when I could be otherwise writing code for the game? Even when my fellow collaborators continued playing a ton of other games, I had trouble playing anything because I couldn't seem to justify spending any spare time NOT writing code for the game I was working on at the time. You see, the problem is balance. Especially as an indie developer where my time was already split between my 40+ hours per week day job and family, precious little development time would often occur after hours (10pm to 2am, sometimes 3am... ish) a couple nights a week. I think I just got burned out a little, and I wouldn't be surprised if that happens to others as well.
<br /><br />
But I'm not complaining. I'm thankful for the 2-year experience I had working with some really cool artist friends on a tower defense game. In fact, today I was (finally) able to load it up again and take a look at what we had accomplished. Of course, looking at it now, somewhat removed from when I had written a lot of the code, it was a lot easier to see the imperfections and how un-polished it was. It's very tempting to go back and try to make some of those old game mechanics work better. I've learned a lot about engine design since those days and I wish I could go back and redo the entire design, but I know it would take forever.
<br /><br />
In the time since the tower defense game, I took a nice long break to just spend time with my family and unwind a little before diving into some Android development. I was really interested in creating a game people could hold in the palm of their hands. So I created a ball-jumping puzzler tentatively named Plane Runner, and it was an AMAZING feeling to run it on our Kindle Fire. Heck, even the simple Layout Views app that I posted about in my last post over a year ago was a blast to watch running on the Kindle Fire. And when we got a smartphone, it was even more sensational to play Plane Runner on that device. But again I started putting in too much after-hours time on the game, getting burned out again, and had to take another little break.
<br /><br />
Whereas the tower defense game taught me a lot about collaboration with artists (and a sound guy!), as well as XNA and a variety of effects processing and creating a 3D game, Plane Runner has taught me a lot about creating a game for mobile devices (mind the garbage collector!) and how to better design a game engine, including but not limited to the use of a Scene Graph, better event management, and a <a href="http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/">component-based architecture</a>. If you're at all interested in creating games for Android, I highly recommend Chris Pruett's <a href="http://www.google.com/events/io/2009/sessions/WritingRealTimeGamesAndroid.html">Google I/O talk</a>.
<br /><br />
So that's just a little history on what's happened in the time since my last post. But I wanted to let everyone know that I'm still here. I'm still ticking, still developing (though now at a slower pace for the sake of sanity) and hopefully also still writing here from time to time. I am determined to finish Plane Runner, to have at least ONE completed game in my portfolio. But most importantly, I hope to continue growing and learning, and would encourage fellow indies to do the same. I now understand why some seem to have fallen off the face of the earth, but hey... it's never too late to make a comeback, right?JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-51691451980690659382012-04-23T00:07:00.006-04:002012-04-23T00:57:22.372-04:00My First Android App - HelloViewsThe title of this post may be a misnomer. We all know a programmer's first program in any new language is guaranteed to be "Hello, World" and that was no different for me. So this may actually be my third or fourth app, but it's the first one I've written that does something slightly interesting (at least to developers) and that I can say I'm proud of.<br /><br />
What I did is combined the <a href="http://developer.android.com/resources/tutorials/views/index.html">Hello Views tutorials</a> from the Android developer site into a single app. You can think of it as a "views viewer" that allows you to see some of the possible layouts along with the corresponding code and XML used to create them.<br /><br />
Here's a couple screenshots (using an emulator):<br /><br />
<img style="width: 176px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgykD0dtP9GuzyDfKTVmlgKHRoiqQLD7sI4NemB5cijB9kIN17UUEcFsLvarXi8K1IGfGSbO5Zh9nrMS3MGQFwkLSDUHEPgtW3Rvi_okXLe7LVvIrPUaP43d9PazLh77OYUkqT9CP1VdxGK/s320/layout.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5734451958875125650" />
<img style="width: 176px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqfR1QnA8uTbke-l5gmtxVNN63fDWsIflxevskcXOs2BuIRBhCtTSj4h8D_QsL64VjYMyHvP11-HIrSf_5loc49C9XVTbrHSm9ED52kSdvUGQObSY13Ca70tDWsxLwsj450BJntc_oNlme/s320/code.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5734454679759339746" />
<br /><br />
No more ado: <a href="http://www.jeromiewalters.com/downloads/HelloViews.zip">Download the APK file now!</a><br /><br />
If you're stuck on how to install the APK as a program on your Android device, you'll have to do a web search for "side load" and the name of your device. I do have some directions for how to side load an app on the Kindle Fire <a href="http://gamedeveloperjourney.blogspot.com/2012/04/hello-world-on-kindle-fire-yata.html#SideLoadingAnApp">here</a>.<br /><br />
Please feel free to comment with any thoughts on my first app, especially to let me know if you have any trouble using it on your phone/tablet/Fire/whatever! Also if any developers out there are interested in the source of this app, just let me know and I'll be happy to post it.JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com1tag:blogger.com,1999:blog-8180452695906918671.post-30186476660806081342012-04-06T14:46:00.008-04:002012-04-23T00:08:11.296-04:00Hello World on Kindle Fire... YATA!For anyone not versed in the original <em>Heroes</em> television series, the Japanese time-traveling hero named "Hiro" would exuberantly exclaim "Yata!" when he accomplished something awesome. In the same vein, I'm excited that after only a day I was able to create my first Hello World application and actually run it on my Kindle Fire! Below are the brief steps taken to make it work. This is not a comprehensive guide but includes some gotchas to hopefully help anyone else who might be stuck.
<br /><br />
<u>Create a working app that loads in the Android Emulator:</u>
<ul>
<li>Install a JDK (Java Development Kit) - I used the <strong>Java Platform (JDK) 7u3</strong> available from Oracle <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">here</a></li>
<li>Install Eclipse IDE - I grabbed the <strong>Eclipse IDE for Java Developers</strong> <a href="http://www.eclipse.org/downloads/">here</a></li>
<li>From <a href="http://developer.android.com">developer.android.com</a>, download and install <strong>Android SDK</strong>. This also installs the SDK Manager, which itself is pretty darn cool.</li>
<li>Follow the SDK installation directions <a href="http://developer.android.com/sdk/installing.html">here</a>. One of the things this will guide you through is installing the <strong>ADT (Android Developer Tools) plugin</strong> for Eclipse, which is used to simplify tasks that would otherwise have to be done manually. For example, it provides nice New Project and Export wizards for creating and distributing your applications. FYI the ADT plugin took a LONG time to install on my system; I let it do its thing overnight.</li>
<li>If it wasn't done as part of the SDK installation, install the latest platfrom from Android SDK Manager, which can be opened from directly inside Eclipse after the ADT plugin is installed and Eclipse is restarted.</li>
<li>Follow the <a href="http://developer.android.com/resources/tutorials/hello-world.html">Hello World tutorial</a>. This will guide you through setting up an AVD (Android Virtual Device), running your app in the emulator, etc.</li>
<li>Edit your AVD in Eclipse, setting the <em>Snapshot</em> option to <strong>Enabled</strong>. This greatly improved the loading speed of the emulator for me.</li>
</ul><br />
<u>Building your app for distribution:</u><br />
To get your shiny new app on the Kindle Fire, or any device really, you have to build it in release mode and sign the output APK file. Fortunately this is a relatively easy process from within Eclipse once you have the ADT plugin installed.
<ul>
<li>First you need to make sure to add the JDK bin folder's path to your system's <strong>PATH environment variable</strong>. If you don't know how to do this you will have to search (as did I) to figure out the correct way to edit the "Path" environment variable on your OS. Once you do this, Eclipse will be able to use the KeyTool and JarSigner SDK tools to build your APK file.</li>
<li>In Eclipse, click to edit your project's <strong>AndroidManifest.xml</strong> file. You want to edit the <strong>Min SDK version</strong>, settings its value to "8" (without quotes). SDK version 8 is the API Level associated with Android version 2.2. The reason for this is that, I believe, the Kindle Fire runs an altered version of Android v2.3; so if you use an SDK version much higher than 8 (e.g. the default for mine was 15), the Kindle Fire won't be able to open the package when you transfer it to the device. I know I'm using the API level for Android v2.2 when I said the Fire is running v2.3 - feel free to experiment with the number, I just know that it definitely works with min API level set to 8.</li>
<li>Now click the root of the project in the Package Explorer.</li>
<li>Select File > Export, select the Android option, then select the <strong>Export Android Application</strong> item and click Next.</li>
<li>Enter a project name and click Next.</li>
<li>If this is your first run exporting an app, choose to create a new "keystore". Enter a folder path followed by the name you want for your new keystore (e.g. <em>C:\android\keystores\mykeystore</em>). In the example, the name of the output keystore file will be "mykeystore.keystore" (the extension is <em>.keystore</em>). Also specify a password and click Next.</li>
<li>Enter some info to identify the key that will be used to sign your APK file; it is highly recommended to set the Validity (number of years the key is valid) to a value greater than 25. Once all required info is entered, click Next.</li>
<li>Finally, specify the destination for your APK output file and click Finish!</li>
</ul><br />
<u><a name="SideLoadingAnApp">Sending your app to the Kindle Fire:</a></u><br />
Now comes the fun part!
<ul>
<li>Transfer your new APK output file to the Kindle Fire. You can do this directly using a micro-USB cable to connect your Fire to your computer, or you can email the file to an email address you can check on the Fire. If you send the APK file as an email attachment, you will be able to save it to the Fire's internal Downloads folder.</li>
<li>Download and install the free <strong>ES File Explorer</strong> from the Amazon app store.</li>
<li>In the Fire's settings, select More > Device and then set the option "Allow Installation of Applications From Unknown Sources" to ON.</li>
<li>Now in ES File Explorer, navigate to the location where you saved the APK file (the Downloads folder if you saved the file from an email attachment).</li>
<li>In ES File Explorer, click the file and you should be prompted to install the application. Obviously, hit Install to install the application!</li>
</ul><br />
If you followed ALL of those steps, your new application should be installed on your Kindle Fire and ready to run from the Apps view. YATA!!!JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-88383513610242519642012-04-05T20:46:00.003-04:002012-04-06T14:46:19.270-04:00On Losing Control...I'm still contemplating creating an Android game (or even just a quick "Hello, World!" to get my feet wet) to try out on my Kindle Fire. If I get a little more time I might even start that tonight. But a month or so ago I bought the e-book <a href="http://www.amazon.com/Unreal-Development-Programming-UnrealScript-ebook/dp/B006MGDJBS/ref=sr_1_2?ie=UTF8&qid=1333673321&sr=8-2">Unreal Development Kit Game Programming with UnrealScript: Beginner's Guide</a> (which yes, I am reading on the Fire) to get a feel for UDK UnrealScript programming. At first, I was thinking it's pretty cool. I mean, you get to learn about some of the classes in UDK and in a matter of minutes you can have an Unreal-style game up and running. What I'm struggling with, however... is what feels like a total loss of control.
<br /><br />
With XNA development, where I had to do everything, I could do exactly that: just about anything. Of course, the ability to do anything came at a heavy price: lots of complex or ground-breaking code with minimal assistance from our favorite search engines. I still recall the horror that was getting the simplest model animations to work in XNA 3.1 because of the lack of animation support out-of-the-box. But I digress.
<br /><br />
I just have to say, in this as-yet unfamiliar world of UDK UnrealScript programming it feels weird writing script "classes" and not having full control over how things work. But maybe I just haven't learned enough yet. I have only completed about 40% of the book anyway. We'll see where that leads, but for now I start again at the beginning of every programmer's journey.... Hello, World!JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com2tag:blogger.com,1999:blog-8180452695906918671.post-51470022102563796412012-02-10T00:11:00.005-05:002012-02-10T01:13:16.141-05:00Android Mobile Game DevelopmentWhen I first started this blog, I was most interested in creating PC games using C++ with Direct3D, part of the DirectX suite from Microsoft. After a couple projects on my own, I started working with a team of guys interested in developing for the XBox 360 (and PC) using the C# language and the XNA Game Studio engine/framework. Now that our tower defense game project is winding down, and having recently purchased a Kindle Fire, I'm considering creating an Android game I can play on the Fire.
<br /><br />
In the past couple years I've held off on learning an engine in the interest of "knowing how things work under the hood". So I think it's definitely time to learn an engine or two. I'm not sure if Android development is the right path for me, but here's a quick collection of notes based on the article <a href="http://www.gamecareerguide.com/features/1043/excerpt_android_game_elements_and_.php">Android Game Elements and Tools</a> to get me started. Hopefully it will help some new Android developers out there too; just be sure to check out the article if you need more detailed instructions on getting things set up.
<br /><br />
<ul>
<li>Develop Java code in the Eclipse IDE.</li>
<li>The Java code will run in the Dalvik virtual machine on Android devices.</li>
<li>Learn the Android SDK at <a href="http://developer.android.com">developer.android.com</a>.</li>
<li>Set up an Android Virtual Device (AVD) to run the program in an emulator.</li>
<li>Use the <a href="http://code.google.com/p/andengine/">AndEngine</a> game engine.</li>
<li>Use the Java port of the Box2D physics engine. JBox2D is included in AndEngine.</li>
<li>Use free tools Inkscape and GIMP for graphics.</li>
<li>Use free tools Audacity and MuseScore for sound effects and music, respectively.
</ul>JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com4tag:blogger.com,1999:blog-8180452695906918671.post-89665399636612568802011-07-06T02:46:00.006-04:002012-02-10T01:16:58.612-05:00Indie Startups - How Do You Collaborate?Working with others is hard. But being able to work remotely and have all your files merged together nicely is really cool. I'm talking about source-control/versioning software, a tool that lets you maintain history of the changes to your files, as well as allowing everyone on the team to merge their changes to the project seamlessly. There are a couple different versioning tools out there, but the one I'm most familiar with and enjoy using is Subversion.
<br /><br />
Since my team has decided we might consider selling our Tower Defense game at some point, we finally decided to remove its open source label and get smarter about how we secure our project. So I decided to set up my laptop as a Subversion (SVN) server; I know I should really use a spare server but I don't have one lying around. So I installed SVN server, got the repository and permissions set up, configured my router to forward the SVN port to a static internal IP address, and... VOILA! I had a working SVN repository accessible via the internet.
<br /><br />
Unfortunately my upload speed, which measured .96Mbps on <a href='http://www.speedtest.net'>speedtest.net</a>, was providing an abysmal 120kBps download rate for my team members trying to update their working copy of the project -- and let's not even mention the 2+ hours spent on the initial checkout! By comparison, downloads from our open source provider were roughly 1500kBps. I was a little perplexed as to WHY my 1 meg-per-second upload rate was so slow until I saw <a href='http://www.dfwmustangs.net/forums/showthread.php?t=5501'>this forum post</a>, specifically the comment by JC316. Mega<strong>bits</strong> are eight times smaller than Mega<strong>bytes</strong>, and when I did the math I realized that 120kBps (120,000 * 8 = 960,000 bits) is the same as .96Mbps (.96 * 1,000,000). <br /><br />
The reality is that my upload speed is just too slow. We don't have an office to work out of yet and I don't want to shell out $100+ per month for internet service just for a better upload rate. We're considering other closed-source SVN hosting services for now, but I have to wonder...
<br /><br />
As an indie startup with team members working remotely over the internet, how do YOU collaborate?JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com2tag:blogger.com,1999:blog-8180452695906918671.post-78660489875792743732011-06-02T01:03:00.008-04:002012-02-10T01:20:32.195-05:00Phoenix Rising<div style="float:left;margin-right: 10px; margin-bottom: 10px;"><img style="width: 240px; height: 160px; margin:0;padding:0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5v5GyLDn6zWqIkvs7FJiPTzIrgPK3P7J7aXnSyoh48wIckV4cAfScCr6yiccdgyfz0XFJY8wdH1D-pdOoRIxZ_Q-fUI1YVRUDkMjz479Bo8_tpxyxY8XVQU1e7ZKzq7vDLjLdK_bGlFMz/s320/3946697418_0d180e25d3_m.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5613494654010506274" /><br /><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">CC</a> <a href="http://www.flickr.com/photos/undergroundbastard/3946697418/">Source</a></div>
You, my dear reader, deserve better than excuses. But I'm afraid that's all I have for not posting in such a long time... just one single excuse... life :) Things have been so busy, in fact, that I've barely had time to work on my game that I've <a href="http://gamedeveloperjourney.blogspot.com/2010/01/current-project-tower-defense-game.html">alluded to</a> in <a href="http://gamedeveloperjourney.blogspot.com/2010/07/concept-art.html">posts of olde</a>. But if you somehow have my blog still on your "pages to check" list (or RSS reader for the web-savvy folk), I thank you for checking back. And I look forward to reviving this dormant space.
<br /><br />
I have much to write about, having worked in XNA for about a year and a half at this point on a single game project. But I figure, as an old proverb states, that "even a journey of 1000 miles starts with a single step."
<br /><br />
Btw, while I was gone Blogger added some new features. Just for fun, check out this blog in some new dynamic views (requires IE8+, Firefox 3.5+, Chrome, or Safari):
<ul>
<li><a href="http://gamedeveloperjourney.blogspot.com/view/flipcard">Flipcard</a></li>
<li><a href="http://gamedeveloperjourney.blogspot.com/view/mosaic">Mosaic</a></li>
<li><a href="http://gamedeveloperjourney.blogspot.com/view/sidebar">Sidebar</a></li>
<li><a href="http://gamedeveloperjourney.blogspot.com/view/snapshot">Snapshot</a></li>
<li><a href="http://gamedeveloperjourney.blogspot.com/view/timeslide">Timeslide</a></li>
</ul>JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0tag:blogger.com,1999:blog-8180452695906918671.post-42044797409771957672010-09-21T01:12:00.007-04:002012-02-10T01:25:41.449-05:00Three Lessons LearnedSo I think I mentioned in my last post (two months ago?) that some buddies and I were working on a tower defense game that we hoped to demo at an upcoming conference in September. As you may have noticed, September has almost come and gone but I haven't posted any stellar updates detailing the success of our demo at said conference.
<br /><br />
Part of this is due to an unavoidable stall in development progress, which brings me to my first lesson learned. When I realized the ever-increasing scope of the game I would soon be writing, I should have pulled in more developers. As it is, I am currently the only programmer among a group of two 3D artists, two concept artists, and one musician. Although there is a certain amount of pride in being able to take full ownership of the (increasingly large) code base, there is also much to be said for having a fellow to bounce ideas off of and having someone to share the load when you're not available.
<br /><br />
Another thing that's bitten us in the development of our game is not understanding core requirements in the beginning. We think we have a great idea for a game and started prototyping the basics right away. For a simple tower defense game, you have enemies moving from one end of the screen to the other, and that's what we created initially as a 2D game. Once we had this basic prototype, we realized that it was pretty darn difficult to make projectiles with faux-depth in a 2D isometric view look right. So we had to make the leap to the third dimension, which involved converting our 2D sprites into 3D rigged/animated/textured models. We started creating 3D animated models right away before adding concept artists to the team; so the models had to be recreated. But once we had our concepts, we needed to make specific decisions regarding Art Style - the overall game appearance - and this required new models yet again. As a programmer I occasionally overlook these finer details; I mean, if all the characters on screen are moving to their correct destinations... it looks good! But the second lesson I've learned is that Art Style is something that should be seriously considered early on in a game's development.
<br /><br />
Performance is also a major consideration for our game. Although we want to have the best-looking game we can build, we also want it to be playable for as many people as possible, so limiting it to the highest-end graphics cards didn't seem right. And given the fact that I was developing the game on a laptop with only 32MB of dedicated video memory at the time, I had a big problem creating a game I wouldn't be able to play! So we took a step back and realized that our 3000-polygon models probably weren't going to cut the mustard. But even with reduced-poly models, we wanted to do some fun stuff in our game like using outlines on our toon-lit models, particle effects, etc. And some of these special effects are expensive operations that quickly drop frame rate and can cause the game to lag. So as our designer likes to say it, the final lesson for today is to "prototype everything." Although he doesn't <em>really</em> mean to prototype <em>everything</em>. What should really be prototyped is all of the core systems of a game that could be rendered/executing together at the busiest point of the game's interaction: music, sound effects, lighting, particle effects, blur effects, and so on. And provide a way to instantly, with the push of a button, drop a hundred or more models on the screen to simulate the game at its most computationally-intensive point to see how it will perform in the worst-case scenario. Doing this type of prototyping early on can help identify where you need to save polygons or cut features that could prevent your intended audience from playing your game.
<br /><br />
The cool thing about my team is that we're all learning as we go, and sometimes part of that involves looking back and saying "You know, we could have..." So I hope this helps as you start your next project.JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com1tag:blogger.com,1999:blog-8180452695906918671.post-3431336984217590872010-07-18T18:08:00.012-04:002012-02-10T01:27:19.630-05:00Concept ArtAs mentioned previously, I've been working on a fairly complex tower defense game for about eight months now with some very talented 3D and concept artists. Although I'm not at liberty to disclose full details of our upcoming game, for which we've set a demo deadline of September 2010, I <b>can</b> show off some concept art. As a programmer, I'm learning the importance of having quality, researched concepts from which our 3D artists can generate models that are animated in the game. Below are a couple defense units and a couple enemies to show a small piece of what we're working on.
<br /><br />
<strong>Defense: Light Infantry</strong><br />
The light infantry in our game is the player's first line of defense against attacking enemies. He wields a javelin and is a bit clumsy at first but improves his skill (e.g. throwing more than one javelin at once) when upgraded using cash earned from killing enemies.<br />
<img style="display:block; margin:0px auto 10px; text-align:center;cursor:default; cursor:default;width: 320px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipZMDzJMTAmB-873HqszwpIXGQkXXS0iKuaoMJty4756S9aDohuPbYNvUXKfLMQAD1PtEhsH8Lux6ZcmZJHtRTRhizc8z3rWOL9vXsMLR_WgcmhJ_u2YB9BofaSpul2p7v8LSBrJv-kTwd/s320/lightInfantry3.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495375481086550386" />
<br />
<strong>Defense: Heavy Infantry</strong><br />
The heavy infantry does more damage than light infantry and attacks rapidly in a wild rage when upgraded. A couple possible renderings are shown.<br />
<span style="display:block; text-align:center">
<img style="cursor:default; cursor:default;height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQrzWg6xGDhyn14BEIHVwFkzsnoh1yu0ZpTwI3eJ96gbiQVfQV2z0G6h_x3cCIBsKteqLscnmfu-wQnwENVhrTugPwJX44rggfHr_ZoD_n7F5Kn1E1B25_x03wAioItI7S4Z-GYpG2uXWj/s320/heavy_Infantry1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495376323710903682" />
<img style="cursor:default; cursor:default;height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt6dI6hnxqC4M6tMogJLnEzfKMGPmV77XNW8vD7wdMno03RF6Ktfd9NdyfBplopcLvF0dqrsmVWKWXRsUAEVSjvzVzgGutcdNCLbaLczrQQzazWp2Y80Zc8-WvRnO4JSTvPTH9146CYor0/s320/heavy_Infantry.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495376320608720850" /></span>
<br />
<strong>Enemy: Cyclops</strong><br />
The Cyclops is one of the boss enemies in the game.<br />
<img style="display:block; margin:0px auto 10px; text-align:center;cursor:default; cursor:default;width: 228px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgta_XYffIMS35TBriMWpjLbt1BOqHdJElajfJk_-xovbKHze7fUxU7bZV-SPHb7ye-y1TXiC3i2NXIAWAHQ273rWgDR5iR_AqnDu2emtfEhOxTZPU0EmnTeJ3ZCke2j_YuySz2m6WxvT7w/s320/Scan10002.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5495377574692633058" />
<br />
<strong>Enemy: Minotaur</strong><br />
The Minotaur is another boss enemy in the game.<br />
<img style="display:block; margin:0px auto 10px; text-align:center;cursor:default; cursor:default;width: 266px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbkCll-TuCR5BOu5fj5fCbZ5wWk86ilc81KxjQ3h4uMxCPNmn7-FnQPFrLInzDLFewQ0mmHlzIPcoj36kWoOyBTtc1RCoSpkT1tOO1FuRqjFMBp_f-fWSIrjfaGuULdIs7bGtzOasgd0ac/s320/minataur4.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495378404289563426" />
<br />
So those are just a sneak preview of some of the artwork going into our tower defense game. Note that this work is copyrighted by Insert Coin Interactive and may not be copied or reproduced in any way. I look forward to showing more work and hopefully also some in-game screenshots when we're closer to demo completion!JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com1tag:blogger.com,1999:blog-8180452695906918671.post-67981133384349533652010-07-15T13:26:00.004-04:002012-02-10T01:28:23.535-05:00Making Games on the SideAs a hobbyist/indie game developer, I found the following Gamasutra article of particular interest. It describes some of the challenges and sacrifices required to be a successful game developer, whether your definition of "success" is actually breaking in to the industry or simply making games for the love of doing it. Hope you enjoy the article as much as I did.
<br /><br />
<a href="http://www.gamasutra.com/view/feature/5895/making_games_on_the_side_.php?page=3">Making Games On The Side: Development In The Real World</a>JWhttp://www.blogger.com/profile/13248318534942408752noreply@blogger.com0