-+-+-+-+-+-+-+-+ START OF PART 54 -+-+-+-+-+-+-+-+ X else if (uand(%X'80000000',inventory`5B28`5D.flags) <> 0) V then X i4 := 28; X if (i4 > 0) then X with inventory`5Bi4`5D do X begin X objdes(out_val,i4,false); X msg_print('Your ' + out_val + ' glows faintly!'); X if (enchant(toac)) then X begin X flags := uand(%X'7FFFFFFF',flags); X py_bonuses(blank_treasure,0); X end X else X msg_print('The enchantment fails...'); X end; X ident := true; X end; X 4 : begin X identify(inventory`5Bitem_val`5D); X msg_print('This is an identify scroll'); X msg_print(' '); X if (ident_spell) then first := false; X end; X 5 : if (remove_curse) then X begin X msg_print('You feel as if someone is watching over you.' V); X ident := true; X end; `20 X 6 : ident := light_area(char_row,char_col); X 7 : begin X for i3 := 1 to randint(3) do X begin X y := char_row; X x := char_col; X summon_monster(y,x,false); X end; X ident := true; X end; X 8 : begin `20 X teleport(10); X ident := true; X end; X 9 : begin X teleport(100); X ident := true; `20 X end; X 10 : begin X msg_print('That scroll appeared to be blank.'); X ident := true; X end; X 11 : begin X msg_print('Your hands begin to glow.'); X py.flags.confuse_monster := true; X ident := true; X end; X 12 : ident := map_area; X 13 : ident := sleep_monsters2_3(char_row,char_col,1); X 14 : ident := warding_glyph; X 15 : ident := detect_treasure; X 16 : ident := detect_object; X 17 : ident := detect_trap; X 18 : ident := detect_sdoor; X 19 : begin X msg_print('This is a mass genocide scroll.'); X msg_print(' '); X ident := mass_genocide; X end; X 20 : ident := detect_invisible; X 21 : begin X ident := aggravate_monster(20); X msg_print('There is a high pitched humming noise'); X end; X 22 : ident := trap_creation; X 23 : ident := td_destroy; X 24 : ident := door_creation; X 25 : begin X identify(inventory`5Bitem_val`5D); X msg_print('This is a Recharge scroll.'); X msg_print(' '); X if (recharge(60)) then first := false; X end; X 26 : begin X msg_print('This is a genocide scroll.'); X msg_print(' '); X ident := genocide; X end; X 27 : ident := unlight_area(char_row,char_col); X 28 : ident := protect_evil; X 29 : ident := create_food; X 30 : ident := dispell_creature(%X'0008',60); X 31 : begin X msg_print('That scroll appeared to be blank.'); X ident := true; X end; X 32 : with inventory`5B23`5D do X begin X if (tval > 0) then X begin X objdes(out_val,23,false); X msg_print('Your ' + out_val + ' glows brightly!'); X flag := false; X for i3 := 1 to randint(2) do X if (enchant(tohit)) then X flag := true; X for i3 := 1 to randint(2) do X if (enchant(todam)) then X flag := true; X if (flag) then X begin `20 X flags := uand(%X'7FFFFFFF',flags); X py_bonuses(blank_treasure,0); X end X else X msg_print('The enchantment fails...'); X end; X ident := true; X end; X 33 : with inventory`5B23`5D do X begin X if (tval > 0) then X begin X inventory`5Binven_max`5D := inventory`5B23`5D; X objdes(out_val,23,false); X msg_print('Your ' + out_val + X ' glows black, then fades.'); X tohit := -randint(5) - randint(5); X todam := -randint(5) - randint(5); X flags := %X'80000000'; X py_bonuses(inventory`5Binven_max`5D,-1); X ident := true; X end; X end; X 34 : begin X if (uand(%X'80000000',inventory`5B26`5D.flags) <> 0) then X i3 := 26 X else if (uand(%X'80000000',inventory`5B27`5D.flags) <> 0) V then X i3 := 27 X else if (uand(%X'80000000',inventory`5B32`5D.flags) <> 0) V then X i3 := 32 X else if (uand(%X'80000000',inventory`5B24`5D.flags) <> 0) V then X i3 := 24 X else if (uand(%X'80000000',inventory`5B28`5D.flags) <> 0) V then X i3 := 28 X else if (inventory`5B26`5D.tval > 0) then X i3 := 26 X else if (inventory`5B27`5D.tval > 0) then X i3 := 27 X else if (inventory`5B24`5D.tval > 0) then X i3 := 24 X else if (inventory`5B28`5D.tval > 0) then X i3 := 28 X else X i3 := 0; X if (i3 > 0) then X with inventory`5Bi3`5D do X begin X objdes(out_val,i3,false); X msg_print('Your ' + out_val + ' glows brightly!'); X flag := false; X for i3 := 1 to randint(2) + 1 do X if (enchant(toac)) then X flag := true; X if (flag) then X begin X flags := uand(%X'7FFFFFFF',flags); X py_bonuses(blank_treasure,0); X end X else X msg_print('The enchantment fails...'); X end; X ident := true; X end; X 35 : begin X if ((inventory`5B26`5D.tval > 0) and (randint(4) = 1)) the Vn X i3 := 26 X else if ((inventory`5B27`5D.tval > 0) and (randint(3) = 1) V) then X i3 := 27 X else if ((inventory`5B32`5D.tval > 0) and (randint(3) = 1) V) then X i3 := 32 X else if ((inventory`5B24`5D.tval > 0) and (randint(3) = 1) V) then X i3 := 24 X else if ((inventory`5B28`5D.tval > 0) and (randint(3) = 1) V) then X i3 := 28 X else if (inventory`5B26`5D.tval > 0) then X i3 := 26 X else if (inventory`5B27`5D.tval > 0) then X i3 := 27 X else if (inventory`5B32`5D.tval > 0) then X i3 := 32 X else if (inventory`5B24`5D.tval > 0) then X i3 := 24 X else if (inventory`5B28`5D.tval > 0) then X i3 := 28 X else X i3 := 0; X if (i3 > 0) then X with inventory`5Bi3`5D do X begin X inventory`5Binven_max`5D := inventory`5Bi3`5D; X objdes(out_val,i3,false); X msg_print('Your ' + out_val + X ' glows black, then fades.'); X flags := %X'80000000'; X toac := -randint(5) - randint(5); X py_bonuses(inventory`5Binven_max`5D,-1); X ident := true; X end; X end; X 36 : begin X for i3 := 1 to randint(3) do X begin X y := char_row; X x := char_col; X summon_undead(y,x); X end; X ident := true; X end; X 37 : ident := bless(randint(12)+6); X 38 : ident := bless(randint(24)+12); X 39 : ident := bless(randint(48)+24); X 40 : begin X ident := true; X py.flags.word_recall := 25 + randint(30); X msg_print('The air about you becomes charged...'); X end; X 41 : ident := destroy_area(char_row,char_col); X 42 : ; X 43 : ; X 44 : ; X 45 : ; X 46 : ; X 47 : ; X 48 : ; X 49 : ; X 50 : ; X 51 : ; X 52 : ; X 53 : ; X 54 : ; X 55 : ; X 56 : ; X 57 : ; X 58 : ; X 59 : ; X 60 : ; X 61 : ; X 62 : ; X otherwise ; X end; X `7B End of Scrolls... `7D X end; X if (not(reset_flag)) then X begin X if (ident) then X identify(inventory`5Bitem_val`5D); X if (not(first)) then X begin X desc_remain(item_val); X inven_destroy(item_val); X end; X if (flags <> 0) then X with py.misc do X begin X exp := exp + round(level/lev); X prt_experience; X end; X end; X end X else X if (redraw) then draw_cave; X end X else X msg_print('You are not carrying any scrolls.'); X end X else X msg_print('But you are not carrying anything.'); X end; $ CALL UNPACK [.SOURCE.INCLUDE]SCROLLS.INC;1 1968177831 $ create 'f' X`7B Following are spell procedure/functions X These routines are commonly used in the scroll, potion, wands, and X staves routines, and are occassionly called from other areas. X Now included are creature spells also. X`20 X Sleep creatures within radius from player, X combining sleep II and sleep III spells - mwk,opusii 6/28/87`7D X`5Bpsect(misc6$code)`5D function sleep_monsters2_3(y,x,rad : integer) : bool Vean; X VAR X i1,i2,mk1,mk2,mk3,mk4: integer; X BEGIN X sleep_monsters2_3 := false; X mk1:=y-rad; mk2:=y+rad; mk3:=x-rad; mk4:=x+rad; X if (mk1 < 1) then mk1:=1; X if (mk2 > max_height) then mk2:= max_height; X if (mk3 < 1) then mk3:=1; X if (mk4 > max_width) then mk4:=max_width; `7Bstay inbounds`7D X for i1 := mk1 to mk2 do `7Blast statement of procedure`7D X for i2 := mk3 to mk4 do X with cave`5Bi1,i2`5D do `20 X if (cptr > 1) then X with m_list`5Bcptr`5D do X with c_list`5Bmptr`5D do X if (ml) then `7Bvisible`7D X`7Bcan(will) be slept`7D if (uand(%X'1000',cdefense) = 0) then X BEGIN X if ( rad > 5 ) then X prt('',1,1) `7Blet them guess for sleep III`7D X else X msg_print('The ' + name + ' falls asleep.'); X sleep_monsters2_3 := true; X csleep := 500 X END X`7Bcan't (quite) sleep`7D else X`7Bgive small chance`7D if ( randint(20) > 18 ) then X BEGIN X if ( rad > 5 ) then X`7Blet 'em guess for sleep III`7D prt('',1,1) X else X msg_print('The ' + name + ' falls asleep.'); X sleep_monsters2_3 := true; X`7Bbetter than none!`7D csleep := 13 + randint(7) X END X else X if ( rad > 5 ) then X prt('',1,1) X else X msg_print('The ' + name + ' is unaffected.') X END; X`20 X`7B Detect any monsters on the current panel `7D X`5Bpsect(misc6$code)`5D function detect_treasure : boolean; X VAR `20 X i1,i2 : integer; X BEGIN X detect_treasure := false; X for i1 := panel_row_min to panel_row_max do X for i2 := panel_col_min to panel_col_max do X with cave`5Bi1,i2`5D do X if (tptr > 0) then X if (t_list`5Btptr`5D.tval = 100) then X if (not (test_light(i1,i2))) then X BEGIN X lite_spot(i1,i2); X tl := true; X detect_treasure := true X END X END; X`20 X`7B Detect all objects on the current panel `7D +-+-+-+-+-+-+-+- END OF PART 54 +-+-+-+-+-+-+-+-