From b4ee53d390cca8df47cf37de2f930936c922226c Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 17 Jul 2025 20:51:44 -0400 Subject: [PATCH] link act_ball_d --- config/GAFE01_00/config.yml | 29 +++++++- config/GAFE01_00/foresta/splits.txt | 2 +- configure.py | 1 + src/data/model/act_ball_d.c | 111 ++++++++++++++++++++++++++++ tools/converters/assetdis.py | 14 ++-- 5 files changed, 150 insertions(+), 7 deletions(-) create mode 100644 src/data/model/act_ball_d.c diff --git a/config/GAFE01_00/config.yml b/config/GAFE01_00/config.yml index 62745c87..76193259 100644 --- a/config/GAFE01_00/config.yml +++ b/config/GAFE01_00/config.yml @@ -25394,4 +25394,31 @@ modules: binary: assets/act_ball_b_v.bin header: assets/act_ball_b_v.inc header_type: none - custom_type: vtx \ No newline at end of file + custom_type: vtx + + - symbol: act_ball_d_v + binary: assets/act_ball_d_v.bin + header: assets/act_ball_d_v.inc + header_type: none + custom_type: vtx + + - symbol: act_ball_d_pal + binary: assets/act_ball_d_pal.bin + header: assets/act_ball_d_pal.inc + header_type: none + custom_type: pal16 + + - symbol: act_ball_d_1_tex + binary: assets/act_ball_d_1_tex.bin + header: assets/act_ball_d_1_tex.inc + header_type: raw + + - symbol: act_ball_d_2_tex + binary: assets/act_ball_d_2_tex.bin + header: assets/act_ball_d_2_tex.inc + header_type: raw + + - symbol: act_ball_d_3_tex + binary: assets/act_ball_d_3_tex.bin + header: assets/act_ball_d_3_tex.inc + header_type: raw diff --git a/config/GAFE01_00/foresta/splits.txt b/config/GAFE01_00/foresta/splits.txt index a00810ae..1497fd5a 100644 --- a/config/GAFE01_00/foresta/splits.txt +++ b/config/GAFE01_00/foresta/splits.txt @@ -3681,7 +3681,7 @@ data/scene/buggy.c: data/model/act_ball_b.c: .data start:0x0009FC28 end:0x0009FFD8 -data/dataobject/dataobject_9FFD8: +data/model/act_ball_d.c: .data start:0x0009FFD8 end:0x000A0738 data/dataobject/dataobject_A0738: diff --git a/configure.py b/configure.py index 858bbc84..5113d5db 100644 --- a/configure.py +++ b/configure.py @@ -2635,6 +2635,7 @@ config.libs = [ Object(Matching, "data/model/act_ant_anim.c"), Object(Matching, "data/model/glider.c"), Object(Matching, "data/model/act_ball_b.c"), + Object(Matching, "data/model/act_ball_d.c"), ], ), ] diff --git a/src/data/model/act_ball_d.c b/src/data/model/act_ball_d.c new file mode 100644 index 00000000..4bbbb78b --- /dev/null +++ b/src/data/model/act_ball_d.c @@ -0,0 +1,111 @@ +#include "libforest/gbi_extensions.h" +#include "PR/gbi.h" +#include "evw_anime.h" + +u16 act_ball_d_pal[] = { +#include "assets/act_ball_d_pal.inc" +}; + +u8 act_ball_d_1_tex[] = { +#include "assets/act_ball_d_1_tex.inc" +}; + +u8 act_ball_d_2_tex[] = { +#include "assets/act_ball_d_2_tex.inc" +}; + +u8 act_ball_d_3_tex[] = { +#include "assets/act_ball_d_3_tex.inc" +}; + +Vtx act_ball_d_v[] = { +#include "assets/act_ball_d_v.inc" +}; + +Gfx act_ball_d_model[] = { + gsSPTexture(65535, 65535, 0, G_TX_RENDERTILE, G_ON), + gsDPPipeSync(), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2), + gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED), + gsDPSetTextureLUT(G_TT_RGBA16), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, act_ball_d_pal), + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 496, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadTLUTCmd(G_TX_LOADTILE, 15), + gsDPPipeSync(), + gsDPSetTextureImage(G_IM_FMT_CI, G_IM_SIZ_16b, 1, act_ball_d_3_tex), + gsDPSetTile(G_IM_FMT_CI, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD, + G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 63, 2048), + gsDPPipeSync(), + gsDPSetTile(G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, G_TX_RENDERTILE, 15, G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD, + G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 60, 60), + gsDPSetPrimColor(0, 128, 255, 255, 255, 255), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPVertex(act_ball_d_v, 18, 0), + gsSP2Triangles(0, 1, 2, 0, 1, 3, 2, 0), + gsSP2Triangles(1, 4, 3, 0, 1, 5, 4, 0), + gsSP2Triangles(4, 6, 3, 0, 4, 7, 6, 0), + gsSP2Triangles(6, 2, 3, 0, 6, 8, 2, 0), + gsSP2Triangles(9, 10, 11, 0, 10, 12, 11, 0), + gsSP2Triangles(10, 13, 12, 0, 10, 14, 13, 0), + gsSP2Triangles(13, 15, 12, 0, 13, 16, 15, 0), + gsSP2Triangles(15, 11, 12, 0, 15, 17, 11, 0), + gsDPPipeSync(), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, act_ball_d_pal), + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 496, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadTLUTCmd(G_TX_LOADTILE, 15), + gsDPPipeSync(), + gsDPSetTextureImage(G_IM_FMT_CI, G_IM_SIZ_16b, 1, act_ball_d_2_tex), + gsDPSetTile(G_IM_FMT_CI, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD, + G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 63, 2048), + gsDPPipeSync(), + gsDPSetTile(G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, G_TX_RENDERTILE, 15, G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD, + G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 60, 60), + gsSPVertex(&act_ball_d_v[18], 18, 0), + gsSP2Triangles(0, 1, 2, 0, 1, 3, 2, 0), + gsSP2Triangles(1, 4, 3, 0, 1, 5, 4, 0), + gsSP2Triangles(4, 6, 3, 0, 4, 7, 6, 0), + gsSP2Triangles(6, 2, 3, 0, 6, 8, 2, 0), + gsSP2Triangles(9, 10, 11, 0, 10, 12, 11, 0), + gsSP2Triangles(10, 13, 12, 0, 10, 14, 13, 0), + gsSP2Triangles(13, 15, 12, 0, 13, 16, 15, 0), + gsSP2Triangles(15, 11, 12, 0, 15, 17, 11, 0), + gsDPPipeSync(), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, act_ball_d_pal), + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 496, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadTLUTCmd(G_TX_LOADTILE, 15), + gsDPPipeSync(), + gsDPSetTextureImage(G_IM_FMT_CI, G_IM_SIZ_16b, 1, act_ball_d_1_tex), + gsDPSetTile(G_IM_FMT_CI, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD, + G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 63, 2048), + gsDPPipeSync(), + gsDPSetTile(G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, G_TX_RENDERTILE, 15, G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD, + G_TX_MIRROR | G_TX_WRAP, 4, G_TX_NOLOD), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 60, 60), + gsSPVertex(&act_ball_d_v[36], 18, 0), + gsSP2Triangles(0, 1, 2, 0, 1, 3, 2, 0), + gsSP2Triangles(3, 4, 2, 0, 4, 5, 2, 0), + gsSP2Triangles(1, 6, 3, 0, 1, 7, 6, 0), + gsSP2Triangles(6, 4, 3, 0, 6, 8, 4, 0), + gsSP2Triangles(9, 10, 11, 0, 10, 12, 11, 0), + gsSP2Triangles(12, 13, 11, 0, 13, 14, 11, 0), + gsSP2Triangles(10, 15, 12, 0, 10, 16, 15, 0), + gsSP2Triangles(15, 13, 12, 0, 15, 17, 13, 0), + gsSPEndDisplayList() +}; diff --git a/tools/converters/assetdis.py b/tools/converters/assetdis.py index 86bc8963..d4ea8193 100644 --- a/tools/converters/assetdis.py +++ b/tools/converters/assetdis.py @@ -153,12 +153,16 @@ def lookup_bins_and_symbols(lines: list[str], name: str): data_lines = lines[begin_ind+1:end_ind] for line in data_lines: - data = line.split(".4byte ")[1] - try: - out_bin.extend(int(data, 16).to_bytes(4, 'big')) - except Exception as e: + if ".4byte" in line: + data = line.split(".4byte ")[1] + try: + out_bin.extend(int(data, 16).to_bytes(4, 'big')) + except Exception as e: + out_bin.extend(b'\0\0\0\0') + out_symbols.append(data) + elif ".rel" in line: out_bin.extend(b'\0\0\0\0') - out_symbols.append(data) + out_symbols.append(f"&{line.split(".rel ")[1].split(",")[0]}[xxx]") return out_bin, out_symbols