examples: add happy_mask_salesman

This commit is contained in:
Zack Buhman 2024-09-11 13:27:28 -05:00
parent b49f61292f
commit ed46a806b7
81 changed files with 25766 additions and 3 deletions

View File

@ -23,6 +23,7 @@ cube.elf: $(DEFAULT) arm9/cube.bin.o
icosphere.elf: $(DEFAULT) arm9/icosphere.bin.o icosphere.elf: $(DEFAULT) arm9/icosphere.bin.o
majora.elf: $(DEFAULT) arm9/majora.bin.o majora.elf: $(DEFAULT) arm9/majora.bin.o
ulala.elf: $(DEFAULT) arm9/ulala.bin.o ulala.elf: $(DEFAULT) arm9/ulala.bin.o
happy_mask_salesman.elf: $(DEFAULT) arm9/happy_mask_salesman.bin.o
TARGET = arm-none-eabi- TARGET = arm-none-eabi-
AARCH = -march=armv4t -mlittle-endian AARCH = -march=armv4t -mlittle-endian

View File

@ -64,6 +64,39 @@ examples/ulala.c: $(patsubst %.o,%.h,$(ULALA_RES))
ulala.elf: start.o examples/ulala.o ../math/cos_table_fp12.o ../math/cos.o $(ULALA_RES) ulala.elf: start.o examples/ulala.o ../math/cos_table_fp12.o ../math/cos.o $(ULALA_RES)
HAPPY_MASK_SALESMAN_RES = \
../model/happy_mask_salesman/mask_00_8A00.data.o \
../model/happy_mask_salesman/mask_01_9200.data.o \
../model/happy_mask_salesman/mask_02_9A00.data.o \
../model/happy_mask_salesman/mask_03_A200.data.o \
../model/happy_mask_salesman/mask_04_AA00.data.o \
../model/happy_mask_salesman/mask_05_B200.data.o \
../model/happy_mask_salesman/mask_06_BA00.data.o \
../model/happy_mask_salesman/mask_07_C200.data.o \
../model/happy_mask_salesman/mask_08_CA00.data.o \
../model/happy_mask_salesman/mask_09_D200.data.o \
../model/happy_mask_salesman/maskmaster_00_0.data.o \
../model/happy_mask_salesman/maskmaster_01_4A00.data.o \
../model/happy_mask_salesman/maskmaster_e00_6A00.data.o \
../model/happy_mask_salesman/maskmaster_m00_7A00.data.o \
../model/happy_mask_salesman/mask_00_8A00.data.pal.o \
../model/happy_mask_salesman/mask_01_9200.data.pal.o \
../model/happy_mask_salesman/mask_02_9A00.data.pal.o \
../model/happy_mask_salesman/mask_03_A200.data.pal.o \
../model/happy_mask_salesman/mask_04_AA00.data.pal.o \
../model/happy_mask_salesman/mask_05_B200.data.pal.o \
../model/happy_mask_salesman/mask_06_BA00.data.pal.o \
../model/happy_mask_salesman/mask_07_C200.data.pal.o \
../model/happy_mask_salesman/mask_08_CA00.data.pal.o \
../model/happy_mask_salesman/mask_09_D200.data.pal.o \
../model/happy_mask_salesman/maskmaster_00_0.data.pal.o \
../model/happy_mask_salesman/maskmaster_01_4A00.data.pal.o \
../model/happy_mask_salesman/maskmaster_e00_6A00.data.pal.o \
../model/happy_mask_salesman/maskmaster_m00_7A00.data.pal.o
examples/happy_mask_salesman.c: $(patsubst %.o,%.h,$(HAPPY_MASK_SALESMAN_RES))
happy_mask_salesman.elf: start.o examples/happy_mask_salesman.o ../math/cos_table_fp12.o ../math/cos.o $(HAPPY_MASK_SALESMAN_RES)
CFLAGS += -I../include -I../ CFLAGS += -I../include -I../
include arm9.mk include arm9.mk

View File

