Chris McCormick - News - infiniteplatformer https://mccormick.cx/news/tags/infiniteplatformer Chris McCormick - News - infiniteplatformer en Copyright 2008- Chris McCormick 60 GMT chris@mccormick.cx mccormick.cx/news/ Priority Queue entries/priority-queue https://mccormick.cx/news/entries/priority-queue scout-and-dad-photo-wall-at-harukis-house.png

Photo by John Leonard.

Warning: post contains serious navel gazing.

Lying around in the dark trying to get my sleeping patterns back into Western Australia time from Western Scotland time has got me thinking a lot about focus and priorities.

  • I used to spend about twenty hours per week in my spare time doing Free-Libre and Open Source Software. I currently manage to allocate about zero hours per week to FLOSS.

  • Almost all of my time is now taken up with commercial work, social life, and family time. Although I would love to write more Free Software, I am ok with this balance for now because spending time with family and friends is definitely not the worst thing to do with your life.

  • I am officially orphaning the Infinite 8-Bit Platformer project. If you are a Free Software developer interested in taking over that project please contact me! There have been a ton of irregular users but the codebase badly needs some love. It's written in Python and Pygame and is GPL licensed.

Infinite 8-Bit 
Platformer

  • I still get to contribute a bit to Free Software projects during the course of my commercial work - I just don't have the luxury of pioneering my other vanity projects any more - except maybe jsGameSoup which gets used by one of my clients.

  • This whole shift is in general probably a good thing as it is turning me into more of a team oriented and social programmer. It forces me to re-use other people's code and work on other people's ideas more which is a good and efficient way to roll.

  • I have a plan to recover some of my commercial time for specific use on Free Software again in future. This basically comes down to making a way to fund some of that time myself and still keep my family in sustenance. Hopefully that pans out!

  • The one thing I wish I had more time to do is make music. I guess if I wanted this bad enough I would just make it happen but right now, no.

None of this is really a bad thing, just a fact of life. Friends and family are super-important to me right now, life is happy, and I still get to write a crapload of code for my wonderful clients and the very interesting projects they have created. :)

]]>
/tags/infiniteplatformer Wed, 08 Aug 2012 13:57 GMT
PyConAU 2011 talk entries/pycon-2011-talk https://mccormick.cx/news/entries/pycon-2011-talk

Here is the talk I gave in Sydney last weekend about Infinite 8-Bit Platformer.

]]>
/tags/infiniteplatformer Tue, 23 Aug 2011 11:44 GMT
Infinite 8-Bit Platformer at PyConAU 2011 entries/pycon-2011 https://mccormick.cx/news/entries/pycon-2011 masthead6.png

I'm in Sydney for PyConAU 2011 to give a talk about Infinite 8-Bit Platformer. Hopefully you've registered already because I'm very late in posting about this!

I'll post a link to the video after it goes up.

]]>
/tags/infiniteplatformer Fri, 19 Aug 2011 04:12 GMT
Infinite 8-bit Platformer Alpha entries/infinite-8-bit-platformer-alpha https://mccormick.cx/news/entries/infinite-8-bit-platformer-alpha After nearly two and a half years of development (longer if you include prototypes), I am releasing the alpha binaries of Infinite 8-bit Platformer for Windows and Mac. Linux users can of course continue to use the source, Luke.

Alpha screen

I guess there is not much else to say. This is a kinda big deal for me. I would really appreciate it if you share this around!

Let me know what you think!

]]>
/tags/infiniteplatformer Tue, 24 May 2011 10:39 GMT
USA Workshops entries/usa-workshops https://mccormick.cx/news/entries/usa-workshops Americans! In just over a week I will be in the USA, visiting New York City, San Diego, and Los Angeles to give some workshops, take part in a panel and a gig. This is mostly for pd_LAunch, a family friendly grassroots festival of Pure Data hacking in LA, organised by Joe Deken and Theron Trowbridge. I am really looking forward to it.

A Pure Data patch

Here is my itinerary:

futuristic buildings

