/**************************************************************
 * FFTacticsMUD : status.h                                    *
 **************************************************************
 * (c) 2002 Damien Dailidenas (Trenton). All rights reserved. *
 **************************************************************/

#define DECLARE_STATUS(fun) STATUSTYPE fun

#define PULSE_STATUS    4

#define STATUS_ADD      0
#define STATUS_REMOVE   1
#define STATUS_UPDATE   2

typedef class CH CH;
typedef class STATUS STATUS;

typedef void STATUSTYPE args((CH *ch, STATUS *status, const short action));

class STATUS {
public:
  STATUS *next;
  short id, ctr, turns;
  STATUSTYPE *type;

  STATUS() {
    next = NULL, type = NULL, id = 0, ctr = 0, turns = 0;
  }

  string name();
  bool display();
};

struct status_type {
  const char *name;
  short ctr;
  STATUSTYPE *type;
};

extern  const   struct  status_type     status_table[];

/***********************
 * STATUS DECLARATIONS *
 ***********************/
DECLARE_STATUS(status_charging);
DECLARE_STATUS(status_defending);
DECLARE_STATUS(status_performing);
DECLARE_STATUS(status_accumulate);
DECLARE_STATUS(status_berserk);
DECLARE_STATUS(status_bloodsuck);
DECLARE_STATUS(status_charm);
DECLARE_STATUS(status_confusion);
DECLARE_STATUS(status_darkness);
DECLARE_STATUS(status_dead);
DECLARE_STATUS(status_deathsentence);
DECLARE_STATUS(status_dontact);    
DECLARE_STATUS(status_dontmove);
DECLARE_STATUS(status_faith);
DECLARE_STATUS(status_float);
DECLARE_STATUS(status_frog);
DECLARE_STATUS(status_haste);
DECLARE_STATUS(status_innocent);
DECLARE_STATUS(status_invitation);
DECLARE_STATUS(status_oil);
DECLARE_STATUS(status_petrify);
DECLARE_STATUS(status_poison);
DECLARE_STATUS(status_protect);
DECLARE_STATUS(status_reflect);
DECLARE_STATUS(status_regen);  
DECLARE_STATUS(status_reraise);
DECLARE_STATUS(status_shell);
DECLARE_STATUS(status_silence);
DECLARE_STATUS(status_slow);
DECLARE_STATUS(status_sleep);
DECLARE_STATUS(status_stop);   
DECLARE_STATUS(status_deathsentence);
DECLARE_STATUS(status_frog);
DECLARE_STATUS(status_darkness);
DECLARE_STATUS(status_silence);
DECLARE_STATUS(status_transparent);
DECLARE_STATUS(status_undead);