DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦de1123d1c⟧ TextFile

    Length: 3444 (0xd74)
    Types: TextFile
    Names: »map.h«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/X/Xconq/map.h« 

TextFile

/* Copyright (c) 1987, 1988  Stanley T. Shebs, University of Utah. */
/* This program may be used, copied, modified, and redistributed freely */
/* for noncommercial purposes, so long as this notice remains intact. */

/* RCS $Header: map.h,v 1.1 88/06/21 12:29:42 shebs Exp $ */

/* Definitions of levels of detail in mapfiles.  These values must be */
/* ordered, so careful about fiddling with them. */

#define SIDEBASIC 1
#define SIDESLOTS 2
#define SIDEVIEW  3
#define SIDEMISC  4
#define SIDEALL   9  /* guaranteed max */

#define UNITBASIC  1
#define UNITSLOTS  2
#define UNITORDERS 3
#define UNITALL    9  /* guaranteed max */

/* These limit the junk in mapfile headers. */

#define MAXINCLUDES 9     /* max number of included files */
#define MAXMAPNOTES 40    /* max lines of notes */

/* Theoretically, there is no maximum size to xconq maps, but the minimum */
/* size is set by mystical properties of display, and is not negotiable. */

#define MINWIDTH 5
#define MINHEIGHT 5

/* Letters for hex and outlined hex.  Exact use is up to the interface - */
/* the X interface has hexagonal shapes in its xconq font for these.  No */
/* problems about conflicting with unit or terrain characters. */

#define HEX 'O'
#define OHEX 'o'

/* This structure should be as small as possible, since it is an */
/* individual entry in the array containing the entire world. */
/* The "type" and "people" slots could be combined, but this might */
/* slow accesses undesirably, because of bit field extraction. */

typedef struct a_hex {
    char type;            /* terrain type at this spot */
    char people;          /* alignment/number of people in this hex */
    struct a_unit *surf;  /* pointer to unit if any */
} Hex;

/* Just for convenience, global variables about map live in this structure. */

typedef struct a_world {
    int width, height;    /* size of the world */
    int scale;            /* scale in km (not really very important) */
    bool known;           /* true if everybody knows what world looks like */
    Hex *terrain;         /* pointer to array of hexes */
} World;

/* The type of a hex in the world is a small number representing the */
/* terrain type.  Only about 10 types are defined, in terrain.h */

#define terrain_at(x,y) ((world.terrain[(y)*world.width+(x)]).type)

#define set_terrain_at(x,y,t) \
  ((world.terrain[(y)*world.width+(x)]).type = (t))

/* The people only have a side alignment, no mention of population */
/* (at least for now). */

#define people_at(x,y) ((world.terrain[(y)*world.width+(x)]).people)

#define set_people_at(x,y,p) \
  ((world.terrain[(y)*world.width+(x)]).people = (p))

#define NOBODY 0

#define unpopulated(x,y) (people_at((x),(y)) == NOBODY)

/* The unit is a raw pointer - this macro is used a *lot*. (Any prospects */
/* for optimization?) */

#define unit_at(x,y) ((world.terrain[(y)*world.width+(x)]).surf)

#define set_unit_at(x,y,u) \
  ((world.terrain[(y)*world.width+(x)]).surf = (u))

/* This little macro implements wraparound in the x direction. */
/* The stupid add is for the benefit of brain-damaged mod operators */
/* that don't handle negative numbers properly. */

#define wrap(x) (((x) + 4*world.width) % world.width)

/* Constrain y to northern and southern edges. */

#define limit(y) (max(0, min((y), (world.height-1))))

#define interior(y) (max(1, min((y), (world.height-2))))

/* Declaration of the world itself. */

extern World world;