Hackfest 2005
Competition Details
Details about the competition can be found on the linux.conf.au website. The contest is over.
Competition Results
Winner of GUI section:Russell Steicke
Winner of AI section:Stephen Thorne (Jerub)
The source code to the entries are available here.
Spellcast
The latest versions of SC, a client library and server for playing a spell casting game. will be available from this site. This game is based around the rules of the original Spellcast game. The man page from that package is currently the most useful resource for a description of the game.
Documentation
A copy of the man page for the original game is available here. There are summary sheets available of the gestures to cast spells in Postscript and JPEG.
The following spells are not implemented:
Haste
Time Stop
Delayed Effect
Permanency
The major known differences between SC and the original game are:
Can always choose not to cast a spell even if you have made the correct gestures
All spells (even fire storm, ice storm) can be targetted at no-one with the result that they will be cancelled
Counter Spell does not counter resist cold/fire resistance for that round
Remove Enchantment on a blinded person will result in them seeing the gestures that round
Firestorms reflected by magic mirror, but this has no real effect on the game
Fireball does not negate an ice storm
Example AI
test_ai is a simple AI I wrote to help test the SC server code. Its very very dumb, but will give you a vague starting point for writing an AI. This AI will probably improved in the next few weeks as the server matures. It is not against the Hackfest competition rules to use code from the sample AI (or any other part of the SC package
Mailing List
There is a mailing list available for asking questions about the Hackfest. It will also be used to make announcements about future developments for the competition (eg new code releases). You can subscribe to it here:
http://lca2005.linux.org.au/mailman/listinfo/hackfest
Downloads
SC Release 1.2 (2005/04/25)
Notes
Server no longer crashes when observer disconnects at wrong time
Icestorm now cast instead of firestorm when ice storm gestures are made
Packages
SC Release 1.1 (2005/04/19)
Notes
Cleanup qt client
Better client data checking to make server more reliable
Fixes invisiblity/blindness bugs. Now conforms to rules
Fixes bug where invalid gestures could crash server
Adds missing state to string state name match which could cause clients to crash
Extends creature state protocol to return counters for how many turns longer protection from evil, disease, poison, blindness and invisiblity will last. Note that for those who don't use the client library, the data is at the end of the packet, so ignoring the information should be fine.
Packages
SC Release 1.0 (2005/04/18)
Notes
Adds packaging files
Can cast raise dead on dead players/monsters. No effect on elementals
Negation of poison/cure disease works correctly
Cure heavy wounds spell removes disease
Ice elementals destroyed by fireballs
Adds pool of monster names
Add support for decoding creature states
Magic mirror works correctly and reports results
Monster names correctly decoded on client side
If player is paralysed, and again affected by paralysis, then next turn same hand is paralysed, rather than asking caster
Packages
SC Release 0.99 (2005/04/18)
Notes
Server should be more reliable - esp wrt to SIGPIPEs
Adds support for observers
Adds notification of charmed hand
Adds notification of paralysed hand
Fixes bug where usernames could not be reused once disconnecting from server
Packages
SC Release 0.9 (2005/04/15)
Notes
Fixes gesture sending wrt to anti spell. Real gestures sent, and flag also passed with gestures to indicate whether or not player was hit by antispell. Sorry, protocol and API change here.
Fixes paralysis spell so certain gestures such as clap, snap and wave are transformed to finger, point and palm when hand is paralysed
Server now rejects duplicate usernames. Returns MSG_USERNAME_IN_USE_ALREADY and closes its end of the connection
Minor compilation fix for FC3
Game considered to be drawn after MaxRoundsPerGame (configurable) to avoid deadlocks of AIs. Value is sent along with timeout and own id at start of game (protocol change)
Always asked for spell selection, even if only one availble for each hand
Protection from evil actually shields
Sending targetID of 0 for spell targets cancels spell
Fixes for enchantment cancellation
Adds that it is always valid to send SPL_NONE for spell selection if you do not want to cast a spell
Raise dead cancels finger of death
Enforces that short version of lightning bolt can only be cast once
If player selects to cast a spell which requires two hands as well as a second spell, the second spell is not cast. NB Players can tell using Spells::spellRequiresTwoHands if they are casting such a spell (See Spellcast manpage)
Packages
SC Release 0.8 (2005/04/14)
Notes
Fixes for handling client disconnects
Fixes client side logic for working out who won game
Dispel Magic works properly now
Note: Protocol for MSG_SEND_EVENT_INFO has changed
Implements counter spell
Monsters die when their owner dies
Packages
SC Release 0.7 (2005/04/11)
Notes
Adds dodgy qt based gui client
Implements summoning of ice elementals
Implements Charm Person
Implements Paralysis
Implements Charm Monster
Server never exits - waits for start game timeout time before restarting NB. For clients, state information from previous game is invalidated once a MSG_SEND_START_GAME is received.
Only live players cast spells
Adds Protocol version on game start
Adds StartGame message
sends own id and turn timeout
Handle player disconnects gracefully. Disconnecting during the game results in losing
If no gestures are sent from a player within the timeout, GST_NOTHING is used for both hands
Fixes bug in winnerID code sent
Remove SPL_STAB1 as redundant
Filtering of gestures for Fear and dual stab were not working
because network byte conversion was not done on gestures first
Fixed bug introduced in 0.6 where many enchantments were not removed or processed at end of round
Fixes calculation of visibility of gestures
Implements Fear (was really done in 0.6). Note that SC_EVT_PLAYER_FEAR is received by a player if they will be restricted as to what gestures they can do. If they send a gesture that cannot be used it is converted to a GST_NOTHING
Packages
SC Release 0.6 (2005/04/3)
Notes
Add check so can't stab with both hands
Fix bug where if player was blinded then their gestures weren't visible. Reversed now so blinded player sees no gestures
Invisible player's gestures are not seen
Implements confusion effect on monsters and wizards
Fix bug where state of monsters was not updated (eg counters) at end of round
Send messages about events, eg "Amnesia", elementals merging etc. (protocol addition)
Implement Amnesia effect
Fix amnesia not timing out
Support games which end in draws (required protocol change)
Removes use of getline, replaced with fgets for portability
Fixes gestures for SPL_REMOVE_ENCHANTMENT and SPL_CAUSE_HEAVY_WOUNDS
Adds Ice Storms and Fire Storms
Adds Ice and Fire elementals
Fixes gestures for SPL_DISEASE
SC Release 0.5 (2005/03/28)
Notes
Adds check that targets for spells and monsters are valid
Fixes surrender code
Fixes target code for spells which do not need targetting
Adds end game code for client side
Adds logging to file capability
Adds auto-start after 30 seconds (or StartTimeout config)
Adds configuration
Fixes bugs in read/write ring buffer code (Sean Burford)
Fixes compilation bugs for OS X (Neil Conway)
Packages
SC Release 0.3 (2005/03/09)
Notes
-
Implements Dispel Magic
-
Implements Magic Mirror
-
Implements enchantment nullification
-
Adds messages for spells
-
Adds decoding of spell result messages
-
Implements summoning and control of monsters except elementals
-
Now should convert all data to network byte order when transferring across wire
-
Packages
SC Release 0.1 (2005/02/25)
Notes
-
Only able to play a very simple game
-
No support for summoning monsters
-
Probably quite a few bugs left
-
Definitely lots of debug output
-
There is currently very little documentation. Currently I would recommend looking at cl_spellcast.C and test_ai.C as a reference how to approach writing a client or AI.
-
Packages