#!/usr/local/bin/perl require "fread.pl"; require "defaults.pl"; $filein = $ARGV[0]; $fileout = $ARGV[1]; if (defined($ARGV[2]) && ($levch = int($ARGV[2]))) { } else { $levch = 0; if (defined($ARGV[2]) && ($ARGV[2] eq "debug")) { $debug = "yes"; } } if (defined($ARGV[3]) && ($ARGV[3] eq "debug")) { $debug = "yes"; } &init_flags(); open (FILE, "$filein")||die("Can't open input file\n"); $pointer = 0; $a = 0; $last = 0; print "$filein\n"; while ($last == 0) { while (fread_letter() ne '#') {fread_to_eol();} $atype = fread_word(); if ($atype eq "AREA") {fread_area();} elsif ($atype eq "MOBILES") {fread_mobiles();} elsif ($atype eq "OBJECTS") {fread_objects();} elsif ($atype eq "ROOMS") {fread_rooms();} elsif ($atype eq "RESETS") {fread_resets();} elsif ($atype eq "SHOPS") {fread_shops();} elsif ($atype eq "SPECIALS"){fread_specials();} elsif ($atype eq "\$") {$last = 1;} } close FILE; $minvnum = 100; $cont = 1; while ($cont != 0) { $b = 0; foreach $tmp (sort(keys(%m_name))) { if ($tmp < $minvnum) { $b = 1; } } foreach $tmp (sort(keys(%o_name))) { if ($tmp < $minvnum) { $b = 1; } } foreach $tmp (sort(keys(%r_name))) { if ($tmp < $minvnum) { $b = 1; } } if ($b == 1) { $minvnum -= 100; $cont = 0; next; } $minvnum += 100; } $maxvnum = 32700; $cont = 1; while ($cont != 0) { $b = 0; foreach $tmp (sort(keys(%m_name))) { if ($tmp > $maxvnum) { $b = 1; } } foreach $tmp (sort(keys(%o_name))) { if ($tmp > $maxvnum) { $b = 1; } } foreach $tmp (sort(keys(%r_name))) { if ($tmp > $maxvnum) { $b = 1; } } if ($b == 1) { $maxvnum += 100; $maxvnum--; $cont = 0; next; } $maxvnum -= 100; } open (OUT, ">$fileout")||die("Can't open output file\n"); write_area(); write_mobiles(); write_objects(); write_rooms(); write_resets(); write_shops(); write_specials(); print OUT "\n#\$\n\n"; close OUT; exit; sub fread_area { print "Reading AREA\n"; $levels = fread_levels(); $author = sprintf("%-7s", fread_word()); $title = fread_string(); @Filepath = split(/\//, $fileout); $outfilename = $Filepath[$#Filepath]; return; } sub write_area { print "Writing AREA\n"; print OUT "#AREA\nROT v1.5 format~\n${outfilename}~\n"; print OUT $title, "~\n"; print OUT "$levels $author $title~\n"; print OUT "$minvnum $maxvnum\n"; return; } sub fread_mobiles { print "Reading MOBILES\n"; $vnum = 1; while ($vnum != 0) { while (fread_letter() ne '#') {fread_to_eol();} $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\tname\n"; } $m_name{$vnum} = fread_string(); if (defined($debug)) { print "\t\tshort\n"; } $m_short{$vnum} = fread_string(); if (defined($debug)) { print "\t\tlong\n"; } $m_long{$vnum} = fread_string(); if (defined($debug)) { print "\t\textended\n"; } $m_extended{$vnum} = fread_string(); if (defined($debug)) { print "\t\trace\n"; } $m_rac{$vnum} = fread_string(); if (defined($debug)) { print "\t\tact\n"; } $m_act{$vnum} = fread_flag(); if (defined($debug)) { print "\t\taffects\n"; } $tmp = fread_flag(); $m_aff{$vnum} = ""; $m_shd{$vnum} = ""; foreach $temp (split('',$tmp)) { if (defined($mobaff{$temp})) { ($pos,$val)=split(',', $mobaff{$temp}); if ($pos eq "A") { $m_aff{$vnum} .= $val; } elsif ($pos eq "S") { $m_shd{$vnum} .= $val; } } } if ($m_aff{$vnum} eq "") { $m_aff{$vnum} = "0"; } if ($m_shd{$vnum} eq "") { $m_shd{$vnum} = "0"; } if (defined($debug)) { print "\t\talignment\n"; } $m_align{$vnum} = fread_number(); if (defined($debug)) { print "\t\tgroup\n"; } $tmp = fread_letter(); $m_group{$vnum} = 0; if (defined($debug)) { print "\t\tlevel\n"; } $m_level{$vnum} = fread_number(); $level = int($m_level{$vnum}); $level += $levch; if ($level > 110) { $level = 110; } if ($level < 0) { $level = 0; } $m_level{$vnum} = $level; if (defined($debug)) { print "\t\thit roll\n"; } $m_hr{$vnum} = fread_number(); if (defined($debug)) { print "\t\thit dice\n"; } $m_hdice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tmana dice\n"; } $m_mdice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tdamage dice\n"; } $m_ddice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tdamage type\n"; } $m_dtype{$vnum} = $damtypes[fread_number()]; if (defined($debug)) { print "\t\tAC 1\n"; } $m_ac1{$vnum} = fread_number(); if (defined($debug)) { print "\t\tAC 2\n"; } $m_ac2{$vnum} = fread_number(); if (defined($debug)) { print "\t\tAC 3\n"; } $m_ac3{$vnum} = fread_number(); if (defined($debug)) { print "\t\tAC 4\n"; } $m_ac4{$vnum} = fread_number(); if (defined($debug)) { print "\t\toffensive\n"; } $m_off{$vnum} = fread_flag(); if (defined($debug)) { print "\t\timmune\n"; } $m_imm{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tresist\n"; } $m_res{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tvulnerable\n"; } $m_vul{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tstart position\n"; } $m_pos1{$vnum} = $positions[fread_number()]; if (defined($debug)) { print "\t\tdefault position\n"; } $m_pos2{$vnum} = $positions[fread_number()]; if (defined($debug)) { print "\t\tsex\n"; } $m_sex{$vnum} = $sexes[fread_number()]; if (defined($debug)) { print "\t\ttreasure\n"; } $m_gold{$vnum} = fread_number(); $m_gold{$vnum} /= 25; if (defined($debug)) { print "\t\tform\n"; } $m_form{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tparts\n"; } $m_parts{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tsize\n"; } $m_size{$vnum} = $sizes[fread_number()]; if (defined($debug)) { print "\t\tmaterial\n"; } $m_material{$vnum} = fread_word(); $lastline = 0; while ($lastline == 0) { if (defined($debug)) { print "\t\tExtras:\n"; } $tmp = fread_letter(); if ($tmp eq '#') { $pointer--; $lastline = 1; next; } if ($tmp eq 'F') { if (defined($debug)) { print "\t\t\tremove flags\n"; } $pos = fread_word(); $val = fread_flag(); if ($pos eq "act") { $m_flag_act{$vnum} = $val; } elsif ($pos eq "aff") { $m_flag_aff{$vnum} = $val; } elsif ($pos eq "shd") { $m_flag_shd{$vnum} = $val; } elsif ($pos eq "off") { $m_flag_off{$vnum} = $val; } elsif ($pos eq "imm") { $m_flag_imm{$vnum} = $val; } elsif ($pos eq "res") { $m_flag_res{$vnum} = $val; } elsif ($pos eq "vul") { $m_flag_vul{$vnum} = $val; } elsif ($pos eq "for") { $m_flag_for{$vnum} = $val; } elsif ($pos eq "par") { $m_flag_par{$vnum} = $val; } } } } return; } sub write_mobiles { print "Writing MOBILES\n"; print OUT "\n#MOBILES\n"; foreach $vnum (sort bynum(keys(%m_name))) { $level = $m_level{$vnum}; print OUT "#${vnum}\n"; print OUT $m_name{$vnum}, "~\n"; print OUT $m_short{$vnum}, "~\n"; print OUT $m_long{$vnum}, "~\n"; print OUT $m_extended{$vnum}, "~\n"; print OUT $m_rac{$vnum}, "~\n"; print OUT "$m_act{$vnum} $m_aff{$vnum} "; print OUT "$m_shd{$vnum} $m_align{$vnum} $m_group{$vnum}\n"; print OUT "$level $m_hr{$vnum} $mobhp{$level} "; print OUT "$mobhp{$level} $mobdm{$level} $m_dtype{$vnum}\n"; $mobac = $ac{$level}; $mobexotic = $mobac + 4; print OUT "$mobac $mobac $mobac $mobexotic\n"; print OUT "$m_off{$vnum} $m_imm{$vnum} $m_res{$vnum} $m_vul{$vnum}\n"; print OUT "$m_pos1{$vnum} $m_pos1{$vnum} $m_sex{$vnum} $m_gold{$vnum}\n"; print OUT "$m_form{$vnum} $m_parts{$vnum} $m_size{$vnum} $m_material{$vnum}\n"; if (defined($m_flag_act{$vnum})) { print OUT "F act $m_flag_act{$vnum}\n"; } if (defined($m_flag_aff{$vnum})) { print OUT "F aff $m_flag_aff{$vnum}\n"; } if (defined($m_flag_shd{$vnum})) { print OUT "F shd $m_flag_shd{$vnum}\n"; } if (defined($m_flag_off{$vnum})) { print OUT "F off $m_flag_off{$vnum}\n"; } if (defined($m_flag_imm{$vnum})) { print OUT "F imm $m_flag_imm{$vnum}\n"; } if (defined($m_flag_res{$vnum})) { print OUT "F res $m_flag_res{$vnum}\n"; } if (defined($m_flag_vul{$vnum})) { print OUT "F vul $m_flag_vul{$vnum}\n"; } if (defined($m_flag_for{$vnum})) { print OUT "F for $m_flag_for{$vnum}\n"; } if (defined($m_flag_par{$vnum})) { print OUT "F par $m_flag_par{$vnum}\n"; } } print OUT "#0\n"; return; } sub fread_objects { print "Reading OBJECTS\n"; $vnum = 1; while ($vnum != 0) { while (fread_letter() ne '#') {fread_to_eol();} $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\tname\n"; } $o_name{$vnum} = fread_string(); if (defined($debug)) { print "\t\tshort\n"; } $o_short{$vnum} = fread_string(); if (defined($debug)) { print "\t\tlong\n"; } $o_long{$vnum} = fread_string(); if (defined($debug)) { print "\t\tmaterial\n"; } $o_material{$vnum} = fread_string(); if (defined($debug)) { print "\t\ttype\n"; } $o_type{$vnum} = $objects[fread_number()]; if (defined($debug)) { print "\t\textra\n"; } $o_extra{$vnum} = fread_flag(); if (defined($debug)) { print "\t\twear\n"; } $o_wear{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tV0-V4\n"; } $o_v0{$vnum} = fread_number(); if ($o_type{$vnum} eq "container") { $o_v1{$vnum} = fread_flag(); } else { $o_v1{$vnum} = fread_number(); } $o_v2{$vnum} = fread_number(); $o_v3{$vnum} = fread_number(); $o_v4{$vnum} = fread_number(); if (defined($debug)) { print "\t\tlevel\n"; } $o_level{$vnum} = fread_number(); $level = int($o_level{$vnum}); $level += $levch; if ($level > 110) { $level = 110; } if ($level < 0) { $level = 0; } $o_level{$vnum} = $level; if (defined($debug)) { print "\t\tweight\n"; } $o_weight{$vnum} = fread_number(); if (defined($debug)) { print "\t\tcost\n"; } $o_cost{$vnum} = fread_number(); $o_cost{$vnum} /= 25; if (defined($debug)) { print "\t\tcondition\n"; } $o_cond{$vnum} = fread_letter(); $lastline = 0; $extrapoint = 0; $applypoint = 0; $flagpoint = 0; while ($lastline == 0) { if (defined($debug)) { print "\t\tExtras:\n"; } $tmp = fread_letter(); if ($tmp eq '#') { $pointer--; $lastline = 1; next; } if ($tmp eq 'E') { $extrapoint++; $tmp = "${vnum}:${extrapoint}"; if (defined($debug)) { print "\t\t\textended key\n"; } $o_extkey{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\textended desc\n"; } $o_extend{$tmp} = fread_string(); next; } if ($tmp eq 'A') { if (defined($debug)) { print "\t\t\tapply pos\n"; } $pos = fread_number(); if (defined($debug)) { print "\t\t\tapply value\n"; } $val = fread_number(); $applypoint++; $tmp = "${vnum}:${applypoint}"; $o_apply{$tmp} = "$pos $val"; next; } if ($tmp eq 'F') { if (defined($debug)) { print "\t\t\tflag pos\n"; } $pos = fread_letter(); if (defined($debug)) { print "\t\t\tflag apply pos\n"; } $apos = fread_number(); if (defined($debug)) { print "\t\t\tflag apply val\n"; } $aval = fread_number(); if (defined($debug)) { print "\t\t\tflag val\n"; } $val = fread_flag(); $flagpoint++; $tmp = "${vnum}:${flagpoint}"; $o_flag{$tmp} = "$pos $apos $aval $val"; } } } return; } sub write_objects { print "Writing OBJECTS\n"; print OUT "\n#OBJECTS\n"; foreach $vnum (sort bynum(keys(%o_name))) { $level = $o_level{$vnum}; print OUT "#${vnum}\n"; print OUT $o_name{$vnum}, "~\n"; print OUT $o_short{$vnum}, "~\n"; print OUT $o_long{$vnum}, "~\n"; print OUT $o_material{$vnum}, "~\n"; print OUT "$o_type{$vnum} $o_extra{$vnum} $o_wear{$vnum}\n"; if (($o_type{$vnum} eq "wand") || ($o_type{$vnum} eq "staff") || ($o_type{$vnum} eq "scroll") || ($o_type{$vnum} eq "potion") || ($o_type{$vnum} eq "pill")) { $o_v0{$vnum} += $levch; if ($o_v0{$vnum} > 110) { $o_v0{$vnum} = 110; } if ($o_v0{$vnum} < 0) { $o_v0{$vnum} = 0; } if (($o_type{$vnum} eq "scroll") || ($o_type{$vnum} eq "potion") || ($o_type{$vnum} eq "pill")) { $tmp = $objspell[$o_v1{$vnum}]; $o_v1{$vnum} = "'$tmp'"; $tmp = $objspell[$o_v2{$vnum}]; $o_v2{$vnum} = "'$tmp'"; $tmp = $objspell[$o_v3{$vnum}]; $o_v3{$vnum} = "'$tmp'"; } if (($o_type{$vnum} eq "wand") || ($o_type{$vnum} eq "staff")) { $tmp = $objspell[$o_v3{$vnum}]; $o_v3{$vnum} = "'$tmp'"; } } elsif ($o_type{$vnum} eq "fountain") { $tmp = $liquids[$o_v2{$vnum}]; $o_v2{$vnum} = "'$tmp'"; } elsif ($o_type{$vnum} eq "drink") { $tmp = $liquids[$o_v2{$vnum}]; $o_v2{$vnum} = "'$tmp'"; } elsif ($o_type{$vnum} eq "weapon") { ($dice,$sides)=split(' ', $weapdice{$level}); $tmp = $weaptypes[$o_v0{$vnum}]; $o_v0{$vnum} = $tmp; $o_v1{$vnum} = $dice; $o_v2{$vnum} = $sides; $tmp = $damtypes[$o_v3{$vnum}]; $o_v3{$vnum} = $tmp; } elsif ($o_type{$vnum} eq "armor") { $o_v0{$vnum} = $objac{$level}; $o_v1{$vnum} = $objac{$level}; $o_v2{$vnum} = $objac{$level}; $o_v3{$vnum} = $objac{$level} - 4; if ($o_v3{$vnum} < 0) { $o_v3{$vnum} = 0; } } print OUT "$o_v0{$vnum} $o_v1{$vnum} "; print OUT "$o_v2{$vnum} $o_v3{$vnum} $o_v4{$vnum}\n"; print OUT "$o_level{$vnum} $o_weight{$vnum} $o_cost{$vnum} $o_cond{$vnum}\n"; $lastline = 0; $count = 0; while ($lastline == 0) { $count++; $tmp = "${vnum}:${count}"; if (defined($o_apply{$tmp})) { print OUT "A\n$o_apply{$tmp}\n"; } else { $lastline++; } } $lastline = 0; $count = 0; while ($lastline == 0) { $count++; $tmp = "${vnum}:${count}"; if (defined($o_flag{$tmp})) { print OUT "F\n$o_flag{$tmp}\n"; } else { $lastline++; } } $lastline = 0; $count = 0; while ($lastline == 0) { $count++; $tmp = "${vnum}:${count}"; if (defined($o_extkey{$tmp})) { print OUT "E\n$o_extkey{$tmp}"; print OUT "~\n"; print OUT "$o_extend{$tmp}"; print OUT "~\n"; } else { $lastline++; } } } print OUT "#0\n"; return; } sub fread_rooms { print "Reading ROOMS\n"; $vnum = 1; while ($vnum != 0) { while (fread_letter() ne '#') {fread_to_eol();} $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\tname\n"; } $r_name{$vnum} = fread_string(); if (defined($debug)) { print "\t\tdescription\n"; } $r_desc{$vnum} = fread_string(); if (defined($debug)) { print "\t\tarea num\n"; } fread_number(); if (defined($debug)) { print "\t\troom flags\n"; } $r_flags{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tsector type\n"; } $r_sector{$vnum} = fread_number(); $lastline = 0; $extrapoint = 0; while ($lastline == 0) { if (defined($debug)) { print "\t\tExtras:\n"; } $tmp = fread_letter(); if ($tmp eq '#') { $pointer--; $lastline = 1; next; } if ($tmp eq 'C') { if (defined($debug)) { print "\t\t\tclan\n"; } $r_clan{$vnum} = fread_string(); next; } if ($tmp eq 'M') { if (defined($debug)) { print "\t\t\tmana\n"; } $r_mana{$vnum} = fread_number(); next; } if ($tmp eq 'H') { if (defined($debug)) { print "\t\t\theal\n"; } $r_heal{$vnum} = fread_number(); next; } if ($tmp eq 'E') { $extrapoint++; $tmp = "${vnum}:${extrapoint}"; if (defined($debug)) { print "\t\t\textended key\n"; } $r_extkey{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\textended description\n"; } $r_extend{$tmp} = fread_string(); next; } if ($tmp eq 'D') { if (defined($debug)) { print "\t\t\tdoor #\n"; } $dir = fread_number(); $tmp = "${vnum}:${dir}"; if (defined($debug)) { print "\t\t\tdoor look\n"; } $r_doorlook{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\tdoor keyword\n"; } $r_doorkeyw{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\tdoor type\n"; } $r_doorlock{$tmp} = fread_number(); if (defined($debug)) { print "\t\t\tdoor key\n"; } $r_doorkey{$tmp} = fread_number(); if (defined($debug)) { print "\t\t\tdoor to_room\n"; } $r_doorto{$tmp} = fread_number(); } } } return; } sub write_rooms { print "Writing ROOMS\n"; print OUT "\n#ROOMS\n"; foreach $vnum (sort bynum(keys(%r_name))) { print OUT "#${vnum}\n"; print OUT $r_name{$vnum}, "~\n"; print OUT $r_desc{$vnum}, "~\n"; print OUT "0 $r_flags{$vnum} $r_sector{$vnum}\n"; for ($count = 0; $count < 12; $count++) { $tmp = "${vnum}:${count}"; if (defined($r_doorto{$tmp})) { print OUT "D${count}\n"; print OUT "$r_doorlook{$tmp}"; print OUT "~\n"; print OUT "$r_doorkeyw{$tmp}"; print OUT "~\n"; print OUT "$r_doorlock{$tmp} $r_doorkey{$tmp} "; print OUT "$r_doorto{$tmp}\n"; } } if (defined($r_clan{$vnum})) { print OUT "C $r_clan{$vnum}~\n"; } if (defined($r_mana{$vnum})) { if (defined($r_heal{$vnum})) { print OUT "M $r_clan{$vnum} H $r_heal{$vnum}\n"; } else { print OUT "M $r_clan{$vnum} H 100\n"; } } elsif (defined($r_heal{$vnum})) { print OUT "M 100 H $r_heal{$vnum}\n"; } $lastline = 0; $count = 0; while ($lastline == 0) { $count++; $tmp = "${vnum}:${count}"; if (defined($r_extkey{$tmp})) { print OUT "E\n$r_extkey{$tmp}"; print OUT "~\n"; print OUT "$r_extend{$tmp}"; print OUT "~\n"; } else { $lastline++; } } print OUT "S\n"; } print OUT "#0\n"; return; } sub fread_resets { print "Reading RESETS\n"; $rm = 0; $ro = 0; $rp = 0; $rg = 0; $re = 0; $rd = 0; $rr = 0; $inc = 0; while (fread_letter() ne 'S') { $inc++; $pointer--; $type = fread_letter(); if (defined($debug)) { print "\t$type\n"; } if ($type eq 'M') { $rm++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rm_p1{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob vnum\n"; } $rm_vnum{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob global limit\n"; } $rm_glob{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob to_room\n"; } $rm_room{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob local limit\n"; } $tmp = "${rm_vnum{$rm}}:${rm_room{$rm}}"; $rm_local{$tmp}++; } elsif ($type eq 'O') { $ro++; if (defined($debug)) { print "\t\tplaceholder\n"; } $ro_p1{$ro} = fread_number(); if (defined($debug)) { print "\t\tobject vnum\n"; } $ro_vnum{$ro} = fread_number(); if (defined($debug)) { print "\t\tplaceholder\n"; } $ro_p2{$ro} = fread_number(); if (defined($debug)) { print "\t\tobject to_room\n"; } $ro_room{$ro} = fread_number(); $ro_inc{$ro} = $inc; } elsif ($type eq 'P') { $rp++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rp_p1{$rp} = fread_number(); if (defined($debug)) { print "\t\tput vnum\n"; } $rp_vnum{$rp} = fread_number(); if (defined($debug)) { print "\t\tplaceholder\n"; } $rp_p2{$rp} = fread_number(); if (defined($debug)) { print "\t\tput to_object\n"; } $rp_to{$rp} = fread_number(); if (defined($debug)) { print "\t\tput copies\n"; } $rp_copy{$rp} = 1; $jo = $ro; $jg = $rg; $je = $re; $ko = 0; $kg = 0; $ke = 0; $found = 0; while ($found == 0) { if ($jo == 0) { $found = 1; } elsif ($rp_to{$rp} == $ro_vnum{$jo}) { $found = 1; $ko = $ro_inc{$jo}; } else { $jo--; } } $found = 0; while ($found == 0) { if ($jg == 0) { $found = 1; } elsif ($rp_to{$rp} == $rg_vnum{$jg}) { $found = 1; $kg = $rg_inc{$jg}; } else { $jg--; } } $found = 0; while ($found == 0) { if ($je == 0) { $found = 1; } elsif ($rp_to{$rp} == $re_vnum{$je}) { $found = 1; $ke = $re_inc{$je}; } else { $je--; } } $ru = 0; if ($ko > $kg) { $ru = $ko; $rp_type{$rp} = "object"; } else { $ru = $kg; $rp_type{$rp} = "give"; } if ($ke > $ru) { $ru = $ke; $rp_type{$rp} = "equip"; } if ($rp_type{$rp} eq "object") { $rp_under{$rp} = $jo; } elsif ($rp_type{$rp} eq "give") { $rp_under{$rp} = $jg; } else { $rp_under{$rp} = $je; } } elsif ($type eq 'G') { $rg++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rg_p1{$rg} = fread_number(); if (defined($debug)) { print "\t\tgive vnum\n"; } $rg_vnum{$rg} = fread_number(); $rg_under{$rg} = $rm; if (defined($debug)) { print "\t\tgive limit\n"; } $rg_limit{$rg} = fread_number(); $rg_inc{$rg} = $inc; } elsif ($type eq 'E') { $re++; if (defined($debug)) { print "\t\tplaceholder\n"; } $re_p1{$re} = fread_number(); if (defined($debug)) { print "\t\tequip vnum\n"; } $re_vnum{$re} = fread_number(); if (defined($debug)) { print "\t\tequip limit\n"; } $re_limit{$re} = fread_number(); if (defined($debug)) { print "\t\tequip wear\n"; } $re_wear{$re} = fread_number(); $re_under{$re} = $rm; $re_inc{$re} = $inc; } elsif ($type eq 'D') { $rd++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rd_p1{$rd} = fread_number(); if (defined($debug)) { print "\t\tdoor room\n"; } $rd_room{$rd} = fread_number(); if (defined($debug)) { print "\t\tdoor direction\n"; } $rd_door{$rd} = fread_number(); if (defined($debug)) { print "\t\tdoor state\n"; } $rd_stat{$rd} = fread_number(); } elsif ($type eq 'R') { $rr++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rr_p1{$rr} = fread_number(); if (defined($debug)) { print "\t\trandom room\n"; } $rr_room{$rr} = fread_number(); if (defined($debug)) { print "\t\trandom max_direction\n"; } $rr_door{$rr} = fread_number(); } if (defined($debug)) { print "\t\tcomment\n"; } fread_to_eol(); } return; } sub write_resets { print "Writing RESETS\n"; print OUT "\n#RESETS\n"; $lastline = 0; $rd = 0; while ($lastline == 0) { $rd++; if (!defined($rd_room{$rd})) { if ($rd > 1) { print OUT "\n"; } $lastline++; next; } print OUT "D $rd_p1{$rd} $rd_room{$rd} $rd_door{$rd} $rd_stat{$rd}"; $tmp = $rd_room{$rd}; print OUT "\t\t* $r_name{$tmp}\n"; } $lastline = 0; $rr = 0; while ($lastline == 0) { $rr++; if (!defined($rr_room{$rr})) { if ($rr > 1) { print OUT "\n"; } $lastline++; next; } print OUT "R $rr_p1{$rr} $rr_room{$rr} $rr_door{$rr}"; $tmp = $rr_room{$rr}; print OUT "\t\t* $r_name{$tmp}\n"; } $lastline = 0; $ro = 0; while ($lastline == 0) { $ro++; if (!defined($ro_vnum{$ro})) { if ($ro > 1) { print OUT "\n"; } $lastline++; next; } print OUT "O $ro_p1{$ro} $ro_vnum{$ro} $ro_p2{$ro} $ro_room{$ro}"; $tmp = $ro_vnum{$ro}; print OUT "\t\t* $o_short{$tmp}\n"; $putin = 0; $rp = 0; while ($putin == 0) { $rp++; if (!defined($rp_vnum{$rp})) { $putin = 1; next; } if (($rp_under{$rp} == $ro) && ($rp_type{$rp} eq "object")) { print OUT "P $rp_p1{$rp} $rp_vnum{$rp} $rp_p2{$rp} $rp_to{$rp} $rp_copy{$rp}"; $tmp = $rp_vnum{$rp}; print OUT "\t\t* $o_short{$tmp}\n"; } } } $lastline = 0; $rm = 0; while ($lastline == 0) { $rm++; if (!defined($rm_vnum{$rm})) { if ($rm > 1) { print OUT "\n"; } $lastline++; next; } $tmp = "${rm_vnum{$rm}}:${rm_room{$rm}}"; $rm_local{$rm} = $rm_local{$tmp}; print OUT "M $rm_p1{$rm} $rm_vnum{$rm} $rm_glob{$rm} $rm_room{$rm}"; $temp = $rm_vnum{$rm}; $tmp = "${temp}:$rm_room{$rm}"; print OUT " $rm_local{$tmp}"; print OUT "\t\t* $m_short{$temp}\n"; $give = 0; $rg = 0; while ($give == 0) { $rg++; if (!defined($rg_vnum{$rg})) { $give = 1; next; } if ($rg_under{$rg} == $rm) { print OUT "G $rg_p1{$rg} $rg_vnum{$rg} $rg_limit{$rg}"; $tmp = $rg_vnum{$rg}; print OUT "\t\t* $o_short{$tmp}\n"; $putin = 0; $rp = 0; while ($putin == 0) { $rp++; if (!defined($rp_vnum{$rp})) { $putin = 1; next; } if (($rp_under{$rp} == $rg) && ($rp_type{$rp} eq "give")) { print OUT "P $rp_p1{$rp} $rp_vnum{$rp} $rp_p2{$rp} $rp_to{$rp} $rp_copy{$rp}"; $tmp = $rp_vnum{$rp}; print OUT "\t\t* $o_short{$tmp}\n"; } } } } $equi = 0; $re = 0; while ($equi == 0) { $re++; if (!defined($re_vnum{$re})) { $equi = 1; next; } if ($re_under{$re} == $rm) { print OUT "E $re_p1{$re} $re_vnum{$re} $re_limit{$re} $re_wear{$re}"; $tmp = $re_vnum{$re}; print OUT "\t\t* $o_short{$tmp}\n"; $putin = 0; $rp = 0; while ($putin == 0) { $rp++; if (!defined($rp_vnum{$rp})) { $putin = 1; next; } if (($rp_under{$rp} == $re) && ($rp_type{$rp} eq "equip")) { print OUT "P $rp_p1{$rp} $rp_vnum{$rp} $rp_p2{$rp} $rp_to{$rp} $rp_copy{$rp}"; $tmp = $rp_vnum{$rp}; print OUT "\t\t* $o_short{$tmp}\n"; } } } } } print OUT "S\n"; return; } sub fread_shops { print "Reading SHOPS\n"; $vnum = 1; while ($vnum != 0) { $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\tsell1\n"; } $sell1{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell2\n"; } $sell2{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell3\n"; } $sell3{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell4\n"; } $sell4{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell5\n"; } $sell5{$vnum} = fread_number(); if (defined($debug)) { print "\t\tbuy percent\n"; } $buyp{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell percent\n"; } $sellp{$vnum} = fread_number(); if (defined($debug)) { print "\t\topen\n"; } $open{$vnum} = fread_number(); if (defined($debug)) { print "\t\tclose\n"; } $close{$vnum} = fread_number(); if (defined($debug)) { print "\t\tcomment\n"; } fread_to_eol(); } return; } sub write_shops { print "Writing SHOPS\n"; print OUT "\n#SHOPS\n"; foreach $vnum (sort(keys(%sell1))) { $tmp = sprintf("%-8d%4d%4d%4d%4d%4d%8d%5d%6d%3d * ", $vnum, $sell1{$vnum}, $sell2{$vnum}, $sell3{$vnum}, $sell4{$vnum}, $sell5{$vnum}, $buyp{$vnum}, $sellp{$vnum}, $open{$vnum}, $close{$vnum}); if (defined($m_short{$vnum})) { $tmp .= $m_short{$vnum}; } print OUT $tmp, "\n"; } print OUT "0\n"; return; } sub fread_specials { print "Reading SPECIALS\n"; while (fread_letter() ne 'S') { $pointer--; $type = fread_letter(); if ($type eq 'M') { $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if (defined($debug)) { print "\t\tspecial\n"; } $spec{$vnum} = fread_word(); if (defined($debug)) { print "\t\tcomment\n"; } fread_to_eol(); } else { if (defined($debug)) { print "\t\t\tEOL\n"; } fread_to_eol(); } } return; } sub write_specials { print "Writing SPECIALS\n"; print OUT "\n#SPECIALS\n"; foreach $vnum (sort(keys(%spec))) { if ($spec{$vnum} ne "") { $tmp = sprintf("M%6d %-30s * ",$vnum, $spec{$vnum}); if (defined($m_short{$vnum})) { $tmp .= $m_short{$vnum}; } print OUT $tmp, "\n"; } } print OUT "S\n"; return; } sub bynum { $a <=> $b; } sub init_flags { @sexes = ('either', 'male', 'female'); @positions = ('dead', 'mort', 'incap', 'stun', 'sleep', 'rest', 'sit', 'fight', 'stand'); @sizes = ('tiny', 'small', 'medium', 'large', 'huge', 'giant'); %mobaff = ('A', 'A,A', 'B', 'S,B', 'C', 'A,C', 'D', 'A,D', 'E', 'A,E', 'F', 'A,F', 'H', 'S,H', 'K', 'A,K', 'M', 'A,M', 'N', 'S,N', 'T', 'A,P', 'U', 'A,Q', 'W', 'A,S'); @damtypes = ( 'none', 'slice', 'stab', 'slash', 'whip', 'claw', 'blast', 'pound', 'crush', 'grep', 'bite', 'pierce', 'suction', 'beating', 'digestion', 'charge', 'slap', 'punch', 'wrath', 'magic', 'divine', 'cleave', 'scratch', 'peck', 'peckb', 'chop', 'sting', 'smash', 'shbite', 'flbite', 'frbite', 'acbite', 'chomp', 'drain', 'thrust', 'slime', 'shock', 'thwack', 'flame', 'chill' ); @objects = ('trash', 'light', 'scroll', 'wand', 'staff', 'weapon', 'trash', 'trash', 'treasure', 'armor', 'potion', 'clothing', 'furniture', 'trash', 'trash', 'container', 'trash', 'drink', 'key', 'food', 'money', 'trash', 'boat', 'npc_corpse', 'pc_corpse', 'fountain', 'pill', 'protect', 'map', 'portal', 'warp_stone', 'room_key', 'gem', 'jewelry', 'jukebox'); @liquids = ('water', 'beer', 'red wine', 'ale', 'dark ale', 'whiskey', 'lemonade', 'firebreather', 'local specialty', 'slime mold juice', 'milk', 'tea', 'coffee', 'blood', 'salt water', 'coke', 'root beer', 'elvish wine', 'white wine', 'champagne', 'mead', 'rose wine', 'benedictine wine', 'vodka', 'cranberry juice', 'orange juice', 'absinthe', 'brandy', 'aquavit', 'schnapps', 'icewine', 'amontillado', 'sherry', 'framboise', 'rum', 'cordial', 'dr pepper'); @weaptypes =('exotic', 'sword', 'dagger', 'spear', 'mace', 'axe', 'flail', 'whip', 'polearm'); %objspell = ( '70', 'acid blast', '1', 'armor', '3', 'bless', '4', 'blindness', '5', 'burning hands', '6', 'call lightning', '63', 'cause critical', '62', 'cause light', '64', 'cause serious', '82', 'change sex', '7', 'charm person', '8', 'chill touch', '10', 'colour spray', '57', 'continual light', '11', 'control weather', '12', 'create food', '80', 'create spring', '13', 'create water', '14', 'cure blindness', '15', 'cure critical', '16', 'cure light', '43', 'cure poison', '61', 'cure serious', '17', 'curse', '18', 'detect evil', '44', 'detect hidden', '19', 'detect invis', '20', 'detect magic', '21', 'detect poison', '22', 'dispel evil', '59', 'dispel magic', '23', 'earthquake', '24', 'enchant weapon', '25', 'energy drain', '72', 'faerie fire', '73', 'faerie fog', '26', 'fireball', '65', 'flamestrike', '56', 'fly', '83', 'gate', '39', 'giant strength', '27', 'harm', '28', 'heal', '53', 'identify', '77', 'infravision', '29', 'invis', '58', 'know alignment', '30', 'lightning bolt', '31', 'locate object', '32', 'magic missile', '69', 'mass invis', '74', 'pass door', '33', 'poison', '34', 'protection', '81', 'refresh', '35', 'remove curse', '36', 'sanctuary', '67', 'shield', '37', 'shocking grasp', '38', 'sleep', '66', 'stone skin', '40', 'summon', '2', 'teleport', '41', 'ventriloquate', '68', 'weaken', '42', 'word of recall', '200', 'acid breath', '201', 'fire breath', '202', 'frost breath', '203', 'gas breath', '204', 'lightning breath', '609', 'frenzy', '83', 'gate'); }