// various states we go through when a level is completed
// to do the walking out the exit door animation
#define LEVEL_NOT_DONE      0      // not completed
#define LEVEL_DONE_WALK     1      // walking through exit door
#define LEVEL_DONE_WAIT     2      // finished walk through door, wait a bit
#define LEVEL_DONE_FADEOUT  3      // fading out
#define LEVEL_COMPLETE      4      // on to the next level!

// width of the player sprite, used for walking "behind" the exit door frame
#define PLAYERSPRITE_WIDTH      16

// at STOPWALKING time after starting the exit door animation,
// keen stops walking and we go to LEVEL_DONE_WAIT.
#define LEVEL_DONE_STOPWALKING_TIME      450
// at TOTAL_WAIT_TIME, LEVEL_DONE_FADEOUT is initiated.
#define LEVEL_DONE_TOTAL_WAIT_TIME       1000

// for ankh shield...
// stage1 is no flicker of the shield, changes colors
// in stage2 the shield flickers fast, changes colors
// in stage3 the shield flickers slow, no color change
#define ANKH_STAGE1_TIME    3000
#define ANKH_STAGE2_TIME    1500
#define ANKH_STAGE3_TIME    500
#define PLAY_ANKH_TIME      (ANKH_STAGE1_TIME+ANKH_STAGE2_TIME+ANKH_STAGE3_TIME)
// these correspond stage 1,2 and 3 respectively
#define ANKH_STATE_NOFLICKER    0
#define ANKH_STATE_FLICKERFAST  1
#define ANKH_STATE_FLICKERSLOW  2

// rate at which the periodically firing guns in ep3 will fire
#define GUN_FIRE_FREQ        800
// rate ate which the ice cannons in ep1 will fire
#define ICECANNON_FIRE_FREQ  400

// direction defines for various things
#define RIGHT    0
#define LEFT     1
#define UP       2
#define DOWN     3

#define ANKH_SHIELD_FRAME       61

// upon starting to walk, keen will quickly increase to
// PFASTINCMAXSPEED. keen can, at a slower rate,
// reach up to PMAXSPEED (increased every walk anim frame)
#define PFASTINCMAXSPEED  9
#define PMAXSPEED        13
#define PFASTINCRATE     16             // accel rate up to PFASTINCMAXSPEED
// rates at which player slows down
#define PFRICTION_RATE_INAIR     8
#define PFRICTION_RATE_ONGROUND  2
// rate at which player walking animation is shown
#define PWALKANIMRATE           40

// speed at which player walks through the exit door
#define PMAXEXITDOORSPEED  3

// the various jump states
#define PNOJUMP       0                 // not jumping
#define PPREPAREJUMP  1                 // doing the jump animation
#define PJUMPUP       2                 // jumping
#define PPREPAREPOGO  3                 // "pogo compressed" anim frame
#define PPOGOING      4                 // pogoing

// the different jumping frames. when CTRL is held down the player will
// go from frame PPREPAREJUMPFRAME to PJUMP_PREPARE_LAST_FRAME at a rate
// of PJUMP_PREPARE_ANIM_RATE until either CTRL is released or the player
// reaches the last frame. How far he got will select one of the various
// jump heights, defined below.
#define PPREPAREJUMPFRAME        8
#define PJUMP_PREPARE_LAST_FRAME 13
#define PJUMP_PREPARE_ANIM_RATE  15

// time to show player in his "pogo compressed" frame before jumping
#define PPOGO_PREPARE_TIME       60

#define PFIREFRAME               20     // raygun frame index
#define PFIRE_SHOWFRAME_TIME     100    // minimum time to show raygun frame
#define PFIRE_LIMIT_SHOT_FREQ    30     // maximum speed player can shoot

// player frame indexes for world map
#define PMAPRIGHTFRAME   32
#define PMAPDOWNFRAME    36
#define PMAPLEFTFRAME    40
#define PMAPUPFRAME      44

// player dieing states
#define PDIE_NODIE      0
#define PDIE_DYING      1
#define PDIE_DEAD       2
#define PDIE_FELLOFFMAP 3

#define DIE_ANIM_RATE       50
#define DIE_TILL_FLY_TIME   640
#define PDIE_RISE_SPEED    -20
#define DIE_MAX_XVECT       10

// initial negative inertia to provide player at
// start of a normal jump and a (high) pogo jump
#define PJUMPUP_SPEED            20
#define PPOGOUP_SPEED            24