For Infinite 8-bit Platformer fans this unfortunately means that the beta-builds must go on hold for a few weeks. There is one more network bug that was uncovered recently that I need to fix before releasing the builds, so that probably won't happen until I return home in early May. That will teach me to make promises and deadlines when it comes to spare time software projects.

If you are a tech/maker/software/puredata/infiniteplatformer fan/geek/contractee and are located in these times and places and want to catch up for a beer in between festivities, feel free to contact me.

]]>
/tags/infiniteplatformer Mon, 11 Apr 2011 03:57 GMT
Infinite 8-bit Platformer commit record broken entries/infinite-8-bit-platformer-commit-record-broken https://mccormick.cx/news/entries/infinite-8-bit-platformer-commit-record-broken Cool, I just broke my previous record for number of commits to the Infinite 8-bit Platformer codebase in one month! 40 commits and there are still 5 days left in February.

Infinite 8-bit Platformer commits graph for February 2011

The good news is that I think this baby is almost ready for beta-release candidate one. With just 6 items left in the TODO list, I'm getting very excited!

Infinite 8-bit Platformer screenshot for version 252 February 2011

(Perhaps the kind reader and Infinite 8-bit Platformer fan will overlook the previous three months of childbirth related decompression in which not a single commit was made. :] )

"It's done, when it's done." -- John Carmack

]]>
/tags/infiniteplatformer Fri, 25 Feb 2011 14:25 GMT
CanOfBeats in the Android Market entries/canofbeats-in-the-android-market https://mccormick.cx/news/entries/canofbeats-in-the-android-market CanOfBeats running on Android

There's a good reason I haven't been posting many squeakyshoecore tunes lately, or making much progress on my video game Infinite8BitPlatformer. I've been hacking hard in my spare time, and the good news is that CanOfBeats, my algorithmic hiphop beat generator, is now available for Android phones and devices! So if you are seeking beats and you rock an Android phone, help an indie developer out and get yrself a copy from the Android Market.

Enjoy!

]]>
/tags/infiniteplatformer Sun, 26 Sep 2010 16:51 GMT
Cross Platform Build Script for Python Apps entries/cross-platform-build-script-for-python-apps https://mccormick.cx/news/entries/cross-platform-build-script-for-python-apps Hello!

Here is the build script which I use for deploying my apps such as Infinite8BitPlatformer on Windows and OSX. I have used it to build both Pygame and wxWindows apps in the past. "Cross platform" might be a bit of a misnomer; you need to run it on the environment you are targetting (e.g. be on Windows to build for Windows) and have the correct environment, libraries etc. installed, but the same script should work on both platforms.

For notes about installing Python libraries into somewhere other than the default Python root directory, see this earlier post.

Please pay attention to the comments marked NOTE.

### Cross platform (win32, mac) build script
### By Chris McCormick <chris@mccormick.cx>
### This has worked with pygame and wx
### This script is public domain

from setuptools import setup
from sys import platform, argv
import os
from shutil import rmtree, copytree
import zipfile

# NOTE: you may want to change these next few lines to set these values manuall
# get the current bzr version number of this build
from bzrlib.branch import Branch
revno = Branch.open(".").revno()
# get the name of the project/app from the name of the current directory
app = os.path.basename(os.getcwd())

# remove the build and dist directories
def clean():
    print "Removing build and dist directories"
    for d in ["build", "dist"]:
        if os.path.isdir(d):
            rmtree(d)

clean()

# the default os string and extension for each platform
platforms = {
    "darwin": ("osx", ".app", "dist/" + app + ".app/Contents/Resources"),
    "win32": ("windows", "", "dist"),
}

# more convenient representation of the platform config
config = {
    "os": platforms[platform][0],
    "extension": platforms[platform][1],
    "resources": platforms[platform][2],
    }

# NOTE: this is optional, you might want to remove this bit
# output the correct VERSION file for this build
print "Writing VERSION file"
version_file = file(os.path.join("resources", "VERSION"), "w")
version_file.write("%s\n%s\n%s\n" % (revno, config["os"], config["extension"] + ".zip"))
version_file.close()

### PLATFORM SPECIFIC SECTION ###

