3 #include "mon_resist_def.h"
7 /////////////////////////////////////////////////////////////////////////
10 mon_resist_def::mon_resist_def()
11 : elec(0), poison(0), fire(0), steam(0), cold(0), hellfire(0), acid(0),
12 asphyx(false), sticky_flame(false), rotting(false), pierce(0), slice(0),
17 short mon_resist_def::get_default_res_level(int resist
, short level
) const
33 mon_resist_def::mon_resist_def(int flags
, short level
)
34 : elec(0), poison(0), fire(0), steam(0), cold(0), hellfire(0), acid(0),
35 asphyx(false), sticky_flame(false), rotting(false), pierce(0), slice(0),
38 for (int i
= 0; i
< 32; ++i
)
40 const short nl
= get_default_res_level(1 << i
, level
);
41 switch (flags
& (1 << i
))
44 case MR_RES_STEAM
: steam
= 3; break;
45 case MR_RES_ELEC
: elec
= nl
; break;
46 case MR_RES_POISON
: poison
= nl
; break;
47 case MR_RES_FIRE
: fire
= nl
; break;
48 case MR_RES_HELLFIRE
: hellfire
= nl
; break;
49 case MR_RES_COLD
: cold
= nl
; break;
50 case MR_RES_ASPHYX
: asphyx
= true; break;
51 case MR_RES_ACID
: acid
= nl
; break;
54 case MR_VUL_ELEC
: elec
= -nl
; break;
55 case MR_VUL_POISON
: poison
= -nl
; break;
56 case MR_VUL_FIRE
: fire
= -nl
; break;
57 case MR_VUL_COLD
: cold
= -nl
; break;
59 // resistance to certain damage types
60 case MR_RES_PIERCE
: pierce
= nl
; break;
61 case MR_RES_SLICE
: slice
= nl
; break;
62 case MR_RES_BLUDGEON
: bludgeon
= nl
; break;
64 // vulnerability to certain damage types
65 case MR_VUL_PIERCE
: pierce
= -nl
; break;
66 case MR_VUL_SLICE
: slice
= -nl
; break;
67 case MR_VUL_BLUDGEON
: bludgeon
= -nl
; break;
69 case MR_RES_STICKY_FLAME
: sticky_flame
= true; break;
70 case MR_RES_ROTTING
: rotting
= true; break;
77 const mon_resist_def
&mon_resist_def::operator |= (const mon_resist_def
&o
)
83 hellfire
+= o
.hellfire
;
84 asphyx
= asphyx
|| o
.asphyx
;
88 bludgeon
+= o
.bludgeon
;
89 sticky_flame
= sticky_flame
|| o
.sticky_flame
;
90 rotting
= rotting
|| o
.rotting
;
94 mon_resist_def
mon_resist_def::operator | (const mon_resist_def
&o
) const
96 mon_resist_def
c(*this);
100 short mon_resist_def::get_resist_level(mon_resist_flags res_type
) const
104 case MR_RES_ELEC
: return elec
;
105 case MR_RES_POISON
: return poison
;
106 case MR_RES_FIRE
: return fire
;
107 case MR_RES_STEAM
: return steam
;
108 case MR_RES_COLD
: return cold
;
109 case MR_RES_ACID
: return acid
;
110 case MR_RES_ROTTING
: return rotting
;