From 34c94318a5168179028b6f63a3a7b7080a2edc2a Mon Sep 17 00:00:00 2001 From: Kiyoshi Aman Date: Tue, 23 Oct 2018 13:05:51 -0500 Subject: [PATCH] smeargle: Add flag for outputting tilemaps in little-endian format. --- readme.txt | 3 ++- smeargle/game.py | 3 ++- smeargle/script.py | 22 +++++++++++++++++++--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/readme.txt b/readme.txt index 4bcef39..9601bbb 100644 --- a/readme.txt +++ b/readme.txt @@ -39,7 +39,8 @@ in each object or array. "tile_offset": 256, // Optional: Constant to add to tile index (first tile: 0x0000 + 256 = 0x0100) "raw_fn": "ex_raw.png", // Optional: Output filename for raw graphic tile data. "deduped_fn": "ex_comp.png", // Optional: Output filename for deduped tile data. - "tilemap_fn": "example.tbl" // Optional: Output filename for tilemap text. + "tilemap_fn": "example.tbl", // Optional: Output filename for tilemap text. + "little_endian": false // Optional: Output tilemap in little-endian format. } } } diff --git a/smeargle/game.py b/smeargle/game.py index 3c1d7c5..7568c4d 100644 --- a/smeargle/game.py +++ b/smeargle/game.py @@ -38,7 +38,8 @@ class Game: 'leading_zeroes': False, 'raw_fn': None, 'deduped_fn': None, - 'tilemap_fn': None + 'tilemap_fn': None, + 'little_endian': False, } for script, data in self._data['scripts'].items(): diff --git a/smeargle/script.py b/smeargle/script.py index 7dd6a08..123568c 100644 --- a/smeargle/script.py +++ b/smeargle/script.py @@ -33,7 +33,8 @@ class Script: 'leading_zeroes': get_or_default(kwargs, 'leading_zeroes', False), 'raw_fn': get_or_default(kwargs, 'raw_fn', None), 'deduped_fn': get_or_default(kwargs, 'deduped_fn', None), - 'tilemap_fn': get_or_default(kwargs, 'tilemap_fn', None) + 'tilemap_fn': get_or_default(kwargs, 'tilemap_fn', None), + 'little_endian': get_or_default(kwargs, 'little_endian', False), } mint = self._cfg['min_tiles'] maxt = self._cfg['max_tiles'] @@ -155,6 +156,10 @@ class Script: upper_val = int(floor(index / 256)) lower_val = int(index % 256) if upper_val > 0 or self.leading_zeroes is True: + if self._cfg['little_endian']: + temp = upper_val + upper_val = lower_val + lower_val = temp map_idx[data] = "<${:02x}><${:02x}>".format(upper_val, lower_val) else: map_idx[data] = "<${:02x}>".format(lower_val) @@ -163,12 +168,23 @@ class Script: upper_val = int(floor(index / 256)) lower_val = int(index % 256) if upper_val > 0 or self.leading_zeroes is True: + if self._cfg['little_endian']: + temp = upper_val + upper_val = lower_val + lower_val = temp map_idx[data] = "{:02x}{:02x}".format(upper_val, lower_val) else: map_idx[data] = "{:02x}".format(lower_val) else: - if self.leading_zeroes: - map_idx[data] = '0x{:04x}'.format(unique + self.tile_offset) + index = unique + self.tile_offset + upper_val = int(floor(index / 256)) + lower_val = int(index % 256) + if upper_val > 0 or self.leading_zeroes is True: + if self._cfg['little_endian']: + temp = upper_val + upper_val = lower_val + lower_val = temp + map_idx[data] = '0x{:02x}{:02x}'.format(upper_val, lower_val) else: map_idx[data] = '0x{:02x}'.format(unique + self.tile_offset) unique += 1