parse-wormedit: silence switch feature warnings This fine v5.10 feature causes Perl v5.18 and later to complain. Keep it since it remains the best solution imho and is unlikely to break anytime soon.
parse-wormedit: level rendering If --render is given, outputs an approximate drawing of all singleplayer levels. The result is not an exact representation: slopes may be drawn slightly differently because Imager::Draw is used for simplicity. To write directly to a file, --output can be given. Its file name extension determines the format (.txt and .yaml for default and raw output, anything else will be parsed by Imager::Files, which supports most common image types).
relicense under the GPL version 3 Make it proper and full open source, instead of those overly protective restrictions (out of fear for childish rebranding, but unlikely to help in such cases). Not that relevant anymore with current platform popularity, but copyleft it just in case.
parse-wormedit: peaworm level variant for v90 strings The earliest level strings have peaworm levels distinct from multiplayer levels (i.e. declares 1 worm position instead of 4). Leave out unsupported level variants in normal output, because having a 'Peaworm (invalid)' for modern versions would be confusing (and it's only obvious to leave out undefined data).
Parse::Binary::Nested: simple non-OO unpackf Make the unpackf method callable without an object, taking a template array instead. This turns it into a simple superset of CORE::unpack() for most usage. The object-oriented syntax is still supported for reusable parsing (saves reparsing the template on each call, so should also be slightly faster).
Parse::Binary::Nested: track parsed bytes Reparse template values ourself, in order to: - Put multiple data in a single value (for example 'CC' will return an array with the two bytes, instead of screwing up all following elements); - Know the amount of bytes read, allowing the current position to be returned by the special '=.' declaration. Also, the special case 'Ca$NUM' is now to be given as 'C/a$NUM'. This solution should be much better (logically combines C/a and a$NUM) and unambiguous (this syntax is invalid with CORE::unpack, so no unexpected results).
parse-wormedit: declare hardcoded bytes in unpackf template Recognise a new template value '=$N' (where $N is any number) in Parse::Binary::Nested to insert a hardcoded value instead of reading it. This allows object structures of v90 files without type declarations to be returned in the same format as newer versions. Still requires some custom merging of the multiple arrays afterwards, but this may be solved later on.