#!/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"; } %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'); undef @Exits; open (FILE, "$filein")||die("Can't open input file\n"); $pointer = -100; $a = 0; $last = 0; print "$filein\n"; while ($last == 0) { while (fread_letter() ne '#') # {fread_to_eol();} {print $pointer, " none\n";} print $pointer, "\n"; $atype = fread_word(); print $atype, "\n"; 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; 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; for ($i = 0; $i < 111; $i++) { $mlev{$i} = 0; } foreach $vnum (sort bynum(keys(%m_name))) { if (!defined($m_shopkeep{$vnum})) { $tmp = int($m_level{$vnum}); $mlev{$tmp}++; } } open(OUT, ">rot.levels"); for ($i = 1; $i < 111; $i+=2) { $j = $i+1; print OUT "$i\t$mlev{$i}\t\t$j\t$mlev{$j}\n"; } close OUT; print "The following external exits were found:\n"; foreach $tmp (sort(@Exits)) { print "\t$tmp\n"; } exit; sub fread_area { print "Reading AREA\n"; $areatype = fread_string(); $areafile = fread_string(); $title = fread_string(); $levels = fread_levels(); $author = sprintf("%-7s", fread_word()); fread_to_eol(); $minvnum = fread_number(); $maxvnum = fread_number(); @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"; } $m_aff{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tshields\n"; } $m_shd{$vnum} = fread_flag(); if (defined($debug)) { print "\t\talignment\n"; } $m_align{$vnum} = fread_number(); if (defined($debug)) { print "\t\tgroup\n"; } $m_group{$vnum} = fread_number(); 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} = fread_word(); 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} = fread_word(); if (defined($debug)) { print "\t\tdefault position\n"; } $m_pos2{$vnum} = fread_word(); if (defined($debug)) { print "\t\tsex\n"; } $m_sex{$vnum} = fread_word(); if (defined($debug)) { print "\t\ttreasure\n"; } $m_gold{$vnum} = fread_number(); 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} = fread_word(); 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 'D') { if (defined($debug)) { print "\t\t\tdeath message\n"; } $m_death{$vnum} = fread_string(); next; } if ($tmp eq 'T') { if (defined($debug)) { print "\t\t\tgreet message\n"; } $m_greet{$vnum} = fread_string(); next; } if ($tmp eq 'C') { if (defined($debug)) { print "\t\t\tclan\n"; } $m_clan{$vnum} = fread_string(); 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_clan{$vnum})) { print OUT "C $m_clan{$vnum}~\n"; } if (defined($m_death{$vnum})) { print OUT "D $m_death{$vnum}~\n"; } if (defined($m_greet{$vnum})) { print OUT "T $m_greet{$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} = fread_word(); 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_word(); $o_v1{$vnum} = fread_word(); $o_v2{$vnum} = fread_word(); $o_v3{$vnum} = fread_word(); $o_v4{$vnum} = fread_word(); 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(); 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 'C') { if (defined($debug)) { print "\t\t\tclan\n"; } $o_clan{$vnum} = fread_string(); next; } if ($tmp eq 'G') { if (defined($debug)) { print "\t\t\tguild\n"; } $o_guild{$vnum} = fread_string(); 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; } } elsif ($o_type{$vnum} eq "weapon") { ($dice,$sides)=split(' ', $weapdice{$level}); $o_v1{$vnum} = $dice; $o_v2{$vnum} = $sides; } 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"; if (defined($o_clan{$vnum})) { print OUT "C $o_clan{$vnum}~\n"; } if (defined($o_guild{$vnum})) { print OUT "G $o_guild{$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(); if (($r_doorto{$tmp} < $minvnum) || ($r_doorto{$tmp} > $maxvnum)) { $temp = "${vnum} -> ${dir} -> $r_doorto{$tmp}"; push(@Exits, $temp); } } } } 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}"; if ($r_doorlook{$tmp} eq "") { print OUT "~\n"; } else { $btmp = $r_doorlook{$tmp}; $ctmp = chop($btmp); if ($ctmp eq "\n") { print OUT "~\n"; } else { print OUT "\n~\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_mana{$vnum} H $r_heal{$vnum}\n"; } else { print OUT "M $r_mana{$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 ($rm_glob{$rm} == 0) { $rm_glob{$rm} = -1; } if (defined($debug)) { print "\t\tmob to_room\n"; } $rm_room{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob local limit\n"; } $rm_local{$rm} = fread_number(); if ($rm_local{$rm} == 0) { $rm_local{$rm} = -1; } } 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(); $rp_p1{$rp} = 1; 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} = 1; 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} = fread_number(); $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 ($rg_p1{$rg} == 0) { $rg_p1{$rg} = 1; } 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(); if ($rg_limit{$rg} == 0) { $rg_limit{$rg} = -1; } $rg_inc{$rg} = $inc; } elsif ($type eq 'E') { $re++; if (defined($debug)) { print "\t\tplaceholder\n"; } $re_p1{$re} = fread_number(); if ($re_p1{$re} == 0) { $re_p1{$re} = 1; } 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 ($re_limit{$re} == 0) { $re_limit{$re} = -1; } 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; } print OUT "M $rm_p1{$rm} $rm_vnum{$rm} $rm_glob{$rm} $rm_room{$rm} $rm_local{$rm}"; $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) { $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } $m_shopkeep{$vnum} = "yes"; 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; }