PyWeek - Team XKCD

All future updates for this project will be entered in the Threads Of Fate pyggy awards project page.

Your beloved is destined to be the greatest ruler the land has seen. Some nasty has stolen Fates' power and used it to attack your beloved, snipping off that destiny. The bits have been handed to minions, which increases their power. You have to get the bits to save your beloved and your land.

A buncha folk from forums.xkcd.com.

Project Page
Discussion Group

Richard's the primary coder with abzde, cfuller, Ehtirno and Cosmologicon helping. He also created most of the artwork with Haragorn pitching in too. mp and tee_skoowared composed the music.
richard abzde Haragorn Ehtirno cfuller mp Cosmologicon


In-game screenshot

Awards


One more turn
Presented by saluk

Give this entry an award

Ratings (show detail)

Overall: 3.0
Fun: 3.1
Production: 3.4
Innovation: 2.6

6% respondents marked the game as not working.
Respondents: 27
Files: Uploader Date
screenshot.png 181.35 Kbytes richard 2008/09/14 23:49
In-game screenshot
xkcd-threads-of-fate-1.0.zipfinal 6.94 Mbytes richard 2008/09/14 00:21
Team XKCD's final entry
char.png 5.56 Kbytes richard 2008/09/13 11:56
Character mini-info block
button-end-turn.png 3.56 Kbytes richard 2008/09/12 13:05
End turn
icon-town.png 36.56 Kbytes richard 2008/09/11 12:35
A town icon
sword.png 13.46 Kbytes richard 2008/09/10 11:45
One of the items from the game
screen3.png 150.20 Kbytes richard 2008/09/09 12:21
New tiles, party and UI elements
screen2.png 196.92 Kbytes richard 2008/09/08 11:18
We haz RPG!
screen1.png 12.20 Kbytes richard 2008/09/07 06:29
Hey, there's *physics* going on here!

Tuesday 11 November, 2008

[ richard @ 01:03 ] Development moving to pyggy site

All future updates for this project will be entered in the Threads Of Fate pyggy awards project page.

Thursday 30 October, 2008

[ richard @ 02:18 ] Development continues, part 2

I'm still managing to get some time coding up improvements to the game. Since my last post I've:

  • Spent a lot of time working on the user interface code, including:
    • Adding new layouts
    • Adding styling controls, including "skinning"
    • Added drag-n-drop support
    • Added some tests
    • Refactored to make the API more convenient and less clashing with Cocos
    • UI elements may be animated using Cocos actions (color, position, etc.)
  • Re-implemented all game user interfaces to use the new code.
  • Better feedback during battle displaying amount of damage dealt/received.
  • Better NPC turn handling so their animations play completely, giving the player better feedback.
  • Scaling of interface fonts to fit smaller/larger screens.
  • Fixed the visual offset sometimes seen when rendering attack animations.
  • Optimised NPC brain code.
  • Fixed a bunch of other bugs.
Code is now at r259. I'll probably release a new version of the game once I've sorted out a bug in the Line Of Sight code.

The user interface code is all currently in a single module and implements a Cocos Layer. It's entirely independent of the rest of my game code, and I'm hoping it becomes respectable enough to include in Cocos itself.

Thursday 09 October, 2008

[ richard @ 07:54 ] Development continues

Since the comp officially finished I've been working on the game some more. Stuff I've already done, mostly addressing the feedback from the judges (thanks guys!):

  • Refactor out the music player to a single point to detect ability and also command-line --nomusic override.
  • Add command-line control over fullscreen / window sizing.
  • Add clicking of character in map to activate.
  • Fix resource snafu with finding save game files.
  • Grant all characters some basic level of brawling skill.
  • Fix blocking check for adjacent actions.
  • Allow diagonal adjacent actions.
  • Add diagonal movement.
  • Add green box highlighting currently-active character.
  • Clean up the cobble tiles a little.
  • All graphical glitches now removed.
  • Add a simple first-run help message when entering the tactical game.
  • NPC turn feedback.
  • Add in better command-line option handling.
  • Allow immediate selection of arbitrary levels from command-line for testing.
  • New ui / layout / button abstraction
More to come!

Monday 15 September, 2008

[ richard @ 22:34 ] Response to early feedback

Thanks for the great feedback you're all leaving.

Most of my effort was spent creating the game engine so unfortunately the user-facing code received less attention, and thus is ... somewhat ... utilitarian :)

Just so you're aware, my TODO for the next release of the game includes:

  1. help-screen popup when starting first dungeon
  2. context-sensitive LMB: click on character switches; LMB on footstep moves; LMB on enemy attacks (if only one attack) or brings up menu
  3. indicator for visible off-screen NPCs
  4. NPC turn notification
  5. more actions for characters (PC and NPC) to perform in the game
  6. NPCs need differing loadouts and skills
  7. a lot of cleaning up of the player management screen
The code already implements a bunch of things like handling different NPC equipment and skill sets (and altered attributes), but the current levels don't use that.

Any further suggestions will be gratefully received. If anyone's interested in helping me with it that'd be cool too.

Update: To the user who requested keyboard movement - it's already there (arrow keys). And so's the shortcut for "next character" (spacebar - clearly my spacebar icon sucks :)