# mac osx
if platform == "darwin":
    # add mac specific options
    options = {
        # NOTE: you may want to put other libraries in here, such as wx for wxWindows apps
        # some libraries need forcing
        'includes': ['simplejson', 'pygame'],
        'resources': ['resources',],
        'argv_emulation': True,
        'iconfile': 'resources/icon.icns',
        'semi_standalone': False,
    }

    # force the py2app build
    argv.insert(1, "py2app")

    # setup for mac .app (does the actual build)
    setup(
        setup_requires=['py2app'],
        app=[app + ".py"],
        options={'py2app': options},
    )
elif platform == "win32":
    import py2exe

    # hack to include simplejson egg in the build
    import pkg_resources
    # NOTE: this bit is manually copying the simplejson egg into the current directory
    # you may want to manually import other libraries here
    # some libraries need forcing like this
    eggs = pkg_resources.require("simplejson")
    from setuptools.archive_util import unpack_archive
    for egg in eggs:
        if os.path.isdir(egg.location):
            copytree(egg.location, ".")
        else:
            unpack_archive(egg.location, ".")
            rmtree("EGG-INFO")

    # windows specific options
    options = {
        "script": app + ".py",
        # NOTE: assumes your icon is in a folder called resources and is called 'main.ico'
        "icon_resources": [(1, os.path.join("resources", "main.ico"))],
    }   
    resources = ['resources',]

    # force the py2exe build
    argv.insert(1, "py2exe")

    # setup for windows .exe (does the actual build)
    setup(
        setup_requires = ['py2exe'],
        windows=[options],
    )

    # manually copy resources as I couldn't get it to happen with py2exe
    for r in resources:
        print 'Copying resource "%s"' % r
        copytree(r, os.path.join("dist", r))

    # get rid of simplejson directory
    # NOTE: if you manually forced other libraries above you'll probably want to remove them here
    rmtree("simplejson")

### PLATFORM SECTION DONE ###

# zip up our app to the correctly named zipfile
def recursive_zip(zipf, directory, root=None):
    if not root:
        root = os.path.basename(directory)
    list = os.listdir(directory)
    for file in list:
        realpath = os.path.join(directory, file)
        arcpath = os.path.join(root, file)
        print "Zipping:", arcpath
        if os.path.isfile(realpath):
            zipf.write(realpath, arcpath)
        elif os.path.isdir(realpath):
            recursive_zip(zipf, realpath, arcpath)

outfilename = "%s-%d-%s%s.zip" % (app, revno, config["os"], config["extension"])
zipout = zipfile.ZipFile(outfilename, "w")
recursive_zip(zipout, os.path.join("dist", platform == "darwin" and app + config["extension"] or ""))
zipout.close()

# clean up afterwards
clean()

# output the build-finished message
print "--- done ---"
print "Created %s" % outfilename

You should probably use Esky instead of this script.

]]>
/tags/infiniteplatformer Sun, 12 Sep 2010 11:04 GMT
PyConAU 2010 Video entries/pyconau-2010-video https://mccormick.cx/news/entries/pyconau-2010-video I am ridiculously behind on blogging because of the amount of contract work I have going on at the moment (working Saturdays and weeknights until 2am - not fun!) Anyway, I'll stop whining now.

Below is a video of the talk I gave at PyCon AU at the end of June. In it I talk about my time working for London based "reactive music" company, RjDj, and also about my video game Infinite8BitPlatformer.

I haven't posted an Infinite8BitPlatformer update for ages, and I have been meaning to do so since a lot of progress has been made since my last post, but here's a quick update:

  • Multiplayer code: this is going really well. It's almost at the point of beta release.
  • Contributors: another person has started contributing to the codebase. I am hopefully going to be merging his code this weekend. Julian has put basic chat into the multiplayer code, among other tweaks and bugfixes, and a huge amount of very useful information for other people looking to contribute. He's been very patient about my lack of time!

Anyway, back to work.

]]>
/tags/infiniteplatformer Sat, 31 Jul 2010 06:15 GMT
Ludum Dare #17 entries/ludum-dare-17 https://mccormick.cx/news/entries/ludum-dare-17 I am taking part in the Ludum Dare #17 48 hour game challenge this weekend, and hence taking a bit of a break from Infinite8BitPlatformer programming this weekend. Follow me on the competition blog if you're interested! I will be releasing all of the sourcecode from my game at the end of the competition.