@ -0,0 +1,490 @@
#include "io_registers.h"
#include "bits.h"
#include "math/math.h"
#include "model/happy_mask_salesman/mask_00_8A00.data.h"
#include "model/happy_mask_salesman/mask_01_9200.data.h"
#include "model/happy_mask_salesman/mask_02_9A00.data.h"
#include "model/happy_mask_salesman/mask_03_A200.data.h"
#include "model/happy_mask_salesman/mask_04_AA00.data.h"
#include "model/happy_mask_salesman/mask_05_B200.data.h"
#include "model/happy_mask_salesman/mask_06_BA00.data.h"
#include "model/happy_mask_salesman/mask_07_C200.data.h"
#include "model/happy_mask_salesman/mask_08_CA00.data.h"
#include "model/happy_mask_salesman/mask_09_D200.data.h"
#include "model/happy_mask_salesman/maskmaster_00_0.data.h"
#include "model/happy_mask_salesman/maskmaster_01_4A00.data.h"
#include "model/happy_mask_salesman/maskmaster_e00_6A00.data.h"
#include "model/happy_mask_salesman/maskmaster_m00_7A00.data.h"
#include "model/happy_mask_salesman/mask_00_8A00.data.pal.h"
#include "model/happy_mask_salesman/mask_01_9200.data.pal.h"
#include "model/happy_mask_salesman/mask_02_9A00.data.pal.h"
#include "model/happy_mask_salesman/mask_03_A200.data.pal.h"
#include "model/happy_mask_salesman/mask_04_AA00.data.pal.h"
#include "model/happy_mask_salesman/mask_05_B200.data.pal.h"
#include "model/happy_mask_salesman/mask_06_BA00.data.pal.h"
#include "model/happy_mask_salesman/mask_07_C200.data.pal.h"
#include "model/happy_mask_salesman/mask_08_CA00.data.pal.h"
#include "model/happy_mask_salesman/mask_09_D200.data.pal.h"
#include "model/happy_mask_salesman/maskmaster_00_0.data.pal.h"
#include "model/happy_mask_salesman/maskmaster_01_4A00.data.pal.h"
#include "model/happy_mask_salesman/maskmaster_e00_6A00.data.pal.h"
#include "model/happy_mask_salesman/maskmaster_m00_7A00.data.pal.h"
#include "model/happy_mask_salesman/material.h"
#include "model/happy_mask_salesman/model.h"
void copy_palettes()
{
volatile uint16_t * vram_f = (volatile uint16_t *)(0x06890000);
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] = pal[c];
}
}
}
uint32_t teximage_param__t_size(int height)
{
switch (height) {
default:
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 teximage_param__s_size(int width)
{
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()
{
volatile uint16_t * vram_a = (volatile uint16_t *)(0x06800000);
int pixels = (sizeof (material)) / (sizeof (material[0]));
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 t = 0; t < size / 2; t++) {
vram_a[offset / 2 + t] = pixel[t];
}
}
}
int u_to_s(int n, int dimension)
{
return (n * dimension) >> 10;
}
int v_to_t(int n, int dimension)
{
return ((((1 << 15) - n) * dimension) >> 10);
}
void copy_texture_data()
{
// memory bank allocation
// use VRAM-A for texture pixel data
// use VRAM-E for texture palette data
// temporarily map VRAM-A (128KB) to the arm9 address space:
// 0x06800000 - 0x0681FFFF
io_registers.a.VRAMCNT = 0
| VRAMCNT__vram_a__enable
| VRAMCNT__vram_a__mst(0b00); // arm9
// temporarily map VRAM-F (16KB) to the arm9 address space:
// 0x06890000 - 0x06893FFF
io_registers.a.WVRAMCNT = 0
| WVRAMCNT__vram_f__enable
| WVRAMCNT__vram_f__mst(0b000); // arm9
// at this point, VRAM-A/VRAM-E are not accessible by the 3d engine.
copy_palettes();
copy_pixels();
// map VRAM-A (128KB) to the 3d-engine "texture image slot 0":
// 0x00000 - 0x1ffff (3d engine texture image address space)
io_registers.a.VRAMCNT = 0
| VRAMCNT__vram_a__enable
| VRAMCNT__vram_a__ofs(0) // slot 0
| VRAMCNT__vram_a__mst(0b11); // texture image
// map VRAM-F (16KB) to the 3d-engine "texture palette slot 0":
// 0x0000 - 0x3fff (3d engine texture palette address space)
io_registers.a.WVRAMCNT = 0
| WVRAMCNT__vram_f__enable
| WVRAMCNT__vram_f__ofs(0) // slot 0
| WVRAMCNT__vram_f__mst(0b011); // texture palette
}
void main()
{
// power control
io_registers.a.POWCNT = 0
| POWCNT__lcd_output_destination__a_to_upper__b_to_lower
| POWCNT__geometry_engine__enable
| POWCNT__rendering_engine__enable
| POWCNT__lcd__enable;
// enable bg0 and 3d graphics
io_registers.a.DISPCNT = 0
| DISPCNT__display_mode__graphics_display
| DISPCNT__bg0__enable
| DISPCNT__display_selection_for_bg0__3d_graphics
;
// disable all 3d effects
io_registers.a.DISP3DCNT = 0
| DISP3DCNT__clear_image__disable
| DISP3DCNT__fog_master__disable
| DISP3DCNT__edge_marking__disable
| DISP3DCNT__anti_aliasing__disable
| DISP3DCNT__alpha_blending__disable
| DISP3DCNT__alpha_test__disable
| DISP3DCNT__texture_mapping__enable;
copy_texture_data();
// clear matrix stack status
io_registers.a.GXSTAT |= GXSTAT__matrix_stack_status__overflow_or_underflow;
// load identity matrices
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__projection;
io_registers.a.MTX_IDENTITY = 0;
// load a symmetric perspective matrix, with aspect ratio correction
io_registers.a.MTX_LOAD_4X4 = (192 << 12) / 256;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 1 << 12;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = -(1 << 12);
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = -(1 << 12) >> 4;
io_registers.a.MTX_LOAD_4X4 = 0;
// translate the viewpoint
io_registers.a.MTX_TRANS = 0;
io_registers.a.MTX_TRANS = (int)(-4.0 * (float)(1 << 11));
io_registers.a.MTX_TRANS = (int)(-7.0 * (float)(1 << 11));
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__position;
io_registers.a.MTX_IDENTITY = 0;
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__position_and_vector;
io_registers.a.MTX_IDENTITY = 0;
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__texture;
io_registers.a.MTX_IDENTITY = 0;
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__position_and_vector;
// set the 3d clear color to a dark red
io_registers.a.CLEAR_COLOR = 0
| CLEAR_COLOR__clear_polygon_id(31)
| CLEAR_COLOR__alpha_value(31)
| CLEAR_COLOR__blue(1)
| CLEAR_COLOR__green(1)
| CLEAR_COLOR__red(10);
// set the depth buffer clear value to the maximum value
io_registers.a.CLEAR_DEPTH = CLEAR_DEPTH__value(0x7fff);
// the 3d viewport is the entire display area
io_registers.a.VIEWPORT = 0
| VIEWPORT__y2(191)
| VIEWPORT__x2(255)
| VIEWPORT__y1(0)
| VIEWPORT__x1(0);
// normalized 45° vector
int c = 0.57735 * 512;
// lighting vectors and colors for 3 directional lights
io_registers.a.LIGHT_VECTOR = 0
| LIGHT_VECTOR__light_number(0)
| LIGHT_VECTOR__decimal_z(-c)
| LIGHT_VECTOR__decimal_y(-c)
| LIGHT_VECTOR__decimal_x(-c);
io_registers.a.LIGHT_VECTOR = 0
| LIGHT_VECTOR__light_number(1)
| LIGHT_VECTOR__decimal_z(-c)
| LIGHT_VECTOR__decimal_y(-c)
| LIGHT_VECTOR__decimal_x(c);
io_registers.a.LIGHT_VECTOR = 0
| LIGHT_VECTOR__light_number(2)
| LIGHT_VECTOR__decimal_z(-c)
| LIGHT_VECTOR__decimal_y(c)
| LIGHT_VECTOR__decimal_x(-c);
io_registers.a.LIGHT_COLOR = 0
| LIGHT_COLOR__light_number(0)
| LIGHT_COLOR__blue(31)
| LIGHT_COLOR__green(31)
| LIGHT_COLOR__red(31);
io_registers.a.LIGHT_COLOR = 0
| LIGHT_COLOR__light_number(1)
| LIGHT_COLOR__blue(31)
| LIGHT_COLOR__green(31)
| LIGHT_COLOR__red(31);
io_registers.a.LIGHT_COLOR = 0
| LIGHT_COLOR__light_number(2)
| LIGHT_COLOR__blue(31)
| LIGHT_COLOR__green(31)
| LIGHT_COLOR__red(31);
// integer degrees
int theta = 0;
while (1) {
// calculate sin/cos for 2d rotation; signed fp20.12 result
int cos = cos_fp12(theta);
int sin = sin_fp12(theta);
int cos2 = cos_fp12(-theta >> 1);
int sin2 = sin_fp12(-theta >> 1);
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__position_and_vector;
// reset position matrix
io_registers.a.MTX_IDENTITY = 0;
io_registers.a.MTX_TRANS = 0;
io_registers.a.MTX_TRANS = (int)(-1.0 * (float)(1 << 12));
io_registers.a.MTX_TRANS = (int)(0.15 * (float)(1 << 12));
// 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;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = 1 << 12;
io_registers.a.MTX_MULT_3X3 = 0;
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
io_registers.a.MTX_MULT_3X3 = cos;
io_registers.a.MTX_MULT_3X3 = -sin;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = sin;
io_registers.a.MTX_MULT_3X3 = cos;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = 1 << 12;
*/
// multiply by a x-axis rotation
/*
io_registers.a.MTX_MULT_3X3 = 1 << 12;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = cos2;
io_registers.a.MTX_MULT_3X3 = -sin2;
io_registers.a.MTX_MULT_3X3 = 0;
io_registers.a.MTX_MULT_3X3 = sin2;
io_registers.a.MTX_MULT_3X3 = cos2;
*/
// lighting parameters
io_registers.a.DIF_AMB = 0
| DIF_AMB__ambient_blue(3)
| DIF_AMB__ambient_green(3)
| DIF_AMB__ambient_red(3)
| DIF_AMB__diffuse_blue(10)
| DIF_AMB__diffuse_green(10)
| DIF_AMB__diffuse_red(10);
io_registers.a.SPE_EMI = 0
| SPE_EMI__specular_blue(25)
| SPE_EMI__specular_green(25)
| SPE_EMI__specular_red(25);
io_registers.a.COLOR = 0
| COLOR__blue(31)
| COLOR__green(31)
| COLOR__red(31)
;
// the following polygons are fully opaque; backface culling is
// enabled
io_registers.a.POLYGON_ATTR = 0
| POLYGON_ATTR__polygon_id(0)
| POLYGON_ATTR__alpha_value(31)
| POLYGON_ATTR__render_front_surface__enable
//| POLYGON_ATTR__render_back_surface__enable
| POLYGON_ATTR__polygon_mode__modulation
| POLYGON_ATTR__light_2__enable
| POLYGON_ATTR__light_1__enable
| POLYGON_ATTR__light_0__enable;
// the following vertices are triangles
io_registers.a.BEGIN_VTXS = BEGIN_VTXS__type__triangle;
struct model * model = &happy_mask_salesman_model;
for (int object_ix = 0; object_ix < model->object_count; object_ix++) {
struct object * obj = model->object[object_ix];
const int num_triangles = obj->triangle_count;
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;
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
// issue commands in the following order: TexCoord→Normal→Vertex."
struct vertex_texture * at = &model->texture[obj->triangle[i].a.texture];
io_registers.a.TEXCOORD = 0
| TEXCOORD__t_coordinate(v_to_t(at->v, height))
| TEXCOORD__s_coordinate(u_to_s(at->u, width));
struct vertex_normal * an = &model->normal[obj->triangle[i].a.normal];
io_registers.a.NORMAL = 0
| NORMAL__z_component(an->z)
| NORMAL__y_component(an->y)
| NORMAL__x_component(an->x);
struct vertex_position * a = &model->position[obj->triangle[i].a.position];
io_registers.a.VTX_16 = 0
| VTX_16__0__y_coordinate(a->y)
| VTX_16__0__x_coordinate(a->x);
io_registers.a.VTX_16 = 0
| VTX_16__1__z_coordinate(a->z);
struct vertex_texture * bt = &model->texture[obj->triangle[i].b.texture];
io_registers.a.TEXCOORD = 0
| TEXCOORD__t_coordinate(v_to_t(bt->v, height))
| TEXCOORD__s_coordinate(u_to_s(bt->u, width));
struct vertex_normal * bn = &model->normal[obj->triangle[i].b.normal];
io_registers.a.NORMAL = 0
| NORMAL__z_component(bn->z)
| NORMAL__y_component(bn->y)
| NORMAL__x_component(bn->x);
struct vertex_position * b = &model->position[obj->triangle[i].b.position];
io_registers.a.VTX_16 = 0
| VTX_16__0__y_coordinate(b->y)
| VTX_16__0__x_coordinate(b->x);
io_registers.a.VTX_16 = 0
| VTX_16__1__z_coordinate(b->z);
struct vertex_texture * ct = &model->texture[obj->triangle[i].c.texture];
io_registers.a.TEXCOORD = 0
| TEXCOORD__t_coordinate(v_to_t(ct->v, height))
| TEXCOORD__s_coordinate(u_to_s(ct->u, width));
struct vertex_normal * cn = &model->normal[obj->triangle[i].c.normal];
io_registers.a.NORMAL = 0
| NORMAL__z_component(cn->z)
| NORMAL__y_component(cn->y)
| NORMAL__x_component(cn->x);
struct vertex_position * c = &model->position[obj->triangle[i].c.position];
io_registers.a.VTX_16 = 0
| VTX_16__0__y_coordinate(c->y)
| VTX_16__0__x_coordinate(c->x);
io_registers.a.VTX_16 = 0
| VTX_16__1__z_coordinate(c->z);
}
}
// end of triangles
io_registers.a.END_VTXS = 0;
// wait for the geometry engine
while (io_registers.a.GXSTAT & GXSTAT__geometry_engine_busy);
// wait for the end of the current frame
//while (io_registers.a.VCOUNT != 262);
//while (io_registers.a.VCOUNT == 262);
// swap buffers
io_registers.a.SWAP_BUFFERS = 0;
// increment theta once per frame
theta += 1;
if (theta >= 360 * 16) {
theta = 0;
}
}
}

