-+-+-+-+-+-+-+-+ START OF PART 45 -+-+-+-+-+-+-+-+ X`09`09 begin X`09`09 tmp := object_list`5Bi2`5D; X`09`09 object_list`5Bi2`5D := object_list`5Bi3`5D; X`09`09 object_list`5Bi3`5D := tmp; X`09`09 end X`09`09 else X`09`09 i2 := 0; X`09`09 i2 := i2 - gap; X`09`09end; X`09 end; X`09 gap := gap div 2; X`09end; X end; X X X X`09`7B Chance of treasure having magic abilities`09`09-RAK-`09`7D X`09`7B Chance increases with each dungeon level`09`09`09`7D X`5Bglobal,psect(misc4$code)`5D procedure magic_treasure(x,level : integer); X var X`09chance,special,cursed,i1,wpn_type`09: integer; X X procedure Ego_sword(x : integer); X `09begin X`09 with t_list`5Bx`5D do X `09case randint(5) of X`09 `09`091 : begin `7BHoly Avenger`7D X`09`09`09`09 flags := uor(flags,see_invisible_worn_bit+ X`09`09`09`09`09`09 sustain_stat_worn_bit+ X`09`09`09`09`09`09 resist_acid_worn_bit+ X`09`09`09`09`09`09 resist_fire_worn_bit+ X`09`09`09`09`09`09 strength_worn_bit+ X`09`09`09`09`09`09 slay_undead_worn_bit+ X`09`09`09`09`09`09 slay_evil_worn_bit); X`09`09`09`09 tohit := tohit + 5; X`09`09`09`09 todam := todam + 5; X`09`09`09`09 toac`09:= randint(4); X`09`09`09`09 p1`09:= randint(4) - 1; X`09`09`09`09 name`09:= name + ' (HA)'; X`09`09`09`09 cost`09:= cost + p1*50000; X`09`09`09`09 cost`09:= cost + 1000000; X`09`09`09`09end; X`09`09`092 : begin `7BDefender`7D X`09`09`09`09 flags := uor(flags,feather_fall_worn_bit+ X`09`09`09`09`09`09 see_invisible_worn_bit+ X`09`09`09`09`09`09 resist_lightning_worn_bit+ X`09`09`09`09`09`09 free_action_worn_bit+ X`09`09`09`09`09`09 resist_cold_worn_bit+ X`09`09`09`09`09`09 resist_acid_worn_bit+ X`09`09`09`09`09`09 resist_fire_worn_bit+ X`09`09`09`09`09`09 regeneration_worn_bit+ X`09`09`09`09`09`09 stealth_worn_bit); X`09`09`09`09 tohit := tohit + 3; X`09`09`09`09 todam := todam + 3; X`09`09`09`09 toac`09:= 5 + randint(5); X`09`09`09`09 name`09:= name + ' `5B%P4`5D (DF)'; X`09`09`09`09 p1`09:= randint(3); X`09`09`09`09 cost`09:= cost + p1*50000; X`09`09`09`09 cost`09:= cost + 750000; X`09`09`09`09end; X`09`09`093 : begin `7BDemon Bane`7D X`09`09`09`09 flags := uor(flags,resist_fire_worn_bit); X`09`09`09`09 flags2 := uor(flags2,slay_demon_worn_bit); X`09`09`09`09 tohit := tohit + 3; X`09`09`09`09 todam := todam + 3; X`09`09`09`09 name := name + ' (DB)'; X`09`09`09`09 cost := cost + 500000; X`09`09`09`09end; X`09`09`094 : begin `7BSoul Sword`7D X`09`09`09`09 flags := uor(flags,intelligence_worn_bit+ X`09`09`09`09`09`09 wisdom_worn_bit+ X`09`09`09`09`09`09 charisma_worn_bit+ X`09`09`09`09`09`09 see_invisible_worn_bit+ X`09`09`09`09`09`09 regeneration_worn_bit); X`09`09`09`09 flags2 := uor(flags2,soul_sword_worn_bit+ X`09`09`09`09`09`09 bad_repute_worn_bit); X`09`09`09`09 tohit := tohit + 5; X`09`09`09`09 todam := todam + 10; X`09`09`09`09 p1 := -randint(3) - 2; X`09`09`09`09 cost := cost + 800000 + p1*40000; X`09`09`09`09 name := name + ' (SS)'; X`09`09`09`09end; X`09`09`095 : begin `7BVorpal Sword`7D X`09`09`09`09 flags := uor(flags,sustain_stat_worn_bit); X`09`09`09`09 flags2 := uor(flags2,sharp_worn_bit); X`09`09`09`09 p1 := 1; X`09`09`09`09 tohit := tohit + 5; X`09`09`09`09 todam := todam + 5; X`09`09`09`09 cost := cost + 750000; X`09`09`09`09 name := name + ' (V)'; X`09`09`09`09end; X`09`09`09end; `7Bof case`7D X`09`09 end; `7Bof procedure`7D X X procedure Slaying_sword(x : integer); X`09`09begin X`09 `09 with t_list`5Bx`5D do X`09`09`09case randint(4) of X`09`09`09`091 : begin `7BSlay Monster`7D X`09`09`09`09 flags := uor(flags,see_invisible_worn_bit+ X`09`09`09`09`09`09 slay_monster_worn_bit); X`09`09`09`09 tohit := tohit + 3; X`09`09`09`09 todam := todam + 3; X`09`09`09`09 name := name + ' (SM)'; X`09`09`09`09 cost := cost + 500000; X`09`09`09`09end; X X`09`09`09`092 : begin `7BSlay Dragon`7D X`09`09`09`09 flags := uor(flags,slay_dragon_worn_bit); X`09`09`09`09 tohit := tohit + 3; X`09`09`09`09 todam := todam + 3; X`09`09`09`09 name := name + ' (SD)'; X`09`09`09`09 cost := cost + 400000; X`09`09`09`09end; X X`09`09`09`093 : begin `7BSlay Undead`7D X`09`09`09`09 flags := uor(flags,slay_undead_worn_bit); X`09`09`09`09 tohit := tohit + 2; X`09`09`09`09 todam := todam + 2; X`09`09`09`09 name := name + ' (SU)'; X`09`09`09`09 cost := cost + 300000; X`09`09`09`09end; X X`09`09`09`094 : begin `7BSlay Regenerative`7D X`09`09`09`09 flags2 := uor(flags2,slay_regen_worn_bit); X`09`09`09`09 tohit := tohit + 2; X`09`09`09`09 todam := todam + 2; X`09`09`09`09 cost := cost + 150000; X`09`09`09`09 name := name + ' (SR)'; X`09`09`09`09end; X`09`09`09end; `7Bof case`7D X`09`09end; `7Bof procedure`7D X X procedure Magic_sword(x : integer); X`09`09begin X`09`09 with t_list`5Bx`5D do X`09`09`09case randint(4) of X`09`09`09`091 : begin `7BFlame Tongue`7D X`09`09`09`09 flags := uor(flags,flame_brand_worn_bit); X`09`09`09`09 tohit := tohit + 1; X`09`09`09`09 todam := todam + 3; X`09`09`09`09 name := name + ' (FT)'; X`09`09`09`09 cost := cost + 200000; X`09`09`09`09end; X X`09`09`09`092 : begin `7BFrost Brand`7D X`09`09`09`09 flags := uor(flags,cold_brand_worn_bit); X`09`09`09`09 tohit := tohit + 1; X`09`09`09`09 todam := todam + 1; X`09`09`09`09 name := name + ' (FB)'; X`09`09`09`09 cost := cost + 120000; X`09`09`09`09end; X X`09`09`09`093 : begin `7BWizards Blade`7D X`09`09`09`09 flags2 := uor(flags2,Magic_proof_worn_bit); X`09`09`09`09 weight := trunc(weight * 4 / 5); X`09`09`09`09 tval := Dagger; X`09`09`09`09 tohit := tohit + 3; X`09`09`09`09 todam := todam + 1; X`09`09`09`09 cost := cost + 80000; X`09`09`09`09 name := name + ' (WB)'; X`09`09`09`09end;`09 X X`09`09`09`094 : begin `7BBlessed Blade`7D X`09`09`09`09 flags := uor(flags,magic_proof_worn_bit); X`09`09`09`09 tval := maul; X`09`09`09`09 tohit := tohit +2; X`09`09`09`09 todam := todam +4; X`09`09`09`09 cost := cost + 80000; X`09`09`09`09 name := name + ' (BB)'; X`09`09`09`09end; X`09`09`09end; `7Bof case`7D X`09`09end; `7Bof procedure`7D X X`09`7B Boolean : is object enchanted`09`09 -RAK- `7D X function magik(chance : integer) : boolean; X begin X`09magik := (randint(150) <= chance); `7B for deeper dungeon levels `7D X end; X X`09`7B Enchant a bonus based on degree desired -RAK- `7D X function m_bonus(base,max_std,level : integer) : integer; X var X`09x,stand_dev`09`09: integer; X begin X`09stand_dev := trunc(obj_std_adj*level) + obj_std_min; X`09if (stand_dev > max_std) then stand_dev := max_std; X`09x := trunc(abs(randnor(0,stand_dev))/10.0) + base; X`09if (x < base) then X`09 m_bonus := base X`09else X`09 m_bonus := x; X end; X X begin X chance := obj_base_magic +(level*(obj_base_max-obj_base_magic)) div 10 V0; X if (chance > obj_base_max) then chance := obj_base_max; X special := trunc(chance/obj_div_special); X cursed := trunc(chance/obj_div_cursed); X with t_list`5Bx`5D do X`09`7B Depending on treasure type, it can have certain magical properties`7D X`09case tval of X `7B Miscellaneous Objects`7D X`09 valuable_gems : X`09`09begin X`09`09 case subval of X`09`09`091 : p1 := randint(10) + 10; X`09`09`092 : p1 := randint(5) +2; X`09`09`093 : p1 := randint(8) + 7; X`09`09`094 : p1 := randint(3) + 3; X`09`09`095 : p1 := randint(10) + 10; X`09`09`096 : p1 := randint(5) + 5; X`09`09`097 : p1 := randint(15) + 15; X`09`09`098 : p1 := randint(3) + 2; X`09`09`099 : p1 := randint(5) + 3; X`09`09`0910: p1 := randint(3) + 2; X`09`09`0911: p1 := randint(6) + 4; X`09`09 end; X`09`09end; X`09 misc_usable : X`09`09begin X`09`09 if (magik(chance)) then X`09`09 if (magik(special)) then X`09`09 case subval of X`09`09`0914 : begin `7Bstatues`7D X`09`09`09`09 case randint(3) of X`09`09`09`09 1 : `7Bsummoning undead`7D X`09`09`09`09 begin X`09`09`09`09`09flags := uor(flags,%X'00000100'); X`09`09`09`09`09name := name + ' Major of Undead Summoning'; X`09`09`09`09`09cost := 0; X`09`09`09`09`09p1 := randint(4) + 2; X`09`09`09`09 end; X`09`09`09`09 2 : `7Bsummon demon`7D X`09`09`09`09 begin X`09`09`09`09`09flags := uor(flags,%X'00000200'); X`09`09`09`09`09name := name + ' Major of Demon Summoning'; X`09`09`09`09`09cost := 0; X`09`09`09`09`09p1 := randint(3) + 1; X`09`09`09`09 end; X`09`09`09`09 3 : `7BLife giving`7D X`09`09`09`09 begin X`09`09`09`09`09flags := uor(flags,%X'00000400'); X`09`09`09`09`09name := name + ' Life Giving'; X`09`09`09`09`09cost := 900000; X`09`09`09`09`09p1 := randint(5) + 3; X`09`09`09`09 end; X`09`09`09`09 end; X`09`09`09`09end; X`09`09`09 15`09 : begin X`09`09`09`09`09case randint(4) of X`09`09`09`09`09 1 : begin X`09`09`09`09`09 name := name + ' from a Dragon'; X`09`09`09`09`09 p1 := randint(4) + 2; X`09`09`09`09`09 cost := cost + p1*20000; X`09`09`09`09`09 flags := uor(flags,%X'20000000'); X X`09`09`09`09`09 end; X`09`09`09`09`092 : begin X`09`09`09`09`09`09name := name + ' of a Demon'; X`09`09`09`09`09`09p1 := randint(4) +2; X`09`09`09`09`09`09cost := cost + p1*20000; X`09`09`09`09`09 flags := uor(flags,%X'40000000'); X`09`09`09`09`09 end; X`09`09`09`09 otherwise ; X`09`09`09`09 end; X`09`09`09`09end; X`09`09`0916,17,18 : begin `7Bcrucifixes`7D X`09`09`09`09`09case randint(4) of X`09`09`09`09 1,2,3 : begin`20 X`09`09`09`09`09 flags := uor(flags,%X'00000001'); X`09`09`09`09`09 name := name + ' of Turning'; X`09`09`09`09`09 p1 := randint(p1*2) + 2; X`09`09`09`09`09 cost := cost + p1*20000; X`09`09`09`09`09 end; X`09`09`09`09`09 4 : begin X`09`09`09`09`09 flags := uor(flags,%X'00000002'); X`09`09`09`09`09 name := name + ' of Demon Dispelling'; X`09`09`09`09`09 p1 := randint( trunc(subval/2)); X`09`09`09`09`09 cost := cost + p1 * 50000; X`09`09`09`09`09 end; X`09`09`09`09`09 end; X`09`09`09`09`09end; X`09`09`0919 : begin X`09`09`09`09flags := uor(flags,%X'00000004'); X`09`09`09`09name := name + ' of Summon Undead'; X`09`09`09`09cost := 0; X`09`09`09`09p1 := 2; X`09`09`09 end; X`09`09`0920 : begin X`09`09`09`09flags := uor(flags,%X'00000008'); X`09`09`09`09name := name + ' of Demon Summoning'; X`09`09`09`09cost := 0; X`09`09`09`09p1 := 2; X `09`09`09 end; X`09`09`0921 : begin X`09`09`09`09case randint(3) of X`09`09`09`09 1 : begin X`09`09`09`09`09flags := uor(flags,%X'00000010'); X`09`09`09`09`09name := name +' containing a Djinni'; X`09`09`09`09`09cost := 200000; X`09`09`09`09`09p1 := 1; X`09`09`09`09 end; X`09`09`09`09 2,3 : begin X`7Bthis routine sucks!!!!!`7D`09`09flags := uor(flags,%X'00000020'); X`09`09`09`09`09name := name+' containing some Demons'; X`09`09`09`09`09cost := 0; X`09`09`09`09`09p1 := 1 X`09`09`09`09 end; X`09`09`09`09 end; X`09`09`09`09end; X`09`09`09end; X`09`09end; X `7B Armor and shields `7D X`09 shield, hard_armor, soft_armor : X`09`09 begin X`09`09 if ((tval = soft_armor) and (subval=6)) then X`09`09 begin X`7Bsorry about the mess. dean`7D X`09`09`09if (randint(4)=1) then X`09`09`09begin X`09`09`09 t_list`5Bx`5D := yums`5B11+randint(3)`5D; X`09 t_list`5Bx`5D.weight := t_list`5Bx`5D.weight*weight_adj; X`09`09`09 t_list`5Bx`5D.cost:=trunc(t_list`5Bx`5D.cost*cost_adj); X`09`09`09end; X`09`09 end X`09`09 else if ((tval=hard_armor) and (subval=13)) then X`09`09 if (magik(chance) or (randint(5)=1)) then X`09`09`09begin X`09`09`09if (magik(special) or (randint(5)=1)) then X`09`09`09 if (randint(3)=1) then X`09`09`09 t_list`5Bx`5D := yums`5B17`5D X`09`09`09 else X`09`09`09 t_list`5Bx`5D := yums`5B16`5D X`09`09`09else X`09`09`09 t_list`5Bx`5D := yums`5B15`5D; X`09 t_list`5Bx`5D.weight := t_list`5Bx`5D.weight*weight_adj; X`09`09`09 t_list`5Bx`5D.cost:=trunc(t_list`5Bx`5D.cost*cost_adj); X`09`09`09end; X`09`09 if magik(chance) then X`09`09 begin X`09`09`09toac := m_bonus(1,30,level); X`09`09`09if magik(special) then X`09`09`09 case randint(9) of X`09`09`091 : begin X`09`09`09`09 flags := uor(flags,resist_lightning_worn_bit+ X`09`09`09`09`09`09 resist_cold_worn_bit+ X`09`09`09`09`09`09 resist_acid_worn_bit+ X`09`09`09`09`09`09 resist_fire_worn_bit); X`09`09`09`09 name := name + ' (R)'; X`09`09`09`09 toac := toac + 5; X`09`09`09`09 cost := cost + 250000; X`09`09`09`09end; X`09`09`092 : begin`09`7B Resist Acid`09`7D X`09`09`09`09 flags := uor(flags,resist_acid_worn_bit); X`09`09`09`09 name := name + ' (RA)'; X`09`09`09`09 cost := cost + 100000; X`09`09`09`09end; X`09`09`093,4 : begin`09`7B Resist Fire`09`7D X`09`09`09`09 flags := uor(flags,resist_fire_worn_bit); X`09`09`09`09 name := name + ' (RF)'; X`09`09`09`09 cost := cost + 60000; X`09`09`09`09end; X`09`09`095,6 : begin`09`7B Resist Cold`09`7D X`09`09`09`09 flags := uor(flags,resist_cold_worn_bit); X`09`09`09`09 name := name + ' (RC)'; X`09`09`09`09 cost := cost + 60000; X`09`09`09`09end; X`09`09`097,8,9 : begin`09`7B Resist Lightning`7D X`09`09`09`09 flags := uor(flags,resist_lightning_worn_bit); X`09`09`09`09 name := name + ' (RL)'; X`09`09`09`09 cost := cost + 50000; X`09`09`09`09end; X`09`09`09 end X`09`09 end X`09`09 else if (magik(cursed)) then X`09`09 begin X`09`09`09toac := -m_bonus(1,40,level); X`09`09`09cost := 0; X`09`09`09flags := uor(cursed_worn_bit,flags); X`09`09 end X`09`09 end; X`7B Weapons `7D X`09 hafted_weapon, pole_arm, sword, dagger, maul : X`09`09begin X`09`09 if magik(chance) then X`09`09 begin X`09`09`09tohit := m_bonus(0,40,level); X`09`09`09todam := m_bonus(0,40,level); X`09`09`09if magik(special) then X`09`09`09 if ((subval = 99) and (randint(5)=1)) then`20 X`09`09`09 begin X`09`09`09`09 flags := uor(flags,charisma_worn_bit+ X`09`09`09`09`09`09searching_worn_bit+ X`09`09`09`09`09`09stealth_worn_bit+ X`09`09`09`09`09`09regeneration_worn_bit+ X`09`09`09`09`09`09resist_acid_worn_bit+ X`09`09`09`09`09`09resist_cold_worn_bit); X`09`09`09`09 p1 := -5; X`09`09`09`09 cost := 120000; X`09`09`09`09 name := name + ' of Trollkind'; X`09`09`09`09 damage := '3d4'; X`09`09`09`09end X`09`09`09 else`20 X`09`09`09 begin X`09`09`09 wpn_type := randint(100); X`09`09`09 if (wpn_type < 61) then X`09`09`09`09 Magic_sword(x) X`09`09`09 else if (wpn_type < 81) then X`09`09`09`09 Slaying_sword(x) +-+-+-+-+-+-+-+- END OF PART 45 +-+-+-+-+-+-+-+-