#!/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; }