View File

@ -30,6 +30,19 @@ class FixedPoint:
def to_float(fp): def to_float(fp):
return fp.sign * fp.value / fp.point return fp.sign * fp.value / fp.point
def from_float(n):
if n == 0.0:
sign = 1
value = 0
else:
sign = -1 if n < 0 else 1
value = abs(round(n * (2 ** 32)))
point = 2 ** 32
return FixedPoint(sign, value, point)
assert from_float(0.5).to_float() == 0.5
assert from_float(1.5).to_fixed_point(16, 16).value == 98304
def parse(s): def parse(s):
sign = -1 if s.startswith('-') else 1 sign = -1 if s.startswith('-') else 1
s = s.removeprefix('-') s = s.removeprefix('-')

View File

@ -125,6 +125,7 @@ def group_by_type(l):
faces = defaultdict(lambda: defaultdict(list)) faces = defaultdict(lambda: defaultdict(list))
materials = dict() materials = dict()
current_mtllib = None current_mtllib = None
multi_material_index = 0
for i in l: for i in l:
if type(i) in {VertexPosition, VertexTexture, VertexNormal}: if type(i) in {VertexPosition, VertexTexture, VertexNormal}:
vertices[type(i)].append(i) vertices[type(i)].append(i)
@ -135,9 +136,15 @@ def group_by_type(l):
assert current_object is not None assert current_object is not None
assert current_mtllib is not None assert current_mtllib is not None
i.lib = current_mtllib.name i.lib = current_mtllib.name
assert current_object.name not in materials, (current_object.name, materials) if current_object.name in materials:
if multi_material_index != 0:
current_object.name = current_object.name[:-4]
current_object.name += f"_{multi_material_index:03}"
multi_material_index += 1
assert current_object.name not in materials
materials[current_object.name] = i materials[current_object.name] = i
elif type(i) is Object: elif type(i) is Object:
multi_material_index = 0
current_object = i current_object = i
elif type(i) is MtlLib: elif type(i) is MtlLib:
current_mtllib = i current_mtllib = i

View File

