| #!/usr/bin/perl | |
| use strict; | |
| my $ftext; | |
| my $ifn = $ARGV[0]; | |
| my $ofn = $ifn; | |
| $ofn =~ s/qsg$/decqsg/; | |
| #my $OFH; | |
| ##open $OFH, ">&STDOUT" or die "Can't dup STDOUT: $!"; | |
| #open $OFH, ">$ofn" or die "Can't open $ofn for output: $!"; | |
| { | |
| my $FH; | |
| open $FH, $ifn or die "Unable to open $ifn: $!"; | |
| local $/ = undef; | |
| $ftext = <$FH>; | |
| } | |
| my @chars = split //, $ftext; | |
| my %ht = (); | |
| my $fn; | |
| { | |
| my $tmp_line = ''; | |
| my @out_lines = (); | |
| sub push_char { $tmp_line .= chr $_[0]; } | |
| sub push_line { push @out_lines, $tmp_line; $tmp_line = ''; } | |
| sub get_lines { return @out_lines; } | |
| } | |
| sub getnum { | |
| if ($_[0] =~ /^[0-9]*$/) { return $_[0]; } | |
| die "Bad number format '$_[0]'"; | |
| } | |
| for ($fn = 0; $chars[$fn] ne chr 0; $fn ++) { | |
| push_char (ord $chars[$fn]); | |
| } | |
| push_line(); | |
| for (++ $fn; $chars[$fn] ne chr 0; $fn ++) { | |
| push_char (ord $chars[$fn]); | |
| } | |
| #print $OFH "\n"; | |
| push_line(); | |
| for (++ $fn; $fn < @chars; $fn ++) { | |
| my $n = 255 - ord $chars[$fn]; | |
| if ($n == 0) { | |
| #print $OFH "\n"; | |
| push_line(); | |
| } elsif ($n == 1) { | |
| push_char($n); push_line(); | |
| } else { | |
| #print $OFH chr $n; | |
| push_char($n); | |
| } | |
| #print $OFH chr(255 - ord $chars[$fn]); | |
| } | |
| my @result = get_lines(); | |
| #for (my $n = 0; $n < @result; $n ++) { | |
| # print $n, ": ", $result[$n], "\n"; | |
| #} | |
| my $line_num = 0; | |
| my $table_size; | |
| sub show_result { | |
| for (my $i = 0; $i < @result; $i ++) { | |
| print "$i: $result[$i]\n"; | |
| } | |
| } | |
| if ($ARGV[1] eq '-raw') { | |
| show_result(); die; | |
| } | |
| print "Save version: ", $result[$line_num ++], "\n"; | |
| print "Game File: ", $result[$line_num ++], "\n"; | |
| print "Current room: ", $result[$line_num ++], "\n"; | |
| print "\nTable A (properties?): size $result[$line_num]\n"; | |
| $table_size = getnum($result[$line_num ++]); | |
| for (my $n = 0; $n < $table_size; $n ++) { | |
| print " properties $n: name '", $result[$line_num++], "', data '", $result[$line_num ++], "'\n"; | |
| } | |
| my $s0 = ''; | |
| my $s1 = chr(1); | |
| print "\nTable B (Objects): size $result[$line_num]\n"; | |
| $table_size = getnum($result[$line_num ++]); | |
| for (my $n = 0; $n < $table_size; $n ++) { | |
| #print " Object $n: name '", $result[$line_num ++], "', 1: '", $result[$line_num ++], "', 2: '", $result[$line_num ++], "', 3: '", $result[$line_num ++], "'\n"; | |
| my ($p1, $p2, $t) = ($result[$line_num + 1], $result[$line_num + 2], ''); | |
| if ($p1 eq $s0 && $p2 eq $s0) { $t = 'HI'; } | |
| if ($p1 eq $s0 && $p2 eq $s1) { $t = 'H '; } | |
| if ($p1 eq $s1 && $p2 eq $s0) { $t = 'I '; } | |
| if ($p1 eq $s1 && $p2 eq $s1) { $t = ' '; } | |
| if ($t eq '') { | |
| print " objt $n: name '", $result[$line_num ++], "', 1: '", $result[$line_num ++], "', 2: '", $result[$line_num ++], "', 3: '", $result[$line_num ++], "'\n"; | |
| } else { | |
| print " $t $n: name '", $result[$line_num], "', \tparent '", $result[$line_num + 3], "'\n"; | |
| $line_num += 4; | |
| } | |
| } | |
| print "\nTable C (changed exits): size $result[$line_num]\n"; | |
| $table_size = getnum($result[$line_num ++]); | |
| for (my $n = 0; $n < $table_size; $n ++) { | |
| print " exit $n: '", $result[$line_num ++], "' -> '", $result[$line_num ++], "'\n"; | |
| } | |
| print "\nTable D (Timers): size $result[$line_num]\n"; | |
| $table_size = getnum($result[$line_num ++]); | |
| for (my $n = 0; $n < $table_size; $n ++) { | |
| my $state = ''; | |
| if ($result[$line_num+1] eq $s0) { $state = 'ON'; } | |
| elsif ($result[$line_num+1] eq $s1) { $state = 'OFF'; } | |
| else { $state = "state $result[$line_num+1]"; } | |
| print " Timer $n: $result[$line_num] ($state), interval $result[$line_num+2]s, remaining time $result[$line_num+3]\n"; | |
| #print " ???? $n: '", $result[$line_num ++], "' '", $result[$line_num++], | |
| # "', '", $result[$line_num ++], "', '", $result[$line_num ++], "'\n"; | |
| $line_num += 4; | |
| } | |
| print "\nTable E (string variables): size $result[$line_num]\n"; | |
| $table_size = getnum($result[$line_num ++]); | |
| for (my $n = 0; $n < $table_size; $n ++) { | |
| print " variable $n: name: '", $result[$line_num ++], "', "; | |
| my $ts1 = getnum($result[$line_num ++]); | |
| #if ($ts1 > 0) { | |
| # print "subsize ($ts1): ["; | |
| # for (my $m = 0; $m < $ts1; $m ++) { | |
| # print "'", $result[$line_num ++], "', "; | |
| # } | |
| # print "] "; | |
| #} | |
| #print "value: '", $result[$line_num ++], "'\n"; | |
| if ($ts1 > 0) { | |
| my $i; | |
| for ($i = 0; $i < $ts1; $i ++) { | |
| print "$i -> '", $result[$line_num ++], "', "; | |
| } | |
| print "$i -> "; | |
| } | |
| print "'", $result[$line_num ++], "'\n"; | |
| } | |
| print "\nTable F (numeric variables): size $result[$line_num]\n"; | |
| $table_size = getnum($result[$line_num ++]); | |
| for (my $n = 0; $n < $table_size; $n ++) { | |
| print " statvar $n: name: '", $result[$line_num ++], "', "; | |
| my $ts1 = getnum ($result[$line_num ++]); | |
| if ($ts1 > 0) { | |
| print "subsize ($ts1): ["; | |
| for (my $m = 0; $m < $ts1; $m ++) { | |
| print "'", $result[$line_num ++], "', "; | |
| } | |
| print "] "; | |
| } | |
| print "value: '", $result[$line_num ++], "'\n"; | |
| } | |
| if ($line_num < @result) { | |
| print "\nExcess:\n"; | |
| while ($line_num < @result) { | |
| print "$line_num: '", $result[$line_num ++], "'\n"; | |
| } | |
| } | |
Xet Storage Details
- Size:
- 5.02 kB
- Xet hash:
- 9fd7bb9d373cbf227853634355d121f5f001d4c919a01b18cd8ef932673decb6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.