-+-+-+-+-+-+-+-+ START OF PART 70 -+-+-+-+-+-+-+-+ X`09`09`09`09 array `5B1..max_player_level`5D of integer; X`09acc_exp`09`09`09: `5Bpsect(player$data)`5D X`09`09`09`09 real;`09`7B Accumulator for fractional exp`7D X`09bare_hands`09`09: `5Bpsect(player$data)`5D X`09`09`09`09 dtype; X`09char_row`09`09: `5Bpsect(player$data)`5D integer; X`09char_col`09`09: `5Bpsect(player$data)`5D integer; X`09com_val`09`09`09: `5Bpsect(player$data)`5D integer; X`09pclass`09`09`09: `5Bpsect(player$data)`5D integer; X`09sex_type`09`09: `5Bpsect(player$data)`5D vtype; X`09race`09`09`09: `5Bpsect(create$data)`5D X`09`09`09`09 array `5B1..max_races`5D of race_type; X`09background`09`09: `5Bpsect(create$data)`5D X`09`09`09`09 array `5B1..max_background`5D of background_type; X`09rgold_adj`09`09: `5Bpsect(store$data)`5D X`09`09`09`09 array `5B1..max_races`5D of X`09`09`09`09 array `5B1..max_races`5D of real; X`09class`09`09`09: `5Bpsect(create$data)`5D X`09`09`09`09 array `5B1..max_class`5D of class_type; X`09magic_spell`09`09: `5Bpsect(player$data)`5D X`09`09`09`09 array `5B1..max_class`5D of`20 X`09`09`09`09 array `5B1..31`5D of spell_type; X`09mush`09`09`09: `5Bpsect(setup$data)`5D treasure_type; X`09player_init`09`09: `5Bpsect(create$data)`5D X`09`09`09`09 array `5B1..max_class`5D of X`09`09`09`09 array `5B1..5`5D of byteint; X`09total_winner`09`09: `5Bpsect(setup$data)`5D boolean; X X`09`7B Following are store definitions`09`09`09`09`7D X`09owners`09`09`09: `5Bpsect(store$data)`5D X`09`09`09`09 array `5B1..max_owners`5D of owner_type; X`09store`09`09`09: `5Bpsect(store$data)`5D X`09`09`09`09 array `5B1..max_stores`5D of store_type; X`09store_door`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 array `5B1..max_stores`5D of treasure_type; X`09store_choice`09`09: `5Bpsect(store$data)`5D X`09`09`09`09 array `5B1..max_stores`5D of`20 X`09`09`09`09 array `5B1..store$choices`5D of integer; X`09store_buy`09`09: `5Bpsect(store$data)`5D X`09`09`09`09 array `5B1..max_stores`5D of obj_set; X X`09`7B Following are treasure arrays`09and variables`09`09`09`7D X`09object_list`09`09: `5Bpsect(moria$data)`5D`20 X`09`09`09`09 array `5B1..max_objects`5D of treasure_type; X`09object_ident`09`09: `5Bpsect(moria$data)`5D`20 X`09`09`09`09 array `5B1..max_objects`5D of boolean; X`09t_level`09`09`09: `5Bpsect(moria$data)`5D`20 X`09`09`09`09 array `5B0..max_obj_level`5D of integer; X`09gold_list`09`09: `5Bpsect(moria$data)`5D`20 X`09`09`09`09 array `5B1..max_gold`5D of treasure_type; X`09t_list`09`09`09: `5Bpsect(moria$data)`5D`20 X`09`09`09`09 array `5B1..max_talloc`5D of treasure_type; X`09inventory`09`09: `5Bpsect(player$data)`5D`20 X`09`09`09`09 array `5B1..inven_max`5D`09 of treasure_type; X`09inventory_init`09`09: `5Bpsect(setup$data)`5D`20 X`09`09`09`09 array `5B1..inven_init_max`5D of treasure_type; X`09blank_treasure`09`09: `5Bpsect(moria$data)`5D treasure_type; X`09inven_ctr`09`09: `5Bpsect(player$data)`5D X`09`09`09`09 integer;`09`7B Total different obj's`09`7D X`09inven_weight`09`09: `5Bpsect(player$data)`5D X`09`09`09`09 integer;`09`7B Cur carried weight`09`7D X`09equip_ctr`09`09: `5Bpsect(player$data)`5D X`09`09`09`09 integer;`09`7B Cur equipment ctr`09`7D X`09tcptr`09`09`09: `5Bpsect(moria$data)`5D X`09`09`09`09 integer;`09`7B Cur treasure heap ptr`09`7D X X`09`7B Following are feature objects defined for dungeon`09`09`7D X`09trap_lista`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 array `5B1..max_trapa`5D of treasure_type; X`09trap_listb`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 array `5B1..max_trapb`5D of treasure_type; X`09scare_monster`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 treasure_type;`09`7B Special trap`09`7D X`09rubble`09`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 treasure_type; X`09door_list`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 array `5B1..3`5D`09`09 of treasure_type; X`09up_stair`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 treasure_type; X`09down_stair`09`09: `5Bpsect(generate$data)`5D X`09`09`09`09 treasure_type; X X`09`7B Following are creature arrays and variables`09`09`09`7D X`09c_list`09`09: `5Bpsect(moria$data)`5D X`09`09`09 array `5B1..max_creatures`5D of creature_type; X`09m_list`09`09: `5Bpsect(moria$data)`5D X`09`09`09 array `5B1..max_malloc`5D of monster_type; X`09m_level`09`09: `5Bpsect(generate$data)`5D X`09`09`09 array `5B0..max_mons_level`5D of integer; X`09blank_monster`09: `5Bpsect(generate$data)`5D X`09`09`09 monster_type;`09`7B Blank monster values`09`7D X`09muptr`09`09: `5Bpsect(generate$data)`5D X`09`09`09 integer;`09`7B Cur used monster ptr`09`7D X`09mfptr`09`09: `5Bpsect(generate$data)`5D X`09`09`09 integer;`09`7B Cur free monster ptr`09`7D X`09mon_tot_mult`09: `5Bpsect(moria$data)`5D X`09`09`09 integer;`09`7B # of repro's of creature`09`7D X X`09`7B Following are arrays for descriptive pieces`09`09`09`7D X`09colors`09`09`09: `5Bpsect(setup$data)`5D X`09`09`09`09 array `5B1..max_colors`5D`09 of atype; X`09mushrooms`09`09: `5Bpsect(setup$data)`5D X`09`09`09`09 array `5B1..max_mush`5D of atype; X`09woods`09`09`09: `5Bpsect(setup$data)`5D X`09`09`09`09 array `5B1..max_woods`5D of atype; X`09metals`09`09`09: `5Bpsect(setup$data)`5D X`09`09`09`09 array `5B1..max_metals`5D of atype; X`09rocks`09`09`09: `5Bpsect(setup$data)`5D X`09`09`09`09 array `5B1..max_rocks`5D of atype; X`09amulets`09`09`09: `5Bpsect(setup$data)`5D X`09`09`09`09 array `5B1..max_amulets`5D of atype; X`09syllables`09`09: `5Bpsect(setup$data)`5D X`09`09`09`09 array `5B1..max_syllables`5D of dtype; X`09vowel_set`09`09: `5Bpsect(moria$data)`5D X`09`09`09`09 char_set; X X`09`7B Following are variables for the Save Character Routines`09`7D X`09finam`09`09`09: `5Bpsect(save$data)`5D X`09`09`09`09 vtype; X`09key_rec`09`09`09: `5Bpsect(save$data)`5D X`09`09`09`09 key_type; X X`09`7B Cursor variables, used for cursor positioning`09`09`09`7D X`09cursor_r`09: `5Bpsect(io$data),global`5D X`09`09`09 array `5B1..24`5D of varying`5B10`5D of char; X`09curlen_r`09: `5Bpsect(io$data),global`5D integer; X`09cursor_c`09: `5Bpsect(io$data),global`5D X`09`09`09 array `5B1..80`5D of varying`5B10`5D of char; X`09curlen_c`09: `5Bpsect(io$data),global`5D integer; X`09cursor_l`09: `5Bpsect(io$data),global`5D integer; X`09row_first`09: `5Bpsect(io$data),global`5D boolean; X`09cursor_erl`09: `5Bpsect(io$data),global`5D varying`5B10`5D of char; X`09cursor_erp`09: `5Bpsect(io$data),global`5D varying`5B10`5D of char; $ CALL UNPACK [.SOURCE.INCLUDE]VARIABLES.INC;1 1933059669 $ create 'f' X`09`7B Wands for the aiming...`09`09`09`09`7D X`5Bpsect(misc2$code)`5D procedure aim; X var X`09`09i1 : unsigned; X`09`09i2,i3,i4,chance : integer; X`09`09dir,item_val : integer; X`09`09dumy,y_dumy,x_dumy : integer; X`09`09out_val : vtype; X`09`09redraw,ident : boolean; X begin X`09redraw := false; X`09reset_flag := true; X`09if (inven_ctr > 0) then X`09 begin X`09 if (find_range(`5B65`5D,i2,i3)) then X`09 begin X`09`09if (get_item(item_val,'Aim which wand?',redraw,i2,i3)) then X`09`09 with inventory`5Bitem_val`5D do X`09`09 begin X`09`09 if (redraw) then draw_cave; X`09`09 reset_flag := false; X`09`09 redraw := false; X`09`09 y_dumy := char_row; X`09`09 x_dumy := char_col; X`09`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09`09begin X`09`09`09 if (py.flags.confused > 0) then X`09`09`09 begin X`09`09`09 msg_print('You are confused...'); X`09`09`09 repeat X`09`09`09`09dir := randint(9); X`09`09`09 until(dir <> 5); X`09`09`09 end; X`09`09`09 i1 := flags; X`09`09`09 ident := false; X`09`09`09 with py.misc do X`09`09`09 chance := save + lev + int_adj - level; X`09`09`09 if (py.flags.confused > 0) then X`09`09`09 chance := trunc(chance/2.0); X`09`09`09 if (chance < 0) then chance := 0; X`09`09`09 if (randint(chance) < use_device) then X`09`09`09 msg_print('You failed to use the wand properly.') X`09`09`09 else if (p1 > 0) then X`09`09`09 begin X`09`09`09 p1 := p1 - 1; X`09`09`09 while (i1 > 0) do X`09`09`09`09begin X`09`09`09`09 i2 := bit_pos(i1); X`09`09`09`09 i3 := char_row; X`09`09`09`09 i4 := char_col; X`09`7B Wands `7D X`09case (i2) of X`09 1 : begin X`09`09 msg_print('A line of blue shimmering light appears.'); X`09`09 light_line(dir,char_row,char_col); X`09`09 ident := true; X`09`09end; X`09 2 : begin X`09`09 fire_bolt(1,dir,i3,i4,damroll('3d8'),'Lightning Bolt'); X`09`09 ident := true; X`09`09end; X`09 3 : begin X`09`09 fire_bolt(4,dir,i3,i4,damroll('4d8'),'Frost Bolt'); X`09`09 ident := true; X`09`09end; X`09 4 : begin X`09`09 fire_bolt(5,dir,i3,i4,damroll('6d8'),'Fire Bolt'); X`09`09 ident := true; X`09`09end; X`09 5 : ident := wall_to_mud(dir,i3,i4); X`09 6 : ident := poly_monster(dir,i3,i4); X`09 7 : ident := hp_monster(dir,i3,i4,-damroll('4d6')); X`09 8 : ident := speed_monster(dir,i3,i4,1); X`09 9 : ident := speed_monster(dir,i3,i4,-1); X`09 10 : ident := confuse_monster(dir,i3,i4); X`09 11 : ident := sleep_monster(dir,i3,i4); X`09 12 : ident := drain_life(dir,i3,i4); X`09 13 : ident := td_destroy2(dir,i3,i4); X`09 14 : begin X`09`09 fire_bolt(0,dir,i3,i4,damroll('2d6'),'Magic Missile'); X`09`09 ident := true; X`09`09end; X`09 15 : ident := build_wall(dir,i3,i4); X`09 16 : ident := clone_monster(dir,i3,i4); X`09 17 : ident := teleport_monster(dir,i3,i4); X`09 18 : ident := disarm_all(dir,i3,i4); X`09 19 : begin X`09`09 fire_ball(1,dir,i3,i4,24,'Lightning Ball'); X`09`09 ident := true; X`09`09end; X`09 20 : begin X`09`09 fire_ball(4,dir,i3,i4,32,'Cold Ball'); X`09`09 ident := true; X`09`09end; X`09 21 : begin X`09`09 fire_ball(5,dir,i3,i4,48,'Fire Ball'); X`09`09 ident := true; X`09`09end; X`09 22 : begin X`09`09 fire_ball(2,dir,i3,i4,8,'Stinking Cloud'); X`09`09 ident := true; X`09`09end; X`09 23 : begin X`09`09 fire_ball(3,dir,i3,i4,40,'Acid Ball'); X`09`09 ident := true; X`09`09end; X`09 24 : i1 := 2**(randint(24) - 1); X`09 otherwise ; X`09end; X`09`7B End of Wands... `7D X`09`09`09`09end; X`09`09`09 if (ident) then X`09`09`09`09identify(inventory`5Bitem_val`5D); X`09`09`09 if (flags <> 0) then X`09`09`09`09with py.misc do X`09`09`09`09 begin X`09`09`09`09 exp := exp + round(level/lev); X`09`09`09`09 prt_experience; X`09`09`09`09 end; X`09`09`09 desc_charges(item_val); X`09`09`09 end X`09`09`09end X`09`09 end X`09 end X`09 else X`09 msg_print('You are not carrying any wands.'); X`09 end X`09else X`09 msg_print('But you are not carrying anything.'); X`09if (redraw) then draw_cave; X end; $ CALL UNPACK [.SOURCE.INCLUDE]WANDS.INC;1 1644631711 $ create 'f' X`09`7B Print Moria credits`09`09`09`09`09-RAK-`09`7D X`5Bpsect(misc1$code)`5D procedure game_version; X var X`09tmp_str`09`09`09: vtype; X begin X`09clear(1,1); X`09writev(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,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`09pause(24); X`09draw_cave; X end; X X X`09`7B Light up the dungeon`09`09`09`09`09-RAK-`09`7D X`5Bpsect(wizard$code)`5D procedure wizard_light; X var X`09i1,i2,i3,i4`09: integer; X`09flag`09`09: boolean; X begin X if (cave`5Bchar_row,char_col`5D.pl) then X`09flag := false X else X`09flag := true; X for i1 := 1 to cur_height do X`09for i2 := 1 to cur_width do X`09 if (cave`5Bi1,i2`5D.fval in floor_set) then X`09 for i3 := i1-1 to i1+1 do X`09 for i4 := i2-1 to i2+1 do X`09`09with cave`5Bi3,i4`5D do X`09`09 begin X`09`09 pl := flag; X`09`09 if (not(flag)) then X`09`09 fm := false; X`09`09 end; X prt_map; X end; X X X X`09`7B Wizard routine for gaining on stats`09`09`09-RAK-`09`7D X`5Bpsect(wizard$code)`5D procedure change_character; X var X`09tmp_val`09`09`09: integer; X`09tmp_str`09`09`09: vtype; X begin X with py.stat do X`09begin X`09 prt('(3 - 118) Strength = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 str := tmp_val; X`09 cstr := tmp_val; X`09 prt_strength; X`09 end; X`09 prt('(3 - 118) Intelligence = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 int := tmp_val; X`09 cint := tmp_val; X`09 prt_intelligence; X`09 end; X`09 prt('(3 - 118) Wisdom = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 wis := tmp_val; X`09 cwis := tmp_val; X`09 prt_wisdom; X`09 end; X`09 prt('(3 - 118) Dexterity = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 dex := tmp_val; X`09 cdex := tmp_val; X`09 prt_dexterity; X`09 end; X`09 prt('(3 - 118) Constitution = ',1,1); +-+-+-+-+-+-+-+- END OF PART 70 +-+-+-+-+-+-+-+-