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 687ba9f..0000000 Binary files a/res/060067E0.data.pal and /dev/null differ diff --git a/res/060077E0.data b/res/060077E0.data deleted file mode 100644 index ddff5c7..0000000 Binary files a/res/060077E0.data and /dev/null differ diff --git a/res/060077E0.data.pal b/res/060077E0.data.pal deleted file mode 100644 index 42ff69e..0000000 --- a/res/060077E0.data.pal +++ /dev/null @@ -1 +0,0 @@ -hX(øèhøø¨ \ No newline at end of file diff --git a/res/060079E0.data b/res/060079E0.data deleted file mode 100644 index ddff5c7..0000000 Binary files a/res/060079E0.data and /dev/null differ diff --git a/res/060079E0.data.pal b/res/060079E0.data.pal deleted file mode 100644 index 395433c..0000000 --- a/res/060079E0.data.pal +++ /dev/null @@ -1 +0,0 @@ - hhð˜˜ðÐè \ No newline at end of file diff --git a/res/06007BE0.data b/res/06007BE0.data deleted file mode 100644 index dc01920..0000000 Binary files a/res/06007BE0.data and /dev/null differ diff --git a/res/06007BE0.data.pal b/res/06007BE0.data.pal deleted file mode 100644 index fe8bb58..0000000 --- a/res/06007BE0.data.pal +++ /dev/null @@ -1 +0,0 @@ - PHX¨hˆØ \ No newline at end of file diff --git a/res/06007DE0.data b/res/06007DE0.data deleted file mode 100644 index f63467b..0000000 Binary files a/res/06007DE0.data and /dev/null differ diff --git a/res/06007DE0.data.pal b/res/06007DE0.data.pal deleted file mode 100644 index bafcd84..0000000 --- a/res/06007DE0.data.pal +++ /dev/null @@ -1 +0,0 @@ -@`ˆPx X°`¨p˜°ˆ¸È˜ÈؘÐà Øà Øè \ No newline at end of file diff --git a/res/06007FE0.data.pal b/res/06007FE0.data.pal deleted file mode 100644 index 0338b00..0000000 Binary files a/res/06007FE0.data.pal and /dev/null differ diff --git a/res/060087E0.data b/res/060087E0.data deleted file mode 100644 index bc22d71..0000000 Binary files a/res/060087E0.data and /dev/null differ 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 53e65a2..0000000 Binary files a/res/060087E0.data.pal and /dev/null differ 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(' -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 a8c6d94..0000000 Binary files a/res/bowser.data.pal and /dev/null differ diff --git a/res/bowser.data.pal.h b/res/bowser.data.pal.h deleted file mode 100644 index c134213..0000000 --- a/res/bowser.data.pal.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -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 7209d5b..0000000 Binary files a/res/bowser.xcf and /dev/null differ diff --git a/res/generate.py b/res/generate.py new file mode 120000 index 0000000..6d0dc0e --- /dev/null +++ b/res/generate.py @@ -0,0 +1 @@ +../register/generate.py \ No newline at end of file diff --git a/res/hotaru_futaba.data b/res/hotaru_futaba.data deleted file mode 100644 index 988a3ff..0000000 Binary files a/res/hotaru_futaba.data and /dev/null differ 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 bc024e8..0000000 Binary files a/res/hotaru_futaba.data.pal and /dev/null differ 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 e180546..0000000 Binary files a/res/player.data and /dev/null differ diff --git a/res/player.data.h b/res/player.data.h deleted file mode 100644 index 430fcaa..0000000 --- a/res/player.data.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -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 838f34a..0000000 Binary files a/res/player.data.pal and /dev/null differ 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 abad8b0..0000000 Binary files a/res/player.xcf and /dev/null differ diff --git a/models/render_obj_fixed_point_c_source.py b/res/render_obj_fixed_point_c_source.py similarity index 73% rename from models/render_obj_fixed_point_c_source.py rename to res/render_obj_fixed_point_c_source.py index 818047c..fba0051 100644 --- a/models/render_obj_fixed_point_c_source.py +++ b/res/render_obj_fixed_point_c_source.py @@ -108,35 +108,6 @@ def render_object(prefix, object_name, d, material): yield "};" -def render_pixel_palette(prefix, newmtl, mapkd): - name, _ext = mapkd.name.rsplit('.', maxsplit=1) - pixel_name = f"{name}_data" - palette_name = f"{name}_data_pal" - - yield f"[{newmtl.name}] = {{" - yield ".pixel = {" - yield f".start = (uint8_t *)&_binary_{pixel_name}_start," - yield f".end = (uint8_t *)&_binary_{pixel_name}_end," - yield f".size = (int)&_binary_{pixel_name}_size," - yield "}," - yield ".palette = {" - yield f".start = (uint8_t *)&_binary_{palette_name}_start," - yield f".end = (uint8_t *)&_binary_{palette_name}_end," - yield f".size = (int)&_binary_{palette_name}_size," - yield "}," - yield "}," - -def render_materials(prefix, newmtl_mapkd): - yield f"enum {prefix}_material {{" - for newmtl, mapkd in newmtl_mapkd: - yield f"{newmtl.name},"; - yield "};" - - yield f"struct pixel_palette {prefix}_pixel_palette[] = {{" - for newmtl, mapkd in newmtl_mapkd: - yield from render_pixel_palette(prefix, newmtl, mapkd) - yield "};" - def render_header(): yield '#include "model.h"' yield "" @@ -152,22 +123,6 @@ render(render_vertex_positions(prefix, vertices[VertexPosition])) render(render_vertex_texture(prefix, vertices[VertexTexture])) render(render_vertex_normals(prefix, vertices[VertexNormal])) -materials_by_lib_name = set((m.lib, m.name) for m in materials.values()) -material_names = set() -for _, name in materials_by_lib_name: - assert name not in material_names - material_names.add(name) -material_libs = set(lib for lib, _ in materials_by_lib_name) -for material_lib in material_libs: - with open(material_lib) as f: - buf = f.read() - newmtl_mapkd = [ - (newmtl, mapkd) - for (newmtl, mapkd) in parse_mtl_file(buf) - if newmtl.name in material_names - ] - render(render_materials(prefix, newmtl_mapkd)) - for object_name, d in faces.items(): object_prefix = '_'.join((prefix, object_name)) diff --git a/models/verify_fixed_point.py b/res/verify_fixed_point.py similarity index 100% rename from models/verify_fixed_point.py rename to res/verify_fixed_point.py diff --git a/res/vram_allocate_textures.py b/res/vram_allocate_textures.py new file mode 100644 index 0000000..29a0637 --- /dev/null +++ b/res/vram_allocate_textures.py @@ -0,0 +1,117 @@ +from dataclasses import dataclass +from generate import renderer +from math import log +from path import texture_path +import sys + +from PIL import Image + +from parse_material import parse_mtl_file + +material_filenames = sys.argv[1:] + +def render_material_enum(newmtl_mapkd): + yield f"enum material {{" + for newmtl, mapkd in newmtl_mapkd: + yield f"{newmtl.name},"; + yield "};" + +def render_pixel_descriptor(offset, mapkd, dimensions): + name, _ext = mapkd.name.rsplit('.', maxsplit=1) + pixel_name = f"{name}_data" + width, height = dimensions + yield ".pixel = {" + yield f".start = (uint8_t *)&_binary_{pixel_name}_start," + yield f".size = (int)&_binary_{pixel_name}_size," + yield f".vram_offset = {offset.pixel}," + yield f".width = {width}," + yield f".height = {height}," + yield "}," + +def render_palette_descriptor(offset, mapkd, palette_size): + name, _ext = mapkd.name.rsplit('.', maxsplit=1) + palette_name = f"{name}_data_pal" + yield ".palette = {" + yield f".start = (uint8_t *)&_binary_{palette_name}_start," + yield f".size = (int)&_binary_{palette_name}_size," + yield f".vram_offset = {offset.palette}," + yield f".palette_size = {palette_size}," + yield "}," + +@dataclass +class Offset: + pixel: int + palette: int + +def round_up_colors(name, colors): + assert colors != 0, (name, colors) + if colors <= 4: + return 4 + elif colors <= 16: + return 16 + elif colors <= 256: + return 256 + else: + assert False, (name, colors) + +def image_metadata(mapkd): + path = texture_path(mapkd.name) + with Image.open(path) as im: + dimensions = im.size + colors = len(im.palette.colors) + return dimensions, colors + +def round_up_n(x, multiple): + return ((x + multiple - 1) // multiple) * multiple + +def bytes_per_pixel(palette_size): + bits_per_pixel = int(log(palette_size)/log(2)) + return bits_per_pixel / 8 + +def render_material(offset, mapkd): + dimensions, colors = image_metadata(mapkd) + palette_size = round_up_colors(mapkd.name, colors) + + # pixel descriptor + yield from render_pixel_descriptor(offset, mapkd, dimensions) + pixel_size = bytes_per_pixel(palette_size) * dimensions[0] * dimensions[1] + assert int(pixel_size) == pixel_size + offset.pixel += round_up_n(int(pixel_size), 8) + + # palette descriptor + yield from render_palette_descriptor(offset, mapkd, palette_size) + offset.palette += round_up_n(colors * 2, 16) + +def render_materials(newmtl_mapkd): + yield "struct material_descriptor material[] = {" + offset = Offset(0, 0) + for newmtl, mapkd in newmtl_mapkd: + yield f"[{newmtl.name}] = {{" + yield from render_material(offset, mapkd) + yield "}," + yield "};" + +def render_header(): + yield "#pragma once" + yield "" + yield "#include " + 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 0000000..b407bf7 Binary files /dev/null and b/texture/060067E0.data.pal differ 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 0000000..d637f26 Binary files /dev/null and b/texture/060077E0.data differ 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 0000000..d637f26 Binary files /dev/null and b/texture/060079E0.data differ 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 0000000..1220b90 Binary files /dev/null and b/texture/06007BE0.data differ 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 0000000..88536b6 Binary files /dev/null and b/texture/06007DE0.data differ 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 0000000..6a033b0 Binary files /dev/null and b/texture/06007FE0.data.pal differ diff --git a/res/06007FE0.data.pal.h b/texture/06007FE0.data.pal.h similarity index 100% rename from res/06007FE0.data.pal.h rename to texture/06007FE0.data.pal.h diff --git a/res/06007FE0.png b/texture/06007FE0.png similarity index 100% rename from res/06007FE0.png rename to texture/06007FE0.png diff --git a/res/060087E0.png b/texture/060087E0.png similarity index 100% rename from res/060087E0.png rename to texture/060087E0.png diff --git a/texture/bowser.png b/texture/bowser.png new file mode 100644 index 0000000..c450954 Binary files /dev/null and b/texture/bowser.png differ diff --git a/texture/player.png b/texture/player.png new file mode 100644 index 0000000..43e4a7a Binary files /dev/null and b/texture/player.png differ 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)