Sunday 14 September, 2008

[ richard @ 23:56 ] Wrap-up

I probably should've written this yesterday but I actually needed a break from the computer for a while :)

I woke up on Sunday to find that a few of the team had done some additional work overnight, including visibility of NPCs from PCs, some dungeon level tweaking, finishing off the introduction story (though I didn't have time to replace some of the placeholder graphics with better-quality images) and finalising the music.

Of course I spent about an hour dealing with PyWeek issues but it was far less stressful than any previous PyWeek - the 24-hour upload grace period was a bloody good idea :)

Overall I'm happy with the game as submitted. It includes almost all of the functionality I'd hoped we would get done in the week. There wasn't any stupid bugs that kept me frustrated and unproductive for hours like there has been previously. Of course there's a few glitches (apparently sometimes missile weapons can be rendered off-target, but I've not seen that myself; also the tile mapping has border artifacts that I'd like to try to resolve) but nothing that kills the game (AFAIK :)

Thanks to the XKCD folk who pitched in - I'm sure they learnt a lot during the week, and I'm grateful for their help and design advice during the week. I'm hoping some of them will stay on with the project and help me see it grow. I have lots more I want to add to it :)

Saturday 13 September, 2008

[ richard @ 12:12 ] The final countdown

There was a huge rush of energy from the team today, including a new contribution from Cosmologicon who has started putting together the story animation. Very nice :)

I've uploaded a test release: xkcd-threads-of-fate-1.0rc4.zip.

Ehtirno did a bunch of work designing levels and tweaking the one we had. While I was asleep he also implemented spending experience points, some user interface improvements and item generation for shopping.

abzde has been sick (everyone gets sick at least once during a PyWeek) so hasn't been able to contribute as much as he'd like. He did chime in just now with a fix to the NPC AI (sadly this is not in the file I've uploaded --- just don't DIE :)

Knowing it was going to be a short day I spent a lot of time helping out people on IRC so they could do work in my absence. My first contribution today was re-working the character selection control and next turn behaviour in the tactical game. I added some big helpful buttons which hopefully also serve as documentation reminders.

I also added code to support buying new skills and prepared the way for buying abilities (we don't have any yet though).

I added the mechanism we use for unlocking new dungeons on the successful completion of existing ones, thus allowing the game to progress. And I fixed a bunch of bugs.

Then I went to a 5-year-old's birthday, and I just got back. I'm going to bed now.

See you all at the finishing line :)

Friday 12 September, 2008

[ richard @ 13:06 ] More game, probably last day of dev

Today was a day of filling in more of the gaping holes of the game. cfuller found a couple of bugs overnight that were good to have fixed. Not much else though when I woke up this morning.

First thing to fix was the game "menu" interface. I replaced the placeholder menu with using the world map as the main interface. This then prompted me to implement loading and saving games, so I did that too.

While I was doing that Haragorn contributed some new tiles. Not sure they'll appear in the final submission because they're outdoor tiles and we're not likely to have an outdoor map.

I also added some missing items, and added costs and weights to all items. And I completely revamped the combat calculations, making them simpler to configure in the items and also having them use the item quality, magic bonus and character skill. This also involved me going over the characters and NPCs we have now and fixing their stats, skills and items so they were saner. Most of the quality/magic bonus/skills stuff will be transparent to the player unless a miracle happens between now and Sunday :)

More music arrived too, so now we have music playing while you're fighting in the dungeon, and there's a fanfare played when you win.

The game currently hangs if you lose.

I added a shop-lifting interface, and Ehtirno added money so it was a shopping interface :)

I was fortunate to have a friend (whose opinion I value regarding this sort of game) play it and he liked it, pointing out a few quibbles (and an issue on Windows which was good to fix now :)

Finally, you get awarded money and XP for completeing a dungeon. You can spend the money, but you can't spend the XP. You can see that you have XP, you just can't spend it. I really hope I can find the time to do something about that tomorrow, but it's not likely...

I've got a busy day tomorrow, so I don't expect to be able to get much of anything done on the game. And that takes me into Sunday, where I'll be busy being an admin rather than entrant, so it'll be a wash too.

Thursday 11 September, 2008

[ richard @ 12:42 ] We have the skillz

Another day of pretty good progress. I started out with some fun stuff, incorporating visual feedback of actions partaken by characters in the game simulation. Animations. Cool ones :)

My email program is refusing to start up, so I've lost my SVN logs for the day. This one's going to be a little more terse than usual.

Once I'd gotten the animations out of my system I knuckled down to the less-exciting inventory management screens. After some more IRC discussion on the topic I had a solid plan and managed to knock out the bulk of the code pretty quickly. There's still some user interface issues (like lack of feedback and no instructions). But the core is there.

cfuller contributed a world map view which I proceeded to mangle to fit into the game. The town icon above is one I threw together to be used on that map.

I moved on to putting in place the initial implementation of a skills system, and incorporated some initial skills into the combat and spell-casting actions.

I finished the day overhauling the character status displays in the tactical game user interface. That exposed some problems with the events triggered by damage, movement, etc. which I've also now fixed.

