bwatford wrote:We have figured out how to make the first chapter right out a code that would be required to be input by the player for the next chapter to start.
#!/usr/bin/perl
use strict;
my $ftext;
my $ifn = $ARGV[0];
{
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]);
}
push_line();
for (++ $fn; $fn < @chars; $fn ++) {
my $n = 255 - ord $chars[$fn];
if ($n == 0) {
push_line();
} elsif ($n == 1) {
push_char($n); push_line();
} else {
push_char($n);
}
}
my @result = get_lines();
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 ++) {
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";
$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) {
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";
}
}
Save version: QUEST300
Game File: F:\Program Files\Quest\hungry goblin.cas
Current room: swamp 8
Table A (properties?): size 17
properties 0: name 'worm', data 'properties hidden'
properties 1: name 'game', data 'properties found meat'
properties 2: name 'venison', data 'properties not hidden'
properties 3: name 'game', data 'properties stolen'
properties 4: name 'venison', data 'properties hidden'
properties 5: name 'game', data 'properties trollhere'
properties 6: name 'game', data 'properties trollhere'
properties 7: name 'game', data 'properties trollhere'
properties 8: name 'game', data 'properties trollhere'
properties 9: name 'game', data 'properties trollhere'
properties 10: name 'game', data 'properties trollhere'
properties 11: name 'game', data 'properties trollhere'
properties 12: name 'game', data 'properties trollhere'
properties 13: name 'game', data 'properties trollhere'
properties 14: name 'game', data 'properties trollhere'
properties 15: name 'game', data 'properties not trollhere'
properties 16: name 'biscuit', data 'properties hidden'
Table B (Objects): size 52
I 0: name 'game', parent ''
HI 1: name 'den', parent ''
HI 2: name 'tunnel', parent ''
HI 3: name 'cave entrance, by a swamp', parent ''
HI 4: name 'swamp', parent ''
HI 5: name 'in the log', parent ''
HI 6: name 'swamp 7', parent ''
HI 7: name 'swamp 16', parent ''
HI 8: name 'swamp 12', parent ''
HI 9: name 'swamp 1', parent ''
HI 10: name 'swamp 2', parent ''
HI 11: name 'swamp 3', parent ''
HI 12: name 'swamp 4', parent ''
HI 13: name 'swamp 5', parent ''
HI 14: name 'swamp 6', parent ''
HI 15: name 'swamp 8', parent ''
HI 16: name 'swamp 9', parent ''
HI 17: name 'swamp 10', parent ''
HI 18: name 'swamp 11', parent ''
HI 19: name 'swamp 13', parent ''
HI 20: name 'swamp 14', parent ''
HI 21: name 'swamp 15', parent ''
HI 22: name 'swamp 17', parent ''
HI 23: name 'swamp 18', parent ''
HI 24: name 'swamp 19', parent ''
HI 25: name 'swamp 20', parent ''
HI 26: name 'swamp 21', parent ''
HI 27: name 'swamp 22', parent ''
HI 28: name 'swamp 23', parent ''
HI 29: name 'swamp bank', parent ''
HI 30: name 'room 0', parent ''
HI 31: name 'path', parent ''
HI 32: name 'square', parent ''
HI 33: name 'outside jester', parent ''
HI 34: name 'tavern', parent ''
H 35: name 'worm', parent 'inventory'
36: name 'stick', parent 'inventory'
37: name 'dragon-slayer', parent 'cave entrance, by a swamp'
38: name 'campfire', parent 'cave entrance, by a swamp'
H 39: name 'venison', parent 'inventory'
H 40: name 'slayer2', parent 'cave entrance, by a swamp'
H 41: name 'pliers', parent 'cave entrance, by a swamp'
42: name 'log', parent 'swamp'
H 43: name 'biscuit', parent 'inventory'
44: name 'string', parent 'inventory'
45: name 'troll', parent 'swamp 18'
46: name 'pebble', parent 'swamp 14'
47: name 'dead troll', parent 'room 0'
48: name 'tooth', parent 'room 0'
49: name 'necklace', parent 'room 0'
50: name 'necklace (worn)', parent 'room 0'
51: name 'jester sign', parent 'outside jester'
Table C (changed exits): size 0
Table D (Timers): size 0
Table E (string variables): size 16
variable 0: name: 'quest.currentroom', 'swamp 8'
variable 1: name: 'quest.formatroom', 'a swamp'
variable 2: name: 'quest.objects', ''
variable 3: name: 'quest.formatobjects', ''
variable 4: name: 'quest.doorways.out', ''
variable 5: name: 'quest.doorways.out.display', ''
variable 6: name: 'quest.doorways.dirs', '|bnorth|xb, |bsouth|xb, |beast|xb, |bwest|xb, |bnortheast|xb, |bnorthwest|xb, |bsoutheast|xb or |bsouthwest|xb'
variable 7: name: 'quest.doorways.places', ''
variable 8: name: 'quest.lookdesc', 'More yellow pong. More stunted trees.' variable 9: name: 'quest.characters', ''
variable 10: name: 'quest.originalcommand', 'save'
variable 11: name: 'quest.command', 'save'
variable 12: name: 'quest.lastobject', 'stick'
variable 13: name: 'quest.error.article', 'it'
variable 14: name: 'food', 'biscuit'
variable 15: name: 'hidingplace', 'log'
Table F (numeric variables): size 2
statvar 0: name: 'tummy', value: '97'
statvar 1: name: 'trolltimer', value: '10'