@ -1,6 +1,9 @@
from dataclasses import astuple from dataclasses import astuple
import sys import sys
from generate import renderer from generate import renderer
import math
import fixed_point
from parse_obj import parse_obj_file from parse_obj import parse_obj_file
from parse_obj import VertexPosition from parse_obj import VertexPosition
@ -33,6 +36,17 @@ def render_triangles(prefix, faces):
def render_quadrilateral(prefix, faces): def render_quadrilateral(prefix, faces):
yield from render_faces(prefix, "quadrilateral", faces) yield from render_faces(prefix, "quadrilateral", faces)
def unit_vector(vec):
x = vec.x.to_float()
y = vec.y.to_float()
z = vec.z.to_float()
norm = math.sqrt(x ** 2 + y ** 2 + z ** 2)
return type(vec)(
fixed_point.parse(str(x / norm)),
fixed_point.parse(str(y / norm)),
fixed_point.parse(str(z / norm))
)
def xyz(vec): def xyz(vec):
return (vec.x, vec.y, vec.z) return (vec.x, vec.y, vec.z)
@ -57,7 +71,7 @@ def render_vertex(profile_item, vertex_tuple):
def render_vertices(profile_item, prefix, name, vertices): def render_vertices(profile_item, prefix, name, vertices):
yield f"// {profile_item.to_str()}" yield f"// {profile_item.to_str()}"
yield f"vertex_{name} {prefix}_{name}[] = {{" yield f"vertex_{name} {prefix}_{name}[] = {{"
for vertex in vertices: for i, vertex in enumerate(vertices):
yield from render_vertex(profile_item, vertex) yield from render_vertex(profile_item, vertex)
yield "};" yield "};"
@ -71,7 +85,7 @@ def render_vertex_normals(profile, prefix, vertex_normals):
yield from render_vertices(profile.normal, yield from render_vertices(profile.normal,
prefix, prefix,
"normal", "normal",
map(xyz, vertex_normals)) map(xyz, map(unit_vector, vertex_normals)))
def render_vertex_texture(profile, prefix, vertex_textures): def render_vertex_texture(profile, prefix, vertex_textures):
yield from render_vertices(profile.texture, yield from render_vertices(profile.texture,

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,162 @@
# Blender 4.1.1 MTL File: 'None'
# www.blender.org
newmtl material-001D075B
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_07_C200.png
map_Ks mask_07_C200.png
map_Ns mask_07_C200.png
newmtl material-0033AD02
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 1
map_Kd maskmaster_00_0.png
newmtl material-0059BDCE
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 1
map_Kd maskmaster_e00_6A00.png
newmtl material-00650E52
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_00_8A00.png
map_Ks mask_00_8A00.png
map_Ns mask_00_8A00.png
newmtl material-007F0EC7
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd maskmaster_00_0.png
map_Ks s_maskmaster_00_2000.png
map_Ns s_maskmaster_00_2000.png
newmtl material-01054239
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_08_CA00.png
map_Ks mask_08_CA00.png
map_Ns mask_08_CA00.png
newmtl material-012F5405
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_09_D200.png
map_Ks mask_09_D200.png
map_Ns mask_09_D200.png
newmtl material-0194E6CE
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_05_B200.png
map_Ks mask_05_B200.png
map_Ns mask_05_B200.png
newmtl material-01D11516
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 1
map_Kd maskmaster_01_4A00.png
newmtl material-01D11516.001
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 1
map_Kd maskmaster_01_4A00.png
newmtl material-01F419A5
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_04_AA00.png
map_Ks mask_04_AA00.png
map_Ns mask_04_AA00.png
newmtl material-023C1D43
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_06_BA00.png
map_Ks mask_06_BA00.png
map_Ns mask_06_BA00.png
newmtl material-0327AC42
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 1
map_Kd maskmaster_m00_7A00.png
newmtl material-038D80E9
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_01_9200.png
map_Ks mask_01_9200.png
map_Ns mask_01_9200.png
newmtl material-03C5C9F5
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_03_A200.png
map_Ks mask_03_A200.png
map_Ns mask_03_A200.png
newmtl material-03F98837
Ka 1.000000 1.000000 1.000000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
map_Kd mask_02_9A00.png
map_Ks mask_02_9A00.png
map_Ns mask_02_9A00.png

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
--..661<@@@@@@@@@@#--..66<<@@@@@@@@@@.#--..66<<@@@@@@@@@@b#--..66<<@@@@@@@@@@ ³##....66<<@@@@@@@@³³##....66<<@@@@@@@@,ÑÑ
 %6<<@@@@@@@@ÑÑÑ
 %611@@@@@@@@&ÅÅÅ3####..<<@@@@´ÅÅÅ3AAA##..<<@@@@&´»¬»””©¾ÄÂË˵‰..1<@@@@
´´¬»»»ÄÄÄÄÓËÓÓÔÔ‰11@@@@¬¿°°¹ÁÂÂËÓÐÒÒÕÖÖÖ¸++<<<<Y¶¶°°¹¹ËËËÓÒÐÒÕÖÖÖÖˆ+1<<<º¬¬    ×æ÷÷ÿúíÚÌÌÌÌÛ¼1<<<º¬¬   Üÿÿ÷÷úúÿÿåÌÌÌÛÛN <<<>²¯¯ÀÀßýää``8WªòÿÿãÏÍÍÎ,2<<^²¤¯ÀÀýýÃîÿÿÏÍÄÎ,2<<^²¤¯ÀóýßîÿôÈÈÎÎ1<²²¤¯Àóý'ÊÿÿÍÈÎÎ11

”¦‘¤Ýÿâ
=ùÿïžžž66
¦¦‘¤Ýÿâ
õÿïžžž %6 ”¦›¤éÿÊ
õÿþ†††%6 v”›‘éÿâ
ùÿþ†††%6(((••  Æÿü(ÊÿÿÞttt%6(((•  ÆÿÿáîÿÿÇttt%6666•  ÆêÿüØÿÿè±±±O%%666 •  ÆÆÿÿòªuÙÿÿøØ±±±;%%6666ŸŸ‡‡àÿüüöìññûûÿÿÉÉ––­
#266668ŸŸ‡‡‡àöüüüÿÿÿÿëÉÉÉ––­##66668 Ÿ”   §§ððÿÿ罓“““––#666%88 ”   §§§§½½½½““ŠŠ–^----...¥¥¥  ” ““““�ŒŒŒ—
...¥¥    ““““ŒŒ�i
!! 

{®®®®””””………g5
33®®””””……*ffff‹’¢‹)§¡ŽŽŽ««««««««····ffff}}‹¢­­ L§ŽŽƒƒŽ˜¡˜˜¡¡¡££££rrrr\\ss�¨¨P Q§§ƒƒƒƒ������������"T\\s}}�¨³³§§ƒƒƒƒ��‚‚‚‚�‚‚‚‚‚55Lhhh~~f}£�„„zzzzqqqqšššššššš55dhhhh~~}}}}„}zzz’q 5ddlll&!~f}}}}„fff‚��Iddll !f}}}„}kf‚f���?FJJg4ycc€€VV0eeff��IFFJJ5Gycc€€V0efkkf­IFFJ  Syycc€:#]]]]€€€FF  SSyycc€#G]]]€€€€—<A&XR]__p_dd M]]]]____||j/ XX]]____ddd MM]]]]____||jj SXXRGrrrraaaL3>aaxxxxllll__jjASSXXGG""aaaaaaaaxx$$&l__jj7DHHUUEEZnnaaaaV"rrrDDHHUUE nnaRR>"rDDHHU? nrrrDDHB?r"KKEEKKE K? ?&#

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_00_8A00_data_start __asm("_binary_mask_00_8A00_data_start");
extern uint32_t _binary_mask_00_8A00_data_end __asm("_binary_mask_00_8A00_data_end");
extern uint32_t _binary_mask_00_8A00_data_size __asm("_binary_mask_00_8A00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_00_8A00_data_pal_start __asm("_binary_mask_00_8A00_data_pal_start");
extern uint32_t _binary_mask_00_8A00_data_pal_end __asm("_binary_mask_00_8A00_data_pal_end");
extern uint32_t _binary_mask_00_8A00_data_pal_size __asm("_binary_mask_00_8A00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -0,0 +1,8 @@
û//Ëææäääääë†ÖÖêêêäóã[¼æäæææææäûË/ËæææääæäëÖ††Öêêêäëü[[æææææææäúúooæææääæäðìSSìææææãë¼[ÝÝÝÝääääÒúúoŒÁÝäæêððì—SÆæäææãëý[zÝ´ÝääääçàççTœØØîõîêìk^ÎÎÓÓääþ‡I×××ææææççÔçÇTtØîêêêk^^ddœÓäääÀI×××ææææÝÝÈÈíÇ.t˜ËËbkÛÛòΜA[Å––ƒ¹¹êêêêÝÈÝ´Çí§.b˜b°ìÛÛÎÎÓÿÅ–[[>>>>J•••éÞîÙ´´í‘>>¹æÝææççäÙëëë‚ññÚÚÚ«éòîÙ´šµí>>>¹Ïæææääçäëë‚»ñ÷÷÷÷òùîÙ´šµÓôFF¬ž·žžž···¡¡)“ÆÝÝøøòùî·¨´µµô¬F‡‡eeee‡‡b)bÆVÆççççîõîÝʾ®®­ë2

”ÈÈ>ÜÜààîõîçÑÊÑÊ­­2
Q”Ýȹ~Üààîóççææææ­myšÝ¹>4¬ààîîççæææÀ­yšÈ¹ƒ44ééááÝÝÁÁ¥¥////EE7„ÝÝÁžoËûûû‘E77
<‡ÀääÝÝÁžl¶ïøøøøééá°O
<™ääääÝÝÝÝÍl-¥ïïææææßßÐߢ2|ÌçççÝÝÝݯ¯<²ÈÝææææÐкºËËË2‡­ÌÌÁÁÁž\²šÝææææÂÂÎÎÈÙë­²ÈÈÙää䳦³ÂÈÈÙÙ55ššÔÔÔÙ¨žŒž››ÉÉÅ()èç‡>>\ŠŠŠ¸žŒŒ�…›®öÅ)èèç̹>È­šš��›}ÅÅ"´ÔëëÌ­ƒ>ËÕÕËÈ­­š��››‰‰ ŠŠD¯ëëëë­‡¹ÜÜÕÕǺ¢¢Ž¤ªŸ¨+uÙüüà´žžOpÏÏÏëÜ~4~ØØÇÇÇШ¢Ÿ¤ªŽ¨+ÙÙàüüüõõO-ŒŒÏÏÜܬ4g—œœÇß·¨¤¤ŸŽ�o��ž´ÌÌÝÝ’-ŒŒÀÀÁõÝžggTTÐß·­¤¤Ÿ¾o///‚‚ž´ÁÁ’-mŒŒ¢ÁÝÝÝØØííÐÞ̸±±±h(Ii(.���‹‹‹*WWƒƒž··ž¯¯ÄÄÐÖÌñ±hI‰‰‰.��‹‹**ƒ¬WW‡‡ž‡\ÐÐÃç€$S••‡‡v vvnKKK­­­oo;ÞÐ̸€$S€‡‡•‡v  .nff­­;ÙÙÙž))˜˜‡‡wwn�oožYcsª�ÙÙžG)˜˜˜‡‡w4n��ožYss��½½•À¢•ž‡wA†h†orrcsssFlÀÀ¢¢·žU4hh††žrcsssw‚´ÔÔÁ¨±±7Zuf��%��Tezi5w¡žÌçÔÔÁ±dZ—fr�%T¦��eeiwwž´ÔçÔÔ±1vvfrTT´‚š‚ePwF‚ž¨ÔÔÔd1—Zru%¦´‚š‚e8kkKˆ“©»»nnnueK»•••r<kkKK““ˆK�CnuPK»‚•rX^^^KR“ˆ ggg„u8 ˆUUU^^^^Rtˆ  gg„u8 ˆ44MZggV^_&©RhqqLq<MMZk^V_6©RhqqL1MMZvgg_6“Rq†llMMZvgg_&t“q†l\½½ââââSSSv�qa3D|||Z»ZŠ´zrferSSSv�q“3»»»»DzzeXXeMMHZ‘�“3ŠšzzšDDzz]MM:M‘‘“ <DŠŠŠŠŠ-eezzŠD899MH:Z““3 3ggAATh{£N 9]]]€$S§¿¿¿¿HHHM“a aa::AAAANN£ 9]]$$§€jjjjH::Z„'Sa3:RMMMMLLh‹,,%¦�T;;4;H:HZ'S„“aR:HHHHLLLh,!?¦TTTUU;FQ0B#Z€€„„tgSSTTKKKK<-w¡hATTMZHHQ0 ZZZtgtvvvddg^g^<wFATTAMHHM0 77==6???avxxnn„„<ww††vvvZ#B====????77TT^^^K-ww†qqkvvk

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_01_9200_data_start __asm("_binary_mask_01_9200_data_start");
extern uint32_t _binary_mask_01_9200_data_end __asm("_binary_mask_01_9200_data_end");
extern uint32_t _binary_mask_01_9200_data_size __asm("_binary_mask_01_9200_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_01_9200_data_pal_start __asm("_binary_mask_01_9200_data_pal_start");
extern uint32_t _binary_mask_01_9200_data_pal_end __asm("_binary_mask_01_9200_data_pal_end");
extern uint32_t _binary_mask_01_9200_data_pal_size __asm("_binary_mask_01_9200_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -0,0 +1 @@
  &&""""&&&&&&&&&&&& " &&""     ##### ..---)+++" #-3-//66 --  II  Ey涛y1Eq禿テテススh1 5bクマ粐襃��bず糯��杦瘉N' _}ァァィル�����タ㊤ーーァァィル��驎餧�鉗�樽Fーーァァィル髙����鉗��ヌ�Σーァァィソ������タ���,ウカャ。。ッケ����鈼ニニ^Of榜洄�gウカャュュケケ��顥�ニ:t檄洄�gウカャューケハ���fOttワ榘�ウウサカキキケハマ粲齲V:f柎ヲ毖�ィウククテャエエリリ、88Zunn土y顯�!ウセクヌテャエエ�5ォォォttィyy顰�$$オセヌユテ淑,55}「ナナママクク|tィィy顰�$.セセヌユレテエエ粕ナナナ胱�マ|uィィy顰�Dヒヒビ跛メタコ�テテン粐簪||オ「kル髙0:タヒビ�メヌコ�テミン粐篋|n「「kル�00タヌビ�ホホミ。t榜ヤヤヤヤ柤^「徒ル�0タタビ�ホタミコtTTttTTT^nオ�ル�2オオケハ�遯テテセオ�5Pセャレ掫yテ�2オオケハ瑕遯ャャセセ�51}セテテ符禿�2�ッケユ�隨ャィィリbhhセセャ巡�テ髙((_オッケヌ珸釟ャオウリリススセセ緒封禿�ゥァァキヅ�贅」」」イイイz轄麹侈�ゥァァキキビ�裹裹ロロロロ麹轄侈�--?ァァァキイ゙踰��粐粲荘荘ッハ�?立ァァイイワ蹂�鶴��鎗ーッハ髙33試而キサヨ踝�鉗マヌト捫~ヌユ��!3R試ァキサノ゚跏゚鄲クマトccト珥��!3A・・ァァササヌヌヌユタタママキKy���!AAA・ァァャャククヌヌ」タヌマキKyキユヌムム-D娃。アアクヌセ�ャノママォ8Zu{{{{-N�。�アヌユ��サノママォZ885555- �挙�セユヌ�セノヨマロヤtTTJJ<<-# f�給アヘユェ�ヘノノマロヤヤ杁jjj[))!Y���ユレ湘テソヘロ゙跏゚モeee))!2���ヌ狹小テナヘ裹踝゚゚ネネ�)$2r麹降�ユ鹹c敍ナベ裝蒿萠フフフ)!.rr麹~~��c敍トソソユ裝莅m````o�滑滑∨艨TォソソナナナナョoHHCCCCHo|�滑梶ノ艨Tォソソナナナ}HHHHUdpp%oo|�ычア敎TォィソォォuZ__�鵄�@Ho�麹剛桶澵Ti給uZZZオオ聽��5d|沫給挙ィ糯媾\\SSs恂末昧x�Gdn沫覧挙慫�媾\惧惧||nniiiiUU^|立覧覧ク粲�珈タイイシシメメメロメメUG^^匡ァァ惧クマ獨ユユマタタマメメ裹粐粐X7Xx銘チァァァツマロロロレレレレメ゙゙゙゙゙゙ユ4X7Eaa末キァァァタマロロレヨレヨメメユユユユユユLL';QQd{ァキァ欄ィテテヘヘヘナツツツツツツツツL;';99Qd匡キァ涛鐙カソナナココココキキキコW**77=E[vョョィィ欄涛梨棍棍血血W*77==9[[v梨恬惧惧梃血�€€W 17==7>BEUpppoob{{{{粕粕W 17==7>>BCCCUQQQQUUUU]]ll

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_02_9A00_data_start __asm("_binary_mask_02_9A00_data_start");
extern uint32_t _binary_mask_02_9A00_data_end __asm("_binary_mask_02_9A00_data_end");
extern uint32_t _binary_mask_02_9A00_data_size __asm("_binary_mask_02_9A00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_02_9A00_data_pal_start __asm("_binary_mask_02_9A00_data_pal_start");
extern uint32_t _binary_mask_02_9A00_data_pal_end __asm("_binary_mask_02_9A00_data_pal_end");
extern uint32_t _binary_mask_02_9A00_data_pal_size __asm("_binary_mask_02_9A00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_03_A200_data_start __asm("_binary_mask_03_A200_data_start");
extern uint32_t _binary_mask_03_A200_data_end __asm("_binary_mask_03_A200_data_end");
extern uint32_t _binary_mask_03_A200_data_size __asm("_binary_mask_03_A200_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_03_A200_data_pal_start __asm("_binary_mask_03_A200_data_pal_start");
extern uint32_t _binary_mask_03_A200_data_pal_end __asm("_binary_mask_03_A200_data_pal_end");
extern uint32_t _binary_mask_03_A200_data_pal_size __asm("_binary_mask_03_A200_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1 @@
    %%!///;;;/;;** %%% %%/;;;;;;;/;8*  **%%%%****;;;;;/8*%*88  *////;/88**8;J% ****;//;888J; M¸c***//;;/JJ//! ‚òññ¼%%***8JJJ!!! Çòòñññ¼%***JJ;! êõõõññññ§%%;J/! ”ÔõõõËññà§%88 ¼ññíígÔññ¼ %*8 ¼ñññ¿g”ñññ¼%22öñññ¼*x Xéûû¥22‚ööññ¼*xxx XXéûÜ¥""Çòöö¸c†„„„PÕóóÙÙ"Éòòö†††„Pf„˜˜ìóóó%ïïååÁ&'FŒŒŒ@m{>gíðð Þïïå“&&'qŒŒF9@{{7¿ðð ÞÞïÖ‘>{{z€Û{}¿îîWÞÞÖ¹**{{{zþþ€{}7¿îîååÓ¹>s�� þþþÉŠ|FšììÁåëÓCCss�æþþþþwŠ|Fšìì&Áëë´Cssw÷þþþþÕ9Š|4Èìì&&Óëç´>KÉüþþüÕ ŠŠ|4ÈììµÑÑ¡^£ÏÏDubb^XãääÑÑè¡^^uubb^·ãääÑèè\\\\Fbbbbbããää:èèØ®\\oooobbbbPF©ããââ»×××¢YYYYUUUP‰Ýßßßß ××××°’’YKPPKÝÝßÚÚÚ :¶ááÊÊÊIaaawÝÝ×××× :¶áÊÊ¢IaaÉÝÝÎÎÅÅ*¼Ì¾§#e@,,ÄÄÄĈvˆˆ*% hÌ̾yee,±Äªnn````**% hÆÌÌy3e#±ÐŸjj&=hh**% ÆÆÌ¢33#mбj&hhh**% &ÁÃÃ~Q<<0ººpJ=…gg*% “ÁíQQ<0��p+J…gSS*% [ÁÁ­R$$A������HHHH**%  ³ÁÁRR$ //²²¬‡55/;*‡²²¬I55;;8*I¬²²I5JJ8*‡¬²‰I OG83ž¦œ&  OG8_¦¦d& ÍøúúùùùùO2*Žžž&& ..æþþþþþþüþþG2*Žž™&&¯ýýþþþþúþüþþþJ/—�"Éþþôô½«›•‹•›‹‹‹;;*—�ÒþøøÉ––••›£££££££/J*��˜÷÷À¨¨€––••›¨¨¨««¤¤!;*ƒƒ2˜ÕÒ›€€€€––••››››    *** )‡‡k )))) *8** S‡kk***) ,Srrrigg]]VVVV]]]]SSS,*8)),TiiitgttllllggggSS, %%..HHH[[[[ZZZZLL--% %%...  **%%  *%%% %** %%***%%****!!!/****1122 %**%%****88;;;;8888@@GG %%%**11@@????BBBB@@GG  %*8111@????BBBB1@22

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_04_AA00_data_start __asm("_binary_mask_04_AA00_data_start");
extern uint32_t _binary_mask_04_AA00_data_end __asm("_binary_mask_04_AA00_data_end");
extern uint32_t _binary_mask_04_AA00_data_size __asm("_binary_mask_04_AA00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_04_AA00_data_pal_start __asm("_binary_mask_04_AA00_data_pal_start");
extern uint32_t _binary_mask_04_AA00_data_pal_end __asm("_binary_mask_04_AA00_data_pal_end");
extern uint32_t _binary_mask_04_AA00_data_pal_size __asm("_binary_mask_04_AA00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_05_B200_data_start __asm("_binary_mask_05_B200_data_start");
extern uint32_t _binary_mask_05_B200_data_end __asm("_binary_mask_05_B200_data_end");
extern uint32_t _binary_mask_05_B200_data_size __asm("_binary_mask_05_B200_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_05_B200_data_pal_start __asm("_binary_mask_05_B200_data_pal_start");
extern uint32_t _binary_mask_05_B200_data_pal_end __asm("_binary_mask_05_B200_data_pal_end");
extern uint32_t _binary_mask_05_B200_data_pal_size __asm("_binary_mask_05_B200_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,5 @@
哏牯趑趑趑趑趑趑趑趑趑趑趑趑趑趑哏牯趑趑趑趑趑趑趑趑趑趑趑趑趑趑哏牯趑趑趑趑趑趑趑趑趑趑趑趑趑趑哏牯趑趑趑趑趑趑趑趑趑趑趑趑趑趑沣牯趑趑趑趑趑趑趑趑趑趑趑趑腽痧沣牯趑趑趑趑趑趑趑趑趑趑趑趑疱痧沣牯趑趑趑趑趑趑趑趑趑趑腽痧筵篌沣牯趑趑趑趑趑趑趑趑趑綮囵痧逅弩噜腽趑趑趑趑趑趑趑趑殚棰�篌婧玩剜腽趑趑趑趑趑趑趑�殚��篌涵和剜屦趑趑趑趑趑豉篌篌�2�鄪槮ω剜媵趑趑趑趑�趔篌薼2y朔€姌樬阝媵趑豇��痧鹗蕘/,p峱www傏徕腙趑豇�麴痧鄟/(HpHH\\mm遮噔牯趑篌篌适�/'6NFNFFQQY`照剽牯祠篌嗨�/#55NNNNFFFFQY`h舷卺弩篌�$$$\弿弿IIIIKKCC毉�窍卺邋摔栁挝照照翄IIK_C�乙仪险谯弩筻噱膈酹[.埥絼a_j€体腚肭舷折弩箫镲膈[a浇刯jμ镲镲虑窍奏咫镲佑A)浇泟崎鲻鲻韭窍素咫镲觪k桨勂轲鲻黾靠扑剜屣镉q 2嚼勂轲鲻黾伎扑奏屣镉  2嚼浺轲鳅�伎葡羡屣锬**能祥聱��技壳羡屣锬**鸟轳聱��辜柯羡屣锬�€啮鲻鳅��豆季滤坼���8L��鲻鳅��鞍掣技眯陂脲頣V�瘗����鞍彻姑汹陔痤睿T5耨痧腚腚崛热ォ┏豆好舷腽镲镫噜屣耨痧鼢綁nn湝煙ォ北焙孪噜腼镲镲镲耨噱鹘??n湞潩煩┏澈盒雄邋箅腽痼遨瀵2<悙棗潩ォ┏焙好僳圹噱腚遨僳�2<悙悢敂櫉ォ吵吵负妹兄沆爿演氙yll硾墘妸敂煙煡グ鞍焙眯沆熘排央滗换硥墰唵寣敊櫈 Ё惫剽�俣毠仉镲镲後嵴倐倖妸敊櫈¨惫剽�秲毠怡镲脲嵴屯~~~~倖寣姍灋⒐剽浏yy挂膣揶�= zzz~倐寙姅妸⑵忖痽yy荫胴�=vvvzzz倐唽倖�嫦{_q涙骓Xmmvvssz~倐z偒舷玙D壋骀Xjjjrjjrrvvv偢父cDD壋鎯eejrjejrgvv尭笗cD_洺�``hheeejhhf懤缷@:o捊&`YY`[[[e``f懓缷@:o拻SSSS^S^^YYGz洶x@:o択 MMMM^SSSYQGf剾x@No�2 HHHHSSPPMBBS{{iHHit
""  HHHHSSPPMBBMnniHHWt

7}1 HHHH^SEEEEEEbbWHHWt3
%U}噰++!!!!HHHH^^PPEEEEOOWHHHttL%"U噰档缮缮MMMMWiWRHHEE>EEEEEd厬憉-0]帋栽栽MMMMRiWRHHEE>>EEEE;d懘è0''''MMMMQ`hYHHEEE>EEE>;;v懆ú||4MMMMQQhh^HEEEEEEEE;;Gvuú膊铂�琈MMMHHWie[QQPEEEEEE>9B;厾浇狡破芃MMMHHHijeYQPEEEEEEEBB;;a剟牨惫盡MMMMMMSjj`QPPEEHHHHBB;;::=FFFFFMMMMMMMM[ehhPPPPHHHHBB;;=:::::::MMMMMMMMH^iiiWRRMMMMEEE>>>>>>>EEMMMMMMMMHHWiii^^SSSSPPPEEEEEPPPPMMMMMMMMHHHWrrrjjjjee[[[WWWWYY``MMMMMMMMHHHH[jrrrrjeeee[WWWWYYYY

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_06_BA00_data_start __asm("_binary_mask_06_BA00_data_start");
extern uint32_t _binary_mask_06_BA00_data_end __asm("_binary_mask_06_BA00_data_end");
extern uint32_t _binary_mask_06_BA00_data_size __asm("_binary_mask_06_BA00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_06_BA00_data_pal_start __asm("_binary_mask_06_BA00_data_pal_start");
extern uint32_t _binary_mask_06_BA00_data_pal_end __asm("_binary_mask_06_BA00_data_pal_end");
extern uint32_t _binary_mask_06_BA00_data_pal_size __asm("_binary_mask_06_BA00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_07_C200_data_start __asm("_binary_mask_07_C200_data_start");
extern uint32_t _binary_mask_07_C200_data_end __asm("_binary_mask_07_C200_data_end");
extern uint32_t _binary_mask_07_C200_data_size __asm("_binary_mask_07_C200_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_07_C200_data_pal_start __asm("_binary_mask_07_C200_data_pal_start");
extern uint32_t _binary_mask_07_C200_data_pal_end __asm("_binary_mask_07_C200_data_pal_end");
extern uint32_t _binary_mask_07_C200_data_pal_size __asm("_binary_mask_07_C200_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1 @@
DDDDDDDDDDDDDDDDDDDDLLDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDLLDDDDDDDDDDKKKKKKKKKKKKPPPPCCCCLLDDDDDDDDDD;;;;KK;00000;;;&CLLDDDDDDDDDD((CCRR''!!!!7````DDDD(((('' #;``DDDD!!  G^^^^  %^^,44ääÞÞÞÇÁP  vääääîîîîÁÁÁP ‚øøééîîîîîîééââ»–!  .øøøøîîîîóîîîîîîéééÊZ!! .¿áåååääää¨UUU/˜ïïééÊʆ  ¿¿áåååää /–éÊÊÉÉ6!!PÓáÓáèèp 688MA))SÌÌôôô~ Áááááè B6888A)AAÌôôôôp ÁÁÈÓÓÓ\bµîóââÜ}DDSõõõõíf##ÁÁÓÓÓÈbµööóóéîÜÜÜ}SS?_õõõííífÓÛÓÓØŠ#nÞîòòòòòòßßßߥnV8IêêóóóëÓÛÛÓØ1næîîòòl+++3‘ßßË¥V8êêëëëëÓÛÛÓØ1ææÞîòZ#eeo´ËËc8I&êåìììÓÓÛÓØØææÞÞZeeeoËË€VI&êååååÑÑÔÔÑÔÔÔÚÞ4```E EÂÂÁPM)ÏáåááÑÆÆÆÑÔÔÔÚÞ0``E ÂÂÁPM)ÏáááÑ»»ÀÆÆÑÍÚ44ÂÂÁPM)ÏáÔÔÔ­­»»ÀÀÆÆÍÍ4-ÂÂÁPMÏáÔÔÔ¤¤³³¹¹¹ÈÎÎX o¾¾yM§âáááÔ™¤³³¯¹¹¹ÎÎÎX"""oÖ¾¾MMââåááá™™ª³¾¾¾¾ÞÇÇÇ}DDD_ ××¾nM)®ââãããã™™ª³¾¾00»ÇÇÇÜÜÜÜ××××n0)a®ââããããšš£°±×[©ÕÕÂÂÍÍÍ;nJJ¹åååññññšš£°±×[ÕÕÂÂÂÂ;ni¹Óååññññšš££±×* ŽÕÅÅÅž0 ...5 “𣣠×h0ŽªÅÅž¾rJ<<5... 5BB‹’“¡‘²Á$PPµµ¹¹¹¹ÐÐ�>  II‹‹“¡‘¤Á##Pµ¹È¹¹ÐÐÐЃI II‹‹““‘‘ÁP@GG?ŒŒŒ½½½½»»­ ™™™™‹‹„“‘‘ÁÁv‡G??~~¥½»»»»Ë¸¸¸��‰”’›™º¶÷¶:**hhxxxx������‰‰‹›™º¦¶÷÷gg*z�‰‰‹’™¤¦¦¼¼úú—¢¢¢¢¼¼¼¼zz‰‰‹‹Š™¦¦úúú¢üüü¼ýý¼{{……‰‰‰”•««0�ççv÷ý¼¢ùûÃ{{{…‰‰‰‰•«««2$$¢ÃÃm|||………{‚•««¬ Ã÷vmm||{{{{lll«¬¬¬Ãþÿ÷@ûû¼ddss||{qmmds¡¡Ä¡9u©ÙÙùýýù ]dddm|{qmm]QZ‚¡Ä©uu9 ÙüüÙ ]]]]dm{qmmd]OOtœ¡ÄÄ’6:g]]]]dmq{|md]OOOO’’¡ÄÉɆ†:]]]]bbfw{qfqd]W??kˆˆž·ÝÝàààààððð]]]]bbfw{qqfddWW???k‚žžž¸¸¸ËËËËà]]]]]dddf{qqddWWVNA6//T�˜˜˜˜����]]]]]]]]fq{{sdkWVVAA////////]]]]]]]]bbfw{qff\\\ONAAAA666====]]]]]]]]bbbf{{qf\\\\VNNNNNNAH===]]]]]]]]]]]]f{{q]]]]WWOOOOOOFFFF]]]]]]]]]]]]ff{{sdd]WWWWWWWWYYYY]]]]]]]]]]]]]]dszjjfbbbbbfbd]dd]]]]]]]]]]]]]]]dzzwwwwwfwwsdds]]]]]]]]]]]]]]]]fq{{z‚‚‚‚z]]]]]]]]]]]]]]]]ffqqz�ŽŽ‚‚��

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_08_CA00_data_start __asm("_binary_mask_08_CA00_data_start");
extern uint32_t _binary_mask_08_CA00_data_end __asm("_binary_mask_08_CA00_data_end");
extern uint32_t _binary_mask_08_CA00_data_size __asm("_binary_mask_08_CA00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_08_CA00_data_pal_start __asm("_binary_mask_08_CA00_data_pal_start");
extern uint32_t _binary_mask_08_CA00_data_pal_end __asm("_binary_mask_08_CA00_data_pal_end");
extern uint32_t _binary_mask_08_CA00_data_pal_size __asm("_binary_mask_08_CA00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_09_D200_data_start __asm("_binary_mask_09_D200_data_start");
extern uint32_t _binary_mask_09_D200_data_end __asm("_binary_mask_09_D200_data_end");
extern uint32_t _binary_mask_09_D200_data_size __asm("_binary_mask_09_D200_data_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_mask_09_D200_data_pal_start __asm("_binary_mask_09_D200_data_pal_start");
extern uint32_t _binary_mask_09_D200_data_pal_end __asm("_binary_mask_09_D200_data_pal_end");
extern uint32_t _binary_mask_09_D200_data_pal_size __asm("_binary_mask_09_D200_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_00_0_data_start __asm("_binary_maskmaster_00_0_data_start");
extern uint32_t _binary_maskmaster_00_0_data_end __asm("_binary_maskmaster_00_0_data_end");
extern uint32_t _binary_maskmaster_00_0_data_size __asm("_binary_maskmaster_00_0_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_00_0_data_pal_start __asm("_binary_maskmaster_00_0_data_pal_start");
extern uint32_t _binary_maskmaster_00_0_data_pal_end __asm("_binary_maskmaster_00_0_data_pal_end");
extern uint32_t _binary_maskmaster_00_0_data_pal_size __asm("_binary_maskmaster_00_0_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_01_4A00_data_start __asm("_binary_maskmaster_01_4A00_data_start");
extern uint32_t _binary_maskmaster_01_4A00_data_end __asm("_binary_maskmaster_01_4A00_data_end");
extern uint32_t _binary_maskmaster_01_4A00_data_size __asm("_binary_maskmaster_01_4A00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_01_4A00_data_pal_start __asm("_binary_maskmaster_01_4A00_data_pal_start");
extern uint32_t _binary_maskmaster_01_4A00_data_pal_end __asm("_binary_maskmaster_01_4A00_data_pal_end");
extern uint32_t _binary_maskmaster_01_4A00_data_pal_size __asm("_binary_maskmaster_01_4A00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_e00_6A00_data_start __asm("_binary_maskmaster_e00_6A00_data_start");
extern uint32_t _binary_maskmaster_e00_6A00_data_end __asm("_binary_maskmaster_e00_6A00_data_end");
extern uint32_t _binary_maskmaster_e00_6A00_data_size __asm("_binary_maskmaster_e00_6A00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_e00_6A00_data_pal_start __asm("_binary_maskmaster_e00_6A00_data_pal_start");
extern uint32_t _binary_maskmaster_e00_6A00_data_pal_end __asm("_binary_maskmaster_e00_6A00_data_pal_end");
extern uint32_t _binary_maskmaster_e00_6A00_data_pal_size __asm("_binary_maskmaster_e00_6A00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_m00_7A00_data_start __asm("_binary_maskmaster_m00_7A00_data_start");
extern uint32_t _binary_maskmaster_m00_7A00_data_end __asm("_binary_maskmaster_m00_7A00_data_end");
extern uint32_t _binary_maskmaster_m00_7A00_data_size __asm("_binary_maskmaster_m00_7A00_data_size");

Binary file not shown.

View File

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
extern uint32_t _binary_maskmaster_m00_7A00_data_pal_start __asm("_binary_maskmaster_m00_7A00_data_pal_start");
extern uint32_t _binary_maskmaster_m00_7A00_data_pal_end __asm("_binary_maskmaster_m00_7A00_data_pal_end");
extern uint32_t _binary_maskmaster_m00_7A00_data_pal_size __asm("_binary_maskmaster_m00_7A00_data_pal_size");

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,268 @@
#pragma once
#include <stdint.h>
#include "model/material.h"
enum material {
material_001D075B,
material_0033AD02,
material_0059BDCE,
material_00650E52,
material_007F0EC7,
material_01054239,
material_012F5405,
material_0194E6CE,
material_01D11516,
material_01D11516_001,
material_01F419A5,
material_023C1D43,
material_0327AC42,
material_038D80E9,
material_03C5C9F5,
material_03F98837,
};
struct material_descriptor material[] = {
[material_001D075B] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_07_C200_data_start,
.size = (int)&_binary_mask_07_C200_data_size,
.vram_offset = 0,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_07_C200_data_pal_start,
.size = (int)&_binary_mask_07_C200_data_pal_size,
.vram_offset = 0,
.palette_size = 256,
},
},
[material_0033AD02] = {
.pixel = {
.start = (uint8_t *)&_binary_maskmaster_00_0_data_start,
.size = (int)&_binary_maskmaster_00_0_data_size,
.vram_offset = 2048,
.width = 128,
.height = 128,
},
.palette = {
.start = (uint8_t *)&_binary_maskmaster_00_0_data_pal_start,
.size = (int)&_binary_maskmaster_00_0_data_pal_size,
.vram_offset = 512,
.palette_size = 256,
},
},
[material_0059BDCE] = {
.pixel = {
.start = (uint8_t *)&_binary_maskmaster_e00_6A00_data_start,
.size = (int)&_binary_maskmaster_e00_6A00_data_size,
.vram_offset = 18432,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_maskmaster_e00_6A00_data_pal_start,
.size = (int)&_binary_maskmaster_e00_6A00_data_pal_size,
.vram_offset = 1024,
.palette_size = 256,
},
},
[material_00650E52] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_00_8A00_data_start,
.size = (int)&_binary_mask_00_8A00_data_size,
.vram_offset = 20480,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_00_8A00_data_pal_start,
.size = (int)&_binary_mask_00_8A00_data_pal_size,
.vram_offset = 1424,
.palette_size = 256,
},
},
[material_007F0EC7] = {
.pixel = {
.start = (uint8_t *)&_binary_maskmaster_00_0_data_start,
.size = (int)&_binary_maskmaster_00_0_data_size,
.vram_offset = 22528,
.width = 128,
.height = 128,
},
.palette = {
.start = (uint8_t *)&_binary_maskmaster_00_0_data_pal_start,
.size = (int)&_binary_maskmaster_00_0_data_pal_size,
.vram_offset = 1936,
.palette_size = 256,
},
},
[material_01054239] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_08_CA00_data_start,
.size = (int)&_binary_mask_08_CA00_data_size,
.vram_offset = 38912,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_08_CA00_data_pal_start,
.size = (int)&_binary_mask_08_CA00_data_pal_size,
.vram_offset = 2448,
.palette_size = 256,
},
},
[material_012F5405] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_09_D200_data_start,
.size = (int)&_binary_mask_09_D200_data_size,
.vram_offset = 40960,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_09_D200_data_pal_start,
.size = (int)&_binary_mask_09_D200_data_pal_size,
.vram_offset = 2960,
.palette_size = 256,
},
},
[material_0194E6CE] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_05_B200_data_start,
.size = (int)&_binary_mask_05_B200_data_size,
.vram_offset = 43008,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_05_B200_data_pal_start,
.size = (int)&_binary_mask_05_B200_data_pal_size,
.vram_offset = 3472,
.palette_size = 256,
},
},
[material_01D11516] = {
.pixel = {
.start = (uint8_t *)&_binary_maskmaster_01_4A00_data_start,
.size = (int)&_binary_maskmaster_01_4A00_data_size,
.vram_offset = 45056,
.width = 128,
.height = 128,
},
.palette = {
.start = (uint8_t *)&_binary_maskmaster_01_4A00_data_pal_start,
.size = (int)&_binary_maskmaster_01_4A00_data_pal_size,
.vram_offset = 3984,
.palette_size = 256,
},
},
[material_01D11516_001] = {
.pixel = {
.start = (uint8_t *)&_binary_maskmaster_01_4A00_data_start,
.size = (int)&_binary_maskmaster_01_4A00_data_size,
.vram_offset = 61440,
.width = 128,
.height = 128,
},
.palette = {
.start = (uint8_t *)&_binary_maskmaster_01_4A00_data_pal_start,
.size = (int)&_binary_maskmaster_01_4A00_data_pal_size,
.vram_offset = 4496,
.palette_size = 256,
},
},
[material_01F419A5] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_04_AA00_data_start,
.size = (int)&_binary_mask_04_AA00_data_size,
.vram_offset = 77824,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_04_AA00_data_pal_start,
.size = (int)&_binary_mask_04_AA00_data_pal_size,
.vram_offset = 5008,
.palette_size = 256,
},
},
[material_023C1D43] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_06_BA00_data_start,
.size = (int)&_binary_mask_06_BA00_data_size,
.vram_offset = 79872,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_06_BA00_data_pal_start,
.size = (int)&_binary_mask_06_BA00_data_pal_size,
.vram_offset = 5520,
.palette_size = 256,
},
},
[material_0327AC42] = {
.pixel = {
.start = (uint8_t *)&_binary_maskmaster_m00_7A00_data_start,
.size = (int)&_binary_maskmaster_m00_7A00_data_size,
.vram_offset = 81920,
.width = 64,
.height = 32,
},
.palette = {
.start = (uint8_t *)&_binary_maskmaster_m00_7A00_data_pal_start,
.size = (int)&_binary_maskmaster_m00_7A00_data_pal_size,
.vram_offset = 6032,
.palette_size = 256,
},
},
[material_038D80E9] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_01_9200_data_start,
.size = (int)&_binary_mask_01_9200_data_size,
.vram_offset = 83968,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_01_9200_data_pal_start,
.size = (int)&_binary_mask_01_9200_data_pal_size,
.vram_offset = 6544,
.palette_size = 256,
},
},
[material_03C5C9F5] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_03_A200_data_start,
.size = (int)&_binary_mask_03_A200_data_size,
.vram_offset = 86016,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_03_A200_data_pal_start,
.size = (int)&_binary_mask_03_A200_data_pal_size,
.vram_offset = 7056,
.palette_size = 256,
},
},
[material_03F98837] = {
.pixel = {
.start = (uint8_t *)&_binary_mask_02_9A00_data_start,
.size = (int)&_binary_mask_02_9A00_data_size,
.vram_offset = 88064,
.width = 32,
.height = 64,
},
.palette = {
.start = (uint8_t *)&_binary_mask_02_9A00_data_pal_start,
.size = (int)&_binary_mask_02_9A00_data_pal_size,
.vram_offset = 7568,
.palette_size = 256,
},
},
};

File diff suppressed because it is too large Load Diff