Pollyanna's Goatee











Click to watch a video of "Bomb Chain Collection"

I’m just posting to announce that Bomb Chain Collection, a collection of games I’ve had a hand in porting from Flash {link, link} to the iPhone & iPod touch {link} for a client, has just been released. (Also, I’m available for freelance/contract iPhone, iPad, & iPod touch development – if you’re interested, email me.)

From Bomb Chain Collection‘s App Store page:

Explosive collection of puzzlers that will blow your mind!

3 games, over 100 stages, less than $1!



Click to enlarge

I’m just posting to announce that Cartesian Chaos, an educational game I’ve had a hand in porting from Windows {link} to the iPad {link) for a client, has been released. (Also, I’m available for freelance/contract iPhone, iPad, & iPod touch development – if you’re interested, email me.)

From Cartesian Chaos‘ App Store page:

“…like an evil child of a maths teacher and a Tower Defence game…”

“…great new flavour of Tower Defence…”

Mathematics as we know it is in grave danger! Once a millenia, thousands of spiteful rectangular expressions migrate toward the origin of the cartesian plane, intent on ending their tortured existence. And that time is…. now.

Luckily, each one has a weakness.. a result which will unravel them from within. You must stop them before they make their way through to the Origin, for if they do, the basis of mathematical reality will shatter, and all will be lost!

Cartesian Chaos is an action packed monster electrocution game which teaches players the fundamentals of graph mathematics. The game features three game modes:

Quick Quadrants: Above each monster is a quadrant. Clicking the corresponding quadrant on the grid will electrocute the monster.

What’s The Point: Each monster has a coordinate above it. You must find and click that point on the grid to take it out.

Define The Line: Monsters have line formulas above them. Draw a line between two points which lie in the line to send that monster back where it came from.
The game features a full set of tutorials for each game mode.

Cartesian Chaos makes learning about the cartesian plane enjoyable, so it’s great for teaching students, but is also a good mental workout for anyone wanting to keep their mind sharp.

What’s New In Version 1.1

Re-compressed music files to reduce the final file size.



So, earlier today I encountered an error whilst trying to run an app in the iOS Simulator, Xcode reporting that the “operation failed with underlying error 4294956467″; cleaning and rebuilding the project didn’t solve the error, and after encountering the error trying to quit Xcode would cause Xcode to crash after reporting an internal error; a search didn’t turn up any solutions, just a mention by another developer who had encountered the error that they were going to try deleting the content of ~/Library/Application Support/iPhone Simulator/, with no follow-up from that developer with regards to whether that solved the error.

I’d rather keep deletion as a last resort, so I searched for similar errors, wondering if there might be a common cause…

…and, apparently, the error is caused by having the iOS Simulator already open in another user; after switching to user X, quitting the iOS Simulator, switching back to user Y, quitting and reopening Xcode and clicking “Build and Run”, I haven’t encounter the error again.

Oh, and I should mention that this was with Xcode 3.2.5 and iOS Simulator 4.2



