papermario/tools/splat_ext/pm_charset_palettes.py
Ethan Roseman 73af4eb5a0
Tables & Chairs (sorry no chairs actually) (#800)
* git subrepo pull --force tools/splat

subrepo:
  subdir:   "tools/splat"
  merged:   "ec7bd4868e"
upstream:
  origin:   "https://github.com/ethteck/splat.git"
  branch:   "master"
  commit:   "ec7bd4868e"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* wips

* more

* wipperz

* it workz

* mdl_make_local_vertex_copy

* sleep_bubble finished + gfx

* fire_breath gfx

* func_800F0490

* func_800EFE2C

* 8a860 funcs

* cleanup + dead cod

* dead clean

* git subrepo pull --force tools/splat

subrepo:
  subdir:   "tools/splat"
  merged:   "a1730f38ad"
upstream:
  origin:   "https://github.com/ethteck/splat.git"
  branch:   "master"
  commit:   "a1730f38ad"
git-subrepo:
  version:  "0.4.5"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "aa416e4"

* cleanup + splat prep

* git subrepo pull --force tools/splat

subrepo:
  subdir:   "tools/splat"
  merged:   "4e5fca24a5"
upstream:
  origin:   "https://github.com/ethteck/splat.git"
  branch:   "master"
  commit:   "4e5fca24a5"
git-subrepo:
  version:  "0.4.5"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "aa416e4"

* bits

* clean

* bss c -> asm

* btl_update_starpoints_display

* is_debug + cleanup

* load_script / 190B20 data

* all the symz

* clean

* cleanup + stuff
2022-10-04 23:09:23 +09:00

51 lines
1.5 KiB
Python

from segtypes.n64.segment import N64Segment
from segtypes.n64.palette import iter_in_groups
from util.color import unpack_color
from util import options
import png
def parse_palette(data):
palette = []
for a, b in iter_in_groups(data, 2):
palette.append(unpack_color([a, b]))
return palette
class N64SegPm_charset_palettes(N64Segment):
require_unique_name = False
def scan(self, rom_bytes):
data = rom_bytes[self.rom_start:self.rom_end]
# pm_charset sibling
self.sibling = next(filter(lambda s: s.type == "pm_charset" and s.name == self.name, self.parent.subsegments))
self.palettes = []
for i in range(0, self.size, 0x10):
palette = parse_palette(data[i : i + 0x10])
self.palettes.append(palette)
def split(self, rom_bytes):
fs_dir = options.opts.asset_path / self.dir / self.name / "palette"
fs_dir.mkdir(parents=True, exist_ok=True)
for i, palette in enumerate(self.palettes):
raster = self.sibling.rasters[0]
w = png.Writer(self.sibling.width, self.sibling.height, palette=palette)
with open(fs_dir / f"{i:02X}.png", "wb") as f:
w.write_array(f, raster)
def get_linker_entries(self):
from segtypes.linker_entry import LinkerEntry
fs_dir = options.opts.asset_path / self.dir / self.name / "palette"
return [LinkerEntry(
self,
[fs_dir / f"{i:02X}.png" for i in range(self.yaml[3])],
fs_dir.with_suffix(".dat"), ".data"),
]