Sulk - HACKING

******************************************************************************

The Python sources in src/ roughly constitute a Python package (though 
distributing as a package hasn't been tried or tested).  src/main.py or
possibly src/sprites/pieces is where you should start reading.


******************************************************************************

About this code:

We're using 4 spaces to indent, and no tabs (legacy 8 space tabs still lying
around in some places, unfortunately).  And sticking to American English
throughout, for some reason.

Object names:

_squaxx		= a pseudo-private method / attribute
SQUAXX		= a constant (object we should treat as immutable) 
		  Imported from pygame.locals, constants, or a mission module.
		  Most of these are integers, tuples or pygame.Rect instances.
		  The ones in constants.options (e.g. options.SCREEN_FULL_SCREEN)
		  *can* be changed, and can then be saved.

Inside comments:

TODO, FIXME	= obvious tags
DEBUG		= tag for a print statement
PROFILE		= investigate this with profiler at some point,
		  it might be wasteful
hmm		= 'is there a better way of doing this?'
?		= 'is this necessary?'
RULES		= the rules of Space Hulk, or hotseat secrecy requirements,
		  may be being breached or queried here
DEATHWING	= tag for stuff that is needed for expansions


******************************************************************************

Notes (TW):

FIXME	-- Marine who has just fired in overwatch (and jammed, say)
	   is able to interrupt. (RULES?)

TODO	-- Better minimap (show doors, CAT, etc?)
TODO	-- Mad reference cycles - break 'em!
TODO	-- Encapsulate InputHandler properly, in preparation for some kind of 
	   network stuff
	   - see what you can make of the modules in 'players'
	   - The AI0 module now exists, though for Stealers only, and its
	     behaviour is incomplete/crude
	   - NB. could hack Phase._SelectGroup.build_ui() to allow
             controlling / viewing AI 'thoughts'
TODO	-- Use_A_Door, Pass_CAT:
	   these disable other piecebuttons invisibly.   Should they do it
	   visibly?
TODO	-- Visual distinction between a CAT held by a piece and a CAT on the
	   board (marker?)
TODO	-- More main menu options:
	   [ ]restart mission, 
	   [?]sound volume, (Slider widget preferred)
	   [ ]about sulk/authors
TODO	-- KEYBOARD ONLY PLAY -- UI left to do:
	   select targets to shoot at (Keypad 5?)
	   select doors (Keypad 5?) 
	   etc...

FUTURE  -- hardware accelerated graphics when possible
FUTURE	-- informative, themeable, dynamic cursors
FUTURE	-- undo actions (hmm) (RULES-->no!) possibly allowable for movement only, 
           or on a pref basis
FUTURE	-- shortcut commands; e.g. 'move to here', 'overwatch indefinitely'
FUTURE	-- network play
FUTURE  -- threading, esp for AI or networking.  This should increase 
           interactivity immensely.  Any takers?
