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.
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.
One more turn
Presented by saluk
Ratings (show detail)
Team XKCD's final entry
Character mini-info block
A town icon
One of the items from the game
New tiles, party and UI elements
We haz RPG!
Hey, there's *physics* going on here!
The day of ... thinking
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.
Change for the better
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!
I kill the kobold with my sword (or bow)
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.
It's a kinda magic
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.
We have the skillz
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.
More game, probably last day of dev
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.
The final countdown
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 :)
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 :)
Response to early feedback
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:
- help-screen popup when starting first dungeon
- context-sensitive LMB: click on character switches; LMB on footstep moves; LMB on enemy attacks (if only one attack) or brings up menu
- indicator for visible off-screen NPCs
- NPC turn notification
- more actions for characters (PC and NPC) to perform in the game
- NPCs need differing loadouts and skills
- a lot of cleaning up of the player management screen
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 :)
- 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
Development continues, part 2
- 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.
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.