Renaming dunbash.h to cavechop.h
authorfluffymormegil <mpread@chiark.greenend.org.uk>
Fri, 16 Mar 2012 17:19:22 +0000 (17:19 +0000)
committerfluffymormegil <mpread@chiark.greenend.org.uk>
Fri, 16 Mar 2012 17:19:22 +0000 (17:19 +0000)
cavechop.h [new file with mode: 0644]
dunbash.h [deleted file]

diff --git a/cavechop.h b/cavechop.h
new file mode 100644 (file)
index 0000000..df2a25b
--- /dev/null
@@ -0,0 +1,425 @@
+/* dunbash.h
+ * 
+ * Copyright 2005 Martin Read
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DUNBASH_H
+#define DUNBASH_H
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+
+/* change WIZARD_MODE to 1 if you want the wizard mode commands. */
+#define WIZARD_MODE 0
+
+#define is_vowel(ch) (((ch) == 'a') || ((ch) == 'e') || ((ch) == 'i') || ((ch) == 'o') || ((ch) == 'u'))
+
+/* XXX ENUMERATED TYPES XXX */
+
+/* XXX enum damtyp - types of damage. */
+enum damtyp {
+    DT_PHYS = 0, DT_COLD, DT_FIRE, DT_NECRO, DT_ELEC, DT_POISON, DT_COUNT
+};
+
+/* XXX enum game_cmd - player actions. */
+enum game_cmd {
+    DROP_ITEM, SAVE_GAME, SHOW_INVENTORY, MOVE_WEST, MOVE_SOUTH,
+    MOVE_NORTH, MOVE_EAST, MOVE_NW, MOVE_NE, MOVE_SW, MOVE_SE,
+    QUAFF_POTION, READ_SCROLL, WIELD_WEAPON, WEAR_ARMOUR,
+    TAKE_OFF_ARMOUR, PUT_ON_RING, REMOVE_RING, GIVE_HELP,
+    ATTACK, GET_ITEM, QUIT, GO_DOWN_STAIRS, STAND_STILL, EAT_FOOD,
+    DUMP_CHARA, INSPECT_ITEM, EXAMINE_MONSTER, RNG_TEST, SHOW_TERRAIN,
+    WIZARD_LEVELUP, WIZARD_DESCEND
+};
+
+/* XXX enum terrain_num */
+/* To start with, only four types of terrain: Wall, Floor, Door, Stairs. */
+enum terrain_num {
+    WALL = 0, FLOOR = 1, DOOR = 2, STAIRS = 3
+};
+
+/* XXX enum death */
+/* Sadly, there are not yet 52 kinds of way to die, only four: killed by
+ * an arbitrary string, killed by a monster, drained of body by an arbitrary
+ * string, and drained of agility by an arbitrary string. */
+enum death {
+    DEATH_KILLED, DEATH_KILLED_MON, DEATH_BODY, DEATH_AGILITY
+};
+
+/* XXX enum poclass_num */
+/* Categories of permanent object. */
+enum poclass_num {
+    POCLASS_NONE = 0, POCLASS_WEAPON = 1, POCLASS_POTION = 2,
+    POCLASS_SCROLL = 3, POCLASS_ARMOUR = 4, POCLASS_RING = 5,
+    POCLASS_FOOD = 6
+};
+
+#define RESIST_MASK_TEMPORARY  0x0000FFFFu
+#define RESIST_MASK_PERM_EQUIP 0xFFFF0000u
+#define RESIST_RING    0x00010000u
+#define RESIST_ARMOUR  0x00020000u
+/* XXX STRUCTURES XXX */
+
+/* XXX struct player */
+struct player {
+    char name[17];     /* including '\0' the fencepost. */
+    int y;             /* y-coord */
+    int x;             /* x-coord */
+    int body;          /* determines mace to-hit, melee damage, max 99 */
+    int bdam;          /* current level of temporary body drain. */
+    int agility;       /* determines sword, dagger, missile to-hit, max 99 */
+    int adam;          /* current level of temporary agility drain. */
+    int hpmax;         /* Max hit points; max of 999. */
+    int hpcur;         /* Current hit points; <= 0 is dead. */
+    int food;          /* Current nutrition in body; < 0 is hungry. */
+    int experience;    /* Experience points earned. */
+    int defence;       /* To-hit target number for monsters */
+    int protection;    /* Temporary protection from cursing */
+    int leadfoot;      /* Feet-of-lead curse */
+    int withering;     /* Vile withering curse */
+    int armourmelt;    /* Armour-like-dust curse */
+    int speed;
+    uint32_t resistances[DT_COUNT];    /* Resistances to damage types. */
+    int level; /* Each level gets you +1 body, +1 agility, +1 random
+                  point, and +(10+body/10) hit points */
+    int gold;
+    int inventory[19]; /* 19 inventory slots, leaving room for a prompt */
+    int weapon;                /* For now, you can only wield one weapon. */
+    int armour;                /* For now, you can only wear one item of armour. */
+    int ring;          /* For now, you can only wear one magic ring. */
+};
+
+#define DBCLR_L_GREY   0
+#define DBCLR_D_GREY   1
+#define DBCLR_RED      2
+#define DBCLR_BLUE     3
+#define DBCLR_GREEN    4
+#define DBCLR_PURPLE   5
+#define DBCLR_BROWN    6
+#define DBCLR_CYAN     7
+#define DBCLR_WHITE    8
+#define DBCLR_L_RED    9
+#define DBCLR_L_BLUE   10
+#define DBCLR_L_GREEN  11
+#define DBCLR_L_PURPLE 12
+#define DBCLR_YELLOW   13
+#define DBCLR_L_CYAN   14
+
+/* XXX struct permon */
+#define PM_NEWT 0
+#define PM_RAT (PM_NEWT + 1)
+#define PM_WOLF (PM_RAT + 1)
+#define PM_SNAKE (PM_WOLF + 1)
+#define PM_THUG (PM_SNAKE + 1)
+#define PM_GOON (PM_THUG + 1)
+#define PM_HUNTER (PM_GOON + 1)
+#define PM_DUELLIST (PM_HUNTER + 1)
+#define PM_WARLORD (PM_DUELLIST + 1)
+#define PM_WIZARD (PM_WARLORD + 1)
+#define PM_ARCHMAGE (PM_WIZARD + 1)
+#define PM_GOBLIN (PM_ARCHMAGE + 1)
+#define PM_BAD_ELF (PM_GOBLIN + 1)
+#define PM_TROLL (PM_BAD_ELF + 1)
+#define PM_GIANT (PM_TROLL + 1)
+#define PM_GIANT_JARL (PM_GIANT + 1)
+#define PM_ZOMBIE (PM_GIANT_JARL + 1)
+#define PM_WRAITH (PM_ZOMBIE + 1)
+#define PM_LICH (PM_WRAITH + 1)
+#define PM_VAMPIRE (PM_LICH + 1)
+#define PM_MASTER_LICH (PM_VAMPIRE + 1)
+#define PM_DEMON (PM_MASTER_LICH + 1)
+#define PM_DEFILER (PM_DEMON + 1)
+#define PM_ICE_MONSTER (PM_DEFILER + 1)
+#define PM_CENTAUR (PM_ICE_MONSTER + 1)
+#define PM_DRAGON (PM_CENTAUR + 1)
+#define PM_REAL_COUNT ((PM_DRAGON) + 1)
+
+#define PMF_RESIST_FIRE        0x00000001
+#define PMF_RESIST_COLD        0x00000002
+#define PMF_RESIST_ELEC        0x00000004
+#define PMF_UNDEAD     0x00010000
+#define PMF_DEMONIC    0x00020000
+#define PMF_MAGICIAN   0x00040000
+#define PMF_ARCHER     0x00080000
+#define PMF_SMART      0x00100000
+#define PMF_STUPID     0x00200000
+
+struct permon {
+    const char name[48];
+    const char plural[48];
+    char sym;
+    int colour;
+    int rarity;                /* Chance in 100 of being thrown back and regen'd. */
+    int power;         /* Used to determine OOD rating. */
+    /* All OOD-improved stats cap out at base + (power * base) */
+    int hp;            /* Improved by OOD rating at 1:1. */
+    int mtohit;                /* Improved by OOD rating at 1:3. */
+    int rtohit;                /* Improved by OOD rating at 1:3. */
+    int mdam;          /* Improved by OOD rating at 1:5. */
+    int rdam;          /* Improved by OOD rating at 1:5. */
+    enum damtyp rdtyp; /* type of damage used by ranged attack. */
+    const char shootverb[48];  /* shooting verb e.g. "fires an arrow", "breathes". */
+    int defence;       /* Improved by OOD rating at 1:3. */
+    int exp;           /* Unaffected by OOD rating. */
+    int speed;         /* 0 = slow; 1 = normal; 2 = quick */
+    int flags;         /* resistances, AI settings, etc. */
+};
+
+/* XXX struct permobj */
+#define PO_DAGGER 0
+#define PO_FIRST_WEAPON PO_DAGGER
+#define PO_LONG_SWORD (PO_FIRST_WEAPON + 1)
+#define PO_MACE (PO_FIRST_WEAPON + 2)
+#define PO_RUNESWORD (PO_FIRST_WEAPON + 3)
+#define PO_BOW (PO_FIRST_WEAPON + 4)
+#define PO_CROSSBOW (PO_FIRST_WEAPON + 5)
+#define PO_LAST_WEAPON PO_CROSSBOW
+#define PO_POT_HEAL (PO_LAST_WEAPON + 1)
+#define PO_FIRST_POTION PO_POT_HEAL
+#define PO_POT_POISON (PO_FIRST_POTION + 1)
+#define PO_POT_BODY (PO_FIRST_POTION + 2)
+#define PO_POT_AGILITY (PO_FIRST_POTION + 3)
+#define PO_POT_WEAKNESS (PO_FIRST_POTION + 4)
+#define PO_POT_RESTORATION (PO_FIRST_POTION + 5)
+#define PO_LAST_POTION PO_POT_RESTORATION
+#define PO_SCR_TELEPORT (PO_LAST_POTION + 1)
+#define PO_FIRST_SCROLL PO_SCR_TELEPORT
+#define PO_SCR_FIRE (PO_FIRST_SCROLL + 1)
+#define PO_SCR_MONSTERS (PO_FIRST_SCROLL + 2)
+#define PO_SCR_IDENTIFY (PO_FIRST_SCROLL + 3)
+#define PO_SCR_AGGRAVATE (PO_FIRST_SCROLL + 4)
+#define PO_SCR_PROTECTION (PO_FIRST_SCROLL + 5)
+#define PO_LAST_SCROLL PO_SCR_PROTECTION
+#define PO_LEATHER_ARMOUR (PO_LAST_SCROLL + 1)
+#define PO_FIRST_ARMOUR PO_LEATHER_ARMOUR
+#define PO_CHAINMAIL (PO_FIRST_ARMOUR + 1)
+#define PO_PLATE_ARMOUR (PO_FIRST_ARMOUR + 2)
+#define PO_MAGE_ARMOUR (PO_FIRST_ARMOUR + 3)
+#define PO_ROBE (PO_FIRST_ARMOUR + 4)
+#define PO_ROBE_SWIFTNESS (PO_FIRST_ARMOUR + 5)
+#define PO_ROBE_SHADOWS (PO_FIRST_ARMOUR + 6)
+#define PO_DRAGON_ARMOUR (PO_FIRST_ARMOUR + 7)
+#define PO_METEOR_ARMOUR (PO_FIRST_ARMOUR + 8)
+#define PO_SACRED_MAIL (PO_FIRST_ARMOUR + 9)
+#define PO_BATTLE_BALLGOWN (PO_FIRST_ARMOUR + 10)
+#define PO_RIBBONS (PO_FIRST_ARMOUR + 11)
+#define PO_LAST_ARMOUR PO_RIBBONS
+#define PO_RING_REGEN (PO_LAST_ARMOUR + 1)
+#define PO_FIRST_RING PO_RING_REGEN
+#define PO_RING_FIRE (PO_FIRST_RING + 1)
+#define PO_RING_WEDDING (PO_FIRST_RING + 2)
+#define PO_RING_VAMPIRE (PO_FIRST_RING + 3)
+#define PO_RING_FROST (PO_FIRST_RING + 4)
+#define PO_RING_DOOM (PO_FIRST_RING + 5)
+#define PO_RING_TELEPORT (PO_FIRST_RING + 6)
+#define PO_LAST_RING PO_RING_TELEPORT
+#define PO_IRON_RATION (PO_LAST_RING + 1)
+#define PO_FIRST_FOOD PO_IRON_RATION
+#define PO_DRIED_FRUIT (PO_FIRST_FOOD + 1)
+#define PO_ELVEN_BREAD (PO_FIRST_FOOD + 2)
+#define PO_LAST_FOOD PO_ELVEN_BREAD
+#define PO_GOLD (PO_LAST_FOOD + 1)
+#define PO_REAL_COUNT ((PO_GOLD) + 1)
+
+struct permobj {
+    const char name[48];
+    const char plural[48];
+    const char description[160];
+    enum poclass_num poclass;
+    int rarity;        /* Chance in 100 of being thrown away and regen'd. */
+    int sym;
+    int power; /* AC for armour; damage for weapons; colour/title for
+                * scrolls and potions and rings and such. */
+    int used;  /* Set to 1 for valid entries. */
+    int depth; /* If greater than 1, this item cannot be given out
+                * by get_random_pobj() before the specified depth. */
+};
+
+/* XXX struct mon */
+struct mon {
+    int mon_id;
+    int y;
+    int x;
+    int ai_lasty;      /* AI's belief about your last position. -1 == lost you. */
+    int ai_lastx;      /* AI's belief about your last position. -1 == lost you. */
+    int used;
+    int hpmax; /* Improved by OOD rating at 1:1. */
+    int hpcur; /* <= 0 is dead. */
+    int mtohit;        /* Improved by OOD rating at 1:3. */
+    int rtohit;        /* Improved by OOD rating at 1:3. */
+    int defence;       /* Improved by OOD rating at 1:3. */
+    int mdam;  /* Improved by OOD rating at 1:5. */
+    int rdam;  /* Improved by OOD rating at 1:5. */
+    int awake;
+    int next_summon;
+};
+
+/* XXX struct obj */
+struct obj {
+    int obj_id;
+    int quan;
+    int with_you;      /* Preserved when item DB is reaped on level change. */
+    int y;
+    int x;
+    int used;  /* Entry is occupied. */
+    int durability;    /* Weapons and armour degrade with use. */
+};
+
+#define OBJ_MAX_DUR 100
+/* XXX Object/monster arrays */
+#define NUM_OF_PERMOBJS 300
+extern struct permobj permobjs[NUM_OF_PERMOBJS];
+
+#define MONSTERS_IN_PLAY 100
+extern struct mon monsters[MONSTERS_IN_PLAY];
+
+/* XXX display.c data and funcs */
+extern int read_input(char *buffer, int length);
+extern void print_msg(const char *fmt, ...);
+extern void print_help(void);
+extern int display_init(void);
+extern void display_update(void);
+extern int display_shutdown(void);
+extern void newsym(int y, int x);
+extern void touch_back_buffer(void);
+extern void print_inv(enum poclass_num filter);
+extern int inv_select(enum poclass_num filter, const char *action, int accept_blank);
+extern enum game_cmd get_command(void);
+extern int select_dir(int *psy, int *psx);
+extern int getYN(const char *msg);
+extern int getyn(const char *msg);
+extern void press_enter(void);
+extern void pressanykey(void);
+extern void show_discoveries(void);
+
+/* "I've changed things that need to be redisplayed" flags. */
+extern int hard_redraw;
+extern int status_updated;
+extern int map_updated;
+/* "Show the player the terrain only" flag. */
+extern int show_terrain;
+
+/* XXX main.c data and funcs */
+extern int exclusive_flat(int lower, int upper); /* l+1 ... u-1 */
+extern int inclusive_flat(int lower, int upper); /* l ... u */
+extern int one_die(int sides); /* 1..n */
+extern int dice(int count, int sides);
+extern int zero_die(int sides);        /* 0..n-1 */
+extern int do_command(enum game_cmd command);
+extern uint32_t convert_range(int dy, int dx);
+extern int game_finished;
+extern int game_tick;
+extern int wizard_mode;
+
+/* XXX map.c data and funcs*/
+extern void leave_level(void);
+extern void make_new_level(void);
+extern void build_level(void);
+extern void populate_level(void);
+extern void inject_player(void);
+extern int get_room_x(int room);
+extern int get_room_y(int room);
+extern void room_reset(void);
+
+/* For now, I can't be arsed with a mapcell structure */
+#define DUN_WIDTH 42
+#define DUN_HEIGHT 42
+#define ROOM_HT_DELTA 4
+#define ROOM_WD_DELTA 4
+#define MAX_ROOMS 9
+
+extern int mapobject[DUN_HEIGHT][DUN_WIDTH];
+extern int mapmonster[DUN_HEIGHT][DUN_WIDTH];
+extern enum terrain_num terrain[DUN_HEIGHT][DUN_WIDTH];
+#define MAPFLAG_EXPLORED 0x00000001
+extern int mapflags[DUN_HEIGHT][DUN_WIDTH];
+extern int roomnums[DUN_HEIGHT][DUN_WIDTH];
+extern int roombounds[MAX_ROOMS][4];
+extern int roomlinkage[MAX_ROOMS][MAX_ROOMS];
+extern int depth;
+
+/* XXX misc.c data and funcs */
+extern const char *damtype_names[DT_COUNT];
+
+/* XXX objects.c data and funcs */
+extern void flavours_init(void);
+extern void fprint_obj_name(FILE *fp, int obj);
+extern void print_obj_name(int obj);
+extern void describe_object(int obj);
+extern int create_obj(int po_idx, int quantity, int with_you, int y, int x);
+extern int drop_obj(int inv_idx);
+extern int create_obj_class(enum poclass_num pocl, int quantity, int with_you, int y, int x);
+extern int create_obj_random(int y, int x);
+#define OBJECTS_IN_PLAY 100
+extern struct obj objects[OBJECTS_IN_PLAY];
+extern int read_scroll(int obj);
+extern int quaff_potion(int obj);
+extern int eat_food(int obj);
+extern void attempt_pickup(void);
+extern int po_is_stackable(int po);
+extern void damage_obj(int obj);
+extern int evasion_penalty(int obj);
+
+/* XXX permons.c data */
+#define NUM_OF_PERMONS 300
+/* I don't intend to start with anything like this many monsters, but,
+ * it gives me headroom. */
+extern struct permon permons[NUM_OF_PERMONS];
+
+/* XXX rng.c data and funcs */
+#define RNG_MAX 0xFFFFFFFFu
+extern uint32_t rng_state[5];
+extern uint32_t saved_state[5];
+extern uint32_t rng(void);
+extern void rng_init(void);
+
+/* XXX vector.c data and funcs */
+extern void compute_directions(int y1, int x1, int y2, int x2, int *pdy, int *pdx, int *psy, int *psx, int *pmelee, int *pcardinal);
+
+/* XXX u.c data and funcs */
+extern void u_init(void);
+extern void write_char_dump(void);
+extern int do_death(enum death d, const char *what);
+extern void heal_u(int amount, int boost, int loud);
+extern int damage_u(int amount, enum death d, const char *what);
+extern int gain_body(int amount, int loud);
+extern int gain_agility(int amount, int loud);
+extern int drain_body(int amount, const char *what, int permanent);
+extern int drain_agility(int amount, const char *what, int permanent);
+extern void gain_experience(int amount);
+extern int lev_threshold(int level);
+extern int move_player(int dy, int dx);
+extern int reloc_player(int y, int x);
+extern void recalc_defence(void);
+extern int teleport_u(void);
+extern void update_player(void);
+extern int player_resists_dtype(enum damtyp dtype);
+
+extern struct player u;
+
+#define inyourroom(my, mx) ((roomnums[u.y][u.x] != -1) && (roomnums[u.y][u.x] == roomnums[(my)][(mx)]))
+#endif
+
+/* dunbash.h */
diff --git a/dunbash.h b/dunbash.h
deleted file mode 100644 (file)
index df2a25b..0000000
--- a/dunbash.h
+++ /dev/null
@@ -1,425 +0,0 @@
-/* dunbash.h
- * 
- * Copyright 2005 Martin Read
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef DUNBASH_H
-#define DUNBASH_H
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdio.h>
-
-/* change WIZARD_MODE to 1 if you want the wizard mode commands. */
-#define WIZARD_MODE 0
-
-#define is_vowel(ch) (((ch) == 'a') || ((ch) == 'e') || ((ch) == 'i') || ((ch) == 'o') || ((ch) == 'u'))
-
-/* XXX ENUMERATED TYPES XXX */
-
-/* XXX enum damtyp - types of damage. */
-enum damtyp {
-    DT_PHYS = 0, DT_COLD, DT_FIRE, DT_NECRO, DT_ELEC, DT_POISON, DT_COUNT
-};
-
-/* XXX enum game_cmd - player actions. */
-enum game_cmd {
-    DROP_ITEM, SAVE_GAME, SHOW_INVENTORY, MOVE_WEST, MOVE_SOUTH,
-    MOVE_NORTH, MOVE_EAST, MOVE_NW, MOVE_NE, MOVE_SW, MOVE_SE,
-    QUAFF_POTION, READ_SCROLL, WIELD_WEAPON, WEAR_ARMOUR,
-    TAKE_OFF_ARMOUR, PUT_ON_RING, REMOVE_RING, GIVE_HELP,
-    ATTACK, GET_ITEM, QUIT, GO_DOWN_STAIRS, STAND_STILL, EAT_FOOD,
-    DUMP_CHARA, INSPECT_ITEM, EXAMINE_MONSTER, RNG_TEST, SHOW_TERRAIN,
-    WIZARD_LEVELUP, WIZARD_DESCEND
-};
-
-/* XXX enum terrain_num */
-/* To start with, only four types of terrain: Wall, Floor, Door, Stairs. */
-enum terrain_num {
-    WALL = 0, FLOOR = 1, DOOR = 2, STAIRS = 3
-};
-
-/* XXX enum death */
-/* Sadly, there are not yet 52 kinds of way to die, only four: killed by
- * an arbitrary string, killed by a monster, drained of body by an arbitrary
- * string, and drained of agility by an arbitrary string. */
-enum death {
-    DEATH_KILLED, DEATH_KILLED_MON, DEATH_BODY, DEATH_AGILITY
-};
-
-/* XXX enum poclass_num */
-/* Categories of permanent object. */
-enum poclass_num {
-    POCLASS_NONE = 0, POCLASS_WEAPON = 1, POCLASS_POTION = 2,
-    POCLASS_SCROLL = 3, POCLASS_ARMOUR = 4, POCLASS_RING = 5,
-    POCLASS_FOOD = 6
-};
-
-#define RESIST_MASK_TEMPORARY  0x0000FFFFu
-#define RESIST_MASK_PERM_EQUIP 0xFFFF0000u
-#define RESIST_RING    0x00010000u
-#define RESIST_ARMOUR  0x00020000u
-/* XXX STRUCTURES XXX */
-
-/* XXX struct player */
-struct player {
-    char name[17];     /* including '\0' the fencepost. */
-    int y;             /* y-coord */
-    int x;             /* x-coord */
-    int body;          /* determines mace to-hit, melee damage, max 99 */
-    int bdam;          /* current level of temporary body drain. */
-    int agility;       /* determines sword, dagger, missile to-hit, max 99 */
-    int adam;          /* current level of temporary agility drain. */
-    int hpmax;         /* Max hit points; max of 999. */
-    int hpcur;         /* Current hit points; <= 0 is dead. */
-    int food;          /* Current nutrition in body; < 0 is hungry. */
-    int experience;    /* Experience points earned. */
-    int defence;       /* To-hit target number for monsters */
-    int protection;    /* Temporary protection from cursing */
-    int leadfoot;      /* Feet-of-lead curse */
-    int withering;     /* Vile withering curse */
-    int armourmelt;    /* Armour-like-dust curse */
-    int speed;
-    uint32_t resistances[DT_COUNT];    /* Resistances to damage types. */
-    int level; /* Each level gets you +1 body, +1 agility, +1 random
-                  point, and +(10+body/10) hit points */
-    int gold;
-    int inventory[19]; /* 19 inventory slots, leaving room for a prompt */
-    int weapon;                /* For now, you can only wield one weapon. */
-    int armour;                /* For now, you can only wear one item of armour. */
-    int ring;          /* For now, you can only wear one magic ring. */
-};
-
-#define DBCLR_L_GREY   0
-#define DBCLR_D_GREY   1
-#define DBCLR_RED      2
-#define DBCLR_BLUE     3
-#define DBCLR_GREEN    4
-#define DBCLR_PURPLE   5
-#define DBCLR_BROWN    6
-#define DBCLR_CYAN     7
-#define DBCLR_WHITE    8
-#define DBCLR_L_RED    9
-#define DBCLR_L_BLUE   10
-#define DBCLR_L_GREEN  11
-#define DBCLR_L_PURPLE 12
-#define DBCLR_YELLOW   13
-#define DBCLR_L_CYAN   14
-
-/* XXX struct permon */
-#define PM_NEWT 0
-#define PM_RAT (PM_NEWT + 1)
-#define PM_WOLF (PM_RAT + 1)
-#define PM_SNAKE (PM_WOLF + 1)
-#define PM_THUG (PM_SNAKE + 1)
-#define PM_GOON (PM_THUG + 1)
-#define PM_HUNTER (PM_GOON + 1)
-#define PM_DUELLIST (PM_HUNTER + 1)
-#define PM_WARLORD (PM_DUELLIST + 1)
-#define PM_WIZARD (PM_WARLORD + 1)
-#define PM_ARCHMAGE (PM_WIZARD + 1)
-#define PM_GOBLIN (PM_ARCHMAGE + 1)
-#define PM_BAD_ELF (PM_GOBLIN + 1)
-#define PM_TROLL (PM_BAD_ELF + 1)
-#define PM_GIANT (PM_TROLL + 1)
-#define PM_GIANT_JARL (PM_GIANT + 1)
-#define PM_ZOMBIE (PM_GIANT_JARL + 1)
-#define PM_WRAITH (PM_ZOMBIE + 1)
-#define PM_LICH (PM_WRAITH + 1)
-#define PM_VAMPIRE (PM_LICH + 1)
-#define PM_MASTER_LICH (PM_VAMPIRE + 1)
-#define PM_DEMON (PM_MASTER_LICH + 1)
-#define PM_DEFILER (PM_DEMON + 1)
-#define PM_ICE_MONSTER (PM_DEFILER + 1)
-#define PM_CENTAUR (PM_ICE_MONSTER + 1)
-#define PM_DRAGON (PM_CENTAUR + 1)
-#define PM_REAL_COUNT ((PM_DRAGON) + 1)
-
-#define PMF_RESIST_FIRE        0x00000001
-#define PMF_RESIST_COLD        0x00000002
-#define PMF_RESIST_ELEC        0x00000004
-#define PMF_UNDEAD     0x00010000
-#define PMF_DEMONIC    0x00020000
-#define PMF_MAGICIAN   0x00040000
-#define PMF_ARCHER     0x00080000
-#define PMF_SMART      0x00100000
-#define PMF_STUPID     0x00200000
-
-struct permon {
-    const char name[48];
-    const char plural[48];
-    char sym;
-    int colour;
-    int rarity;                /* Chance in 100 of being thrown back and regen'd. */
-    int power;         /* Used to determine OOD rating. */
-    /* All OOD-improved stats cap out at base + (power * base) */
-    int hp;            /* Improved by OOD rating at 1:1. */
-    int mtohit;                /* Improved by OOD rating at 1:3. */
-    int rtohit;                /* Improved by OOD rating at 1:3. */
-    int mdam;          /* Improved by OOD rating at 1:5. */
-    int rdam;          /* Improved by OOD rating at 1:5. */
-    enum damtyp rdtyp; /* type of damage used by ranged attack. */
-    const char shootverb[48];  /* shooting verb e.g. "fires an arrow", "breathes". */
-    int defence;       /* Improved by OOD rating at 1:3. */
-    int exp;           /* Unaffected by OOD rating. */
-    int speed;         /* 0 = slow; 1 = normal; 2 = quick */
-    int flags;         /* resistances, AI settings, etc. */
-};
-
-/* XXX struct permobj */
-#define PO_DAGGER 0
-#define PO_FIRST_WEAPON PO_DAGGER
-#define PO_LONG_SWORD (PO_FIRST_WEAPON + 1)
-#define PO_MACE (PO_FIRST_WEAPON + 2)
-#define PO_RUNESWORD (PO_FIRST_WEAPON + 3)
-#define PO_BOW (PO_FIRST_WEAPON + 4)
-#define PO_CROSSBOW (PO_FIRST_WEAPON + 5)
-#define PO_LAST_WEAPON PO_CROSSBOW
-#define PO_POT_HEAL (PO_LAST_WEAPON + 1)
-#define PO_FIRST_POTION PO_POT_HEAL
-#define PO_POT_POISON (PO_FIRST_POTION + 1)
-#define PO_POT_BODY (PO_FIRST_POTION + 2)
-#define PO_POT_AGILITY (PO_FIRST_POTION + 3)
-#define PO_POT_WEAKNESS (PO_FIRST_POTION + 4)
-#define PO_POT_RESTORATION (PO_FIRST_POTION + 5)
-#define PO_LAST_POTION PO_POT_RESTORATION
-#define PO_SCR_TELEPORT (PO_LAST_POTION + 1)
-#define PO_FIRST_SCROLL PO_SCR_TELEPORT
-#define PO_SCR_FIRE (PO_FIRST_SCROLL + 1)
-#define PO_SCR_MONSTERS (PO_FIRST_SCROLL + 2)
-#define PO_SCR_IDENTIFY (PO_FIRST_SCROLL + 3)
-#define PO_SCR_AGGRAVATE (PO_FIRST_SCROLL + 4)
-#define PO_SCR_PROTECTION (PO_FIRST_SCROLL + 5)
-#define PO_LAST_SCROLL PO_SCR_PROTECTION
-#define PO_LEATHER_ARMOUR (PO_LAST_SCROLL + 1)
-#define PO_FIRST_ARMOUR PO_LEATHER_ARMOUR
-#define PO_CHAINMAIL (PO_FIRST_ARMOUR + 1)
-#define PO_PLATE_ARMOUR (PO_FIRST_ARMOUR + 2)
-#define PO_MAGE_ARMOUR (PO_FIRST_ARMOUR + 3)
-#define PO_ROBE (PO_FIRST_ARMOUR + 4)
-#define PO_ROBE_SWIFTNESS (PO_FIRST_ARMOUR + 5)
-#define PO_ROBE_SHADOWS (PO_FIRST_ARMOUR + 6)
-#define PO_DRAGON_ARMOUR (PO_FIRST_ARMOUR + 7)
-#define PO_METEOR_ARMOUR (PO_FIRST_ARMOUR + 8)
-#define PO_SACRED_MAIL (PO_FIRST_ARMOUR + 9)
-#define PO_BATTLE_BALLGOWN (PO_FIRST_ARMOUR + 10)
-#define PO_RIBBONS (PO_FIRST_ARMOUR + 11)
-#define PO_LAST_ARMOUR PO_RIBBONS
-#define PO_RING_REGEN (PO_LAST_ARMOUR + 1)
-#define PO_FIRST_RING PO_RING_REGEN
-#define PO_RING_FIRE (PO_FIRST_RING + 1)
-#define PO_RING_WEDDING (PO_FIRST_RING + 2)
-#define PO_RING_VAMPIRE (PO_FIRST_RING + 3)
-#define PO_RING_FROST (PO_FIRST_RING + 4)
-#define PO_RING_DOOM (PO_FIRST_RING + 5)
-#define PO_RING_TELEPORT (PO_FIRST_RING + 6)
-#define PO_LAST_RING PO_RING_TELEPORT
-#define PO_IRON_RATION (PO_LAST_RING + 1)
-#define PO_FIRST_FOOD PO_IRON_RATION
-#define PO_DRIED_FRUIT (PO_FIRST_FOOD + 1)
-#define PO_ELVEN_BREAD (PO_FIRST_FOOD + 2)
-#define PO_LAST_FOOD PO_ELVEN_BREAD
-#define PO_GOLD (PO_LAST_FOOD + 1)
-#define PO_REAL_COUNT ((PO_GOLD) + 1)
-
-struct permobj {
-    const char name[48];
-    const char plural[48];
-    const char description[160];
-    enum poclass_num poclass;
-    int rarity;        /* Chance in 100 of being thrown away and regen'd. */
-    int sym;
-    int power; /* AC for armour; damage for weapons; colour/title for
-                * scrolls and potions and rings and such. */
-    int used;  /* Set to 1 for valid entries. */
-    int depth; /* If greater than 1, this item cannot be given out
-                * by get_random_pobj() before the specified depth. */
-};
-
-/* XXX struct mon */
-struct mon {
-    int mon_id;
-    int y;
-    int x;
-    int ai_lasty;      /* AI's belief about your last position. -1 == lost you. */
-    int ai_lastx;      /* AI's belief about your last position. -1 == lost you. */
-    int used;
-    int hpmax; /* Improved by OOD rating at 1:1. */
-    int hpcur; /* <= 0 is dead. */
-    int mtohit;        /* Improved by OOD rating at 1:3. */
-    int rtohit;        /* Improved by OOD rating at 1:3. */
-    int defence;       /* Improved by OOD rating at 1:3. */
-    int mdam;  /* Improved by OOD rating at 1:5. */
-    int rdam;  /* Improved by OOD rating at 1:5. */
-    int awake;
-    int next_summon;
-};
-
-/* XXX struct obj */
-struct obj {
-    int obj_id;
-    int quan;
-    int with_you;      /* Preserved when item DB is reaped on level change. */
-    int y;
-    int x;
-    int used;  /* Entry is occupied. */
-    int durability;    /* Weapons and armour degrade with use. */
-};
-
-#define OBJ_MAX_DUR 100
-/* XXX Object/monster arrays */
-#define NUM_OF_PERMOBJS 300
-extern struct permobj permobjs[NUM_OF_PERMOBJS];
-
-#define MONSTERS_IN_PLAY 100
-extern struct mon monsters[MONSTERS_IN_PLAY];
-
-/* XXX display.c data and funcs */
-extern int read_input(char *buffer, int length);
-extern void print_msg(const char *fmt, ...);
-extern void print_help(void);
-extern int display_init(void);
-extern void display_update(void);
-extern int display_shutdown(void);
-extern void newsym(int y, int x);
-extern void touch_back_buffer(void);
-extern void print_inv(enum poclass_num filter);
-extern int inv_select(enum poclass_num filter, const char *action, int accept_blank);
-extern enum game_cmd get_command(void);
-extern int select_dir(int *psy, int *psx);
-extern int getYN(const char *msg);
-extern int getyn(const char *msg);
-extern void press_enter(void);
-extern void pressanykey(void);
-extern void show_discoveries(void);
-
-/* "I've changed things that need to be redisplayed" flags. */
-extern int hard_redraw;
-extern int status_updated;
-extern int map_updated;
-/* "Show the player the terrain only" flag. */
-extern int show_terrain;
-
-/* XXX main.c data and funcs */
-extern int exclusive_flat(int lower, int upper); /* l+1 ... u-1 */
-extern int inclusive_flat(int lower, int upper); /* l ... u */
-extern int one_die(int sides); /* 1..n */
-extern int dice(int count, int sides);
-extern int zero_die(int sides);        /* 0..n-1 */
-extern int do_command(enum game_cmd command);
-extern uint32_t convert_range(int dy, int dx);
-extern int game_finished;
-extern int game_tick;
-extern int wizard_mode;
-
-/* XXX map.c data and funcs*/
-extern void leave_level(void);
-extern void make_new_level(void);
-extern void build_level(void);
-extern void populate_level(void);
-extern void inject_player(void);
-extern int get_room_x(int room);
-extern int get_room_y(int room);
-extern void room_reset(void);
-
-/* For now, I can't be arsed with a mapcell structure */
-#define DUN_WIDTH 42
-#define DUN_HEIGHT 42
-#define ROOM_HT_DELTA 4
-#define ROOM_WD_DELTA 4
-#define MAX_ROOMS 9
-
-extern int mapobject[DUN_HEIGHT][DUN_WIDTH];
-extern int mapmonster[DUN_HEIGHT][DUN_WIDTH];
-extern enum terrain_num terrain[DUN_HEIGHT][DUN_WIDTH];
-#define MAPFLAG_EXPLORED 0x00000001
-extern int mapflags[DUN_HEIGHT][DUN_WIDTH];
-extern int roomnums[DUN_HEIGHT][DUN_WIDTH];
-extern int roombounds[MAX_ROOMS][4];
-extern int roomlinkage[MAX_ROOMS][MAX_ROOMS];
-extern int depth;
-
-/* XXX misc.c data and funcs */
-extern const char *damtype_names[DT_COUNT];
-
-/* XXX objects.c data and funcs */
-extern void flavours_init(void);
-extern void fprint_obj_name(FILE *fp, int obj);
-extern void print_obj_name(int obj);
-extern void describe_object(int obj);
-extern int create_obj(int po_idx, int quantity, int with_you, int y, int x);
-extern int drop_obj(int inv_idx);
-extern int create_obj_class(enum poclass_num pocl, int quantity, int with_you, int y, int x);
-extern int create_obj_random(int y, int x);
-#define OBJECTS_IN_PLAY 100
-extern struct obj objects[OBJECTS_IN_PLAY];
-extern int read_scroll(int obj);
-extern int quaff_potion(int obj);
-extern int eat_food(int obj);
-extern void attempt_pickup(void);
-extern int po_is_stackable(int po);
-extern void damage_obj(int obj);
-extern int evasion_penalty(int obj);
-
-/* XXX permons.c data */
-#define NUM_OF_PERMONS 300
-/* I don't intend to start with anything like this many monsters, but,
- * it gives me headroom. */
-extern struct permon permons[NUM_OF_PERMONS];
-
-/* XXX rng.c data and funcs */
-#define RNG_MAX 0xFFFFFFFFu
-extern uint32_t rng_state[5];
-extern uint32_t saved_state[5];
-extern uint32_t rng(void);
-extern void rng_init(void);
-
-/* XXX vector.c data and funcs */
-extern void compute_directions(int y1, int x1, int y2, int x2, int *pdy, int *pdx, int *psy, int *psx, int *pmelee, int *pcardinal);
-
-/* XXX u.c data and funcs */
-extern void u_init(void);
-extern void write_char_dump(void);
-extern int do_death(enum death d, const char *what);
-extern void heal_u(int amount, int boost, int loud);
-extern int damage_u(int amount, enum death d, const char *what);
-extern int gain_body(int amount, int loud);
-extern int gain_agility(int amount, int loud);
-extern int drain_body(int amount, const char *what, int permanent);
-extern int drain_agility(int amount, const char *what, int permanent);
-extern void gain_experience(int amount);
-extern int lev_threshold(int level);
-extern int move_player(int dy, int dx);
-extern int reloc_player(int y, int x);
-extern void recalc_defence(void);
-extern int teleport_u(void);
-extern void update_player(void);
-extern int player_resists_dtype(enum damtyp dtype);
-
-extern struct player u;
-
-#define inyourroom(my, mx) ((roomnums[u.y][u.x] != -1) && (roomnums[u.y][u.x] == roomnums[(my)][(mx)]))
-#endif
-
-/* dunbash.h */