So far it's a playable game, but it's still missing chunks and I'm not convinced it'll be finished by Sunday.

Wednesday 10 September, 2008

[ richard @ 12:05 ] It's a kinda magic

An interrupted day today as I spent some time with my daughter and doing some housework and buying new pants.

Overnight (for me) abzde did some work on the encounter map interface enabling non-turn-based encounters (ie. walking around a town and not killing everyone). Ehtirno added a bunch of new items and some party summary user interface to the tactical game display.

tee_skoowared is still plugging away composing music.

The first thing I did today was produce new character (PC and NPC) art and props. These are easy to make and thus can be consistent which is important. And they don't look too shabby, I think. The sword above is a small sample :)

I implemented the new character composition code so that characters are visibly equipped with the things they have in their hands in the encounter screen. While I was at it I implemented using armour and added some to the test characters, and it worked.

Haragorn popped into IRC and has started creating a world map for us. He started talking about the game's design so I also spent some of the day writing up the overall design of the game for the team's reference. cfuller popped in and offered to write the code behind the world map to make it clickable.

We also now detect when an encounter has ended successfully. I added a "Zot" action for characters when the --god command-line switch is used so I can just kill off any characters. We don't detect encounter failure yet though.

I finished the day adding a magic system. The test party now has a Wizard and Cleric (and a mace and another female person image). There's no pretty zappy effects yet, but the actions work.

Evergrey just handed me some new tiles to use as town buildings, but I'm too pooped to try them in the engine. Tomorrow.

Tuesday 09 September, 2008

[ richard @ 12:33 ] I kill the kobold with my sword (or bow)

Today saw lots of progress including some cool moments where gameplay just kinda fell out of the framework we'd been building.

I started the day adding some information to the user interface - some help and information about the currently active character. It's raw, but it's there (see screenshot).

Ehtirno added the beginnings of items and inventory management while also working on the character stats. I took that work and ran with it, adding some more functionality and generally making it work. The first result of that was giving our character a Sword and bashing the baddie (a "kobold") with it :)

I also tweaked the primary action interface, the popup menu.

I also got to load in the first piece of our musical score thanks to tee_skoowared and Michael Pearson. It's in the menu, and is really good :)

Then I caved in and let the NPCs also have equipment. abzde made them use weapons and now the stupid "kobold" fights back. Boo!

cfuller poked in and contributed some code to check line of sight. abzde incorporated that into his NPC AI to good effect. Then later I broke it when I changed the way walls work, but it was for the best, since we may now have tile edges that block movement but not line of sight.

Along the way I started creating more tiles for our maps, the result you see above. Yay for Inkscape. I added a second, very boring outside level to use the outside graphics I had created.

And I added ranged attacks with a bow. To test it I added a second character to the player's party (something untested until now) and was pleasantly surprised when both the ranged attack and the second character JUST WORKED :)

Ehtirno then made it so we could distinguish between the two stick figure characters :)

abzde added a waypoint system so the NPCs could patrol when they couldn't see anyone.

I finished the day adding a highlight so you can see how far your character can move in their turn.

Monday 08 September, 2008

[ richard @ 11:30 ] Change for the better

Wow, what a lot of progress.

So as mentioned in the last post we've changed the game completely, meaning that when I started this morning I was coding a whole new game -- except for the start menu which still calls it the old game name :)

Quite quickly had some basic level tiles for a top-down display, and had them mapped on the screen with cocos. Fixed a couple of bugs in the cocos tile mapping :(

Had lots of good discussion and clearing things up, setting the style for the musicians to aim for. Everyone else went to sleep so I beavered away with Michael hovering around. Started defining the game model (characters, NPCs, how actions worked) etc. and really got going. There was a lot of refactoring along the way, of course. By the time abzde had woken up I'd made a level and had a player moving around in it with a static NPC spawning. Ehtirno and Evergrey popped up with some artwork which looks pretty cool (the screenshot above has my lame art of course).

abzde worked on getting the NPC to do stuff, and I worked on the UI to allow character actions, and made them do stuff.

The end result is we have an actual RPG! The character can go bash the baddie to death, and the hit chance and damage are derived from the player's stats. The baddie will chase the player around, but doesn't hit yet. And we have support for a party of player characters.

Lots more to do, but this is a really promising start!

Sunday 07 September, 2008

[ richard @ 23:49 ] The day of ... thinking

Well, most of the team was MIA when the theme was announced. A few of us thought about it, mostly without progress. Eventually we went with a simple scrolling shooter with a twist - the player hanging from a rope which is being lowered through the level. As the player picks up powerups they get heavier making the rope spool out faster.

Of course at 3am while I was trying to sleep I realised that this was a dumb idea - the player is too close to the edge of the screen where bad things come from.

So at the start of day 2 (for me - the end of day 2 for Ehtirno and abzde) we decided to toss that out. We were having stability issues with pymunk on slower machines anyway.

Now we're working on an RPG with the core theme of The Fates:

Some nasty has stolen Fates' power and used it to attach your beloved, snipping of bits of life string. The bits have been handed to minions. You have to get the bits to save your beloved.