1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#ifndef CREATURE_H
#define CREATURE_H
#include <allegro.h>
#include "config.h"
class linkedlist
{
public:
linkedlist *nextn, *previousn;
linkedlist(linkedlist *parent=NULL) {
if (parent) {
nextn=parent->nextn;
if (nextn) nextn->previousn=this;
previousn=parent;
parent->nextn=this;
}
else {
previousn=NULL;
nextn=NULL;
}
}
virtual ~linkedlist() {
if (previousn) previousn->nextn=nextn;
if (nextn) nextn->previousn=previousn;
}
virtual linkedlist* next() {return nextn;}
virtual linkedlist* previous() {return previousn;}
};
class creature: public linkedlist
{
public:
int hitpoints,power,health,speed,life,xcoor,ycoor,weight;
unsigned int terrain,diet;
float food;
unsigned char load,status,dir,job,species;
creature *creatureload;
creature(creature* parent=NULL): linkedlist (parent) {}
virtual ~creature() {
if (load==MEAT)
if (!creatureload) error ("Meat, no pointer,aargh");
else delete creatureload;
}
virtual creature* newcreature()=0;
virtual creature* next() {return (creature*) nextn;}
virtual creature* previous() {return (creature*) previousn;}
void preparecreature(creature* parent);
virtual char* name();
virtual int color() {return ((species+1)*16)%256+(species+1)/16;}
virtual int lookslike();
virtual void drawinfo(BITMAP *cr_info, bool firsttime);
virtual void choosejob();
virtual bool usekey() {return false;}
virtual char shortkey() {return '$';}
virtual int init_n_of() {return 100;}
};
extern creature **r[MAPWIDTH];
extern creature *firstcreature[N_OF_SPECIES];
#endif
|