From: fluffymormegil Date: Fri, 16 Mar 2012 22:21:13 +0000 (+0000) Subject: Extensive revamp of common core header. X-Git-Tag: contest-release-signed~8 X-Git-Url: http://git.blackswordsonics.com/?a=commitdiff_plain;h=6fa459763649f06d631ba256935fe507ab017176;p=cavechop-7drl Extensive revamp of common core header. --- diff --git a/cavechop.h b/cavechop.h index df2a25b..510222d 100644 --- a/cavechop.h +++ b/cavechop.h @@ -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 @@ -24,11 +24,12 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef DUNBASH_H -#define DUNBASH_H +#ifndef CAVECHOP_H +#define CAVECHOP_H #include #include +#include #include /* 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 */