From 5f4b0070a6b3a7e1476b196133be392556c14e52 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Fri, 31 Jan 2025 15:48:40 -0600 Subject: [PATCH] add twiddle --- .gitignore | 1 + color_convert.py | 44 +++++++++++++++++++++++------ render_material_textures.py | 56 ++++++++++++++++++++----------------- twiddle.py | 43 ++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 35 deletions(-) create mode 100644 .gitignore create mode 100644 twiddle.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba0430d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__/ \ No newline at end of file diff --git a/color_convert.py b/color_convert.py index b457c68..23aa85c 100644 --- a/color_convert.py +++ b/color_convert.py @@ -2,6 +2,7 @@ import struct import sys from PIL import Image +from twiddle import texture as twiddle_texture class color_format: def gbgr1555(r, g, b, a): # nintendo ds @@ -29,7 +30,7 @@ class color_format: r5 = (r >> 3) & 31 g6 = (g >> 2) & 63 b5 = (b >> 3) & 31 - return (r5 << 11) | (g5 << 5) | (b5 << 0) + return (r5 << 11) | (g6 << 5) | (b5 << 0) def axxx4444(r, g, b, a): a4 = (a >> 4) & 15 @@ -44,12 +45,12 @@ class color_format: ("axxx4444", color_format.axxx4444), ])[s] -def convert_colors(f, convert, colors): +def convert_colors(convert, colors): for color in colors: value = convert(*color) - f.write(struct.pack("> i) & 1) << (i * 2 + 0) + twiddle_ix |= ((x >> i) & 1) << (i * 2 + 1) + elif (i < width_max): + twiddle_ix |= ((x >> i) & 1) << (i + height_max) + elif (i < height_max): + twiddle_ix |= ((y >> i) & 1) << (i + width_max) + else: + break + + return twiddle_ix + +def texture(dst, src, width, height): + for y in range(height): + for x in range(width): + twiddle_ix = from_xy(x, y, width, height) + value = src[y * width + x] + dst[twiddle_ix] = value