Mercurial > hg > early-roguelike
comparison xrogue/fight.c @ 225:4f6e056438eb
Merge the GCC5 and build fix branches.
| author | John "Elwin" Edwards |
|---|---|
| date | Wed, 02 Mar 2016 21:28:34 -0500 |
| parents | f54901b9c39b |
| children | 7c1cb43f346e |
comparison
equal
deleted
inserted
replaced
| 224:4d0f53998e8a | 225:4f6e056438eb |
|---|---|
| 17 */ | 17 */ |
| 18 | 18 |
| 19 #include <curses.h> | 19 #include <curses.h> |
| 20 #include <ctype.h> | 20 #include <ctype.h> |
| 21 #include <string.h> | 21 #include <string.h> |
| 22 #include <stdlib.h> | |
| 22 #include "rogue.h" | 23 #include "rogue.h" |
| 23 | 24 |
| 24 #define CONF_DAMAGE -1 | 25 #define CONF_DAMAGE -1 |
| 25 #define PARAL_DAMAGE -2 | 26 #define PARAL_DAMAGE -2 |
| 26 #define DEST_DAMAGE -3 | 27 #define DEST_DAMAGE -3 |
| 27 #define DRAIN_DAMAGE -4 | 28 #define DRAIN_DAMAGE -4 |
| 28 | 29 |
| 30 bool roll_em(struct thing *att_er, struct thing *def_er, struct object *weap, | |
| 31 bool hurl, struct object *cur_weapon, bool back_stab); | |
| 32 void hit(struct object *weapon, bool see_att, bool see_def, char *er, char *ee, | |
| 33 bool back_stab, bool thrown, bool short_msg); | |
| 34 void miss(struct object *weapon, bool see_att, bool see_def, char *er, char *ee, | |
| 35 bool thrown, bool short_msg); | |
| 36 int add_dam(short str); | |
| 37 int hung_dam(void); | |
| 38 | |
| 29 int killed_chance = 0; /* cumulative chance for goodies to loose it */ | 39 int killed_chance = 0; /* cumulative chance for goodies to loose it */ |
| 30 | 40 |
| 31 /* | 41 /* |
| 32 * returns true if player has a any chance to hit the monster | 42 * returns true if player has a any chance to hit the monster |
| 33 */ | 43 */ |
| 34 | 44 |
| 35 player_can_hit(tp, weap) | 45 bool |
| 36 register struct thing *tp; | 46 player_can_hit(struct thing *tp, struct object *weap) |
| 37 register struct object *weap; | |
| 38 { | 47 { |
| 39 if (off(*tp, CMAGICHIT) && off(*tp, BMAGICHIT) && off(*tp, MAGICHIT)) | 48 if (off(*tp, CMAGICHIT) && off(*tp, BMAGICHIT) && off(*tp, MAGICHIT)) |
| 40 return(TRUE); | 49 return(TRUE); |
| 41 if (weap && weap->o_type == RELIC) | 50 if (weap && weap->o_type == RELIC) |
| 42 return(TRUE); | 51 return(TRUE); |
| 60 /* | 69 /* |
| 61 * fight: | 70 * fight: |
| 62 * The player attacks the monster. | 71 * The player attacks the monster. |
| 63 */ | 72 */ |
| 64 | 73 |
| 65 fight(mp, weap, thrown) | 74 bool |
| 66 register coord *mp; | 75 fight(coord *mp, struct object *weap, bool thrown) |
| 67 struct object *weap; | |
| 68 bool thrown; | |
| 69 { | 76 { |
| 70 register struct thing *tp; | 77 register struct thing *tp; |
| 71 register struct linked_list *item; | 78 register struct linked_list *item; |
| 72 register bool did_hit = TRUE; | 79 register bool did_hit = TRUE; |
| 73 bool see_def, back_stab = FALSE; | 80 bool see_def, back_stab = FALSE; |
| 224 /* | 231 /* |
| 225 * attack: | 232 * attack: |
| 226 * The monster attacks the player | 233 * The monster attacks the player |
| 227 */ | 234 */ |
| 228 | 235 |
| 229 attack(mp, weapon, thrown) | 236 bool |
| 230 register struct thing *mp; | 237 attack(struct thing *mp, struct object *weapon, bool thrown) |
| 231 register struct object *weapon; | |
| 232 bool thrown; | |
| 233 { | 238 { |
| 234 register char *mname; | 239 register char *mname; |
| 235 register bool see_att, did_hit = FALSE; | 240 register bool see_att, did_hit = FALSE; |
| 236 register struct object *wielded; /* The wielded weapon */ | 241 register struct object *wielded; /* The wielded weapon */ |
| 237 struct linked_list *get_wield; /* Linked list header for wielded */ | 242 struct linked_list *get_wield; /* Linked list header for wielded */ |
| 303 /* | 308 /* |
| 304 * swing: | 309 * swing: |
| 305 * returns true if the swing hits | 310 * returns true if the swing hits |
| 306 */ | 311 */ |
| 307 | 312 |
| 308 swing(class, at_lvl, op_arm, wplus) | 313 bool |
| 309 short class; | 314 swing(short class, int at_lvl, int op_arm, int wplus) |
| 310 int at_lvl, op_arm, wplus; | |
| 311 { | 315 { |
| 312 register int res = rnd(20)+1; | 316 register int res = rnd(20)+1; |
| 313 register int need; | 317 register int need; |
| 314 | 318 |
| 315 need = char_class[class].base - | 319 need = char_class[class].base - |
| 325 /* | 329 /* |
| 326 * roll_em: | 330 * roll_em: |
| 327 * Roll several attacks | 331 * Roll several attacks |
| 328 */ | 332 */ |
| 329 | 333 |
| 330 roll_em(att_er, def_er, weap, hurl, cur_weapon, back_stab) | 334 bool |
| 331 struct thing *att_er, *def_er; | 335 roll_em(struct thing *att_er, struct thing *def_er, struct object *weap, |
| 332 struct object *weap; | 336 bool hurl, struct object *cur_weapon, bool back_stab) |
| 333 bool hurl; | |
| 334 struct object *cur_weapon; | |
| 335 bool back_stab; | |
| 336 { | 337 { |
| 337 register struct stats *att, *def; | 338 register struct stats *att, *def; |
| 338 register char *cp = NULL; | 339 register char *cp = NULL; |
| 339 register int ndice, nsides, nplus, def_arm; | 340 register int ndice, nsides, nplus, def_arm; |
| 340 char dmgbuf[20]; | 341 char dmgbuf[20]; |
| 737 * prname: | 738 * prname: |
| 738 * The print name of a combatant | 739 * The print name of a combatant |
| 739 */ | 740 */ |
| 740 | 741 |
| 741 char * | 742 char * |
| 742 prname(who, upper) | 743 prname(char *who, bool upper) |
| 743 register char *who; | |
| 744 bool upper; | |
| 745 { | 744 { |
| 746 static char tbuf[LINELEN]; | 745 static char tbuf[LINELEN]; |
| 747 | 746 |
| 748 *tbuf = '\0'; | 747 *tbuf = '\0'; |
| 749 if (who == 0) | 748 if (who == 0) |
| 764 /* | 763 /* |
| 765 * hit: | 764 * hit: |
| 766 * Print a message to indicate a succesful hit | 765 * Print a message to indicate a succesful hit |
| 767 */ | 766 */ |
| 768 | 767 |
| 769 hit(weapon, see_att, see_def, er, ee, back_stab, thrown, short_msg) | 768 void |
| 770 register struct object *weapon; | 769 hit(struct object *weapon, bool see_att, bool see_def, char *er, char *ee, |
| 771 bool see_att, see_def; | 770 bool back_stab, bool thrown, bool short_msg) |
| 772 register char *er, *ee; | |
| 773 bool back_stab, thrown, short_msg; | |
| 774 { | 771 { |
| 775 register char *s = NULL; | 772 register char *s = NULL; |
| 776 char att_name[LINELEN], /* Name of attacker */ | 773 char att_name[LINELEN], /* Name of attacker */ |
| 777 def_name[LINELEN]; /* Name of defender */ | 774 def_name[LINELEN]; /* Name of defender */ |
| 778 | 775 |
| 828 /* | 825 /* |
| 829 * miss: | 826 * miss: |
| 830 * Print a message to indicate a poor swing | 827 * Print a message to indicate a poor swing |
| 831 */ | 828 */ |
| 832 | 829 |
| 833 miss(weapon, see_att, see_def, er, ee, thrown, short_msg) | 830 void |
| 834 register struct object *weapon; | 831 miss(struct object *weapon, bool see_att, bool see_def, char *er, char *ee, |
| 835 bool see_att, see_def; | 832 bool thrown, bool short_msg) |
| 836 register char *er, *ee; | |
| 837 bool thrown, short_msg; | |
| 838 { | 833 { |
| 839 register char *s = NULL; | 834 register char *s = NULL; |
| 840 char att_name[LINELEN], /* Name of attacker */ | 835 char att_name[LINELEN], /* Name of attacker */ |
| 841 def_name[LINELEN]; /* Name of defender */ | 836 def_name[LINELEN]; /* Name of defender */ |
| 842 | 837 |
| 872 /* | 867 /* |
| 873 * dext_plus: | 868 * dext_plus: |
| 874 * compute to-hit bonus for dexterity | 869 * compute to-hit bonus for dexterity |
| 875 */ | 870 */ |
| 876 | 871 |
| 877 dext_plus(dexterity) | 872 int |
| 878 register int dexterity; | 873 dext_plus(int dexterity) |
| 879 { | 874 { |
| 880 return (dexterity > 10 ? (dexterity-13)/3 : (dexterity-10)/3); | 875 return (dexterity > 10 ? (dexterity-13)/3 : (dexterity-10)/3); |
| 881 } | 876 } |
| 882 | 877 |
| 883 | 878 |
| 884 /* | 879 /* |
| 885 * dext_prot: | 880 * dext_prot: |
| 886 * compute armor class bonus for dexterity | 881 * compute armor class bonus for dexterity |
| 887 */ | 882 */ |
| 888 | 883 |
| 889 dext_prot(dexterity) | 884 int |
| 890 register int dexterity; | 885 dext_prot(int dexterity) |
| 891 { | 886 { |
| 892 return ((dexterity-10)/2); | 887 return ((dexterity-10)/2); |
| 893 } | 888 } |
| 894 | 889 |
| 895 /* | 890 /* |
| 896 * str_plus: | 891 * str_plus: |
| 897 * compute bonus/penalties for strength on the "to hit" roll | 892 * compute bonus/penalties for strength on the "to hit" roll |
| 898 */ | 893 */ |
| 899 | 894 |
| 900 str_plus(str) | 895 int |
| 901 register short str; | 896 str_plus(short str) |
| 902 { | 897 { |
| 903 return((str-10)/3); | 898 return((str-10)/3); |
| 904 } | 899 } |
| 905 | 900 |
| 906 /* | 901 /* |
| 907 * add_dam: | 902 * add_dam: |
| 908 * compute additional damage done for exceptionally high or low strength | 903 * compute additional damage done for exceptionally high or low strength |
| 909 */ | 904 */ |
| 910 | 905 |
| 911 add_dam(str) | 906 int |
| 912 register short str; | 907 add_dam(short str) |
| 913 { | 908 { |
| 914 return((str-9)/2); | 909 return((str-9)/2); |
| 915 } | 910 } |
| 916 | 911 |
| 917 /* | 912 /* |
| 918 * hung_dam: | 913 * hung_dam: |
| 919 * Calculate damage depending on players hungry state | 914 * Calculate damage depending on players hungry state |
| 920 */ | 915 */ |
| 921 | 916 |
| 922 hung_dam() | 917 int |
| 918 hung_dam(void) | |
| 923 { | 919 { |
| 924 reg int howmuch = 0; | 920 reg int howmuch = 0; |
| 925 | 921 |
| 926 switch(hungry_state) { | 922 switch(hungry_state) { |
| 927 case F_SATIATED: | 923 case F_SATIATED: |
| 936 /* | 932 /* |
| 937 * is_magic: | 933 * is_magic: |
| 938 * Returns true if an object radiates magic | 934 * Returns true if an object radiates magic |
| 939 */ | 935 */ |
| 940 | 936 |
| 941 is_magic(obj) | 937 bool |
| 942 register struct object *obj; | 938 is_magic(struct object *obj) |
| 943 { | 939 { |
| 944 switch (obj->o_type) | 940 switch (obj->o_type) |
| 945 { | 941 { |
| 946 case ARMOR: | 942 case ARMOR: |
| 947 return obj->o_ac != armors[obj->o_which].a_class; | 943 return obj->o_ac != armors[obj->o_which].a_class; |
| 961 /* | 957 /* |
| 962 * killed: | 958 * killed: |
| 963 * Called to put a monster to death | 959 * Called to put a monster to death |
| 964 */ | 960 */ |
| 965 | 961 |
| 966 killed(item, pr, points, treasure) | 962 void |
| 967 register struct linked_list *item; | 963 killed(struct linked_list *item, bool pr, bool points, bool treasure) |
| 968 bool pr, points, treasure; | |
| 969 { | 964 { |
| 970 register struct thing *tp, *mp; | 965 register struct thing *tp, *mp; |
| 971 register struct linked_list *pitem, *nexti, *mitem; | 966 register struct linked_list *pitem, *nexti, *mitem; |
| 972 char *monst; | 967 char *monst; |
| 973 int adj; /* used for hit point adj. below. */ | 968 int adj; /* used for hit point adj. below. */ |
| 1113 * the given thrown weapon. If no thrown item is given, try to find any | 1108 * the given thrown weapon. If no thrown item is given, try to find any |
| 1114 * decent weapon. | 1109 * decent weapon. |
| 1115 */ | 1110 */ |
| 1116 | 1111 |
| 1117 struct linked_list * | 1112 struct linked_list * |
| 1118 wield_weap(thrown, mp) | 1113 wield_weap(struct object *thrown, struct thing *mp) |
| 1119 struct object *thrown; | |
| 1120 struct thing *mp; | |
| 1121 { | 1114 { |
| 1122 int look_for = 0, /* The projectile weapon we are looking for */ | 1115 int look_for = 0, /* The projectile weapon we are looking for */ |
| 1123 new_rate, /* The rating of a prospective weapon */ | 1116 new_rate, /* The rating of a prospective weapon */ |
| 1124 cand_rate = -1; /* Rating of current candidate -- higher is better */ | 1117 cand_rate = -1; /* Rating of current candidate -- higher is better */ |
| 1125 register struct linked_list *pitem, *candidate = NULL; | 1118 register struct linked_list *pitem, *candidate = NULL; |
| 1196 } | 1189 } |
| 1197 } | 1190 } |
| 1198 | 1191 |
| 1199 return(candidate); | 1192 return(candidate); |
| 1200 } | 1193 } |
| 1201 explode(tp) | 1194 |
| 1202 register struct thing *tp; | 1195 void |
| 1196 explode(struct thing *tp) | |
| 1203 { | 1197 { |
| 1204 | 1198 |
| 1205 register int x,y, damage; | 1199 register int x,y, damage; |
| 1206 struct linked_list *item; | 1200 struct linked_list *item; |
| 1207 struct thing *th; | 1201 struct thing *th; |
| 1251 /* | 1245 /* |
| 1252 * skirmish: | 1246 * skirmish: |
| 1253 * Called when one monster attacks another monster. | 1247 * Called when one monster attacks another monster. |
| 1254 */ | 1248 */ |
| 1255 | 1249 |
| 1256 skirmish(attacker, mp, weap, thrown) | 1250 bool |
| 1257 register struct thing *attacker; | 1251 skirmish(struct thing *attacker, coord *mp, struct object *weap, bool thrown) |
| 1258 register coord *mp; | |
| 1259 struct object *weap; | |
| 1260 bool thrown; | |
| 1261 { | 1252 { |
| 1262 register struct thing *defender; | 1253 register struct thing *defender; |
| 1263 register struct linked_list *item; | 1254 register struct linked_list *item; |
| 1264 register bool did_hit = TRUE, see_att, see_def; | 1255 register bool did_hit = TRUE, see_att, see_def; |
| 1265 char attname[LINELEN+1], defname[LINELEN+1]; | 1256 char attname[LINELEN+1], defname[LINELEN+1]; |
