#!/usr/local/bin/perl require "fread.pl"; require "defaults.pl"; init_flags(); $filein = $ARGV[0]; $fileout = $ARGV[1]; $levtim = 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[2]) && ($ARGV[2] eq "x2")) { $levtim = 2; } } if (defined($ARGV[3]) && ($ARGV[3] eq "debug")) { $debug = "yes"; } if (defined($ARGV[3]) && ($ARGV[3] eq "x2")) { $levtim = 2; } if (defined($ARGV[4]) && ($ARGV[4] eq "debug")) { $debug = "yes"; } if (open (FILE, "${filein}.mob")) { $pointer = 0; $a = 0; $last = 0; $eof = fread_length(); fread_mobiles(); close FILE; } if (open (FILE, "${filein}.obj")) { $pointer = 0; $a = 0; $last = 0; $eof = fread_length(); fread_objects(); close FILE; } if (open (FILE, "${filein}.wld")) { $pointer = 0; $a = 0; $last = 0; $eof = fread_length(); fread_rooms(); close FILE; } if (open (FILE, "${filein}.zon")) { $pointer = 0; $a = 0; $last = 0; $eof = fread_length(); fread_area(); $eof = fread_length(); fread_resets(); close FILE; } else { print "No ${filein}.zon found.\n"; exit; } if (open (FILE, "${filein}.shp")) { $pointer = 0; $a = 0; $last = 0; $eof = fread_length(); fread_shops(); 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; } $minlevel = 110; $maxlevel = 0; foreach $tmp (sort(keys(%m_name))) { if ($m_level{$tmp} < $minlevel) { $minlevel = $m_level{$tmp}; } if ($m_level{$tmp} > $maxlevel) { $maxlevel = $m_level{$tmp}; } } 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 ZONE\n"; $levels = fread_word(); $author = sprintf("%-7s", " "); $title = fread_string(); @Filepath = split(/\//, $fileout); $outfilename = $Filepath[$#Filepath]; fread_number(); fread_number(); fread_number(); return; } sub write_area { print "Writing AREA\n"; print OUT "#AREA\nROT v1.5 format~\n${outfilename}~\n"; print OUT $title, "~\n"; $levels = sprintf("{%.2d %.2d}", $minlevel, $maxlevel); print OUT "$levels $author $title~\n"; print OUT "$minvnum $maxvnum\n"; return; } sub fread_mobiles { print "Reading MOBILES\n"; $vnum = 1; while ($vnum != 0) { if (fread_to_next() eq "EOF") { $vnum = 0; next; } if (fread_letter() ne '#') { fread_to_eol(); $vnum = 1; next; } $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\tact\n"; } $tmp = fread_flag(); $m_act{$vnum} = ""; foreach $temp (split('',$tmp)) { if (defined($mobact{$temp})) { $m_act{$vnum} .= $mobact{$temp}; } } if ($m_act{$vnum} eq "") { $m_act{$vnum} = "0"; } 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\t\tEOL\n"; } fread_to_eol(); if (defined($debug)) { print "\t\tlevel\n"; } $m_level{$vnum} = fread_number(); $level = int($m_level{$vnum}); $level *= $levtim; $level += $levch; if ($level > 110) { $level = 110; } if ($level < 0) { $level = 0; } $m_level{$vnum} = $level; if (defined($debug)) { print "\t\tThac0\n"; } fread_number(); $m_hr{$vnum} = 0; if (defined($debug)) { print "\t\tAC\n"; } $m_ac{$vnum} = -(fread_number()); if (defined($debug)) { print "\t\thit dice\n"; } $m_hdice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tdamage dice\n"; } $m_ddice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tgold\n"; } $m_gold{$vnum} = fread_number(); if (defined($debug)) { print "\t\texp\n"; } $m_exp{$vnum} = fread_number(); if (defined($debug)) { print "\t\tposition\n"; } $m_posloa{$vnum} = $positions[fread_number()]; $m_posdef{$vnum} = $positions[fread_number()]; $m_rac{$vnum} = "human"; if (defined($debug)) { print "\t\tsex\n"; } $m_sex{$vnum} = $sexes[fread_number()]; } 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} 0\n"; print OUT "$level 0 $mobhp{$level} "; print OUT "$mobhp{$level} $mobdm{$level} none\n"; $mobac = $ac{$level}; $mobexotic = $mobac + 4; print OUT "$mobac $mobac $mobac $mobexotic\n"; print OUT "0 0 0 0\n"; print OUT "$m_posloa{$vnum} $m_posdef{$vnum} $m_sex{$vnum} $m_gold{$vnum}\n"; print OUT "0 0 medium 0\n"; } print OUT "#0\n"; return; } sub fread_objects { print "Reading OBJECTS\n"; $vnum = 1; while ($vnum != 0) { if (fread_to_next() eq "EOF") { $vnum = 0; next; } if (fread_letter() ne '#') { fread_to_eol(); $vnum = 1; next; } $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\taction\n"; } 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-V3\n"; } $o_v0{$vnum} = fread_number(); $o_v1{$vnum} = fread_number(); $o_v2{$vnum} = fread_number(); $o_v3{$vnum} = fread_number(); if (defined($debug)) { print "\t\tweight\n"; } $o_weight{$vnum} = fread_number(); if (defined($debug)) { print "\t\tcost\n"; } $o_cost{$vnum} = fread_number(); if (defined($debug)) { print "\t\tcost-per-day\n"; } $o_cpd{$vnum} = fread_number(); $o_level{$vnum} = "1"; $lastline = 0; $extrapoint = 0; $applypoint = 0; while ($lastline == 0) { if (defined($debug)) { print "\t\tExtras:\n"; } if ($pointer+1 >= $eof) { $lastline = 1; next; } $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"; } } } 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 "none~\n"; print OUT "$o_type{$vnum} $o_extra{$vnum} $o_wear{$vnum}\n"; if (($o_type{$vnum} eq "light") || ($o_type{$vnum} eq "money")) { print OUT "$o_v0{$vnum} $o_v1{$vnum} "; print OUT "$o_v2{$vnum} $o_v3{$vnum} 0\n"; } elsif (($o_type{$vnum} eq "key") || ($o_type{$vnum} eq "boat") || ($o_type{$vnum} eq "treasure") || ($o_type{$vnum} eq "trash")) { $o_level{$vnum} = 1; print OUT "0 0 0 0 0\n"; } elsif (($o_type{$vnum} eq "scroll") || ($o_type{$vnum} eq "potion")) { $level = 1; $o_level{$vnum} = 1; $o_v0{$vnum} *= $levtim; $o_v0{$vnum} += $levch; if ($o_v0{$vnum} > 110) { $o_v0{$vnum} = 110; } if ($o_v0{$vnum} < 0) { $o_v0{$vnum} = 0; } print OUT "$o_v0{$vnum} "; if (defined($objspell{$o_v1{$vnum}})) { print OUT "'$objspell{$o_v1{$vnum}}' "; } else { print OUT "'' "; } if (defined($objspell{$o_v2{$vnum}})) { print OUT "'$objspell{$o_v2{$vnum}}' "; } else { print OUT "'' "; } if (defined($objspell{$o_v3{$vnum}})) { print OUT "'$objspell{$o_v3{$vnum}}' ''\n"; } else { print OUT "'' ''\n"; } } elsif (($o_type{$vnum} eq "wand") || ($o_type{$vnum} eq "staff")) { $o_v0{$vnum} *= $levtim; $o_v0{$vnum} += $levch; if ($o_v0{$vnum} > 110) { $o_v0{$vnum} = 110; } if ($o_v0{$vnum} < 0) { $o_v0{$vnum} = 0; } print OUT "$o_v0{$vnum} $o_v1{$vnum} $o_v2{$vnum} "; if (defined($objspell{$o_v3{$vnum}})) { print OUT "'$objspell{$o_v3{$vnum}}' 0\n"; } else { print OUT "'' 0\n"; } } elsif ($o_type{$vnum} eq "weapon") { $tmp = ""; foreach $temp (sort(@weapons)) { if (($o_name{$vnum} =~ /$temp/) || ($o_short{$vnum} =~ /$temp/) || ($o_long{$vnum} =~ /$temp/)) { $tmp = $temp; } } if ($tmp ne "") { $o_v0{$vnum} = $tmp; } else { if ($o_v3{$vnum} == 7) { $o_v0{$vnum} = "mace"; } elsif ($o_v3{$vnum} == 2) { $o_v0{$vnum} = "sword"; } elsif ($o_v3{$vnum} == 11) { $o_v0{$vnum} = "dagger"; } elsif ($o_v3{$vnum} == 2) { $o_v0{$vnum} = "whip"; } elsif ($o_v3{$vnum} == 6) { $o_v0{$vnum} = "flail"; } else { $o_v0{$vnum} = "exotic"; } } if ($o_v2{$vnum} < 1) { $o_v2{$vnum} = 1; } if ($o_v1{$vnum} < 1) { $o_v1{$vnum} = 1; } print OUT "$o_v0{$vnum} $weapdice{$level} "; print OUT $dtypes[$o_v3{$vnum}], " 0\n"; } elsif ($o_type{$vnum} eq "armor") { print OUT "$objac{$level} "; print OUT "$objac{$level} "; print OUT "$objac{$level} "; $tmp = $objac{$level} - 4; if ($tmp < 0) { $tmp = 0; } print OUT "$tmp 0\n"; } elsif ($o_type{$vnum} eq "container") { $o_level{$vnum} = 1; print OUT "$o_v0{$vnum} "; $flg = ""; $num = $o_v1{$vnum}; foreach $tmp (reverse(sort(keys(%flag)))) { if ($flag{$tmp} <= $num) { $flg .= $tmp; $num -= $flag{$tmp}; } } if ($flg eq "") { $flg = "0"; } $o_v1{$vnum} = join('', sort(split('', $flg))); print OUT "$o_v1{$vnum} $o_v2{$vnum} $o_v0{$vnum} 100\n"; } elsif ($o_type{$vnum} eq "drink") { $o_level{$vnum} = 1; print OUT "$o_v0{$vnum} $o_v1{$vnum} "; $tmp = $liquids[$o_v2{$vnum}]; if ($o_v2{$vnum} > 15) { $tmp = "water"; } print OUT "'$tmp' $o_v3{$vnum} 0\n"; } elsif ($o_type{$vnum} eq "food") { $o_level{$vnum} = 1; print OUT "$o_v0{$vnum} $o_v0{$vnum} "; print OUT "$o_v2{$vnum} $o_v3{$vnum} 0\n"; } else { print OUT "$o_v0{$vnum} $o_v1{$vnum} "; print OUT "$o_v2{$vnum} $o_v3{$vnum} 0\n"; } print OUT "$o_level{$vnum} $o_weight{$vnum} $o_cost{$vnum} P\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_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) { if (fread_to_next() eq "EOF") { $vnum = 0; next; } if (fread_letter() ne '#') { $vnum = 1; next; } $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"; } $tmp = fread_flag(); $r_flags{$vnum} = ""; foreach $temp (split('',$tmp)) { if (defined($roomf{$temp})) { $r_flags{$vnum} .= $roomf{$temp}; } } if ($r_flags{$vnum} eq "") { $r_flags{$vnum} = "0"; } 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"; } if ($pointer >= $eof) { $lastline = 1; next; } $tmp = fread_letter(); if ($tmp eq '#') { $pointer--; $lastline = 1; next; } if ($tmp eq 'S') { $lastline = 1; 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 < 6; $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"; } } $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 { $rm = 0; $ro = 0; $rp = 0; $rg = 0; $re = 0; $rd = 0; $rr = 0; $inc = 0; while ( ($pointer < $eof) && (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(); $temp = $rm_vnum{$rm}; $tmp = "${temp}:$rm_room{$rm}"; if (!defined($rm_local{$tmp})) { $rm_local{$tmp} = 1; } else { $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(); $rp_p2{$rp} = 0; if (defined($debug)) { print "\t\tput to_object\n"; } $rp_to{$rp} = fread_number(); $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; $tmp = $rm_vnum{$rm}; $temp = $rg_vnum{$rg}; if ((defined($o_level{$temp})) && (defined($m_level{$tmp}))) { $o_level{$temp} = $m_level{$tmp}; } } 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; $tmp = $rm_vnum{$rm}; $temp = $re_vnum{$re}; if ((defined($o_level{$temp})) && (defined($m_level{$tmp}))) { $o_level{$temp} = $m_level{$tmp}; } } 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(); } 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; $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; } 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}"; $tmp = $rm_vnum{$rm}; print OUT "\t\t* $m_short{$tmp}\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) { if (fread_to_next() eq "EOF") { $vnum = 0; next; } if (fread_letter() ne '#') { $vnum = 1; next; } $vnum = fread_string(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\titems x 5\n"; } fread_number(); fread_number(); fread_number(); fread_number(); fread_number(); if (defined($debug)) { print "\t\tsell percent\n"; } $sella1 = fread_number(); fread_letter(); $sella2 = fread_number(); if ($sella2 == 0) { $sellp{$vnum} = int(100 * $sella1); } else { $sellp{$vnum} = int(100 * ($sella1 + (.1 * $sella2))); } if (defined($debug)) { print "\t\tbuy percent\n"; } $buya1 = fread_number(); fread_letter(); $buya2 = fread_number(); if ($buya2 == 0) { $buyp{$vnum} = int(100 * $buya1); } else { $buyp{$vnum} = int(100 * ($buya1 + (.1 * $buya2))); } 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\tsays x 7\n"; } fread_string(); fread_string(); fread_string(); fread_string(); fread_string(); fread_string(); fread_string(); if (defined($debug)) { print "\t\ttempers x 2\n"; } fread_number(); fread_number(); if (defined($debug)) { print "\t\tmob vnum\n"; } $s_vnum{$vnum} = fread_number(); if (defined($debug)) { print "\t\tplaceholder\n"; } fread_number(); if (defined($debug)) { print "\t\troom vnum\n"; } fread_number(); if (defined($debug)) { print "\t\topen 1\n"; } $open1 = fread_number(); if (defined($debug)) { print "\t\tclose 1\n"; } $close1 = fread_number(); if (defined($debug)) { print "\t\topen 2\n"; } $open2 = fread_number(); if (defined($debug)) { print "\t\tclose 2\n"; } $close2 = fread_number(); if ($open1 < $open2) { $open{$vnum} = $open1; } else { $open{$vnum} = $open2; } if ($close1 > $close2) { $close{$vnum} = $close1; } else { $close{$vnum} = $close2; } if ($close{$vnum} == 24) { $close{$vnum} = 23; } } 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 * ", $s_vnum{$vnum}, $sell1{$vnum}, $sell2{$vnum}, $sell3{$vnum}, $sell4{$vnum}, $sell5{$vnum}, $buyp{$vnum}, $sellp{$vnum}, $open{$vnum}, $close{$vnum}); $temp = $s_vnum{$vnum}; if (defined($m_short{$temp})) { $tmp .= $m_short{$temp}; } print OUT $tmp, "\n"; } print OUT "0\n"; return; } sub write_specials { print "Writing SPECIALS\n"; print OUT "\n#SPECIALS\n"; print OUT "S\n"; return; } sub bynum { $a <=> $b; } sub init_flags { @sexes = ('none', 'male', 'female'); @positions = (' ', ' ', ' ', ' ', 'sleep', 'rest', 'sit', ' ', 'stand'); %mobact = ('B', 'B', 'C', 'C', 'D', 'A', 'E', 'S', 'F', 'F', 'G', 'G', 'H', 'H'); %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'); %roomf = ('A', 'A', 'C', 'C', 'D', 'D', 'E', 'S', 'F', 'K', 'J', 'J'); @objects = ('trash', 'light', 'scroll', 'wand', 'staff', 'weapon', 'trash', 'trash', 'treasure', 'armor', 'potion', 'trash', 'trash', 'trash', 'trash', 'container', 'trash', 'drink', 'key', 'food', 'money', 'trash', 'boat', 'trash', 'trash', 'trash', 'trash', 'trash'); @liquids = ('water', 'beer', 'red wine', 'ale', 'dark ale', 'whiskey', 'lemonade', 'firebreather', 'local specialty', 'slime mold juice', 'milk', 'tea', 'coffee', 'blood', 'salt water', 'coke'); @dtypes = ('hit', 'slice', 'stab', 'slash', 'whip', 'claw', 'blast', 'pound', 'crush', 'grep', 'bite', 'pierce', 'suction'); %objspell = ( '1', 'armor', '2', 'teleport', '3', 'bless', '4', 'blindness', '5', 'burning hands', '6', 'call lightning', '7', 'charm person', '8', 'chill touch', '10', 'colour spray', '11', 'control weather', '12', 'create food', '13', 'create water', '14', 'cure blindness', '15', 'cure critical', '16', 'cure light', '17', 'curse', '18', 'detect evil', '19', 'detect invis', '20', 'detect magic', '21', 'detect poison', '22', 'dispel evil', '23', 'earthquake', '24', 'enchant weapon', '25', 'energy drain', '26', 'fireball', '27', 'harm', '28', 'heal', '29', 'invis', '30', 'lightning bolt', '31', 'locate object', '32', 'magic missile', '33', 'poison', '34', 'protection', '35', 'remove curse', '36', 'sanctuary', '37', 'shocking grasp', '38', 'sleep', '39', 'giant strength', '40', 'summon', '41', 'ventriloquate', '42', 'word of recall', '43', 'cure poison', '44', 'detect hidden', '53', 'identify', '56', 'fly', '57', 'continual light', '58', 'know alignment', '59', 'dispel magic', '61', 'cure serious', '62', 'cause light', '63', 'cause critical', '64', 'cause serious', '65', 'flamestrike', '66', 'stone skin', '67', 'shield', '68', 'weaken', '69', 'mass invis', '70', 'acid blast', '72', 'faerie fire', '73', 'faerie fog', '74', 'pass door', '77', 'infravision', '80', 'create spring', '81', 'refresh', '82', 'change sex', '83', 'gate', '200', 'acid breath', '201', 'fire breath', '202', 'frost breath', '203', 'gas breath', '204', 'lightning breath', '609', 'frenzy'); }