forked from github/server
e211a578eb
- side::alive und battle::alive wird kontinuierlich mitgeführt - Aufpassen! - erste Ideen für FAST_GETUNITROW -- klappt aber noch nicht mit nonblockers, d.h. es disabled sich ist in Kämpfen mit denen selbsttätig
145 lines
5.1 KiB
C
145 lines
5.1 KiB
C
/* vi: set ts=2:
|
|
*
|
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
|
* Henning Peters (faroul@beyond.kn-bremen.de)
|
|
* Enno Rehling (enno@eressea-pbem.de)
|
|
* Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de)
|
|
*
|
|
* This program may not be used, modified or distributed without
|
|
* prior permission by the authors of Eressea.
|
|
*/
|
|
|
|
#ifndef BUILDING_H
|
|
#define BUILDING_H
|
|
|
|
/* maintenance::flags */
|
|
#define MTF_NONE 0x00
|
|
#define MTF_VARIABLE 0x01 /* resource usage scales with size */
|
|
#define MTF_VITAL 0x02 /* if resource missing, building may crash */
|
|
|
|
typedef struct maintenance {
|
|
resource_t type; /* type of resource required */
|
|
int number; /* amount of resources */
|
|
unsigned int flags; /* misc. flags */
|
|
} maintenance;
|
|
|
|
/* building_type::flags */
|
|
#define BTF_NONE 0x00
|
|
#define BTF_INDESTRUCTIBLE 0x01 /* cannot be torm down */
|
|
#define BTF_NOBUILD 0x02 /* special, can't be built */
|
|
#define BTF_UNIQUE 0x04 /* only one per struct region (harbour) */
|
|
#define BTF_DECAY 0x08 /* decays when not occupied */
|
|
#define BTF_DYNAMIC 0x10 /* dynamic type, needs bt_write */
|
|
|
|
typedef struct building_type {
|
|
const char * _name;
|
|
|
|
int flags; /* flags */
|
|
int capacity; /* Kapazität pro Größenpunkt */
|
|
int maxcapacity; /* Max. Kapazität */
|
|
int maxsize; /* how big can it get, with all the extensions? */
|
|
const struct maintenance * maintenance; /* array of requirements */
|
|
const struct construction * construction; /* construction of 1 building-level */
|
|
|
|
const char * (*name)(int, const struct locale *);
|
|
struct attrib * attribs;
|
|
} building_type;
|
|
|
|
extern const building_type * bt_find(const char* name);
|
|
extern void bt_register(const building_type * type);
|
|
extern void init_buildings(void);
|
|
|
|
typedef struct building_typelist {
|
|
struct building_typelist * next;
|
|
const building_type * type;
|
|
} building_typelist;
|
|
|
|
extern struct building_typelist *buildingtypes;
|
|
/* buildingt => building_type
|
|
* Name => locale_string(name)
|
|
* MaxGroesse => levels
|
|
* MinBauTalent => construction->minskill
|
|
* Kapazitaet => capacity, maxcapacity
|
|
* Materialien => construction->materials
|
|
* UnterSilber, UnterSpezialTyp, UnterSpezial => maintenance
|
|
* per_size => !maintenance->fixed
|
|
*/
|
|
#define BFL_NONE 0x00
|
|
#define BLD_MAINTAINED 0x01 /* vital maintenance paid for */
|
|
#define BLD_WORKING 0x02 /* full maintenance paid, it works */
|
|
#define BLD_SAVEMASK 0x00 /* mask for persistent flags */
|
|
|
|
typedef struct building {
|
|
struct building *next;
|
|
struct building *nexthash;
|
|
|
|
const struct building_type * type;
|
|
struct region *region;
|
|
char *name;
|
|
char *display;
|
|
struct attrib * attribs;
|
|
int no;
|
|
int size;
|
|
int sizeleft; /* is only used during battle. should be a temporary attribute */
|
|
int besieged; /* should be an attribute */
|
|
unsigned int flags;
|
|
} building;
|
|
|
|
extern attrib_type at_building_generic_type;
|
|
extern const char * buildingtype(const struct building * b, int bsize, const struct locale * language);
|
|
extern const char * buildingname(const struct building * b);
|
|
extern int buildingmaintenance(const building * b, resource_t rtype);
|
|
extern int buildingcapacity(const struct building * b);
|
|
extern struct building *new_building(const struct building_type * typ, struct region * r, const struct locale * lang);
|
|
void build_building(struct unit * u, const struct building_type * typ, int size);
|
|
|
|
/* Alte Gebäudetypen: */
|
|
|
|
extern struct building_type bt_castle;
|
|
extern struct building_type bt_lighthouse;
|
|
extern struct building_type bt_mine;
|
|
extern struct building_type bt_quarry;
|
|
extern struct building_type bt_harbour;
|
|
extern struct building_type bt_academy;
|
|
extern struct building_type bt_magictower;
|
|
extern struct building_type bt_smithy;
|
|
extern struct building_type bt_sawmill;
|
|
extern struct building_type bt_stables;
|
|
extern struct building_type bt_monument;
|
|
extern struct building_type bt_dam;
|
|
extern struct building_type bt_caravan;
|
|
extern struct building_type bt_tunnel;
|
|
extern struct building_type bt_inn;
|
|
extern struct building_type bt_stonecircle;
|
|
extern struct building_type bt_blessedstonecircle;
|
|
extern struct building_type bt_illusion;
|
|
extern struct building_type bt_generic;
|
|
|
|
/* old functions, still in build.c: */
|
|
int buildingeffsize(const building * b, boolean img);
|
|
void bhash(struct building * b);
|
|
void bunhash(struct building * b);
|
|
int buildingcapacity(const struct building * b);
|
|
void destroy_building(struct building * b);
|
|
|
|
const struct building_type * findbuildingtype(const char * name, const struct locale * lang);
|
|
|
|
extern struct building_type * bt_read(FILE * F);
|
|
extern void bt_write(FILE * F, const building_type * bt);
|
|
extern struct building_type * bt_make(const char * name, int flags, int capacity, int maxcapacity, int maxsize);
|
|
|
|
#include "build.h"
|
|
extern const struct building_type * oldbuildings[MAXBUILDINGTYPES];
|
|
#define NOBUILDING NULL
|
|
|
|
extern void * resolve_building(void * data);
|
|
extern void building_write(const struct building * b, FILE * F);
|
|
extern int building_read(struct building ** b, FILE * F);
|
|
|
|
extern struct building *findbuilding(int n);
|
|
|
|
extern struct unit * buildingowner(const struct region * r, const struct building * b);
|
|
|
|
#endif
|