Incidentally, I have fixed up many of the Infinite8BitPlatformer bugs that were reported during the pre-alpha, and had some more great contributions from Crispin, such as a spray-can tool for in-game editing and some fun levels. Also last week I finished a bunch of tweaks, features, and bug fixes on the PodSixNet code, so next on the agenda is the multi-player code. Hopefully I'll be able to fit that in around the contract work I have on next week. Exciting stuff!

Anyway, back to the competition.

]]>
/tags/infiniteplatformer Sat, 24 Apr 2010 06:58 GMT
Infinite8BitPlatformer - Crispin's World entries/infinite-8bit-platformer-crispins-world https://mccormick.cx/news/entries/infinite-8bit-platformer-crispins-world

Wow, today marks a huge milestone in the life of Infinite8BitPlatformer, thanks to my friend Crispin. He's written some code which adds a line tool to the existing suite of pencil and fill tools, and he created a level with it. This is the very first substantial code submitted from someone else, and the very first user contributed level, and the game isn't even released yet! In case you can't tell, I am super excited.

This was also the first opportunity for me to experience the proof-of-concept of exploring a level someone else created. I must admit that it lived up to my expectations. Running around in the new level, exploring, and finding items was a genuinely enjoyable experience, and one I can't wait to repeat many more times as the game matures and gets further contributions. Good times.

Thanks, Crispin!

PS The game is currently in pre-alpha testing. If you'd like to try it out, drop me an email and I'll send you the link.

]]>
/tags/infiniteplatformer Wed, 14 Apr 2010 05:02 GMT
Infinite 8-bit Platformer commit graph entries/infinite-8bit-platformer-commit-graph https://mccormick.cx/news/entries/infinite-8bit-platformer-commit-graph Staying motivated on your personal side projects is really quite hard! Moose and I have moved closer to the city, so now I have a bit more time and space and have been hacking on Infinite 8-bit Platformer again. Here is a graph of commits-per-month on the project:

Infinite Platformer commits per month to March 2010

I prefer to think of them as "experience points" rather than commits, because making games should be the meta game. :)

I also made a page on the website where you can see the commit log.

I set up a twitter stream for the commits too: http://twitter.com/infinite8bit, and also an identi.ca account if you're that way inclined: http://identi.ca/infinite8bit

You can subscribe to the RSS feed of those commit messages: http://twitter.com/statuses/user_timeline/121975057.rss

click for detail

On my current contract with RjDj I have to work as close to London time as possible, so this means that I have some mornings somewhat free, and I've been spending the hours between 8am and 11am drinking coffee and working on my game.

As you can see, even at the beginning of this month there have been almost as many commits as there were last month, hooray! There are 37 line-items left in the TODO file at the moment. My rule of thumb is about two line-items per working day. If I can work at roughly 3 half-days per week I should have the beta release ready for testers in about three months. That's assuming that the networking library I previously wrote, PodSixNet, is up to the task of linking everyone together into some kind of platformy MMO goodness. If I do a release without the networking stuff it means I can get something in front of people in probably one month. That's a very motivating thought! The important thing is that I don't rush myself though. Slow software development makes better quality software (although implemented software is better than vapourware).

I have found that the best way to stay motivated is never to feel guilty about not working on something. If I don't feel like it I just forget about it and do something else. Eventually if the project is worth it I'll get excited about it and naturally come back to work on it again. Judging by the graph, that seems to be exactly what happens. Some months I leave it entirely (zero commits), but over the long term progress continues because somewhere deep inside I know this project is worth it. One of life's great lessons is that at some point we must always let go of the things we love, and I think this really applies to staying motivated about projects too!

Ok, time to write some more code. :)

Boring stuff

Here is the very small bash shell script which produces the csv file used to generate the graph (unfortunately it skips empty months so you have to add those manually):

#!/bin/sh
bzr log --short --forward | sed -n -e 's/.*\([0-9]\{4\}-[0-9]\{2\}\).*/\1/p' | uniq -c | sed -n -e 's/\ *\(.*\)\ \(.*\)/\2\,\1/p'

