Chris McCormick - News - games http://www.mccormick.cx/news/tags/games Chris McCormick - News - games en Copyright 2008- Chris McCormick 60 GMT chris@mccormick.cx www.mccormick.cx/news/ Global Game Jam 2012 - postmortem entries/global-game-jam-2012-postmortem http://www.mccormick.cx/news/entries/global-game-jam-2012-postmortem Here is what I ended up with at the end of GGJ 2012. I've cleaned it up a bit, got it working under Internet Explorer (mostly) and put it online here.

Screen shot of commit 31

I ended up with more of a virtual world or virtual ecosystem than a video game. I ran out of time to put probably the most important thing into the game - game mechanics. Also no time for sound, the player has very little agency in the world, and there are no win or lose conditions.

Overall it was a lot of fun to build though, and I got some pretty neat new technology for jsGameSoup out of it, namely the isometric camera library, and a lightweight vector math library.

GGJ was also really fun just because of the social aspect of being crammed into a room with like minded people for 48 hours. Can't wait for next year!

]]>
/tags/games Wed, 01 Feb 2012 14:17 GMT
Global Game Jam 2012 - day 2 entries/global-game-jam-2012-day-2 http://www.mccormick.cx/news/entries/global-game-jam-2012-day-2 End of Saturday night, day two:

The Cycle - day two

Got some sleep. Lots of on the TODO list for today. About 7 hours left. :)

]]>
/tags/games Sun, 29 Jan 2012 02:21 GMT
Global Game Jam 2012 - day 1 entries/global-game-jam-2012-day-1 http://www.mccormick.cx/news/entries/global-game-jam-2012-day-1 The theme is "Ouroboros". Progress as at midnight day 1:

The Cycle - title screen

The Cycle - current gameplay

