-+-+-+-+-+-+-+-+ START OF PART 18 -+-+-+-+-+-+-+-+ X`09`09`09 mm`5B2`5D := 1; X`09`09`09 mm`5B3`5D := 7; X`09`09`09 mm`5B4`5D := 8; X`09`09`09 mm`5B5`5D := 2; X`09`09`09 end X`09`09`09 else X`09`09`09 begin X`09`09`09 mm`5B2`5D := 7; X`09`09`09 mm`5B3`5D := 1; X`09`09`09 mm`5B4`5D := 2; X`09`09`09 mm`5B5`5D := 8; X`09`09`09 end X`09`09`09end; X`09 8 :`09begin X`09`09`09 mm`5B1`5D := 3; X`09`09`09 if (ay > ax) then X`09`09`09 begin X`09`09`09 mm`5B2`5D := 2; X`09`09`09 mm`5B3`5D := 6; X`09`09`09 mm`5B4`5D := 1; X`09`09`09 mm`5B5`5D := 9; X`09`09`09 end X`09`09`09 else X`09`09`09 begin X`09`09`09 mm`5B2`5D := 6; X`09`09`09 mm`5B3`5D := 2; X`09`09`09 mm`5B4`5D := 9; X`09`09`09 mm`5B5`5D := 1; X`09`09`09 end X`09`09`09end; X`09 10,14 :`09begin X`09`09`09 mm`5B1`5D := 2; X`09`09`09 if (x < 0) then X`09`09`09 begin X`09`09`09 mm`5B2`5D := 1; X`09`09`09 mm`5B3`5D := 3; X`09`09`09 mm`5B4`5D := 4; X`09`09`09 mm`5B5`5D := 6; X`09`09`09 end X`09`09`09 else X`09`09`09 begin X`09`09`09 mm`5B2`5D := 3; X`09`09`09 mm`5B3`5D := 1; X`09`09`09 mm`5B4`5D := 6; X`09`09`09 mm`5B5`5D := 4; X`09`09`09 end X`09`09`09end; X`09 12 :`09begin X`09`09`09 mm`5B1`5D := 1; X`09`09`09 if (ay > ax) then X`09`09`09 begin X`09`09`09 mm`5B2`5D := 2; X`09`09`09 mm`5B3`5D := 4; X`09`09`09 mm`5B4`5D := 3; X`09`09`09 mm`5B5`5D := 7; X`09`09`09 end X`09`09`09 else X`09`09`09 begin X`09`09`09 mm`5B2`5D := 4; X`09`09`09 mm`5B3`5D := 2; X`09`09`09 mm`5B4`5D := 7; X`09`09`09 mm`5B5`5D := 3; X`09`09`09 end X`09`09`09end X`09 end X end; X X X`09`7B Make an attack on the player (chuckle...)`09`09-RAK-`09`7D X procedure make_attack(monptr : integer); X var X`09`09xpos,atype,adesc,dam`09: integer; X`09`09i1,i2,i3,i4`09`09: integer; X`09`09attstr,attx`09`09: vtype; X`09`09cdesc,mdesc,ddesc`09: vtype; X`09`09damstr`09`09`09: dtype; X`09`09flag`09`09`09: boolean; X`09 begin X`09`7B Cancel 'run' mode if attacking so the poor player`09`09`7D X`09`7B Won't be forced to continue running in corridors`09-RHM-`09`7D X`09 find_flag := false; X`09`7B Cancel 'SEARCH' mode too...`09`09`09`09-RHM-`09`7D X`09 if search_flag then search_off; X`09 with m_list`5Bmonptr`5D do X`09 with c_list`5Bmptr`5D do X`09 begin X`09 attstr := damage; X`09`09if ((uand(%X'10000',cmove) <> 0) and`20 X`09`09 (not(py.flags.see_inv)))then X`09`09 cdesc := 'It ' X`09`09else if (py.flags.blind > 0) then X`09`09 cdesc := 'It ' X`09`09else if (not(ml)) then X`09`09 cdesc := 'It ' X`09`09else X`09`09 cdesc := 'The ' + name + ' '; X`09`09`7B For 'DIED_FROM' string`09`7D X`09`09if (uand(%X'80000000',cmove) <> 0) then X`09`09 ddesc := 'The ' + name X`09`09else X`09`09 ddesc := '& ' + name; X`09`09inventory`5Binven_max`5D.name := ddesc; X`09`09inventory`5Binven_max`5D.number := 1; X`09`09objdes(ddesc,inven_max,true); X`09`09`7B End DIED_FROM`09`09`09`7D X`09 while (length(attstr) > 0) do X`09 begin X`09 xpos := index(attstr,'`7C'); X`09 if (xpos > 0) then X`09`09 begin X`09`09 attx := substr(attstr,1,xpos-1); X`09`09 attstr := substr(attstr,xpos+1,length(attstr)-xpos); X`09`09 end X`09 else X`09`09 begin X`09`09 attx := attstr; X`09`09 attstr := ''; X`09`09 end; X`09 readv(attx,atype,adesc,damstr); X`09`09 flag := false; X`09`09 if (py.flags.protevil > 0) then X`09`09 if (uand(cdefense,%X'0004') <> 0) then X`09`09 if ((py.misc.lev+1) > level) then X`09`09`09 begin X`09`09`09 atype := 99; X`09`09`09 adesc := 99; X`09`09`09 end; X`09`09 with py.misc do X`09 case atype of X`7BNormal attack`09`7D 1 :`09if (test_hit(60,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BPoison Strength`7D 2 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BConfusion attack`7D 3 :`09if (test_hit(10,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BFear attack`09`7D 4 :`09if (test_hit(10,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BFire attack`09`7D 5 :`09if (test_hit(10,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BAcid attack`09`7D 6 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BCold attack`09`7D 7 :`09if (test_hit(10,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BLightning attack`7D 8 :`09if (test_hit(10,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BCorrosion attack`7D 9 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BBlindness attack`7D 10 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BParalysis attack`7D 11 :`09if (test_hit(4,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BSteal Money`09`7D 12 :`09if (test_hit(8,level,0,py.misc.lev)) then X`09`09`09`09 if (py.misc.au > 0) then X`09`09`09`09 flag := true; X`7BSteal Object`09`7D 13 :`09if (test_hit(5,level,0,py.misc.lev)) then X`09`09`09`09 if (inven_ctr > 0) then X`09`09`09`09 flag := true; X`7BPoison`09`09`7D 14 :`09if (test_hit(10,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BLose dexterity`7D 15 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BLose constitution`7D 16 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BLose intelligence`7D 17 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BLose wisdom`7D 18 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BLose experience`7D 19 :`09if (test_hit(3,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BAggravate monsters`7D 20 :`09flag := true; X`7BDisenchant`09 `7D 21 :`09if (test_hit(5,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BEat food`09 `7D 22 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`7BEat light`09 `7D 23 :`09if (test_hit(0,level,0,pac+ptoac)) then X`09`09`09`09 flag := true; X`09`09 99 :`09flag := true; X`09 otherwise ; X`09 end; X`09`09 if (flag) then X`09`09 begin X`09`09 case adesc of X`09`09 1 : msg_print(cdesc + 'hits you.'); X`09`09 2 : msg_print(cdesc + 'bites you.'); X`09`09 3 : msg_print(cdesc + 'claws you.'); X`09`09 4 : msg_print(cdesc + 'stings you.'); X`09`09 5 : msg_print(cdesc + 'touches you.'); X`09`09 6 : msg_print(cdesc + 'kicks you.'); X`09`09 7 : msg_print(cdesc + 'gazes at you.'); X`09`09 8 : msg_print(cdesc + 'breathes on you.'); X`09`09`09 9 : msg_print(cdesc + 'spits on you.'); X`09`09`09 10 : msg_print(cdesc + 'makes a horrible wail.'); X`09`09`09 11 : msg_print(cdesc + 'embraces you.'); X`09`09`09 12 : msg_print(cdesc + 'crawls on you.'); X`09`09`09 13 : msg_print(cdesc + 'releases a cloud of spores.'); X`09`09`09 14 : msg_print(cdesc + 'begs you for money.'); X`09`09`09 15 : msg_print('You''ve been slimed!'); X`09`09`09 16 : msg_print(cdesc + 'crushes you.'); X`09`09`09 17 : msg_print(cdesc + 'tramples you.'); X`09`09`09 18 : msg_print(cdesc + 'drools on you.'); X`09`09`09 99 : msg_print(cdesc + 'is repelled.'); X`09`09 otherwise ; X`09`09 end; X`09`09`09case atype of X`7BNormal attack`09`7D 1 :`09begin X`09`09`09`09 dam := damroll(damstr); X`09`09`09`09 with py.misc do X`09`09`09`09 dam :=dam - round(((pac+ptoac)/100.0)*dam); X`09`09`09`09 take_hit(dam,ddesc); X`09`09`09`09 prt_chp; X`09`09`09`09end; X`7BPoison Strength`7D 2 :`09begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (py.flags.sustain_str) then X`09`09msg_print('You feel weaker for a moment, then it passes.') X`09`09`09`09 else if (randint(2) = 1) then X`09`09`09`09 begin X`09`09`09`09`09msg_print('You feel weaker.'); X`09`09`09`09 py.stat.cstr := de_statp(py.stat.cstr); X`09`09`09`09 prt_strength; X`09`09`09`09 end; X`09`09`09`09 prt_chp; X`09`09`09`09end; X`7BConfusion attack`7D 3 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (randint(2) = 1) then X`09`09`09`09 begin X`09`09`09`09 if (confused < 1) then X`09`09`09`09 begin X`09`09`09`09`09 msg_print('You feel confused.'); X`09`09`09`09 confused:=confused+randint(level); X`09`09`09`09 end; X`09`09`09`09 confused := confused + 3; X`09`09`09`09 end; X`09`09`09`09 prt_chp; X`09`09`09`09 end; X`7BFear attack`09`7D 4 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (player_saves(wis_adj)) then X`09`09`09`09 msg_print('You resist the effects!') X`09`09`09`09 else if (afraid < 1) then X`09`09`09`09 begin X`09`09`09`09`09msg_print('You are suddenly afraid!'); X`09`09`09`09 afraid := afraid + 3 + randint(level); X`09`09`09`09 end X`09`09`09`09 else X`09`09`09`09 afraid := afraid + 3; X`09`09`09`09 prt_chp; X`09`09`09`09 end; X`7BFire attack`09`7D 5 :`09begin X`09`09`09`09 msg_print('You are enveloped in flames!'); X`09`09`09`09 fire_dam(damroll(damstr),ddesc); X`09`09`09`09end; X`7BAcid attack`09`7D 6 :`09begin X`09`09`09`09 msg_print('You are covered in acid!'); X`09`09`09`09 acid_dam(damroll(damstr),ddesc); X`09`09`09`09end; X`7BCold attack`09`7D 7 :`09begin X`09`09`09`09 msg_print('You are covered with frost!'); X`09`09`09`09 cold_dam(damroll(damstr),ddesc); X`09`09`09`09end; X`7BLightning attack`7D 8 :`09begin X`09`09`09`09 msg_print('Lightning strikes you!'); X`09`09`09`09 light_dam(damroll(damstr),ddesc); X`09`09`09`09end; X`7BCorrosion attack`7D 9 :`09begin X`09`09`09msg_print('A stinging red gas swirls about you.'); X`09`09`09`09 corrode_gas(ddesc); X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 prt_chp; X`09`09`09`09end; X`7BBlindness attack`7D 10 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (blind < 1) then X`09`09`09`09 begin X`09`09`09`09 blind := blind + 10 + randint(level); X`09`09`09`09`09msg_print('Your eyes begin to sting.'); X`09`09`09`09`09msg_print(' '); X`09`09`09`09 end; X`09`09`09`09 blind := blind + 5; X`09`09`09`09 prt_chp; X`09`09`09`09 end; X`7BParalysis attack`7D 11 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (player_saves(con_adj)) then X`09`09`09`09 msg_print('You resist the effects!') X`09`09`09`09 else if (paralysis < 1) then X`09`09`09`09 begin X`09`09`09`09 if (free_act) then X`09`09`09`09`09 msg_print('You are unaffected.') X`09`09`09`09 else X`09`09`09`09`09 begin X`09`09`09`09`09 paralysis:=randint(level) + 3; X`09`09`09`09 msg_print('You are paralyzed.'); X`09`09`09`09 end; X`09`09`09`09 end; X`09`09`09`09 prt_chp; X`09`09`09`09 end; X`7BSteal Money`09 `7D 12 :`09with py.misc do X`09`09`09`09 begin X`09`09`09`09 if ((randint(124) < py.stat.cdex) and X`09`09`09`09 (py.flags.paralysis < 1)) then X`09`09msg_print('You quickly protect your money pouch!') X`09`09`09`09 else X`09`09`09`09 begin X`09`09`09`09 i1 := trunc(au/10) + randint(25); X`09`09`09`09 if (i1 > au) then X`09`09`09`09 au := 0 X`09`09`09`09 else X`09`09`09`09 au := au - i1; X`09`09`09`09 msg_print('Your purse feels lighter.'); X`09`09`09`09 prt_gold; X`09`09`09`09 end; X`09`09`09`09 if (randint(2) = 1) then X`09`09`09`09 begin X`09`09`09`09 msg_print('There is a puff of smoke!'); X`09`09`09`09 teleport_away(monptr,max_sight); X`09`09`09`09 end; X`09`09`09`09 end; X`7BSteal Object`09`7D 13 :`09with py.stat do X`09`09`09`09 begin X`09`09`09`09 if ((randint(124) < py.stat.cdex) and X`09`09`09`09 (py.flags.paralysis < 1)) then X`09`09msg_print('You grab hold of your backpack!') X`09`09`09`09 else X`09`09`09`09 begin X`09`09`09`09`09i1 := randint(inven_ctr); X`09`09`09`09`09inven_destroy(i1); X`09`09`09`09msg_print('Your backpack feels lighter.'); X`09`09`09`09 end; X`09`09`09`09 if (randint(2) = 1) then X`09`09`09`09 begin X`09`09`09`09 msg_print('There is a puff of smoke!'); X`09`09`09`09 teleport_away(monptr,max_sight); X`09`09`09`09 end; X`09`09`09`09 end; X`7BPoison`09`09`7D`09 14 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 prt_chp; X`09`09`09`09 msg_print('You feel very sick.'); X`09`09`09`09 poisoned := poisoned+randint(level)+5; X`09`09`09`09 end; X`7BLose dexterity `7D 15 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (sustain_dex) then X`09`09msg_print('You feel clumsy for a moment, then it passes.') X`09`09`09`09 else X`09`09`09`09 begin X`09`09`09`09`09msg_print('You feel more clumsy.'); X`09`09`09`09 py.stat.cdex := de_statp(py.stat.cdex); X`09`09`09`09 prt_dexterity; X`09`09`09`09 end; X`09`09`09`09 prt_chp; X`09`09`09`09 end; X`7BLose constitution `7D 16 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (sustain_con) then X`09`09msg_print('Your body resists the effects of the disease.') X`09`09`09`09 else X`09`09`09`09 begin X`09`09`09`09`09msg_print('Your health is damaged!'); X`09`09`09`09 py.stat.ccon := de_statp(py.stat.ccon); X`09`09`09`09 prt_constitution; X`09`09`09`09 end; X`09`09`09`09 prt_chp; X`09`09`09`09 end; X`7BLose intelligence `7D 17 :`09with py.flags do X`09`09`09`09 begin X`09`09`09`09 take_hit(damroll(damstr),ddesc); X`09`09`09`09 if (sustain_int) then X`09`09`09`09 begin X`09`09msg_print('You feel your memories fading...'); X`09`09msg_print('Your memories are suddenly restored!'); X`09`09`09`09 end X`09`09`09`09 else X`09`09`09`09 begin +-+-+-+-+-+-+-+- END OF PART 18 +-+-+-+-+-+-+-+-