Mystic Realms
by Varkalas D`Lonovan



TODO List:
~~~~~~~~~

* Win32 API setup -> File menu, etc.
* Map Maker
	- Map Name: ___________
    - [Save Map] button   [Load Map] button
    - -------------------------------------
    - () Insert Tile
    - Load Background Sprite
    -     Tile Type:
          () null
          () open
          () impassible
          () new area
	- Insert NPC (add VDNPC which loads a name from the NPC database)
	  clicking on a box will set the NPC's location and add to the world/map's list of NPC's
    - Load NPC Sprite
    - List or drop-down box showing all creatures
    - Another list showing only the spawn creatures the user has setup
* NPC Maker
	- NPC Name: _____________
	- Save
	- Load
	- List of things to say:  Text area:
	  [ 1                  ]  [                     ]
	  [ 2                  ]  [                     ]
	  [ 3                  ]  [                     ]
* Creature Maker
* Item Maker
~ List of NPC's with data, the world.npcs list will only have names/locations
~ same with creatures, items
* Figure out if I should use textures instead of sprites?
* Set up a better time/frame-based manipulation or synchronization in the game loop (look at the various articles)
* Get sound to work
* Get music to work
* Setup options
* Start working on OpenGL



Notes:
~~~~~

*************
* Main Loop *
*************

(wiki)
check for user input
run AI
move enemies
resolve collisions
draw graphics
play sounds

(one version)
Get elapsed time
Handle lost/reset graphics devices
Get player input
Perform A.I. and game logic
Handle sound
Render
Synchronize display

**************
* Data Types *
**************

		signed						unsigned			size
char	-128 to 127					0 to 255			1 byte
short	-32768 to 32767				0 to 65535			2 bytes
int		-2147483648 to 2147483647	0 to 4294967295		4 bytes
long	-2147483648 to 2147483647	0 to 4294967295		4 bytes

**********************
* Important Keywords *
**********************

private:	accessed only by that class
public:		accessed by all code
protected:	accessed by that class and its subclasses
inline:		
virtual:	used to denote polymorphism (use on destructors with classes that have subclasses!! otherwise, subclass's destructors won't get called)

class A, class B : A
both have functions X
if function X is called from a B object, it still uses A's function X
unless!  we have class A make it a virtual X

World has a list of entities (don't forget graphic info for each entity)

*********************
* Memory Management *
*********************

What's the difference in speed and memory allocation (RAM, hard disk, etc.)
with the following two instances:

1.  Creature aCreature;
2.  Creature *aCreature = new Creature();

1.  An instance
2.  This is allocated, uses constructor/destructor, and needs to be deallocated