I have a reasonably concrete idea of where I am going. Hopefully there will be time to iterate on my idea and "find the fun".

]]>
/tags/games Sat, 28 Jan 2012 03:26 GMT
Global Game Jam 2012 entries/global-game-jam-2012 http://www.mccormick.cx/news/entries/global-game-jam-2012
  • jsGameSoup super mega fun pack - CHECK
  • back to back NOFX records - CHECK
  • 48hr coffee supply - CHECK
  • I am ready for Global Game Jam, Perth 2012!

    Not going to globalgamejam? Check out Wai-con - it was a lot of fun last year and the costumes and atmosphere are enjoyable even if you are not that into anime.

    PS I'll probably throw on a little bit of Disasterpeace too. :)

    ]]>
    /tags/games Fri, 27 Jan 2012 08:17 GMT
    Coherent Noise in jsGameSoup entries/coherent-noise-in-jsgamesoup http://www.mccormick.cx/news/entries/coherent-noise-in-jsgamesoup Recently I added Sean McCullough's Javascript implementation of the Perlin noise algorithms to jsGameSoup. These Academy Award winning algorithms by Ken Perlin are fantastic for adding procedural content to your games.

    Simple noise generated RPG map

    The RPG map above with grass, water, road, sand, and tree tiles represented in the different colours, was produced with the simplex noise demo here. It can randomly generate a basically infinite number of unique RPG maps of basically infinite size. Check the jsGameSoup documentation for more details.

    ]]>
    /tags/games Tue, 24 Jan 2012 13:50 GMT
    Will Phobos Grunt Hit My Head? entries/will-phobos-grunt-hit-my-head- http://www.mccormick.cx/news/entries/will-phobos-grunt-hit-my-head- Worried an out-of-control Russian satellite may land upon your head?

    ]]>
    /tags/games Sun, 15 Jan 2012 15:27 GMT
    A* Path Finding for jsGameSoup entries/astar-path-finding-for-jsgamesoup http://www.mccormick.cx/news/entries/astar-path-finding-for-jsgamesoup A* Path finding algorithm demo in jsGameSoup

    I have included a modified version of Benjamin Hardin's 2009 A* implementation in jsGameSoup. This is a nice general way for entities in your game to find a path between two squares on a two dimensional board with some obstructed squares. Check the demo here and the documentation here.

    Have fun!

    ]]>
    /tags/games Sat, 14 Jan 2012 10:25 GMT
    D-Link DNS-320 ShareCenter NAS review entries/dlink-dns-320-sharecenter-nas-review http://www.mccormick.cx/news/entries/dlink-dns-320-sharecenter-nas-review This thing is great. I got it from VTech Industries for about $220 AUD. It is basically a mini GNU/Linux server with 2 giant hard drives in it. That price gets you a single 1TB drive and you can install your own drive in the other bay by removing the lid and dropping it in place. The unit, pictured below, is a bit taller and wider than three PC hard drives stacked together.

    DNS-320

    It comes with a reasonable web interface you can access over your LAN, but I installed the fun_plug hack on it by copying the files across the network and restarting the device - easy. That hack gets you SSH access, rsync, and a bunch of other Linuxy stuff.

    We are storing our media and backups on it and it is basically perfect for that use-case. I now once again have a cron-and-rsync based regular backup of all of my servers in the USA, hooray! I'm also routing all SSH traffic to our ADSL router through to it so I can access the files on the device from outside our network if neccessary.

    All in all I am very pleased with this purchase.

    ]]>
    /tags/games Tue, 03 Jan 2012 01:58 GMT
    We can do this entries/we-can-do-this http://www.mccormick.cx/news/entries/we-can-do-this fighty-dude.png

    inspiration here

    ]]>
    /tags/games Thu, 29 Dec 2011 00:38 GMT
    Your Handwriting as a Web Font entries/your-handwriting-as-a-web-font http://www.mccormick.cx/news/entries/your-handwriting-as-a-web-font If you visit my website you will notice everything is in a scrawly hand-written font now. This is a digitized version of my own handwriting. Here is how I produced it:

    • Went to YourFonts and printed the templates twice.
    • Scanned both copies, used the best version of each letter, and tweaked some stuff in an image editor.
    • Uploaded the templates, paid $15, and downloaded the resulting TTF file.
    • Tested it out on my blog (see the cross-browser CSS font-face declaration below).
    • Loaded up the TTF in font forge and tweaked more stuff.

    To get it as a web useable font:

    • Use a program called ttf2eot to create a web font file that Internet Explorer likes.
    • Use the following CSS font-face declaration, which works on pretty much all mainstream browsers including Internet Explorer 6.

    Font-face declaration:

    @font-face {
        font-family: 'MyFont'; /* Use the real name of your actual font */
        src: url('MyFont.eot');
        src: url('MyFont.eot?#iefix') format('embedded-opentype'),
        url('MyFont.ttf') format('truetype');
    }
    

    You can do this with basically any TTF font, but watch out for the legal implications of using commercial fonts on the web. It's obviously fine to do it with a font of your own handwriting. There are probably lots of other free fonts you can do it with too, but read the licensing information first.

    Here's to more flexible web typography!

    ]]>
    /tags/games Fri, 02 Dec 2011 00:10 GMT
    Piwik Web Analytics Is Great entries/piwik-analytics-software http://www.mccormick.cx/news/entries/piwik-analytics-software Looking for a good open source Software Libre alternative to Google Analytics? I can't recommend Piwik highly enough.

    Piwik graph example

    • Setup was easy - PHP & MySQL with a simple web based installer.
    • Basic mechanism is similar to G.A. - add a code snippet to the bottom of your HTML code and you are done.
    • Reporting seems more comprehensive than G.A. - all kinds of interesting data, visitor trails, etc.
    • Take back ownership of your stats data!

    Have fun.

    ]]>
    /tags/games Thu, 01 Dec 2011 04:57 GMT
    I Am Back entries/i-am-back http://www.mccormick.cx/news/entries/i-am-back Calm down, Internet, I am back! My server had a small mishap.

    My new hosting provider is much more reliable than my old one. Hooray!

    My new one is called prgmr.com and they are great.

    I have also taken the opportunity to redesign my website. I hope you like it.

    ]]>
    /tags/games Sat, 26 Nov 2011 13:38 GMT
    WApp submission entries/wapp-submission http://www.mccormick.cx/news/entries/wapp-submission pocketloops-design.png

    Today I submitted this PocketLoops prototype app to the Univation WApp competition.

    This builds on my PdDroidParty work, which is the engine of the app (as well as the impending CanOfBeats re-release!).

    Fun mobile-music times. :)

    ]]>
    /tags/games Fri, 07 Oct 2011 03:56 GMT
    Openness is the Only Usability Feature That Matters entries/openness-is-the-only-feature http://www.mccormick.cx/news/entries/openness-is-the-only-feature Android versus iOS use amongst Stackoverflow users

    ]]>
    /tags/games Wed, 21 Sep 2011 01:03 GMT
    PyConAU 2011 talk entries/pycon-2011-talk http://www.mccormick.cx/news/entries/pycon-2011-talk

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

    ]]>
    /tags/games Tue, 23 Aug 2011 11:44 GMT
    Finite-State Machines in jsGameSoup entries/finite-state-machines-in-jsgamesoup http://www.mccormick.cx/news/entries/finite-state-machines-in-jsgamesoup A finite-state machine is an algorithmic structure which is frequently useful in video games. A finite-state machine can be used to simulate any game entity which has a set of discrete states which it changes between, and which looks different and/or exhibits different behaviour in each of those states. Here are some examples:

    • A non-player character which wanders around and then starts chasing the player once they come in range.
    • A door which switches between closed, opening (animated), and open states.
    • A spacecraft under player control which has an proximity-triggered docking procedure.

    Public domain image of a finite-state machine from Wikipedia

    Many video game entities can be most easily modelled in this way. In jsGameSoup it is now very easy to create state machines like this. Simply include "statemachine.js" in your HTML file:

    <script src="jsGameSoup/js/statemachine.js"></script>
    

    Then call the statemachine() function on an entity inside it's constructur:

    function MyEntity() {
        statemachine(this);
        ...
    }
    

    After that your entity will have a new method set_state(state) which switches it between different arbitrary states. These states are completely up to you. You can define different behaviours, events, and visual representations by creating multiple versions of jsGameSoup's normal expected methods. For example, let's say the entity above has a state "wandering" and a state "seeking" when it is moving towards the player. In this case we would define two different sets of methods:

    /****** Update and draw this entity in the wandering state. ******/
    
    this.wandering_update = function() {
        // update the entity in "wandering" mode
        ...
    }
    
    this.wandering_draw = function() {
        // draw the entity in "wandering" mode
        ...
    }
    
    /****** Update and draw this entity in the seeking state. ******/
    
    this.seeking_update = function() {
        // update the entity in "seeking" mode
        ...
    }
    
    this.seeking_draw = function() {
        // draw the entity in "seeking" mode
        ...
    }
    

    When you want to put the entity into a particular state, you call set_state(state), for example in the init() method of the entity to put it into a certain state from the start:

    this.init = function() {
        this.set_state("wandering");
    }
    

    Here is an example of a jsGameSoup entity class which switches between a "chill" and an "antsy" state. View source to see how it works.

    Hopefully this will help you write games and get them infront of players more quickly.

    Screenshot of an old game

    ]]>
    /tags/games Sun, 07 Aug 2011 06:04 GMT
    MineAscender - is it fun? entries/mineascender-is-it-fun http://www.mccormick.cx/news/entries/mineascender-is-it-fun

    I wrote this game in a few hours today using jsGamesoup.

    Is it fun? I would like to know what you think.

    (Inspired by SpoutDS).

    ]]>
    /tags/games Tue, 26 Jul 2011 15:06 GMT
    jsGameSoup.net does audio entries/jsgamesoup-weekend http://www.mccormick.cx/news/entries/jsgamesoup-weekend Guitar amplifier

    That's right, the jsGameSoup library now plays sound effects samples on all supported platforms, right back to Internet Explorer 6. I also registered the domain name jsgamesoup.net - hooray!

    With graphics and sprite animation, collisions, random number generation, sound effects, vector math, physics, and network, I think we pretty much have developing games for the web covered.

    Enjoy, and remember to view the source!

    ]]>
    /tags/games Sat, 25 Jun 2011 01:42 GMT
    jsGameSoup physics and vector math demos entries/jsgamesoup-physics-and-vector-math-demos http://www.mccormick.cx/news/entries/jsgamesoup-physics-and-vector-math-demos I've updated the jsGameSoup project with a couple of new demos showing how to integrate it with some 3rd party libraries that are useful for making video games.

    The first demo shows how to integrate the sylvester.js library. This is a great little single-file Javascript library that covers the basic vector and matrix math nicely. Check out the attractors demo, and don't forget to view source!

    Vector math with Sylvester screenshot

    The second demo was created by Nick Lowe and it shows off the Box2d.js physics engine integrated with jsGameSoup. Check it out! I'm really happy to have such a robust and popular 2d physics engine working along side jsGameSoup in the browser. Great stuff!

    ]]>
    /tags/games Fri, 17 Jun 2011 13:54 GMT
    jsGameSoup documentation update entries/jsgamesoup-documentation-update http://www.mccormick.cx/news/entries/jsgamesoup-documentation-update jsGameSoup logo I've made some updates to the jsGameSoup documentation, specifically the quickstart instructions and also how to get things working under older versions of Internet Explorer. Check it out if you are making video games on the web and you love freedom! :)

    ]]>
    /tags/games Sun, 12 Jun 2011 14:54 GMT
    Infinite 8-bit Platformer Alpha entries/infinite-8-bit-platformer-alpha http://www.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/games Tue, 24 May 2011 10:39 GMT
    Infinite 8-bit Platformer commit record broken entries/infinite-8-bit-platformer-commit-record-broken http://www.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/games Fri, 25 Feb 2011 14:25 GMT
    Google as a game console giant entries/google-as-a-game-console-giant http://www.mccormick.cx/news/entries/google-as-a-game-console-giant How Google could become a game console heavyweight to rival the likes of Nintendo, Microsoft, and Sony:

    • Supply USB gamepad drivers for Android OS (this code is actually already in the GNU/Linux kernel underneath Android OS).
    • Put joystick hooks into the Android Java API and market this fact to developers.
    • Encourage TV retailers to sell branded USB gamepads as add-ons with their Android based set-top boxes and TVs.

    Atari by Great Beyond - tonyjcase on flickr

    Developers could then put joystick support in their games, and people could play said games on their TVs through their Android OS set-top boxes. USB Gamepads are a stable, cheap, and robust technology which everyone understands.

    This may result in a new indie console gaming golden age, with all of the wonderful new indie games of recent years running in peoples' lounge rooms on their TVs just like in the 80s. Admit it, wouldn't you love to sit cross legged together under the TV and return to the days of Sonic the Hedgehog, Mario Bros., Alex Kidd, Commander Keen, and friends? Only newer, and cheaper, and open, and network multiplayer. Oh boy, that is a vision I find irresistable!

    A guy can dream, right?

    ]]>
    /tags/games Fri, 28 Jan 2011 00:43 GMT
    Pselodux - Walk Like An Equation entries/pselodux-walk-like-an-equation http://www.mccormick.cx/news/entries/pselodux-walk-like-an-equation In 2004 my friend Rob gave me a CD containing his latest work, a chiptune style album he had just written called Walk Like An Equation. I stuck it on my mp3 player and it stayed there all summer. It was the summer of quitting my dreary office job to go freelance, returning to computer studies, riding my BMX around the city in the sun, drinking beer, and listening to this album. It is still one of my favorite albums of all time, and he has now uploaded it for everyone to enjoy on Bandcamp. It's absolutely killer, so go download it now!

    ]]>
    /tags/games Wed, 26 Jan 2011 08:24 GMT
    Drawing is the new writing entries/drawing-is-the-new-writing http://www.mccormick.cx/news/entries/drawing-is-the-new-writing I have started a new blog here which is basically just images straight from my phone. I figured out the fastest way to get things from my eyeballs straight onto the internet. It goes like this:

    • Take photos with phone.
    • Email photos from phone to an address on my server, which forwards:
    • To a gmail address, where it goes to Google Buzz.
    • To a special Wordpress email address which posts the pictures to the blog.
    • The Wordpress thing also posts the pictures on Twitter and Facebook.

    What I love about this was I didn't have to write any code to make it happen, but it still uses open source components and my own server. It's also ridiculously convenient which is very important when you have a newborn. I don't have to rely on some horrible corporation (they are just some of the end-points where the stuff arrives). I am a pretty huge fan of things which involve writing less code.

    If you like images, feel free to subscribe to the RSS feed. I promise it won't all be photos of my wonderful daughter. :)

    Now I am going to post some drawings I scribbled.

    PS Here is another cool internet thing someone did for selling stuff on the internet without writing any code. It came from Warren Ellis' blog.

    PPS another thing is what I am reading and sharing on Google Reader, which is here.

    ]]>
    /tags/games Sun, 16 Jan 2011 14:24 GMT
    Seriously Sound System Interviews entries/seriously-sound-system-interviews http://www.mccormick.cx/news/entries/seriously-sound-system-interviews Here are a couple of interviews I did in preparation for playing squeakyshoecore at the Seriously Sound System festival at Hyde Park, Western Australia, this Saturday the 18th of December, 2010 at 12:40pm.

    This is an mp3 of the radio interview I did with Peter Barr for local radio station RTRFM

    This is a magazine interview I did for Drum Media Perth; sorry it is a graphic. here is the Flash applet source of this excerpt.

    Enjoy!

    More links:

    ]]>
    /tags/games Fri, 17 Dec 2010 04:36 GMT
    squeakyshoecore: New tunes, interview, live set entries/squeakyshoecore-new-tunes-interview-live-set http://www.mccormick.cx/news/entries/squeakyshoecore-new-tunes-interview-live-set Hello! I've uploaded two new tunes to the squeakyshoecore album of algorithmic acid. They are called ring singularity and prolate spheroid. Get yr rave on here. Incidentally, you might like to type the names of the squeakyshoecore songs into the search bar of Wikipedia. They are all named after fascinating science and mathematics topics.

    upside down squeakyshoecore shoe

    On the 18th of December, I will also be playing a live gig in Hyde Park, Perth. I will be using the GarageAcidLab algorithms that I use to make squeakyshoecore here in Perth, Western Australia as part of the Seriously Sound System music festival organised by the local radio station, RTRFM. I am on just after midday at 12.40 in the afternoon. It should be a lot of fun!

    Leading up to that I will be interviewed on that radio station at 8am local time this Friday the 10th of December. If you are not awake for it (like me), or you don't live in Western Australia, you can listen to the podcast, which I'll post here afterwards if I can figure out where it is.

    Kampai!

    ]]>
    /tags/games Thu, 09 Dec 2010 16:06 GMT
    Disapora first run entries/diaspora-first-run http://www.mccormick.cx/news/entries/diaspora-first-run Diaspora is the new social network effort by a group of hackers who are building a Free Software implementation of something like Facebook, or Google Buzz, but in a decentralised, open source, privacy aware way. Here are the things that I think are really promising about it so far:

    • Your people are organised into 'aspects' which are logical groupings like in real life e.g. "family people", "work people", "people I send rude jokes to" etc. so that you won't ever post a picture of yourself drunk and naked for your grandmother to see by accident. This is baked into the interface in a completely natural way that feels right and fits with your existing mental model of your social groups. To me this is the number one killer feature that might encourage people to use it over Facebook. I was convinced that this is neccessary by the slides from this talk: http://www.slideshare.net/padday/the-real-life-social-network-v2. I think that Mark Zuckerberg's everyone-should-over-share-with-everyone-and-get-over-it philosophy of privacy is at odds with basic human nature.

    • Your 'seed' (user) is portable. If you don't like the pod (server) you started with you can easily move to a different one. This is great as you aren't locked down to a particular provider. If your social service provider stops maintaining their code, or their service is bad, or they try to snoop on people, then you can get up and leave and find a better provider and take all of your data, posts, contacts etc. with you.

    • It's decentralised. There isn't a single server or point of access like there is with Facebook and Google Buzz. This might sound like it would not work, but it does because you can friend people on other servers and it works exactly as if they were on the same server as you. You can even be the only person on your own privately run pod (server) and still network with, and see what your friends on other pods are up to. It's like email in that respect, except without the spam. Your address at a particular pod looks like an email address, so that is a concept that people already understand well.

    • It's going to link up with other social networking services like Twitter, Buzz, Facebook etc. I guess the update posting will be based on the "aspects" idea too so if you post publically then it goes out to social networks, but otherwise not. This bit isn't done yet, but I'm excited about it as it means I can stop using the other services by visiting their sites. Instead when I post something on Diaspora, I can elect to also have it tweeted or fb updated, or whatever. I am not sure if it will be two-way so that you could also read your friends Facebook status updates from your diaspora instance, but that would be very cool if they can pull it off. That would provide a big incentive for people to switch as they can maintain their existing networks.

    • Encryption of your data keeps it away from snooping sysadmins. You don't have to completely trust whoever is hosting your account, and the fact that Google and Mark Zuckerberg don't own your data and they can't "mine" it for their own benefit, is another big feature for me. My social graph is not a corporate asset.

    People have said to me "but nothing can kill Facebook now, it's too big." I beg to differ for two reasons:

    • I've had internet access since about 1995, and I have seen a ton of protocols come and go, even ones that literally everyone on the internet used. Remember BBSes, Gopher, Archie, news groups, ICQ, IRC, etc. etc.? Yes, most of them are still around, but the majority of internet users don't use them any more. There is no doubt in my mind that the same thing can happen to Facebook.

    • Facebook is not the only social network. There are a ton of others and some of them come close to rivalling it in size. In some countries other networks have a larger presence than Facebook does. I think that people will follow two things to new software: a) their friends b) features. I think that privacy features are important to people, good ideas spread virally, and friendship groups will stick together across networks.

    • The internet is built on competition between software and protocols. It's a thriving environment in which the most evolved software is selected by users and survives in the long run. I believe that even if Diaspora is not it, something better than Facebook will come along and unseat it. Historically speaking it's the open and free systems and software that survive the best and longest in the network environment.

    Because it's Free Software following the "release early, realease often" development model, Diaspora is buggy and insecure and lacking in features right now, but I think it holds huge promise. In the few days I have had it running I've already seen bugfixes and features going in at a tremendous rate. I'm going to continue hosting my own pod and fingers crossed, maybe I'll meet you in the Diaspora universe one day soon.

    "They trust me - dumb fucks." -- Mark Zuckerberg

    ]]>
    /tags/games Fri, 19 Nov 2010 06:46 GMT
    squeakyshoecore articles etc. entries/squeakyshoecore-articles-etc http://www.mccormick.cx/news/entries/squeakyshoecore-articles-etc I've recorded the sixth tune, "Oval BA", for the squeakyshoecore algorithmic acid album. Click the shoe to have a listen!

    Here are some articles that nice people have written about squeakyshoecore:

    To use GarageAcidLab (the engine used to make squeakyshoecore) on your Android phone or on your PC with Pure Data, click here:

    ]]>
    /tags/games Fri, 12 Nov 2010 12:04 GMT
    FallingGame jsGameSoup demo - updated entries/fallinggame-jsgamesoup-demo http://www.mccormick.cx/news/entries/fallinggame-jsgamesoup-demo Update: There appears to be some weird bug on WebKit (at least in Chrome) making objects randomly not get drawn in both demos. Will have to figure this one out!

    Update 2: The WebKit bug is now fixed and was due to the strage fact that Array.sort is unstable in WebKit - one to remember. Have fun!

    jsGameSoup logo - a bowl and chopsticks

    Here's another demo built using my HTML5 and Javascript game engine, jsGameSoup.

    I also updated the AsteroidsTNG demo to support collisions so that the ship no longer passes through the asteroids.

    I'm finding it pretty fun to fly around this almost infinite asteroid field finding interesting little places amongst the virtual space rocks. I really want to add some kind of multiplayer component to this demo.

    After these changes jsGameSoup now has the following new features:

    • Collision engine with support for circle, poly, and axis-aligned bounding-box (rectangle) collisions.
    • Sprite engine which is capable of basic animation.
    • Seedable random number generator, useful for procedurally generated worlds where you want the same seed to generate the same thing for everyone every time.
    • Basic support for touch on WebKit browsers (like in the iPad and Android devices).

    The collision, sprite, and random number engines are each simple and self-contained, and can be used independently of the jsGameSoup library by just including the respective javascript file in your project. If you use the library though, you also get cross platform events and robust entity management thrown in for free.

    Unfortunately I still haven't updated the documentation or the jsGameSoup page to reflect these changes. Whoops!

    ]]>
    /tags/games Sat, 06 Nov 2010 02:08 GMT
    GarageAcidLab on Android entries/garage-acid-lab-on-android http://www.mccormick.cx/news/entries/garage-acid-lab-on-android My third Android app is now available in the Android Market. Click below or use the QR code to install GarageAcidLab, an algorithmic 303 bassline generator.


    Here is a small website I made about the software, which you can also download and run inside Pure Data. It's Free Software, like most of my other work.

    This is also the set of patches that I am using to create the album squeakyshoecore.

    ]]>
    /tags/games Sun, 03 Oct 2010 10:59 GMT
    Cheap, modular, fun music devices entries/cheap-modular-fun-music-devices http://www.mccormick.cx/news/entries/cheap-modular-fun-music-devices Android music panel 1

    Android music panel 2

    Android music panel 3

    Android music panel 4

    Hope you enjoyed these drawings of my ultimate music-making dream setup. My apologies to anyone using a screen reader.

    ]]>
    /tags/games Thu, 23 Sep 2010 15:25 GMT
    Cross Platform Build Script for Python Apps entries/cross-platform-build-script-for-python-apps http://www.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/games Sun, 12 Sep 2010 11:04 GMT
    FreePlay 2010 Postmortem entries/freeplay-2010-postmortem http://www.mccormick.cx/news/entries/freeplay-2010-postmortem FreePlay was absolutely stellar this year. This is my third FreePlay, and it's the third set of people organising the event/conference/festival here in Melbourne, Australia. Maybe it's a sampling bias, but to me it feels like there is something in the genetics of this thing that guarantees enjoyment. Just the right mix of "well organised" and "punk rock", it carries a delicious slice of the indie gaming zietgeist over here to Australia.

    That's not to say that Paul and Eve don't have anything to do with how great it was. On the contrary, it remains so great because it has come to rest in such capable and nurturing hands. These guys are green-thumbed indie gardeners, ripening a plot of earth where many tiny seeds of ideas will end up growing into lovely games. And they are such incredibly nice people too.

    A lot of the angst was gone this year. Many of us have left our jobs in industry and are doing that starving punk rock game developer thing. And it rules. The we-can-make-something-beautiful vibe was palpable. The inspiration and desire to create was so infections that I found myself reaching for the laptop to hammer out some code whenever I could, and so Infinite8BitPlatformer saw a few bugfixes and enhancements between sessions.

    Just as it was a highlight meeting Jonathan Blow in 2007, for me a highlight of this year's festival was meeting Brandon Boyer and Adam Saltsman. Brandon and Adam each brought their own brand of energy and love for the art form. I only wish I had been around to hear Petri Purho speak last year too, all of whom highlight what a great job is being done of getting critical thinkers and practitioners over here each year.

    Brandon's keynote was brilliantly emotive, and perfectly captured a sort of wistful energy for those games that don't yet exist, but could. He painted a brilliant, shimmering image of possibilities in front of our eyes, and lent us a powerful lust to coax our ideas into reality. When he pulled up a slide full of American indie record label logos from my youth, like Dischord, and Matador, and Calvin Johnson's K records, I felt a definite tugging on the heart strings, a flood of bittersweet memories, and this simultaneous realisation that hey, we are part of something as awesome as that whole thing was.

    Adam got down and dirty in the semiotics of games and redefined in our minds the level at which games and play are part of our culture, and even our evolution, our genes. Conjouring forth papers on play and games from mid-century French intellectuals and the like, he was certainly showing tight research chops. At the beginning of the talk, "war came from games" sounded very contraversial to me. At the end of the talk I was convinced.

    After hours the beer flowed, and of course that's where all of the most interesting, unrestrained conversations took place. Once again Eve and Paul's refinement shone through in their choice of venue, just around the corner from the library where the festival was going on. It's an oft-underlooked aspect of conference organisation, and usually left to the delegates to find a drinking hole where the ideas of the day can be unwound, probed, picked apart, and put back together again. At FreePlay however, this was all taken care of, and that was an excellent thing.

    So anyway, there it is. Great festival, wonderful people, with the most awesomest of organisers.

    Now it's time to create.

    ]]>
    /tags/games Wed, 18 Aug 2010 02:25 GMT
    GameJam August 2010 entries/gamejam-august-2010 http://www.mccormick.cx/news/entries/gamejam-august-2010 This weekend I have competed in Simon Wittber's GameJam. It's been a fun couple of days and nights hanging out with other nerds, programming video games. I used my Javascript/HTML5 games library jsGameSoup which meant I got the first working iteration of the game up and running after about four hours on Friday night. Saturday afternoon I polished it and tweaked the game mechanic with some good suggestions from Jack, Simon, Nick, and Jason. This afternoon I spent a few minutes getting it online and fixing bugs.

    Anyway, here is a link to the game, PingZinger. I would love to hear what you think!

    The theme of the game was "choose two at the expense of the other," which should give you some clue as to how to play the game.

    Have fun!

    ]]>
    /tags/games Sun, 08 Aug 2010 06:25 GMT
    PyConAU 2010 Video entries/pyconau-2010-video http://www.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/games Sat, 31 Jul 2010 06:15 GMT
    Squeaky Shoe Core entries/squeaky-shoe-core http://www.mccormick.cx/news/entries/squeaky-shoe-core

    I've started a new album. It is called squeakyshoecore. It is algorithmically generated acid using some software I wrote. I am going to release it online bit by bit, as I finish each track. I will announce each new track here on this blog.

    squeakyshoecore logo

    squeakyshoecore

    The software makes two different beats and two complementary melodies using random number generators and some carefully tuned algorithms for using those random numbers. The melody shaping rules involve applying a low dimensional random fractal effect on very basic seed melodies, producing a type of self-similarity which seems to sound interesting to humans. The beats are created using a variety of custom rule sets, much like my previous work with algorithmic hip-hop in CanOfBeats and my algorithmic drum-and-bass generator, GhostWave.

    After that I manually control how loud each of the parts are present in the mix, what effects are being applied to the different parts, and the parameter values of those effects. I use a midi controller to mix it in real time and record it.

    Soon I will make the latest version of the Pure Data patches ("GarageAcidLab") available online under a Free Software license.

    Enjoy the first tracks!

    P.S. Some other music I've released on the net previously is Cryptolect, end-of-millenium style chopped-up breakbeats.

    ]]>
    /tags/games Sun, 11 Jul 2010 12:55 GMT
    PyCon AU 2010 entries/pycon-au-2010 http://www.mccormick.cx/news/entries/pycon-au-2010 PyCon AU Logo

    There is a new Python conference running this year for the first time. It's in Sydney, Australia, at the end of June. I'll be speaking, and I'm very excited about attending too; there are a number of high quality topics evident in the conference schedule. I'm particularly happy not to have a clashing time slot with my friend and occasional colleague, Simon Wittber, as his talk looks fascinating. If you are into Python, you should go!

    Go to the PyCon AU 2010 website for more details.

    ]]>
    /tags/games Tue, 18 May 2010 15:22 GMT
    Ludum Dare #17 Post-mortem entries/ld17-postmortem http://www.mccormick.cx/news/entries/ld17-postmortem I recently took part in the Ludum Dare 48 hour game challenge, number 17. Here's my list of blog entries at the Ludum Dare site.

    Hovergirl

    I didn't finish a game, but it gave me a chance to experiment some more with writing games in pure Javascript in the browser. I consider the final product a reasonable proof of concept of a Sprite() class which uses div tags with background-images. I'll probably develop it some more and put it into jsGameSoup. I really need to do a speed test on various platforms, and between using div tags and canvas.drawImage.

    Graphics mockup

    Here is a link to the tech demo, which has only been tested in recent versions of Firefox, but probably works in webkit browsers too. The world is procedurally generated using perlin noise on the server side, and a seedable MWS number generator on the client side for placement of trees and stuff.

    Final screenshot

    Here is a link to the source code. There is a working bzr branch repository in the tarfile, as well as the source code itself.

    I recently started working on the multiplayer code for Infinite8BitPlatformer, so hopefully there will be a playable multiplayer demo in the not-too-distant future. What I have working is test-client connecting to the server and getting a unique ID back.

    ]]>
    /tags/games Wed, 05 May 2010 11:07 GMT
    "Thoughts on Flash" Rebuttal entries/thoughts-on-flash-rebuttal http://www.mccormick.cx/news/entries/thoughts-on-flash-rebuttal It's ridiculous that a Free Software developer like me should be defending one prorietary software maker against another, but that's the point that this whole thing has reached: ridiculousness.

    Steve Jobs, April 2010:

    I wanted to jot down some of our thoughts on Adobe’s Flash products so that customers and critics may better understand why we do not allow Flash on iPhones, iPods and iPads. Adobe has characterized our decision as being primarily business driven – they say we want to protect our App Store – but in reality it is based on technology issues. Adobe claims that we are a closed system, and that Flash is open, but in fact the opposite is true. Let me explain.

    Both are wrong. Flash is a closed system. Apple products are closed systems.

    Adobe’s Flash products are 100% proprietary. They are only available from Adobe, and Adobe has sole authority as to their future enhancement, pricing, etc. While Adobe’s Flash products are widely available, this does not mean they are open, since they are controlled entirely by Adobe and available only from Adobe. By almost any definition, Flash is a closed system.

    Ditto for Apple products.

    Apple even creates open standards for the web. For example, Apple began with a small open source project and created WebKit, a complete open-source HTML5 rendering engine that is the heart of the Safari web browser used in all our products. WebKit has been widely adopted. Google uses it for Android’s browser, Palm uses it, Nokia uses it, and RIM (Blackberry) has announced they will use it too. Almost every smartphone web browser other than Microsoft’s uses WebKit. By making its WebKit technology open, Apple has set the standard for mobile web browsers.

    To quote Wikipedia:

    "WebKit was originally created as a fork of KHTML as the layout engine for Apple's Safari; it is portable to many other computing platforms."

    -- "WebKit" on Wikipedia

    It's deeply offensive that Steve Jobs implies that Apple made WebKit technology open. They did not. It is open because KTML, upon which it is based, is Free Software. Forking KTHML was the fastest way that Apple could gain a competitive advantage without doing too much of their own actual work. This is the identical move they made when they took chunks of the BSD licensed FreeBSD and NetBSD operating systems and the Mach kernel to make OSX. Apple have a history of taking the work of other people and using it in their closed systems to make themselves rich. It's incredibly selfish behaviour.

    The only person who could truly claim original credit for the 'opening' of so much software these days is the creator of the LGPL and founder of the Free Software movement, Richard Stallman. Almost all of Apple's products up to this point have been compiled with a compiler which Richard Stallman wrote, called gcc.

    Adobe has repeatedly said that Apple mobile devices cannot access “the full web” because 75% of video on the web is in Flash. What they don’t say is that almost all this video is also available in a more modern format, H.264, and viewable on iPhones, iPods and iPads. YouTube, with an estimated 40% of the web’s video, shines in an app bundled on all Apple mobile devices, with the iPad offering perhaps the best YouTube discovery and viewing experience ever. Add to this video from Vimeo, Netflix, Facebook, ABC, CBS, CNN, MSNBC, Fox News, ESPN, NPR, Time, The New York Times, The Wall Street Journal, Sports Illustrated, People, National Geographic, and many, many others. iPhone, iPod and iPad users aren’t missing much video.

    Nice advertisement. I thought this was supposed to be about Flash, not how great your YouTube application is and how many dead media companies are sucking up to you.

    Another Adobe claim is that Apple devices cannot play Flash games. This is true. Fortunately, there are over 50,000 games and entertainment titles on the App Store, and many of them are free. There are more games and entertainment titles available for iPhone, iPod and iPad than for any other platform in the world.

    "many of them are free," except in the sense of freedom which implies that you are free to do what you want with something you own. No, those games are very definately not free. They come with the high price of locking you into a system owned by Apple and behaving in Apple sanctioned ways. That goes for users and developers.

    Symantec recently highlighted Flash for having one of the worst security records in 2009. We also know first hand that Flash is the number one reason Macs crash. We have been working with Adobe to fix these problems, but they have persisted for several years now. We don’t want to reduce the reliability and security of our iPhones, iPods and iPads by adding Flash.

    One word: sandbox. If Google can do it with Chrome, then Apple could do it with Safari. In other words, if your operating system was written correctly, 3rd party buggy plugins and apps should not be an issue. Giving your users the freedom to run any software they like (even if it does contain bugs) is important. Otherwise you risk treating them like children, or like idiots.

    In addition, Flash has not performed well on mobile devices. We have routinely asked Adobe to show us Flash performing well on a mobile device, any mobile device, for a few years now. We have never seen it. Adobe publicly said that Flash would ship on a smartphone in early 2009, then the second half of 2009, then the first half of 2010, and now they say the second half of 2010. We think it will eventually ship, but we’re glad we didn’t hold our breath. Who knows how it will perform?

    Development takes time. Don't talk to us about slow development, Steve Jobs. A cursory look at Apple's history is enough to see the pot calling the kettle black.

    To achieve long battery life when playing video, mobile devices must decode the video in hardware; decoding it in software uses too much power. Many of the chips used in modern mobile devices contain a decoder called H.264 – an industry standard that is used in every Blu-ray DVD player and has been adopted by Apple, Google (YouTube), Vimeo, Netflix and many other companies.

    Although Flash has recently added support for H.264, the video on almost all Flash websites currently requires an older generation decoder that is not implemented in mobile chips and must be run in software. The difference is striking: on an iPhone, for example, H.264 videos play for up to 10 hours, while videos decoded in software play for less than 5 hours before the battery is fully drained.

    Ridiculous nitpicking. Flash could, and should use hardware decoders. I wonder why they can't, or won't? Oh, that's right, it's because Apple only just openned up that previously closed API. Infact, since then Adobe have indeed put that functionality into Flash.

    In other words, more FUD from Steve Jobs.

    When websites re-encode their videos using H.264, they can offer them without using Flash at all. They play perfectly in browsers like Apple’s Safari and Google’s Chrome without any plugins whatsoever, and look great on iPhones, iPods and iPads.

    That is great, except that H.264 is also not a free codec that anyone can use without worries. It requires licensing, unlike ogg, vorbis, theora.

    Flash was designed for PCs using mice, not for touch screens using fingers. For example, many Flash websites rely on “rollovers”, which pop up menus or other elements when the mouse arrow hovers over a specific spot. Apple’s revolutionary multi-touch interface doesn’t use a mouse, and there is no concept of a rollover. Most Flash websites will need to be rewritten to support touch-based devices.

    Just like most apps have to be written from the iPhone to the iPad, right? Just like most apps have to be re-written from any other language and framework on the planet, into C/C++/ObjC/Cocoa right? Double standards.

    Software needs to be written and re-written all the time. That's not a good reason for sabotaging the people who develop for your platform. If anything you should be helping them by supporting as many 3rd party frameworks as possible.

    If developers need to rewrite their Flash websites, why not use modern technologies like HTML5, CSS and JavaScript?

    Or modern, open technologies like Objective C and Cocoa and... wait a second, those aren't modern or open, but you still require your app developers to use only those techonlogies. Again, double standards.

    Even if iPhones, iPods and iPads ran Flash, it would not solve the problem that most Flash websites need to be rewritten to support touch-based devices.

    Could be rewritten like this: "Even if iPads run the same technology as iPhones, it would not solve the problem that most apps need to be rewritten to support a larger screen size." Hippocracy.

    We know from painful experience that letting a third party layer of software come between the platform and the developer ultimately results in sub-standard apps and hinders the enhancement and progress of the platform. If developers grow dependent on third party development libraries and tools, they can only take advantage of platform enhancements if and when the third party chooses to adopt the new features. We cannot be at the mercy of a third party deciding if and when they will make our enhancements available to our developers.

    Total rubbish. Any 3rd party framework which doesn't keep up with the latest innovations will be ditched by developers. In addition, any worthwhile framework will still let you use the features of a specific platform outside of that framework. It's called a function call, but you probably haven't heard of it because Woz wrote all of the function calls for you.

    The truth is that there are many wonderful pieces of software out there, like Mozilla Firefox, which use abstraction layers and 3rd party libraries and frameworks so that they run in as many places and on as many platforms as possible.

    This becomes even worse if the third party is supplying a cross platform development tool. The third party may not adopt enhancements from one platform unless they are available on all of their supported platforms. Hence developers only have access to the lowest common denominator set of features. Again, we cannot accept an outcome where developers are blocked from using our innovations and enhancements because they are not available on our competitor’s platforms.

    Once again, total rubbish. No framework would try to block it's developers from doing something outside the framework for a specific platform. Oh wait, one framework would try and do that and guess who makes it?

    Flash is a cross platform development tool. It is not Adobe’s goal to help developers write the best iPhone, iPod and iPad apps. It is their goal to help developers write cross platform apps.

    100% true, and laudible. The more places your application runs the better.

    Our motivation is simple – we want to provide the most advanced and innovative platform to our developers, and we want them to stand directly on the shoulders of this platform and create the best apps the world has ever seen. We want to continually enhance the platform so developers can create even more amazing, powerful, fun and useful applications. Everyone wins – we sell more devices because we have the best apps, developers reach a wider and wider audience and customer base, and users are continually delighted by the best and broadest selection of apps on any platform.

    This paragraph is the truest of the whole thing. Basically there is a frank admission in here that Apple want developers to only work on Apple platforms so that Apple can "have the best apps" and sell more devices. They want to be the only ones to have those apps. They don't want those apps to run anywhere else. The part about developers reaching a wider audience is total rubbish. If you only release on Apple devices you are by definition not going to reach the widest user base you can. Only writing a cross-platform app can garuantee you that. This is also definately not best for users. If you are locked to a particular platform because the applications you use only run on that platform then you lose all freedom of choice. No, there is only one entity that this is really good for, and that is Apple.

    Flash was created during the PC era – for PCs and mice. Flash is a successful business for Adobe, and we can understand why they want to push it beyond PCs. But the mobile era is about low power devices, touch interfaces and open web standards – all areas where Flash falls short.

    Stupid argument. iPhone OS and OSX are based on the Mach kernel and parts of FreeBSD which is based on 1960s technology. Additionally, HTML5 is slow as hell right now, as anyone who has tried to write a game as a web-app knows.

    The avalanche of media outlets offering their content for Apple’s mobile devices demonstrates that Flash is no longer necessary to watch video or consume any kind of web content. And the 200,000 apps on Apple’s App Store proves that Flash isn’t necessary for tens of thousands of developers to create graphically rich applications, including games.

    It's not necessary at all, but Apple want to make it impossible. Apple want to dicatate completely what users and developers and can can't do on their platform. Do you want Apple controlling every aspect of your computing life so tightly?

    New open standards created in the mobile era, such as HTML5, will win on mobile devices (and PCs too). Perhaps Adobe should focus more on creating great HTML5 tools for the future, and less on criticizing Apple for leaving the past behind.

    That would be awesome. If Adobe re-wrote Flash in HTML5 it would be a win for everyone. It would also be a big win for everyone if Apple openned up their platform and allowed developers and users the freedom to use their devices how they please.

    They should both stop being such conniving selfish jerks.

    ]]>
    /tags/games Fri, 30 Apr 2010 07:53 GMT
    Ludum Dare #17 entries/ludum-dare-17 http://www.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/games Sat, 24 Apr 2010 06:58 GMT
    Infinite8BitPlatformer - Crispin's World entries/infinite-8bit-platformer-crispins-world http://www.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/games Wed, 14 Apr 2010 05:02 GMT
    Infinite 8-bit Platformer commit graph entries/infinite-8bit-platformer-commit-graph http://www.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/games Fri, 12 Mar 2010 02:11 GMT
    Something something shapes entries/something-something-shapes http://www.mccormick.cx/news/entries/something-something-shapes

    ]]>
    /tags/games Wed, 10 Mar 2010 15:14 GMT
    Hong Kong KIRF Lego entries/hong-kong-kirf-lego http://www.mccormick.cx/news/entries/hong-kong-kirf-lego Some "Lego" I bought in Hong Kong at a street market recently. Space Lego + cheapfakes + Hong Kong is pretty much my personal nexus of awesome.

    You can buy this stuff on ebay very cheaply too, and it's compatible with the real bricks. I can't really tell much of a difference in quality. The idea of Lego is too good to be monopolised - I wonder if anyone has tried 3d printing lego parts?

    I am really looking forward to when those "fake" Android phones & tablets start to perform better (and cheaper) than the official stuff. The smart thing about Google's Android strategy is that they benefit from that kind of Wild East tech cowboyism. It's like if Windows 95 had have been Free Software instead of pirated globally.

    ]]>
    /tags/games Sat, 27 Feb 2010 05:04 GMT
    SketchThing entries/sketchthing http://www.mccormick.cx/news/entries/sketchthing Over the new-year I wrote this little Free Software (LGPL) app for sketching stuff. It's called SketchThing.

    hoverteeth

    With the impending proliferation of tablets and touchscreens my plan is to make a sketching app which runs on all kinds of tablet/touch friendly devices and browsers, online and offline, and will sync your sketches to whatever device you are using, wherever you are using it.

    shapewads

    At the moment it's running on those Apple portable devices, since that's what I have access to thanks to my contract work for RjDj, and I'm quite glad that I have found a way to make Free Software which runs on those devices legally through the web app method. I hope to port it to at least Firefox, Android, and Chrome OS as well.

    bigsquarerobothead

    The core library, sketchthing.js, is device agnostic and should run on anything which supports HTML5, such as Firefox and Webkit. What the library does is take an arbitrary HTML element as an input, and then replace it's innerHTML with a canvas of the same size which can be sketched upon.

    Have fun.

    ]]>
    /tags/games Thu, 07 Jan 2010 05:27 GMT
    Infinite8BitPlatformer news entries/infinite-8bit-platformer-news http://www.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/games Sun, 18 Oct 2009 14:10 GMT
    blochead entries/blochead http://www.mccormick.cx/news/entries/blochead blochead helo.

    ]]>
    /tags/games Wed, 30 Sep 2009 20:51 GMT
    cc65 2.13 release entries/cc65-2.13 http://www.mccormick.cx/news/entries/cc65-2.13 Woohoo, Ullrich von Bassewitz has made a new release of everyone's favorite 8bit compiler, cc65 - the first in a while.

    cc65 has C and runtime library support for many of the old 6502 machines, including

    • The Commodore VIC20, C16/C116, C64, C128, C116, Plus/4, 510 (aka P500), the 600/700 family and newer PET machines (not 2001).

    • The Apple ][ and successors.

    • The Atari 8 bit machines.

    • GEOS for the C64 and C128.

    • The Nintendo Entertainment System (NES).

    • The Supervision console.

    • The Oric Atmos.

    • The Lynx Console.

    This is the compiler that I used to create aSid, a program which turns your commodore64 into a synthesizer.

    ]]>
    /tags/games Tue, 29 Sep 2009 17:00 GMT
    Garage Acid Lab entries/garage-acid-lab http://www.mccormick.cx/news/entries/garage-acid-lab

    The zipfile under the image above contains a Pure Data patch which procedurally generates a virtually infinite number of acid and breakbeat loops. I've found that it's quite a lot of fun to play with!

    Start by loading the patch called 0_START.pd and then turn up the volume and the cutoff. After that hit the big red button a few times until you hear something you like.

    I was making it into an RjDj scene, but I am not really sure if I'll ever get around to finishing it.

    Garage Acid Lab screenshot

    ]]>
    /tags/games Sat, 26 Sep 2009 17:39 GMT