parse-wormedit: containing row for finish data
authorMischa Poslawsky <wormy@shiar.org>
Sun, 1 Mar 2009 15:25:15 +0000 (16:25 +0100)
committerMischa Poslawsky <wormy@shiar.org>
Mon, 2 Mar 2009 21:42:36 +0000 (22:42 +0100)
Put various data related to episode completion in a single hash
container.

parse-wormedit

index 8c2f2c9b56db6fc2ffdd4f220749a448a704394e..6eb79156a24f26eb4113924624168b095d2a9df0 100755 (executable)
@@ -54,9 +54,11 @@ my @FORMAT = (
        sprite     => ['8C',
                line => 'B8',
        ],
-       endtype     => 's',
-       endstr      => 'Ca255',
-       enddata     => 'Ca255x256',
+       finish      => [1,
+               type    => 's',
+               message => 'Ca255',
+               code    => 'Ca255x256',
+       ],
        hiname      => 'a3',
        levels      => ['*', # levelcount->total actually
                id         => 'Ca22',
@@ -116,7 +118,7 @@ sub read {
                        $version = 94;
                }
                elsif (ord substr($input, 147, 1) == 0) {
-                       # nul of end type is 2 bytes later (unlike first char of endstr)
+                       # nul of finish type is 2 bytes later (unlike first char of message)
                        $version = 96;
                }
                warn "Ambiguous file version 95; guessing subversion $version\n";
@@ -126,7 +128,7 @@ sub read {
        given ($fileversion) {
                when (153) { } # current @FORMAT
                        $FORMAT[7] = 'Ca64'; # no reserved space after description
-                       $FORMAT[19] = 'Ca255'; # enddata
+                       $FORMAT[15]->[-1] = 'Ca255'; # enddata
                        $FORMAT[-1]->[-1]->[0] = '32C'; # less objects
                when ($version == 96) {
                        ref $_ and $_->[-1] = 'C' for @{ $FORMAT[11] }; # 9 moderefs
@@ -135,10 +137,10 @@ sub read {
                        splice @FORMAT, 6, 2 if $version <= 94;  # earlier version without description
                when (95) { }
                        splice @{ $FORMAT[7] }, 4, 2;  # no race
-                       splice @FORMAT, 16, 2; # no enddata
+                       splice @{ $FORMAT[13] }, 4, 2; # no enddata
                        splice @{ $FORMAT[-1] }, 1, 2; # no name
                when (94) { }
-                       splice @FORMAT, 16, 2; # no hiname
+                       splice @FORMAT, 14, 2; # no hiname
                        $FORMAT[-1]->[0] = 64; # constant amount of levels
                when (93) { }
                default {
@@ -230,7 +232,7 @@ sub read {
                        x => 'C',
                ],
                #levels
-               #enddata
+               #finish code
                #levels-multi
                #hinames
        );
@@ -323,7 +325,7 @@ sub read {
                $data->{moderef}->{end}->{tron},        # idem for tron
        );
        $data->{hinames} = [ unpack '(x2a3)*', substr($data->{leveldata}, -5 * $slots) ];
-       $data->{enddata} = substr delete($data->{leveldata}), $offset, -5 * $slots; #XXX
+       $data->{finish}->{code} = substr delete($data->{leveldata}), $offset, -5 * $slots; #XXX
        $data->{format} = '86s';
        return $data;
 }
@@ -478,9 +480,11 @@ else {
                print "\n";
                printf("-- %-21s%4s: %s (%s)\n",
                        '(ending)',
-                       defined $data->{enddata} ? length $data->{enddata} : '?',
-                       defined $data->{endtype} ? $ENDTYPE[$data->{endtype}] || 'unknown' : 'code',
-                       $data->{endstr} // '?',
+                       defined $data->{finish}->{code}
+                               ? length $data->{finish}->{code} : '?',
+                       defined $data->{finish}->{type}
+                               ? $ENDTYPE[$data->{finish}->{type}] || 'unknown' : 'code',
+                       $data->{finish}->{message} // '?',
                ) if $variant eq 'single';
        }
 }