1 /* SCCS Id: @(#)attrib.c 3.4 2002/10/07 */
2 /* Copyright 1988, 1989, 1990, 1992, M. Stephenson */
3 /* NetHack may be freely redistributed. See license for details. */
5 /* attribute modification routines. */
9 /* #define DEBUG */ /* uncomment for debugging info */
13 /* part of the output on gain or loss of attribute */
15 const char * const plusattr
[] = {
16 "strong", "smart", "wise", "agile", "tough", "charismatic"
18 * const minusattr
[] = {
19 "weak", "stupid", "foolish", "clumsy", "fragile", "repulsive"
23 /* KMH, intrinsics patch -- many of these are updated */
28 const char *gainstr
, *losestr
;
30 } arc_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
31 { 1, &(HFast
), "", "", TRUE
},
32 { 1, &(HMagicFindBonus
), "", "", TRUE
},
33 { 4, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
34 { 10, &(HSearching
), "perceptive", "unaware", TRUE
},
37 ana_abil
[] = { { 1, &(HFull_nutrient
), "", "", TRUE
},
38 { 1, &(HDefusing
), "", "", TRUE
},
39 { 7, &(HFast
), "quick", "slow", TRUE
},
40 { 15, &(HWarning
), "precognitive", "noncognitive", TRUE
},
41 { 15, &(HCont_resist
), "protected from contamination", "vulnerable to contamination", TRUE
},
42 { 25, &(HExpBoost
), "a surge of experience", "a loss of experience", TRUE
},
45 eme_abil
[] = { { 5, &(SanityTrebleEffect
), "", "", FALSE
},
46 { 10, &(CompletelyBadPartBug
), "", "", FALSE
},
47 { 15, &(SatanEffect
), "", "", FALSE
},
48 { 20, &(MonnoiseEffect
), "", "", FALSE
},
49 { 25, &(BrownSpells
), "", "", FALSE
},
50 { 28, &(LongingEffect
), "", "", FALSE
},
53 xel_abil
[] = { { 1, &(HSwimming
), "", "", TRUE
},
54 { 1, &(HAcid_resistance
), "", "", TRUE
},
55 { 1, &(HScentView
), "", "", TRUE
},
56 { 5, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
57 { 6, &(HStealth
), "stealthy", "noisy", TRUE
},
58 { 6, &(HJumping
), "able to jump around", "unable to jump around", TRUE
},
59 { 9, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
60 { 10, &(HFear_resistance
), "unafraid", "afraid", TRUE
},
61 { 12, &(HDiscount_action
), "resistant to paralysis", "less resistant to paralysis", TRUE
},
62 { 12, &(HTelepat
), "disturbances in the force", "your grip on the force lessen", TRUE
},
63 { 14, &(HCold_resistance
), "warm", "cooler", TRUE
},
64 { 15, &(HInfravision
), "perceptive", "half blind", TRUE
},
65 { 16, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
66 { 16, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
67 { 18, &(HRegeneration
), "regenerative", "your healing rate slowing down", TRUE
},
68 { 18, &(HCont_resist
), "protected from contamination", "vulnerable to contamination", TRUE
},
69 { 20, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
70 { 22, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
71 { 24, &(HDisplaced
), "displaced", "easy to spot", TRUE
},
72 { 25, &(HStone_resistance
), "rock solid", "breakable", TRUE
},
73 {25, &(HMagical_breathing
), "aquatic", "hydrophobic", TRUE
},
74 { 26, &(HShock_resistance
), "insulated", "conductive", TRUE
},
75 { 28, &(HHalf_physical_damage
), "resistant to normal damage", "less resistant to damage", TRUE
},
76 { 30, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
79 ast_abil
[] = { { 1, &(HSwimming
), "", "", TRUE
},
80 { 4, &(HFast
), "quick", "slow", TRUE
},
81 { 8, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
82 { 10, &(HFire_resistance
), "cool", "warmer", TRUE
},
83 { 12, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
84 { 14, &(HSleep_resistance
), "awake", "tired", TRUE
},
85 { 15, &(HTeleport_control
), "controlled", "helpless", TRUE
},
86 { 16, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
87 { 18, &(HFull_nutrient
), "your metabolism slowing down", "your metabolism speeding up", TRUE
},
88 { 19, &(HUseTheForce
), "like a jedi", "a loss of your jedi powers", TRUE
},
89 { 20, &(HShock_resistance
), "insulated", "conductive", TRUE
},
90 { 20, &(HFear_resistance
), "unafraid", "afraid", TRUE
},
91 { 24, &(HDisint_resistance
), "stable", "brittle", TRUE
},
92 { 25, &(HSick_resistance
), "immune to diseases", "no longer immune to diseases", TRUE
},
93 {28, &(HMagical_breathing
), "aquatic", "hydrophobic", TRUE
},
94 { 28, &(HFlying
), "weightless", "grounded", TRUE
},
95 { 30, &(HCold_resistance
), "warm", "cooler", TRUE
},
98 pic_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
99 { 6, &(HFast
), "quick", "slow", TRUE
},
100 { 8, &(HSearching
), "perceptive", "unaware", TRUE
},
101 { 16, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
102 { 20, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
105 sto_abil
[] = { { 1, &(HShock_resistance
), "", "", TRUE
},
106 { 4, &(HFast
), "quick", "slow", TRUE
},
107 { 10, &(HSleep_resistance
), "awake", "tired", TRUE
},
108 { 15, &(HFast
), "quick", "slow", TRUE
},
109 { 19, &(HRegeneration
), "regenerative", "your healing rate slowing down", TRUE
},
110 { 25, &(HDisint_resistance
), "stable", "brittle", TRUE
},
111 { 28, &(HFast
), "quick", "slow", TRUE
},
114 sof_abil
[] = { { 7, &(HSleep_resistance
), "awake", "tired", TRUE
},
115 { 20, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
116 { 28, &(HWarning
), "precognitive", "noncognitive", TRUE
},
119 cra_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
120 { 7, &(HFast
), "quick", "slow", TRUE
},
121 { 12, &(HStealth
), "stealthy", "noisy", TRUE
},
122 { 14, &(HTeleport_control
), "controlled", "helpless", TRUE
},
123 { 20, &(HSearching
), "perceptive", "unaware", TRUE
},
126 ble_abil
[] = { { 10, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
129 dem_abil
[] = { { 5, &(MysteriousForceActive
), "", "", FALSE
},
130 { 9, &(UnfairAttackBug
), "", "", FALSE
},
131 { 13, &(HighlevelStatus
), "", "", FALSE
},
132 { 17, &(TrapCreationProblem
), "", "", FALSE
},
133 { 21, &(UndressingEffect
), "", "", FALSE
},
134 { 25, &(OrangeSpells
), "", "", FALSE
},
135 { 30, &(SatanEffect
), "", "", FALSE
},
138 dan_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
139 { 3, &(HFast
), "fleet of foot", "lead-footed", TRUE
},
140 { 10, &(HSearching
), "perceptive", "distractable", TRUE
},
141 { 16, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
142 { 20, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
143 { 20, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
144 { 25, &(HStun_resist
), "steady", "less steady", TRUE
},
147 but_abil
[] = { { 15, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
148 { 20, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
151 cam_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
154 wal_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
157 spa_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
160 unb_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
161 { 1, &(HMysteryResist
), "", "", TRUE
},
164 pre_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
167 sco_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
170 sec_abil
[] = { { 5, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
171 { 10, &(HMagical_breathing
), "aquatic", "hydrophobic", TRUE
},
172 { 15, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
173 { 18, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
174 { 20, &(HDiscount_action
), "resistant to paralysis", "less resistant to paralysis", TRUE
},
175 { 25, &(HSwimming
), "ready to swim","afraid of the water", TRUE
},
176 { 30, &(HKeen_memory
), "able to memorize everything", "unable to memorize anything", TRUE
},
179 sma_abil
[] = { { 12, &(HFast
), "quick", "slow", TRUE
},
180 { 15, &(HExtra_wpn_practice
), "skillful", "unskilled", TRUE
},
181 { 20, &(HJumping
), "able to jump around", "unable to jump around", TRUE
},
184 bar_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
185 { 7, &(HFast
), "quick", "slow", TRUE
},
186 { 15, &(HStealth
), "stealthy", "noisy", TRUE
},
189 noo_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
190 { 1, &(HMagicVacuum
), "", "", FALSE
},
191 { 7, &(HFast
), "quick", "slow", TRUE
},
194 dia_abil
[] = { { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
195 { 24, &(HFast
), "quick", "slow", TRUE
},
196 { 25, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
197 { 30, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
198 { 30, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
199 { 30, &(HCold_resistance
), "warm", "cooler", TRUE
},
200 { 30, &(HFire_resistance
), "cool", "warmer", TRUE
},
201 { 30, &(HShock_resistance
), "insulated", "conductive", TRUE
},
202 { 30, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
205 hus_abil
[] = { { 1, &(HScentView
), "", "", TRUE
},
208 pro_abil
[] = { { 10, &(HDiminishedBleeding
), "your wounds closing faster", "your blood pumping", TRUE
},
211 ass_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
212 { 1, &(HDefusing
), "", "", TRUE
},
213 { 10, &(HFast
), "quick", "slow", TRUE
},
214 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
217 ama_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
218 { 5, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
219 { 7, &(HFast
), "quick", "slow", TRUE
},
220 { 10, &(HSwimming
), "ready to swim","afraid of the water", TRUE
},
221 { 20, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
224 mas_abil
[] = { { 1, &(HSee_invisible
), "", "", TRUE
},
225 { 1, &(HKeen_memory
), "", "", TRUE
},
226 { 3, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
227 { 10, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
228 { 15, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
229 { 16, &(HFull_nutrient
), "your metabolism slowing down", "your metabolism speeding up", TRUE
},
230 { 20, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
231 { 20, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
232 { 24, &(HInvis
), "hidden", "more visible", TRUE
},
233 { 25, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
236 sup_abil
[] = { { 1, &(HTeleportation
), "", "", FALSE
},
237 { 3, &(HSleep_resistance
), "awake", "tired", TRUE
},
238 { 8, &(HWarning
), "sensitive", "careless", TRUE
},
239 { 22, &(HTeleport_control
), "controlled", "helpless", TRUE
},
242 cou_abil
[] = { { 1, &(HHunger
), "", "", FALSE
},
243 { 1, &(HAggravate_monster
), "", "", FALSE
},
244 { 1, &(HConflict
), "", "", FALSE
},
245 { 1, &(HBurdenedState
), "", "", FALSE
},
246 { 1, &(HMagicVacuum
), "", "", FALSE
},
247 { 1, &(HFuckOverEffect
), "", "", FALSE
},
250 wei_abil
[] = { { 1, &(HPsi_resist
), "", "", TRUE
},
251 { 6, &(HTeleportation
), "very jumpy", "less jumpy", FALSE
},
252 { 8, &(HDiscount_action
), "resistant to paralysis", "less resistant to paralysis", TRUE
},
253 { 9, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
254 { 10, &(HDeath_resistance
), "un-dead", "dead", TRUE
},
255 { 12, &(HHunger
), "very hungry", "less hungry", FALSE
},
256 { 13, &(HExpBoost
), "a surge of experience", "a loss of experience", TRUE
},
257 { 14, &(HAcid_resistance
), "warded", "endangered", TRUE
},
258 { 16, &(HDrain_resistance
), "more resistant to drain life", "less resistant to drain life", TRUE
},
259 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
260 { 22, &(HInfravision
), "perceptive", "half blind", TRUE
},
261 { 25, &(HPolymorph
), "polymorphic", "form-stable", FALSE
},
262 { 26, &(HCold_resistance
), "warm", "cooler", TRUE
},
263 { 28, &(HSlow_digestion
), "a certain satiation", "the need to eat more", TRUE
},
264 { 30, &(HFast
), "quick", "slow", TRUE
},
267 brd_abil
[] = { { 5, &(HSleep_resistance
), "awake", "tired", TRUE
},
268 { 10, &(HStealth
), "stealthy", "noisy", TRUE
},
269 { 10, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
272 gam_abil
[] = { { 3, &(HSleep_resistance
), "awake", "tired", TRUE
},
273 { 10, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
274 { 13, &(HSlow_digestion
), "a certain satiation", "the need to eat more", TRUE
},
275 { 23, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
276 { 24, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
279 cav_abil
[] = { { 7, &(HFast
), "quick", "slow", TRUE
},
280 { 10, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
281 { 12, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
282 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
285 jan_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
286 { 10, &(HSearching
), "perceptive", "unaware", TRUE
},
287 { 20, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
288 { 25, &(HFear_resistance
), "unafraid", "afraid", TRUE
},
291 con_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
292 { 1, &(HDefusing
), "", "", TRUE
},
293 { 7, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
294 { 20, &(HSearching
), "perceptive", "unaware", TRUE
},
297 mur_abil
[] = { { 1, &(HAggravate_monster
), "", "", FALSE
},
298 { 2, &(HSearching
), "perceptive", "unaware", TRUE
},
299 { 3, &(HSearching
), "perceptive", "unaware", TRUE
},
300 { 4, &(HSearching
), "perceptive", "unaware", TRUE
},
301 { 5, &(HSearching
), "perceptive", "unaware", TRUE
},
302 { 6, &(HSearching
), "perceptive", "unaware", TRUE
},
303 { 7, &(HSearching
), "perceptive", "unaware", TRUE
},
304 { 8, &(HSearching
), "perceptive", "unaware", TRUE
},
305 { 9, &(HSearching
), "perceptive", "unaware", TRUE
},
306 { 10, &(HSearching
), "perceptive", "unaware", TRUE
},
307 { 11, &(HSearching
), "perceptive", "unaware", TRUE
},
308 { 12, &(HSearching
), "perceptive", "unaware", TRUE
},
309 { 13, &(HSearching
), "perceptive", "unaware", TRUE
},
310 { 14, &(HSearching
), "perceptive", "unaware", TRUE
},
311 { 15, &(HSearching
), "perceptive", "unaware", TRUE
},
312 { 16, &(HSearching
), "perceptive", "unaware", TRUE
},
313 { 17, &(HSearching
), "perceptive", "unaware", TRUE
},
314 { 18, &(HSearching
), "perceptive", "unaware", TRUE
},
315 { 19, &(HSearching
), "perceptive", "unaware", TRUE
},
316 { 20, &(HSearching
), "perceptive", "unaware", TRUE
},
317 { 20, &(HSearching
), "perceptive", "unaware", TRUE
},
318 { 21, &(HSearching
), "perceptive", "unaware", TRUE
},
319 { 22, &(HSearching
), "perceptive", "unaware", TRUE
},
320 { 23, &(HSearching
), "perceptive", "unaware", TRUE
},
321 { 24, &(HSearching
), "perceptive", "unaware", TRUE
},
322 { 25, &(HSearching
), "perceptive", "unaware", TRUE
},
323 { 26, &(HSearching
), "perceptive", "unaware", TRUE
},
324 { 27, &(HSearching
), "perceptive", "unaware", TRUE
},
325 { 28, &(HSearching
), "perceptive", "unaware", TRUE
},
326 { 29, &(HSearching
), "perceptive", "unaware", TRUE
},
327 { 30, &(HSearching
), "perceptive", "unaware", TRUE
},
330 bul_abil
[] = { { 1, &(HAggravate_monster
), "", "", FALSE
},
331 { 7, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
334 fai_abil
[] = { { 1, &(HAggravate_monster
), "", "", FALSE
},
335 { 1, &(BadEffectProblem
), "", "", FALSE
},
336 { 1, &(AutomaticVulnerabilitiy
), "", "", FALSE
},
339 sta_abil
[] = { { 1, &(HTechnicality
), "", "", TRUE
},
340 { 5, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
343 trs_abil
[] = { { 5, &(LevelTrapEffect
), "", "", FALSE
},
344 { 10, &(CaptchaProblem
), "", "", FALSE
},
345 { 15, &(ChaosTerrain
), "", "", FALSE
},
346 { 20, &(PlayerCannotTrainSkills
), "", "", FALSE
},
347 { 25, &(FoodIsAlwaysRotten
), "", "", FALSE
},
348 { 30, &(InventoryLoss
), "", "", FALSE
},
351 kur_abil
[] = { { 4, &(NotSeenBug
), "", "", FALSE
},
352 { 8, &(GrayoutBug
), "", "", FALSE
},
353 { 10, &(HDiminishedBleeding
), "your wounds closing faster", "your blood pumping", TRUE
},
354 { 12, &(DifficultyIncreased
), "", "", FALSE
},
355 { 16, &(UnfairAttackBug
), "", "", FALSE
},
356 { 20, &(EnmityBug
), "", "", FALSE
},
357 { 25, &(ElongationBug
), "", "", FALSE
},
358 { 30, &(Antileveling
), "", "", FALSE
},
361 gro_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
362 { 4, &(Unidentify
), "", "", FALSE
},
363 { 8, &(MojibakeEffect
), "", "", FALSE
},
364 { 12, &(Dropcurses
), "", "", FALSE
},
365 { 15, &(HStealth
), "stealthy", "noisy", TRUE
},
366 { 16, &(RecurringDisenchant
), "", "", FALSE
},
367 { 20, &(TimerunBug
), "", "", FALSE
},
368 { 25, &(FastMetabolismEffect
), "", "", FALSE
},
369 { 30, &(Goldspells
), "", "", FALSE
},
372 mah_abil
[] = { { 1, &(HAggravate_monster
), "", "", FALSE
},
373 { 1, &(HAntimagic
), "", "", TRUE
},
374 { 7, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
375 { 15, &(HTeleport_control
), "controlled","uncontrolled", TRUE
},
376 { 15, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
379 sla_abil
[] = { { 1, &(HAggravate_monster
), "", "", FALSE
},
380 { 1, &(HCold_resistance
), "", "", TRUE
},
381 { 5, &(HSleep_resistance
), "awake", "tired", TRUE
},
382 { 15, &(HTeleport_control
), "controlled", "helpless", TRUE
},
383 { 25, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
386 fla_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
387 { 12, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
388 { 13, &(HCold_resistance
), "warm", "cooler", TRUE
},
389 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
392 sli_abil
[] = { { 1, &(HAcid_resistance
), "", "", TRUE
},
393 { 1, &(MenuBug
), "", "", FALSE
},
394 { 5, &(AutoDestruct
), "", "", FALSE
},
395 { 6, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
396 { 7, &(DSTWProblem
), "", "", FALSE
},
397 { 9, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
398 { 10, &(HCorrosivity
), "corrosive", "less acidic", TRUE
},
399 { 12, &(FreeHandLoss
), "", "", FALSE
},
400 { 14, &(HDiminishedBleeding
), "your wounds closing faster", "your blood pumping", TRUE
},
401 { 15, &(HSleep_resistance
), "awake", "tired", TRUE
},
402 { 16, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
403 { 17, &(DifficultyIncreased
), "", "", FALSE
},
404 { 18, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
405 { 20, &(HSick_resistance
), "immune to diseases", "no longer immune to diseases", TRUE
},
406 { 22, &(Deafness
), "", "", FALSE
},
407 { 24, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
408 { 25, &(HDisint_resistance
), "stable", "brittle", TRUE
},
409 { 26, &(HDiscount_action
), "resistant to paralysis", "less resistant to paralysis", TRUE
},
410 { 28, &(ShadesOfGrey
), "", "", FALSE
},
411 { 30, &(HStone_resistance
), "rock solid", "breakable", TRUE
},
414 erd_abil
[] = { { 1, &(HFree_action
), "", "", TRUE
},
415 { 10, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
418 cel_abil
[] = { { 1, &(BlueSpells
), "", "", FALSE
},
419 { 5, &(DamageMeterBug
), "", "", FALSE
},
420 { 9, &(RangCallEffect
), "", "", FALSE
},
421 { 10, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
422 { 12, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
423 { 14, &(CrapEffect
), "", "", FALSE
},
424 { 15, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
425 { 18, &(PokelieEffect
), "", "", FALSE
},
426 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
427 { 22, &(ExplodingDiceEffect
), "", "", FALSE
},
428 { 26, &(AutopilotEffect
), "", "", FALSE
},
429 { 30, &(InterfaceScrewed
), "", "", FALSE
},
432 dea_abil
[] = { { 1, &(HResistancePiercing
), "", "", TRUE
},
433 { 10, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
434 { 18, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
437 blo_abil
[] = { { 1, &(HWarning
), "", "", TRUE
},
438 { 8, &(HSearching
), "perceptive", "unaware", TRUE
},
439 { 12, &(HStealth
), "stealthy", "noisy", TRUE
},
440 { 15, &(HFire_resistance
), "cool", "warmer", TRUE
},
441 { 18, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
442 { 20, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
445 yau_abil
[] = { { 1, &(HInfravision
), "", "", TRUE
},
446 { 10, &(HFast
), "quick", "slow", TRUE
},
447 { 15, &(HFire_resistance
), "cool", "warmer", TRUE
},
448 { 16, &(HClairvoyant
), "clairvoyant", "mentally poor", TRUE
},
449 { 18, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
450 { 20, &(HTelepat
), "disturbances in the force", "your grip on the force lessen", TRUE
},
451 { 20, &(HKeen_memory
), "able to memorize everything", "unable to memorize anything", TRUE
},
452 { 22, &(HCold_resistance
), "warm", "cooler", TRUE
},
453 { 26, &(HShock_resistance
), "insulated", "conductive", TRUE
},
456 scr_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
457 { 5, &(HSleep_resistance
), "awake", "tired", TRUE
},
458 { 14, &(HTeleport_control
), "controlled", "helpless", TRUE
},
459 { 16, &(HCold_resistance
), "warm", "cooler", TRUE
},
460 { 28, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
463 joc_abil
[] = { { 10, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
464 { 20, &(HPeacevision
), "able to recognize peaceful creatures", "unable to tell friend from enemy", TRUE
},
465 { 28, &(HFree_action
), "freed", "a loss of freedom", TRUE
},
468 coo_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
469 { 1, &(HFull_nutrient
), "", "", TRUE
},
470 { 15, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
473 sng_abil
[] = { { 1, &(HFull_nutrient
), "", "", TRUE
},
474 { 1, &(HFuckOverEffect
), "", "", FALSE
},
477 soc_abil
[] = { { 1, &(HFuckOverEffect
), "", "", FALSE
},
480 psy_abil
[] = { { 1, &(HSee_invisible
), "", "", TRUE
},
481 { 5, &(HSleep_resistance
), "awake", "tired", TRUE
},
482 { 7, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
483 { 10, &(HPeacevision
), "able to recognize peaceful creatures", "unable to tell friend from enemy", TRUE
},
484 { 12, &(HWarning
), "precognitive", "noncognitive", TRUE
},
485 { 15, &(HEnergy_regeneration
), "charged with mana", "a loss of mana", TRUE
},
486 { 16, &(HTeleport_control
), "controlled", "helpless", TRUE
},
487 { 17, &(HStealth
), "stealthy", "noisy", TRUE
},
488 { 18, &(HConf_resist
), "more resistant to confusion", "less resistant to confusion", TRUE
},
489 { 20, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
490 { 22, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
491 { 24, &(HVersus_curses
), "curse resistant", "vulnerable to curses", TRUE
},
492 { 27, &(HStun_resist
), "steady", "less steady", TRUE
},
493 { 30, &(HHalf_spell_damage
), "resistant to spells", "less resistant to spells", TRUE
},
496 qub_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
497 { 9, &(HSwimming
), "ready to swim","afraid of the water", TRUE
},
498 { 10, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
499 { 20, &(HFear_resistance
), "unafraid", "afraid", TRUE
},
502 fnc_abil
[] = { { 7, &(HFast
), "quick", "slow", TRUE
},
505 emp_abil
[] = { { 1, &(HTelepat
), "", "", TRUE
},
506 { 1, &(HStealth
), "", "", TRUE
},
507 { 1, &(HPeacevision
), "", "", TRUE
},
508 { 4, &(HWarning
), "sensitive", "careless", TRUE
},
509 { 5, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
510 { 6, &(HSearching
), "perceptive", "unaware", TRUE
},
511 { 7, &(HSleep_resistance
), "awake", "tired", TRUE
},
512 { 8, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
513 { 10, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
514 { 12, &(HSick_resistance
), "immune to diseases", "no longer immune to diseases", TRUE
},
515 { 15, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
516 { 18, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
517 { 24, &(HClairvoyant
), "clairvoyant", "mentally poor", TRUE
},
518 { 25, &(HDiminishedBleeding
), "your wounds closing faster", "your blood pumping", TRUE
},
521 fig_abil
[] = { { 7, &(HFast
), "quick", "slow", TRUE
},
524 med_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
525 { 7, &(HSearching
), "perceptive", "unaware", TRUE
},
526 { 10, &(HFull_nutrient
), "your metabolism slowing down", "your metabolism speeding up", TRUE
},
527 { 12, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
528 { 14, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
529 { 20, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
532 lad_abil
[] = { { 1, &(HSleep_resistance
), "", "", TRUE
},
533 { 4, &(HSearching
), "perceptive", "unaware", TRUE
},
534 { 7, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
537 jes_abil
[] = { { 5, &(HStealth
), "stealthy", "noisy", TRUE
},
538 { 7, &(HFast
), "quick", "slow", TRUE
},
539 { 10, &(HWarning
), "sensitive", "careless", TRUE
},
540 { 12, &(HSearching
), "perceptive", "unaware", TRUE
},
543 art_abil
[] = { { 7, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
544 { 20, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
547 gun_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
548 { 1, &(HStealth
), "", "", TRUE
},
549 { 5, &(HFire_resistance
), "cool", "warmer", TRUE
},
550 { 7, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
551 { 10, &(HCold_resistance
), "warm", "cooler", TRUE
},
554 mar_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
555 { 20, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
558 car_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
559 { 7, &(HWarning
), "sensitive", "insensitive", TRUE
},
560 { 30, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
563 drm_abil
[] = { { 7, &(HFast
), "quick", "slow", TRUE
},
564 { 20, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
567 drd_abil
[] = { { 15, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
568 { 20, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
569 { 28, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
572 fjo_abil
[] = { { 1, &(HSwimming
), "", "", TRUE
},
573 { 10, &(HCold_resistance
), "warm", "cooler", TRUE
},
574 { 18, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
577 akl_abil
[] = { { 20, &(HSight_bonus
), "your surroundings lighting up", "shrouded in darkness", TRUE
},
578 { 20, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
581 mil_abil
[] = { { 10, &(HSick_resistance
), "immune to diseases", "no longer immune to diseases", TRUE
},
582 { 20, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
585 sym_abil
[] = { { 1, &(HPeacevision
), "", "", TRUE
},
586 { 15, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
587 { 16, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
590 stu_abil
[] = { { 2, &(HSleep_resistance
), "awake", "tired", TRUE
},
591 { 5, &(HFast
), "quick", "slow", TRUE
},
592 { 6, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
593 { 14, &(HFree_action
), "freed", "a loss of freedom", TRUE
},
596 dol_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
597 { 3, &(HWarning
), "sensitive", "careless", TRUE
},
598 { 9, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
599 { 25, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
602 sag_abil
[] = { { 1, &(HFull_nutrient
), "", "", TRUE
},
603 { 5, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
604 { 10, &(HSearching
), "perceptive", "unaware", TRUE
},
605 { 12, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
606 { 15, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
607 { 17, &(HWarning
), "sensitive", "careless", TRUE
},
608 { 20, &(HDiscount_action
), "resistant to paralysis", "less resistant to paralysis", TRUE
},
609 { 25, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
612 ota_abil
[] = { { 8, &(HWarning
), "sensitive", "careless", TRUE
},
613 { 16, &(HSearching
), "perceptive", "unaware", TRUE
},
616 aug_abil
[] = { { 1, &(HTelepat
), "", "", TRUE
},
617 { 1, &(HStealth
), "", "", TRUE
},
618 { 1, &(HTechnicality
), "", "", TRUE
},
619 { 1, &(HMagicFindBonus
), "", "", TRUE
},
620 { 1, &(HSpellboost
), "", "", TRUE
},
621 { 3, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
622 { 12, &(HWarning
), "sensitive", "careless", TRUE
},
623 { 15, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
624 { 20, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
625 { 25, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
628 fir_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
629 { 10, &(HSearching
), "perceptive", "unaware", TRUE
},
632 nin_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
633 { 3, &(HInvis
), "hidden", "more visible", TRUE
},
634 { 10, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
637 off_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
638 { 10, &(HWarning
), "sensitive", "careless", TRUE
},
641 aci_abil
[] = { { 1, &(HAcid_resistance
), "", "", TRUE
},
642 { 20, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
643 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
646 loc_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
647 { 5, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
650 sha_abil
[] = { { 1, &(HFuckOverEffect
), "", "", FALSE
},
651 { 9, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
654 unt_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
655 { 4, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
656 { 7, &(HCold_resistance
), "warm", "cooler", TRUE
},
657 { 9, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
658 { 18, &(HDiminishedBleeding
), "your wounds closing faster", "your blood pumping", TRUE
},
661 gee_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
662 { 1, &(HShock_resistance
), "", "", TRUE
},
663 { 5, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
664 { 8, &(HTeleport_control
), "controlled", "helpless", TRUE
},
665 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
666 { 0, 0, 0, 0, 0, } },
668 gra_abil
[] = { { 1, &(HAggravate_monster
), "", "", FALSE
},
669 { 1, &(HFast
), "", "", TRUE
},
670 { 1, &(HSleep_resistance
), "", "", TRUE
},
671 { 10, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
674 hea_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
675 { 1, &(HControlMagic
), "", "", TRUE
},
676 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
677 { 20, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
680 dru_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
681 { 24, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
684 sci_abil
[] = { { 1, &(HAcid_resistance
), "", "", TRUE
},
685 { 1, &(HTechnicality
), "", "", TRUE
},
686 { 25, &(HCont_resist
), "protected from contamination", "vulnerable to contamination", TRUE
},
689 mus_abil
[] = { { 7, &(HStealth
), "stealthy", "noisy", TRUE
},
692 ice_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
693 { 13, &(HFire_resistance
), "cool", "warmer", TRUE
},
694 { 16, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
695 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
698 lib_abil
[] = { { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
701 ele_abil
[] = { { 1, &(HShock_resistance
), "", "", TRUE
},
702 { 15, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
703 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
706 psn_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
707 { 1, &(HFull_nutrient
), "", "", TRUE
},
708 { 5, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
709 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
710 { 22, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
711 { 25, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
714 occ_abil
[] = { { 5, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
715 { 6, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
716 { 10, &(HInfravision
), "perceptive", "half blind", TRUE
},
717 { 30, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
720 emn_abil
[] = { { 5, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
721 { 8, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
722 { 10, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
723 { 15, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
726 cha_abil
[] = { { 8, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
727 { 10, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
728 { 20, &(HEnergy_regeneration
), "charged with mana", "a loss of mana", TRUE
},
729 { 22, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
732 zoo_abil
[] = { { 1, &(HWarning
), "", "", TRUE
},
733 { 1, &(HScentView
), "", "", TRUE
},
734 { 10, &(HPoison_resistance
), "hardy", "less healthy", TRUE
},
737 cli_abil
[] = { { 1, &(FemaleTrapJulietta
), "", "", TRUE
},
740 wom_abil
[] = { { 5, &(FemaleTrapMaurah
), "the need to fart constantly", "that your farting gas is depleted", FALSE
},
741 { 8, &(FemaleTrapYvonne
), "the desire to find a toilet", "that toilets are actually unnecessary", FALSE
},
742 { 10, &(FemaleTrapSing
), "enslaved by a woman who wants you to clean shoes", "that cleaning shit from shoes is, well, shit", FALSE
},
743 { 12, &(FemaleTrapMeltem
), "that the women in this dungeon want to fart you in the face", "that the female butts forgot how to fart", FALSE
},
744 { 16, &(FemaleTrapJette
), "the power of feminism increasing", "the power of feminism decreasing", FALSE
},
745 { 18, &(FemaleTrapAnastasia
), "like stepping into dog shit", "that only a fool would ever step into dog shit voluntarily", FALSE
},
746 { 20, &(FemaleTrapJuen
), "that someone is going to kick you in the shins", "like using a shin-pad", FALSE
},
747 { 23, &(FemaleTrapEveline
), "that the women are running faster", "that the women stopped running", FALSE
},
748 { 27, &(FemaleTrapKristina
), "a sharp smoky stench in the air", "that the fire got extinguished", FALSE
},
749 { 30, &(FemaleTrapElif
), "the presence of a lovely ghostly girl", "that the lovely ghostly girl has departed", FALSE
},
752 jed_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
753 { 3, &(HTelepat
), "disturbances in the force", "your grip on the force lessen", TRUE
},
754 { 5, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
755 { 7, &(HFast
), "quick", "slow", TRUE
},
758 kni_abil
[] = { { 7, &(HFast
), "quick", "slow", TRUE
},
761 nuc_abil
[] = { { 1, &(HCont_resist
), "", "", TRUE
},
762 { 1, &(HTechnicality
), "", "", TRUE
},
765 for_abil
[] = { { 1, &(HPolymorph_control
), "", "", TRUE
},
766 { 5, &(HPolymorph
), "polymorphic", "form-stable", FALSE
},
769 war_abil
[] = { { 7, &(HFast
), "quick", "slow", TRUE
},
772 mon_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
773 { 1, &(HSleep_resistance
), "", "", TRUE
},
774 { 1, &(HSee_invisible
), "", "", TRUE
},
775 { 3, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
776 { 5, &(HStealth
), "stealthy", "noisy", TRUE
},
777 { 7, &(HWarning
), "sensitive", "careless", TRUE
},
778 { 9, &(HSearching
), "perceptive", "unaware", TRUE
},
780 { 11, &(HFire_resistance
), "cool", "warmer", TRUE
},
781 { 13, &(HCold_resistance
), "warm", "cooler", TRUE
},
782 { 15, &(HShock_resistance
), "insulated", "conductive", TRUE
},
783 /* WAC -- made the above three attribs techs */
785 { 17, &(HTeleport_control
), "controlled","uncontrolled", TRUE
},
788 hba_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
789 { 1, &(HSleep_resistance
), "", "", TRUE
},
790 { 1, &(HSee_invisible
), "", "", TRUE
},
791 { 3, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
792 { 5, &(HStealth
), "stealthy", "noisy", TRUE
},
793 { 7, &(HWarning
), "sensitive", "careless", TRUE
},
794 { 9, &(HSearching
), "perceptive", "unaware", TRUE
},
795 { 17, &(HTeleport_control
), "controlled","uncontrolled", TRUE
},
798 psi_abil
[] = { { 1, &(HTelepat
), "", "", TRUE
},
799 { 1, &(HClairvoyant
), "","", TRUE
},
800 { 3, &(HSee_invisible
), "your vision sharpen", "your vision blur", TRUE
},
801 { 4, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
802 { 5, &(ETelepat
), "aware", "unaware", TRUE
},
803 { 6, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
804 { 7, &(HAggravate_monster
), "noisy", "quiet", FALSE
},
805 { 8, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
806 { 10, &(HDetect_monsters
), "connected","detached", TRUE
},
807 { 12, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
808 { 15, &(HFlying
), "weightless", "grounded", TRUE
},
809 { 16, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
810 { 20, &(HPasses_walls
), "ethereal","mundane", TRUE
},
811 { 25, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
814 fox_abil
[] = { { 1, &(ETelepat
), "", "", TRUE
},
815 { 1, &(HClairvoyant
), "","", TRUE
},
816 { 1, &(HStealth
), "","", TRUE
},
817 { 5, &(HSearching
), "perceptive", "unaware", TRUE
},
818 { 10, &(HFast
), "quick", "slow", TRUE
},
819 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
822 nec_abil
[] = { { 1, &(HDrain_resistance
), "", "", TRUE
},
823 { 1, &(HSick_resistance
), "", "", TRUE
},
824 { 3, &(HUndead_warning
), "sensitive", "careless", TRUE
},
825 { 5, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
826 { 15, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
827 { 15, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
828 { 30, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
831 pok_abil
[] = { { 1, &(HDisint_resistance
), "", "", TRUE
},
832 { 4, &(HWarning
), "sensitive", "careless", TRUE
},
833 { 7, &(HSearching
), "perceptive", "unaware", TRUE
},
834 { 8, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
835 { 10, &(HDrain_resistance
), "more resistant to drain life", "less resistant to drain life", TRUE
},
836 { 12, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
837 { 13, &(HFast
), "quick", "slow", TRUE
},
838 { 15, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
839 { 16, &(HSleep_resistance
), "awake", "tired", TRUE
},
840 { 18, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
841 { 19, &(HAcid_resistance
), "warded", "endangered", TRUE
},
842 { 22, &(HTelepat
), "telepathic", "nontelepathic", TRUE
},
843 { 24, &(HTechnicality
), "evolved", "a loss of PP", TRUE
},
844 { 25, &(HSick_resistance
), "resistant", "non-resistant", TRUE
},
845 { 26, &(HCont_resist
), "protected from contamination", "vulnerable to contamination", TRUE
},
846 { 28, &(HTeleport_control
), "controlled", "uncontrolled", TRUE
},
847 { 30, &(HFlying
), "airborne", "stalled", TRUE
},
850 pir_abil
[] = { {1, &(HSwimming
), "", "", TRUE
},
851 { 7, &(HStealth
), "stealthy", "noisy", TRUE
}, /* with cat-like tread ... */
852 { 11, &(HFast
), "quick", "slow", TRUE
},
855 gof_abil
[] = { {1, &(HDrain_resistance
), "", "", TRUE
},
856 { 1, &(HInfravision
), "", "", TRUE
},
857 { 6, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
858 { 10, &(HReflecting
), "reflexive", "nonreflexive", TRUE
},
859 { 20, &(HDiminishedBleeding
), "your wounds closing faster", "your blood pumping", TRUE
},
862 gol_abil
[] = { { 1, &(HMagicFindBonus
), "", "", TRUE
},
863 { 5, &(HStealth
), "stealthy", "noisy", TRUE
},
864 { 9, &(HFast
), "quick", "slow", TRUE
},
865 { 11, &(HSearching
), "perceptive", "unaware", TRUE
},
868 gla_abil
[] = { {3, &(HFast
), "quick", "slow", TRUE
},
869 { 6, &(HStealth
), "stealthy", "noisy", TRUE
}, /* with cat-like tread ... */
870 { 10, &(HAggravate_monster
), "noisy", "quiet", FALSE
},
871 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
874 kor_abil
[] = { {2, &(HSearching
), "perceptive", "unaware", TRUE
},
875 { 7, &(HStealth
), "stealthy", "noisy", TRUE
}, /* with cat-like tread ... */
878 div_abil
[] = { {15, &(HMagical_breathing
), "aquatic", "hydrophobic", TRUE
},
879 { 20, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
882 lun_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
883 { 1, &(HRegeneration
), "", "", TRUE
},
884 { 1, &(HScentView
), "", "", TRUE
},
885 { 7, &(HStealth
), "stealthy", "noisy", TRUE
},
888 pri_abil
[] = { { 12, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
889 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
890 { 20, &(HFire_resistance
), "cool", "warmer", TRUE
},
893 ran_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
894 { 1, &(HDefusing
), "", "", TRUE
},
895 { 7, &(HStealth
), "stealthy", "noisy", TRUE
},
896 { 15, &(HSee_invisible
), "your vision sharpen", "your vision blur", TRUE
},
899 elp_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
900 { 1, &(HDefusing
), "", "", TRUE
},
901 { 4, &(HSleep_resistance
), "awake", "tired", TRUE
},
902 { 7, &(HStealth
), "stealthy", "noisy", TRUE
},
903 { 15, &(HSee_invisible
), "your vision sharpen", "your vision blur", TRUE
},
906 rog_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
907 { 1, &(HDefusing
), "", "", TRUE
},
908 { 10, &(HSearching
), "perceptive", "unaware", TRUE
},
911 sam_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
912 { 15, &(HStealth
), "stealthy", "noisy", TRUE
},
915 cyb_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
916 { 1, &(HUseTheForce
), "", "", TRUE
},
917 { 15, &(HStealth
), "stealthy", "noisy", TRUE
},
920 tou_abil
[] = { { 10, &(HSearching
), "perceptive", "unaware", TRUE
},
921 { 20, &(HPoison_resistance
), "hardy", "less healthy", TRUE
},
922 { 25, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
925 rin_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
926 { 7, &(HFast
), "quick", "slow", TRUE
},
927 { 20, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
930 und_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
931 { 1, &(HDrain_resistance
), "", "", TRUE
},
932 { 1, &(HSick_resistance
), "", "", TRUE
},
933 { 1, &(HUndead_warning
), "", "", TRUE
},
934 { 7, &(HFast
), "quick", "slow", TRUE
},
935 { 9, &(HPoison_resistance
), "hardy", "less healthy", TRUE
},
936 { 10, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
939 pal_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
940 { 1, &(HUndead_warning
), "", "", TRUE
},
941 { 5, &(HPoison_resistance
), "hardy", "less healthy", TRUE
},
942 { 10, &(HSleep_resistance
), "awake", "tired", TRUE
},
943 { 24, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
946 act_abil
[] = { { 1, &(HPeacevision
), "", "", TRUE
},
949 jus_abil
[] = { { 1, &(HPeacevision
), "", "", TRUE
},
952 val_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
953 { 1, &(HStealth
), "", "", TRUE
},
954 { 7, &(HFast
), "quick", "slow", TRUE
},
957 wan_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
958 { 1, &(HFire_resistance
), "", "", TRUE
},
959 { 1, &(HShock_resistance
), "", "", TRUE
},
960 { 1, &(HSleep_resistance
), "", "", TRUE
},
961 { 10, &(HWarning
), "sensitive", "careless", TRUE
},
962 { 10, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
963 { 15, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
964 { 15, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
965 { 20, &(HTeleport_control
), "controlled","uncontrolled", TRUE
},
966 { 20, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
967 { 25, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
970 mid_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
971 { 10, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
972 { 10, &(HFire_resistance
), "cool", "warmer", TRUE
},
973 { 10, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
977 { 7, &(HFast
), "quick", "slow", TRUE
},
978 { 15, &(HSwimming
), "ready to swim","afraid of the water", TRUE
},
981 wiz_abil
[] = { { 1, &(HManaleech
), "", "", TRUE
},
982 { 4, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
983 { 10, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
984 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
985 { 17, &(HTeleport_control
), "controlled","uncontrolled", TRUE
},
988 alt_abil
[] = { { 1, &(HControlMagic
), "", "", TRUE
},
989 { 3, &(HUndead_warning
), "sensitive", "careless", TRUE
},
990 { 5, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
991 { 7, &(HWarning
), "sensitive", "careless", TRUE
},
992 { 15, &(HTeleport_control
), "controlled","uncontrolled", TRUE
},
993 { 20, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
994 { 25, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
995 { 30, &(HReflecting
), "reflexive", "nonreflexive", TRUE
},
998 dun_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1001 bos_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1002 { 5, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1003 { 7, &(HStealth
), "stealthy", "noisy", TRUE
},
1004 { 12, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1005 { 20, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1006 { 25, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
1007 { 0, 0, 0, 0, 0 } },
1009 tha_abil
[] = { { 4, &(HSleep_resistance
), "awake", "tired", TRUE
},
1010 { 10, &(HAggravate_monster
), "intolerable", "more acceptable", FALSE
},
1011 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1012 { 22, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1013 { 24, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
1014 { 0, 0, 0, 0, 0 } },
1016 ord_abil
[] = { { 5, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
1017 { 10, &(HUndead_warning
), "sensitive", "careless", TRUE
},
1018 { 0, 0, 0, 0, 0 } },
1020 /* Intrinsics conferred by race */
1021 dop_abil
[] = { { 9, &(HPolymorph_control
), "your choices improve", "choiceless", TRUE
},
1022 { 0, 0, 0, 0, 0 } },
1024 dwa_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
1025 { 10, &(HFire_resistance
), "cool", "warmer", TRUE
},
1026 { 10, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1027 { 0, 0, 0, 0, 0 } },
1029 nib_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
1030 { 1, &(HMagicFindBonus
), "", "", TRUE
},
1031 { 0, 0, 0, 0, 0 } },
1033 ssc_abil
[] = { { 1, &(HMagicFindBonus
), "", "", TRUE
},
1034 { 10, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1035 { 0, 0, 0, 0, 0 } },
1037 dra_abil
[] = { { 8, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
1038 { 10, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1039 { 15, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1040 { 0, 0, 0, 0, 0 } },
1042 hyb_abil
[] = { { 10, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1043 { 0, 0, 0, 0, 0 } },
1045 fel_abil
[] = { { 20, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1046 { 0, 0, 0, 0, 0 } },
1048 kha_abil
[] = { { 5, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1049 { 0, 0, 0, 0, 0 } },
1051 azt_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
1052 { 0, 0, 0, 0, 0 } },
1054 irr_abil
[] = { { 1, &(HFree_action
), "", "", TRUE
},
1055 { 1, &(HShock_resistance
), "", "", TRUE
},
1056 { 0, 0, 0, 0, 0 } },
1058 hyp_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1059 { 0, 0, 0, 0, 0 } },
1061 dyn_abil
[] = { { 1, &(HShock_resistance
), "", "", TRUE
},
1062 { 1, &(HMysteryResist
), "", "", TRUE
},
1063 { 0, 0, 0, 0, 0 } },
1065 jav_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1066 { 1, &(HPoison_resistance
), "", "", TRUE
},
1067 { 1, &(HSick_resistance
), "", "", TRUE
},
1068 { 20, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1069 { 24, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
1070 { 0, 0, 0, 0, 0 } },
1072 chi_abil
[] = { { 1, &(HFull_nutrient
), "", "", TRUE
},
1073 { 0, 0, 0, 0, 0 } },
1075 dmo_abil
[] = { { 1, &(HFuckOverEffect
), "", "", FALSE
},
1076 { 0, 0, 0, 0, 0 } },
1078 pea_abil
[] = { { 1, &(HFuckOverEffect
), "", "", FALSE
},
1079 { 0, 0, 0, 0, 0 } },
1081 bov_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1082 { 1, &(HSick_resistance
), "", "", TRUE
},
1083 { 1, &(HFull_nutrient
), "", "", TRUE
},
1084 { 7, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1085 { 12, &(HVersus_curses
), "curse resistant", "vulnerable to curses", TRUE
},
1086 { 0, 0, 0, 0, 0 } },
1088 per_abil
[] = { { 1, &(HHunger
), "", "", FALSE
},
1089 { 15, &(HFull_nutrient
), "your metabolism slowing down", "your metabolism speeding up", TRUE
},
1090 { 20, &(HFire_resistance
), "cool", "warmer", TRUE
},
1091 { 24, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1092 { 0, 0, 0, 0, 0 } },
1094 mog_abil
[] = { { 7, &(HShock_resistance
), "insulated", "conductive", TRUE
},
1095 { 10, &(HDouble_attack
), "able to attack faster", "no longer able to attack faster", TRUE
},
1096 { 20, &(HQuad_attack
), "able to attack ultra fast", "no longer able to attack ultra fast", TRUE
},
1097 { 0, 0, 0, 0, 0 } },
1099 kst_abil
[] = { { 8, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
1100 { 12, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1101 { 20, &(HDisint_resistance
), "stable", "brittle", TRUE
},
1102 { 25, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1103 { 0, 0, 0, 0, 0 } },
1105 vie_abil
[] = { { 7, &(HWarning
), "precognitive", "noncognitive", TRUE
},
1106 { 10, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
1107 { 10, &(HSwimming
), "ready to swim","afraid of the water", TRUE
},
1108 { 0, 0, 0, 0, 0 } },
1110 gru_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
1111 { 0, 0, 0, 0, 0 } },
1113 bab_abil
[] = { { 1, &(HDefusing
), "", "", TRUE
},
1114 { 0, 0, 0, 0, 0 } },
1116 nea_abil
[] = { { 10, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1117 { 12, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1118 { 0, 0, 0, 0, 0 } },
1120 rus_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
1121 { 10, &(HSleep_resistance
), "awake", "tired", TRUE
},
1122 { 20, &(HExtra_wpn_practice
), "skillful", "unskilled", TRUE
},
1123 { 0, 0, 0, 0, 0 } },
1125 mac_abil
[] = { { 1, &(HSight_bonus
), "", "", TRUE
},
1126 { 0, 0, 0, 0, 0 } },
1128 vik_abil
[] = { { 1, &(HSwimming
), "", "", TRUE
},
1129 { 30, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1130 { 0, 0, 0, 0, 0 } },
1132 slm_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
1133 { 1, &(HStone_resistance
), "", "", TRUE
},
1134 { 1, &(HShock_resistance
), "", "", TRUE
},
1135 { 1, &(HPoison_resistance
), "", "", TRUE
},
1136 { 1, &(HAcid_resistance
), "", "", TRUE
},
1137 { 0, 0, 0, 0, 0 } },
1139 elf_abil
[] = { { 4, &(HSleep_resistance
), "awake", "tired", TRUE
},
1140 { 0, 0, 0, 0, 0 } },
1142 inc_abil
[] = { { 1, &(HAntimagic
), "", "", TRUE
},
1143 { 1, &(HManaleech
), "", "", TRUE
},
1144 { 0, 0, 0, 0, 0 } },
1146 gre_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1147 { 15, &(HFast
), "quick", "slow", TRUE
},
1148 { 0, 0, 0, 0, 0 } },
1150 bga_abil
[] = { { 10, &(HAggravate_monster
), "noisy", "quiet", FALSE
},
1151 { 15, &(HFear_resistance
), "unafraid", "afraid", TRUE
},
1152 { 20, &(HHunger
), "very hungry", "less hungry", FALSE
},
1153 { 20, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1154 { 0, 0, 0, 0, 0 } },
1156 clk_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1157 { 1, &(HSick_resistance
), "", "", TRUE
},
1158 { 1, &(HStone_resistance
), "", "", TRUE
},
1159 { 5, &(HShock_resistance
), "shock resistant", "less shock resistant", TRUE
},
1160 { 8, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1161 { 10, &(HCold_resistance
), "cold resistant", "less cold resistant", TRUE
},
1162 { 10, &(HFull_nutrient
), "your metabolism slowing down", "your metabolism speeding up", TRUE
},
1163 { 15, &(HFire_resistance
), "heat resistant", "less heat resistant", TRUE
},
1164 { 20, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
1165 { 25, &(HDiscount_action
), "resistant to paralysis", "less resistant to paralysis", TRUE
},
1166 { 0, 0, 0, 0, 0 } },
1168 vor_abil
[] = { { 1, &(HFlying
), "", "", TRUE
},
1169 {1, &(HMagical_breathing
), "", "", TRUE
},
1170 { 1, &(HSleep_resistance
), "", "", TRUE
},
1171 { 1, &(HPoison_resistance
), "", "", TRUE
},
1172 { 1, &(HStone_resistance
), "", "", TRUE
},
1173 { 1, &(HManaleech
), "", "", TRUE
},
1174 { 0, 0, 0, 0, 0 } },
1176 cor_abil
[] = { { 1, &(HFlying
), "", "", TRUE
},
1177 {1, &(HMagical_breathing
), "", "", TRUE
},
1178 { 1, &(HSleep_resistance
), "", "", TRUE
},
1179 { 1, &(HPoison_resistance
), "", "", TRUE
},
1180 { 1, &(HStone_resistance
), "", "", TRUE
},
1181 { 1, &(HManaleech
), "", "", TRUE
},
1182 { 0, 0, 0, 0, 0 } },
1184 alb_abil
[] = { { 1, &(HAntimagic
), "", "", TRUE
},
1185 { 1, &(HFuckOverEffect
), "", "", FALSE
},
1186 { 3, &(HUndead_warning
), "sensitive", "careless", TRUE
},
1187 { 10, &(HSee_invisible
), "your vision sharpen", "your vision blur", TRUE
},
1188 { 12, &(HStealth
), "stealthy", "noisy", TRUE
},
1189 {15, &(HMagical_breathing
), "aquatic", "hydrophobic", TRUE
},
1190 { 25, &(HEnergy_regeneration
), "charged with mana", "a loss of mana", TRUE
},
1191 { 0, 0, 0, 0, 0 } },
1193 alc_abil
[] = { { 1, &(HAcid_resistance
), "", "", TRUE
},
1194 { 1, &(HFuckOverEffect
), "", "", FALSE
},
1195 { 0, 0, 0, 0, 0 } },
1197 and_abil
[] = { { 1, &(HDeath_resistance
), "", "", TRUE
},
1198 { 0, 0, 0, 0, 0 } },
1200 goa_abil
[] = { { 1, &(HScentView
), "", "", TRUE
},
1201 { 0, 0, 0, 0, 0 } },
1203 ent_abil
[] = { { 1, &(HFull_nutrient
), "", "", TRUE
},
1204 { 15, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1205 { 0, 0, 0, 0, 0 } },
1207 ang_abil
[] = { { 1, &(HAntimagic
), "", "", TRUE
},
1208 { 1, &(HFlying
), "", "", TRUE
},
1209 { 1, &(HCold_resistance
), "", "", TRUE
},
1210 { 1, &(HShock_resistance
), "", "", TRUE
},
1211 { 1, &(HSleep_resistance
), "", "", TRUE
},
1212 { 1, &(HPoison_resistance
), "", "", TRUE
},
1213 { 1, &(HSee_invisible
), "", "", TRUE
},
1214 { 20, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1215 { 0, 0, 0, 0, 0 } },
1217 dev_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1218 { 1, &(HPoison_resistance
), "", "", TRUE
},
1219 { 1, &(HFuckOverEffect
), "", "", FALSE
},
1220 { 0, 0, 0, 0, 0 } },
1222 anc_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
1223 { 1, &(HSlow_digestion
), "", "", TRUE
},
1224 { 0, 0, 0, 0, 0 } },
1226 fen_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
1227 { 5, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1228 { 5, &(HStealth
), "stealthy", "noisy", TRUE
},
1229 { 7, &(HFast
), "quick", "slow", TRUE
},
1230 { 10, &(HFire_resistance
), "heat resistant", "less heat resistant", TRUE
},
1231 { 15, &(HSwimming
), "ready to swim","afraid of the water", TRUE
},
1232 { 0, 0, 0, 0, 0 } },
1234 fre_abil
[] = { { 2, &(DifficultyIncreased
), "", "", FALSE
},
1235 { 5, &(Dehydration
), "", "", FALSE
},
1236 { 9, &(BlackNgWalls
), "", "", FALSE
},
1237 { 14, &(FeelerGauges
), "", "", FALSE
},
1238 { 18, &(AutocursingEquipment
), "", "", FALSE
},
1239 { 22, &(DischargeBug
), "", "", FALSE
},
1240 { 25, &(HardModeEffect
), "", "", FALSE
},
1241 { 29, &(Superscroller
), "", "", FALSE
},
1242 { 0, 0, 0, 0, 0 } },
1244 uri_abil
[] = { { 3, &(BigscriptEffect
), "", "", FALSE
},
1245 { 6, &(TurnLimitation
), "", "", FALSE
},
1246 { 8, &(TimerunBug
), "", "", FALSE
},
1247 { 12, &(PlayerCannotTrainSkills
), "", "", FALSE
},
1248 { 13, &(MonnoiseEffect
), "", "", FALSE
},
1249 { 17, &(SanityTrebleEffect
), "", "", FALSE
},
1250 { 20, &(PermacurseEffect
), "", "", FALSE
},
1251 { 24, &(CovetousnessBug
), "", "", FALSE
},
1252 { 0, 0, 0, 0, 0 } },
1254 ind_abil
[] = { { 4, &(Dropcurses
), "", "", FALSE
},
1255 { 7, &(verisiertEffect
), "", "", FALSE
},
1256 { 10, &(DangerousTerrains
), "", "", FALSE
},
1257 { 15, &(GushlushEffect
), "", "", FALSE
},
1258 { 19, &(SimeoutBug
), "", "", FALSE
},
1259 { 23, &(WingYellowChange
), "", "", FALSE
},
1260 { 27, &(LowEffects
), "", "", FALSE
},
1261 { 30, &(EngravingDoesntWork
), "", "", FALSE
},
1262 { 0, 0, 0, 0, 0 } },
1264 col_abil
[] = { { 2, &(YellowSpells
), "", "", FALSE
},
1265 { 4, &(VioletSpells
), "", "", FALSE
},
1266 { 6, &(WhiteSpells
), "", "", FALSE
},
1267 { 8, &(BrownSpells
), "", "", FALSE
},
1268 { 10, &(CompleteGraySpells
), "", "", FALSE
},
1269 { 11, &(BlueSpells
), "", "", FALSE
},
1270 { 13, &(GreenSpells
), "", "", FALSE
},
1271 { 15, &(MetalSpells
), "", "", FALSE
},
1272 { 17, &(SilverSpells
), "", "", FALSE
},
1273 { 19, &(PlatinumSpells
), "", "", FALSE
},
1274 { 20, &(RedSpells
), "", "", FALSE
},
1275 { 22, &(OrangeSpells
), "", "", FALSE
},
1276 { 24, &(BlackSpells
), "", "", FALSE
},
1277 { 26, &(CyanSpells
), "", "", FALSE
},
1278 { 28, &(BrightCyanSpells
), "", "", FALSE
},
1279 { 30, &(PinkSpells
), "", "", FALSE
},
1280 { 0, 0, 0, 0, 0 } },
1282 glm_abil
[] = { { 1, &(HDiminishedBleeding
), "", "", TRUE
},
1283 { 0, 0, 0, 0, 0 } },
1285 nor_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
1286 { 15, &(HShock_resistance
), "shock resistant", "less shock resistant", TRUE
},
1287 { 0, 0, 0, 0, 0 } },
1289 dee_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1290 { 1, &(HShock_resistance
), "", "", TRUE
},
1291 { 10, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
1292 { 0, 0, 0, 0, 0 } },
1294 sea_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
1295 { 1, &(HMagical_breathing
), "", "", TRUE
},
1296 { 1, &(HSwimming
), "", "", TRUE
},
1297 { 0, 0, 0, 0, 0 } },
1299 spr_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
1300 { 1, &(HRegeneration
), "", "", TRUE
},
1301 { 1, &(HHalf_spell_damage
), "", "", TRUE
},
1302 { 1, &(HHalf_physical_damage
), "", "", TRUE
},
1303 { 0, 0, 0, 0, 0 } },
1305 fay_abil
[] = { { 1, &(HAntimagic
), "", "", TRUE
},
1306 { 1, &(HDrain_resistance
), "", "", TRUE
},
1307 { 1, &(Deafness
), "", "", FALSE
},
1308 { 1, &(HShock_resistance
), "", "", TRUE
},
1309 { 1, &(HPoison_resistance
), "", "", TRUE
},
1310 { 1, &(HAcid_resistance
), "", "", TRUE
},
1311 { 1, &(HFree_action
), "", "", TRUE
},
1312 { 1, &(HFlying
), "", "", TRUE
},
1313 { 1, &(HBurdenedState
), "", "", FALSE
},
1314 { 0, 0, 0, 0, 0 } },
1316 syl_abil
[] = { {1, &(HHunger
), "", "", FALSE
},
1317 { 1, &(HSee_invisible
), "", "", TRUE
},
1318 { 4, &(HStealth
), "stealthy", "obvious", TRUE
},
1319 { 6, &(HInfravision
), "perceptive", "half blind", TRUE
},
1320 {18, &(HDetect_monsters
), "perceptive", "dull", TRUE
},
1321 {18, &(HAggravate_monster
), "noisy", "quiet", FALSE
},
1324 gno_abil
[] = { { 5, &(HStealth
), "stealthy", "noisy", TRUE
},
1325 { 9, &(HFast
), "quick", "slow", TRUE
},
1326 { 11, &(HSearching
), "perceptive", "unaware", TRUE
},
1327 { 0, 0, 0, 0, 0 } },
1329 sdi_abil
[] = { { 4, &(HFast
), "quick", "slow", TRUE
},
1330 { 20, &(HSick_resistance
), "immune to diseases", "no longer immune to diseases", TRUE
},
1331 { 0, 0, 0, 0, 0 } },
1333 hob_abil
[] = { { 1, &(HStealth
), "", "", TRUE
},
1334 { 7, &(HFast
), "quick", "slow", TRUE
},
1335 { 15, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1336 { 0, 0, 0, 0, 0 } },
1338 liz_abil
[] = { { 1, &(HStone_resistance
), "", "", TRUE
},
1339 { 0, 0, 0, 0, 0 } },
1341 hrb_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1342 { 1, &(HFuckOverEffect
), "", "", FALSE
},
1343 { 15, &(HWarning
), "sensitive", "careless", TRUE
},
1344 { 0, 0, 0, 0, 0 } },
1346 bor_abil
[] = { { 1, &(HFuckOverEffect
), "", "", FALSE
},
1347 { 3, &(HTelepat
), "disturbances in the force", "your grip on the force lessen", TRUE
},
1348 { 5, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
1349 { 0, 0, 0, 0, 0 } },
1351 grd_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1352 { 1, &(HShock_resistance
), "", "", TRUE
},
1353 { 1, &(HControlMagic
), "", "", TRUE
},
1354 { 0, 0, 0, 0, 0 } },
1356 bat_abil
[] = { { 1, &(HFlying
), "", "", TRUE
},
1357 { 1, &(HDrain_resistance
), "", "", TRUE
},
1358 { 1, &(HFear_resistance
), "", "", TRUE
},
1359 { 1, &(HTechnicality
), "", "", TRUE
},
1360 { 5, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1361 { 0, 0, 0, 0, 0 } },
1363 nym_abil
[] = { { 1, &(HTeleportation
), "", "", FALSE
},
1364 { 0, 0, 0, 0, 0 } },
1366 met_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1367 { 1, &(HCold_resistance
), "", "", TRUE
},
1368 { 1, &(HShock_resistance
), "", "", TRUE
},
1369 { 1, &(HSleep_resistance
), "", "", TRUE
},
1370 { 1, &(HDisint_resistance
), "", "", TRUE
},
1371 { 1, &(HPoison_resistance
), "", "", TRUE
},
1372 { 1, &(HDrain_resistance
), "", "", TRUE
},
1373 { 1, &(HSick_resistance
), "", "", TRUE
},
1374 { 1, &(HAntimagic
), "", "", TRUE
},
1375 { 1, &(HAcid_resistance
), "", "", TRUE
},
1376 { 1, &(HStone_resistance
), "", "", TRUE
},
1377 { 1, &(HDeath_resistance
), "", "", TRUE
},
1378 { 1, &(HPsi_resist
), "", "", TRUE
},
1379 { 1, &(HControlMagic
), "", "", TRUE
},
1380 { 1, &(HDefusing
), "", "", TRUE
},
1381 { 0, 0, 0, 0, 0 } },
1383 umb_abil
[] = { { 1, &(HConf_resist
), "", "", TRUE
},
1384 { 0, 0, 0, 0, 0 } },
1386 qua_abil
[] = { { 1, &(HTeleportation
), "", "", FALSE
},
1387 { 0, 0, 0, 0, 0 } },
1389 dvp_abil
[] = { { 1, &(HTechnicality
), "", "", TRUE
},
1390 { 15, &(HExpBoost
), "a surge of experience", "a loss of experience", TRUE
},
1391 { 0, 0, 0, 0, 0 } },
1393 tur_abil
[] = { { 1, &(HFull_nutrient
), "", "", TRUE
},
1394 { 0, 0, 0, 0, 0 } },
1396 roh_abil
[] = { { 1, &(HFast
), "", "", TRUE
},
1397 { 0, 0, 0, 0, 0 } },
1399 thu_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1400 { 1, &(HFlying
), "", "", TRUE
},
1401 { 0, 0, 0, 0, 0 } },
1403 dlg_abil
[] = { { 1, &(HDrain_resistance
), "", "", TRUE
},
1404 { 24, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1405 { 0, 0, 0, 0, 0 } },
1407 gig_abil
[] = { { 10, &(HFire_resistance
), "cool", "warmer", TRUE
},
1408 { 15, &(HCold_resistance
), "warm", "cooler", TRUE
},
1409 { 20, &(HShock_resistance
), "insulated", "conductive", TRUE
},
1410 { 0, 0, 0, 0, 0 } },
1412 bre_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1413 { 1, &(HCold_resistance
), "", "", TRUE
},
1414 { 1, &(HShock_resistance
), "", "", TRUE
},
1415 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1416 { 0, 0, 0, 0, 0 } },
1418 elm_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1419 { 1, &(HCold_resistance
), "", "", TRUE
},
1420 { 1, &(HShock_resistance
), "", "", TRUE
},
1421 { 0, 0, 0, 0, 0 } },
1423 red_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1424 { 1, &(HPoison_resistance
), "", "", TRUE
},
1425 { 1, &(HMagicVacuum
), "", "", FALSE
},
1426 { 0, 0, 0, 0, 0 } },
1428 dut_abil
[] = { { 1, &(HCold_resistance
), "", "", TRUE
},
1429 { 0, 0, 0, 0, 0 } },
1431 ira_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1432 { 1, &(HFuckOverEffect
), "", "", FALSE
},
1433 { 12, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
1434 { 20, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
1435 { 26, &(HCont_resist
), "protected from contamination", "vulnerable to contamination", TRUE
},
1436 { 0, 0, 0, 0, 0 } },
1438 yok_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1439 { 1, &(HPoison_resistance
), "", "", TRUE
},
1440 { 1, &(HFire_resistance
), "", "", TRUE
},
1441 { 15, &(HMagicVacuum
), "less capable of casting magic", "capable of casting magic more effectively", FALSE
},
1442 { 0, 0, 0, 0, 0 } },
1444 sin_abil
[] = { { 1, &(HConf_resist
), "", "", TRUE
},
1445 { 0, 0, 0, 0, 0 } },
1447 rdt_abil
[] = { { 1, &(HStun_resist
), "", "", TRUE
},
1448 { 10, &(HStun
), "slightly stunned", "less stunned", FALSE
},
1449 { 10, &(HStunnopathy
), "", "", TRUE
}, /* previous one already gives message --Amy */
1450 { 0, 0, 0, 0, 0 } },
1452 kob_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1453 { 20, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1454 { 0, 0, 0, 0, 0 } },
1456 swi_abil
[] = { { 1, &(HFear_resistance
), "", "", TRUE
},
1457 { 15, &(HPeacevision
), "able to recognize peaceful creatures", "unable to tell friend from enemy", TRUE
},
1458 { 22, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1459 { 0, 0, 0, 0, 0 } },
1461 coc_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1462 { 1, &(HStone_resistance
), "", "", TRUE
},
1463 { 0, 0, 0, 0, 0 } },
1465 sna_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1466 { 0, 0, 0, 0, 0 } },
1468 ill_abil
[] = { { 1, &(HTelepat
), "", "", TRUE
},
1469 { 0, 0, 0, 0, 0 } },
1471 kla_abil
[] = { { 1, &(HConf_resist
), "", "", TRUE
},
1472 { 1, &(HAcid_resistance
), "", "", TRUE
},
1473 { 7, &(HFast
), "quick", "slow", TRUE
},
1474 { 12, &(HFast
), "quick", "slow", TRUE
},
1475 { 17, &(HFast
), "quick", "slow", TRUE
},
1476 { 20, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
1477 { 22, &(HFast
), "quick", "slow", TRUE
},
1478 { 27, &(HFast
), "quick", "slow", TRUE
},
1479 { 0, 0, 0, 0, 0 } },
1481 kut_abil
[] = { { 1, &(HConf_resist
), "", "", TRUE
},
1482 { 1, &(HKeen_memory
), "", "", TRUE
},
1483 { 10, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1484 { 20, &(HMagicVacuum
), "less capable of casting magic", "capable of casting magic more effectively", FALSE
},
1485 { 0, 0, 0, 0, 0 } },
1487 maz_abil
[] = { { 1, &(HMagicVacuum
), "", "", FALSE
},
1488 { 14, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
1489 { 0, 0, 0, 0, 0 } },
1491 vee_abil
[] = { { 11, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1492 { 20, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
1493 { 0, 0, 0, 0, 0 } },
1495 urg_abil
[] = { { 1, &(HMagicVacuum
), "", "", FALSE
},
1496 { 0, 0, 0, 0, 0 } },
1498 nav_abil
[] = { { 1, &(HPainSense
), "", "", TRUE
},
1499 { 0, 0, 0, 0, 0 } },
1501 lep_abil
[] = { { 1, &(HMagicFindBonus
), "", "", TRUE
},
1502 { 0, 0, 0, 0, 0 } },
1504 sen_abil
[] = { { 1, &(HPainSense
), "", "", TRUE
},
1505 { 0, 0, 0, 0, 0 } },
1507 ton_abil
[] = { { 1, &(HScentView
), "", "", TRUE
},
1508 { 0, 0, 0, 0, 0 } },
1510 uni_abil
[] = { { 10, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
1511 { 0, 0, 0, 0, 0 } },
1513 ret_abil
[] = { { 1, &(HKeen_memory
), "", "", TRUE
},
1514 { 1, &(HAggravate_monster
), "", "", FALSE
},
1515 { 5, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1516 { 10, &(HPsi_resist
), "psionic", "less psionic", TRUE
},
1517 { 15, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
1518 { 0, 0, 0, 0, 0 } },
1520 cth_abil
[] = { { 16, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1521 { 0, 0, 0, 0, 0 } },
1523 may_abil
[] = { { 12, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1524 { 0, 0, 0, 0, 0 } },
1526 akt_abil
[] = { { 10, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1527 { 0, 0, 0, 0, 0 } },
1529 jab_abil
[] = { { 15, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1530 { 0, 0, 0, 0, 0 } },
1532 gav_abil
[] = { { 12, &(HFuckOverEffect
), "being fucked over", "not being fucked over anymore", FALSE
},
1533 { 0, 0, 0, 0, 0 } },
1535 clt_abil
[] = { { 4, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1536 { 0, 0, 0, 0, 0 } },
1538 out_abil
[] = { { 1, &(HAcid_resistance
), "", "", TRUE
},
1539 { 1, &(HScentView
), "", "", TRUE
},
1540 { 10, &(HFear_resistance
), "unafraid", "afraid", TRUE
},
1541 { 15, &(HInfravision
), "perceptive", "half blind", TRUE
},
1542 { 16, &(HTechnicality
), "technically knowledgable", "your techniques becoming weaker", TRUE
},
1543 { 18, &(HCont_resist
), "protected from contamination", "vulnerable to contamination", TRUE
},
1544 { 20, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
1545 {25, &(HMagical_breathing
), "aquatic", "hydrophobic", TRUE
},
1546 { 0, 0, 0, 0, 0 } },
1548 spi_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1549 { 0, 0, 0, 0, 0 } },
1551 gel_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1552 { 1, &(HCold_resistance
), "", "", TRUE
},
1553 { 1, &(HFire_resistance
), "", "", TRUE
},
1554 { 1, &(HShock_resistance
), "", "", TRUE
},
1555 { 1, &(HSleep_resistance
), "", "", TRUE
},
1556 { 1, &(HAcid_resistance
), "", "", TRUE
},
1557 { 1, &(HStone_resistance
), "", "", TRUE
},
1558 { 1, &(HFull_nutrient
), "", "", TRUE
},
1559 { 1, &(HDiscount_action
), "", "", TRUE
},
1560 { 0, 0, 0, 0, 0 } },
1562 ins_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1563 { 1, &(HFull_nutrient
), "", "", TRUE
},
1564 { 1, &(HScentView
), "", "", TRUE
},
1565 { 20, &(HManaleech
), "magically attuned", "no longer magically attuned", TRUE
},
1566 { 0, 0, 0, 0, 0 } },
1568 tro_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1569 { 1, &(HRegeneration
), "", "", TRUE
},
1570 { 1, &(HMagicVacuum
), "", "", FALSE
},
1571 { 0, 0, 0, 0, 0 } },
1573 ung_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
1574 { 1, &(HWarning
), "", "", TRUE
},
1575 { 0, 0, 0, 0, 0 } },
1577 gas_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1578 { 1, &(HCold_resistance
), "", "", TRUE
},
1579 { 1, &(HSleep_resistance
), "", "", TRUE
},
1580 { 1, &(HPoison_resistance
), "", "", TRUE
},
1581 { 1, &(HDiminishedBleeding
), "", "", TRUE
},
1582 { 0, 0, 0, 0, 0 } },
1584 mum_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1585 { 1, &(HCold_resistance
), "", "", TRUE
},
1586 { 1, &(HSleep_resistance
), "", "", TRUE
},
1587 { 1, &(HPoison_resistance
), "", "", TRUE
},
1588 { 1, &(HUndead_warning
), "", "", TRUE
},
1589 { 1, &(HDiminishedBleeding
), "", "", TRUE
},
1590 { 0, 0, 0, 0, 0 } },
1592 din_abil
[] = { { 1, &(HDiscount_action
), "", "", TRUE
},
1593 { 1, &(HFuckOverEffect
), "", "", FALSE
},
1594 { 1, &(HScentView
), "", "", TRUE
},
1595 { 0, 0, 0, 0, 0 } },
1597 ske_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1598 { 1, &(HCold_resistance
), "", "", TRUE
},
1599 { 1, &(HSleep_resistance
), "", "", TRUE
},
1600 { 1, &(HPoison_resistance
), "", "", TRUE
},
1601 { 1, &(HStone_resistance
), "", "", TRUE
},
1602 { 1, &(HMagical_breathing
), "", "", TRUE
},
1603 { 1, &(HDiminishedBleeding
), "", "", TRUE
},
1604 { 17, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1605 { 0, 0, 0, 0, 0 } },
1607 lev_abil
[] = { { 1, &(HTelepat
), "", "", TRUE
},
1608 { 1, &(HHallu_party
), "", "", TRUE
},
1609 { 1, &(HDrunken_boxing
), "", "", TRUE
},
1610 { 1, &(HStunnopathy
), "", "", TRUE
},
1611 { 1, &(HNumbopathy
), "", "", TRUE
},
1612 { 1, &(HDimmopathy
), "", "", TRUE
},
1613 { 1, &(HFreezopathy
), "", "", TRUE
},
1614 { 1, &(HStoned_chiller
), "", "", TRUE
},
1615 { 1, &(HCorrosivity
), "", "", TRUE
},
1616 { 1, &(HFear_factor
), "", "", TRUE
},
1617 { 1, &(HBurnopathy
), "", "", TRUE
},
1618 { 1, &(HSickopathy
), "", "", TRUE
},
1619 { 1, &(HWonderlegs
), "", "", TRUE
},
1620 { 1, &(HGlib_combat
), "", "", TRUE
},
1621 { 0, 0, 0, 0, 0 } },
1623 wra_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1624 { 1, &(HCold_resistance
), "", "", TRUE
},
1625 { 1, &(HSleep_resistance
), "", "", TRUE
},
1626 { 1, &(HPoison_resistance
), "", "", TRUE
},
1627 { 1, &(HStone_resistance
), "", "", TRUE
},
1628 { 1, &(HUndead_warning
), "", "", TRUE
},
1629 { 1, &(HFlying
), "", "", TRUE
},
1630 { 0, 0, 0, 0, 0 } },
1632 lic_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1633 { 1, &(HCold_resistance
), "", "", TRUE
},
1634 { 1, &(HSleep_resistance
), "", "", TRUE
},
1635 { 1, &(HPoison_resistance
), "", "", TRUE
},
1636 { 1, &(HUndead_warning
), "", "", TRUE
},
1637 { 1, &(HRegeneration
), "", "", TRUE
},
1638 { 1, &(HTeleportation
), "", "", FALSE
},
1639 { 1, &(HTeleport_control
), "", "", TRUE
},
1640 { 1, &(HMysteryResist
), "", "", TRUE
},
1641 { 24, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1642 { 0, 0, 0, 0, 0 } },
1644 jel_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1645 { 1, &(HSleep_resistance
), "", "", TRUE
},
1646 { 1, &(HManaleech
), "", "", TRUE
},
1647 { 1, &(HDiscount_action
), "", "", TRUE
},
1648 { 8, &(HScentView
), "your sense of smell expanding", "less capable of smelling things", TRUE
},
1649 { 0, 0, 0, 0, 0 } },
1651 wim_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1652 { 1, &(HRegeneration
), "", "", TRUE
},
1653 { 1, &(HTeleportation
), "", "", FALSE
},
1654 { 0, 0, 0, 0, 0 } },
1656 trn_abil
[] = { { 1, &(HExtra_wpn_practice
), "", "", TRUE
},
1657 { 0, 0, 0, 0, 0 } },
1659 nem_abil
[] = { { 18, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1660 { 0, 0, 0, 0, 0 } },
1662 zau_abil
[] = { { 1, &(HStone_resistance
), "", "", TRUE
},
1663 { 1, &(HSwimming
), "", "", TRUE
},
1664 { 0, 0, 0, 0, 0 } },
1666 wyl_abil
[] = { { 1, &(HScentView
), "", "", TRUE
},
1667 { 12, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1668 { 0, 0, 0, 0, 0 } },
1670 thr_abil
[] = { { 1, &(HSearching
), "", "", TRUE
},
1671 { 1, &(HStealth
), "", "", TRUE
},
1672 { 20, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1673 { 20, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1674 { 0, 0, 0, 0, 0 } },
1676 han_abil
[] = { { 1, &(HDrain_resistance
), "", "", TRUE
},
1677 { 20, &(HFlying
), "weightless", "grounded", TRUE
},
1678 { 0, 0, 0, 0, 0 } },
1680 cup_abil
[] = { { 20, &(HFlying
), "weightless", "grounded", TRUE
},
1681 { 0, 0, 0, 0, 0 } },
1683 bac_abil
[] = { { 1, &(HControlMagic
), "", "", TRUE
},
1684 { 10, &(HSick_resistance
), "immune to diseases", "no longer immune to diseases", TRUE
},
1685 { 15, &(HResistancePiercing
), "able to pierce enemy resistances", "incapable of piercing enemy resistances", TRUE
},
1686 { 20, &(HCont_resist
), "protected from contamination", "vulnerable to contamination", TRUE
},
1687 { 0, 0, 0, 0, 0 } },
1689 she_abil
[] = { { 20, &(HFire_resistance
), "cool", "warmer", TRUE
},
1690 { 20, &(HPoison_resistance
), "healthy", "less healthy", TRUE
},
1691 { 20, &(HAcid_resistance
), "warded", "endangered", TRUE
},
1692 { 20, &(HSwimming
), "ready to swim","afraid of the water", TRUE
},
1693 { 20, &(HSee_invisible
), "your vision sharpen", "your vision blurring", TRUE
},
1694 { 20, &(HInfravision
), "perceptive", "half blind", TRUE
},
1695 { 20, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
1696 { 20, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1697 { 0, 0, 0, 0, 0 } },
1699 cer_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1700 { 1, &(HScentView
), "", "", TRUE
},
1701 { 12, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
1702 { 0, 0, 0, 0, 0 } },
1704 hou_abil
[] = { { 1, &(HScentView
), "", "", TRUE
},
1705 { 3, &(HControlMagic
), "magic-controlled", "no longer magic-controlled", TRUE
},
1706 { 0, 0, 0, 0, 0 } },
1708 woo_abil
[] = { { 1, &(HScentView
), "", "", TRUE
},
1709 { 0, 0, 0, 0, 0 } },
1711 sly_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1712 { 1, &(HSick_resistance
), "", "", TRUE
},
1713 { 1, &(HFear_resistance
), "", "", TRUE
},
1714 { 1, &(HPoison_resistance
), "", "", TRUE
},
1715 { 0, 0, 0, 0, 0 } },
1717 wis_abil
[] = { { 1, &(HControlMagic
), "", "", TRUE
},
1718 { 0, 0, 0, 0, 0 } },
1720 exp_abil
[] = { { 1, &(HPsi_resist
), "", "", TRUE
},
1721 { 0, 0, 0, 0, 0 } },
1723 stb_abil
[] = { { 1, &(HDisint_resistance
), "", "", TRUE
},
1724 { 0, 0, 0, 0, 0 } },
1726 rod_abil
[] = { { 1, &(HFire_resistance
), "", "", TRUE
},
1727 { 1, &(HPoison_resistance
), "", "", TRUE
},
1728 { 1, &(HMagical_breathing
), "", "", TRUE
},
1729 { 1, &(HRegeneration
), "", "", TRUE
},
1730 { 1, &(HTeleportation
), "", "", FALSE
},
1731 { 1, &(HTeleport_control
), "", "", TRUE
},
1732 { 1, &(HSee_invisible
), "", "", TRUE
},
1733 { 1, &(HFuckOverEffect
), "", "", FALSE
},
1734 { 1, &(HSpellboost
), "", "", TRUE
},
1735 { 0, 0, 0, 0, 0 } },
1737 esp_abil
[] = { { 1, &(HSick_resistance
), "", "", TRUE
},
1738 { 1, &(HCold_resistance
), "", "", TRUE
},
1739 { 1, &(HSleep_resistance
), "", "", TRUE
},
1740 { 1, &(HPoison_resistance
), "", "", TRUE
},
1741 { 1, &(HDisint_resistance
), "", "", TRUE
},
1742 { 1, &(HStone_resistance
), "", "", TRUE
},
1743 { 1, &(HUndead_warning
), "", "", TRUE
},
1744 { 0, 0, 0, 0, 0 } },
1746 eth_abil
[] = { { 1, &(HStone_resistance
), "", "", TRUE
},
1747 { 1, &(HDisint_resistance
), "", "", TRUE
},
1748 { 0, 0, 0, 0, 0 } },
1750 ico_abil
[] = { { 1, &(HStone_resistance
), "", "", TRUE
},
1751 { 1, &(HDisint_resistance
), "", "", TRUE
},
1752 { 0, 0, 0, 0, 0 } },
1754 lyc_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1755 { 1, &(HRegeneration
), "", "", TRUE
},
1756 { 1, &(HScentView
), "", "", TRUE
},
1757 { 7, &(HStealth
), "stealthy", "noisy", TRUE
},
1758 { 0, 0, 0, 0, 0 } },
1760 aur_abil
[] = { { 1, &(HReflecting
), "", "", TRUE
},
1761 { 0, 0, 0, 0, 0 } },
1763 sat_abil
[] = { { 1, &(HTechnicality
), "", "", TRUE
},
1764 { 1, &(HScentView
), "", "", TRUE
},
1765 { 1, &(HControlMagic
), "", "", TRUE
},
1766 { 18, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1767 { 20, &(HMagicFindBonus
), "capable of finding magical items", "less capable of finding magical items", TRUE
},
1768 { 0, 0, 0, 0, 0 } },
1770 sho_abil
[] = { { 1, &(HDiscount_action
), "", "", TRUE
},
1771 { 15, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1772 { 0, 0, 0, 0, 0 } },
1774 ink_abil
[] = { { 1, &(HPeacevision
), "", "", TRUE
},
1775 { 1, &(HTechnicality
), "", "", TRUE
},
1776 { 1, &(HScentView
), "", "", TRUE
},
1777 { 6, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
1778 { 10, &(HSpellboost
), "a surge of spell power", "a reduction of spell power", TRUE
},
1779 { 20, &(HDefusing
), "capable of defusing traps", "unable to defuse traps", TRUE
},
1780 { 0, 0, 0, 0, 0 } },
1782 tay_abil
[] = { { 20, &(HPainSense
), "empathic", "cold-hearted", TRUE
},
1783 { 23, &(HMysteryResist
), "mysteriously resistant", "afraid of mysteries", TRUE
},
1784 { 0, 0, 0, 0, 0 } },
1786 sed_abil
[] = { { 1, &(HAntimagic
), "", "", TRUE
},
1787 { 0, 0, 0, 0, 0 } },
1789 orc_abil
[] = { { 1, &(HPoison_resistance
), "", "", TRUE
},
1790 { 0, 0, 0, 0, 0 } };
1792 /*static long next_check = 600L;*/ /* arbitrary first setting */
1793 STATIC_DCL
void exerper(void);
1794 STATIC_DCL
void postadjabil(long *);
1796 /* adjust an attribute; return TRUE if change is made, FALSE otherwise */
1798 adjattrib(ndx
, incr
, msgflg
, canresist
)
1803 /* 3 => no message at all and no development message, 2 => no message at all (but development can be given),
1804 * 1 => no message except encumber, zero => message, and negative => conditional (msg if change made) */
1806 if ((SustainAbilityOn
&& ((incr
> 0) || SustainLossSafe
)) || !incr
) return FALSE
;
1808 if ((ndx
== A_INT
|| ndx
== A_WIS
) && uarmh
&& uarmh
->otyp
== DUNCE_CAP
&& ((incr
> 0) || rn2(5)) ) {
1810 Your("cap constricts briefly, then relaxes again.");
1814 /* Mithril items can sometimes prevent the player's stats from decreasing --Amy
1815 * also, astronauts have such extreme body training for going into space that they're able to resist */
1816 if (incr
< 0 && canresist
) {
1818 if (uarmg
&& uarmg
->otyp
== GAUNTLETS_OF_PHYSICAL_SUSTENAN
&& ((ndx
== A_STR
) || (ndx
== A_DEX
)) ) {
1819 Your("gauntlets prevent the stat loss!");
1820 makeknown(uarmg
->otyp
);
1824 if (uamul
&& uamul
->otyp
== AMULET_OF_SUSTAINED_MIND
&& ((ndx
== A_INT
) || (ndx
== A_WIS
)) ) {
1825 Your("amulet prevents the stat loss!");
1826 makeknown(uamul
->otyp
);
1830 if (uleft
&& uleft
->otyp
== RIN_UPPER_ADORNMENT
&& ndx
== A_CHA
) return FALSE
;
1831 if (uright
&& uright
->otyp
== RIN_UPPER_ADORNMENT
&& ndx
== A_CHA
) return FALSE
;
1833 if (Role_if(PM_ASTRONAUT
) && rn2(2)) {
1834 pline("Your steeled body prevents the stat loss!");
1838 if (uarm
&& uarm
->oartifact
== ART_CON_HOLD
&& ndx
== A_CON
) {
1839 Your("armor prevents the constitution drain!");
1843 int mithrilitemcount
= 0;
1845 if (uwep
&& objects
[uwep
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1846 if (u
.twoweap
&& uswapwep
&& objects
[uswapwep
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1847 if (uarm
&& objects
[uarm
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1848 if (uarmc
&& objects
[uarmc
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1849 if (uarmh
&& objects
[uarmh
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1850 if (uarms
&& objects
[uarms
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1851 if (uarmg
&& objects
[uarmg
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1852 if (uarmf
&& objects
[uarmf
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1853 if (uarmu
&& objects
[uarmu
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1854 if (uamul
&& objects
[uamul
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1855 if (uimplant
&& objects
[uimplant
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1856 if (uleft
&& objects
[uleft
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1857 if (uright
&& objects
[uright
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1858 if (ublindf
&& objects
[ublindf
->otyp
].oc_material
== MT_MITHRIL
) mithrilitemcount
++;
1860 if (mithrilitemcount
> 0 && (mithrilitemcount
>= rnd(20))) {
1861 pline("Your mithril equipment prevents the stat loss!");
1868 if ((AMAX(ndx
) >= ATTRMAX(ndx
)) && (ACURR(ndx
) >= AMAX(ndx
))) {
1869 if (msgflg
== 0 && flags
.verbose
)
1870 pline("You're already as %s as you can get.",
1872 ABASE(ndx
) = AMAX(ndx
) = ATTRMAX(ndx
); /* just in case */
1876 /* you won't always get the increase if the attribute is already rather high --Amy */
1877 if (!attr_will_go_up(ndx
, msgflg
<= 2 ? TRUE
: FALSE
)) return FALSE
;
1880 if(ABASE(ndx
) > AMAX(ndx
)) {
1881 incr
= ABASE(ndx
) - AMAX(ndx
);
1883 if(AMAX(ndx
) > ATTRMAX(ndx
))
1884 AMAX(ndx
) = ATTRMAX(ndx
);
1885 ABASE(ndx
) = AMAX(ndx
);
1888 if (ABASE(ndx
) <= ATTRABSMIN(ndx
)) {
1889 if (msgflg
== 0 && flags
.verbose
)
1890 pline("You're already as %s as you can get.",
1893 /* Amy edit: granted, stat instadeath would be kinda BS here... but you should at least get *some* penalty
1894 * for playing badly enough to allow a stat to be drained that low! So, we're reducing your alla. */
1895 You_feel("a drain on your soul...");
1896 drain_alla(abs(incr
));
1898 ABASE(ndx
) = ATTRABSMIN(ndx
); /* just in case */
1903 if(ABASE(ndx
) < ATTRABSMIN(ndx
)) {
1904 incr
= ABASE(ndx
) - ATTRABSMIN(ndx
);
1905 ABASE(ndx
) = ATTRABSMIN(ndx
);
1907 if(AMAX(ndx
) < ATTRABSMIN(ndx
))
1908 AMAX(ndx
) = ATTRABSMIN(ndx
);
1913 (incr
> 1 || incr
< -1) ? "very ": "",
1914 (incr
> 0) ? plusattr
[ndx
] : minusattr
[ndx
]);
1916 if ( (msgflg
== 0) && (incr
< 0) ) {
1917 pline("You lose %s", ndx
== 0 ? "Strength" : ndx
== 1 ? "Intelligence" : ndx
== 2 ? "Wisdom" : ndx
== 3 ? "Dexterity" : ndx
== 4 ? "Constitution" : "Charisma");
1918 if (PlayerHearsSoundEffects
) pline(issoviet
? "Pochemu vy ne sledite luchshe dlya vashikh atributov, tak ili inache?" : "Due-l-ue-l-ue-l!");
1922 if (program_state
.in_moveloop
&& msgflg
<= 1 && moves
> 1 && (ndx
== A_STR
|| ndx
== A_CON
))
1923 (void)encumber_msg();
1929 register struct obj
*otmp
;
1934 if(incr
) num
= incr
;
1936 if (ABASE(A_STR
) < 3) num
= (rn2(3) ? rnd(3) : rnd(6) );
1937 else if (ABASE(A_STR
) < 4) num
= (rn2(4) ? rnd(2) : rnd(6) );
1938 else if(ABASE(A_STR
) < 18) num
= (rn2(4) ? 1 : rnd(6) );
1939 else if (ABASE(A_STR
) < STR18(85)) num
= rnd(10);
1941 (void) adjattrib(A_STR
, (otmp
&& otmp
->cursed
) ? -num
: num
, TRUE
, TRUE
);
1945 losestr(num
, canresist
) /* may kill you; cause may be poison or monster like 'a' */
1949 int ustr
= ABASE(A_STR
) - num
;
1951 int hpreduce
= rnd(5);
1953 if (num
> 0) pline("%d points of your strength got sapped!",num
);
1954 if (num
< 0) pline("%d points of your strength got restored!",-num
);
1956 if (ustr
< 1) pline("Since you don't have enough strength, your health is being sapped instead.");
1964 u
.mhmax
-= hpreduce
;
1965 if (u
.mh
< 1) u
.mh
= 1;
1969 pline("A severe drain seems to be sucking out your soul...");
1973 u
.uhpmax
-= hpreduce
;
1974 if (u
.uhp
< 1) u
.uhp
= 1;
1978 pline("A severe drain seems to be sucking out your soul...");
1983 (void) adjattrib(A_STR
, -num
, TRUE
, canresist
);
1991 if (u
.uluck
< 0 && u
.uluck
< LUCKMIN
) u
.uluck
= LUCKMIN
;
1992 if (!LuckLoss
&& !u
.uprops
[LUCK_LOSS
].extrinsic
&& !autismweaponcheck(ART_PROFANED_GREATSCYTHE
) && !have_unluckystone() && u
.uluck
> 0 && u
.uluck
> LUCKMAX
) u
.uluck
= LUCKMAX
;
1993 if ( (LuckLoss
|| u
.uprops
[LUCK_LOSS
].extrinsic
|| autismweaponcheck(ART_PROFANED_GREATSCYTHE
) || have_unluckystone()) && u
.uluck
> 0 && u
.uluck
> LUCKMAX
) {
1995 You_feel("something turning around..."); /* extra vague message (evil patch idea by jonadab) */
1996 u
.cnd_luckrollovercount
++; /* probably extremely rare, but let's track it anyway... --Amy */
2001 stone_luck(parameter
)
2002 boolean parameter
; /* So I can't think up of a good name. So sue me. --KAA */
2004 register struct obj
*otmp
;
2005 register long bonchance
= 0;
2007 for (otmp
= invent
; otmp
; otmp
= otmp
->nobj
)
2008 if (confers_luck(otmp
)) {
2009 if (otmp
->cursed
) bonchance
-= otmp
->quan
;
2010 else if (otmp
->blessed
) {bonchance
+= otmp
->quan
; bonchance
+= otmp
->quan
;}
2011 else if (parameter
) bonchance
+= otmp
->quan
;
2014 /* STEPHEN WHITE'S NEW CODE */
2015 if (uarmh
&& uarmh
->otyp
== FEDORA
&& !uarmh
->cursed
) bonchance
+= 2;
2017 if (uarmg
&& uarmg
->otyp
== GAUNTLETS_OF_GOOD_FORTUNE
&& !uarmg
->cursed
) bonchance
+= 2;
2019 /* that sign int long conversion seems to screw over the calculation, discovered by Dikkin.
2020 * This is supposed to be a fix. --Amy */
2021 if (bonchance
> 50) bonchance
= 50;
2022 if (bonchance
< -50) bonchance
= -50;
2024 u
.moreluckpts
= bonchance
;
2026 return sgn((int)bonchance
);
2029 /* there has just been an inventory change affecting a luck-granting item */
2033 int luckbon
= stone_luck(TRUE
);
2035 if (!luckbon
&& !carrying(LUCKSTONE
)) u
.moreluck
= 0;
2036 else if (luckbon
>= 0 && u
.moreluckpts
<= 3) u
.moreluck
= u
.moreluckpts
; /* not always give a flat +3 --Amy */
2037 else if (luckbon
>= 0 && u
.moreluckpts
> 3) u
.moreluck
= LUCKADD
;
2038 else u
.moreluck
= -LUCKADD
;
2039 if (uwep
&& uwep
->oartifact
== ART_WIRE_OF_LUCK
) u
.moreluck
+= 5;
2040 if (uarmh
&& uarmh
->otyp
== LUCKY_MUSHROOM
) u
.moreluck
+= 5;
2041 if (uarmf
&& uarmf
->oartifact
== ART_NATALIA_S_GREAT_LUCK
) u
.moreluck
+= 5;
2042 if (have_amateurluckstone()) u
.moreluck
+= 5;
2043 if (uarmf
&& uarmf
->oartifact
== ART_HAPPY_CLOUD
) u
.moreluck
+= 5;
2044 if (have_suckstonearti()) u
.moreluck
+= 5;
2045 if (uarmh
&& uarmh
->oartifact
== ART_XTRALUCK
) u
.moreluck
+= 3;
2046 if (uwep
&& uwep
->oartifact
== ART_LUCKLESS_FOLLY
) u
.moreluck
-= 3;
2047 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_LUCKLESS_FOLLY
) u
.moreluck
-= 3;
2048 if (uarm
&& uarm
->oartifact
== ART_AMMY_S_COMPLAINT
) u
.moreluck
-= 5;
2049 if (uamul
&& uamul
->oartifact
== ART_HIBA_CHIBA
) u
.moreluck
+= 5;
2054 /* KMH, balance patch -- new function for healthstones
2055 * Amy balance "nerf": make the boost increase more slowly if you have several stones */
2059 register struct obj
*otmp
;
2064 for(otmp
= invent
; otmp
; otmp
=otmp
->nobj
)
2065 if (otmp
->otyp
== HEALTHSTONE
)
2066 u
.uhealbonus
+= otmp
->quan
*
2067 (otmp
->blessed
? 2 : otmp
->cursed
? -2 : 1);
2069 if (u
.uhealbonus
> 1) u
.uhealbonus
= rno(u
.uhealbonus
);
2078 register struct obj
*otmp
;
2081 for(otmp
= invent
; otmp
; otmp
=otmp
->nobj
)
2082 if (otmp
->otyp
== MANASTONE
)
2083 manabonus
+= otmp
->quan
*
2084 (otmp
->blessed
? 2 : otmp
->cursed
? -2 : 1);
2086 if (manabonus
> 1) manabonus
= rno(manabonus
);
2100 for(i
= 0; i
< A_MAX
; i
++) { /* all temporary losses/gains */
2102 if(ATEMP(i
) && ATIME(i
)) {
2103 if(!(--(ATIME(i
)))) { /* countdown for change */
2104 ATEMP(i
) += ATEMP(i
) > 0 ? -1 : 1;
2106 if(ATEMP(i
)) /* reset timer */
2107 ATIME(i
) = 100 / ACURR(A_CON
);
2111 (void)encumber_msg();
2117 #define AVAL 50 /* tune value for exercise gains */
2120 exercise(i
, inc_or_dec
)
2127 if (i
== A_INT
|| i
== A_CHA
) return; /* can't exercise these */
2129 /* no physical exercise while polymorphed; the body's temporary */
2130 /* edit by Amy - let ungenomolds have some fun. */
2131 /*if (Upolyd && i != A_WIS) return;*/
2133 if(abs(AEXE(i
)) < AVAL
) {
2135 * Law of diminishing returns (Part I):
2137 * Gain is harder at higher attribute values.
2138 * 79% at "3" --> 0% at "18"
2139 * Loss is even at all levels (50%).
2141 * Note: *YES* ACURR is the right one to use.
2144 if (inc_or_dec
&& Race_if(PM_MAGYAR
)) return;
2146 if (inc_or_dec
&& Race_if(PM_TRAINER
) && rn2(10)) return;
2148 if (inc_or_dec
&& Race_if(PM_DUNADAN
) && rn2(2)) return;
2150 if (inc_or_dec
&& Race_if(PM_PLAYER_SKELETON
) && rn2(5)) return;
2152 /* note by Amy - it's stupid if you can only lose your attribute points if they're greater than 18. */
2154 AEXE(i
) += (inc_or_dec
) ? (( (rn2(19) > ACURR(i
) ) || !rn2(10) ) && !(PlayerCannotExerciseStats
|| u
.uprops
[EXERCISE_DEACTIVATED
].extrinsic
|| have_exercisestone()) ) : -rn2(2);
2156 if (uarms
&& uarms
->oartifact
== ART_HIGHER_TRAINING
&& inc_or_dec
&& !rn2(2)) AEXE(i
) += 1;
2157 if (uarmf
&& uarmf
->oartifact
== ART_BRITTA_S_MURDER_STORY
&& inc_or_dec
) AEXE(i
) += 2;
2159 if (Extra_wpn_practice
)
2160 AEXE(i
) += (inc_or_dec
) ? (( (rn2(19) > ACURR(i
) ) || !rn2(10) ) && !(PlayerCannotExerciseStats
|| u
.uprops
[EXERCISE_DEACTIVATED
].extrinsic
|| have_exercisestone()) ) : 0;
2162 if (StrongExtra_wpn_practice
)
2163 AEXE(i
) += (inc_or_dec
) ? (( (rn2(19) > ACURR(i
) ) || !rn2(10) ) && !(PlayerCannotExerciseStats
|| u
.uprops
[EXERCISE_DEACTIVATED
].extrinsic
|| have_exercisestone()) ) : 0;
2166 pline("%s, %s AEXE = %d",
2167 (i
== A_STR
) ? "Str" : (i
== A_WIS
) ? "Wis" :
2168 (i
== A_DEX
) ? "Dex" : "Con",
2169 (inc_or_dec
) ? "inc" : "dec", AEXE(i
));
2172 if (moves
> 0 && (i
== A_STR
|| i
== A_CON
)) (void)encumber_msg();
2175 /* hunger values - from eat.c */
2177 #define NOT_HUNGRY 1
2187 /* changes by Amy to make these happen less often, because they shouldn't dominate attribute training/abuse */
2192 int hs
= (u
.uhunger
> 2500) ? SATIATED
:
2193 (u
.uhunger
> 500) ? NOT_HUNGRY
:
2194 (u
.uhunger
> 200) ? HUNGRY
:
2195 (u
.uhunger
> 0) ? WEAK
: FAINTING
;
2198 pline("exerper: Hunger checks");
2203 if ((u
.uhunger
> 4500) || (u
.uhunger
> 4000 && rn2(4)) || (u
.uhunger
<= 4000 && u
.uhunger
> 3500 && rn2(2)) || (u
.uhunger
<= 3500 && u
.uhunger
> 3000 && !rn2(5)) || (u
.uhunger
<= 3000 && !rn2(20)) ) {
2205 exercise(A_DEX
, FALSE
);
2206 if (Role_if(PM_MONK
) || Role_if(PM_HALF_BAKED
))
2207 exercise(A_WIS
, FALSE
);
2210 if (have_anorexia() || Role_if(PM_FAILED_EXISTENCE
)) { /* They strongly dislike being full --Amy */
2211 exercise(A_WIS
, FALSE
); exercise(A_STR
, FALSE
); exercise(A_CON
, FALSE
); exercise(A_DEX
, FALSE
); }
2213 case NOT_HUNGRY
: exercise(A_CON
, TRUE
); break;
2214 case HUNGRY
: if (have_anorexia() || Role_if(PM_FAILED_EXISTENCE
)) exercise(A_WIS
, TRUE
); break;
2216 if (!have_anorexia() && !rn2(10) && !Role_if(PM_FAILED_EXISTENCE
) ) exercise(A_STR
, FALSE
);
2217 if (Role_if(PM_MONK
) || Role_if(PM_HALF_BAKED
)) /* fasting */
2218 exercise(A_WIS
, TRUE
);
2219 if (have_anorexia() || Role_if(PM_FAILED_EXISTENCE
)) {
2220 exercise(A_WIS
, TRUE
); exercise(A_STR
, TRUE
);
2224 if (have_anorexia() || Role_if(PM_FAILED_EXISTENCE
)) { exercise(A_WIS
, TRUE
); exercise(A_STR
, TRUE
); exercise(A_DEX
, TRUE
); }
2225 if (!have_anorexia() && !rn2(10) && !Role_if(PM_FAILED_EXISTENCE
)) exercise(A_CON
, FALSE
); break;
2228 /* Encumberance Checks */
2230 pline("exerper: Encumber checks");
2232 switch (near_capacity()) {
2233 case MOD_ENCUMBER
: exercise(A_STR
, TRUE
); break;
2234 case HVY_ENCUMBER
: exercise(A_STR
, TRUE
);
2235 exercise(A_DEX
, FALSE
); break;
2236 case EXT_ENCUMBER
: exercise(A_DEX
, FALSE
);
2237 exercise(A_CON
, FALSE
); break;
2245 pline("exerper: Status checks");
2247 /* KMH, intrinsic patch */
2248 if ((HClairvoyant
& (INTRINSIC
|TIMEOUT
)) &&
2249 !BClairvoyant
) exercise(A_WIS
, TRUE
);
2250 if (HRegeneration
) exercise(A_STR
, TRUE
);
2252 if(Sick
|| Vomiting
) exercise(A_CON
, FALSE
);
2253 if( (Confusion
&& !Conf_resist
) || Hallucination
|| (Dimmed
&& !rn2(3)) || (Feared
&& !rn2(5)) ) exercise(A_WIS
, FALSE
);
2254 if( (Numbed
&& !rn2(3)) || Frozen
|| (Burned
&& !rn2(2)) ) exercise(A_CON
, FALSE
);
2255 if((Wounded_legs
&& !u
.usteed
) || Fumbling
|| (HStun
&& !Stun_resist
) ) exercise(A_DEX
, FALSE
);
2263 boolean contaminated
;
2264 boolean verycontaminated
;
2268 /* Check out the periodic accumulations */
2272 if(moves
>= u
.next_check
)
2273 pline("exerchk: ready to test. multi = %d.", multi
);
2275 /* Are we ready for a test? */
2276 if(moves
>= u
.next_check
&& !multi
) {
2278 pline("exerchk: testing.");
2281 * Law of diminishing returns (Part II):
2283 * The effects of "exercise" and "abuse" wear
2284 * off over time. Even if you *don't* get an
2285 * increase/decrease, you lose some of the
2286 * accumulated effects.
2288 * Note that if you are polymorphed then the
2289 * effects of any physical exercise done in your
2290 * own body will just wear off with no checking
2291 * until you return to your natural form.
2294 /* contamination is guaranteed to damage wisdom if at least 100 points accumulated on the contamination counter;
2295 * otherwise, have a chance of damaging it but also a chance of it going down on its own --Amy */
2296 contaminated
= FALSE
;
2297 verycontaminated
= FALSE
;
2299 if (u
.contamination
>= 100) {
2300 contaminated
= TRUE
;
2301 verycontaminated
= TRUE
;
2304 if (u
.contamination
&& u
.contamination
< 100) { /* low chance when only slightly contaminated --Amy */
2305 contaminated
= (rn2(100) < u
.contamination
);
2306 if (contaminated
) contaminated
= (rn2(100) < u
.contamination
);
2307 /* if you get lucky, very low contamination fixes itself --Amy */
2308 if (!contaminated
&& !rn2(2)) decontaminate(rnd(u
.contamination
));
2311 for(i
= 0; i
< A_MAX
; AEXE(i
++) /= 2) {
2313 if (contaminated
&& i
== A_WIS
) {
2314 pline(FunnyHallu
? "You have a severe coughing fit and an intense desire to vomit!" : "You are consumed by your contamination!");
2316 /* Sustainer race has no way of improving wisdom and should therefore be resistant --Amy */
2317 if (Race_if(PM_SUSTAINER
) && rn2(10)) pline("But you resist the effects!");
2319 pline("You lose Wisdom");
2320 if (PlayerHearsSoundEffects
) pline(issoviet
? "Pochemu vy ne sledite luchshe dlya vashikh atributov, tak ili inache?" : "Due-l-ue-l-ue-l!");
2324 if(ABASE(A_WIS
) < ATTRABSMIN(A_WIS
)) {
2326 /* it's a total crapshoot if any little contamination can instakill you. I decided that
2327 * if it's less than 100, you can't be instakilled but the contamination may go down. --Amy */
2328 if (u
.contamination
< 100) {
2329 if(ABASE(A_WIS
) < ATTRABSMIN(A_WIS
)) {
2333 decontaminate(rnd(u
.contamination
));
2338 pline("The contamination consumes you completely...");
2339 killer
= "being consumed by the contamination";
2340 killer_format
= KILLED_BY
;
2344 pline("WARNING: Your wisdom is still critically low and you may die from contamination again! You can cure it by using a scroll or wand of remove curse, or by successfully praying on a coaligned altar. Amnesia may also help in a pinch, or you may buy a decontamination service from a nurse.");
2345 if(ABASE(A_WIS
) < ATTRABSMIN(A_WIS
)) {
2349 } else if (ABASE(A_WIS
) < 2) {
2350 pline("DANGER!!! Your wisdom is critically low and you're very likely to die from the contamination! You can cure it by using a scroll or wand of remove curse, or by successfully praying on a coaligned altar. Amnesia may also help in a pinch, or you may buy a decontamination service from a nurse.");
2351 } else if (ABASE(A_WIS
) < 4) {
2352 pline("Watch out!! Your wisdom is very low, the contamination may well reduce it below 1 and then you die! You can cure it by using a scroll or wand of remove curse, or by successfully praying on a coaligned altar. Amnesia may also help in a pinch, or you may buy a decontamination service from a nurse.");
2353 } else if (ABASE(A_WIS
) < 6) {
2354 pline("Warning! Your wisdom is low and if the contamination causes it to fall below 1, you die! You can cure it by using a scroll or wand of remove curse, or by successfully praying on a coaligned altar. Amnesia may also help in a pinch, or you may buy a decontamination service from a nurse.");
2359 /* contamination can now go down; if at least 100, only a chance of going down --Amy */
2360 if (u
.contamination
>= 100 && !rn2(2)) decontaminate(100);
2361 /* otherwise, decontaminate by a random amount, meaning you'll probably still be contaminated :D */
2362 else if (u
.contamination
&& u
.contamination
< 100) decontaminate(rnd(u
.contamination
));
2367 /*if(Upolyd && i != A_WIS) continue;*/
2368 if(/*ABASE(i) >= 18 ||*/ !AEXE(i
)) continue;
2369 if(ABASE(i
) >= 18 && sgn(AEXE(i
)) >= 1) continue; /* can still abuse stats if they're above 18 --Amy */
2370 if(i
== A_INT
|| i
== A_CHA
) continue;/* can't exercise these */
2372 /* if your contamination was at least 100, you cannot exercise any stats at all --Amy */
2373 if (verycontaminated
&& sgn(AEXE(i
)) >= 1) continue;
2376 pline("exerchk: testing %s (%d).",
2377 (i
== A_STR
) ? "Str" : (i
== A_WIS
) ? "Wis" :
2378 (i
== A_DEX
) ? "Dex" : "Con", AEXE(i
));
2381 * Law of diminishing returns (Part III):
2383 * You don't *always* gain by exercising.
2384 * [MRS 92/10/28 - Treat Wisdom specially for balance.]
2386 if(sgn(AEXE(i
)) >= 1 && rn2(AVAL
) > ((i
!= A_WIS
) ? abs(AEXE(i
)*2/3) : abs(AEXE(i
))))
2391 /* having a high soft cap makes it more likely to boost the stat --Amy */
2393 if (urole
.attrlimt
[i
] > 18) goupbuust
= (urole
.attrlimt
[i
] - 18);
2395 if (urace
.attrtrs
[i
] > 18) goupbuust
= (urace
.attrtrs
[i
] - 18);
2398 if (goupbuust
< 0) goupbuust
= 0; /* fail safe */
2400 /* make it even harder if they're already rather high --Amy */
2401 if (sgn(AEXE(i
)) >= 1) {
2403 if (ABASE(i
) >= (10 + goupbuust
) && (ASTART(i
) <= ABASE(i
)) && !rn2(5)) continue;
2404 if (ABASE(i
) >= (12 + goupbuust
) && (ASTART(i
) <= ABASE(i
)) && !rn2(3)) continue;
2405 if (ABASE(i
) >= (13 + goupbuust
) && (ASTART(i
) <= ABASE(i
)) && !rn2(3)) continue;
2406 if (ABASE(i
) >= (14 + goupbuust
) && (ASTART(i
) <= ABASE(i
)) && !rn2(3)) continue;
2407 if (ABASE(i
) >= (15 + goupbuust
) && (ASTART(i
) <= ABASE(i
)) && !rn2(3)) continue;
2408 if (ABASE(i
) >= (16 + goupbuust
) && (ASTART(i
) <= ABASE(i
)) && !rn2(3)) continue;
2409 if (ABASE(i
) >= (17 + goupbuust
) && (ASTART(i
) <= ABASE(i
)) && !rn2(3)) continue;
2412 /* different formula for abuse --Amy */
2413 if(sgn(AEXE(i
)) <= 0 && rn2(50) > ((i
!= A_WIS
) ? abs(AEXE(i
)*2/3) : abs(AEXE(i
))))
2415 if(sgn(AEXE(i
)) <= 0 && !rn2(AVAL
) )
2418 mod_val
= sgn(AEXE(i
));
2421 pline("exerchk: changing %d.", i
);
2423 if(adjattrib(i
, mod_val
, -1, TRUE
)) {
2425 pline("exerchk: changed %d.", i
);
2427 /* if you actually changed an attrib - zero accumulation */
2429 /* then print an explanation */
2431 case A_STR
: You((mod_val
>0) ?
2432 "must have been exercising." :
2433 "must have been abusing your body.");
2435 case A_WIS
: You((mod_val
>0) ?
2436 "must have been very observant." :
2437 "haven't been paying attention.");
2439 case A_DEX
: You((mod_val
>0) ?
2440 "must have been working on your reflexes." :
2441 "haven't been working on reflexes lately.");
2443 case A_CON
: You((mod_val
>0) ?
2444 "must be leading a healthy life-style." :
2445 "haven't been watching your health.");
2450 u
.next_check
+= (ishaxor
? rnz(1000) : rnz(2000) ) ;
2452 pline("exerchk: next check at %ld.", u
.next_check
);
2458 mightbooststat(stattoboost
)
2461 boolean statwillgoup
= FALSE
;
2462 int statgoupchance
= 100;
2465 /* having a high soft cap makes it more likely to boost the stat --Amy */
2467 if (urole
.attrlimt
[stattoboost
] > 18) goupbuust
= (urole
.attrlimt
[stattoboost
] - 18);
2469 if (urace
.attrtrs
[stattoboost
] > 18) goupbuust
= (urace
.attrtrs
[stattoboost
] - 18);
2471 if (goupbuust
< 0) goupbuust
= 0; /* fail safe */
2473 if (stattoboost
< 0) {
2474 impossible("tried to boost nonexistant stat %d", stattoboost
);
2477 if (stattoboost
>= A_MAX
) {
2478 impossible("tried to boost nonexistant stat %d", stattoboost
);
2482 if (ABASE(stattoboost
) >= 18) {
2486 if (ABASE(stattoboost
) == 1) statgoupchance
= 33;
2487 else if (ABASE(stattoboost
) == 2) statgoupchance
= 66;
2488 else if ( (ABASE(stattoboost
) >= 12) && (ASTART(stattoboost
) <= ABASE(stattoboost
)) ) {
2489 if (ABASE(stattoboost
) == (12 + goupbuust
)) statgoupchance
= 200;
2490 else if (ABASE(stattoboost
) == (13 + goupbuust
)) statgoupchance
= 300;
2491 else if (ABASE(stattoboost
) == (14 + goupbuust
)) statgoupchance
= 400;
2492 else if (ABASE(stattoboost
) == (15 + goupbuust
)) statgoupchance
= 600;
2493 else if (ABASE(stattoboost
) == (16 + goupbuust
)) statgoupchance
= 800;
2494 else if (ABASE(stattoboost
) == (17 + goupbuust
)) statgoupchance
= 1000;
2497 if (uarm
&& uarm
->oartifact
== ART_CERNY_
&& stattoboost
== A_CON
) statgoupchance
/= 3;
2498 if (uarmf
&& uarmf
->oartifact
== ART_BRITTA_S_MURDER_STORY
) statgoupchance
/= 5;
2500 if (statgoupchance
< 1) statgoupchance
= 1; /* fail safe */
2502 if (!rn2(statgoupchance
)) statwillgoup
= TRUE
;
2504 adjattrib(stattoboost
, 1, 0, TRUE
);
2508 /* next_check will otherwise have its initial 600L after a game restore */
2510 reset_attribute_clock()
2512 /*if (moves > 600L) next_check = moves + rn1(50,800);*/
2517 init_attr(np
, rerollpossible
)
2519 boolean rerollpossible
;
2521 register int i
, x
, tryct
;
2524 for(i
= 0; i
< A_MAX
; i
++) {
2525 ABASE(i
) = AMAX(i
) = urole
.attrbase
[i
];
2526 ATEMP(i
) = ATIME(i
) = 0;
2527 np
-= urole
.attrbase
[i
];
2531 while(np
> 0 && tryct
< 100) {
2534 for (i
= 0; (i
< A_MAX
) && ((x
-= urole
.attrdist
[i
]) > 0); i
++) ;
2535 if(i
>= A_MAX
) continue; /* impossible */
2537 if(ABASE(i
) >= ATTRMAX(i
)) {
2543 if (!attr_will_go_up(i
, FALSE
)) { /* aww --Amy */
2545 if (!rerollpossible
|| !rn2(1000)) np
--;
2551 if (ABASE(i
) < 16 || (!rn2(ABASE(i
) - 14) ) ) { /* very high initial attributes are more rare --Amy */
2559 while(np
< 0 && tryct
< 100) { /* for redistribution */
2562 for (i
= 0; (i
< A_MAX
) && ((x
-= urole
.attrdist
[i
]) > 0); i
++) ;
2563 if(i
>= A_MAX
) continue; /* impossible */
2565 if(ABASE(i
) <= ATTRMIN(i
)) { /* not ATTRABSMIN! should always be at least 3 for all attributes --Amy */
2576 if (Race_if(PM_ADDICT
)) {
2578 for (i
= 0; (i
< A_MAX
); i
++) {
2580 if (i
== A_STR
) ABASE(i
) = AMAX(i
) = ATTRMAX(i
);
2581 else if (ABASE(i
) < 25) ABASE(i
) = AMAX(i
) = 25;
2590 register int i
, tmp
;
2592 for(i
= 0; i
< A_MAX
; i
++) {
2593 if ((i
==A_INT
|| i
==A_WIS
) && issoviet
) continue; /* wuot? --Amy */
2594 /* Polymorphing doesn't change your mind - wtf??? of course it does! */
2595 /* In Soviet Russia, nothing will ever change from vanilla and therefore soviet mode might in fact
2596 * just be vanilla, but noooooo, the SLASHTHEM developer decided to fork a variant that he apparently
2597 * doesn't like at all, and reverted everything. */
2599 AMAX(i
) += (rn2(5)-2);
2600 if (AMAX(i
) > ATTRMAX(i
)) AMAX(i
) = ATTRMAX(i
);
2601 if (AMAX(i
) < ATTRABSMIN(i
)) AMAX(i
) = ATTRABSMIN(i
);
2602 ABASE(i
) = ABASE(i
) * AMAX(i
) / tmp
;
2603 /* ABASE(i) > ATTRMAX(i) is impossible */
2604 if (ABASE(i
) < ATTRABSMIN(i
)) ABASE(i
) = ATTRABSMIN(i
);
2606 (void)encumber_msg();
2611 postadjabil(ability
)
2614 if (!ability
) return;
2615 if (ability
== &(HWarning
) || ability
== &(HSee_invisible
))
2620 adjabil(oldlevel
,newlevel
)
2621 int oldlevel
, newlevel
;
2623 register const struct innate
*abil
, *rabil
;
2624 long mask
= FROMEXPER
;
2626 switch (Role_switch
) {
2627 case PM_ARCHEOLOGIST
: abil
= arc_abil
; break;
2628 case PM_BLEEDER
: abil
= ble_abil
; break;
2629 case PM_SOFTWARE_ENGINEER
: abil
= sof_abil
; break;
2630 case PM_CRACKER
: abil
= cra_abil
; break;
2631 case PM_DEMAGOGUE
: abil
= dem_abil
; break;
2632 case PM_YAUTJA
: abil
= yau_abil
; break;
2633 case PM_JOCKEY
: abil
= joc_abil
; break;
2634 case PM_STORMBOY
: abil
= sto_abil
; break;
2635 case PM_SPACE_MARINE
: abil
= sma_abil
; break;
2636 case PM_JANITOR
: abil
= jan_abil
; break;
2637 case PM_ANACHRONIST
: abil
= ana_abil
; break;
2638 case PM_DIABLIST
: abil
= dia_abil
; break;
2639 case PM_DANCER
: abil
= dan_abil
; break;
2640 case PM_BUTT_LOVER
: abil
= but_abil
; break;
2641 case PM_CAMPERSTRIKER
: abil
= cam_abil
; break;
2642 case PM_WALSCHOLAR
: abil
= wal_abil
; break;
2643 case PM_UNBELIEVER
: abil
= unb_abil
; break;
2644 case PM_SPACEWARS_FIGHTER
: abil
= spa_abil
; break;
2645 case PM_PREVERSIONER
: abil
= pre_abil
; break;
2646 case PM_GANG_SCHOLAR
: abil
= sco_abil
; break;
2647 case PM_SECRET_ADVICE_MEMBER
: abil
= sec_abil
; break;
2648 case PM_EMERA
: abil
= eme_abil
; break;
2649 case PM_XELNAGA
: abil
= xel_abil
; break;
2650 case PM_BARBARIAN
: abil
= bar_abil
; break;
2651 case PM_NOOB_MODE_BARB
: abil
= noo_abil
; break;
2652 case PM_COURIER
: abil
= cou_abil
; break;
2653 case PM_WEIRDBOY
: abil
= wei_abil
; break;
2654 case PM_MAHOU_SHOUJO
: abil
= mah_abil
; break;
2655 case PM_PICKPOCKET
: abil
= pic_abil
; break;
2656 case PM_ASTRONAUT
: abil
= ast_abil
; break;
2657 case PM_STAND_USER
: abil
= sta_abil
; break;
2658 case PM_JESTER
: abil
= jes_abil
; break;
2659 case PM_LADIESMAN
: abil
= lad_abil
; break;
2660 case PM_FENCER
: abil
= fnc_abil
; break;
2661 case PM_EMPATH
: abil
= emp_abil
; break;
2662 case PM_HUSSY
: abil
= hus_abil
; break;
2663 case PM_QUARTERBACK
: abil
= qub_abil
; break;
2664 case PM_FIGHTER
: abil
= fig_abil
; break;
2665 case PM_MEDIUM
: abil
= med_abil
; break;
2666 case PM_BLOODSEEKER
: abil
= blo_abil
; break;
2667 case PM_DQ_SLIME
: abil
= sli_abil
; break;
2668 case PM_ERDRICK
: abil
= erd_abil
; break;
2669 case PM_CELLAR_CHILD
: abil
= cel_abil
; break;
2670 case PM_DEATH_EATER
: abil
= dea_abil
; break;
2671 case PM_SLAVE_MASTER
: abil
= sla_abil
; break;
2672 case PM_SUPERMARKET_CASHIER
: abil
= sup_abil
; break;
2673 case PM_BARD
: abil
= brd_abil
; break;
2674 case PM_BULLY
: abil
= bul_abil
; break;
2675 case PM_ASSASSIN
: abil
= ass_abil
; break;
2676 case PM_WANDKEEPER
: abil
= wan_abil
; break;
2677 case PM_PALADIN
: abil
= pal_abil
; break;
2678 case PM_ACTIVISTOR
: abil
= act_abil
; break;
2679 case PM_INTEL_SCRIBE
: abil
= scr_abil
; break;
2680 case PM_FOXHOUND_AGENT
: abil
= fox_abil
; break;
2681 case PM_FEAT_MASTER
: abil
= stu_abil
; break;
2682 case PM_DOLL_MISTRESS
: abil
= dol_abil
; break;
2683 case PM_GAMER
: abil
= gam_abil
; break;
2684 case PM_CAVEMAN
: abil
= cav_abil
; break;
2685 case PM_CONVICT
: abil
= con_abil
; break;
2686 case PM_MURDERER
: abil
= mur_abil
; break;
2687 case PM_FAILED_EXISTENCE
: abil
= fai_abil
; break;
2688 case PM_TRANSSYLVANIAN
: abil
= trs_abil
; break;
2689 case PM_KURWA
: abil
= kur_abil
; break;
2690 case PM_PROSTITUTE
: abil
= pro_abil
; break;
2691 case PM_FLAME_MAGE
: abil
= fla_abil
; break;
2692 case PM_COOK
: abil
= coo_abil
; break;
2693 case PM_PSYKER
: abil
= psy_abil
; break;
2694 case PM_FIREFIGHTER
: abil
= fir_abil
; break;
2695 case PM_ACID_MAGE
: abil
= aci_abil
; break;
2696 case PM_GEEK
: abil
= gee_abil
; break;
2697 case PM_GRADUATE
: abil
= gra_abil
; break;
2698 case PM_POKEMON
: abil
= pok_abil
; break;
2699 case PM_NUCLEAR_PHYSICIST
: abil
= nuc_abil
; break;
2700 case PM_HEALER
: abil
= hea_abil
; break;
2701 case PM_ELECTRIC_MAGE
: abil
= ele_abil
; break;
2702 case PM_POISON_MAGE
: abil
= psn_abil
; break;
2703 case PM_OCCULT_MASTER
: abil
= occ_abil
; break;
2704 case PM_CHAOS_SORCEROR
: abil
= cha_abil
; break;
2705 case PM_ELEMENTALIST
: abil
= emn_abil
; break;
2706 case PM_ICE_MAGE
: abil
= ice_abil
; break;
2707 case PM_LIBRARIAN
: abil
= lib_abil
; break;
2708 case PM_JEDI
: abil
= jed_abil
; break;
2709 case PM_HEDDERJEDI
: abil
= jed_abil
; break;
2710 case PM_KNIGHT
: abil
= kni_abil
; break;
2711 case PM_WARRIOR
: abil
= war_abil
; break;
2712 case PM_FORM_CHANGER
: abil
= for_abil
; break;
2713 case PM_AUGURER
: abil
= aug_abil
; break;
2714 case PM_ARTIST
: abil
= art_abil
; break;
2715 case PM_OTAKU
: abil
= ota_abil
; break;
2716 case PM_GUNNER
: abil
= gun_abil
; break;
2717 case PM_DOOM_MARINE
: abil
= mar_abil
; break;
2718 case PM_SAGE
: abil
= sag_abil
; break;
2719 case PM_MONK
: abil
= mon_abil
; break;
2720 case PM_HALF_BAKED
: abil
= hba_abil
; break;
2721 case PM_MUSICIAN
: abil
= mus_abil
; break;
2722 case PM_PSION
: abil
= psi_abil
; break;
2723 case PM_SCIENTIST
: abil
= sci_abil
; break;
2724 case PM_NECROMANCER
: abil
= nec_abil
; break;
2725 case PM_SHAPESHIFTER
: abil
= sha_abil
; break;
2726 case PM_PIRATE
: abil
= pir_abil
; break;
2727 case PM_NINJA
: abil
= nin_abil
; break;
2728 case PM_KORSAIR
: abil
= kor_abil
; break;
2729 case PM_GLADIATOR
: abil
= gla_abil
; break;
2730 case PM_GOFF
: abil
= gof_abil
; break;
2731 case PM_AMAZON
: abil
= ama_abil
; break;
2732 case PM_MASTERMIND
: abil
= mas_abil
; break;
2733 case PM_ALTMER
: abil
= alt_abil
; break;
2734 case PM_BOSMER
: abil
= bos_abil
; break;
2735 case PM_DUNMER
: abil
= dun_abil
; break;
2736 case PM_ORDINATOR
: abil
= ord_abil
; break;
2737 case PM_THALMOR
: abil
= tha_abil
; break;
2738 case PM_DIVER
: abil
= div_abil
; break;
2739 case PM_DRUNK
: abil
= dru_abil
; break;
2740 case PM_LUNATIC
: abil
= lun_abil
; break;
2741 case PM_PRIEST
: abil
= pri_abil
; break;
2742 case PM_RANGER
: abil
= ran_abil
; break;
2744 case PM_ELPH
: abil
= elp_abil
; break;
2745 case PM_LOCKSMITH
: abil
= loc_abil
; break;
2746 case PM_SINGSLAVE
: abil
= sng_abil
; break;
2747 case PM_SOCIAL_JUSTICE_WARRIOR
: abil
= soc_abil
; break;
2748 case PM_ROGUE
: abil
= rog_abil
; break;
2749 case PM_RINGSEEKER
: abil
= rin_abil
; break;
2750 case PM_SAMURAI
: abil
= sam_abil
; break;
2751 case PM_CYBERNINJA
: abil
= cyb_abil
; break;
2752 case PM_TOURIST
: abil
= tou_abil
; break;
2753 case PM_UNDEAD_SLAYER
: abil
= und_abil
; break;
2754 case PM_MIDGET
: abil
= mid_abil
; break;
2755 case PM_UNDERTAKER
: abil
= unt_abil
; break;
2756 case PM_GOLDMINER
: abil
= gol_abil
; break;
2757 case PM_VALKYRIE
: abil
= val_abil
; break;
2758 case PM_VANILLA_VALK
: abil
= val_abil
; break;
2759 case PM_OFFICER
: abil
= off_abil
; break;
2760 case PM_GRENADONIN
: abil
= gro_abil
; break;
2761 case PM_WIZARD
: abil
= wiz_abil
; break;
2762 case PM_ZOOKEEPER
: abil
= zoo_abil
; break;
2763 case PM_WOMANIZER
: abil
= wom_abil
; break;
2764 case PM_CLIMACTERIAL
: abil
= cli_abil
; break;
2765 case PM_YEOMAN
: abil
= yeo_abil
; break;
2766 case PM_JUSTICE_KEEPER
: abil
= jus_abil
; break;
2767 case PM_CARTOMANCER
: abil
= car_abil
; break;
2768 case PM_DRAGONMASTER
: abil
= drm_abil
; break;
2769 case PM_DRUID
: abil
= drd_abil
; break;
2770 case PM_FJORDE
: abil
= fjo_abil
; break;
2771 case PM_AKLYST
: abil
= akl_abil
; break;
2772 case PM_MILL_SWALLOWER
: abil
= mil_abil
; break;
2773 case PM_SYMBIANT
: abil
= sym_abil
; break;
2774 default: abil
= 0; break;
2777 switch (Race_switch
) {
2778 case PM_AZTPOK
: rabil
= azt_abil
; break;
2779 case PM_IRRITATOR
: rabil
= irr_abil
; break;
2780 case PM_HYPOTHERMIC
: rabil
= hyp_abil
; break;
2781 case PM_PLAYER_DYNAMO
: rabil
= dyn_abil
; break;
2782 case PM_JAVA
: rabil
= jav_abil
; break;
2783 case PM_CHIQUAI
: rabil
= chi_abil
; break;
2784 case PM_DEATHMOLD
: rabil
= dmo_abil
; break;
2785 case PM_PERVERT
: rabil
= per_abil
; break;
2786 case PM_BOVER
: rabil
= bov_abil
; break;
2787 case PM_CARTHAGE
: rabil
= cth_abil
; break;
2788 case PM_MAYMES
: rabil
= may_abil
; break;
2789 case PM_CELTIC
: rabil
= clt_abil
; break;
2790 case PM_PEACEMAKER
: rabil
= pea_abil
; break;
2791 case PM_MONGUNG
: rabil
= mog_abil
; break;
2792 case PM_AK_THIEF_IS_DEAD_
: rabil
= akt_abil
; break;
2793 case PM_PLAYER_JABBERWOCK
: rabil
= jab_abil
; break;
2794 case PM_VIETIS
: rabil
= vie_abil
; break;
2795 case PM_KORONST
: rabil
= kst_abil
; break;
2796 case PM_BABYLONIAN
: rabil
= bab_abil
; break;
2797 case PM_PLAYABLE_NEANDERTHAL
: rabil
= nea_abil
; break;
2798 case PM_RUSMOT
: rabil
= rus_abil
; break;
2799 case PM_MACTHEIST
: rabil
= mac_abil
; break;
2800 case PM_GREURO
: rabil
= gru_abil
; break;
2801 case PM_VIKING
: rabil
= vik_abil
; break;
2802 case PM_DOPPELGANGER
: rabil
= dop_abil
; break;
2803 case PM_HUMANLIKE_DRAGON
: rabil
= dra_abil
; break;
2804 case PM_HYBRIDRAGON
: rabil
= hyb_abil
; break;
2805 case PM_FELID
: rabil
= fel_abil
; break;
2806 case PM_KHAJIIT
: rabil
= kha_abil
; break;
2807 case PM_DWARF
: rabil
= dwa_abil
; break;
2808 case PM_PLAYER_NIBELUNG
: rabil
= nib_abil
; break;
2809 case PM_STARTSCUMMER
: rabil
= ssc_abil
; break;
2810 case PM_PLAYER_SLIME
: rabil
= slm_abil
; break;
2812 case PM_PLAYER_MYRKALFR
:
2813 case PM_ELF
: rabil
= elf_abil
; break;
2814 case PM_INCANTIFIER
: rabil
= inc_abil
; break;
2815 case PM_PLAYER_GREMLIN
: rabil
= gre_abil
; break;
2816 case PM_CLOCKWORK_AUTOMATON
: rabil
= clk_abil
; break;
2817 case PM_KOBOLT
: rabil
= kob_abil
; break;
2818 case PM_SWIKNI
: rabil
= swi_abil
; break;
2819 case PM_TAYIIN
: rabil
= tay_abil
; break;
2820 case PM_BRETON
: rabil
= bre_abil
; break;
2821 case PM_ELEMENTAL
: rabil
= elm_abil
; break;
2822 case PM_REDGUARD
: rabil
= red_abil
; break;
2823 case PM_DUTHOL
: rabil
= dut_abil
; break;
2824 case PM_IRAHA
: rabil
= ira_abil
; break;
2825 case PM_YOKUDA
: rabil
= yok_abil
; break;
2826 case PM_SINNER
: rabil
= sin_abil
; break;
2827 case PM_REDDITOR
: rabil
= rdt_abil
; break;
2828 case PM_TROLLOR
: rabil
= tro_abil
; break;
2829 case PM_SNAKEMAN
: rabil
= sna_abil
; break;
2830 case PM_ILLITHID
: rabil
= ill_abil
; break;
2831 case PM_KLACKON
: rabil
= kla_abil
; break;
2832 case PM_TONBERRY
: rabil
= ton_abil
; break;
2833 case PM_KUTAR
: rabil
= kut_abil
; break;
2834 case PM_NAVI
: rabil
= nav_abil
; break;
2835 case PM_HUMANOID_LEPRECHAUN
: rabil
= lep_abil
; break;
2836 case PM_MAZIN
: rabil
= maz_abil
; break;
2837 case PM_URGOTH
: rabil
= urg_abil
; break;
2838 case PM_VEELA
: rabil
= vee_abil
; break;
2839 case PM_SENSER
: rabil
= sen_abil
; break;
2840 case PM_PLAYER_UNICORN
: rabil
= uni_abil
; break;
2841 case PM_RETICULAN
: rabil
= ret_abil
; break;
2842 case PM_OUTSIDER
: rabil
= out_abil
; break;
2843 case PM_SPIDERMAN
: rabil
= spi_abil
; break;
2844 case PM_WEAPON_CUBE
: rabil
= gel_abil
; break;
2845 case PM_INSECTOID
: rabil
= ins_abil
; break;
2846 case PM_UNGENOMOLD
: rabil
= ung_abil
; break;
2847 case PM_GASTLY
: rabil
= gas_abil
; break;
2848 case PM_PHANTOM_GHOST
: rabil
= gas_abil
; break;
2849 case PM_MUMMY
: rabil
= mum_abil
; break;
2850 case PM_HAND
: rabil
= han_abil
; break;
2851 case PM_THRALL
: rabil
= thr_abil
; break;
2852 case PM_WEAPONIZED_DINOSAUR
: rabil
= din_abil
; break;
2853 case PM_PLAYER_SKELETON
: rabil
= ske_abil
; break;
2854 case PM_HUMAN_WRAITH
: rabil
= wra_abil
; break;
2855 case PM_LICH_WARRIOR
: rabil
= lic_abil
; break;
2856 case PM_SPIRIT
: rabil
= esp_abil
; break;
2857 case PM_ETHEREALOID
: rabil
= eth_abil
; break;
2858 case PM_INCORPOREALOID
: rabil
= ico_abil
; break;
2859 case PM_SHOE
: rabil
= sho_abil
; break;
2860 case PM_PLAYER_GOLEM
: rabil
= glm_abil
; break;
2861 case PM_SATRE
: rabil
= sat_abil
; break;
2862 case PM_BORG
: rabil
= bor_abil
; break;
2863 case PM_RODNEYAN
: rabil
= rod_abil
; break;
2864 case PM_JELLY
: rabil
= jel_abil
; break;
2865 case PM_WEAPON_IMP
: rabil
= wim_abil
; break;
2866 case PM_TRAINER
: rabil
= trn_abil
; break;
2867 case PM_NEMESIS
: rabil
= nem_abil
; break;
2868 case PM_CUPID
: rabil
= cup_abil
; break;
2869 case PM_ZAUR
: rabil
= zau_abil
; break;
2870 case PM_WYLVAN
: rabil
= wyl_abil
; break;
2871 case PM_BACTERIA
: rabil
= bac_abil
; break;
2872 case PM_PLAYER_SHEEP
: rabil
= she_abil
; break;
2873 case PM_PLAYER_CERBERUS
: rabil
= cer_abil
; break;
2874 case PM_PLAYER_HOUND
: rabil
= hou_abil
; break;
2875 case PM_WOOKIE
: rabil
= woo_abil
; break;
2876 case PM_WISP
: rabil
= wis_abil
; break;
2877 case PM_EXPERT
: rabil
= exp_abil
; break;
2878 case PM_STABILISATOR
: rabil
= stb_abil
; break;
2879 case PM_GIGANT
: rabil
= gig_abil
; break;
2880 case PM_NYMPH
: rabil
= nym_abil
; break;
2881 case PM_METAL
: rabil
= met_abil
; break;
2882 case PM_PLAYER_HULK
: rabil
= umb_abil
; break;
2883 case PM_PLAYER_MECHANIC
: rabil
= qua_abil
; break;
2884 case PM_PLAYER_DOLGSMAN
: rabil
= dlg_abil
; break;
2885 case PM_ROHIRRIM
: rabil
= roh_abil
; break;
2886 case PM_THUNDERLORD
: rabil
= thu_abil
; break;
2887 case PM_GNOME
: rabil
= gno_abil
; break;
2888 case PM_BATMAN
: rabil
= bat_abil
; break;
2889 case PM_HERBALIST
: rabil
= hrb_abil
; break;
2890 case PM_DEVELOPER
: rabil
= dvp_abil
; break;
2891 case PM_LIZARDMAN
: rabil
= liz_abil
; break;
2892 case PM_WEAPON_BUG
: rabil
= grd_abil
; break;
2893 case PM_HOBBIT
: rabil
= hob_abil
; break;
2894 case PM_SAMEDI
: rabil
= sdi_abil
; break;
2895 case PM_ORC
: rabil
= orc_abil
; break;
2896 case PM_HUMAN_WEREWOLF
: rabil
= lyc_abil
; break;
2897 case PM_FENEK
: rabil
= fen_abil
; break;
2898 case PM_AUREAL
: rabil
= aur_abil
; break;
2899 case PM_INKA
: rabil
= ink_abil
; break;
2900 case PM_MAZKE
: rabil
= sed_abil
; break;
2901 case PM_ARMED_COCKATRICE
: rabil
= coc_abil
; break;
2902 case PM_NORD
: rabil
= nor_abil
; break;
2903 case PM_SEA_ELF
: rabil
= sea_abil
; break;
2904 case PM_SLYER_ALIEN
: rabil
= sly_abil
; break;
2905 case PM_DEEP_ELF
: rabil
= dee_abil
; break;
2906 case PM_SYLPH
: rabil
= syl_abil
; break;
2907 case PM_BULDOZGAR
: rabil
= bga_abil
; break;
2908 case PM_SPRIGGAN
: rabil
= spr_abil
; break;
2909 case PM_PLAYER_FAIRY
: rabil
= fay_abil
; break;
2910 case PM_ALCHEMIST
: rabil
= alc_abil
; break;
2911 case PM_PLAYER_ANDROID
: rabil
= and_abil
; break;
2912 case PM_GOAULD
: rabil
= goa_abil
; break;
2913 case PM_ALBAE
: rabil
= alb_abil
; break;
2914 case PM_VORTEX
: rabil
= vor_abil
; break;
2915 case PM_LOWER_ENT
: rabil
= ent_abil
; break;
2916 case PM_CORTEX
: rabil
= cor_abil
; break;
2917 case PM_LEVITATOR
: rabil
= lev_abil
; break;
2918 case PM_HUMANOID_ANGEL
: rabil
= ang_abil
; break;
2919 case PM_HUMANOID_DEVIL
: rabil
= dev_abil
; break;
2920 case PM_GAVIL
: rabil
= gav_abil
; break;
2921 case PM_ANCIPITAL
: rabil
= anc_abil
; break;
2922 case PM_TURTLE
: rabil
= tur_abil
; break;
2923 case PM_FRENDIAN
: rabil
= fre_abil
; break;
2924 case PM_COLORATOR
: rabil
= col_abil
; break;
2925 case PM_URIAN
: rabil
= uri_abil
; break;
2926 case PM_INDRAENIAN
: rabil
= ind_abil
; break;
2929 default: rabil
= 0; break;
2932 while (abil
|| rabil
) {
2934 /* Have we finished with the intrinsics list? */
2935 if (!abil
|| !abil
->ability
) {
2936 /* Try the race intrinsics */
2937 if (!rabil
|| !rabil
->ability
) break;
2942 prevabil
= *(abil
->ability
);
2943 if(oldlevel
< abil
->ulevel
&& newlevel
>= abil
->ulevel
) {
2944 /* Abilities gained at level 1 can never be lost
2945 * via level loss, only via means that remove _any_
2946 * sort of ability. A "gain" of such an ability from
2947 * an outside source is devoid of meaning, so we set
2948 * FROMOUTSIDE to avoid such gains.
2951 boolean willget
= TRUE
;
2953 if (Race_if(PM_YUGGER
) || have_haveitallstone() ) { /* doesn't get positive ones --Amy */
2955 if (abil
->goodone
) willget
= FALSE
;
2959 if (abil
->ulevel
== 1)
2960 *(abil
->ability
) |= (mask
|FROMOUTSIDE
);
2962 *(abil
->ability
) |= mask
;
2963 if(!(*(abil
->ability
) & INTRINSIC
& ~mask
)) {
2964 if(*(abil
->gainstr
))
2965 You_feel("%s!", abil
->gainstr
);
2968 } else if (oldlevel
>= abil
->ulevel
&& newlevel
< abil
->ulevel
) {
2969 *(abil
->ability
) &= ~mask
;
2970 if(!(*(abil
->ability
) & INTRINSIC
)) {
2971 if(*(abil
->losestr
))
2972 You_feel("%s!", abil
->losestr
);
2973 else if(*(abil
->gainstr
))
2974 You_feel("less %s!", abil
->gainstr
);
2977 if (prevabil
!= *(abil
->ability
)) /* it changed */
2978 postadjabil(abil
->ability
);
2983 if (newlevel
> oldlevel
)
2984 add_weapon_skill(newlevel
- oldlevel
);
2986 lose_weapon_skill(oldlevel
- newlevel
);
2988 /* give more skill slots --Amy */
2989 if (newlevel
> oldlevel
)
2990 add_weapon_skill(newlevel
- oldlevel
);
2992 lose_weapon_skill(oldlevel
- newlevel
);
2995 /* ALI -- update Warn_of_mon */
2996 HWarn_of_mon
= (Undead_warning
);
2998 flags
.warntype
|= M2_UNDEAD
;
3000 flags
.warntype
&= ~M2_UNDEAD
;
3002 /* WAC -- adjust techniques */
3003 adjtech(oldlevel
, newlevel
);
3007 /* STEPHEN WHITE'S NEW CODE */
3014 /* Initialize hit points */
3015 hp
= urole
.hpadv
.infix
+ urace
.hpadv
.infix
;
3016 if (urole
.hpadv
.inrnd
> 0) hp
+= rnd(urole
.hpadv
.inrnd
);
3017 if (urace
.hpadv
.inrnd
> 0) hp
+= rnd(urace
.hpadv
.inrnd
);
3019 if (Role_if(PM_DQ_SLIME
) && Race_if(PM_PLAYER_SLIME
)) hp
+= 20;
3021 /* Initialize alignment stuff */
3022 u
.ualign
.type
= aligns
[flags
.initalign
].value
;
3023 u
.ualign
.record
= urole
.initrecord
;
3024 u
.alignlim
= 10 - u
.ualign
.sins
;
3026 if (u
.ualign
.record
> u
.alignlim
) u
.ualign
.record
= u
.alignlim
;
3029 if (u
.ulevel
< urole
.xlev
) {
3030 hp
= urole
.hpadv
.lofix
+ urace
.hpadv
.lofix
;
3031 if (urole
.hpadv
.lornd
> 0) hp
+= rnd(urole
.hpadv
.lornd
);
3032 if (urace
.hpadv
.lornd
> 0) hp
+= rnd(urace
.hpadv
.lornd
);
3034 hp
= urole
.hpadv
.hifix
+ urace
.hpadv
.hifix
;
3035 if (urole
.hpadv
.hirnd
> 0) hp
+= rnd(urole
.hpadv
.hirnd
);
3036 if (urace
.hpadv
.hirnd
> 0) hp
+= rnd(urace
.hpadv
.hirnd
);
3040 if (ACURR(A_CON
) <= 1) conplus
= -4;
3041 else if (ACURR(A_CON
) <= 2) conplus
= -3;
3042 else if (ACURR(A_CON
) <= 3) conplus
= -2;
3043 else if (ACURR(A_CON
) <= 6) conplus
= -1;
3044 else if (ACURR(A_CON
) <= 9) conplus
= 0;
3045 else if (ACURR(A_CON
) <= 12) conplus
= 1;
3046 else if (ACURR(A_CON
) <= 14) conplus
= 2;
3047 else if (ACURR(A_CON
) <= 16) conplus
= 3;
3048 else if (ACURR(A_CON
) == 17) conplus
= 4;
3049 else if (ACURR(A_CON
) <= 19) conplus
= 5;
3050 else if (ACURR(A_CON
) <= 21) conplus
= 6;
3051 else if (ACURR(A_CON
) <= 24) conplus
= 7;
3056 if (uleft
&& uleft
->oartifact
== ART_HITPOINT_BOOSTER
) hp
+= 2;
3057 if (uright
&& uright
->oartifact
== ART_HITPOINT_BOOSTER
) hp
+= 2;
3059 return((hp
<= 0) ? 1 : hp
);
3065 /* STEPHEN WHITE'S NEW CODE */
3066 /* quite some changes by Amy to make sure you can't easily boost strength to very high values */
3071 register int tmp
= (u
.abon
.a
[x
] + u
.atemp
.a
[x
] + u
.acurr
.a
[x
]);
3073 int maxvalue
= (x
== A_STR
) ? 125 : 25;
3078 /* WAC twiddle so that wearing rings and gauntlets have
3080 /* robe of weakness and gauntlets of power will cancel */
3081 /*int base = u.acurr.a[x];
3082 int bonus = tmp - base;*/
3083 /*boolean nobonus = (uarmg && uarmg->otyp == GAUNTLETS_OF_POWER
3084 && uarm && uarm->otyp == ROBE_OF_WEAKNESS);*/
3086 /*if (uarmg && uarmg->otyp == GAUNTLETS_OF_POWER && !nobonus) {
3087 if ((uarmg->spe > 7)
3088 || ((118 + bonus + uarmg->spe) > 125)
3089 || ((tmp + uarmg->spe) > 125))
3091 else if (base > 118) return (base + uarmg->spe + bonus);
3092 else return(118 + uarmg->spe + bonus);
3093 } else if (uarm && uarm->otyp == ROBE_OF_WEAKNESS && !nobonus)
3097 if (Race_if(PM_HUMAN_MONKEY
) && tmp
< 4) tmp
= 4;
3099 if (Upolyd
&& youmonst
.data
&& strongmonst(youmonst
.data
) ) tmp
+= 3;
3101 if (Race_if(PM_WEAPONIZED_DINOSAUR
)) tmp
+= 5;
3103 if (uarm
&& uarm
->oartifact
== ART_CATHAN_S_NETWORK
) tmp
+= (3 + uarm
->spe
);
3104 if (uarmc
&& uarmc
->oartifact
== ART_HOSTES_AD_PULVEREM_FERIRE
) tmp
+= (5 + uarmc
->spe
);
3105 if (uarmg
&& uarmg
->oartifact
== ART_GAUNTLETS_OF_SLAYING
) tmp
+= (3 + uarmg
->spe
);
3106 if (uarmf
&& uarmf
->oartifact
== ART_ANASTASIA_S_GENTLENESS
) tmp
-= 10;
3107 if (uarmf
&& uarmf
->oartifact
== ART_LILAC_BEAUTY
) tmp
-= 5;
3108 if (uarmf
&& uarmf
->oartifact
== ART_STEFANJE_S_PROBLEM
) tmp
+= 2;
3109 if (uwep
&& uwep
->oartifact
== ART_GAIA_HAMMER
) tmp
+= 6;
3110 if (uwep
&& uwep
->oartifact
== ART_SEA_ANGERANCHOR
) tmp
+= 7;
3111 if (uwep
&& uwep
->oartifact
== ART_FUNE_NO_IKARI
) tmp
+= 7;
3112 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMALE_BEAUTY
) tmp
-= 5;
3113 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMINIST_GIRL_S_PURPLE_WEA
) tmp
-= 5;
3114 if (uarmh
&& uarmh
->oartifact
== ART_DUNCE_POUNCE
) tmp
+= 5;
3115 if (uarmh
&& uarmh
->oartifact
== ART_MASSIVE_IRON_CROWN_OF_MORG
) tmp
+= 5;
3116 if (uleft
&& uleft
->oartifact
== ART_UNBELIEVABLY_STRONG_PUNCH
) tmp
+= uleft
->spe
;
3117 if (uright
&& uright
->oartifact
== ART_UNBELIEVABLY_STRONG_PUNCH
) tmp
+= uright
->spe
;
3118 if (uleft
&& uleft
->oartifact
== ART_CATHAN_S_SIGIL
) tmp
+= (3 + uleft
->spe
);
3119 if (uright
&& uright
->oartifact
== ART_CATHAN_S_SIGIL
) tmp
+= (3 + uright
->spe
);
3120 if (uarmf
&& uarmf
->oartifact
== ART_OUT_OF_TIME
) tmp
+= 5;
3121 if (uarmh
&& itemhasappearance(uarmh
, APP_THINKING_HELMET
)) tmp
+= 1;
3122 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALES
) tmp
+= 1;
3123 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALE_MAIL
) tmp
+= 1;
3124 if (uarms
&& uarms
->otyp
== CRYSTALLINE_DRAGON_SCALE_SHIEL
) tmp
+= 1;
3125 if (uamul
&& uamul
->otyp
== AMULET_OF_FLIPPING
) {
3126 if (uamul
->blessed
) tmp
++;
3127 if (!uamul
->cursed
) tmp
++;
3128 if (uamul
->cursed
) tmp
--;
3129 if (uamul
->hvycurse
) tmp
--;
3130 if (uamul
->prmcurse
) tmp
--;
3131 if (uamul
->evilcurse
) tmp
--;
3132 if (uamul
->bbrcurse
) tmp
--;
3133 if (uamul
->morgcurse
) tmp
--;
3135 if (uarmc
&& uarmc
->oartifact
== ART_HIGH_KING_OF_SKIRIM
) tmp
+= 5;
3136 if (uwep
&& uwep
->oartifact
== ART_RAFSCHAR_S_SUPERWEAPON
) tmp
+= 1;
3137 if (uimplant
&& uimplant
->oartifact
== ART_THAI_S_EROTIC_BITCH_FU
) tmp
+= 5;
3138 if (uarmf
&& uarmf
->oartifact
== ART_CRUEL_GODDESS_ANA
) tmp
-= 5;
3139 if (uarmh
&& uarmh
->oartifact
== ART_TEH_PHYSIQUE
) tmp
+= 10;
3140 if (uleft
&& uleft
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3141 if (uright
&& uright
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3142 if (uamul
&& uamul
->oartifact
== ART_DO_NOT_FORGET_GRACE
) tmp
+= 5;
3143 if (uarmf
&& uarmf
->oartifact
== ART_JOHANNA_S_RED_CHARM
) tmp
+= 1;
3144 if (uarmf
&& uarmf
->oartifact
== ART_DORA_S_SCRATCHY_HEELS
) tmp
+= 1;
3145 if (uarm
&& uarm
->oartifact
== ART_UBERGAGE
) tmp
+= 3;
3146 if (uarm
&& uarm
->oartifact
== ART_GARYX
) tmp
+= 1;
3147 if (uleft
&& uleft
->oartifact
== ART_SPEECHBREAK
) tmp
+= 5;
3148 if (uright
&& uright
->oartifact
== ART_SPEECHBREAK
) tmp
+= 5;
3149 if (uleft
&& uleft
->oartifact
== ART_RING_OF_STEEL_DRAGON
) tmp
+= 3;
3150 if (uright
&& uright
->oartifact
== ART_RING_OF_STEEL_DRAGON
) tmp
+= 3;
3151 if (uwep
&& uwep
->oartifact
== ART_STAR_SLAY_GIANTS
) tmp
+= 5;
3152 if (uwep
&& uwep
->oartifact
== ART_SPECIFI_X_
) tmp
+= 5;
3153 if (uarmc
&& uarmc
->oartifact
== ART_JUST_TO_HAVE_IT
) tmp
+= 1;
3154 if (uwep
&& uwep
->oartifact
== ART_ARM_OF_OLYMPIA
) tmp
+= 10;
3155 if (uwep
&& uwep
->oartifact
== ART_KUMIROMI_SCYTHE
) tmp
+= 3;
3156 if (uamul
&& uamul
->oartifact
== ART_ATLAS_WEIGHT_CRUNCH
) tmp
+= 4;
3157 if (uarmg
&& uarmg
->oartifact
== ART_CRUSH_THE_OPPOSITION
) tmp
+= 10;
3158 if (uarmg
&& itemhasappearance(uarmg
, APP_ATLAS_GLOVES
)) tmp
+= 3;
3159 if (uarmf
&& uarmf
->otyp
== COMMANDER_HEELS
) tmp
+= 1;
3160 if (uarmg
&& uarmg
->oartifact
== ART_GLOVES_OF_VESDA
) tmp
+= 3;
3161 if (uwep
&& uwep
->oartifact
== ART_RUINED_ANTJEN
) tmp
+= 3;
3162 if (uwep
&& uwep
->oartifact
== ART_SOULREAPER_SCYTHE
) tmp
+= 8;
3163 if (uwep
&& uwep
->oartifact
== ART_SOULSCOLLECTING
) tmp
+= 8;
3164 if (uamul
&& uamul
->otyp
== AMULET_OF_PHYSICAL_BOOST
) tmp
+= 3;
3165 if (uarmg
&& uarmg
->oartifact
== ART_GET_THE_OLD_VALUES_BACK
) tmp
+= 3;
3166 if (uarmg
&& uarmg
->oartifact
== ART_GAUNTLETS_OF_THE_BERSERKER
) tmp
+= 5;
3167 if (uwep
&& uwep
->oartifact
== ART_YORSHKA_S_SPEAR
) tmp
+= 6;
3168 if (uarms
&& uarms
->oartifact
== ART_GOLDEN_KNIGHT
) tmp
+= 5;
3169 if (uwep
&& uwep
->oartifact
== ART_OLYMPIDE
) tmp
+= 5;
3170 if (uwep
&& uwep
->oartifact
== ART_TITANIC_STRIKE
) tmp
+= 20;
3171 if (uarmu
&& uarmu
->oartifact
== ART_FIRST_THERE_WE_WERE
) tmp
+= 3;
3172 if (u
.boosttimer
) tmp
+= 10;
3173 if (uwep
&& uwep
->oartifact
== ART_ATLUS_HEAVE
) tmp
+= 10;
3174 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_SMASH_TONFA
) tmp
+= 3;
3175 if (uwep
&& uwep
->oartifact
== ART_NEEDLESSLY_MEAN
) tmp
+= 4;
3176 if (uarmc
&& uarmc
->oartifact
== ART_ISHITA_S_OVERWHELMING
) tmp
+= 3;
3177 if (uarm
&& uarm
->oartifact
== ART_CLANGFRIEND
) tmp
+= 3;
3178 if (uwep
&& uwep
->oartifact
== ART_MONS_INFERNALIS_X_
) tmp
+= 10;
3179 if (uwep
&& uwep
->oartifact
== ART_EMERALD_SWORD
) tmp
+= 5;
3180 if (uarmf
&& uarmf
->oartifact
== ART_ANTJE_S_POWERSTRIDE
) tmp
+= 10;
3181 if (uwep
&& uwep
->oartifact
== ART_STAFF_OF_LEIBNIZ
) tmp
+= 1;
3182 if (uarmf
&& uarmf
->oartifact
== ART_DESEAMING_GAME
) tmp
+= 3;
3183 if (FemtrapActiveNora
&& u
.uhs
== WEAK
) tmp
+= 2;
3184 if (FemtrapActiveNora
&& u
.uhs
== FAINTING
) tmp
+= 5;
3185 if (FemtrapActiveNora
&& u
.uhs
== FAINTED
) tmp
+= 10;
3186 if (uarmf
&& uarmf
->oartifact
== ART_JOHANETTA_S_TITLE
) tmp
+= 4;
3187 if (FemtrapActiveNora
&& u
.uhs
== STARVED
) tmp
+= 25;
3188 if (uwep
&& uwep
->oartifact
== ART_ULTRA_ANNOYANCE
) tmp
+= 10;
3189 if (uarmf
&& uarmf
->oartifact
== ART_LORENZI_S_CLEANING_RESIDUE
) tmp
+= 2;
3190 if (u
.combatcommand
) tmp
+= 1;
3191 if (Race_if(PM_URGOTH
)) tmp
+= 5;
3192 if (uwep
&& uwep
->oartifact
== ART_UNATTAINABLE_NINETEEN
) tmp
+= 2;
3193 if (uwep
&& uwep
->oartifact
== ART_GONDOLIN_S_HIDDEN_PASSAGE
) tmp
+= 5;
3194 if (uwep
&& uwep
->oartifact
== ART_GIANTCRUSHER
) tmp
+= 5;
3195 if (uwep
&& uwep
->oartifact
== ART_SWING_FOR_THE_FENCES
) tmp
+= 10;
3196 if (uwep
&& uwep
->oartifact
== ART_INDOBURDENIA_VIRII
) tmp
+= 10;
3197 if (uarmc
&& uarmc
->oartifact
== ART_CORNY_DOOD
&& !flags
.female
) tmp
+= 3;
3198 if (uwep
&& uwep
->oartifact
== ART_HARD_IMPACT
) tmp
+= 5;
3199 if (uwep
&& uwep
->oartifact
== ART_PHYSSTATBOOST
) tmp
+= 5;
3200 if (uarmg
&& uarmg
->oartifact
== ART_STRBONUS
) tmp
+= 5;
3201 if (uarm
&& uarm
->oartifact
== ART_SMILEY_FACE
) tmp
+= 1;
3202 if (have_superjonadabstone()) tmp
+= 10;
3203 if (uimplant
&& uimplant
->oartifact
== ART_DUNGEON_BOSS__WITH_SHARP_S
) tmp
+= (powerfulimplants() ? 10 : 1);
3204 if (uleft
&& uleft
->otyp
== RIN_GAIN_STRENGTH
) tmp
+= uleft
->spe
;
3205 if (uright
&& uright
->otyp
== RIN_GAIN_STRENGTH
) tmp
+= uright
->spe
;
3206 if (uarmg
&& uarmg
->oartifact
== ART_LIKE_GRACE
) tmp
+= 5;
3207 if ((uwep
&& uwep
->oartifact
== ART_BAEFF
) || (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_BAEFF
)) tmp
+= 8;
3208 if (uarmu
&& uarmu
->oartifact
== ART_MENSTRUATION_HURTS
) tmp
+= 6;
3210 if (FemtrapActiveThai
) tmp
-= 2;
3211 if (Race_if(PM_KNOWLEDGABLE
)) tmp
-= 2;
3212 if (uarmg
&& uarmg
->otyp
== GAUNTLETS_OF_POWER
) tmp
+= (uarmg
->spe
+ 3);
3213 if (uarmg
&& uarmg
->otyp
== SUPERPOWER_GAUNTLETS
) tmp
+= uarmg
->spe
;
3214 if (uarm
&& uarm
->otyp
== ROBE_OF_WEAKNESS
) tmp
-= 3;
3215 if (uarmf
&& uarmf
->oartifact
== ART_FAR_EAST_RELATION
) tmp
-= 3;
3216 if (Race_if(PM_LOWER_ENT
) && Burned
) tmp
-= 2;
3217 if (isbadstatter
) tmp
-= 2;
3218 if (uarmu
&& uarmu
->oartifact
== ART_TILLMANN_S_TARGET
) tmp
-= 5;
3219 if (uleft
&& uleft
->oartifact
== ART_FIRST_EXCHANGE
) tmp
-= 5;
3220 if (uright
&& uright
->oartifact
== ART_FIRST_EXCHANGE
) tmp
-= 5;
3221 if (u
.uhs
>= WEAK
) tmp
--;
3223 if (PlayerBleeds
> 50) tmp
--;
3224 if (PlayerBleeds
> 100) tmp
-= 2;
3226 if (FemtrapActiveNora
&& u
.uhunger
> 500) {
3227 int norahunger
= (u
.uhunger
- 500);
3228 if (norahunger
< 200) norahunger
= 0;
3230 if (norahunger
< 0) norahunger
= 0;
3235 if (uarmc
&& uarmc
->oartifact
== ART_ROKKO_CHAN_S_SUIT
&& tmp
> 12) tmp
= 12;
3236 if (uwep
&& uwep
->oartifact
== ART_JAPANESE_WOMEN
&& tmp
> 14) tmp
= 14;
3237 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_JAPANESE_WOMEN
&& tmp
> 14) tmp
= 14;
3238 if (uarmf
&& uarmf
->oartifact
== ART_SKIN_AND_BONE
&& tmp
> 6) tmp
= 6;
3239 if (autismweaponcheck(ART_MR__AHLBLOW_S_SIGNAGE
) && tmp
> 5) tmp
= 5;
3240 if (AllStatsAreLower
) tmp
-= 10;
3241 if (uarmf
&& uarmf
->oartifact
== ART_STAR_SOLES
) tmp
-= 2;
3242 if (FemtrapActiveIna
) tmp
-= 3;
3243 if (u
.uprops
[STATS_LOWERED
].extrinsic
) tmp
-= 10;
3244 if (have_lowstatstone()) tmp
-= 10;
3245 if (uarmc
&& uarmc
->oartifact
== ART_SIECHELALUER
) tmp
-= 10;
3246 if (Race_if(PM_HUMANOID_ANGEL
)) tmp
-= angelshadowstuff();
3247 if (u
.tsloss_str
> 0) tmp
-= u
.tsloss_str
;
3249 if (Race_if(PM_PERVERT
)) { /* debuff when not praying or having sex every once in a while --Amy */
3250 int reductorval
= u
.pervertsex
;
3251 while (reductorval
>= 10000) {
3252 reductorval
-= 10000;
3255 reductorval
= u
.pervertpray
;
3256 while (reductorval
>= 10000) {
3257 reductorval
-= 10000;
3262 } else if (x
== A_CHA
) {
3263 /*if (tmp < 18 && (youmonst.data && youmonst.data->mlet == S_NYMPH ||
3264 u.umonnum == PM_SUCCUBUS || u.umonnum == PM_INCUBUS))
3266 if (youmonst
.data
&& (youmonst
.data
->mlet
== S_NYMPH
|| u
.umonnum
== PM_SUCCUBUS
|| u
.umonnum
== PM_INCUBUS
)) tmp
+= 3;
3267 if (uarmh
&& uarmh
->otyp
== FEDORA
) tmp
+= 1;
3268 if (uarmf
&& uarmf
->otyp
== UGG_BOOTS
) tmp
-= 3;
3269 if (uarmc
&& itemhasappearance(uarmc
, APP_FLEECY_COLORED_CLOAK
)) tmp
+= 5;
3271 if (uarm
&& uarm
->oartifact
== ART_PLAYBOY_WITH_EARS
) tmp
+= (5 + uarm
->spe
);
3272 if (!PlayerInSexyFlats
&& !PlayerInHighHeels
&& uarmf
&& uarmf
->oartifact
== ART_FORMO____
) tmp
+= 2;
3273 if (uarmh
&& uarmh
->oartifact
== ART_PLAYBOY_SUPPLEMENT
) tmp
+= (5 + uarmh
->spe
);
3274 if (uarmf
&& uarmf
->oartifact
== ART_GNOMISH_BOOBS
) tmp
+= 3;
3275 if (uarmf
&& uarmf
->oartifact
== ART_TOO_OLD_MODEL
) tmp
+= 3;
3276 if (uarmf
&& uarmf
->oartifact
== ART_LISSIE_S_SHEAGENTUR
) tmp
+= 3;
3277 if (uarmf
&& uarmf
->oartifact
== ART_EVELINE_S_LOVELIES
) tmp
+= 3;
3278 if (uarmf
&& uarmf
->oartifact
== ART_STEFANJE_S_PROBLEM
) tmp
+= 2;
3279 if (uarmf
&& uarmf
->oartifact
== ART_LITTLE_ICE_BLOCK_WITH_THE_
) tmp
+= 2;
3280 if (uarmf
&& uarmf
->oartifact
== ART_YVONNE_S_MODEL_AMBITION
) tmp
+= 2;
3281 if (uarmf
&& uarmf
->oartifact
== ART_SOFT_KARATE_KICK
) tmp
+= 2;
3282 if (uarm
&& uarm
->oartifact
== ART_ZURA_S_DRESSCODE
) tmp
+= 5;
3283 if (uarmf
&& uarmf
->oartifact
== ART_KOKYO_NO_PAFOMANSUU_OKU
) tmp
+= (5 + uarmf
->spe
);
3284 if (uarmf
&& uarmf
->oartifact
== ART_EVA_S_INCONSPICUOUS_CHARM
) tmp
+= (uarmf
->spe
);
3285 if (uarmf
&& uarmf
->oartifact
== ART_SOLVEJG_S_STINKING_SLIPPER
) tmp
+= 5;
3286 if (uarmf
&& uarmf
->oartifact
== ART_LYDIA_S_SEXYROOM
) tmp
+= 5;
3287 if (uleft
&& uleft
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3288 if (uright
&& uright
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3289 if (uarmf
&& uarmf
->oartifact
== ART_LOVELANE
) tmp
+= 5;
3290 if (uarmf
&& uarmf
->oartifact
== ART_IRIS_S_THUNDER
) tmp
+= 3;
3291 if (uarmh
&& uarmh
->oartifact
== ART_CAP_OF_THENGEL
) tmp
+= 3;
3292 if (uamul
&& uamul
->oartifact
== ART_BEGGER_S_PENDANT
) tmp
+= 4;
3293 if (uarmh
&& uarmh
->oartifact
== ART_DREHTURN
) tmp
+= 5;
3294 if (uarmf
&& uarmf
->otyp
== SHOCK_ISOLATED_HEELS
) tmp
+= 2;
3295 if (uarmf
&& uarmf
->otyp
== COMMANDER_HEELS
) tmp
+= 1;
3296 if (uarmh
&& uarmh
->oartifact
== ART_NAQ_QEH
) tmp
+= 3;
3297 if (uarmf
&& uarmf
->oartifact
== ART_RONIKA_S_NORM
) tmp
+= 1;
3298 if (uarm
&& uarm
->oartifact
== ART_TOWNIE_DUMP
) tmp
+= 5;
3299 if (uwep
&& uwep
->oartifact
== ART_THROW_ALL_THE_CASH_AWAY
) tmp
+= 5;
3300 if (uwep
&& uwep
->oartifact
== ART_SHENA_S_PANTY
) tmp
+= 4;
3301 if (uwep
&& uwep
->oartifact
== ART_SCENTFUL_PANTY
) tmp
+= 4;
3302 if (uamul
&& uamul
->oartifact
== ART_DIEAMEND
) tmp
+= 2;
3303 if (uarmf
&& uarmf
->oartifact
== ART_HELP_PEOPLE_AND_YOURSELF
) tmp
+= 5;
3304 if (uarm
&& uarm
->oartifact
== ART_TRIANGLE_GIRL
&& flags
.female
&& u
.ulevel
< 10) tmp
+= 2;
3305 if (uarmf
&& uarmf
->oartifact
== ART_XTRA_CUTENESS
) tmp
+= 10;
3306 if (uarmf
&& uarmf
->oartifact
== ART_LEATHER_PUMPS_OF_HORROR
) tmp
+= (5 + uarmf
->spe
);
3307 if (uarmf
&& uarmf
->oartifact
== ART_MANDY_S_ROUGH_BEAUTY
) tmp
+= (5 + uarmf
->spe
);
3308 if (uarmf
&& uarmf
->oartifact
== ART_LILAC_BEAUTY
) tmp
+= 10;
3309 if (uarmf
&& uarmf
->oartifact
== ART_WEDDING_CHALLENGE
) tmp
+= 10;
3310 if (uarmf
&& uarmf
->oartifact
== ART_RUEA_S_FAILED_CONVERSION
) tmp
+= 10;
3311 if (uarmf
&& uarmf
->oartifact
== ART_MELISSA_S_BEAUTY
) tmp
+= 10;
3312 if (uarmf
&& uarmf
->oartifact
== ART_MARIYA_S_SEXYCHARM
) tmp
+= 5;
3313 if (uarmf
&& uarmf
->oartifact
== ART_HUGGING__GROPING_AND_STROK
) tmp
+= 10;
3314 if (uarmf
&& uarmf
->oartifact
== ART_BEAUTIFUL_TOPMODEL
) tmp
+= 25;
3315 if (uarmf
&& uarmf
->oartifact
== ART_UNEVEN_STILTS
) tmp
+= 15;
3316 if (uarmu
&& uarmu
->oartifact
== ART_LISE_S_UNDERWEAR
) tmp
+= 6;
3317 if (uarmf
&& uarmf
->oartifact
== ART_RARE_ASIAN_LADY
) tmp
+= 20;
3318 if (uarmf
&& uarmf
->oartifact
== ART_ELENETTES
) tmp
+= 5;
3319 if (uarmf
&& uarmf
->oartifact
== ART_LAUGH_WHEN_YOU_FALL
&& (multi
< 0)) tmp
+= 5;
3320 if (uarmf
&& uarmf
->oartifact
== ART_SEXROOM_FOR_FREE
) tmp
+= 5;
3321 if (uarmf
&& uarmf
->oartifact
== ART_NE_PROSTO_KRASIVO
) tmp
+= 4;
3322 if (uarmf
&& uarmf
->oartifact
== ART_ELEVECULT
) tmp
+= 5;
3323 if (uarmu
&& uarmu
->oartifact
== ART_ARTITFACT
&& flags
.female
) tmp
+= 5;
3324 if (uarmf
&& uarmf
->oartifact
== ART_KRISTIN_S_NOBILITY
) tmp
+= 5;
3325 if (uarmf
&& uarmf
->oartifact
== ART_CRUEL_GODDESS_ANA
) tmp
+= 5;
3326 if (uarmf
&& uarmf
->oartifact
== ART_JUEN_S_WEAKNESS
) tmp
+= 5;
3327 if (uleft
&& uleft
->oartifact
== ART_CRIMINAL_QUEEN
) tmp
+= 5;
3328 if (uright
&& uright
->oartifact
== ART_CRIMINAL_QUEEN
) tmp
+= 5;
3329 if (uleft
&& uleft
->oartifact
== ART_PALMIA_PRIDE
) tmp
+= 5;
3330 if (uright
&& uright
->oartifact
== ART_PALMIA_PRIDE
) tmp
+= 5;
3331 if (uleft
&& uleft
->oartifact
== ART_SCARAB_OF_ADORNMENT
) tmp
+= 10;
3332 if (uright
&& uright
->oartifact
== ART_SCARAB_OF_ADORNMENT
) tmp
+= 10;
3333 if (uamul
&& uamul
->oartifact
== ART_OH_COME_ON
) tmp
+= 5;
3334 if (uamul
&& uamul
->oartifact
== ART_NECKLACE_OF_ADORNMENT
) tmp
+= 10;
3335 if (uwep
&& uwep
->oartifact
== ART_BUNGA_BUNGA
&& uwep
->spe
> 0) tmp
+= (5 + uwep
->spe
);
3336 if (flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMALE_BEAUTY
) tmp
+= 5;
3337 if (flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMINIST_GIRL_S_PURPLE_WEA
) tmp
+= 5;
3338 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMALE_BEAUTY
) tmp
-= 5;
3339 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMINIST_GIRL_S_PURPLE_WEA
) tmp
-= 5;
3340 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALES
) tmp
+= 1;
3341 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALE_MAIL
) tmp
+= 1;
3342 if (uarms
&& uarms
->otyp
== CRYSTALLINE_DRAGON_SCALE_SHIEL
) tmp
+= 1;
3343 if (uamul
&& uamul
->otyp
== AMULET_OF_FLIPPING
) {
3344 if (uamul
->blessed
) tmp
++;
3345 if (!uamul
->cursed
) tmp
++;
3346 if (uamul
->cursed
) tmp
--;
3347 if (uamul
->hvycurse
) tmp
--;
3348 if (uamul
->prmcurse
) tmp
--;
3349 if (uamul
->evilcurse
) tmp
--;
3350 if (uamul
->bbrcurse
) tmp
--;
3351 if (uamul
->morgcurse
) tmp
--;
3353 if (uarmu
&& uarmu
->oartifact
== ART_BIENVENIDO_A_MIAMI
) tmp
+= 3;
3354 if (uarmh
&& uarmh
->oartifact
== ART_MASSIVE_IRON_CROWN_OF_MORG
) tmp
+= 5;
3355 if (uarmc
&& uarmc
->oartifact
== ART_SEXY_STROKING_UNITS
) tmp
+= 5;
3356 if (uarm
&& uarm
->oartifact
== ART_IMPRACTICAL_COMBAT_WEAR
) tmp
+= 5;
3357 if (uarmc
&& itemhasappearance(uarmc
, APP_GENTLE_CLOAK
) ) tmp
+= 1;
3358 if (uarmf
&& itemhasappearance(uarmf
, APP_FETISH_HEELS
)) tmp
+= 5;
3359 if (uarmf
&& itemhasappearance(uarmf
, APP_ICEBLOCK_HEELS
)) tmp
+= 2;
3360 if (uarmh
&& itemhasappearance(uarmh
, APP_THINKING_HELMET
)) tmp
+= 1;
3361 if (uarmh
&& itemhasappearance(uarmh
, APP_COSMETIC_HELMET
)) tmp
+= 1;
3362 if (uarmg
&& itemhasappearance(uarmg
, APP_PRINCESS_GLOVES
)) tmp
+= 2;
3363 if (uarmc
&& uarmc
->oartifact
== ART_MOST_CHARISMATIC_PRESIDENT
) tmp
+= 10;
3364 if (uarmc
&& uarmc
->oartifact
== ART_HIGH_KING_OF_SKIRIM
) tmp
+= 5;
3365 if (uarmc
&& uarmc
->oartifact
== ART_KATHERINE_S_BEACHWEAR
&& flags
.female
) tmp
+= 3;
3366 if (uarmg
&& uarmg
->oartifact
== ART_MARY_INSCRIPTION
) tmp
+= 10;
3367 if (uarmf
&& uarmf
->oartifact
== ART_JULIA_S_REAL_LOVE
) tmp
+= 3;
3368 if (uarmf
&& uarmf
->oartifact
== ART_ELIANE_S_COMBAT_SNEAKERS
) tmp
+= 20;
3369 if (uarmf
&& uarmf
->oartifact
== ART_ALISEH_S_RED_COLOR
) tmp
+= 10;
3370 if (powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_THAI_S_EROTIC_BITCH_FU
) tmp
+= 5;
3371 if (powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_WONDERLOVELINESS
) tmp
+= 5;
3372 if (uimplant
&& uimplant
->oartifact
== ART_WONDERLOVELINESS
) tmp
+= 5;
3373 if (uwep
&& uwep
->oartifact
== ART_CERULEAN_SMASH
) tmp
+= 10;
3374 if (uarmh
&& uarmh
->oartifact
== ART_TEH_PHYSIQUE
) tmp
+= 10;
3375 if (uarmf
&& uarmf
->oartifact
== ART_JOHANNA_S_RED_CHARM
) tmp
+= 5;
3376 if (uarmf
&& uarmf
->oartifact
== ART_DORA_S_SCRATCHY_HEELS
) tmp
+= 3;
3377 if (uarmf
&& uarmf
->oartifact
== ART_KATI_S_IRRESISTIBLE_STILET
) tmp
+= 5;
3378 if (uarmf
&& uarmf
->oartifact
== ART_VERENA_S_DUELING_SANDALS
) tmp
+= 10;
3379 if (uarmf
&& uarmf
->oartifact
== ART_IMPOSSIBLE_CATWALK
) tmp
+= 10;
3380 if (uarmf
&& uarmf
->oartifact
== ART_IN_AWE
) tmp
+= 7;
3381 if (uwep
&& uwep
->oartifact
== ART_MISTY_S_MELEE_PLEASURE
) tmp
+= 5;
3382 if (Race_if(PM_CUPID
)) tmp
+= 5;
3383 if (uarm
&& uarm
->oartifact
== ART_GARYX
) tmp
+= 1;
3384 if (uwep
&& uwep
->oartifact
== ART_HIGH_ORIENTAL_PRAISE
) tmp
+= 3;
3385 if (uarmf
&& itemhasappearance(uarmf
, APP_BEAUTIFUL_HEELS
)) tmp
+= 5;
3386 if (uarmf
&& uarmf
->oartifact
== ART_CAMELIC_SCENT
) tmp
+= 7;
3387 if (uarmf
&& uarmf
->oartifact
== ART_AIRSHIP_DANCING
) tmp
+= 5;
3388 if (uarmf
&& uarmf
->oartifact
== ART_DEEP_SIGH
) tmp
+= 5;
3389 if (uarmf
&& uarmf
->oartifact
== ART_FINAL_CHALLENGE
) tmp
+= 10;
3390 if (uarmf
&& uarmf
->oartifact
== ART_OUU_EECH
) tmp
+= 10;
3391 if (uarmf
&& uarmf
->oartifact
== ART_TOTALLY_THE_SEXY_BITCH
) tmp
+= 5;
3392 if (uarmf
&& uarmf
->oartifact
== ART_ARABELLA_S_GIRL_KICK
) tmp
+= 5;
3393 if (uarmu
&& uarmu
->otyp
== FISHNET
) tmp
+= 2;
3394 if (uarmu
&& uarmu
->oartifact
== ART_CAPITAL_RAP
) tmp
+= 5;
3395 if (uamul
&& uamul
->otyp
== AMULET_OF_TIME
) tmp
+= 5;
3396 if (uarmu
&& uarmu
->oartifact
== ART_SWEET_VICTORIA
) tmp
+= 3;
3397 if (uarmf
&& uarmf
->oartifact
== ART_CLAUDIA_S_SELF_WILL
) tmp
+= 5;
3398 if (uarmg
&& uarmg
->oartifact
== ART_EGASSO_S_GIBBERISH
) tmp
+= 5;
3399 if (uwep
&& uwep
->oartifact
== ART_STAFF_OF_LEIBNIZ
) tmp
+= 1;
3400 if (uarmf
&& uarmf
->oartifact
== ART_SCRATCHE_HUSSY
) tmp
+= 3;
3401 if (uarmf
&& uarmf
->oartifact
== ART_KATHARINA_S_LOVELINESS
) tmp
+= 10;
3402 if (uwep
&& uwep
->oartifact
== ART_DAINTY_SLOAD
) tmp
+= 3;
3403 if (uwep
&& uwep
->oartifact
== ART_HACHURATE
) tmp
+= 5;
3404 if (FemtrapActiveNora
&& u
.uhs
== WEAK
) tmp
+= 2;
3405 if (FemtrapActiveNora
&& u
.uhs
== FAINTING
) tmp
+= 5;
3406 if (FemtrapActiveNora
&& u
.uhs
== FAINTED
) tmp
+= 10;
3407 if (FemtrapActiveNora
&& u
.uhs
== STARVED
) tmp
+= 25;
3408 if (uarmf
&& itemhasappearance(uarmf
, APP_HOMO_SHOES
) && u
.homosexual
== 2) tmp
+= 5;
3409 if (uarmf
&& uarmf
->oartifact
== ART_LORENZI_S_CLEANING_RESIDUE
) tmp
+= 2;
3410 if (u
.combatcommand
) tmp
+= 1;
3411 if (uarm
&& uarm
->oartifact
== ART_SMILEY_FACE
) tmp
+= 3;
3412 if (have_superjonadabstone()) tmp
+= 10;
3413 if (uimplant
&& uimplant
->oartifact
== ART_DUNGEON_BOSS__WITH_SHARP_S
) tmp
+= (powerfulimplants() ? 2 : 1);
3414 if (uarmh
&& uarmh
->otyp
== CORNUTHAUM
&& Role_if(PM_WIZARD
)) tmp
+= 1;
3415 if (uleft
&& uleft
->otyp
== RIN_ADORNMENT
&& !(uleft
->oartifact
== ART_NIX_
) ) tmp
+= uleft
->spe
;
3416 if (uleft
&& uleft
->otyp
== RIN_ADORNMENT
&& (uleft
->oartifact
== ART_DOUBLE_ADORNING
) ) tmp
+= uleft
->spe
;
3417 if (uleft
&& uleft
->otyp
== RIN_UPPER_ADORNMENT
) tmp
+= uleft
->spe
;
3418 if (uright
&& uright
->otyp
== RIN_ADORNMENT
&& !(uright
->oartifact
== ART_NIX_
)) tmp
+= uright
->spe
;
3419 if (uright
&& uright
->otyp
== RIN_ADORNMENT
&& (uright
->oartifact
== ART_DOUBLE_ADORNING
) ) tmp
+= uright
->spe
;
3420 if (uright
&& uright
->otyp
== RIN_UPPER_ADORNMENT
) tmp
+= uright
->spe
;
3421 if (uarmu
&& uarmu
->oartifact
== ART_MENSTRUATION_HURTS
) tmp
+= 6;
3423 if (RngeCoquetry
) tmp
+= 5;
3424 if (FemtrapActiveSolvejg
) tmp
+= 5;
3425 if (FemtrapActiveNatalje
) tmp
+= 10;
3426 if (Race_if(PM_BULDOZGAR
)) tmp
+= 2;
3428 if (PlayerInHighHeels
&& !(PlayerCannotUseSkills
)) {
3430 switch (P_SKILL(P_HIGH_HEELS
)) {
3431 case P_BASIC
: tmp
+= 1; break;
3432 case P_SKILLED
: tmp
+= 2; break;
3433 case P_EXPERT
: tmp
+= 3; break;
3434 case P_MASTER
: tmp
+= 5; break;
3435 case P_GRAND_MASTER
: tmp
+= 7; break;
3436 case P_SUPREME_MASTER
: tmp
+= 10; break;
3442 if (PlayerInSexyFlats
&& !(PlayerCannotUseSkills
)) {
3444 switch (P_SKILL(P_SEXY_FLATS
)) {
3445 case P_BASIC
: tmp
+= 1; break;
3446 case P_SKILLED
: tmp
+= 2; break;
3447 case P_EXPERT
: tmp
+= 3; break;
3448 case P_MASTER
: tmp
+= 4; break;
3449 case P_GRAND_MASTER
: tmp
+= 5; break;
3450 case P_SUPREME_MASTER
: tmp
+= 6; break;
3456 if (PlayerInStilettoHeels
) {
3458 if (!(PlayerCannotUseSkills
)) switch (P_SKILL(P_HIGH_HEELS
)) {
3459 case P_BASIC
: tmp
+= 1; break;
3460 case P_SKILLED
: tmp
+= 2; break;
3461 case P_EXPERT
: tmp
+= 3; break;
3462 case P_MASTER
: tmp
+= 4; break;
3463 case P_GRAND_MASTER
: tmp
+= 5; break;
3464 case P_SUPREME_MASTER
: tmp
+= 6; break;
3470 if (AllStatsAreLower
) tmp
-= 10;
3471 if (uarmf
&& uarmf
->oartifact
== ART_STAR_SOLES
) tmp
-= 2;
3472 if (u
.uprops
[STATS_LOWERED
].extrinsic
) tmp
-= 10;
3473 if (have_lowstatstone()) tmp
-= 10;
3474 if (uarmc
&& uarmc
->oartifact
== ART_SIECHELALUER
) tmp
-= 10;
3475 if (uarmf
&& itemhasappearance(uarmf
, APP_VELCRO_SANDALS
)) tmp
-= 5;
3476 if (uarmf
&& itemhasappearance(uarmf
, APP_BUSINESS_SHOES
)) tmp
-= 5;
3477 if (uarmf
&& itemhasappearance(uarmf
, APP_GARDEN_SLIPPERS
)) tmp
-= 5;
3478 if (uarmf
&& itemhasappearance(uarmf
, APP_UGLY_BOOTS
)) tmp
-= 2;
3479 if (uarmf
&& uarmf
->oartifact
== ART_CARMARK
) tmp
-= 5;
3480 if (uwep
&& uwep
->oartifact
== ART_KILL_KILL_PIANO
) tmp
-= 2;
3481 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_KILL_KILL_PIANO
) tmp
-= 2;
3482 if (uarmf
&& uarmf
->oartifact
== ART_ANTJE_S_POWERSTRIDE
) tmp
-= 5;
3483 if (uarmh
&& itemhasappearance(uarmh
, APP_CORONA_MASK
)) tmp
-= 5;
3484 if (uarmh
&& uarmh
->oartifact
== ART_FFP___MASK
) tmp
-= 5;
3485 if (uarmh
&& uarmh
->oartifact
== ART_HOW_CAN_ONE_PLEASE_LOOK_LI
) tmp
-= 10;
3486 if (uarmf
&& itemhasappearance(uarmf
, APP_BAREFOOT_SHOES
)) tmp
-= 1;
3487 if (uarmf
&& itemhasappearance(uarmf
, APP_SANDALS_WITH_SOCKS
)) tmp
-= 25;
3488 if (uarmh
&& uarmh
->oartifact
== ART_CLELIA_S_TONGUE_BREAKER
) tmp
-= 3;
3489 if (Race_if(PM_HUMANOID_ANGEL
)) tmp
-= angelshadowstuff();
3490 if (u
.tsloss_cha
> 0) tmp
-= u
.tsloss_cha
;
3491 if (FemtrapActiveAntje
&& !PlayerInBlockHeels
) tmp
-= 5;
3492 if (Race_if(PM_LOWER_ENT
) && Burned
) tmp
-= 2;
3493 if (uarms
&& uarms
->oartifact
== ART_AL_UD
) tmp
-= 3;
3494 if (isbadstatter
) tmp
-= 2;
3495 if (uarmh
&& uarmh
->otyp
== CORNUTHAUM
&& !Role_if(PM_WIZARD
)) tmp
-= 1;
3496 if (uleft
&& uleft
->oartifact
== ART_SECOND_EXCHANGE
) tmp
-= 5;
3497 if (uright
&& uright
->oartifact
== ART_SECOND_EXCHANGE
) tmp
-= 5;
3498 if (uarmc
&& uarmc
->oartifact
== ART_MOST_SCRAPPED_PERSON_IN_EX
) tmp
-= 5;
3500 if (FemtrapActiveNora
&& u
.uhunger
> 500) {
3501 int norahunger
= (u
.uhunger
- 500);
3502 if (norahunger
< 200) norahunger
= 0;
3504 if (norahunger
< 0) norahunger
= 0;
3509 /* having a hemorrhage means you don't look so good... --Amy */
3510 if (PlayerBleeds
> 100) tmp
--;
3512 } else if (x
== A_INT
|| x
== A_WIS
) {
3513 /* yes, this may raise int/wis if player is sufficiently
3514 * stupid. there are lower levels of cognition than "dunce".
3517 if (uarmf
&& uarmf
->oartifact
== ART_SOLVEJG_S_STINKING_SLIPPER
) tmp
-= 5; /* reduce both */
3518 if (uarmf
&& uarmf
->oartifact
== ART_LILAC_BEAUTY
) tmp
-= 5;
3519 if (uarmf
&& uarmf
->oartifact
== ART_STEFANJE_S_PROBLEM
) tmp
+= 2;
3520 if (uwep
&& uwep
->oartifact
== ART_KNOW_YOUR_INTRINSICS
) tmp
+= 5; /* boost both */
3521 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMALE_BEAUTY
) tmp
-= 5;
3522 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMINIST_GIRL_S_PURPLE_WEA
) tmp
-= 5;
3523 if (uarmh
&& uarmh
->oartifact
== ART_MASSIVE_IRON_CROWN_OF_MORG
) tmp
+= 5;
3524 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_DIKKIN_S_FAVORITE_SPELL
) tmp
+= 8;
3525 if (uarmh
&& itemhasappearance(uarmh
, APP_THINKING_HELMET
)) tmp
+= 1;
3526 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_RIP_STRATEGY
) tmp
+= 5;
3527 if (powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_THAI_S_EROTIC_BITCH_FU
) tmp
+= 5;
3528 if (uarmh
&& uarmh
->otyp
== HELM_OF_BRILLIANCE
) tmp
+= uarmh
->spe
;
3529 if (uarmf
&& uarmf
->oartifact
== ART_JOHANNA_S_RED_CHARM
) tmp
+= 1;
3530 if (uarm
&& uarm
->oartifact
== ART_GARYX
) tmp
+= 1;
3531 if (uimplant
&& uimplant
->oartifact
== ART_CORTEX_COPROCESSOR
) tmp
+= 2;
3532 if (powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_CORTEX_COPROCESSOR
) tmp
+= 2;
3533 if (uwep
&& uwep
->oartifact
== ART_STAFF_OF_LEIBNIZ
) tmp
+= 1;
3534 if (uleft
&& uleft
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3535 if (uright
&& uright
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3536 if (x
== A_WIS
&& uwep
&& uwep
->oartifact
== ART_SCJWILLX_
) tmp
+= 5;
3537 if (x
== A_WIS
&& uwep
&& uwep
->oartifact
== ART_HOLY_LANCE
) tmp
+= 6;
3538 if (x
== A_WIS
&& uwep
&& uwep
->oartifact
== ART_HOLY_RANCE
) tmp
+= 6;
3539 if (x
== A_WIS
&& uarmh
&& uarmh
->oartifact
== ART_CAP_OF_THENGEL
) tmp
+= 3;
3540 if (x
== A_INT
&& Race_if(PM_MAZIN
)) tmp
+= 2;
3541 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_FRISIA_S_TAIL
) tmp
+= 20;
3542 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_CAT_S_TAIL
) tmp
+= 20;
3543 if (x
== A_WIS
&& Race_if(PM_MAZIN
)) tmp
+= 1;
3544 if (x
== A_WIS
&& uarmh
&& uarmh
->oartifact
== ART_CLELIA_S_TONGUE_BREAKER
) tmp
+= 4;
3545 if (x
== A_WIS
&& uwep
&& uwep
->oartifact
== ART_EMERALD_SWORD
) tmp
+= 5;
3546 if (FemtrapActiveNora
&& u
.uhs
== WEAK
) tmp
+= 2;
3547 if (FemtrapActiveNora
&& u
.uhs
== FAINTING
) tmp
+= 5;
3548 if (FemtrapActiveNora
&& u
.uhs
== FAINTED
) tmp
+= 10;
3549 if (FemtrapActiveNora
&& u
.uhs
== STARVED
) tmp
+= 25;
3550 if (x
== A_WIS
&& uleft
&& uleft
->oartifact
== ART_FALL_WARTING_NUMBER
) tmp
+= 2;
3551 if (x
== A_WIS
&& uright
&& uright
->oartifact
== ART_FALL_WARTING_NUMBER
) tmp
+= 2;
3552 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_SPECIFI_X_
) tmp
+= 10;
3553 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_SHIVERING_STAFF
) tmp
+= 4;
3554 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_STAFF_OF_INSANITY
) tmp
+= 4;
3555 if (uarmf
&& uarmf
->oartifact
== ART_COLLEGE_ROCKZ
) tmp
+= 3;
3556 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_DO_NOT_DISPLAY_THE_CHARGES
) tmp
+= 5;
3557 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_STAR_SLAY_GIANTS
) tmp
+= 5;
3558 if (uarmf
&& uarmf
->oartifact
== ART_LORENZI_S_CLEANING_RESIDUE
) tmp
+= 2;
3559 if (uleft
&& uleft
->oartifact
== ART_SERPENT_RING_OF_SET
) tmp
+= 5;
3560 if (uright
&& uright
->oartifact
== ART_SERPENT_RING_OF_SET
) tmp
+= 5;
3561 if (uarmf
&& uarmf
->otyp
== COMMANDER_HEELS
) tmp
+= 1;
3562 if (u
.combatcommand
) tmp
+= 1;
3563 if (Race_if(PM_WYLVAN
)) tmp
+= 1;
3564 if (x
== A_INT
&& uamul
&& uamul
->oartifact
== ART_KLENSCHGOR
) tmp
+= 5;
3565 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_HYPER_INTELLIGENCE
) tmp
+= 7;
3566 if (x
== A_WIS
&& uarmc
&& uarmc
->oartifact
== ART_EXCITEMENT_OF_HAX
) tmp
+= 4;
3567 if (uarm
&& uarm
->oartifact
== ART_SMILEY_FACE
) tmp
+= 1;
3568 if (x
== A_INT
&& uarms
&& uarms
->oartifact
== ART_YELLOW_STATUS
) tmp
+= 2;
3569 if (have_superjonadabstone()) tmp
+= 10;
3570 if (x
== A_WIS
&& powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_GLEN_HOSPITAL
) tmp
+= 10;
3571 if (x
== A_INT
&& powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_FOOD_FOR_THOUGHT
) tmp
+= 2;
3572 if (uimplant
&& uimplant
->oartifact
== ART_DUNGEON_BOSS__WITH_SHARP_S
) tmp
+= (powerfulimplants() ? 2 : 1);
3573 if (x
== A_INT
&& uleft
&& uleft
->otyp
== RIN_GAIN_INTELLIGENCE
) tmp
+= uleft
->spe
;
3574 if (x
== A_INT
&& uright
&& uright
->otyp
== RIN_GAIN_INTELLIGENCE
) tmp
+= uright
->spe
;
3575 if (x
== A_WIS
&& uleft
&& uleft
->otyp
== RIN_GAIN_WISDOM
) tmp
+= uleft
->spe
;
3576 if (x
== A_WIS
&& uright
&& uright
->otyp
== RIN_GAIN_WISDOM
) tmp
+= uright
->spe
;
3577 if (x
== A_WIS
&& uarmf
&& uarmf
->oartifact
== ART_BRITTA_S_MURDER_STORY
) tmp
+= 5;
3578 if (x
== A_INT
&& uarmf
&& uarmf
->oartifact
== ART_BRITTA_S_MURDER_STORY
) tmp
+= 7;
3579 if (x
== A_INT
&& uleft
&& uleft
->oartifact
== ART_FIRST_EXCHANGE
) tmp
+= 5;
3580 if (x
== A_INT
&& uright
&& uright
->oartifact
== ART_FIRST_EXCHANGE
) tmp
+= 5;
3581 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_GARBAGE_STAFF
) tmp
+= 3;
3582 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_KRISTA_S_CLEAR_MIND
) tmp
+= 15;
3583 if (uarmu
&& uarmu
->oartifact
== ART_MENSTRUATION_HURTS
) tmp
+= 6;
3584 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALES
) tmp
+= 1;
3585 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALE_MAIL
) tmp
+= 1;
3586 if (uarms
&& uarms
->otyp
== CRYSTALLINE_DRAGON_SCALE_SHIEL
) tmp
+= 1;
3587 if (uamul
&& uamul
->otyp
== AMULET_OF_FLIPPING
) {
3588 if (uamul
->blessed
) tmp
++;
3589 if (!uamul
->cursed
) tmp
++;
3590 if (uamul
->cursed
) tmp
--;
3591 if (uamul
->hvycurse
) tmp
--;
3592 if (uamul
->prmcurse
) tmp
--;
3593 if (uamul
->evilcurse
) tmp
--;
3594 if (uamul
->bbrcurse
) tmp
--;
3595 if (uamul
->morgcurse
) tmp
--;
3597 if (x
== A_WIS
&& u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_SACRIFICE_TONFA
) tmp
+= 5;
3598 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_ONCHANGE_STAFF
) tmp
+= 3;
3599 if (uwep
&& uwep
->oartifact
== ART_MAGE_STAFF_OF_ETERNITY
&& uwep
->spe
> 0) tmp
+= uwep
->spe
;
3600 if (uamul
&& uamul
->otyp
== AMULET_OF_MENTAL_BOOST
) tmp
+= 3;
3602 if (x
== A_WIS
&& uarmf
&& uarmf
->otyp
== HEEL_WISE_SHOES
&& !(PlayerCannotUseSkills
)) {
3604 switch (P_SKILL(P_HIGH_HEELS
)) {
3605 case P_BASIC
: tmp
+= 1; break;
3606 case P_SKILLED
: tmp
+= 2; break;
3607 case P_EXPERT
: tmp
+= 3; break;
3608 case P_MASTER
: tmp
+= 4; break;
3609 case P_GRAND_MASTER
: tmp
+= 5; break;
3610 case P_SUPREME_MASTER
: tmp
+= 6; break;
3612 switch (P_SKILL(P_STILETTO_HEELS
)) {
3613 case P_BASIC
: tmp
+= 1; break;
3614 case P_SKILLED
: tmp
+= 2; break;
3615 case P_EXPERT
: tmp
+= 3; break;
3616 case P_MASTER
: tmp
+= 4; break;
3617 case P_GRAND_MASTER
: tmp
+= 5; break;
3618 case P_SUPREME_MASTER
: tmp
+= 6; break;
3624 if (uarmh
&& uarmh
->oartifact
== ART_YOU_DON_T_KNOW_SHIT
) tmp
-= 3;
3625 if (uarmh
&& uarmh
->oartifact
== ART_TEH_PHYSIQUE
) tmp
-= 10;
3626 if (uarmf
&& uarmf
->oartifact
== ART_DORA_S_SCRATCHY_HEELS
) tmp
-= 2;
3627 if (uwep
&& uwep
->oartifact
== ART_MINOPOWER
) tmp
-= 3;
3628 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_MINOPOWER
) tmp
-= 3;
3629 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_SKAZKA_OB_DURAKE
) tmp
-= 3;
3630 if (x
== A_INT
&& u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_SKAZKA_OB_DURAKE
) tmp
-= 3;
3632 if (x
== A_INT
&& uarm
&& uarm
->oartifact
== ART_EITHER_INTELLIGENT_OR_FAIR
&& u
.ualign
.type
!= A_CHAOTIC
) tmp
-= 10;
3634 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_DAEMEL
) tmp
-= 2;
3635 if (x
== A_INT
&& u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_DAEMEL
) tmp
-= 2;
3637 if (x
== A_INT
&& Race_if(PM_HUMAN_MONKEY
) && tmp
> 9) tmp
= 9;
3638 if (uarmh
&& uarmh
->oartifact
== ART_DUNCE_POUNCE
&& tmp
> 6) tmp
= 6;
3639 if (AllStatsAreLower
) tmp
-= 10;
3640 if (uarmf
&& uarmf
->oartifact
== ART_STAR_SOLES
) tmp
-= 2;
3641 if (uarmf
&& uarmf
->oartifact
== ART_KILLCAP
&& x
== A_INT
) tmp
-= 2;
3642 if (u
.uprops
[STATS_LOWERED
].extrinsic
) tmp
-= 10;
3643 if (have_lowstatstone()) tmp
-= 10;
3644 if (uarmc
&& uarmc
->oartifact
== ART_SIECHELALUER
) tmp
-= 10;
3645 if (PlayerBleeds
> 100) tmp
-= 2;
3646 if (Race_if(PM_HUMANOID_ANGEL
)) tmp
-= angelshadowstuff();
3647 if (u
.tsloss_int
> 0 && x
== A_INT
) tmp
-= u
.tsloss_int
;
3648 if (u
.tsloss_wis
> 0 && x
== A_WIS
) tmp
-= u
.tsloss_wis
;
3649 if (Race_if(PM_LOWER_ENT
) && Burned
) tmp
-= 2;
3650 if (isbadstatter
) tmp
-= 2;
3652 if (FemtrapActiveNora
&& u
.uhunger
> 500) {
3653 int norahunger
= (u
.uhunger
- 500);
3654 if (norahunger
< 200) norahunger
= 0;
3656 if (norahunger
< 0) norahunger
= 0;
3661 if (autismweaponcheck(ART_MCCAULEY_S_INTELLIGENCE
) && tmp
> 6 && x
== A_INT
) tmp
= 6;
3662 if (uarmf
&& uarmf
->oartifact
== ART_KILLCAP
&& tmp
> 6) tmp
= 6;
3663 if (uarmh
&& uarmh
->otyp
== DUNCE_CAP
) return(Role_if(PM_JESTER
) ? 9 : 6);
3665 } else if (x
== A_DEX
) {
3667 if (uwep
&& uwep
->oartifact
== ART_SUREFIRE_GUN
) tmp
+= (3 + uwep
->spe
);
3668 if (uarmc
&& uarmc
->oartifact
== ART_HOSTES_AD_PULVEREM_FERIRE
) tmp
+= (5 + uarmc
->spe
);
3669 if (uarmg
&& uarmg
->oartifact
== ART_GAUNTLETS_OF_SLAYING
) tmp
+= (3 + uarmg
->spe
);
3670 if (uarmf
&& uarmf
->oartifact
== ART_EVA_S_INCONSPICUOUS_CHARM
) tmp
+= (uarmf
->spe
);
3671 if (uarmf
&& uarmf
->oartifact
== ART_LILAC_BEAUTY
) tmp
-= 5;
3672 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMALE_BEAUTY
) tmp
-= 5;
3673 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMINIST_GIRL_S_PURPLE_WEA
) tmp
-= 5;
3674 if (uarmh
&& uarmh
->oartifact
== ART_DUNCE_POUNCE
) tmp
+= 3;
3675 if (uarmh
&& uarmh
->oartifact
== ART_MASSIVE_IRON_CROWN_OF_MORG
) tmp
+= 5;
3676 if (uarmf
&& uarmf
->oartifact
== ART_STEFANJE_S_PROBLEM
) tmp
+= 2;
3677 if (uleft
&& uleft
->oartifact
== ART_GUARANTEED_HIT_POWER
) tmp
+= uleft
->spe
;
3678 if (uright
&& uright
->oartifact
== ART_GUARANTEED_HIT_POWER
) tmp
+= uright
->spe
;
3679 if (uarmf
&& uarmf
->oartifact
== ART_OUT_OF_TIME
) tmp
+= 5;
3680 if (uarmf
&& uarmf
->oartifact
== ART_LIGHT_DAL_I_THALION
) tmp
+= 2;
3681 if (uarmh
&& itemhasappearance(uarmh
, APP_THINKING_HELMET
)) tmp
+= 1;
3682 if (uwep
&& uwep
->oartifact
== ART_RAFSCHAR_S_SUPERWEAPON
) tmp
+= 1;
3683 if (powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_THAI_S_EROTIC_BITCH_FU
) tmp
+= 10;
3684 if (uarmh
&& uarmh
->oartifact
== ART_TEH_PHYSIQUE
) tmp
+= 10;
3685 if (uamul
&& uamul
->oartifact
== ART_DO_NOT_FORGET_GRACE
) tmp
+= 10;
3686 if (uarmf
&& uarmf
->oartifact
== ART_JOHANNA_S_RED_CHARM
) tmp
+= 1;
3687 if (uwep
&& uwep
->oartifact
== ART_BOW_OF_VINDERRE
) tmp
+= 4;
3688 if (uwep
&& uwep
->oartifact
== ART_SHAKING_BOW
) tmp
+= 4;
3689 if (uarmc
&& uarmc
->oartifact
== ART_ISHITA_S_OVERWHELMING
) tmp
+= 3;
3690 if (uarmf
&& uarmf
->oartifact
== ART_DORA_S_SCRATCHY_HEELS
) tmp
+= 1;
3691 if (uarmg
&& uarmg
->oartifact
== ART_ELARA_S_AGILITY
) tmp
+= 5;
3692 if (uarmf
&& uarmf
->oartifact
== ART_RONIKA_S_NORM
) tmp
+= 1;
3693 if (uarmh
&& uarmh
->oartifact
== ART_CUMBERSOME_DESC
) tmp
+= 2;
3694 if (uarm
&& uarm
->oartifact
== ART_GARYX
) tmp
+= 1;
3695 if (uarmf
&& uarmf
->oartifact
== ART_AMATEURSPORTS
) tmp
+= 3;
3696 if (uarmc
&& uarmc
->oartifact
== ART_EXCITEMENT_OF_HAX
) tmp
+= 3;
3697 if (uleft
&& uleft
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3698 if (uright
&& uright
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3699 if (u
.boosttimer
) tmp
+= 10;
3700 if (uarm
&& uarm
->oartifact
== ART_AGILITATE
) tmp
+= 7;
3701 if (uwep
&& uwep
->oartifact
== ART_ISSEGADA_KEN
) tmp
+= 3;
3702 if (uamul
&& uamul
->otyp
== AMULET_OF_PHYSICAL_BOOST
) tmp
+= 3;
3703 if (uarm
&& uarm
->oartifact
== ART_GREYSHADE
) tmp
+= 5;
3704 if (uarmf
&& uarmf
->oartifact
== ART_MELTEM_S_FEELING
) tmp
+= 2;
3705 if (uwep
&& uwep
->oartifact
== ART_HEAVY_CROSSBOW_OF_ETERNITY
) tmp
+= 10;
3706 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_SABER_TONFA
) tmp
+= 5;
3707 if (uarmf
&& uarmf
->oartifact
== ART_EVERYWHERE_AT_ONCE
) tmp
+= 3;
3708 if (uarmf
&& uarmf
->oartifact
== ART_IN_AWE
) tmp
+= 5;
3709 if (uarmf
&& uarmf
->otyp
== COMMANDER_HEELS
) tmp
+= 1;
3710 if (uwep
&& uwep
->oartifact
== ART_STAFF_OF_LEIBNIZ
) tmp
+= 1;
3711 if (uwep
&& uwep
->oartifact
== ART_STAR_SLAY_GIANTS
) tmp
+= 5;
3712 if (uwep
&& uwep
->oartifact
== ART_LONGBONE_OF_BANANA
) tmp
+= 3;
3713 if (uwep
&& uwep
->oartifact
== ART_YORSHKA_S_SPEAR
) tmp
+= 6;
3714 if (uarmg
&& uarmg
->oartifact
== ART_GAUNTLETS_OF_THE_BERSERKER
) tmp
+= 5;
3715 if (uwep
&& uwep
->oartifact
== ART_LONGBOW_OF_BANANA
) tmp
+= 3;
3716 if (uarm
&& uarm
->oartifact
== ART_SEE_THE_MULCH_STATE
) tmp
+= 3;
3717 if (uarmc
&& uarmc
->oartifact
== ART_JUST_TO_HAVE_IT
) tmp
+= 1;
3718 if (uleft
&& uleft
->oartifact
== ART_SPEECHBREAK
) tmp
+= 5;
3719 if (uright
&& uright
->oartifact
== ART_SPEECHBREAK
) tmp
+= 5;
3720 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALES
) tmp
+= 1;
3721 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALE_MAIL
) tmp
+= 1;
3722 if (uarms
&& uarms
->otyp
== CRYSTALLINE_DRAGON_SCALE_SHIEL
) tmp
+= 1;
3723 if (uamul
&& uamul
->otyp
== AMULET_OF_FLIPPING
) {
3724 if (uamul
->blessed
) tmp
++;
3725 if (!uamul
->cursed
) tmp
++;
3726 if (uamul
->cursed
) tmp
--;
3727 if (uamul
->hvycurse
) tmp
--;
3728 if (uamul
->prmcurse
) tmp
--;
3729 if (uamul
->evilcurse
) tmp
--;
3730 if (uamul
->bbrcurse
) tmp
--;
3731 if (uamul
->morgcurse
) tmp
--;
3733 if (FemtrapActiveNora
&& u
.uhs
== WEAK
) tmp
+= 2;
3734 if (FemtrapActiveNora
&& u
.uhs
== FAINTING
) tmp
+= 5;
3735 if (FemtrapActiveNora
&& u
.uhs
== FAINTED
) tmp
+= 10;
3736 if (FemtrapActiveNora
&& u
.uhs
== STARVED
) tmp
+= 25;
3737 if (uarmg
&& uarmg
->otyp
== GAUNTLETS_OF_DEXTERITY
) tmp
+= uarmg
->spe
;
3738 if (uarmg
&& uarmg
->otyp
== SUPERPOWER_GAUNTLETS
) tmp
+= uarmg
->spe
;
3739 if (uarms
&& uarms
->oartifact
== ART_YOHUALLI_TEZCATL
) tmp
+= 2;
3740 if (uarmf
&& uarmf
->oartifact
== ART_LORENZI_S_CLEANING_RESIDUE
) tmp
+= 2;
3741 if (uarmg
&& uarmg
->oartifact
== ART_A_LITTLE_SUGAR
) tmp
+= 3;
3742 if (u
.combatcommand
) tmp
+= 1;
3743 if (Race_if(PM_THRALL
)) tmp
+= 3;
3744 if (uwep
&& uwep
->oartifact
== ART_PHYSSTATBOOST
) tmp
+= 5;
3745 if (uarmg
&& uarmg
->oartifact
== ART_DEXBONUS
) tmp
+= 5;
3746 if (uarm
&& uarm
->oartifact
== ART_SMILEY_FACE
) tmp
+= 1;
3747 if (have_superjonadabstone()) tmp
+= 10;
3748 if (uimplant
&& uimplant
->oartifact
== ART_DUNGEON_BOSS__WITH_SHARP_S
) tmp
+= (powerfulimplants() ? 2 : 1);
3749 if (uleft
&& uleft
->otyp
== RIN_GAIN_DEXTERITY
) tmp
+= uleft
->spe
;
3750 if (uright
&& uright
->otyp
== RIN_GAIN_DEXTERITY
) tmp
+= uright
->spe
;
3751 if (uarmg
&& uarmg
->oartifact
== ART_LIKE_GRACE
) tmp
+= 5;
3752 if (uleft
&& uleft
->oartifact
== ART_SECOND_EXCHANGE
) tmp
+= 5;
3753 if (uright
&& uright
->oartifact
== ART_SECOND_EXCHANGE
) tmp
+= 5;
3754 if (uarmu
&& uarmu
->oartifact
== ART_MENSTRUATION_HURTS
) tmp
+= 6;
3756 if (u
.martialstyle
== MARTIALSTYLE_JUDO
&& !uwep
&& (!u
.twoweap
|| !uswapwep
)) {
3758 if (!(PlayerCannotUseSkills
)) {
3759 switch (P_SKILL(P_MARTIAL_ARTS
)) {
3760 case P_BASIC
: tmp
+= 1; break;
3761 case P_SKILLED
: tmp
+= 2; break;
3762 case P_EXPERT
: tmp
+= 3; break;
3763 case P_MASTER
: tmp
+= 4; break;
3764 case P_GRAND_MASTER
: tmp
+= 5; break;
3765 case P_SUPREME_MASTER
: tmp
+= 6; break;
3770 if (!(PlayerCannotUseSkills
)) {
3771 if (PlayerInStilettoHeels
) {
3772 switch (P_SKILL(P_STILETTO_HEELS
)) {
3773 case P_BASIC
: tmp
+= 1; break;
3774 case P_SKILLED
: tmp
+= 2; break;
3775 case P_EXPERT
: tmp
+= 3; break;
3776 case P_MASTER
: tmp
+= 4; break;
3777 case P_GRAND_MASTER
: tmp
+= 5; break;
3778 case P_SUPREME_MASTER
: tmp
+= 6; break;
3781 if (PlayerInConeHeels
) {
3782 switch (P_SKILL(P_CONE_HEELS
)) {
3783 case P_BASIC
: tmp
+= 1; break;
3784 case P_SKILLED
: tmp
+= 2; break;
3785 case P_EXPERT
: tmp
+= 3; break;
3786 case P_MASTER
: tmp
+= 4; break;
3787 case P_GRAND_MASTER
: tmp
+= 5; break;
3788 case P_SUPREME_MASTER
: tmp
+= 6; break;
3791 if (PlayerInBlockHeels
) {
3792 switch (P_SKILL(P_BLOCK_HEELS
)) {
3793 case P_BASIC
: tmp
+= 1; break;
3794 case P_SKILLED
: tmp
+= 2; break;
3795 case P_EXPERT
: tmp
+= 3; break;
3796 case P_MASTER
: tmp
+= 4; break;
3797 case P_GRAND_MASTER
: tmp
+= 5; break;
3798 case P_SUPREME_MASTER
: tmp
+= 6; break;
3801 if (PlayerInWedgeHeels
) {
3802 switch (P_SKILL(P_WEDGE_HEELS
)) {
3803 case P_BASIC
: tmp
+= 1; break;
3804 case P_SKILLED
: tmp
+= 2; break;
3805 case P_EXPERT
: tmp
+= 3; break;
3806 case P_MASTER
: tmp
+= 4; break;
3807 case P_GRAND_MASTER
: tmp
+= 5; break;
3808 case P_SUPREME_MASTER
: tmp
+= 6; break;
3813 if (FemtrapActiveThai
) tmp
-= 2;
3814 if (PlayerBleeds
> 100) tmp
-= 2;
3815 if (uarmc
&& uarmc
->oartifact
== ART_ROKKO_CHAN_S_SUIT
&& tmp
> 12) tmp
= 12;
3816 if (uarmf
&& uarmf
->oartifact
== ART_SKIN_AND_BONE
&& tmp
> 6) tmp
= 6;
3817 if (AllStatsAreLower
) tmp
-= 10;
3818 if (uarmf
&& uarmf
->oartifact
== ART_STAR_SOLES
) tmp
-= 2;
3819 if (u
.uprops
[STATS_LOWERED
].extrinsic
) tmp
-= 10;
3820 if (have_lowstatstone()) tmp
-= 10;
3821 if (uarmc
&& uarmc
->oartifact
== ART_SIECHELALUER
) tmp
-= 10;
3822 if (Race_if(PM_HUMANOID_ANGEL
)) tmp
-= angelshadowstuff();
3823 if (u
.tsloss_dex
> 0) tmp
-= u
.tsloss_dex
;
3824 if (Race_if(PM_LOWER_ENT
) && Burned
) tmp
-= 2;
3825 if (isbadstatter
) tmp
-= 2;
3826 if (HWounded_legs
) tmp
--;
3827 if (EWounded_legs
) tmp
--;
3829 if (FemtrapActiveNora
&& u
.uhunger
> 500) {
3830 int norahunger
= (u
.uhunger
- 500);
3831 if (norahunger
< 200) norahunger
= 0;
3833 if (norahunger
< 0) norahunger
= 0;
3838 } else { /* A_CON */
3840 if (uarmf
&& uarmf
->oartifact
== ART_LILAC_BEAUTY
) tmp
-= 5;
3841 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMALE_BEAUTY
) tmp
-= 5;
3842 if (!flags
.female
&& uarmu
&& uarmu
->oartifact
== ART_FEMINIST_GIRL_S_PURPLE_WEA
) tmp
-= 5;
3843 if (uarmh
&& uarmh
->oartifact
== ART_MASSIVE_IRON_CROWN_OF_MORG
) tmp
+= 5;
3844 if (uarmh
&& itemhasappearance(uarmh
, APP_RUBYNUS_HELMET
)) tmp
+= 2;
3845 if (uarmh
&& itemhasappearance(uarmh
, APP_THINKING_HELMET
)) tmp
+= 1;
3846 if (uarmh
&& uarmh
->oartifact
== ART_ELONA_S_SNAIL_TRAIL
&& Race_if(PM_ELONA_SNAIL
)) tmp
+= 10;
3847 if (uarmf
&& uarmf
->oartifact
== ART_STEFANJE_S_PROBLEM
) tmp
+= 2;
3848 if (x
== A_INT
&& uwep
&& uwep
->oartifact
== ART_RIP_STRATEGY
) tmp
+= 5;
3849 if (uimplant
&& uimplant
->oartifact
== ART_THAI_S_EROTIC_BITCH_FU
) tmp
-= 10;
3850 if (uarmf
&& uarmf
->oartifact
== ART_CRUEL_GODDESS_ANA
) tmp
-= 5;
3851 if (uarmc
&& uarmc
->oartifact
== ART_TOO_MANY_AFFIXES
) tmp
+= 3;
3852 if (uarmh
&& uarmh
->oartifact
== ART_TEH_PHYSIQUE
) tmp
+= 10;
3853 if (uarmf
&& uarmf
->oartifact
== ART_JOHANNA_S_RED_CHARM
) tmp
+= 1;
3854 if (uarm
&& uarm
->oartifact
== ART_GARYX
) tmp
+= 1;
3855 if (uwep
&& uwep
->oartifact
== ART_HIRYU_TO
) tmp
+= 6;
3856 if (uwep
&& uwep
->oartifact
== ART_FLYING_DRAGON_SWORD
) tmp
+= 6;
3857 if (uleft
&& uleft
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3858 if (uright
&& uright
->oartifact
== ART_CROQUE_FORD
) tmp
+= 4;
3859 if (Race_if(PM_BULDOZGAR
)) tmp
+= 2;
3860 if (uwep
&& uwep
->oartifact
== ART_STAFF_OF_LEIBNIZ
) tmp
+= 1;
3861 if (uarmf
&& uarmf
->oartifact
== ART_DESEAMING_GAME
) tmp
+= 3;
3862 if (bmwride(ART_PANZER_TANK
)) tmp
+= 10;
3863 if (uwep
&& uwep
->oartifact
== ART_SEA_ANGERANCHOR
) tmp
+= 7;
3864 if (uwep
&& uwep
->oartifact
== ART_FUNE_NO_IKARI
) tmp
+= 7;
3865 if (FemtrapActiveNora
&& u
.uhs
== WEAK
) tmp
+= 2;
3866 if (FemtrapActiveNora
&& u
.uhs
== FAINTING
) tmp
+= 5;
3867 if (uarmf
&& uarmf
->otyp
== PERMANENCE_BOOTS
) tmp
+= (uarmf
->spe
+ 5);
3868 if (uarmf
&& uarmf
->oartifact
== ART_LEXI_S_POWERKICK
) tmp
+= 5;
3869 if (uarmc
&& uarmc
->oartifact
== ART_SHROUD
) tmp
+= 7;
3870 if (FemtrapActiveNora
&& u
.uhs
== FAINTED
) tmp
+= 10;
3871 if (uwep
&& uwep
->oartifact
== ART_LONG_SWORD_OF_ETERNITY
) tmp
+= 10;
3872 if (FemtrapActiveNora
&& u
.uhs
== STARVED
) tmp
+= 25;
3873 if (uarmf
&& uarmf
->oartifact
== ART_LORENZI_S_CLEANING_RESIDUE
) tmp
+= 2;
3874 if (uarmg
&& uarmg
->oartifact
== ART_GAUNTLETS_OF_THE_BERSERKER
) tmp
+= 10;
3875 if (uwep
&& uwep
->oartifact
== ART_SPECIFI_X_
) tmp
+= 5;
3876 if (uarms
&& uarms
->oartifact
== ART_PLANK_OF_CARNEADES
) tmp
+= 9;
3877 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALES
) tmp
+= 1;
3878 if (uarm
&& uarm
->otyp
== CRYSTALLINE_DRAGON_SCALE_MAIL
) tmp
+= 1;
3879 if (uarms
&& uarms
->otyp
== CRYSTALLINE_DRAGON_SCALE_SHIEL
) tmp
+= 1;
3880 if (uamul
&& uamul
->otyp
== AMULET_OF_FLIPPING
) {
3881 if (uamul
->blessed
) tmp
++;
3882 if (!uamul
->cursed
) tmp
++;
3883 if (uamul
->cursed
) tmp
--;
3884 if (uamul
->hvycurse
) tmp
--;
3885 if (uamul
->prmcurse
) tmp
--;
3886 if (uamul
->evilcurse
) tmp
--;
3887 if (uamul
->bbrcurse
) tmp
--;
3888 if (uamul
->morgcurse
) tmp
--;
3890 if (u
.combatcommand
) tmp
+= 1;
3891 if (uwep
&& uwep
->oartifact
== ART_YORSHKA_S_SPEAR
) tmp
+= 6;
3892 if (uarms
&& uarms
->oartifact
== ART_VITALITY_STORM
) tmp
+= 8;
3893 if (uarms
&& uarms
->oartifact
== ART_FETTIS_SLOT
) tmp
+= 3;
3894 if (uwep
&& uwep
->oartifact
== ART_OGRE_POWER
) tmp
+= 3;
3895 if (uarmf
&& uarmf
->otyp
== COMMANDER_HEELS
) tmp
+= 1;
3896 if (Race_if(PM_URGOTH
)) tmp
+= 3;
3897 if (uwep
&& uwep
->oartifact
== ART_GONDOLIN_S_HIDDEN_PASSAGE
) tmp
+= 5;
3898 if (uarmc
&& uarmc
->oartifact
== ART_CORNY_DOOD
&& !flags
.female
) tmp
+= 3;
3899 if (uwep
&& uwep
->oartifact
== ART_PHYSSTATBOOST
) tmp
+= 5;
3900 if (uarm
&& uarm
->oartifact
== ART_SMILEY_FACE
) tmp
+= 1;
3901 if (have_superjonadabstone()) tmp
+= 10;
3902 if (uimplant
&& uimplant
->oartifact
== ART_DUNGEON_BOSS__WITH_SHARP_S
) tmp
+= (powerfulimplants() ? 2 : 1);
3903 if (uleft
&& uleft
->otyp
== RIN_GAIN_CONSTITUTION
) tmp
+= uleft
->spe
;
3904 if (uright
&& uright
->otyp
== RIN_GAIN_CONSTITUTION
) tmp
+= uright
->spe
;
3905 if (uwep
&& uwep
->oartifact
== ART_GARBAGE_STAFF
) tmp
+= 3;
3906 if (uarmu
&& uarmu
->oartifact
== ART_MENSTRUATION_HURTS
) tmp
+= 6;
3907 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_SACRIFICE_TONFA
) tmp
+= 2;
3908 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_SHIELD_TONFA
) tmp
+= 3;
3910 if (uamul
&& uamul
->oartifact
== ART_MOSH_PIT_SCRAMBLE
) {
3911 if (uarm
&& is_metallic(uarm
)) tmp
++;
3912 if (uarmu
&& is_metallic(uarmu
)) tmp
++;
3913 if (uarmc
&& is_metallic(uarmc
)) tmp
++;
3914 if (uarmh
&& is_metallic(uarmh
)) tmp
++;
3915 if (uarmf
&& is_metallic(uarmf
)) tmp
++;
3916 if (uarms
&& is_metallic(uarms
)) tmp
++;
3917 if (uarmg
&& is_metallic(uarmg
)) tmp
++;
3920 if (uwep
&& uwep
->oartifact
== ART_JAPANESE_WOMEN
&& tmp
> 14) tmp
= 14;
3921 if (u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_JAPANESE_WOMEN
&& tmp
> 14) tmp
= 14;
3923 if (FemtrapActiveJessica
) tmp
-= 5;
3924 if (FemtrapActiveIna
) tmp
-= 3;
3925 if (PlayerBleeds
> 50) tmp
--;
3926 if (PlayerBleeds
> 100) tmp
-= 2;
3928 if (FemtrapActiveNora
&& u
.uhunger
> 500) {
3929 int norahunger
= (u
.uhunger
- 500);
3930 if (norahunger
< 200) norahunger
= 0;
3932 if (norahunger
< 0) norahunger
= 0;
3937 if (AllStatsAreLower
) tmp
-= 10;
3938 if (uarmf
&& uarmf
->oartifact
== ART_STAR_SOLES
) tmp
-= 2;
3939 if (u
.uprops
[STATS_LOWERED
].extrinsic
) tmp
-= 10;
3940 if (have_lowstatstone()) tmp
-= 10;
3941 if (uarmc
&& uarmc
->oartifact
== ART_SIECHELALUER
) tmp
-= 10;
3942 if (Race_if(PM_HUMANOID_ANGEL
)) tmp
-= angelshadowstuff();
3943 if (u
.tsloss_con
> 0) tmp
-= u
.tsloss_con
;
3944 if (Race_if(PM_LOWER_ENT
) && Burned
) tmp
-= 2;
3945 if (isbadstatter
) tmp
-= 2;
3946 if (uarmu
&& uarmu
->oartifact
== ART_TILLMANN_S_TARGET
) tmp
-= 5;
3947 if (uarmf
&& uarmf
->oartifact
== ART_FAR_EAST_RELATION
) tmp
-= 3;
3951 if (Race_if(PM_PERVERT
)) { /* debuff when not praying or having sex every once in a while --Amy */
3952 int reductorval
= u
.pervertsex
;
3953 while (reductorval
>= 10000) {
3954 reductorval
-= 10000;
3957 reductorval
= u
.pervertpray
;
3958 while (reductorval
>= 10000) {
3959 reductorval
-= 10000;
3965 return(x
=((tmp
>= maxvalue
) ? maxvalue
: (tmp
<= 1) ? 1 : tmp
));
3967 return((schar
)((tmp
>= maxvalue
) ? maxvalue
: (tmp
<= 1) ? 1 : tmp
));
3971 /* condense clumsy ACURR(A_STR) value into value that fits into game formulas
3976 register int str
= ACURR(A_STR
);
3978 if (str
<= 18) return str
;
3979 if (str
<= 121) return (19 + str
/ 50); /* map to 19-21 */
3980 else return str
- 100;
3987 increasesincounter(n
)
3990 if (uarmh
&& uarmh
->otyp
== GANGSTER_CAP
&& rn2(2)) return;
3995 /* avoid possible problems with alignment overflow, and provide a centralized
3996 * location for any future alignment limits
4002 if (uarmf
&& uarmf
->oartifact
== ART_MANDY_S_RAIDWEAR
&& !rn2(2) && (n
< 0)) {
4006 if (uwep
&& uwep
->otyp
== HONOR_KATANA
&& n
< 0) attrcurse();
4007 if (u
.twoweap
&& uswapwep
&& uswapwep
->otyp
== HONOR_KATANA
&& n
< 0) attrcurse();
4009 if (Race_if(PM_SINNER
) && n
< 0) {
4011 increasesincounter(1);
4014 if (Race_if(PM_KORONST
) && n
< 0) n
*= 3;
4015 if (Race_if(PM_BABYLONIAN
) && n
> 0 && rn2(2)) n
*= 2;
4017 if (uimplant
&& uimplant
->oartifact
== ART_SINFUL_REPENTER
&& n
> 0) {
4018 if (powerfulimplants()) n
*= 5;
4021 if (powerfulimplants()) u
.alignlim
+= 1;
4024 if (uarmh
&& uarmh
->otyp
== GANGSTER_CAP
&& n
< 0) {
4026 if (n
>= 0) n
= -1; /* don't reduce below -1 --Amy */
4029 if (uarmh
&& uarmh
->oartifact
== ART_B_A_L_L_A_S
&& n
< 0 && u
.ualign
.type
== A_CHAOTIC
) {
4031 if (n
>= 0) n
= -1; /* don't reduce below -1 --Amy */
4034 if (uarmf
&& uarmf
->oartifact
== ART_LOIS_S_CHILL
&& n
< 0) {
4036 if (n
>= 0) n
= -1; /* don't reduce below -1 --Amy */
4039 register int newalign
= u
.ualign
.record
+ n
;
4042 if (newalign
< u
.ualign
.record
)
4043 u
.ualign
.record
= newalign
;
4045 if (newalign
> u
.ualign
.record
) {
4046 u
.ualign
.record
= newalign
;
4047 if(u
.ualign
.record
> u
.alignlim
)
4048 u
.ualign
.record
= u
.alignlim
;
4051 if (Race_if(PM_UNALIGNMENT_THING
) || (uarmh
&& uarmh
->oartifact
== ART_FIVE_HORNED_HELM
)) {
4052 if (n
< 0) pline("You lost %d alignment points; your new value is %d.", abs(n
), u
.ualign
.record
);
4053 if (n
> 0) pline("You gained %d alignment points; your new value is %d.", n
, u
.ualign
.record
);
4056 /* evil patch idea by jonadab: losing alignment points can result in punishment
4057 * immunizer can lose alignment during level changes, which would result in a panic; poison the player instead --Amy */
4058 if (n
< 0 && u
.ualign
.record
< 0 && !rn2(500)) {
4059 if (Race_if(PM_IMMUNIZER
)) poisoned("The alignment", rn2(A_MAX
), "immunized alignment failure", 30);
4063 if (n
< 0 && Race_if(PM_CHIQUAI
) && program_state
.something_worth_saving
) {
4067 if (n
< 0 && Race_if(PM_JAPURA
)) {
4068 losehp(rnd(-n
), "violating the bushido", KILLED_BY
);
4072 pline("Due to all of your conduct violations, the gods declare you dead. Goodbye.");
4073 killer_format
= KILLED_BY
;
4074 killer
= "constantly violating the holy conduct";
4081 if (u
.uhp
> u
.uhpmax
) u
.uhp
= u
.uhpmax
;
4090 /** Returns the hitpoints of your current form. */
4094 return (Upolyd
? u
.mh
: u
.uhp
);
4097 /** Returns the maximal hitpoints of your current form. */
4101 return (Upolyd
? u
.mhmax
: u
.uhpmax
);
4104 /* Will you get an attribute increase for the target attribute? --Amy */
4106 attr_will_go_up(targetattr
, displaymessage
)
4107 int targetattr
; /* the attribute that wants to increase */
4108 boolean displaymessage
;
4110 int theminimum
, themaximum
, rolemaximum
, racemaximum
, actuallimit
, yourbasestat
, finalchance
;
4112 /* mongung race trains mental attributes very slowly --Amy */
4113 if (Race_if(PM_MONGUNG
) && rn2(3) && (targetattr
== A_INT
|| targetattr
== A_WIS
) ) {
4117 /* The actual limit is calculated based on both the role and race limit. */
4118 rolemaximum
= urole
.attrlimt
[targetattr
];
4119 racemaximum
= urace
.attrtrs
[targetattr
];
4121 /* Are they both the same? Great! In that case the calculation is easy. */
4122 if (rolemaximum
== racemaximum
) theminimum
= themaximum
= rolemaximum
;
4124 /* Otherwise, set the bounds */
4125 else if (rolemaximum
> racemaximum
) {
4126 themaximum
= rolemaximum
;
4127 theminimum
= racemaximum
;
4128 } else if (rolemaximum
< racemaximum
) {
4129 themaximum
= racemaximum
;
4130 theminimum
= rolemaximum
;
4134 if (theminimum
> themaximum
) {
4135 impossible("Minimum is greater than maximum (%d, %d)", theminimum
, themaximum
);
4136 themaximum
= theminimum
;
4139 /* now we calculate the actual limit, which may be different every time we're called */
4140 while (themaximum
> theminimum
) {
4142 /* strength has to be special-cased because of the 18/** stuff *groan* --Amy */
4143 if (targetattr
== A_STR
) {
4145 /* in 4 out of 5 cases, the maximum is reduced */
4147 if (themaximum
< STR18(1) || themaximum
> STR18(100)) themaximum
--;
4148 else themaximum
-= 10;
4149 /* otherwise the minimum is increased */
4151 if (theminimum
< 18 || theminimum
> STR18(99)) theminimum
++;
4152 else theminimum
+= 10;
4155 if (rn2(5)) themaximum
--;
4161 /* the values must be equal now; if not, throw an error message and return */
4162 if (theminimum
!= themaximum
) {
4163 impossible("calculation failed (%d, %d)", theminimum
, themaximum
);
4167 /* male dark seducers and golden saints suck */
4168 if ((Race_if(PM_MAZKE
) || Race_if(PM_AUREAL
)) && !flags
.female
) {
4169 if (targetattr
== A_STR
&& themaximum
> 18 && themaximum
< STR19(19)) themaximum
-= 10;
4173 /* now we know our actual limit */
4174 actuallimit
= themaximum
;
4176 /* some adjustments based on gender and alignment */
4177 if (flags
.female
&& (targetattr
== A_INT
|| targetattr
== A_WIS
|| targetattr
== A_CHA
) ) actuallimit
++;
4178 else if (targetattr
== A_STR
|| targetattr
== A_CON
|| targetattr
== A_DEX
) {
4179 if (targetattr
== A_STR
&& actuallimit
>= 18 && actuallimit
< STR18(100)) actuallimit
+= 10;
4182 /* This is not sexist, after all I didn't pull a D&D "women can't have more than 16 strength" or something. --Amy
4183 * Every gender gets the same # of "improved" stats and it's still possible to go beyond the maximum, it's just a
4184 * little more difficult and it's important for gameplay as you shouldn't be able to max out everything easily */
4186 if (u
.ualign
.type
== A_CHAOTIC
&& (targetattr
== A_CON
|| targetattr
== A_DEX
)) actuallimit
++;
4187 else if (u
.ualign
.type
== A_NEUTRAL
&& (targetattr
== A_CHA
|| targetattr
== A_WIS
)) actuallimit
++;
4188 else if (u
.ualign
.type
== A_LAWFUL
&& (targetattr
== A_STR
|| targetattr
== A_INT
)) {
4189 if (targetattr
== A_STR
&& actuallimit
>= 18 && actuallimit
< STR18(100)) actuallimit
+= 10;
4193 if (RngeStatcapIncrease
) actuallimit
+= 5;
4194 if (uarmf
&& uarmf
->oartifact
== ART_EROTIC_STAT_TRAIN
) actuallimit
+= 5;
4195 if (powerfulimplants() && uimplant
&& uimplant
->oartifact
== ART_GLEN_HOSPITAL
&& targetattr
== A_WIS
) actuallimit
+= 10000; /* guaranteed success */
4196 if (uimplant
&& uimplant
->oartifact
== ART_FOOD_FOR_THOUGHT
&& (targetattr
== A_WIS
|| targetattr
== A_INT
)) {
4197 actuallimit
+= (powerfulimplants() ? 5 : 2);
4199 if (uarm
&& uarm
->oartifact
== ART_CERNY_
&& targetattr
== A_CON
) actuallimit
+= 5;
4200 if (uarms
&& uarms
->oartifact
== ART_HIGHER_TRAINING
) actuallimit
+= 2;
4202 if (targetattr
== A_INT
&& uwep
&& uwep
->oartifact
== ART_DAEMEL
) actuallimit
-= 5;
4203 if (targetattr
== A_INT
&& u
.twoweap
&& uswapwep
&& uswapwep
->oartifact
== ART_DAEMEL
) actuallimit
-= 5;
4205 if (StatDecreaseBug
|| u
.uprops
[STAT_DECREASE_BUG
].extrinsic
|| have_statdecreasestone() || autismringcheck(ART_JUBILEX_S_CODE
)) {
4206 if (targetattr
== A_STR
&& actuallimit
>= STR19(25)) actuallimit
= STR18(70);
4207 else if (targetattr
== A_STR
&& actuallimit
>= STR19(24)) actuallimit
= STR18(60);
4208 else if (targetattr
== A_STR
&& actuallimit
>= STR19(23)) actuallimit
= STR18(50);
4209 else if (targetattr
== A_STR
&& actuallimit
>= STR19(22)) actuallimit
= STR18(40);
4210 else if (targetattr
== A_STR
&& actuallimit
>= STR19(21)) actuallimit
= STR18(30);
4211 else if (targetattr
== A_STR
&& actuallimit
>= STR19(20)) actuallimit
= STR18(20);
4212 else if (targetattr
== A_STR
&& actuallimit
>= STR19(19)) actuallimit
= STR18(10);
4213 else if (targetattr
== A_STR
&& actuallimit
>= STR18(100)) actuallimit
= 18;
4214 else if (targetattr
== A_STR
&& actuallimit
>= STR18(90)) actuallimit
= 17;
4215 else if (targetattr
== A_STR
&& actuallimit
>= STR18(80)) actuallimit
= 16;
4216 else if (targetattr
== A_STR
&& actuallimit
>= STR18(70)) actuallimit
= 15;
4217 else if (targetattr
== A_STR
&& actuallimit
>= STR18(60)) actuallimit
= 14;
4218 else if (targetattr
== A_STR
&& actuallimit
>= STR18(50)) actuallimit
= 13;
4219 else if (targetattr
== A_STR
&& actuallimit
>= STR18(40)) actuallimit
= 12;
4220 else if (targetattr
== A_STR
&& actuallimit
>= STR18(30)) actuallimit
= 11;
4221 else if (targetattr
== A_STR
&& actuallimit
>= STR18(20)) actuallimit
= 10;
4222 else if (targetattr
== A_STR
&& actuallimit
>= STR18(10)) actuallimit
= 9;
4223 else if (targetattr
== A_STR
&& actuallimit
>= 18) actuallimit
= 8;
4226 if (actuallimit
< 1) actuallimit
= 1;
4230 /* set up the value to compare it to */
4231 yourbasestat
= ABASE(targetattr
);
4232 /* you're trying to increase the stat, so we add one */
4233 if (targetattr
== A_STR
&& yourbasestat
>= 18 && yourbasestat
< STR18(100)) {
4235 if (yourbasestat
> STR19(19)) yourbasestat
= STR19(19);
4237 else yourbasestat
++;
4239 /* calculate the finalchance value, which is the 1 in X chance that you get the increase */
4242 while (yourbasestat
> actuallimit
) {
4243 if (targetattr
== A_STR
) {
4244 if (actuallimit
< 18 || actuallimit
> STR18(99)) {
4257 /* now that we finally have the actual chance, let's see whether you get lucky! */
4259 if (finalchance
< 1) {
4260 impossible("finalchance is not positive (%d)", finalchance
);
4264 if (finalchance
== 1) return TRUE
;
4265 else if (!rn2(finalchance
)) return TRUE
;
4268 if (displaymessage
) {
4269 switch (targetattr
) {
4272 pline("Your strength develops.");
4275 pline("Your dexterity develops.");
4278 pline("Your charisma develops.");
4281 pline("Your wisdom develops.");
4284 pline("Your intelligence develops.");
4287 pline("Your constitution develops.");
4290 impossible("weird attribute for increase check (%d)", targetattr
);
4301 /* recalculate player's stats --Amy
4302 * This is not the same as feeling like a new man; it redistributes ALL stat points.
4303 * percentage strength points will be converted into single points so you're likely to experience a net loss :P */
4307 int amounttodistribute
= 0;
4308 register int i
, x
, tryct
;
4310 for(i
= 0; i
< A_MAX
; i
++) {
4312 while (ABASE(i
) > 3) {
4313 if (ABASE(i
) <= 18 || ABASE(i
) >= STR19(19)) {
4315 amounttodistribute
++;
4318 if (ABASE(i
) < 18) ABASE(i
) = 18;
4319 amounttodistribute
++;
4323 while (ABASE(i
) > 3) {
4325 amounttodistribute
++;
4331 amounttodistribute
+= 18; /* because of the base 3 points you always have in all attribs */
4332 init_attr(amounttodistribute
, TRUE
);