From 6d464a6d9b426377a5c1d3157f2775fbe7f7c126 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Thu, 5 Sep 2024 10:39:56 -0500 Subject: [PATCH] texture build process rework --- Makefile | 7 +- arm9/Makefile | 28 +- arm9/examples/majora.c | 180 ++++---- common.mk | 5 +- {models => model}/Makefile | 0 {models => model}/cube.h | 0 {models => model}/cube.obj | 0 {models => model}/icosphere.h | 0 {models => model}/icosphere.obj | 0 {models => model}/majora.h | 86 +--- {models => model}/majora.mtl | 9 - {models => model}/majora.obj | 0 model/material.h | 21 + {models => model}/model.h | 11 - models/generate.py | 1 - {registers => register}/0x04000000.txt | 0 {registers => register}/0x04001000.txt | 0 {registers => register}/Makefile | 0 {registers => register}/csv_input.py | 0 {registers => register}/format.py | 0 {registers => register}/format_bits.py | 0 {registers => register}/generate.py | 0 {registers => register}/generate.sh | 0 .../graphics_engine_bits.ods | Bin {registers => register}/parse.py | 0 {registers => register}/parse_bits.py | 0 registers/graphics_engine_bits.csv | 432 ------------------ res/060067E0.data.pal | Bin 768 -> 0 bytes res/060077E0.data | Bin 256 -> 0 bytes res/060077E0.data.pal | 1 - res/060079E0.data | Bin 256 -> 0 bytes res/060079E0.data.pal | 1 - res/06007BE0.data | Bin 256 -> 0 bytes res/06007BE0.data.pal | 1 - res/06007DE0.data | Bin 256 -> 0 bytes res/06007DE0.data.pal | 1 - res/06007FE0.data.pal | Bin 162 -> 0 bytes res/060087E0.data | Bin 8192 -> 0 bytes res/060087E0.data.h | 5 - res/060087E0.data.pal | Bin 750 -> 0 bytes res/060087E0.data.pal.h | 5 - res/Makefile | 18 - res/binary_image_palette.py | 71 +++ res/bowser.data | Bin 4096 -> 0 bytes res/bowser.data.h | 5 - res/bowser.data.pal | Bin 48 -> 0 bytes res/bowser.data.pal.h | 5 - res/bowser.xcf | Bin 2436 -> 0 bytes res/generate.py | 1 + res/hotaru_futaba.data | Bin 12288 -> 0 bytes res/hotaru_futaba.data.h | 5 - res/hotaru_futaba.data.pal | Bin 48 -> 0 bytes res/hotaru_futaba.data.pal.h | 5 - res/majora.h | 108 +++++ {models => res}/parse_material.py | 0 {models => res}/parse_obj_fixed_point.py | 0 res/path.py | 7 + res/player.data | Bin 384 -> 0 bytes res/player.data.h | 5 - res/player.data.pal | Bin 45 -> 0 bytes res/player.data.pal.h | 5 - res/player.xcf | Bin 1022 -> 0 bytes .../render_obj_fixed_point_c_source.py | 45 -- {models => res}/verify_fixed_point.py | 0 res/vram_allocate_textures.py | 117 +++++ {res => texture}/060067E0.data | Bin {res => texture}/060067E0.data.h | 0 texture/060067E0.data.pal | Bin 0 -> 512 bytes {res => texture}/060067E0.data.pal.h | 0 {res => texture}/060067E0.png | Bin texture/060077E0.data | Bin 0 -> 64 bytes {res => texture}/060077E0.data.h | 0 texture/060077E0.data.pal | 1 + {res => texture}/060077E0.data.pal.h | 0 {res => texture}/060077E0.png | Bin texture/060079E0.data | Bin 0 -> 64 bytes {res => texture}/060079E0.data.h | 0 texture/060079E0.data.pal | 1 + {res => texture}/060079E0.data.pal.h | 0 {res => texture}/060079E0.png | Bin texture/06007BE0.data | Bin 0 -> 64 bytes {res => texture}/06007BE0.data.h | 0 texture/06007BE0.data.pal | 1 + {res => texture}/06007BE0.data.pal.h | 0 {res => texture}/06007BE0.png | Bin texture/06007DE0.data | Bin 0 -> 128 bytes {res => texture}/06007DE0.data.h | 0 texture/06007DE0.data.pal | 1 + {res => texture}/06007DE0.data.pal.h | 0 {res => texture}/06007DE0.png | Bin {res => texture}/06007FE0.data | Bin {res => texture}/06007FE0.data.h | 0 texture/06007FE0.data.pal | Bin 0 -> 108 bytes {res => texture}/06007FE0.data.pal.h | 0 {res => texture}/06007FE0.png | Bin {res => texture}/060087E0.png | Bin texture/bowser.png | Bin 0 -> 1490 bytes texture/player.png | Bin 0 -> 771 bytes texture/texture.mk | 11 + 99 files changed, 448 insertions(+), 758 deletions(-) rename {models => model}/Makefile (100%) rename {models => model}/cube.h (100%) rename {models => model}/cube.obj (100%) rename {models => model}/icosphere.h (100%) rename {models => model}/icosphere.obj (100%) rename {models => model}/majora.h (83%) rename {models => model}/majora.mtl (86%) rename {models => model}/majora.obj (100%) create mode 100644 model/material.h rename {models => model}/model.h (81%) delete mode 120000 models/generate.py rename {registers => register}/0x04000000.txt (100%) rename {registers => register}/0x04001000.txt (100%) rename {registers => register}/Makefile (100%) rename {registers => register}/csv_input.py (100%) rename {registers => register}/format.py (100%) rename {registers => register}/format_bits.py (100%) rename {registers => register}/generate.py (100%) rename {registers => register}/generate.sh (100%) rename {registers => register}/graphics_engine_bits.ods (100%) rename {registers => register}/parse.py (100%) rename {registers => register}/parse_bits.py (100%) delete mode 100644 registers/graphics_engine_bits.csv delete mode 100644 res/060067E0.data.pal delete mode 100644 res/060077E0.data delete mode 100644 res/060077E0.data.pal delete mode 100644 res/060079E0.data delete mode 100644 res/060079E0.data.pal delete mode 100644 res/06007BE0.data delete mode 100644 res/06007BE0.data.pal delete mode 100644 res/06007DE0.data delete mode 100644 res/06007DE0.data.pal delete mode 100644 res/06007FE0.data.pal delete mode 100644 res/060087E0.data delete mode 100644 res/060087E0.data.h delete mode 100644 res/060087E0.data.pal delete mode 100644 res/060087E0.data.pal.h delete mode 100644 res/Makefile create mode 100644 res/binary_image_palette.py delete mode 100644 res/bowser.data delete mode 100644 res/bowser.data.h delete mode 100644 res/bowser.data.pal delete mode 100644 res/bowser.data.pal.h delete mode 100644 res/bowser.xcf create mode 120000 res/generate.py delete mode 100644 res/hotaru_futaba.data delete mode 100644 res/hotaru_futaba.data.h delete mode 100644 res/hotaru_futaba.data.pal delete mode 100644 res/hotaru_futaba.data.pal.h create mode 100644 res/majora.h rename {models => res}/parse_material.py (100%) rename {models => res}/parse_obj_fixed_point.py (100%) create mode 100644 res/path.py delete mode 100644 res/player.data delete mode 100644 res/player.data.h delete mode 100644 res/player.data.pal delete mode 100644 res/player.data.pal.h delete mode 100644 res/player.xcf rename {models => res}/render_obj_fixed_point_c_source.py (73%) rename {models => res}/verify_fixed_point.py (100%) create mode 100644 res/vram_allocate_textures.py rename {res => texture}/060067E0.data (100%) rename {res => texture}/060067E0.data.h (100%) create mode 100644 texture/060067E0.data.pal rename {res => texture}/060067E0.data.pal.h (100%) rename {res => texture}/060067E0.png (100%) create mode 100644 texture/060077E0.data rename {res => texture}/060077E0.data.h (100%) create mode 100644 texture/060077E0.data.pal rename {res => texture}/060077E0.data.pal.h (100%) rename {res => texture}/060077E0.png (100%) create mode 100644 texture/060079E0.data rename {res => texture}/060079E0.data.h (100%) create mode 100644 texture/060079E0.data.pal rename {res => texture}/060079E0.data.pal.h (100%) rename {res => texture}/060079E0.png (100%) create mode 100644 texture/06007BE0.data rename {res => texture}/06007BE0.data.h (100%) create mode 100644 texture/06007BE0.data.pal rename {res => texture}/06007BE0.data.pal.h (100%) rename {res => texture}/06007BE0.png (100%) create mode 100644 texture/06007DE0.data rename {res => texture}/06007DE0.data.h (100%) create mode 100644 texture/06007DE0.data.pal rename {res => texture}/06007DE0.data.pal.h (100%) rename {res => texture}/06007DE0.png (100%) rename {res => texture}/06007FE0.data (100%) rename {res => texture}/06007FE0.data.h (100%) create mode 100644 texture/06007FE0.data.pal rename {res => texture}/06007FE0.data.pal.h (100%) rename {res => texture}/06007FE0.png (100%) rename {res => texture}/060087E0.png (100%) create mode 100644 texture/bowser.png create mode 100644 texture/player.png create mode 100644 texture/texture.mk diff --git a/Makefile b/Makefile index 94c4fec..9c4ab92 100644 --- a/Makefile +++ b/Makefile @@ -2,10 +2,7 @@ OPT = -Os all: cartridge.bin -phony: res - -res: - make -C res/ +phony: arm9/%.bin: phony make -C arm9/ $(notdir $@) @@ -28,4 +25,4 @@ OBJARCH = -O elf32-littlearm -B armv4t LDSCRIPT = cartridge.lds include common.mk -.PHONY: phony res +.PHONY: phony diff --git a/arm9/Makefile b/arm9/Makefile index 47c36b2..be6e841 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -14,6 +14,8 @@ OBJ = \ ../res/bowser.data.o \ ../res/bowser.data.pal.o +include ../texture/texture.mk + arm9.elf: $(OBJ) triangle.elf: start.o examples/triangle.o @@ -27,18 +29,20 @@ cube.elf: start.o examples/cube.o ../math/cos_table_fp12.o ../math/cos.o icosphere.elf: start.o examples/icosphere.o ../math/cos_table_fp12.o ../math/cos.o MAJORA_RES = \ - ../res/060067E0.data.pal.o \ - ../res/060079E0.data.pal.o \ - ../res/06007DE0.data.pal.o \ - ../res/060077E0.data.pal.o \ - ../res/06007BE0.data.pal.o \ - ../res/06007FE0.data.pal.o \ - ../res/060067E0.data.o \ - ../res/060079E0.data.o \ - ../res/06007DE0.data.o \ - ../res/060077E0.data.o \ - ../res/06007BE0.data.o \ - ../res/06007FE0.data.o + ../texture/060067E0.data.pal.o \ + ../texture/060079E0.data.pal.o \ + ../texture/06007DE0.data.pal.o \ + ../texture/060077E0.data.pal.o \ + ../texture/06007BE0.data.pal.o \ + ../texture/06007FE0.data.pal.o \ + ../texture/060067E0.data.o \ + ../texture/060079E0.data.o \ + ../texture/06007DE0.data.o \ + ../texture/060077E0.data.o \ + ../texture/06007BE0.data.o \ + ../texture/06007FE0.data.o + +examples/majora.c: $(patsubst %.o,%.h,$(MAJORA_RES)) majora.elf: start.o examples/majora.o ../math/cos_table_fp12.o ../math/cos.o $(MAJORA_RES) diff --git a/arm9/examples/majora.c b/arm9/examples/majora.c index 5451ab8..f007c55 100644 --- a/arm9/examples/majora.c +++ b/arm9/examples/majora.c @@ -3,19 +3,21 @@ #include "math/math.h" -#include "res/060067E0.data.h" -#include "res/060067E0.data.pal.h" -#include "res/060077E0.data.h" -#include "res/060077E0.data.pal.h" -#include "res/060079E0.data.h" -#include "res/060079E0.data.pal.h" -#include "res/06007BE0.data.h" -#include "res/06007BE0.data.pal.h" -#include "res/06007DE0.data.h" -#include "res/06007DE0.data.pal.h" -#include "res/06007FE0.data.h" -#include "res/06007FE0.data.pal.h" -#include "models/majora.h" +#include "texture/060067E0.data.h" +#include "texture/060067E0.data.pal.h" +#include "texture/060077E0.data.h" +#include "texture/060077E0.data.pal.h" +#include "texture/060079E0.data.h" +#include "texture/060079E0.data.pal.h" +#include "texture/06007BE0.data.h" +#include "texture/06007BE0.data.pal.h" +#include "texture/06007DE0.data.h" +#include "texture/06007DE0.data.pal.h" +#include "texture/06007FE0.data.h" +#include "texture/06007FE0.data.pal.h" + +#include "res/majora.h" +#include "model/majora.h" struct object * object[6] = { &majora_1, @@ -26,43 +28,19 @@ struct object * object[6] = { &majora_7, }; -int palette_offset[6]; -int pixel_dimension[6]; -uint32_t teximage_param[6]; - -int round_up_32(int n) -{ - return ((n + 63) / 64) * 64; -} - -uint16_t rgb565(const uint8_t * buf) -{ - uint8_t r = buf[0] >> 3; - uint8_t g = buf[1] >> 3; - uint8_t g_l = (buf[1] >> 2) & 1; - uint8_t b = buf[2] >> 3; - - return (g_l << 15) | (b << 10) | (g << 5) | (r << 0); -} - void copy_palettes() { - int offset = 0; volatile uint16_t * vram_f = (volatile uint16_t *)(0x06890000); - int num_pixel_palettes = (sizeof (majora_pixel_palette)) / (sizeof (struct pixel_palette)); - for (int i = 0; i < num_pixel_palettes; i++) { - palette_offset[i] = offset; - - int colors = majora_pixel_palette[i].palette.size / 3; - - uint8_t * pal = majora_pixel_palette[i].palette.start; + int palettes = (sizeof (material)) / (sizeof (material[0])); + for (int i = 0; i < palettes; i++) { + int colors = material[i].palette.size / 2; + uint16_t * pal = (uint16_t *)material[i].palette.start; + int offset = material[i].palette.vram_offset; for (int c = 0; c < colors; c++) { - vram_f[c + (offset / 2)] = rgb565(&pal[c * 3]); + vram_f[c + offset / 2] = pal[c]; } - - offset = round_up_32(offset + colors * 2); } } @@ -81,58 +59,64 @@ int pixel_dimension_from_pixels(int pixels) } } -uint32_t teximage_size_from_dimension(int dimension) +uint32_t teximage_param__t_size(int height) { - switch (dimension) { + switch (height) { default: - case 8: return TEXIMAGE_PARAM__t_size__8_texels - | TEXIMAGE_PARAM__s_size__8_texels; - case 16: return TEXIMAGE_PARAM__t_size__16_texels - | TEXIMAGE_PARAM__s_size__16_texels; - case 32: return TEXIMAGE_PARAM__t_size__32_texels - | TEXIMAGE_PARAM__s_size__32_texels; - case 64: return TEXIMAGE_PARAM__t_size__64_texels - | TEXIMAGE_PARAM__s_size__64_texels; - case 128: return TEXIMAGE_PARAM__t_size__128_texels - | TEXIMAGE_PARAM__s_size__128_texels; - case 256: return TEXIMAGE_PARAM__t_size__256_texels - | TEXIMAGE_PARAM__s_size__256_texels; - case 512: return TEXIMAGE_PARAM__t_size__512_texels - | TEXIMAGE_PARAM__s_size__512_texels; - case 1024: return TEXIMAGE_PARAM__t_size__1024_texels - | TEXIMAGE_PARAM__s_size__1024_texels; + case 8: return TEXIMAGE_PARAM__t_size__8_texels; + case 16: return TEXIMAGE_PARAM__t_size__16_texels; + case 32: return TEXIMAGE_PARAM__t_size__32_texels; + case 64: return TEXIMAGE_PARAM__t_size__64_texels; + case 128: return TEXIMAGE_PARAM__t_size__128_texels; + case 256: return TEXIMAGE_PARAM__t_size__256_texels; + case 512: return TEXIMAGE_PARAM__t_size__512_texels; + case 1024: return TEXIMAGE_PARAM__t_size__1024_texels; } } -uint32_t make_teximage_param(int offset, int dimension) +uint32_t teximage_param__s_size(int width) { - return 0 - | TEXIMAGE_PARAM__texture_coordinate_transformation_mode__vertex_source - | TEXIMAGE_PARAM__texture_format__256_color_palette - | teximage_size_from_dimension(dimension) - | TEXIMAGE_PARAM__repeat_t__repeat - | TEXIMAGE_PARAM__repeat_s__repeat - | TEXIMAGE_PARAM__texture_starting_address(offset >> 3); + switch (width) { + default: + case 8: return TEXIMAGE_PARAM__s_size__8_texels; + case 16: return TEXIMAGE_PARAM__s_size__16_texels; + case 32: return TEXIMAGE_PARAM__s_size__32_texels; + case 64: return TEXIMAGE_PARAM__s_size__64_texels; + case 128: return TEXIMAGE_PARAM__s_size__128_texels; + case 256: return TEXIMAGE_PARAM__s_size__256_texels; + case 512: return TEXIMAGE_PARAM__s_size__512_texels; + case 1024: return TEXIMAGE_PARAM__s_size__1024_texels; + } +} + +uint32_t teximage_param__color_palette(int palette_size) +{ + switch (palette_size) { + default: + case 4: return TEXIMAGE_PARAM__texture_format__4_color_palette; + case 16: return TEXIMAGE_PARAM__texture_format__16_color_palette; + case 256: return TEXIMAGE_PARAM__texture_format__256_color_palette; + } } void copy_pixels() { - int offset = 0; volatile uint16_t * vram_a = (volatile uint16_t *)(0x06800000); - int num_pixel_palettes = (sizeof (majora_pixel_palette)) / (sizeof (struct pixel_palette)); - for (int i = 0; i < num_pixel_palettes; i++) { - int size = majora_pixel_palette[i].pixel.size; - pixel_dimension[i] = pixel_dimension_from_pixels(size); - teximage_param[i] = make_teximage_param(offset, pixel_dimension[i]); - uint8_t * pixel = majora_pixel_palette[i].pixel.start; + int pixels = (sizeof (material)) / (sizeof (material[0])); + *((volatile uint32_t *)0x4440000) = pixels; + for (int i = 0; i < pixels; i++) { + int size = material[i].pixel.size; + uint16_t * pixel = (uint16_t *)material[i].pixel.start; + int offset = material[i].pixel.vram_offset; - for (int p = 0; p < size; p+=2) { - uint16_t texel = (pixel[p + 1] << 8) | (pixel[p + 0] << 0); - vram_a[(p + offset) / 2] = texel; + *((volatile uint32_t *)0x4440000) = size; + + for (int t = 0; t < size / 2; t++) { + vram_a[t + offset / 2] = pixel[t]; } - offset += size; + break; } } @@ -211,7 +195,6 @@ void main() | DISP3DCNT__texture_mapping__enable; copy_texture_data(); - copy_texture_data(); // clear matrix stack status io_registers.a.GXSTAT |= GXSTAT__matrix_stack_status__overflow_or_underflow; @@ -341,7 +324,6 @@ void main() // multiply by a y-axis rotation - /* io_registers.a.MTX_MULT_3X3 = cos2; io_registers.a.MTX_MULT_3X3 = 0; io_registers.a.MTX_MULT_3X3 = sin2; @@ -353,7 +335,6 @@ void main() io_registers.a.MTX_MULT_3X3 = -sin2; io_registers.a.MTX_MULT_3X3 = 0; io_registers.a.MTX_MULT_3X3 = cos2; - */ /* // multiply by a z-axis rotation @@ -425,12 +406,23 @@ void main() struct object * obj = object[oix]; const int num_triangles = obj->triangle_count; - int material = obj->material; + int material_ix = obj->material; + int pixel_offset = material[material_ix].pixel.vram_offset; + int palette_offset = material[material_ix].palette.vram_offset; + int width = material[material_ix].pixel.width; + int height = material[material_ix].pixel.height; + int palette_size = material[material_ix].palette.palette_size; - io_registers.a.TEXPLTT_BASE = TEXPLTT_BASE__base_address(palette_offset[material] >> 4); - io_registers.a.TEXIMAGE_PARAM = teximage_param[material]; - - int dimension = pixel_dimension[material]; + int shift = palette_size == 4 ? 3 : 4; + io_registers.a.TEXPLTT_BASE = TEXPLTT_BASE__base_address(palette_offset >> shift); + io_registers.a.TEXIMAGE_PARAM = 0 + | TEXIMAGE_PARAM__texture_coordinate_transformation_mode__texcoord_source + | teximage_param__color_palette(palette_size) + | TEXIMAGE_PARAM__repeat_t__repeat + | TEXIMAGE_PARAM__repeat_s__repeat + | teximage_param__t_size(height) + | teximage_param__s_size(width) + | TEXIMAGE_PARAM__texture_starting_address(pixel_offset >> 3); for (int i = 0; i < num_triangles; i++) { // "When texture mapping, the Geometry Engine works faster if you @@ -440,8 +432,8 @@ void main() int au = at->u; int av = at->v; io_registers.a.TEXCOORD = 0 - | TEXCOORD__t_coordinate(v_to_t(av, dimension)) - | TEXCOORD__s_coordinate(u_to_s(au, dimension)); + | TEXCOORD__t_coordinate(v_to_t(av, height)) + | TEXCOORD__s_coordinate(u_to_s(au, width)); struct vertex_normal * an = &majora_normal[obj->triangle[i].a.normal]; io_registers.a.NORMAL = 0 @@ -460,8 +452,8 @@ void main() int bu = bt->u; int bv = bt->v; io_registers.a.TEXCOORD = 0 - | TEXCOORD__t_coordinate(v_to_t(bv, dimension)) - | TEXCOORD__s_coordinate(u_to_s(bu, dimension)); + | TEXCOORD__t_coordinate(v_to_t(bv, height)) + | TEXCOORD__s_coordinate(u_to_s(bu, width)); struct vertex_normal * bn = &majora_normal[obj->triangle[i].b.normal]; io_registers.a.NORMAL = 0 @@ -480,8 +472,8 @@ void main() int cu = ct->u; int cv = ct->v; io_registers.a.TEXCOORD = 0 - | TEXCOORD__t_coordinate(v_to_t(cv, dimension)) - | TEXCOORD__s_coordinate(u_to_s(cu, dimension)); + | TEXCOORD__t_coordinate(v_to_t(cv, height)) + | TEXCOORD__s_coordinate(u_to_s(cu, width)); struct vertex_normal * cn = &majora_normal[obj->triangle[i].c.normal]; io_registers.a.NORMAL = 0 diff --git a/common.mk b/common.mk index 4ddb00e..a7cc359 100644 --- a/common.mk +++ b/common.mk @@ -31,13 +31,14 @@ OBJDUMP = $(TARGET)objdump LIBGCC = $(shell $(CC) -print-file-name=libgcc.a) define BUILD_BINARY_O + cd $(dir $<) ; \ $(OBJCOPY) \ -I binary $(OBJARCH) \ --rename-section .data=.data.$(basename $@) \ - $< $@ + $(notdir $<) $(notdir $@) endef -as_obj_binary = _binary_$(subst .,_,$(subst /,_,$(1))) +as_obj_binary = _binary_$(subst .,_,$(subst /,_,$(notdir $(1)))) define BUILD_BINARY_H @echo gen $@ diff --git a/models/Makefile b/model/Makefile similarity index 100% rename from models/Makefile rename to model/Makefile diff --git a/models/cube.h b/model/cube.h similarity index 100% rename from models/cube.h rename to model/cube.h diff --git a/models/cube.obj b/model/cube.obj similarity index 100% rename from models/cube.obj rename to model/cube.obj diff --git a/models/icosphere.h b/model/icosphere.h similarity index 100% rename from models/icosphere.h rename to model/icosphere.h diff --git a/models/icosphere.obj b/model/icosphere.obj similarity index 100% rename from models/icosphere.obj rename to model/icosphere.obj diff --git a/models/majora.h b/model/majora.h similarity index 83% rename from models/majora.h rename to model/majora.h index 6ed1fa7..4d784f3 100644 --- a/models/majora.h +++ b/model/majora.h @@ -1,4 +1,4 @@ -#include "model.h" +#include "model/model.h" // .6 fixed-point struct vertex_position majora_position[] = { @@ -331,90 +331,6 @@ struct vertex_normal majora_normal[] = { {-14, -212, 466}, }; -enum majora_material { - mtl_060067E0, - mtl_060077E0, - mtl_060079E0, - mtl_06007BE0, - mtl_06007DE0, - mtl_06007FE0, -}; - -struct pixel_palette majora_pixel_palette[] = { - [mtl_060067E0] = { - .pixel = { - .start = (uint8_t *)&_binary_060067E0_data_start, - .end = (uint8_t *)&_binary_060067E0_data_end, - .size = (int)&_binary_060067E0_data_size, - }, - .palette = { - .start = (uint8_t *)&_binary_060067E0_data_pal_start, - .end = (uint8_t *)&_binary_060067E0_data_pal_end, - .size = (int)&_binary_060067E0_data_pal_size, - }, - }, - [mtl_060077E0] = { - .pixel = { - .start = (uint8_t *)&_binary_060077E0_data_start, - .end = (uint8_t *)&_binary_060077E0_data_end, - .size = (int)&_binary_060077E0_data_size, - }, - .palette = { - .start = (uint8_t *)&_binary_060077E0_data_pal_start, - .end = (uint8_t *)&_binary_060077E0_data_pal_end, - .size = (int)&_binary_060077E0_data_pal_size, - }, - }, - [mtl_060079E0] = { - .pixel = { - .start = (uint8_t *)&_binary_060079E0_data_start, - .end = (uint8_t *)&_binary_060079E0_data_end, - .size = (int)&_binary_060079E0_data_size, - }, - .palette = { - .start = (uint8_t *)&_binary_060079E0_data_pal_start, - .end = (uint8_t *)&_binary_060079E0_data_pal_end, - .size = (int)&_binary_060079E0_data_pal_size, - }, - }, - [mtl_06007BE0] = { - .pixel = { - .start = (uint8_t *)&_binary_06007BE0_data_start, - .end = (uint8_t *)&_binary_06007BE0_data_end, - .size = (int)&_binary_06007BE0_data_size, - }, - .palette = { - .start = (uint8_t *)&_binary_06007BE0_data_pal_start, - .end = (uint8_t *)&_binary_06007BE0_data_pal_end, - .size = (int)&_binary_06007BE0_data_pal_size, - }, - }, - [mtl_06007DE0] = { - .pixel = { - .start = (uint8_t *)&_binary_06007DE0_data_start, - .end = (uint8_t *)&_binary_06007DE0_data_end, - .size = (int)&_binary_06007DE0_data_size, - }, - .palette = { - .start = (uint8_t *)&_binary_06007DE0_data_pal_start, - .end = (uint8_t *)&_binary_06007DE0_data_pal_end, - .size = (int)&_binary_06007DE0_data_pal_size, - }, - }, - [mtl_06007FE0] = { - .pixel = { - .start = (uint8_t *)&_binary_06007FE0_data_start, - .end = (uint8_t *)&_binary_06007FE0_data_end, - .size = (int)&_binary_06007FE0_data_size, - }, - .palette = { - .start = (uint8_t *)&_binary_06007FE0_data_pal_start, - .end = (uint8_t *)&_binary_06007FE0_data_pal_end, - .size = (int)&_binary_06007FE0_data_pal_size, - }, - }, -}; - struct triangle majora_1_triangle[] = { { {2, 0, 0}, diff --git a/models/majora.mtl b/model/majora.mtl similarity index 86% rename from models/majora.mtl rename to model/majora.mtl index 3ed5529..5888cc7 100644 --- a/models/majora.mtl +++ b/model/majora.mtl @@ -61,12 +61,3 @@ d 1.000000 illum 2 map_Kd 06007FE0.png -newmtl mtl_060087E0 -Ns 95.999992 -Ka 1.000000 1.000000 1.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 -map_Kd 060087E0.png diff --git a/models/majora.obj b/model/majora.obj similarity index 100% rename from models/majora.obj rename to model/majora.obj diff --git a/model/material.h b/model/material.h new file mode 100644 index 0000000..562658a --- /dev/null +++ b/model/material.h @@ -0,0 +1,21 @@ +struct pixel_descriptor { + uint8_t * start; + int32_t size; + int32_t vram_offset; // offset into vram texture address space + + int16_t width; + int16_t height; +}; + +struct palette_descriptor { + uint8_t * start; + int32_t size; + int32_t vram_offset; // offset into vram palette address space + + int32_t palette_size; +}; + +struct material_descriptor { + struct pixel_descriptor pixel; + struct palette_descriptor palette; +}; diff --git a/models/model.h b/model/model.h similarity index 81% rename from models/model.h rename to model/model.h index 89545bc..f721ab4 100644 --- a/models/model.h +++ b/model/model.h @@ -45,14 +45,3 @@ struct object { int quadrilateral_count; int material; }; - -struct start_size_end { - uint8_t * start; - uint8_t * end; - int size; -}; - -struct pixel_palette { - struct start_size_end pixel; - struct start_size_end palette; -}; diff --git a/models/generate.py b/models/generate.py deleted file mode 120000 index 936fb4d..0000000 --- a/models/generate.py +++ /dev/null @@ -1 +0,0 @@ -../registers/generate.py \ No newline at end of file diff --git a/registers/0x04000000.txt b/register/0x04000000.txt similarity index 100% rename from registers/0x04000000.txt rename to register/0x04000000.txt diff --git a/registers/0x04001000.txt b/register/0x04001000.txt similarity index 100% rename from registers/0x04001000.txt rename to register/0x04001000.txt diff --git a/registers/Makefile b/register/Makefile similarity index 100% rename from registers/Makefile rename to register/Makefile diff --git a/registers/csv_input.py b/register/csv_input.py similarity index 100% rename from registers/csv_input.py rename to register/csv_input.py diff --git a/registers/format.py b/register/format.py similarity index 100% rename from registers/format.py rename to register/format.py diff --git a/registers/format_bits.py b/register/format_bits.py similarity index 100% rename from registers/format_bits.py rename to register/format_bits.py diff --git a/registers/generate.py b/register/generate.py similarity index 100% rename from registers/generate.py rename to register/generate.py diff --git a/registers/generate.sh b/register/generate.sh similarity index 100% rename from registers/generate.sh rename to register/generate.sh diff --git a/registers/graphics_engine_bits.ods b/register/graphics_engine_bits.ods similarity index 100% rename from registers/graphics_engine_bits.ods rename to register/graphics_engine_bits.ods diff --git a/registers/parse.py b/register/parse.py similarity index 100% rename from registers/parse.py rename to register/parse.py diff --git a/registers/parse_bits.py b/register/parse_bits.py similarity index 100% rename from registers/parse_bits.py rename to register/parse_bits.py diff --git a/registers/graphics_engine_bits.csv b/registers/graphics_engine_bits.csv deleted file mode 100644 index 9c1513e..0000000 --- a/registers/graphics_engine_bits.csv +++ /dev/null @@ -1,432 +0,0 @@ -"register_name","enum_name","bits","bit_name","value","mask","description" -"DISPCNT",,31,"obj_extended_palette",1,, -"DISPCNT",,30,"bg_extended_palette",1,, -"DISPCNT",,"29-27","bg_screen_base_offset",,"0b111", -"DISPCNT",,"26-24","bg_character_base_offset",,"0b111", -"DISPCNT",,23,"obj_processing_during_h_blank_period",1,, -"DISPCNT","obj_vram_capacity",22,"128kb",0,, -"DISPCNT","obj_vram_capacity",22,"256kb",1,, -"DISPCNT","character_vram_capacity","21-20","32kb","0b00",, -"DISPCNT","character_vram_capacity","21-20","64kb","0b01",, -"DISPCNT","character_vram_capacity","21-20","128kb","0b10",, -"DISPCNT","character_vram_capacity","21-20","256kb","0b11",, -"DISPCNT","display_vram_block","19-18","vram_a","0b00",, -"DISPCNT","display_vram_block","19-18","vram_b","0b01",, -"DISPCNT","display_vram_block","19-18","vram_c","0b10",, -"DISPCNT","display_vram_block","19-18","vram_d","0b11",, -"DISPCNT","display_mode","17-16","display_off",0,, -"DISPCNT","display_mode","17-16","graphics_display",1,, -"DISPCNT","display_mode","17-16","vram_display",2,, -"DISPCNT","display_mode","17-16","main_memory_display",3,, -"DISPCNT","obj_window",15,"disable",0,, -"DISPCNT","obj_window",15,"enable",1,, -"DISPCNT","window_1",14,"disable",0,, -"DISPCNT","window_1",14,"enable",1,, -"DISPCNT","window_0",13,"disable",0,, -"DISPCNT","window_0",13,"enable",1,, -"DISPCNT","obj",12,"disable",0,, -"DISPCNT","obj",12,"enable",1,, -"DISPCNT","bg3",11,"disable",0,, -"DISPCNT","bg3",11,"enable",1,, -"DISPCNT","bg2",10,"disable",0,, -"DISPCNT","bg2",10,"enable",1,, -"DISPCNT","bg1",9,"disable",0,, -"DISPCNT","bg1",9,"enable",1,, -"DISPCNT","bg0",8,"disable",0,, -"DISPCNT","bg0",8,"enable",1,, -"DISPCNT",,7,"2d_display_forced_blank",1,, -"DISPCNT","bitmap_obj_mapping_mode","6-5","2d_mapping_with_128_horizontal_dots","0b00",, -"DISPCNT","bitmap_obj_mapping_mode","6-5","2d_mapping_with_256_horizontal_dots","0b01",, -"DISPCNT","bitmap_obj_mapping_mode","6-5","1d_mapping","0b10",, -"DISPCNT","character_obj_mapping_mode",4,"2d_mapping",0,, -"DISPCNT","character_obj_mapping_mode",4,"1d_mapping",1,, -"DISPCNT","display_selection_for_bg0",3,"2d_graphics",0,, -"DISPCNT","display_selection_for_bg0",3,"3d_graphics",1,, -"DISPCNT","bg_mode","2-0","text0_text1_text2_text3",0,, -"DISPCNT","bg_mode","2-0","text0_text1_text2_affine3",1,, -"DISPCNT","bg_mode","2-0","text0_text1_affine2_affine3",2,, -"DISPCNT","bg_mode","2-0","text0_text1_text2_extended3",3,, -"DISPCNT","bg_mode","2-0","text0_text1_affine2_extended3",4,, -"DISPCNT","bg_mode","2-0","text0_text1_extended2_extended3",5,, -"DISPCNT","bg_mode","2-0","3d_large_screen_256_color_bitmap",6,, -,,,,,, -"DISPSTAT","v_counter_match_interrupt_request",5,"disable",0,, -"DISPSTAT","v_counter_match_interrupt_request",5,"enable",1,, -"DISPSTAT","h_blank_interrupt_request",4,"disable",0,, -"DISPSTAT","h_blank_interrupt_request",4,"enable",1,, -"DISPSTAT","v_blank_interrupt_request",3,"disable",0,, -"DISPSTAT","v_blank_interrupt_request",3,"enable",1,, -"DISPSTAT","v_counter_match_detection",2,"outside_a_matching_interval",0,, -"DISPSTAT","v_counter_match_detection",2,"during_a_matching_interval",1,, -"DISPSTAT","h_blank_detection",1,"outside_h_blank_interval",0,, -"DISPSTAT","h_blank_detection",1,"during_h_blank_interval",1,, -"DISPSTAT","v_blank_detection",0,"outside_v_blank_interval",0,, -"DISPSTAT","v_blank_detection",0,"during_v_blank_interval",1,, -,,,,,, -"VCOUNT",,"8-0","v_counter_value",,, -,,,,,, -"BG0CNT","screen_size","15-14","256x256","0b00",, -"BG0CNT","screen_size","15-14","512x256","0b01",, -"BG0CNT","screen_size","15-14","256x512","0b10",, -"BG0CNT","screen_size","15-14","512x512","0b11",, -"BG0CNT","bg_extended_palette_slot",13,"slot_0",0,, -"BG0CNT","bg_extended_palette_slot",13,"slot_2",1,, -"BG0CNT",,"12-8","screen_base_block",,"0b11111", -"BG0CNT","color_mode",7,"16_color_mode",0,, -"BG0CNT","color_mode",7,"256_color_mode",1,, -"BG0CNT","mosaic",6,"disable",0,, -"BG0CNT","mosaic",6,"enable",1,, -"BG0CNT",,"5-2","character_base_block",,"0b1111", -"BG0CNT",,"1-0","priority",,"0b11", -,,,,,, -"BG1CNT","screen_size","15-14","256x256","0b00",, -"BG1CNT","screen_size","15-14","512x256","0b01",, -"BG1CNT","screen_size","15-14","256x512","0b10",, -"BG1CNT","screen_size","15-14","512x512","0b11",, -"BG1CNT","bg_extended_palette_slot",13,"slot_1",0,, -"BG1CNT","bg_extended_palette_slot",13,"slot_3",1,, -"BG1CNT",,"12-8","screen_base_block",,"0b11111", -"BG1CNT","color_mode",7,"16_color_mode",0,, -"BG1CNT","color_mode",7,"256_color_mode",1,, -"BG1CNT","mosaic",6,"disable",0,, -"BG1CNT","mosaic",6,"enable",1,, -"BG1CNT",,"5-2","character_base_block",,"0b1111", -"BG1CNT",,"1-0","priority",,"0b11", -,,,,,, -"BG2CNT","screen_size","15-14","256x256","0b00",, -"BG2CNT","screen_size","15-14","512x256","0b01",, -"BG2CNT","screen_size","15-14","256x512","0b10",, -"BG2CNT","screen_size","15-14","512x512","0b11",, -"BG2CNT","out_of_area_processing",13,"transparent_display",0,, -"BG2CNT","out_of_area_processing",13,"wraparound_display",1,, -"BG2CNT",,"12-8","screen_base_block",,"0b11111", -"BG2CNT","color_mode",7,"16_color_mode",0,, -"BG2CNT","color_mode",7,"256_color_mode",1,, -"BG2CNT","mosaic",6,"disable",0,, -"BG2CNT","mosaic",6,"enable",1,, -"BG2CNT",,"5-2","character_base_block",,"0b1111", -"BG2CNT",,"1-0","priority",,"0b11", -,,,,,, -"BG3CNT","screen_size","15-14","256x256","0b00",, -"BG3CNT","screen_size","15-14","512x256","0b01",, -"BG3CNT","screen_size","15-14","256x512","0b10",, -"BG3CNT","screen_size","15-14","512x512","0b11",, -"BG3CNT","out_of_area_processing",13,"transparent_display",0,, -"BG3CNT","out_of_area_processing",13,"wraparound_display",1,, -"BG3CNT",,"12-8","screen_base_block",,"0b11111", -"BG3CNT","color_mode",7,"16_color_mode",0,, -"BG3CNT","color_mode",7,"256_color_mode",1,, -"BG3CNT","mosaic",6,"disable",0,, -"BG3CNT","mosaic",6,"enable",1,, -"BG3CNT",,"5-2","character_base_block",,"0b1111", -"BG3CNT",,"1-0","priority",,"0b11", -,,,,,, -"VRAMCNT","vram_d",31,"disable",0,, -"VRAMCNT","vram_d",31,"enable",1,, -"VRAMCNT","vram_d","28-27","ofs",,"0b11", -"VRAMCNT","vram_d","26-24","mst",,"0b111", -"VRAMCNT","vram_c",23,"disable",0,, -"VRAMCNT","vram_c",23,"enable",1,, -"VRAMCNT","vram_c","20-19","ofs",,"0b11", -"VRAMCNT","vram_c","18-16","mst",,"0b111", -"VRAMCNT","vram_b",15,"disable",0,, -"VRAMCNT","vram_b",15,"enable",1,, -"VRAMCNT","vram_b","12-11","ofs",,"0b11", -"VRAMCNT","vram_b","9-8","mst",,"0b11", -"VRAMCNT","vram_a",7,"disable",0,, -"VRAMCNT","vram_a",7,"enable",1,, -"VRAMCNT","vram_a","4-3","ofs",,"0b11", -"VRAMCNT","vram_a","1-0","mst",,"0b11", -,,,,,, -"WVRAMCNT","wram","25-24","bank",,"0b11", -"WVRAMCNT","vram_g",23,"disable",0,, -"WVRAMCNT","vram_g",23,"enable",1,, -"WVRAMCNT","vram_g","20-19","ofs",,"0b11", -"WVRAMCNT","vram_g","18-16","mst",,"0b111", -"WVRAMCNT","vram_f",15,"disable",0,, -"WVRAMCNT","vram_f",15,"enable",1,, -"WVRAMCNT","vram_f","12-11","ofs",,"0b11", -"WVRAMCNT","vram_f","10-8","mst",,"0b111", -"WVRAMCNT","vram_e",7,"disable",0,, -"WVRAMCNT","vram_e",7,"enable",1,, -"WVRAMCNT","vram_e","2-0","mst",,"0b111", -,,,,,, -"VRAM_HI_CNT","vram_i",15,"disable",0,, -"VRAM_HI_CNT","vram_i",15,"enable",1,, -"VRAM_HI_CNT","vram_i","9-8","mst",,"0b11", -"VRAM_HI_CNT","vram_h",7,"disable",0,, -"VRAM_HI_CNT","vram_h",7,"enable",1,, -"VRAM_HI_CNT","vram_h","1-0","mst",,"0b11", -,,,,,, -,,,,,, -"POWCNT","lcd_output_destination",15,"a_to_lower__b_to_upper",0,, -"POWCNT","lcd_output_destination",15,"a_to_upper__b_to_lower",1,, -"POWCNT","2d_graphics_engine_b",9,"disable",0,, -"POWCNT","2d_graphics_engine_b",9,"enable",1,, -"POWCNT","geometry_engine",3,"disable",0,, -"POWCNT","geometry_engine",3,"enable",1,, -"POWCNT","rendering_engine",2,"disable",0,, -"POWCNT","rendering_engine",2,"enable",1,, -"POWCNT","2d_graphics_engine_a",1,"disable",0,, -"POWCNT","2d_graphics_engine_a",1,"enable",1,, -"POWCNT","lcd",0,"disable",0,, -"POWCNT","lcd",0,"enable",1,, -,,,,,, -"RDLINES_COUNT",,"5-0","rendered_lines_min",,, -,,,,,, -"ALPHA_TEST_REF",,"4-0","comparison_value",,"0b11111", -,,,,,, -"CLEAR_COLOR",,"29-24","clear_polygon_id",,"0b111111", -"CLEAR_COLOR",,"20-16","alpha_value",,"0b11111", -"CLEAR_COLOR",,15,"fog_enable",1,, -"CLEAR_COLOR",,"14-10","blue",,"0b11111", -"CLEAR_COLOR",,"9-5","green",,"0b11111", -"CLEAR_COLOR",,"4-0","red",,"0b11111", -,,,,,, -"CLEAR_DEPTH",,"14-0","value",,"0x7fff", -,,,,,, -"CLRIMAGE_OFFSET",,"15-8","y_offset",,"0xff", -"CLRIMAGE_OFFSET",,"7-0","x_offset",,"0xff", -,,,,,, -"DISP3DCNT","clear_image",14,"disable",0,, -"DISP3DCNT","clear_image",14,"enable",1,, -"DISP3DCNT",,13,"polygon_list_ram_and_vertex_ram_overflow",1,, -"DISP3DCNT",,12,"color_buffer_underflow",1,, -"DISP3DCNT",,"11-8","fog_shift",,"0b1111", -"DISP3DCNT","fog_master",7,"disable",0,, -"DISP3DCNT","fog_master",7,"enable",1,, -"DISP3DCNT","fog_mode",6,"blending_using_pixel_color_value_and_alpha_value",0,, -"DISP3DCNT","fog_mode",6,"blending_using_only_pixel_alpha_value",1,, -"DISP3DCNT","edge_marking",5,"disable",0,, -"DISP3DCNT","edge_marking",5,"enable",1,, -"DISP3DCNT","anti_aliasing",4,"disable",0,, -"DISP3DCNT","anti_aliasing",4,"enable",1,, -"DISP3DCNT","alpha_blending",3,"disable",0,, -"DISP3DCNT","alpha_blending",3,"enable",1,, -"DISP3DCNT","alpha_test",2,"disable",0,, -"DISP3DCNT","alpha_test",2,"enable",1,, -"DISP3DCNT","toon_highlight",1,"toon_shading",0,, -"DISP3DCNT","toon_highlight",1,"highlight_shading",1,, -"DISP3DCNT","texture_mapping",0,"disable",0,, -"DISP3DCNT","texture_mapping",0,"enable",1,, -,,,,,, -"MTX_MODE","matrix_mode","1-0","projection","0b00",, -"MTX_MODE","matrix_mode","1-0","position","0b01",, -"MTX_MODE","matrix_mode","1-0","position_and_vector","0b10",, -"MTX_MODE","matrix_mode","1-0","texture","0b11",, -,,,,,, -"MTX_POP",,"5-0","number_of_pops",,"0b111111", -,,,,,, -"MTX_STORE",,"4-0","index",,"0b11111", -,,,,,, -"MTX_RESTORE",,"4-0","position",,"0b11111", -,,,,,, -"COLOR",,"14-10","blue",,"0b11111", -"COLOR",,"9-5","green",,"0b11111", -"COLOR",,"4-0","red",,"0b11111", -,,,,,, -"NORMAL",,"29-20","z_component",,"0x7ff", -"NORMAL",,"19-10","y_component",,"0x7ff", -"NORMAL",,"9-0","x_component",,"0x7ff", -,,,,,, -"TEXCOORD",,"31-16","t_coordinate",,"0xffff", -"TEXCOORD",,"15-0","s_coordinate",,"0xffff", -,,,,,, -"VTX_16",0,"31-16","y_coordinate",,"0xffff", -"VTX_16",0,"15-0","x_coordinate",,"0xffff", -"VTX_16",1,"15-0","z_coordinate",,"0xffff", -,,,,,, -"VTX_10",,"29-20","z_coordinate",,"0x7ff", -"VTX_10",,"19-10","y_coordinate",,"0x7ff", -"VTX_10",,"9-0","x_coordinate",,"0x7ff", -,,,,,, -"VTX_XY",,"31-16","y_coordinate",,"0xffff", -"VTX_XY",,"15-0","x_coordinate",,"0xffff", -,,,,,, -"VTX_XZ",,"31-16","z_coordinate",,"0xffff", -"VTX_XZ",,"15-0","x_coordinate",,"0xffff", -,,,,,, -"VTX_YZ",,"31-16","z_coordinate",,"0xffff", -"VTX_YZ",,"15-0","y_coordinate",,"0xffff", -,,,,,, -"VTX_DIFF",,"29-20","z_coordinate",,"0x7ff", -"VTX_DIFF",,"19-10","y_coordinate",,"0x7ff", -"VTX_DIFF",,"9-0","x_coordinate",,"0x7ff", -,,,,,, -"POLYGON_ATTR",,"29-24","polygon_id",,"0b111111", -"POLYGON_ATTR",,"20-16","alpha_value",,"0b11111", -"POLYGON_ATTR","fog",15,"disable",0,, -"POLYGON_ATTR","fog",15,"enable",1,, -"POLYGON_ATTR","depth_test_condition",14,"render_when_depth_value_is_smaller_than_buffer_value",0,, -"POLYGON_ATTR","depth_test_condition",14,"render_when_depth_value_is_equal_to_buffer_value",1,, -"POLYGON_ATTR","one_dot_polygon",13,"do_not_render",0,, -"POLYGON_ATTR","one_dot_polygon",13,"render",1,, -"POLYGON_ATTR","far_plane_intersection",12,"delete",0,, -"POLYGON_ATTR","far_plane_intersection",12,"clip",1,, -"POLYGON_ATTR","translucent_depth_value_update",11,"do_not_update",0,, -"POLYGON_ATTR","translucent_depth_value_update",11,"update",1,, -"POLYGON_ATTR","render_front_surface",7,"disable",0,, -"POLYGON_ATTR","render_front_surface",7,"enable",1,, -"POLYGON_ATTR","render_back_surface",6,"disable",0,, -"POLYGON_ATTR","render_back_surface",6,"enable",1,, -"POLYGON_ATTR","polygon_mode","5-4","modulation","0b00",, -"POLYGON_ATTR","polygon_mode","5-4","decal","0b01",, -"POLYGON_ATTR","polygon_mode","5-4","toon","0b10",, -"POLYGON_ATTR","polygon_mode","5-4","shadow","0b11",, -"POLYGON_ATTR","light_3",3,"disable",0,, -"POLYGON_ATTR","light_3",3,"enable",1,, -"POLYGON_ATTR","light_2",2,"disable",0,, -"POLYGON_ATTR","light_2",2,"enable",1,, -"POLYGON_ATTR","light_1",1,"disable",0,, -"POLYGON_ATTR","light_1",1,"enable",1,, -"POLYGON_ATTR","light_0",0,"disable",0,, -"POLYGON_ATTR","light_0",0,"enable",1,, -,,,,,, -"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","do_not_transform_texture_coordinates","0b00",, -"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","texcoord_source","0b01",, -"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","normal_source","0b10",, -"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","vertex_source","0b11",, -"TEXIMAGE_PARAM","palette_color0_transparency",29,"palette_setting",0,, -"TEXIMAGE_PARAM","palette_color0_transparency",29,"always_transparent",1,, -"TEXIMAGE_PARAM","texture_format","28-26","no_texture",0,, -"TEXIMAGE_PARAM","texture_format","28-26","a3i5_translucent",1,, -"TEXIMAGE_PARAM","texture_format","28-26","4_color_palette",2,, -"TEXIMAGE_PARAM","texture_format","28-26","16_color_palette",3,, -"TEXIMAGE_PARAM","texture_format","28-26","256_color_palette",4,, -"TEXIMAGE_PARAM","texture_format","28-26","4x4_texel_compressed",5,, -"TEXIMAGE_PARAM","texture_format","28-26","a5i3_translucent",6,, -"TEXIMAGE_PARAM","texture_format","28-26","direct",7,, -"TEXIMAGE_PARAM","t_size","25-23","8_texels",0,, -"TEXIMAGE_PARAM","t_size","25-23","16_texels",1,, -"TEXIMAGE_PARAM","t_size","25-23","32_texels",2,, -"TEXIMAGE_PARAM","t_size","25-23","64_texels",3,, -"TEXIMAGE_PARAM","t_size","25-23","128_texels",4,, -"TEXIMAGE_PARAM","t_size","25-23","256_texels",5,, -"TEXIMAGE_PARAM","t_size","25-23","512_texels",6,, -"TEXIMAGE_PARAM","t_size","25-23","1024_texels",7,, -"TEXIMAGE_PARAM","s_size","22-20","8_texels",0,, -"TEXIMAGE_PARAM","s_size","22-20","16_texels",1,, -"TEXIMAGE_PARAM","s_size","22-20","32_texels",2,, -"TEXIMAGE_PARAM","s_size","22-20","64_texels",3,, -"TEXIMAGE_PARAM","s_size","22-20","128_texels",4,, -"TEXIMAGE_PARAM","s_size","22-20","256_texels",5,, -"TEXIMAGE_PARAM","s_size","22-20","512_texels",6,, -"TEXIMAGE_PARAM","s_size","22-20","1024_texels",7,, -"TEXIMAGE_PARAM","flip_t",19,"do_not_flip",0,, -"TEXIMAGE_PARAM","flip_t",19,"flip",1,, -"TEXIMAGE_PARAM","flip_s",18,"do_not_flip",0,, -"TEXIMAGE_PARAM","flip_s",18,"flip",1,, -"TEXIMAGE_PARAM","repeat_t",17,"do_not_repeat",0,, -"TEXIMAGE_PARAM","repeat_t",17,"repeat",1,, -"TEXIMAGE_PARAM","repeat_s",16,"do_not_repeat",0,, -"TEXIMAGE_PARAM","repeat_s",16,"repeat",1,, -"TEXIMAGE_PARAM",,"15-0","texture_starting_address",,"0xffff", -,,,,,, -"TEXPLTT_BASE",,"12-0","base_address",,"0x1fff", -,,,,,, -"DIF_AMB",,"30-26","ambient_blue",,"0b11111", -"DIF_AMB",,"25-21","ambient_green",,"0b11111", -"DIF_AMB",,"20-16","ambient_red",,"0b11111", -"DIF_AMB","vertex_color",15,"do_not_set_vertex_color",0,, -"DIF_AMB","vertex_color",15,"set_diffuse_reflection_color_as_vertex_color",1,, -"DIF_AMB",,"14-10","diffuse_blue",,"0b11111", -"DIF_AMB",,"9-5","diffuse_green",,"0b11111", -"DIF_AMB",,"4-0","diffuse_red",,"0b11111", -,,,,,, -"SPE_EMI",,"30-26","emission_blue",,"0b11111", -"SPE_EMI",,"25-21","emission_green",,"0b11111", -"SPE_EMI",,"20-16","emission_red",,"0b11111", -"SPE_EMI","shininess",15,"disable",0,, -"SPE_EMI","shininess",15,"enable",1,, -"SPE_EMI",,"14-10","specular_blue",,"0b11111", -"SPE_EMI",,"9-5","specular_green",,"0b11111", -"SPE_EMI",,"4-0","specular_red",,"0b11111", -,,,,,, -"LIGHT_VECTOR",,"31-30","light_number",,"0b11", -"LIGHT_VECTOR",,"29-20","decimal_z",,"0x3ff", -"LIGHT_VECTOR",,"19-10","decimal_y",,"0x3ff", -"LIGHT_VECTOR",,"9-0","decimal_x",,"0x3ff", -,,,,,, -"LIGHT_COLOR",,"31-30","light_number",,"0b11", -"LIGHT_COLOR",,"14-10","blue",,"0b11111", -"LIGHT_COLOR",,"9-5","green",,"0b11111", -"LIGHT_COLOR",,"4-0","red",,"0b11111", -,,,,,, -"SHININESS",,"31-24","4x_3",,"0xff", -"SHININESS",,"23-16","4x_2",,"0xff", -"SHININESS",,"15-8","4x_1",,"0xff", -"SHININESS",,"7-0","4x_0",,"0xff", -,,,,,, -"BEGIN_VTXS","type","1-0","triangle","0b00",, -"BEGIN_VTXS","type","1-0","quadrilateral","0b01",, -"BEGIN_VTXS","type","1-0","triangle_strip","0b10",, -"BEGIN_VTXS","type","1-0","quadrilateral_strip","0b11",, -,,,,,, -"SWAP_BUFFERS","depth_buffering",1,"z_value",0,, -"SWAP_BUFFERS","depth_buffering",1,"w_value",1,, -"SWAP_BUFFERS","translucent_polygon_y_sorting",0,"auto_sort",0,, -"SWAP_BUFFERS","translucent_polygon_y_sorting",0,"manual_sort",1,, -,,,,,, -"VIEWPORT",,"31-24","y2",,"0xff", -"VIEWPORT",,"23-16","x2",,"0xff", -"VIEWPORT",,"15-8","y1",,"0xff", -"VIEWPORT",,"7-0","x1",,"0xff", -,,,,,, -"BOX_TEST",0,"31-16","y_coordinate",,"0xffff", -"BOX_TEST",0,"15-0","x_coordinate",,"0xffff", -"BOX_TEST",1,"31-16","width",,"0xffff", -"BOX_TEST",1,"15-0","z_coordinate",,"0xffff", -"BOX_TEST",2,"31-16","depth",,"0xffff", -"BOX_TEST",2,"15-0","height",,"0xffff", -,,,,,, -"POS_TEST",0,"31-16","y_coordinate",,"0xffff", -"POS_TEST",0,"15-0","x_coordinate",,"0xffff", -"POS_TEST",1,"15-0","z_coordinate",,"0xffff", -,,,,,, -"VEC_TEST",,"29-20","decimal_z",,"0x3ff", -"VEC_TEST",,"19-10","decimal_y",,"0x3ff", -"VEC_TEST",,"9-0","decimal_x",,"0x3ff", -,,,,,, -"GXSTAT","command_fifo_interrupt_condition","31-30","disable","0b00",, -"GXSTAT","command_fifo_interrupt_condition","31-30","half_full","0b01",, -"GXSTAT","command_fifo_interrupt_condition","31-30","empty","0b10",, -"GXSTAT",,27,"geometry_engine_busy",1,, -"GXSTAT","fifo_status",26,"empty",1,, -"GXSTAT","fifo_status",25,"less_than_half_full",1,, -"GXSTAT","fifo_status",24,"full",1,, -"GXSTAT",,"23-16","command_fifo_count",,, -"GXSTAT","matrix_stack_status",15,"overflow_or_underflow",1,, -"GXSTAT","matrix_stack_status",14,"busy",1,, -"GXSTAT","matrix_stack_status",13,"projection_stack_level",,, -"GXSTAT","matrix_stack_status","12-8","position_and_vector_stack_level",,, -"GXSTAT",,1,"test_status",1,, -"GXSTAT",,0,"test_busy",1,, -,,,,,, -"LISTRAM_COUNT",,"11-0","counter",,, -,,,,,, -"VTXRAM_COUNT",,"12-0","counter",,, -,,,,,, -"OBJ_ATTRIBUTE_0","obj_shape","15-14","square","0b00",, -"OBJ_ATTRIBUTE_0","obj_shape","15-14","long_rectangle","0b01",, -"OBJ_ATTRIBUTE_0","obj_shape","15-14","tall_rectangle","0b10",, -"OBJ_ATTRIBUTE_0","color_mode",13,"16_color_mode",0,, -"OBJ_ATTRIBUTE_0","color_mode",13,"256_color_mode",1,, -"OBJ_ATTRIBUTE_0","mosaic",12,"off",0,, -"OBJ_ATTRIBUTE_0","mosaic",12,"on",1,, -"OBJ_ATTRIBUTE_0","obj_mode","11-10","normal","0b00",, -"OBJ_ATTRIBUTE_0","obj_mode","11-10","translucent","0b01",, -"OBJ_ATTRIBUTE_0","obj_mode","11-10","obj_window","0b10",, -"OBJ_ATTRIBUTE_0","obj_mode","11-10","bitmap_obj","0b11",, -"OBJ_ATTRIBUTE_0","double_size",9,"disable",0,, -"OBJ_ATTRIBUTE_0","double_size",9,"enable",1,, -"OBJ_ATTRIBUTE_0","affine_transformation",8,"disable",0,, -"OBJ_ATTRIBUTE_0","affine_transformation",8,"enable",1,, -"OBJ_ATTRIBUTE_0",,"7-0","y_coordinate",,"0xff", -,,,,,, -"OBJ_ATTRIBUTE_1",,"15-14","obj_size",,"0b11", -"OBJ_ATTRIBUTE_1",,"13-9","affine_transformation_parameter",,"0b11111", -"OBJ_ATTRIBUTE_1",,"8-0","x_coordinate",,"0x1ff", -,,,,,, -"OBJ_ATTRIBUTE_2",,"15-12","color_parameter",,"0b1111", -"OBJ_ATTRIBUTE_2",,"11-10","display_priority",,"0b11", -"OBJ_ATTRIBUTE_2",,"9-0","character_name",,"0x3ff", diff --git a/res/060067E0.data.pal b/res/060067E0.data.pal deleted file mode 100644 index 687ba9f1a8a7778405a7283fc17423542de9da45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmV+b1ONO0000C41^@vV3IGoQ0}lxT01*KK5CaSX2nz@YARYq+2MHJv2ml)f000jK z7zYs%2qG5=0uKr&8weLD2m=ibEesGK2N5bH3L`lN2^J6JQWZz6%Rlc z5H}wXAwdTb0vin|4-gp;M=TE*0w4x44lzFs7Ze#YLJkf(4lorMLN^i*Ne&E24;URA zEFTz3A{S9n4iY;S22l?eI2agN4;Ekz86qA|CrBhGT5uH}P#_W>Fc4}OAP6`fFDOxN8W=7pVrUyEdlnvf7AG$$R}wcLffXiJ zBQJ^+CMY%uAUF|SBQG&9L37NK1)NAyim`VOW4;SBhs~6KGg)w?`*pU44O9RX1}hW?ypAMJIw^R$^w3 zmRnnHWQ5U9D3@RaUCGN+)K&Yd&0rY4xB!LX@n(WNK1sAascHk!GKpR&vP yrWu>OhRd}u(6uJey(HAYN6pA6=D3#Uysx^>t?0<2;n0NN(2&aA!q(->_W1MY;r4d` diff --git a/res/060077E0.data b/res/060077E0.data deleted file mode 100644 index ddff5c770d7afdc8de46cc57efcbf5bcd8d7f11a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 RcmZQ#WIzIpOiUw;4*)SR0AT}ZaZEzIEB@-QYLz8kF z3`Pern5ag`{gRTq&|g2#`+YO5`D6b4PHS0fpJ%PJ_Bng6{XFmU-o7Y`Kd}R`1F-|K z1F-|K1F-}D7Y9Z&m0N|WT*`*k+?SIXE#}8~LwK6|xrz}Szd=+CVi-diC-&#~jFqh6 zd*0(AW>Cs_2IpAAAWjr}G1GXIPsRPW@CVNien$^0JoFkN`^~g_<9^D*NZ3-`*cP6 z3ZL*Ze>wiO{L0t7%TrY9UP{j-$PcXG7;z``=9CyJna_uO!%zIkDprgA7rxa$^U09b z6FvudK@~K|o)-H&vMl9GKIV0v8ObNFp4X+r@#kUu zDVO~^W&c`sVqfNR8ygV`ZMc_**^X_w+wof$q?s)Ky@JG_*W|zN{5tXPsF>$+R}22f zTjdYqe=qS{_xt?UGgGzJ#d+S2jfGCiL^*q~zk0CQe;@zuLE?`h<1bN8Gpg=JRat*_ z;6Tn}4A%*lbB6kGAI??%`}%A4Khze=*Y2^|U!mG+)a<*Ap6tev+{sHqIfv4Xa}@ns zx|>y(RJ!~h9Vq%J%I6|YG@C#f-qif7=4y_hJ11~9r|A0-vCmd#)C+zFU&AEA&A%uz ze(!+I|7AQwnWj)rO@fZ<`!mH}>vC^9$mXBzpiu7HdkS@?@Vnn~@V4TtR=1ULiBKlz zYxR%qAJ0Bn+pi!fe-sUFa=^Agm6*)ymaxh1GjIDp^!dX)D0W?FRZyWicvUVm2p_rc z8aMU)_D`r Nh#iO>h#d&&z<*9_3hV#? diff --git a/res/060087E0.data.h b/res/060087E0.data.h deleted file mode 100644 index 04704a1..0000000 --- a/res/060087E0.data.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -extern uint32_t _binary_060087E0_data_start __asm("_binary_060087E0_data_start"); -extern uint32_t _binary_060087E0_data_end __asm("_binary_060087E0_data_end"); -extern uint32_t _binary_060087E0_data_size __asm("_binary_060087E0_data_size"); diff --git a/res/060087E0.data.pal b/res/060087E0.data.pal deleted file mode 100644 index 53e65a29e01ab9f02ae23fa4618395bfa8029749..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 750 zcmWlS5zq%A5XC<{48w47F$}{n48!m+3=aARO0a-dWR%*f zg3?%Ve5F&?3UFYYFiwI8`%^r%a!z=+U0Qi3s#X{P171dT4c-eKpc)mtutBwNG(z+e zBX$Em2pvI390r&2XQ=J<91|S+u(* z2PsK*uqUCjVTXH?!|OeP$!2<34s((=8}cx{wb`-<_Q>8Wk9n7Q2MREQExWYEQb1cA z2jGA!AVrwbmMke^$?C|GBf7&;^zQH+9VMWIM^Wx{ob*|gKb=24r{K>(-}4=Lx96eG z1N`Ov6)3}XD9RYFP!HhjI7cdQor((9Q*m*0z$!7cSTD6oS|!I8+okxMK7meLM~*%A zs_24Vfi4^sTTSaMaYVj+uZb$8k$MBFb~NCM>)Lw@v%$I!uAaVA!_k2ouDZ{kan#|i z$LNu|=8miF+|BAp188U-z~l3N^}-|Gz23d?M4En$%+v6+YoK~FTwE9T io5#KK!*s9fS>;~!S^Zh#UHshRdHDTtzwgKMzVAO&-BOSM diff --git a/res/060087E0.data.pal.h b/res/060087E0.data.pal.h deleted file mode 100644 index b033e5a..0000000 --- a/res/060087E0.data.pal.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -extern uint32_t _binary_060087E0_data_pal_start __asm("_binary_060087E0_data_pal_start"); -extern uint32_t _binary_060087E0_data_pal_end __asm("_binary_060087E0_data_pal_end"); -extern uint32_t _binary_060087E0_data_pal_size __asm("_binary_060087E0_data_pal_size"); diff --git a/res/Makefile b/res/Makefile deleted file mode 100644 index 953252e..0000000 --- a/res/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -OBJ += $(patsubst %.data,%.data.o,$(wildcard *.data)) -OBJ += $(patsubst %.data.pal,%.data.pal.o,$(wildcard *.data.pal)) - -HEADER += $(patsubst %.data,%.data.h,$(wildcard *.data)) -HEADER += $(patsubst %.data.pal,%.data.pal.h,$(wildcard *.data.pal)) - -TARGET=arm-none-eabi- -OBJARCH=-O elf32-littlearm -B armv5te - -all: $(OBJ) $(HEADER) - -include ../common.mk - -%.data.h: %.data - $(BUILD_BINARY_H) - -%.data.pal.h: %.data.pal - $(BUILD_BINARY_H) diff --git a/res/binary_image_palette.py b/res/binary_image_palette.py new file mode 100644 index 0000000..0a6fd4a --- /dev/null +++ b/res/binary_image_palette.py @@ -0,0 +1,71 @@ +import struct +import sys + +from PIL import Image + +def round_up_palette_size(palette_size): + assert palette_size != 0, (name, palette_size) + if palette_size <= 4: + return 4 + elif palette_size <= 16: + return 16 + elif palette_size <= 256: + return 256 + else: + assert False, palette_size + +def pixels_per_byte(palette_size): + if palette_size == 4: + return 4 + elif palette_size == 16: + return 2 + elif palette_size == 256: + return 1 + else: + assert False, palette_size + +def pack_one_byte(pixels, index, palette_size): + num = pixels_per_byte(palette_size) + shift = 8 // num + byte = 0 + i = 0 + while num > 0: + px = pixels[index] + assert px < palette_size + byte |= px << (shift * i) + index += 1 + i += 1 + num -= 1 + return byte, index + +def pack_pixels(pixels, width, height, palette_size): + index = 0 + with open(sys.argv[2], 'wb') as f: + while index < (width * height): + byte, index = pack_one_byte(pixels, index, palette_size) + f.write(bytes([byte])) + +def rgb565(r, g, b): + r5 = (r >> 3) & 31 + g6 = (g >> 3) & 31 + g6_l = (g >> 2) & 1 + b5 = (b >> 3) & 31 + return (g6_l << 15) | (b5 << 10) | (g6 << 5) | (r5 << 0) + +def pack_palette(colors): + with open(sys.argv[2], 'wb') as f: + for color in colors: + out = rgb565(*color) + f.write(struct.pack('YAMet!P9+YFekkGAjIl~)hU z-WzWFzFKy7&)#o0HlW47BhYHW-~89>zr_OrU*Slw7@r9Y>%*{2?A69`Tx`dmR~-nO zrqmPIJW6{tUl#AYe+a`Yr!-9+xy@yRzu$3=4y$2QmTsXW$axBUYz$^Tdhmewf6oo? ztg0|8xt9vQ$a_qX1f1{(>LsukT%2b=46k7rj9+6cKMIX;lb_Kad9PRKH;MN!jKm%y{v|#_gUh^R zlYC-O1ho=9g=!Ch@U|?$>78GAmLk;0Fg+uBu1y zhvi@XE8ao~HTX0aW$dM(2XbHhAOW4NGxZ_C%qexT%+0`omf840KnTsw6s)tb;~Q3= zap1{r2+69#?~#JjrwG9&VWlVoIb1z9EzAQ0`O!uaL+#Wco9|K-0{%5133+A|VOioj zPiOu7GEe6_zY-LDz^1e&=5t)=4jAYMP1B_jf)@d%QfIXr7_aFx(~x=LFKgHcB~c`v zS#b-cl*ceN5z{mU5B_5U&r;NmF{2TcaR!)|AoqBmLLLoGk9gQDkAg2T&eH8CpYsUZ z+ejt?V|sS^`HPVT?J`*)XRZPx-YGDj)MDFeK7sAGvR=xP`2tV!KpHTI^E8DR18G3l zHCj8;)&aAp7HxBMObGdhCZZywcz>wa(Ly4EK?0~r$w3iFgznt>r@5PiHbUUp8!1O# zT*Jfg&;#(+Goz+KS`-72L@r%W60lqEYYrKNmIdV!1u`YgX`j2Co<1BM0SuWGXjE4` zo16%~oQ9Ggyh0aN-U*=kSN@%LgKy%INa31(eQp7WfC(CVsTbGG>x9akpcJyUD`3Db zFx{;>Dv9_jfdVKTZymumyw)c6!fI9i;hzWhol`~7>eW}vp@L@@+1(4@X}!4I@Dm-Y z;(_)W{>}av&y+QSGyZGqZNchL-0aYQe$~0q&uLht0;k^~(Am}n@I3*CGxkF8j7yh5 zy{0@`t$)iFD;q)3HdL*u`hwpD$P=#=1hC=JLR3$9&hit!Dj{}=pTeywkgY7+kt ze}b=gwj+Ne@G<|!Vb$3lC`s4^JT(AYlDU zfeN--&%NRkuV-REi2Fqk*E+x^-hu+}KYF8lSbFn_BO$Z({cHRYSD%*~XaAYo{{RwY Bw`l+X diff --git a/res/bowser.data.h b/res/bowser.data.h deleted file mode 100644 index 1133820..0000000 --- a/res/bowser.data.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -extern uint32_t _binary_bowser_data_start __asm("_binary_bowser_data_start"); -extern uint32_t _binary_bowser_data_end __asm("_binary_bowser_data_end"); -extern uint32_t _binary_bowser_data_size __asm("_binary_bowser_data_size"); diff --git a/res/bowser.data.pal b/res/bowser.data.pal deleted file mode 100644 index a8c6d94a98ff54766bf50d066e13375a327e73cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 zcmV-00MGvb004k72oG2Q?HB+OYXFjK7=U|Yz>EODluGuk0Km1J -extern uint32_t _binary_bowser_data_pal_start __asm("_binary_bowser_data_pal_start"); -extern uint32_t _binary_bowser_data_pal_end __asm("_binary_bowser_data_pal_end"); -extern uint32_t _binary_bowser_data_pal_size __asm("_binary_bowser_data_pal_size"); diff --git a/res/bowser.xcf b/res/bowser.xcf deleted file mode 100644 index 7209d5b62408c667b981e554f3a39dc49c5109e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2436 zcmZuyJ8v9S6u#%apEG%o#3UFkFDa3*hzSK9mQo-PND&pSbBN7~Mr!N$t< z{x<7xuC8wPcX}6DeTF|||EtUy&ph+{GKngLt124pSbBczK3@VTO-0d~b$NGkl)m%M4$G=Xght1H-Y||7%koi+GiJ zObO@u$_zg{8Q4C0z*|x^1paWB1VN(JJ{*WzNZ*QcwGs)cz{x0SClz90Tfz6KdMt7d zB0^j&IW;t?GGxru-%03c)r{gj;qhZpoTY$nDVsU(dQ zkt)S&dM4N_;7$<+Bazstmx0_a@74mEQbJqN$d_WYmQtfc8e5-|DE03m`rt|hGlW7h zY$COW#ZZ&+$xE%|u9i5$_+pcxKtefqr$TGA7%S@3N2H0ou~w2sMBkbU<)@JZ4M=1Xi8NYXko3p|?^8*oj1wk3I?-6DjL>!TQyi~H zsGR|Hg;MKf8N&;z39Kf_4r5h$?&V3~YtUyh$&_J&EsP8T1Pqj|tP&#&)NrAm;<8Lb zMkVqH1V}I*7?PZoc*bL6Sks6(D3Zl!8lt}~RX_mOM06S2ZBTjS4D_Nn3%xPsFGfYX z!WV-CE0>|MJ{Sb3SR8dUHqw$n8 zq&{aS42H+aFu_cptsCK0+N&aJgqo505v~f%3c*px&U=>~vOELD-}6ex46q@(;7 zf&~wUE_fW?(?~3(1c1lb!f`ZDQgj@Teeup2KHk1fy0l)G$BEN*fHGFZY6@8y9BdNG zn?!J=!X9A9pt_KCXi?aKKo?EXsSP@}$ZbeG+(2|5ryh+n(#xcLlOW&49K)JN;6+$E zgT}W>qUK3S$>w2jxKIH7Jmw2tOiF?0BiOtTQycAz7zbnq58dQ6KsS$rvlb?eKwriI z(~=Ytns~k}4j}AgLFP%o%q0nru=6a!6%3FZQkx(d4GH-MqsywWVv)%b9?7&W=H_VA zvOW&QbUXa3OQA)K763N^H8ujS(ISVlERDnh;0}F5>2gUfsa)I4gvQx3h1glQ{(2sLXe^-MCao{56I8AJj``8vp8{0Yjm)T z`%yTk1-|v~8Ikvb$$B6QPYmE>d>DL}bG2Z;eP>7s5fy%*;zcy0D=v%&i}v1oS_QSn z3+Fvze4TUsyb}krH`4RKBAnNF*ZDeE+~3Cq7({%J{UNQd{+OdUFbWf2-Esuq9v=n< zPd!e^jl6R9Bad(CgB=b(75t~t4h8)%b{rUV9V0M$PG0YYjc+(_ zbk4y&6z$KYeU%-earyd&!17@D-)^KFa7JKZTG_H9IY1w z&Oe9DV?UCKWPvLb(V#JI7u${*KgU20kc~7mP!0MR&iCMO8gz;S@rub=a%IpE`n7zB%BQyi4X%H>nZDdX!ng-?{Zv*tjZ zYKgy8>+`j&;3psOZ=s6;ZkYqe7WA$=53Yj`I{$*f9KP=5vmKillVxbl@pTNA;Rlm- zJ>~pqzz=lRzyVbPRlxe{I+VG)mGk;1PszP?LT)$`u5`W*i{KiB&_HACvDUKw5A`O*#p<)6;?^njYp^UM^!cO)68 z{G&%MOzCJF^LIwAp1ml=a{pXvl6&Cq<-jyLRlUZiCNie>^;03+G{-FP$IgS!ehdcs zPWpFY@L3{|YecNJwl|F~eCn|y5Y-9&d*S=(A!j`bq#jH$pfXVxRG)+&-%-mod!K8D zpI)vrDV{@w@2aeC2|R&KO9c3S6bn5^ibJiy>O-y6zYhB4O8$1PKH7-8l1{`9{_eEaII+6Uk2BG!ze z^wIdC-Ynn{KaKnbz7fajt=~_Hy02vq+=`LaX9TIw`IoPH{ML%=#)Z%NwfoL9u8U9h zX3Gx9{Gm;_^cW{?7r|h^EKCk z?fAyK&M%>d{=M;uX5@8Nj!H+@_@JAsu5-3UKWPjlHhnwL2)?RzD?&E#|GO!H-h<+H9=hd)ie&+CraWWV0V!vhE6+M3?+ zg3itnizTyNA)R@O#FClyJ$eh__$|j*-iU=GxZZ*IZQb?TmzwAFS;n8fV{SCir`|x! z&Ga>|(8gZxzW8jL&l?;!Gg^LRrr-H4pOx>ldaaVL-0$;uG`HV7-k;AMyfM`pYZ)-p zf73#L8Q%CVy|E1rOIPx|IF46db{_L{@7~;eulo09+`7&i-0RiuxycOwZg(3#yfO#s r@crM5jyc~_w|qQvK+(P3%wH|(jq|-b*KuG+)qjz-eE#2^k9Xid@@^3y diff --git a/res/hotaru_futaba.data.h b/res/hotaru_futaba.data.h deleted file mode 100644 index 9dda90e..0000000 --- a/res/hotaru_futaba.data.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -extern uint32_t _binary_hotaru_futaba_data_start __asm("_binary_hotaru_futaba_data_start"); -extern uint32_t _binary_hotaru_futaba_data_end __asm("_binary_hotaru_futaba_data_end"); -extern uint32_t _binary_hotaru_futaba_data_size __asm("_binary_hotaru_futaba_data_size"); diff --git a/res/hotaru_futaba.data.pal b/res/hotaru_futaba.data.pal deleted file mode 100644 index bc024e829a22128733d8826fabd73a6b53f3ada0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 zcmV-00MGvb0095ps{gxp?uaw0RU-fY|J~i)s=K?0h=^4)yE7tY-4OsH5i{M)0GVb0 GhyVbE3l~rT diff --git a/res/hotaru_futaba.data.pal.h b/res/hotaru_futaba.data.pal.h deleted file mode 100644 index d8d0718..0000000 --- a/res/hotaru_futaba.data.pal.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -extern uint32_t _binary_hotaru_futaba_data_pal_start __asm("_binary_hotaru_futaba_data_pal_start"); -extern uint32_t _binary_hotaru_futaba_data_pal_end __asm("_binary_hotaru_futaba_data_pal_end"); -extern uint32_t _binary_hotaru_futaba_data_pal_size __asm("_binary_hotaru_futaba_data_pal_size"); diff --git a/res/majora.h b/res/majora.h new file mode 100644 index 0000000..8ccc9d5 --- /dev/null +++ b/res/majora.h @@ -0,0 +1,108 @@ +#pragma once + +#include + +#include "model/material.h" + +enum material { + mtl_060067E0, + mtl_060077E0, + mtl_060079E0, + mtl_06007BE0, + mtl_06007DE0, + mtl_06007FE0, +}; + +struct material_descriptor material[] = { + [mtl_060067E0] = { + .pixel = { + .start = (uint8_t *)&_binary_060067E0_data_start, + .size = (int)&_binary_060067E0_data_size, + .vram_offset = 0, + .width = 64, + .height = 64, + }, + .palette = { + .start = (uint8_t *)&_binary_060067E0_data_pal_start, + .size = (int)&_binary_060067E0_data_pal_size, + .vram_offset = 0, + .palette_size = 256, + }, + }, + [mtl_060077E0] = { + .pixel = { + .start = (uint8_t *)&_binary_060077E0_data_start, + .size = (int)&_binary_060077E0_data_size, + .vram_offset = 4096, + .width = 16, + .height = 16, + }, + .palette = { + .start = (uint8_t *)&_binary_060077E0_data_pal_start, + .size = (int)&_binary_060077E0_data_pal_size, + .vram_offset = 512, + .palette_size = 4, + }, + }, + [mtl_060079E0] = { + .pixel = { + .start = (uint8_t *)&_binary_060079E0_data_start, + .size = (int)&_binary_060079E0_data_size, + .vram_offset = 4160, + .width = 16, + .height = 16, + }, + .palette = { + .start = (uint8_t *)&_binary_060079E0_data_pal_start, + .size = (int)&_binary_060079E0_data_pal_size, + .vram_offset = 528, + .palette_size = 4, + }, + }, + [mtl_06007BE0] = { + .pixel = { + .start = (uint8_t *)&_binary_06007BE0_data_start, + .size = (int)&_binary_06007BE0_data_size, + .vram_offset = 4224, + .width = 16, + .height = 16, + }, + .palette = { + .start = (uint8_t *)&_binary_06007BE0_data_pal_start, + .size = (int)&_binary_06007BE0_data_pal_size, + .vram_offset = 544, + .palette_size = 4, + }, + }, + [mtl_06007DE0] = { + .pixel = { + .start = (uint8_t *)&_binary_06007DE0_data_start, + .size = (int)&_binary_06007DE0_data_size, + .vram_offset = 4288, + .width = 16, + .height = 16, + }, + .palette = { + .start = (uint8_t *)&_binary_06007DE0_data_pal_start, + .size = (int)&_binary_06007DE0_data_pal_size, + .vram_offset = 560, + .palette_size = 16, + }, + }, + [mtl_06007FE0] = { + .pixel = { + .start = (uint8_t *)&_binary_06007FE0_data_start, + .size = (int)&_binary_06007FE0_data_size, + .vram_offset = 4416, + .width = 32, + .height = 32, + }, + .palette = { + .start = (uint8_t *)&_binary_06007FE0_data_pal_start, + .size = (int)&_binary_06007FE0_data_pal_size, + .vram_offset = 592, + .palette_size = 256, + }, + }, +}; + diff --git a/models/parse_material.py b/res/parse_material.py similarity index 100% rename from models/parse_material.py rename to res/parse_material.py diff --git a/models/parse_obj_fixed_point.py b/res/parse_obj_fixed_point.py similarity index 100% rename from models/parse_obj_fixed_point.py rename to res/parse_obj_fixed_point.py diff --git a/res/path.py b/res/path.py new file mode 100644 index 0000000..2834d44 --- /dev/null +++ b/res/path.py @@ -0,0 +1,7 @@ +from os import path + +def texture_path(s): + return path.join('..', 'texture', s) + +def model_path(s): + return path.join('..', 'model', s) diff --git a/res/player.data b/res/player.data deleted file mode 100644 index e1805465e1e1fd6481e9c8fb2bd93ff26cb174d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmaivOBTc+2m~7x5 -extern uint32_t _binary_player_data_start __asm("_binary_player_data_start"); -extern uint32_t _binary_player_data_end __asm("_binary_player_data_end"); -extern uint32_t _binary_player_data_size __asm("_binary_player_data_size"); diff --git a/res/player.data.pal b/res/player.data.pal deleted file mode 100644 index 838f34ad227d71bb0182bf67c51bd936d998b344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 zcmZSh&j17h3ikRI3HBcK^$rdP931{9#P6RGe}6*3{{!*=4@~%fVZ;3g@Bjb!4*-EG B7hV7W diff --git a/res/player.data.pal.h b/res/player.data.pal.h deleted file mode 100644 index 873735e..0000000 --- a/res/player.data.pal.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -extern uint32_t _binary_player_data_pal_start __asm("_binary_player_data_pal_start"); -extern uint32_t _binary_player_data_pal_end __asm("_binary_player_data_pal_end"); -extern uint32_t _binary_player_data_pal_size __asm("_binary_player_data_pal_size"); diff --git a/res/player.xcf b/res/player.xcf deleted file mode 100644 index abad8b005e71d76b88ab797729e7223c14ea9b38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmZuv%Wl&^6rH*DII-iTg#ruI#qg5SMMSdeE)gsM2_*g?O%unp)I5~9(5%WQbcNWm zLSn@q5Q!gP&!PyHNIZ5GX==`OI?`0)T4(N=Id?qAcN`~!u|Dkf^^1C=ArM8N4iNAf zkN^v7BEu-wb@TrAPV@26QL8m?wX&V|$2aYh<8d}`XY=Fi^M{kKzp_&1aRcZ3WeS+#T(YCc2uZ+9clX=z9J%wjl5RM{el+Vfk=6 z?sSu3thX_l*^>)iI~XRZPKMpRXv+1Yet#OJy3XYmU(w6O?AQwV)|wb~^A*O`Me;hg)(4n#+y)Haw0K}~ZSj)DLyMO!z6Q=NO%y=*41Paf zxjFAH^9+G}$KvLfFm;eP=-n#kqv-;F4}w0eay}Z3*T0zcO+l_B&fH3+Od@lg3W=YR z3I#My5;-0khfL0yP$lVvzmZfJ624LSeu+xhq{z>ZrTmU1lzT+@rBx7MqbF3csIY=F zbyGrCWiW1?;#k3AcQTkA<}|CJT0jEz" + yield "" + yield '#include "model/material.h"' + yield "" + +if __name__ == "__main__": + material_filenames = sys.argv[1:] + newmtl_mapkd = [] + for material_filename in material_filenames: + with open(material_filename) as f: + buf = f.read() + newmtl_mapkd.extend([ + (newmtl, mapkd) + for (newmtl, mapkd) in parse_mtl_file(buf) + ]) + + render, out = renderer() + render(render_header()) + render(render_material_enum(newmtl_mapkd)) + render(render_materials(newmtl_mapkd)) + sys.stdout.write(out.getvalue()) diff --git a/res/060067E0.data b/texture/060067E0.data similarity index 100% rename from res/060067E0.data rename to texture/060067E0.data diff --git a/res/060067E0.data.h b/texture/060067E0.data.h similarity index 100% rename from res/060067E0.data.h rename to texture/060067E0.data.h diff --git a/texture/060067E0.data.pal b/texture/060067E0.data.pal new file mode 100644 index 0000000000000000000000000000000000000000..b407bf70176afbd4163e4ff2705ca93286caa388 GIT binary patch literal 512 zcmV+b0{{I0000003;_fH1OWg700IOc1Obo(03Zw^00V#^fCGpk5F!8}5F-dB03nn? z5I__p5C?=p3?>94j6obi7$TrT7();Uh+qUIh(jPHjDP?pm?wy07$}4%m|`GC1Sy0m zjAImIBt)nxh(~}bh-VBdh%Ag`pe&3nj7o%|j7p4Uq=cMHkZFvBq=c+ajEV@u2yGDI z45cV-45ct_6iPa0k#MPu#d0l;!8(+l7O%0)Nw2Y%oq8pevG5JhMYAy~7SF+&k?m3NG0?&AG49Q} z9r3NYk@3M0N)jsi6%(cx4*HS$F>R(&CNS1H78;^-CRZ+65^-A0GI8FpGFv))4wjmf zPI;P^l9S@LHky*QGS?dOM$=}Wj`PCVn%a{3k{Tm97yL^6);HHZQ(Qw^OL^m(=l*+b COvk1G literal 0 HcmV?d00001 diff --git a/res/060067E0.data.pal.h b/texture/060067E0.data.pal.h similarity index 100% rename from res/060067E0.data.pal.h rename to texture/060067E0.data.pal.h diff --git a/res/060067E0.png b/texture/060067E0.png similarity index 100% rename from res/060067E0.png rename to texture/060067E0.png diff --git a/texture/060077E0.data b/texture/060077E0.data new file mode 100644 index 0000000000000000000000000000000000000000..d637f266883331ac14ac6beab67495aca11d7627 GIT binary patch literal 64 OcmZQ$V3@#00R{jh4+&ua literal 0 HcmV?d00001 diff --git a/res/060077E0.data.h b/texture/060077E0.data.h similarity index 100% rename from res/060077E0.data.h rename to texture/060077E0.data.h diff --git a/texture/060077E0.data.pal b/texture/060077E0.data.pal new file mode 100644 index 0000000..6c7abab --- /dev/null +++ b/texture/060077E0.data.pal @@ -0,0 +1 @@ +m¿7ÿW \ No newline at end of file diff --git a/res/060077E0.data.pal.h b/texture/060077E0.data.pal.h similarity index 100% rename from res/060077E0.data.pal.h rename to texture/060077E0.data.pal.h diff --git a/res/060077E0.png b/texture/060077E0.png similarity index 100% rename from res/060077E0.png rename to texture/060077E0.png diff --git a/texture/060079E0.data b/texture/060079E0.data new file mode 100644 index 0000000000000000000000000000000000000000..d637f266883331ac14ac6beab67495aca11d7627 GIT binary patch literal 64 OcmZQ$V3@#00R{jh4+&ua literal 0 HcmV?d00001 diff --git a/res/060079E0.data.h b/texture/060079E0.data.h similarity index 100% rename from res/060079E0.data.h rename to texture/060079E0.data.h diff --git a/texture/060079E0.data.pal b/texture/060079E0.data.pal new file mode 100644 index 0000000..0685441 --- /dev/null +++ b/texture/060079E0.data.pal @@ -0,0 +1 @@ +´5~N^w \ No newline at end of file diff --git a/res/060079E0.data.pal.h b/texture/060079E0.data.pal.h similarity index 100% rename from res/060079E0.data.pal.h rename to texture/060079E0.data.pal.h diff --git a/res/060079E0.png b/texture/060079E0.png similarity index 100% rename from res/060079E0.png rename to texture/060079E0.png diff --git a/texture/06007BE0.data b/texture/06007BE0.data new file mode 100644 index 0000000000000000000000000000000000000000..1220b90a6ea3489b8a1fab18e615ca3526694229 GIT binary patch literal 64 acmWe*V3;CCB93BUSenJ?uyPe^z$yS)Jq(`! literal 0 HcmV?d00001 diff --git a/res/06007BE0.data.h b/texture/06007BE0.data.h similarity index 100% rename from res/06007BE0.data.h rename to texture/06007BE0.data.h diff --git a/texture/06007BE0.data.pal b/texture/06007BE0.data.pal new file mode 100644 index 0000000..7360c8a --- /dev/null +++ b/texture/06007BE0.data.pal @@ -0,0 +1 @@ +D%«6qK \ No newline at end of file diff --git a/res/06007BE0.data.pal.h b/texture/06007BE0.data.pal.h similarity index 100% rename from res/06007BE0.data.pal.h rename to texture/06007BE0.data.pal.h diff --git a/res/06007BE0.png b/texture/06007BE0.png similarity index 100% rename from res/06007BE0.png rename to texture/06007BE0.png diff --git a/texture/06007DE0.data b/texture/06007DE0.data new file mode 100644 index 0000000000000000000000000000000000000000..88536b62d7a7ac4ab699f924ffcad9ee394a5324 GIT binary patch literal 128 zcmZQ!00RdVArP(Td387~I0I04Oa{vGU literal 0 HcmV?d00001 diff --git a/res/06007DE0.data.h b/texture/06007DE0.data.h similarity index 100% rename from res/06007DE0.data.h rename to texture/06007DE0.data.h diff --git a/texture/06007DE0.data.pal b/texture/06007DE0.data.pal new file mode 100644 index 0000000..1a1df04 --- /dev/null +++ b/texture/06007DE0.data.pal @@ -0,0 +1 @@ +ˆEêQKZLVnZñf3oSststw \ No newline at end of file diff --git a/res/06007DE0.data.pal.h b/texture/06007DE0.data.pal.h similarity index 100% rename from res/06007DE0.data.pal.h rename to texture/06007DE0.data.pal.h diff --git a/res/06007DE0.png b/texture/06007DE0.png similarity index 100% rename from res/06007DE0.png rename to texture/06007DE0.png diff --git a/res/06007FE0.data b/texture/06007FE0.data similarity index 100% rename from res/06007FE0.data rename to texture/06007FE0.data diff --git a/res/06007FE0.data.h b/texture/06007FE0.data.h similarity index 100% rename from res/06007FE0.data.h rename to texture/06007FE0.data.h diff --git a/texture/06007FE0.data.pal b/texture/06007FE0.data.pal new file mode 100644 index 0000000000000000000000000000000000000000..6a033b0636930b520bd61a9df5caf6a9d416d6e7 GIT binary patch literal 108 zcmV-y0F(a!0FWWDA+aH{A+jaXA<`w&CG#cpCG;uvDHSRfDmE%ME;lMSE>|vCE_g0^ zE_yC{GMO%#GMh4-HoG>wGQ2k2Hr+PfHr_h^I{!NVJ|8EX>4Tx04R}tkv&MmKpe$iQ)^W!4t5Z6$WX<>E-K;vxAeOiU6f~aKKJM7S92Bvd?Im-8KzCVK|Hf* z8=Uuv!>lN)#OK5lCS8#Dk?V@bZ=4G*3p_Jyrc?98VPdh+#!4HrqNx#26Gv1{r+gvf zvC4UivsSLM<~{ifLpgnAnd>x1kia6AAVGwJDoQBBMwC{a6bmWZk9Y77yMBpW3b{&P z=bb;{@U#SDLpQP7X zTI2{A*aj}HTbi;5TgF0PPq65^DgGYZ!og zW5A36zm!V$tpLEaoaD7q|IPsa-gEZv&j0`aV}|z_00009a7bBm001r{001r{0eGc9 zb^rhX2XskIMF;2!1qT`~Ww}6|0000PbVXQnLvL+uWo~o;Lvm$dbY)~9cWHEJAV*0} zP*;Ht7XSbQfJsC_R7l6g)xm4qRu};A&jdM+6L@~}(s?@!X8aEbv7O_PL)pnLQ|v5- znH@sOA$SK@_Hc&-HC18^z6|9t4ctQ0%>%Q;O6`e^T#Qk9*Y@HGT4>ppgL#*o)hEez zY}sjV+jr1G`ssV```&vJ*zXAV&jCaHg02Q^=^bE6%yCt@0x+9NQ7Q5kfS4qSK@?Ka zEMVZ>V9g~-`fTro0~neHwBdp0QAv_M{Ua?SJ2VAYm{4~hHjtdCAL0n(Nk)0WUNbeS zJBfsgVHt@CDuj3)YM|b|AB;RCWA}LA9 zY$p+qZwA&c!J2N~BP0bNZbc`Q8##UtbAf7lFy76!dfKmYXvD1lv z9lvfp{@eq@+|*h?1VU$)Wj(&mFTu74UPl06yja0z(E)DU4Yr&ZUSL(Ni~$HIwZRDd z22K7d&y&tp&}6y)EoKepsZqD?!p~$Mg8Rcm8C~uNCRf+_AcIQCNP*rs$ng~SBhwoO zd{yx~tS!=+> znL)YuCfJ&5ROx$n$t^?YLfbx_JN|mlslysPae#R{=LgHwlxxl;JA^tZ=D-Ryi-uv0 zGEfbCfR!liXZZ-7st3>lK;^8eRx{3X+FuCz@&uR*0V&8l^o4*=lA2mUkd;E&1^ESl z(sL%4$c{UQ{CpoAU<(;iaH}ZzTfMBifMpcf8G-l#Q#`;^WOR4FKHw&B0FxI2w@MfA zW2i5vB3zyTTX1n>2C(*@baIzXb!q|t6haj51ML<(!c%2}`%M}F^M@y-aphkRN>5wg sU9_85{}$nR|KP2_9S+d{^J|`uH%pZmT_5AHu>b%707*qoM6N<$g2wi#E&u=k literal 0 HcmV?d00001 diff --git a/texture/player.png b/texture/player.png new file mode 100644 index 0000000000000000000000000000000000000000..43e4a7a5a7be3cf2fe7b86f25871c17086b1bc27 GIT binary patch literal 771 zcmV+e1N{7nP)EX>4Tx04R}tkv&MmKpe$iQ)^W!4t5Z6$WX<>E-K;vxAeOiU6f~aKKJM7S92Bvd?Im-8KzCVK|Hf* z8=Uuv!>lN)#OK5lCS8#Dk?V@bZ=4G*3p_Jyrc?98VPdh+#!4HrqNx#26Gv1{r+gvf zvC4UivsSLM<~{ifLpgnAnd>x1kia6AAVGwJDoQBBMwC{a6bmWZk9Y77yMBpW3b{&P z=bb;{@U#SDLpQP7X zTI2{A*aj}HTbi;5TgFuK0znEX&kZ}LNU;n_6|Io1C;P3zV|0fPAn*aa+32;bRa{vGi!~g&e!~vBn4jTXf z00(qQO+^Rj2?YllCTn8IuK)l58FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X z4i^9b0JKR&K~xCWWsV^Z!axv39|`NbO^U(5k`w`oUI2k6TR{_of&>o0DS83KrZ>Pr zf~ZBW#Maf)GcfB2jClFU{LCBpo&HL&eoN>&=uOWMPfh_D>gGM_;peceW}sXpmBhio zXw)@MQDtF3CkI*RjUd;8<6e&H=ufr`!Zrw7iB0o@u8}l7OZT)GLl)ru(DL*<%e}rp z?JT%lD%!~5!}w}3$8toP$FK<=od^a+6u$TtegG*2CvCx7ip2l`002ovPDHLkV1iTX BPJ#dc literal 0 HcmV?d00001 diff --git a/texture/texture.mk b/texture/texture.mk new file mode 100644 index 0000000..cf59398 --- /dev/null +++ b/texture/texture.mk @@ -0,0 +1,11 @@ +%.data: %.png + python ../res/binary_image_palette.py $< $@ + +%.data.pal: %.png + python ../res/binary_image_palette.py $< $@ + +%.data.h: %.data + $(BUILD_BINARY_H) + +%.data.pal.h: %.data.pal + $(BUILD_BINARY_H)