{Thursday 12th May '11}   ‘Cartesian Chaos’ released for iPad!

Click to enlarge

I’m just posting to announce that Cartesian Chaos, an educational game I’ve had a hand in porting from Windows {link} to the iPad {link) for a client, has been released. (Also, I’m available for freelance/contract iPhone, iPad, & iPod touch development – if you’re interested, email me.)

From Cartesian Chaos‘ App Store page:

“Mathematics as we know it is in grave danger! Once a millenia, thousands of spiteful rectangular expressions migrate toward the origin of the cartesian plane, intent on ending their tortured existence. And that time is…. now.

Luckily, each one has a weakness.. a result which will unravel them from within. You must stop them before they make their way through to the Origin, for if they do, the basis of mathematical reality will shatter, and all will be lost!”

Cartesian Chaos is an action packed monster electrocution game which teaches players the fundamentals of graph mathematics. The game features three game modes:
Quick Quadrants: Above each monster is a quadrant. Clicking the corresponding quadrant on the grid will electrocute the monster.

What’s The Point: Each monster has a coordinate above it. You must find and click that point on the grid to take it out.

Define The Line: Monsters have line formulas above them. Draw a line between two points which lie in the line to send that monster back where it came from.
The game features a full set of tutorials for each game mode.

Cartesian Chaos makes learning about the cartesian plane enjoyable, so it’s great for teaching students, but is also a good mental workout for anyone wanting to keep their mind sharp.



Click to watch a video of "Topsy Turvy"

I’m just posting to announce that Topsy Turvy, a game I’ve had a hand in porting from Flash {link} to the iPhone & iPod touch {link} for a client, has just been released. (Also, I’m available for freelance/contract iPhone/iPod touch & iPad development – if you’re interested, email me.)

From Topsy Turvy‘s App Store page:

The world revolves around you (literally) in this brand-new puzzle-platformer!

You won’t know your up from your down once you get into Topsy Turvy. Levels rotate depending on which surface your character stands on, and it’s up to you to figure out how to solve reach the flag! Collect coins along the way to unlock achievements.

- Puzzle-platformer with a twist
- 40 levels, with additional updates on the way
- Character customization options
- Achievements to discover/unlock

“The best games always seem to encourage experimentation, sometimes even making you believe you’ve found a new way to accomplish an old level. Topsy Turvy is definitely one of these.” Jayisgames.com (Flash version)



So, a few months ago I stumbled upon Harry Potter and the Methods of Rationality, a fanfic written by Eliezer Yudkowsky, and amongst the best fiction (no need for the fan- prefix) I’ve read this year; but, it is a story suffering from a problem: it is far, far too difficult to describe (or to try to convince you to read) the story without giving too much information and spoiling, or giving too little information and understating the brilliance of, the story; it (gently) mocks the original stories and the clichés which run rampant in the fanfic community they spawned … but it isn’t a hatefic; it features a Harry Potter who muses on the topic of marrying Professor Quirrell … but it isn’t a slashfic; it features a Harry Potter whose life is imperilled by a mob of yaoi fangirls … but it isn’t a crackfic; it is hilarious; it is intelligent/thought-provoking; and it is a fic you really should read.



{Sunday 24th January '10}   KRIEG3

Keys:
← : move piece left
→ : move piece right
↓ : drop piece
Z : rotate piece counter-clockwise
↑ or X : rotate piece clockwise

⌘R : reset game


The KRIEG series of prototypes are probably the oldest of my projects which will run on machines not now found for sale only on eBay, being the first projects I developed when I was teaching myself SDL* back in 2003; the KRIEG series of prototypes are quick-and-dirty clones of Puyo Puyo with an AI bolted on top; whilst playable, the prototypes were developed not to be good games, but to be test-beds for several ideas for AIs I was entertaining at the time…

The difference between KRIEG3 {video|source code & compiled:Mac OS X} and the earlier prototypes in the series is that this prototype is capable of creating chains.

A chain is comprised of cells which must be filled by blocks of the correct colour; one of those cells must be filled last, the filling of that last cell resulting in the complete elimination of the chain, eg.

A cell in the chain cannot be adjacent to a similarly coloured block which is not part of the chain, as that could result in the chain being prematurely, and possibly incompletely, eliminated.

The differences between KRIEG3 and the later prototypes in the series are: that the chains in this prototype are predefined (refer to the file ai3_patterns.hll), not learnt; that the chains in this prototype use predefined colours (ibid), not colours determined through analysis of the playfield to not cause the chain to be prematurely, and possibly incompletely, eliminated by adjacent blocks which are not part of the chain; and that the chains in this prototype are created fresh, the playfield is not analysed to determine whether any existing blocks can be used in the chain.

If the AI is not trying to create a chain (such as if there is not enough free space in the playfield for any of the predefined chains to fit into), the prototype falls back to using an improved version of the AI from KRIEG; whether to use the KRIEG or the KRIEG3 AI is reevaluated every time a piece is spawned under the control of the AI player.

The chain that the AI is trying to create is rendered as a slightly transparent overlay to the AI player’s playfield.


With regards to the KRIEG3 AI…

  1. If the AI has not selected a chain to try to create, a list of the free space in the AI player’s playfield is created, eg. for the playfield below the list would contain the nodes (in the format [leftmost X-coordinate, width:height]) [0, 1:6], [1, 2:4], [2, 1:4], [3, 1:5], and [5, 1:6];

  2. traversing that list, the AI creates a second list, of those chains which could fit in the free space without having any adjacent blocks of colours which could cause the premature, and possibly incomplete, elimination of the chain;
  3. if there are any chains in that second list, the AI selects at random from that list a chain to try to create; if there are not, the prototype reverts to using an improved version of the AI from KRIEG;
  4. a prediction is made in much the same manner as in the AI from KRIEG, where a duplicate of the AI player’s playfield is created, the piece under the AI player’s control is attached to that duplicate playfield at the correct X-coordinate and with the correct rotation for the prediction, and that duplicate playfield is updated as the original would be, with blocks being dropped and eliminated until no more changes will occur within the duplicate playfield without the attachment of another piece;
  5. several values are then passed back to the AI: whether the attachment of the piece under the AI player’s control to that duplicate playfield exceeded the height of that playfield, which would result in gameover for the AI player; whether the prediction was ‘illegal’, viz., whether the prediction resulted in a cell of the chain being filled by a block of an incorrect colour, or a block not part of the chain coming to rest adjacent to a similarly coloured cell of the chain; the ‘legality’ of the prediction (a prediction which has more of its cells filled by blocks of the correct colour has a higher ‘legality’); and whether the prediction resulted in the completion of the chain;
  6. a. if every cell in the chain has been filled by a block of the correct colour but the last, and if there is a prediction which results in that last cell being filled by a block of the correct colour, which is not ‘illegal’, and which does not result in gameover for the AI player, the AI takes the X-coordinate and rotation of that prediction as its targets, attempting to move/rotate the piece under the AI player’s control to that X-coordinate and that rotation.

    b. if there are any predictions which have a non-zero ‘legality’, are not ‘illegal’, and do not result in gameover for the AI player, a list is created containing that prediction with, or those predictions which share, the highest ‘legality’; the AI then selects a random prediction from that list, and takes the X-coordinate and rotation of that prediction as its targets, attempting to move/rotate the piece under the AI player’s control to that X-coordinate and that rotation.

    c. if the targets for the AI cannot be set in 6a. or 6b., the targets for the AI are set in much the same manner as using the AI from KRIEG: a list is created containing those predictions which have a ‘legality’ of zero (so as not to affect the chain the AI is trying to create), are not ‘illegal’, and do not result in gameover for the AI player; the AI then selects a random prediction from that list, and takes the X-coordinate and rotation of that prediction as its targets, attempting to move/rotate the piece under the AI player’s control to that X-coordinate and that rotation.


With regards to the modified KRIEG AI…

  1. For every possible combination of piece X-coordinate and rotation, a prediction is made, resulting in a score for attaching the piece under the AI player’s control to the playfield at that X-coordinate and with that rotation, and – in an improvement on the AI from KRIEG – a flag indicating whether the attached piece exceeded the height of the playfield, which would result in gameover for the AI player;
  2. when predictions for every possible combination of piece X-coordinate and rotation have been made, the AI creates a list containing that prediction with, or those predictions which share, the highest score and do not result in gameover for the AI player, and – in an improvement on the AI from KRIEG – selects a random prediction from that list; with a prediction selected, the AI takes the X-coordinate and rotation of that prediction as its targets, and attempts to move/rotate the piece under the AI player’s control to that X-coordinate and that rotation.

With regards to the predictions made by the modified KRIEG AI…

  1. A prediction is made by creating a duplicate of the AI player’s playfield, and attaching the piece under the AI player’s control to that duplicate playfield at the correct X-coordinate and with the correct rotation for the prediction;
  2. that duplicate playfield is then updated as the original would be, with blocks being dropped and eliminated until no more changes will occur within that duplicate playfield without the attachment of another piece;
  3. several values are then passed back to the AI: the height of the highest column in that duplicate playfield; the total number of blocks eliminated from that duplicate playfield; the number of blocks of the same colour in the groups formed by the attachment of the piece under the AI player’s control to that duplicate playfield; and – in an improvement on the AI from KRIEG – a flag indicating whether the attachment of the piece under the AI player’s control to that duplicate playfield exceeded the height of that duplicate playfield, which would result in gameover for the AI player;
  4. the score for the prediction is then determined by multiplying those first three values passed back to the AI by the importance of those values to the AI’s decision-making process, summing the latter two values, and subtracting the first value from that sum.

(I’ll note that there is at least one bad bug in KRIEG3, a potentially long-to-infinite loop in kriegPlayfield::Spawn(); that bug has never triggered on any of the occasions I’ve used KRIEG3, but it is there…)

KRIEG3 was developed on an Apple iMac DV (Summer 2000) in C++ using SDL*, OpenGL, and sealfin*, compiled with Apple Xcode 1.1.



{Friday 1st January '10}   KRIEG

Keys:
← : move piece left
→ : move piece right
↓ : drop piece
Z : rotate piece counter-clockwise
↑ or X : rotate piece clockwise

⌘R : reset game


KRIEG {video|source code & compiled:Mac OS X} is probably my oldest project which will run on a machine not only found on eBay, being the first prototype I coded when I was teaching myself SDL* in 2003; KRIEG is a quick-and-dirty clone of Puyo Puyo with an AI bolted on top; whilst playable, the purpose of KRIEG was to be a test-bed for several ideas for AIs I was entertaining at the time…

With regards to the AI…

  1. For every possible different combination of piece X-coordinate and rotation, a prediction is made, resulting in a score for attaching the piece under the AI player’s control at that X-coordinate and with that rotation.
  2. When predictions for every possible different combination of piece X-coordinate and rotation have been made, the AI player will simply take the X-coordinate and rotation with the best score as its targets, and attempt to move/rotate the piece under its control to that coordinate and that rotation.

With regards to the predictions made by the AI…

  1. A prediction is made by creating a duplicate of the the AI player’s playfield and attaching the piece under the AI player’s control to the duplicate playfield at the proper X-coordinate and with the proper rotation for the prediction.
  2. The duplicate playfield is then updated as the original playfield would be, dropping and eliminating blocks until no more changes will occur within the duplicate playfield without the attachment of another piece.
  3. When no more changes will occur within the duplicate playfield without the attachment of another piece, several values are passed back to the AI: the height of the highest column in the duplicate playfield; the total number of blocks eliminated from the duplicate playfield; and the number of blocks of the same colour in the groups formed by the attachment of the piece under the AI player’s control to the duplicate playfield.
  4. The score for the prediction is then determined by multiplying those values passed back to the AI by the importance of those various values to the AI’s decision making process, and summing the multiplied values.

(I’ll note that there is at least one bad bug in KRIEG, a potentially long-to-infinite loop in kriegPlayfield::Spawn() – that bug has never triggered on any of the occasions I’ve used KRIEG, but it is there…)

KRIEG was developed on an Apple iMac DV (Summer 2000) in C++ using SDL*, OpenGL, and sealfin*, compiled with Apple Xcode 1.1.



{Thursday 22nd October '09}   glass_castle

Keys:
↑ : thrust
← : rotate ship left
→ : rotate ship right
space : fire

⌘R : reset game


Ages ago, iDevGames.com held the 21 Days Later : Vectorized contest, a contest to – unsurprisingly – develop in twenty-one days a game making use of only vector graphics; I had several original concepts planned for the contest, but wasted precious time before I accepted that none of those concepts could be completed within the time-limit; instead, I decided to develop glass_castle, a clone of Star Castle (which I was introduced to by its clone, Cyclone, on the Apple Performa 460); unfortunately, I wasn’t able to complete development of glass_castle by the deadline of the contest, although I had developed three playable prototypes of increasing complexity and completeness.

Now, just a few years later than the deadline of the contest, I’m releasing the third and last of those prototypes – glass_castle {video|source code & compiled:Mac OS X}, a quick-and-dirty clone of Star Castle – to the public. Probably to the ridicule of the public. But to the public nonetheless. The major feature missing from this, the most complex and complete of those prototypes, is an increasing difficulty level: the prototype will begin playing at a predefined difficulty level, and continue playing at that predefined difficulty level no matter how high the level increases; it would be the work of maybe half an hour to implement an increasing difficulty level, but that’s half an hour I’m not willing to spend…

glass_castle was developed on an Apple iMac DV (Summer 2000) in C++ using SDL*, OpenGL, and sealfin*, compiled with Apple Xcode 1.1.



{Saturday 26th September '09}   gun_dance

Keys:
↑ : thrust
← : rotate ship left
→ : rotate ship right
C : fire light gun
X : fire heavy gun
Z : fire missile
(You only have two, and only one missile per ship may be on screen at a time.)

⌘R : reset game

(If you’d like to watch two AI-controlled ships duel, change the line .human="no" to .human="yes" in the file main.hll.)


Ages ago, iDevGames.com held the 21 Days Later : Vectorized contest, a contest to – unsurprisingly – develop in twenty-one days a game making use of only vector graphics; I had several original concepts planned for the contest, but wasted precious time before I accepted that none of those concepts could be completed within the time-limit; instead, I decided to develop glass_castle, a clone of Star Castle (which I was introduced to by its clone, Cyclone, on the Apple Performa 460); unfortunately, I wasn’t able to complete development of glass_castle by the deadline of the contest, although I had developed three playable prototypes of increasing complexity and completeness.

Now, just a few years later than the deadline of the contest, I’m releasing the second of those prototypes – gun_dance {video|source code & compiled:Mac OS X}, a quick-and-dirty duel between a Human- and an AI-controlled ship in an Asteroids-like environment – to the public. Probably to the ridicule of the public. But to the public nonetheless.

The AI is simple-and-quick-and-dirty and will…

  1. Check whether it is too close for comfort to an asteroid (if so, it will turn to face away from the asteroid and thrust); if it isn’t, it will…
  2. Check whether its opponent has launched a missile (if so, it will turn to face the missile and fire whatever guns the missile is in range of); if they haven’t, it will…
  3. Turn to face its opponent, firing whatever guns its opponent is in range of (and launching a missile if its opponent is in range of the heavy gun – why I implemented that condition I don’t know…), otherwise thrusting towards its opponent if its opponent is not in range of any guns.

It would be the work of a few minutes to implement controls for a second Human-controlled ship, or to implement more than two opponents; but those are minutes I’m not willing to spend…

gun_dance was developed on an Apple iMac DV (Summer 2000) in C++ using SDL*, OpenGL, and sealfin*, compiled with Apple Xcode 1.1.



et cetera
Follow

Get every new post delivered to your Inbox.