Here is a very small bash shell script that I wrote for turning emails into tweets:

!/bin/sh
header="START"
# concatenate all lines (ignore email header)
while read line; do
    if [ "$header" == "" ]; then
        message=`echo $message $line`
    else; header=$line
    fi
done
# post to twitter
wget -O - --user=xxxx --password=xxxx --post-data="status=$message" https://twitter.com/statuses/update.xml

That last line is a handy one-liner for posting to twitter!

To post to identi.ca, change the url to "identi.ca/api/statuses/update.xml".

]]>
/tags/infiniteplatformer Fri, 12 Mar 2010 02:11 GMT
Infinite8BitPlatformer news entries/infinite-8bit-platformer-news https://mccormick.cx/news/entries/infinite-8bit-platformer-news Three bits of news to do with Infinite 8Bit Platformer.

  • I finally found some time and motivation to work a little bit on it. I made some icons to replace the ugly text buttons and had to write an image based radio-button class to support that. Here's a half-size screenshot of the new icons:

Infinite 8Bit Platformer

  • I've decided to release the source code to the game under a GPL license. Some of the library code which I've used in other projects will be released under an LGPL license. You can find bzr repositories of both codebases here.

  • I am looking for contributors to help me bring the game to completion along the lines of my massively-multiplayer-user-created-content-platformer vision. If you're interested in joining the effort, email me and I'll put you on the dev mailing list we have going. Feel free to check out the code, look at the TODO list and start hacking. Patches welcome!

I really need to do a lot more work on the website, like integrating a forum, blog feeds, and authentication. Next thing in the TODO list is a save button for saving the level you are working on. Should be pretty easy so I'm going to use it to try and stay engaged with the codebase.

]]>
/tags/infiniteplatformer Sun, 18 Oct 2009 14:10 GMT
Infinite 8-bit Platformer entries/infinite-8-bit-platformer https://mccormick.cx/news/entries/infinite-8-bit-platformer I was having a really dull time trying to port my GameJam0509 entry to anything other than the development platform, Debian GNU/Linux. I managed to get it running under Mac OSX 10.5, but Windows was giving me a really hard time, so I've done is what any self-respecting internet slacker would do and made a game trailer instead. This is all ingame footage (sorry about the low framerate but the game is heartily unoptimised).

The Infinite 8-Bit Platformer concept is an idea I had ages ago, and the basic game design is this:

  • There is no shooting or killing in this game. The primary game mechanics are exploratory and social. You can run, jump, go through portals to new levels, and collect things.
  • Content is user generated. As you can see in the video, the game includes an in-game editor. You can edit levels, portals (connections between levels), and items.
  • It's massively multiplayer in the same way that a MUD is massively multiplayer. As you explore the levels you can see other people doing the same, and you can stop and chat with them, give them items, etc. (this bit isn't implemented yet).

So basically I was hoping that if enough people used the game enough we'd end up with a massive, social, network connected platformer which you could explore for hours and hours, always finding new and interesting things, places, and people. Maybe I'll finish it one day, we'll see. In the meantime, all there is is this trailer and blog post. :)

Anyway, one things that GameJam0509 taught me is that the old way of making games kind of bites, and the web based entries kicked butt. From now on I think I'm going to try and do game development in the open, on the web.

]]>
/tags/infiniteplatformer Sun, 19 Jul 2009 17:55 GMT
GameJam0509 entries/gamejam0509 https://mccormick.cx/news/entries/gamejam0509 GameJam0509

This screenshot is as far as I got during the latest GameJam, which has been running in my home town, Perth. I joined remotely from here in London, but unfortunately I just didn't manage to squeeze in the time to make the game I was hoping to. I did manage to advance the MinimalistPlatformer codebase quite a bit further than it was towards the larger platformer game I have cooking away in the back of my mind though, so that's quite positive. Hopefully I'll get some more time to continue this work, and maybe even produce some binaries of my GameJam entry at some point.

]]>
/tags/infiniteplatformer Sun, 17 May 2009 22:24 GMT