// These control the various jump heights.
// one of these pairs is selected depending on how
// long the CTRL key was held down while Keen
// was preparing to jump. #1 causes the highest
// jump and they get lower from there.
// NORMAL_TIME is the amount of time keen will
// jump straight up at speed -PJUMPUP_SPEED.
// when expired his jump slows down at a rate
// of DECREASERATE.
#define PJUMP_NORMALTIME_1         5
#define PJUMP_UPDECREASERATE_1     6

#define PJUMP_NORMALTIME_2         5
#define PJUMP_UPDECREASERATE_2     5

#define PJUMP_NORMALTIME_3         3
#define PJUMP_UPDECREASERATE_3     3

#define PJUMP_NORMALTIME_4         2
#define PJUMP_UPDECREASERATE_4     2

#define PJUMP_NORMALTIME_5         40
#define PJUMP_UPDECREASERATE_5     2

#define PJUMP_NORMALTIME_6         0
#define PJUMP_UPDECREASERATE_6     0

// for short pogo jumps, uses -PJUMPUP_SPEED
#define PJUMP_NORMALTIME_POGO_SHORT       6
#define PJUMP_UPDECREASERATE_POGO_SHORT   6

// for high pogo jumps, uses -PPOGOUP_SPEED
//#define PJUMP_NORMALTIME_POGO_LONG        25
//#define PJUMP_UPDECREASERATE_POGO_LONG    12
#define PJUMP_NORMALTIME_POGO_LONG        36
#define PJUMP_UPDECREASERATE_POGO_LONG    6

// for the super-pogo option
#define PPOGOUP_SPEED_SUPER                     40
#define PJUMP_NORMALTIME_POGO_LONG_SUPER        10
#define PJUMP_UPDECREASERATE_POGO_LONG_SUPER    4

// pogo frames
#define PFRAME_POGO           24
#define PFRAME_POGOBOUNCE     25

// frame and animation speed for frozen keen (ep1) and stunned keen (ep2&3)
#define PFRAME_FROZEN         28
#define PFROZENANIMTIME       100
// how long keen should stay frozen when hit by an ice chunk
#define PFROZEN_TIME          1000
#define PFROZEN_THAW          100

// when falling keen's Y inertia increases at INCREASERATE up to MAXSPEED
#define PFALL_INCREASERATE       5
#define PFALL_MAXSPEED           20

// friction when player is pushed by yorp's, ball's, etc.
#define PLAYPUSH_DECREASERATE   1

// uses by the key processing function which changes CTRL, ALT, and CTRL+ALT
// into JUMP, POGO, and FIRE.
#define CTRLALT_DEBOUNCETIME    20

#define PDIEFRAME             22

// various tile indexes
#define BG_GRAY            143
#define BG_GRAY_PRIORITY   304
#define BG_BLACK           155
#define BG_DARK_EP2        147
#define TILE_FELLOFFMAP_EP1    582
#define TILE_FELLOFFMAP_EP3    0
#define TILE_ICE_LEFTCORNER   403
#define TILE_ICE_RIGHTCORNER  404
#define TILE_ICE              405
#define TILE_ICE_CUBE         394
#define TILE_GLOWCELL      241
#define DOOR_YELLOW        173
#define DOOR_RED           195
#define DOOR_GREEN         197
#define DOOR_BLUE          199
#define DOOR_YELLOW_EP3    234
#define DOOR_RED_EP3       236
#define DOOR_GREEN_EP3     238
#define DOOR_BLUE_EP3      240
#define DOOR_RED_SPRITE    (MAX_SPRITES-5)
#define DOOR_GREEN_SPRITE  (MAX_SPRITES-4)
#define DOOR_BLUE_SPRITE   (MAX_SPRITES-3)
#define DOOR_YELLOW_SPRITE (MAX_SPRITES-2)
#define YORPSTATUEHEAD     486
#define YORPSTATUEHEADUSED 485
#define YORPSTATUEBOTTOM   328
#define ENEMYRAY           109
#define ENEMYRAYEP2        123
#define ENEMYRAYEP3        103
#define RAY_VERT_EP3       104

// is player[].psupportingtile contains this value the player is actually
// supported by an object and you should look in player[].psupportingobj
// for it's index.
#define PSUPPORTEDBYOBJECT         0

