#!/usr/bin/perl open LEVEL, "<00.lfl"; read LEVEL, $level, 1024*1024; $level =~ s/(.)/chr(ord($1)^0xff)/egs; close LEVEL; # skip objects $n = unpack "v", substr($level, 2,2); $level = substr($level, 4+$n); #skip unknowns $n = unpack "c", substr($level, 0, 1); $level = substr $level,1+3*$n; #skip costumes $n = unpack "c", substr($level, 0, 1); $level = substr $level,1+3*$n; #read scripts $n = (unpack "c", substr($level, 0, 1)) &0xff; $level = substr $level,1; for ($i = 0; $i < $n; $i++) { $roomoffs[$i] = [ord(substr($level, $i,1))&0xff, unpack "v", substr($level, $n+2*$i, 2) ]; print "Skript $i: ",join ':',@{$roomoffs[$i]},"\n"; } require "parsescript.pl"; if (!@ARGV) { @list = ( 1..($n-1)); } else { @list = @ARGV; } for $i (@list) { my ($lvl,$off) = @{$roomoffs[$i]}; next if $lvl == 255; open LEVEL, sprintf("<%02d.lfl", $lvl); read LEVEL, $level, 1024*1024; $level =~ s/(.)/chr(ord($1)^0xff)/egs; close LEVEL; $level = substr $level, $off; $len = unpack("v", $level) &0xffff; printf "\n$i, $lvl, %04x\n",$off; parse_script(substr($level, 4, $len-4)); }