-+-+-+-+-+-+-+-+ START OF PART 77 -+-+-+-+-+-+-+-+ X tcptr : `5Bpsect(moria$data)`5D integer; `7B Cur treasure heap ptr `7D X`20 X `7B Following are feature objects defined for dungeon `7D X trap_lista : `5Bpsect(generate$data)`5D array `5B1..max_trapa`5D of trea Vsure_type; X trap_listb : `5Bpsect(generate$data)`5D array `5B1..max_trapb`5D of trea Vsure_type; X blk_mkt_trap : `5Bpsect(generate$data)`5D treasure_type; `7BBlack Market V trap`7D X scare_monster : `5Bpsect(generate$data)`5D treasure_type; `7BSpecial tra Vp`7D X rubble : `5Bpsect(generate$data)`5D treasure_type; X door_list : `5Bpsect(generate$data)`5D array `5B1..3`5D of treasure_type V; X up_stair : `5Bpsect(generate$data)`5D treasure_type; X down_stair : `5Bpsect(generate$data)`5D treasure_type; `20 X`20 X `7B Following are creature arrays and variables `7D X c_list : `5Bpsect(moria$data)`5D array `5B1..400`5D of creature_type; X m_list : `5Bpsect(moria$data)`5D array `5B1..max_malloc`5D of monster_ty Vpe; X m_level : `5Bpsect(generate$data)`5D array `5B0..max_mons_level`5D of in Vteger; X blank_monster : `5Bpsect(generate$data)`5D monster_type; `7B Blank monst Ver values `7D X muptr : `5Bpsect(generate$data)`5D integer; `7B Cur used monster ptr ` V7D X mfptr : `5Bpsect(generate$data)`5D integer; `7B Cur free monster ptr ` V7D X mon_tot_mult : `5Bpsect(moria$data)`5D integer; `7B # of repro's of cre Vature `7D X`20 X `7B Following are arrays for descriptive pieces `7D X colors : `5Bpsect(setup$data)`5D array `5B1..max_colors`5D of atype; X mushrooms : `5Bpsect(setup$data)`5D array `5B1..max_mush`5D of atype; X woods : `5Bpsect(setup$data)`5D array `5B1..max_woods`5D of atype; X metals : `5Bpsect(setup$data)`5D array `5B1..max_metals`5D of atype; X rocks : `5Bpsect(setup$data)`5D array `5B1..max_rocks`5D of atype; X amulets : `5Bpsect(setup$data)`5D array `5B1..max_amulets`5D of atype; X syllables : `5Bpsect(setup$data)`5D array `5B1..max_syllables`5D of dtyp Ve; X vowel_set : `5Bpsect(moria$data)`5D char_set; X`20 X `7B Following are variables for the Save Character Routines `7D X finam : `5Bpsect(save$data)`5D vtype; X data_corrupt: `5Bpsect(save$data)`5D boolean; X key_rec : `5Bpsect(save$data)`5D key_type; X`20 X `7B Cursor variables, used for cursor positioning `7D X cursor_r : `5Bpsect(io$data),global`5D array `5B1..24`5D of varying`5B10 V`5D of char; X curlen_r : `5Bpsect(io$data),global`5D integer; X cursor_c : `5Bpsect(io$data),global`5D array `5B1..80`5D of varying`5B10 V`5D of char; X curlen_c : `5Bpsect(io$data),global`5D integer; X cursor_l : `5Bpsect(io$data),global`5D integer; X row_first : `5Bpsect(io$data),global`5D boolean; X cursor_erl : `5Bpsect(io$data),global`5D varying`5B10`5D of char; X cursor_erp : `5Bpsect(io$data),global`5D varying`5B10`5D of char; X `20 $ CALL UNPACK [.SOURCE.INCLUDE]VARIABLES.INC;1 1716920017 $ create 'f' X `7B Wands for the aiming... `7D X`5Bpsect(misc2$code)`5D procedure aim; X var X i1 : unsigned; X i2,i3,i4,chance : integer; X dir,item_val : integer; X dumy,y_dumy,x_dumy : integer; X out_val : vtype; X redraw,ident : boolean; X begin X redraw := false; X reset_flag := true; X if (inven_ctr > 0) then X begin X if (find_range(`5B65`5D,i2,i3)) then X begin X if (get_item(item_val,'Aim which wand?',redraw,i2,i3)) then X with inventory`5Bitem_val`5D do X begin X if (redraw) then draw_cave; X reset_flag := false; X redraw := false; X y_dumy := char_row; X x_dumy := char_col; X if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X begin X if (py.flags.confused > 0) then X begin X msg_print('You are confused...'); X repeat X dir := randint(9); X until(dir <> 5); X end; X i1 := flags; X ident := false; X with py.misc do X chance := save + lev + int_adj - level; X if (py.flags.confused > 0) then X chance := trunc(chance/2.0); X if (chance < 0) then chance := 0; X if (randint(chance) < use_device) then X msg_print('You failed to use the wand properly.' V) X else if (p1 > 0) then X begin X p1 := p1 - 1; X while (i1 > 0) do X begin X i2 := bit_pos(i1); X i3 := char_row; X i4 := char_col; X `7B Wands `7D X case (i2) of X 1 : begin X msg_print('A line of blue shimmering light appears.'); X light_line(dir,char_row,char_col); X ident := true; X end; X 2 : begin X fire_bolt(1,dir,i3,i4,damroll('3d8'),'Lightning Bolt'); X ident := true; X end; X 3 : begin X fire_bolt(4,dir,i3,i4,damroll('4d8'),'Frost Bolt'); X ident := true; X end; X 4 : begin X fire_bolt(5,dir,i3,i4,damroll('6d8'),'Fire Bolt'); X ident := true; X end; X 5 : ident := wall_to_mud(dir,i3,i4); X 6 : ident := poly_monster(dir,i3,i4); X 7 : ident := hp_monster(dir,i3,i4,-damroll('4d6')); X 8 : ident := speed_monster(dir,i3,i4,1); X 9 : ident := speed_monster(dir,i3,i4,-1); X 10 : ident := confuse_monster(dir,i3,i4); X 11 : ident := sleep_monster(dir,i3,i4); X 12 : ident := drain_life(dir,i3,i4); X 13 : ident := td_destroy2(dir,i3,i4); X 14 : begin X fire_bolt(0,dir,i3,i4,damroll('2d6'),'Magic Missle'); X ident := true; X end; X 15 : ident := build_wall(dir,i3,i4); X 16 : ident := clone_monster(dir,i3,i4); X 17 : ident := teleport_monster(dir,i3,i4); X 18 : ident := disarm_all(dir,i3,i4); X 19 : begin X fire_ball(1,dir,i3,i4,24,'Lightning Ball'); X ident := true; X end; X 20 : begin X fire_ball(4,dir,i3,i4,32,'Cold Ball'); X ident := true; X end; X 21 : begin X fire_ball(5,dir,i3,i4,48,'Fire Ball'); X ident := true; X end; X 22 : begin X fire_ball(2,dir,i3,i4,8,'Stinking Cloud'); X ident := true; X end; X 23 : begin X fire_ball(3,dir,i3,i4,40,'Acid Ball'); X ident := true; X end; X 24 : i1 := 2**(randint(24) - 1); X`09 25 : writeln ('Unimplemented Wand'); X otherwise ; X end; X `7B End of Wands... `7D X end; X if (ident) then X identify(inventory`5Bitem_val`5D); X if (flags <> 0) then X with py.misc do X begin X exp := exp + round(level/lev); X prt_experience; X end; X desc_charges(item_val); X end X end X end X end X else X msg_print('You are not carrying any wands.'); X end X else X msg_print('But you are not carrying anything.'); X if (redraw) then draw_cave; X end; $ CALL UNPACK [.SOURCE.INCLUDE]WANDS.INC;1 725428797 $ create 'f' X`7B Print Moria credits `7D X`5Bpsect(misc1$code)`5D procedure game_version; X var X tmp_str : vtype; X begin X clear(1,1); X writev(tmp_str,' Moria Version ',cur_version:3:2); Xput_buffer(tmp_str,1,1); Xput_buffer('Version 0.1 : 03/25/83',2,1); Xput_buffer('Version 1.0 : 05/01/84',3,1); Xput_buffer('Version 2.0 : 07/10/84',4,1); Xput_buffer('Version 3.0 : 11/20/84',5,1); Xput_buffer('Version 4.0 : 01/20/85',6,1); Xput_buffer('Modules :',8,1); Xput_buffer(' V1.0 Dungeon Generator - RAK',9,1); Xput_buffer(' Character Generator - RAK & JWT',10,1); Xput_buffer(' Moria Module - RAK',11,1); Xput_buffer(' Miscellaneous - RAK & JWT',12,1); Xput_buffer(' V2.0 Town Level & Misc - RAK',13,1); Xput_buffer(' V3.0 Internal Help & Misc - RAK',14,1); Xput_buffer(' V4.0 Source Release Version - RAK',15,1); Xput_buffer('Robert Alan Koeneke Jimmey Wayne Todd Jr.',17,1); Xput_buffer('Student/University of Oklahoma Student/University of Oklahoma V',18 X,1); Xput_buffer('119 Crystal Bend 1912 Tiffany Dr.',19,1); Xput_buffer('Norman, OK 73069 Norman, OK 73071',20,1); Xput_buffer('(405)-321-2925 (405) 360-6792',21,1); X pause(24); X draw_cave; X end; X`20 X`20 X `7B Light up the dungeon -RAK- `7 VD X`5Bpsect(wizard$code)`5D procedure wizard_light; X var X i1,i2,i3,i4 : integer; X flag : boolean; X begin X if (cave`5Bchar_row,char_col`5D.pl) then X flag := false X else X flag := true; X for i1 := 1 to cur_height do X for i2 := 1 to cur_width do X if (cave`5Bi1,i2`5D.fval in floor_set) then X for i3 := i1-1 to i1+1 do X for i4 := i2-1 to i2+1 do X with cave`5Bi3,i4`5D do X begin X pl := flag; X if (not(flag)) then X fm := false; X end; X prt_map; X end; X`20 X`20 X`20 X`7B Wizard routine for gaining on stats `7D X`5Bpsect(wizard$code)`5D procedure change_character; X var X tmp_val : integer; X tmp_str : vtype; X begin X with py.stat do X begin X prt('(3 - 118) Strength = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -999; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > 2) and (tmp_val < 119)) then X begin X str := tmp_val; X cstr := tmp_val; X prt_strength; X prt_max_weight; X end; X prt('(3 - 118) Intelligence = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -999; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > 2) and (tmp_val < 119)) then X begin X int := tmp_val; X cint := tmp_val; X prt_intelligence; X end; X prt('(3 - 118) Wisdom = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -999; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > 2) and (tmp_val < 119)) then X begin X wis := tmp_val; X cwis := tmp_val; X prt_wisdom; X end; X prt('(3 - 118) Dexterity = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -999; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > 2) and (tmp_val < 119)) then X begin X dex := tmp_val; X cdex := tmp_val; X prt_dexterity; X end; X prt('(3 - 118) Constitution = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -999; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > 2) and (tmp_val < 119)) then X begin X con := tmp_val; X ccon := tmp_val; X prt_constitution; X end; X prt('(3 - 118) Charisma = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -999; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > 2) and (tmp_val < 119)) then X begin X chr := tmp_val; X cchr := tmp_val; X prt_charisma; X end; X end; X with py.misc do X begin X prt('(1 - 32767) Hit points = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -1; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > 0) and (tmp_val < 32768)) then X begin X mhp := tmp_val; X chp := tmp_val; X prt_mhp; X prt_chp; X end; X if ( (py.misc.tclass <> 'Rogue') and X (py.misc.tclass <> 'Warrior') ) then X begin X prt('(0 - 32767) Mana = ',1,1); X get_string(tmp_str,1,26,10); X tmp_val := -999; X readv(tmp_str,tmp_val,error:=continue); X if ((tmp_val > -1) and (tmp_val < 32768)) then X begin X mana := tmp_val; X cmana := tmp_val; X prt_mana; X end; X end; X writev(tmp_str,'Current=',srh:1,' (0-200) Searching = '); X tmp_val := length(tmp_str); X prt(tmp_str,1,1); X get_string(tmp_str,1,tmp_val+1,10); X tmp_val := -999; +-+-+-+-+-+-+-+- END OF PART 77 +-+-+-+-+-+-+-+-