Extensive revamp of common core header.
authorfluffymormegil <mpread@chiark.greenend.org.uk>
Fri, 16 Mar 2012 22:21:13 +0000 (22:21 +0000)
committerfluffymormegil <mpread@chiark.greenend.org.uk>
Fri, 16 Mar 2012 22:21:13 +0000 (22:21 +0000)
cavechop.h

index df2a25b..510222d 100644 (file)
@@ -1,6 +1,6 @@
-/* dunbash.h
+/* cavechop.h
  * 
- * Copyright 2005 Martin Read
+ * Copyright 2005-2012 Martin Read
  * 
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef DUNBASH_H
-#define DUNBASH_H
+#ifndef CAVECHOP_H
+#define CAVECHOP_H
 
 #include <stdlib.h>
 #include <stdint.h>
+#include <stdbool.h>
 #include <stdio.h>
 
 /* change WIZARD_MODE to 1 if you want the wizard mode commands. */
@@ -45,19 +46,20 @@ enum damtyp {
 
 /* 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,
+    DROP_ITEM, SAVE_GAME, SHOW_INVENTORY,
+    MOVE_WEST, MOVE_SOUTH, MOVE_NORTH, MOVE_EAST,
+    MOVE_NW, MOVE_NE, MOVE_SW, MOVE_SE,
+    WIELD_WEAPON, WEAR_ARMOUR, TAKE_OFF_ARMOUR, PUT_ON_RING, REMOVE_RING,
+    QUAFF_POTION, READ_SCROLL, THROW_FLASK,
+    EMANATE_ARMOUR, ZAP_WEAPON, MAGIC_RING, ATTACK,
+    GET_ITEM, QUIT, GO_DOWN_STAIRS, STAND_STILL, EAT_FOOD, DUMP_CHARA,
+    GIVE_HELP, 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
+    WALL = 0, FLOOR, DOOR, STAIRS, LAVA, WATER
 };
 
 /* XXX enum death */
@@ -71,9 +73,9 @@ enum death {
 /* 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
+    POCLASS_NONE = 0, POCLASS_WEAPON, POCLASS_POTION,
+    POCLASS_SCROLL, POCLASS_FLASK, POCLASS_ARMOUR, POCLASS_RING,
+    POCLASS_FOOD
 };
 
 #define RESIST_MASK_TEMPORARY  0x0000FFFFu
@@ -104,7 +106,6 @@ struct player {
     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. */
@@ -128,37 +129,21 @@ struct player {
 #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)
+enum Permon_num
+{
+    PM_NEWT = 0, PM_RAT, PM_WOLF, PM_SNAKE, PM_THUG, PM_GOON, PM_HUNTER,
+    PM_DUELLIST, PM_WARLORD, PM_WIZARD, PM_ARCHMAGE, PM_GOBLIN, PM_BAD_ELF,
+    PM_TROLL, PM_GIANT, PM_GIANT_JARL, PM_ZOMBIE, PM_WRAITH, PM_LICH,
+    PM_VAMPIRE, PM_MASTER_LICH, PM_DEMON, PM_DEFILER, PM_ICE_MONSTER,
+    PM_CENTAUR, PM_DRAGON
+};
+#define NUM_OF_PERMONS (1 + PM_DRAGON)
 
 #define PMF_RESIST_FIRE        0x00000001
 #define PMF_RESIST_COLD        0x00000002
 #define PMF_RESIST_ELEC        0x00000004
+#define PMF_RESIST_POIS        0x00000008
+#define PMF_RESIST_NECR        0x00000010
 #define PMF_UNDEAD     0x00010000
 #define PMF_DEMONIC    0x00020000
 #define PMF_MAGICIAN   0x00040000
@@ -186,67 +171,49 @@ struct permon {
     int speed;         /* 0 = slow; 1 = normal; 2 = quick */
     int flags;         /* resistances, AI settings, etc. */
 };
+extern struct permon permons[NUM_OF_PERMONS];
 
 /* XXX struct permobj */
-#define PO_DAGGER 0
+enum Permobj_nums
+{
+    // weapons
+    PO_DAGGER=0, PO_LONG_SWORD, PO_MACE, PO_RUNESWORD, PO_BOW, PO_CROSSBOW,
+    // potions
+    PO_POT_HEAL, PO_POT_BODY, PO_POT_AGILITY, PO_POT_RESTORATION,
+    // flasks
+    PO_FLASK_POISON, PO_FLASK_FIRE, PO_FLASK_WEAKNESS,
+    // scrolls
+    PO_SCR_TELEPORT, PO_SCR_FIRE, PO_SCR_PROTECTION,
+    // armour
+    PO_LEATHER_ARMOUR, PO_CHAINMAIL, PO_PLATE_ARMOUR, PO_MAGE_ARMOUR, PO_ROBE,
+    PO_ROBE_SWIFTNESS, PO_ROBE_SHADOWS, PO_DRAGON_ARMOUR, PO_METEOR_ARMOUR,
+    PO_SACRED_MAIL, PO_BATTLE_BALLGOWN, PO_RIBBONS,
+    // rings
+    PO_RING_REGEN, PO_RING_FIRE, PO_RING_VAMPIRE, PO_RING_FROST,
+    PO_RING_TELEPORT,
+    // food
+    PO_IRON_RATION, PO_DRIED_FRUIT, PO_ELVEN_BREAD
+};
 #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_FLASK PO_FLASK_POISON
+#define PO_LAST_FLASK PO_FLASK_WEAKNESS
 #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)
+#define NUM_OF_PERMOBJS ((PO_LAST_FOOD) + 1)
 
 struct permobj {
     const char name[48];
     const char plural[48];
-    const char description[160];
+    const char *description;
     enum poclass_num poclass;
     int rarity;        /* Chance in 100 of being thrown away and regen'd. */
     int sym;
@@ -256,8 +223,10 @@ struct permobj {
     int depth; /* If greater than 1, this item cannot be given out
                 * by get_random_pobj() before the specified depth. */
 };
+extern struct permobj permobjs[NUM_OF_PERMOBJS];
 
 /* XXX struct mon */
+#define MONSTERS_IN_PLAY 100
 struct mon {
     int mon_id;
     int y;
@@ -275,8 +244,11 @@ struct mon {
     int awake;
     int next_summon;
 };
+extern struct mon monsters[MONSTERS_IN_PLAY];
 
 /* XXX struct obj */
+#define OBJ_MAX_DUR 100
+#define OBJECTS_IN_PLAY 100
 struct obj {
     int obj_id;
     int quan;
@@ -286,14 +258,7 @@ struct obj {
     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];
+extern struct obj objects[OBJECTS_IN_PLAY];
 
 /* XXX display.c data and funcs */
 extern int read_input(char *buffer, int length);
@@ -313,6 +278,7 @@ extern int getyn(const char *msg);
 extern void press_enter(void);
 extern void pressanykey(void);
 extern void show_discoveries(void);
+extern void touch_one_screen(int y, int x);
 
 /* "I've changed things that need to be redisplayed" flags. */
 extern int hard_redraw;
@@ -339,11 +305,10 @@ 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);
+extern void explore_around(int y, int x);
 
 /* For now, I can't be arsed with a mapcell structure */
+#define LEVGEN_WALK_STEPS 600
 #define DUN_WIDTH 42
 #define DUN_HEIGHT 42
 #define ROOM_HT_DELTA 4
@@ -355,9 +320,6 @@ 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 */
@@ -370,10 +332,9 @@ 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 consume_obj(int obj);
 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);
@@ -382,11 +343,6 @@ 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
@@ -418,8 +374,6 @@ 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 */
+/* cavechop.h */