From db0a526fb76d39cb303405837337637a0b2b39fc Mon Sep 17 00:00:00 2001 From: Lucas Hahn Date: Sat, 10 Oct 2026 19:24:58 -0700 Subject: [PATCH 1/2] o_container_wood: match init and dest, disp at 99.78% ContainerWood and ContainerWood_dest match. ContainerWood_disp matches except for the position of one float constant, which depends on ContainerWood_exec being written. Rename ContainerWood_0..3 to _dest/_exec/_disp/_dispSort after o_container_chao. Object stays NonMatching. Co-Authored-By: Claude Opus 5.5 --- config/GSNE8P/stg13D/symbols.txt | 8 +-- include/OBJECT/o_container_wood.h | 5 ++ src/OBJECT/o_container_wood.c | 92 +++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 4 deletions(-) diff --git a/config/GSNE8P/stg13D/symbols.txt b/config/GSNE8P/stg13D/symbols.txt index 30e8427c..0c2663cd 100644 --- a/config/GSNE8P/stg13D/symbols.txt +++ b/config/GSNE8P/stg13D/symbols.txt @@ -395,10 +395,10 @@ ContainerIron_1 = .text:0x0002636C; // type:function size:0x9D8 ContainerIron_2 = .text:0x00026D44; // type:function size:0xAC ContainerIron_3 = .text:0x00026DF0; // type:function size:0x74 ContainerWood = .text:0x00026E64; // type:function size:0xE8 -ContainerWood_0 = .text:0x00026F4C; // type:function size:0x38 -ContainerWood_1 = .text:0x00026F84; // type:function size:0x968 -ContainerWood_2 = .text:0x000278EC; // type:function size:0x10C -ContainerWood_3 = .text:0x000279F8; // type:function size:0x2B0 +ContainerWood_dest = .text:0x00026F4C; // type:function size:0x38 scope:local +ContainerWood_exec = .text:0x00026F84; // type:function size:0x968 scope:local +ContainerWood_disp = .text:0x000278EC; // type:function size:0x10C scope:local +ContainerWood_dispSort = .text:0x000279F8; // type:function size:0x2B0 scope:local fn_13_27CA8 = .text:0x00027CA8; // type:function size:0x34 fn_13_27CDC = .text:0x00027CDC; // type:function size:0x11C fn_13_27DF8 = .text:0x00027DF8; // type:function size:0x110 diff --git a/include/OBJECT/o_container_wood.h b/include/OBJECT/o_container_wood.h index 80239e13..f1520d0d 100644 --- a/include/OBJECT/o_container_wood.h +++ b/include/OBJECT/o_container_wood.h @@ -1,4 +1,9 @@ #ifndef _O_CONTAINER_WOOD_H_ #define _O_CONTAINER_WOOD_H_ +#include "sa2b_types.h" +#include "samt/sonic/task.h" + +void ContainerWood(task *tp); + #endif // !_O_CONTAINER_WOOD_H_ diff --git a/src/OBJECT/o_container_wood.c b/src/OBJECT/o_container_wood.c index 685c65f5..397ee8c3 100644 --- a/src/OBJECT/o_container_wood.c +++ b/src/OBJECT/o_container_wood.c @@ -1 +1,93 @@ #include "OBJECT/o_container_wood.h" +#include "set.h" +#include "CCL.h" +#include "samt/sonic/njctrl.h" + +extern s32 _rename_GetStageNum(void); + +extern void _rename_container_setup(task *tp); +extern void _rename_container_destroy(task *tp); + +extern void _rename_njSubVector(NJS_VECTOR *, NJS_VECTOR *, NJS_VECTOR *); +extern void _rename_gjSetTexMtx(NJS_VECTOR *, Angle3 *); +extern void fn_80066820(s32, NJS_VECTOR *, f32); +extern void fn_8006648C(void); + +extern int lbl_803ADAD0; +extern NJS_VECTOR *lbl_80175378[]; + +extern NJS_TEXLIST lbl_13_data_215698; +extern GJS_MODEL lbl_13_data_215A80; +extern CCL_INFO lbl_13_data_216608[1]; + +// ^ extern +// v in this file + +static void ContainerWood_disp(task *tp); +static void ContainerWood_dispSort(task *tp); +static void ContainerWood_exec(task *tp); +static void ContainerWood_dest(task *tp); + +enum { + MD_CONTWOOD_0 = 0, +}; + +#define CONT_F1(tp) (*(f32*)&(tp)->awp) + +void ContainerWood(task *tp) { + taskwk *twp = tp->twp; + if (!CheckRangeOut(tp)) { + tp->disp = ContainerWood_disp; + tp->exec = ContainerWood_exec; + tp->dest = ContainerWood_dest; + switch (_rename_GetStageNum()) { + case 60: + case 61: + case 62: + tp->disp_sort = ContainerWood_dispSort; + break; + } + twp->smode = MD_CONTWOOD_0; + CONT_F1(tp) = -1000000.0f; + twp->scl.y = 0.0f; + twp->scl.z = 0.0f; + CCL_InitShare(tp, lbl_13_data_216608, ARRAY_COUNT(lbl_13_data_216608), CID_OBJECT); + twp->btimer = twp->ang.z; + _rename_container_setup(tp); + } +} + +static void ContainerWood_dest(task *tp) { + _rename_container_destroy(tp); + tp->awp = NULL; +} + +static void ContainerWood_disp(task *tp) { + taskwk *twp = tp->twp; + NJS_VECTOR v; + Angle3 ang; + switch (_rename_GetStageNum()) { + case 60: + case 61: + case 62: + _rename_njSubVector(&twp->pos, lbl_80175378[lbl_803ADAD0], &v); + if (njScalor2(&v) < 900.0f) { + return; + } + break; + } + njSetTexture(&lbl_13_data_215698); + njPushMatrixEx(); + njTranslateEx(&twp->pos); + njRotateY(NULL, twp->ang.y); + OnControl3D(NJD_CONTROL_3D_TRANS_MODIFIER | NJD_CONTROL_3D_SHADOW); + ang.x = 0; + ang.y = twp->ang.y; + ang.z = 0; + fn_80066820(0xff, &twp->pos, lbl_13_data_215A80.r); + _rename_gjSetTexMtx(&twp->pos, &ang); + gjDrawModel(&lbl_13_data_215A80); + fn_8006648C(); + OffControl3D(NJD_CONTROL_3D_TRANS_MODIFIER | NJD_CONTROL_3D_SHADOW); + njPopMatrixEx(); +} From c636227299da44bdc50a56c878551a410d522ec5 Mon Sep 17 00:00:00 2001 From: Lucas Hahn Date: Fri, 16 Oct 2026 15:16:53 -0700 Subject: [PATCH 2/2] o_container_wood: define data in file, apply review feedback Define the texture lists, GJ and chunk models, break-piece table, draw table and collision in o_container_wood.c, with assets extracted via config.yml like o_container_chao. Name the module's data symbols o_cont_wood_* and mark the display lists align:32. Use STAGE_B_* names for the boss stages and SQ(30.0f) for the distance check. Co-Authored-By: Claude Opus 5.5 --- config/GSNE8P/config.yml | 75 ++++++++++ config/GSNE8P/stg13D/symbols.txt | 70 ++++----- include/OBJECT/o_container_wood.h | 1 + src/OBJECT/o_container_wood.c | 239 ++++++++++++++++++++++++++++-- 4 files changed, 335 insertions(+), 50 deletions(-) diff --git a/config/GSNE8P/config.yml b/config/GSNE8P/config.yml index d13b9665..9b1dd0d4 100644 --- a/config/GSNE8P/config.yml +++ b/config/GSNE8P/config.yml @@ -418,6 +418,81 @@ modules: header: assets/o_cont_chao_cnk_mdl_2_vtx.inc header_type: none custom_type: s32 + - symbol: o_cont_wood_cnk_mdl_0_tex!.data:0x2156a0 + binary: assets/o_cont_wood_cnk_mdl_0_tex.bin + header: assets/o_cont_wood_cnk_mdl_0_tex.inc + header_type: none + custom_type: s16 + - symbol: o_cont_wood_cnk_mdl_0_vtx!.data:0x21574c + binary: assets/o_cont_wood_cnk_mdl_0_vtx.bin + header: assets/o_cont_wood_cnk_mdl_0_vtx.inc + header_type: none + custom_type: s32 + - symbol: o_cont_wood_vec_0!.data:0x215830 + binary: assets/o_cont_wood_vec_0.bin + header: assets/o_cont_wood_vec_0.inc + header_type: none + custom_type: vtx + - symbol: o_cont_wood_vec_1!.data:0x215890 + binary: assets/o_cont_wood_vec_1.bin + header: assets/o_cont_wood_vec_1.inc + header_type: none + custom_type: vtx + - symbol: o_cont_wood_uv_0!.data:0x2158f0 + binary: assets/o_cont_wood_uv_0.bin + header: assets/o_cont_wood_uv_0.inc + header_type: none + custom_type: s16 + - symbol: o_cont_wood_material_0!.data:0x215980 + binary: assets/o_cont_wood_material_0.bin + header: assets/o_cont_wood_material_0.inc + header_type: none + custom_type: gjmaterial + - symbol: o_cont_wood_material_1!.data:0x2159d0 + binary: assets/o_cont_wood_material_1.bin + header: assets/o_cont_wood_material_1.inc + header_type: none + custom_type: gjmaterial + - symbol: o_cont_wood_dl_0!.data:0x2159e0 + binary: assets/o_cont_wood_dl_0.bin + header: assets/o_cont_wood_dl_0.inc + header_type: none + custom_type: displaylist + - symbol: o_cont_wood_dl_1!.data:0x215a00 + binary: assets/o_cont_wood_dl_1.bin + header: assets/o_cont_wood_dl_1.inc + header_type: none + custom_type: displaylist + - symbol: o_cont_wood_cnk_mdl_1_tex!.data:0x215ab8 + binary: assets/o_cont_wood_cnk_mdl_1_tex.bin + header: assets/o_cont_wood_cnk_mdl_1_tex.inc + header_type: none + custom_type: s16 + - symbol: o_cont_wood_cnk_mdl_1_vtx!.data:0x215c68 + binary: assets/o_cont_wood_cnk_mdl_1_vtx.bin + header: assets/o_cont_wood_cnk_mdl_1_vtx.inc + header_type: none + custom_type: s32 + - symbol: o_cont_wood_cnk_mdl_2_tex!.data:0x215f10 + binary: assets/o_cont_wood_cnk_mdl_2_tex.bin + header: assets/o_cont_wood_cnk_mdl_2_tex.inc + header_type: none + custom_type: s16 + - symbol: o_cont_wood_cnk_mdl_2_vtx!.data:0x216018 + binary: assets/o_cont_wood_cnk_mdl_2_vtx.bin + header: assets/o_cont_wood_cnk_mdl_2_vtx.inc + header_type: none + custom_type: s32 + - symbol: o_cont_wood_cnk_mdl_3_tex!.data:0x2161d0 + binary: assets/o_cont_wood_cnk_mdl_3_tex.bin + header: assets/o_cont_wood_cnk_mdl_3_tex.inc + header_type: none + custom_type: s16 + - symbol: o_cont_wood_cnk_mdl_3_vtx!.data:0x21635c + binary: assets/o_cont_wood_cnk_mdl_3_vtx.bin + header: assets/o_cont_wood_cnk_mdl_3_vtx.inc + header_type: none + custom_type: s32 - object: orig/GSNE8P/files/stg14D.rel hash: 68b094fa0f3e58adb7276d34d4b9881ac1c64fae diff --git a/config/GSNE8P/stg13D/symbols.txt b/config/GSNE8P/stg13D/symbols.txt index 0c2663cd..2c32470e 100644 --- a/config/GSNE8P/stg13D/symbols.txt +++ b/config/GSNE8P/stg13D/symbols.txt @@ -16102,40 +16102,40 @@ lbl_13_data_2155D8 = .data:0x002155D8; // type:object size:0x40 data:4byte lbl_13_data_215618 = .data:0x00215618; // type:object size:0x48 lbl_13_data_215660 = .data:0x00215660; // type:object size:0xE align:32 data:string lbl_13_data_215670 = .data:0x00215670; // type:object size:0xE data:string -lbl_13_data_215680 = .data:0x00215680; // type:object size:0x18 -lbl_13_data_215698 = .data:0x00215698; // type:object size:0x8 -lbl_13_data_2156A0 = .data:0x002156A0; // type:object size:0xAC -lbl_13_data_21574C = .data:0x0021574C; // type:object size:0xCC -lbl_13_data_215818 = .data:0x00215818; // type:object size:0x18 -lbl_13_data_215830 = .data:0x00215830; // type:object size:0x60 -lbl_13_data_215890 = .data:0x00215890; // type:object size:0x60 -lbl_13_data_2158F0 = .data:0x002158F0; // type:object size:0x50 -lbl_13_data_215940 = .data:0x00215940; // type:object size:0x40 -lbl_13_data_215980 = .data:0x00215980; // type:object size:0x50 -lbl_13_data_2159D0 = .data:0x002159D0; // type:object size:0x10 -lbl_13_data_2159E0 = .data:0x002159E0; // type:object size:0x20 -lbl_13_data_215A00 = .data:0x00215A00; // type:object size:0x60 -lbl_13_data_215A60 = .data:0x00215A60; // type:object size:0x20 -lbl_13_data_215A80 = .data:0x00215A80; // type:object size:0x24 align:4 data:float -lbl_13_data_215AA4 = .data:0x00215AA4; // type:object size:0xC -lbl_13_data_215AB0 = .data:0x00215AB0; // type:object size:0x8 -lbl_13_data_215AB8 = .data:0x00215AB8; // type:object size:0x1B0 -lbl_13_data_215C68 = .data:0x00215C68; // type:object size:0x27C -lbl_13_data_215EE4 = .data:0x00215EE4; // type:object size:0x18 -lbl_13_data_215EFC = .data:0x00215EFC; // type:object size:0xC -lbl_13_data_215F08 = .data:0x00215F08; // type:object size:0x8 -lbl_13_data_215F10 = .data:0x00215F10; // type:object size:0x108 -lbl_13_data_216018 = .data:0x00216018; // type:object size:0x18C -lbl_13_data_2161A4 = .data:0x002161A4; // type:object size:0x18 -lbl_13_data_2161BC = .data:0x002161BC; // type:object size:0xC -lbl_13_data_2161C8 = .data:0x002161C8; // type:object size:0x8 -lbl_13_data_2161D0 = .data:0x002161D0; // type:object size:0x18C -lbl_13_data_21635C = .data:0x0021635C; // type:object size:0x21C -lbl_13_data_216578 = .data:0x00216578; // type:object size:0x18 -lbl_13_data_216590 = .data:0x00216590; // type:object size:0x14 -lbl_13_data_2165A4 = .data:0x002165A4; // type:object size:0x24 -lbl_13_data_2165C8 = .data:0x002165C8; // type:object size:0x40 data:4byte -lbl_13_data_216608 = .data:0x00216608; // type:object size:0x30 +o_cont_wood_texname_0 = .data:0x00215680; // type:object size:0x18 scope:local +o_cont_wood_texlist_0 = .data:0x00215698; // type:object size:0x8 scope:local +o_cont_wood_cnk_mdl_0_tex = .data:0x002156A0; // type:object size:0xAC scope:local +o_cont_wood_cnk_mdl_0_vtx = .data:0x0021574C; // type:object size:0xCC scope:local +o_cont_wood_cnk_mdl_0 = .data:0x00215818; // type:object size:0x18 scope:local +o_cont_wood_vec_0 = .data:0x00215830; // type:object size:0x60 scope:local +o_cont_wood_vec_1 = .data:0x00215890; // type:object size:0x60 scope:local +o_cont_wood_uv_0 = .data:0x002158F0; // type:object size:0x50 scope:local +o_cont_wood_arr_0 = .data:0x00215940; // type:object size:0x40 scope:local +o_cont_wood_material_0 = .data:0x00215980; // type:object size:0x50 scope:local +o_cont_wood_material_1 = .data:0x002159D0; // type:object size:0x8 scope:local +o_cont_wood_dl_0 = .data:0x002159E0; // type:object size:0x20 scope:local align:32 +o_cont_wood_dl_1 = .data:0x00215A00; // type:object size:0x60 scope:local align:32 +o_cont_wood_meshset_0 = .data:0x00215A60; // type:object size:0x20 scope:local +o_cont_wood_mdl_0 = .data:0x00215A80; // type:object size:0x24 scope:local align:4 data:float +o_cont_wood_texname_1 = .data:0x00215AA4; // type:object size:0xC scope:local +o_cont_wood_texlist_1 = .data:0x00215AB0; // type:object size:0x8 scope:local +o_cont_wood_cnk_mdl_1_tex = .data:0x00215AB8; // type:object size:0x1B0 scope:local +o_cont_wood_cnk_mdl_1_vtx = .data:0x00215C68; // type:object size:0x27C scope:local +o_cont_wood_cnk_mdl_1 = .data:0x00215EE4; // type:object size:0x18 scope:local +o_cont_wood_texname_2 = .data:0x00215EFC; // type:object size:0xC scope:local +o_cont_wood_texlist_2 = .data:0x00215F08; // type:object size:0x8 scope:local +o_cont_wood_cnk_mdl_2_tex = .data:0x00215F10; // type:object size:0x108 scope:local +o_cont_wood_cnk_mdl_2_vtx = .data:0x00216018; // type:object size:0x18C scope:local +o_cont_wood_cnk_mdl_2 = .data:0x002161A4; // type:object size:0x18 scope:local +o_cont_wood_texname_3 = .data:0x002161BC; // type:object size:0xC scope:local +o_cont_wood_texlist_3 = .data:0x002161C8; // type:object size:0x8 scope:local +o_cont_wood_cnk_mdl_3_tex = .data:0x002161D0; // type:object size:0x18C scope:local +o_cont_wood_cnk_mdl_3_vtx = .data:0x0021635C; // type:object size:0x21C scope:local +o_cont_wood_cnk_mdl_3 = .data:0x00216578; // type:object size:0x18 scope:local +g_ContWoodTexList = .data:0x00216590; // type:object size:0x14 +o_cont_wood_break_pieces = .data:0x002165A4; // type:object size:0x24 scope:local +o_cont_wood_dc_draw = .data:0x002165C8; // type:object size:0x40 scope:local data:4byte +o_cont_wood_collision = .data:0x00216608; // type:object size:0x30 scope:local lbl_13_data_216638 = .data:0x00216638; // type:object size:0x5 data:string lbl_13_data_216640 = .data:0x00216640; // type:object size:0xE data:string lbl_13_data_216650 = .data:0x00216650; // type:object size:0xD data:string @@ -18388,7 +18388,7 @@ lbl_13_bss_700 = .bss:0x00000700; // type:object size:0x8 data:4byte lbl_13_bss_708 = .bss:0x00000708; // type:object size:0x8 data:4byte o_cont_chao_cnkdraw = .bss:0x00000710; // type:object size:0x8 scope:local data:4byte lbl_13_bss_718 = .bss:0x00000718; // type:object size:0x8 data:4byte -lbl_13_bss_720 = .bss:0x00000720; // type:object size:0x8 data:4byte +o_cont_wood_cnkdraw = .bss:0x00000720; // type:object size:0x8 scope:local data:4byte lbl_13_bss_728 = .bss:0x00000728; // type:object size:0x8 data:4byte lbl_13_bss_730 = .bss:0x00000730; // type:object size:0x4 data:4byte lbl_13_bss_734 = .bss:0x00000734; // type:object size:0x4 data:4byte diff --git a/include/OBJECT/o_container_wood.h b/include/OBJECT/o_container_wood.h index f1520d0d..75f9df0c 100644 --- a/include/OBJECT/o_container_wood.h +++ b/include/OBJECT/o_container_wood.h @@ -5,5 +5,6 @@ #include "samt/sonic/task.h" void ContainerWood(task *tp); +extern NJS_TEXLIST *g_ContWoodTexList[]; #endif // !_O_CONTAINER_WOOD_H_ diff --git a/src/OBJECT/o_container_wood.c b/src/OBJECT/o_container_wood.c index 397ee8c3..bf3a1a94 100644 --- a/src/OBJECT/o_container_wood.c +++ b/src/OBJECT/o_container_wood.c @@ -2,6 +2,7 @@ #include "set.h" #include "CCL.h" #include "samt/sonic/njctrl.h" +#include "samt/sonic/game.h" extern s32 _rename_GetStageNum(void); @@ -16,13 +17,221 @@ extern void fn_8006648C(void); extern int lbl_803ADAD0; extern NJS_VECTOR *lbl_80175378[]; -extern NJS_TEXLIST lbl_13_data_215698; -extern GJS_MODEL lbl_13_data_215A80; -extern CCL_INFO lbl_13_data_216608[1]; - // ^ extern // v in this file +// bss +static BOOL o_cont_wood_cnkdraw = FALSE; + +// data +static NJS_TEXNAME o_cont_wood_texname_0[] = { + {"sikake_18_128"}, + {"sikake_19_128"}, +}; + +static NJS_TEXLIST o_cont_wood_texlist_0 = { + o_cont_wood_texname_0, + ARRAY_COUNT(o_cont_wood_texname_0), +}; + +static s16 o_cont_wood_cnk_mdl_0_tex[] = { +#include "assets/o_cont_wood_cnk_mdl_0_tex.inc" +}; + +static s32 o_cont_wood_cnk_mdl_0_vtx[] = { +#include "assets/o_cont_wood_cnk_mdl_0_vtx.inc" +}; + +static NJS_CNK_MODEL o_cont_wood_cnk_mdl_0 = { + o_cont_wood_cnk_mdl_0_vtx, + o_cont_wood_cnk_mdl_0_tex, + {0.0f, 9.999998f, 0.0f}, + 14.142136f, +}; + +static NJS_VECTOR o_cont_wood_vec_0[] = { +#include "assets/o_cont_wood_vec_0.inc" +}; + +static NJS_VECTOR o_cont_wood_vec_1[] = { +#include "assets/o_cont_wood_vec_1.inc" +}; + +static NJS_TEX o_cont_wood_uv_0[] = { +#include "assets/o_cont_wood_uv_0.inc" +}; + +static GJS_ARRAY o_cont_wood_arr_0[] = { + GJS_ARR_ENTRY(o_cont_wood_vec_0, GJ_VA_POS, GJ_POS_XYZ, GJ_F32), + GJS_ARR_ENTRY(o_cont_wood_vec_1, GJ_VA_NRM, GJ_NRM_XYZ, GJ_F32), + GJS_ARR_ENTRY(o_cont_wood_uv_0, GJ_VA_TEX0, GJ_TEX_ST, GJ_S16), + GJ_VA_NULL, +}; + +static GJS_MATERIAL o_cont_wood_material_0[] = { +#include "assets/o_cont_wood_material_0.inc" +}; + +static GJS_MATERIAL o_cont_wood_material_1[] = { +#include "assets/o_cont_wood_material_1.inc" +}; + +static u8 o_cont_wood_dl_0[] ATTRIBUTE_ALIGN(32) = { +#include "assets/o_cont_wood_dl_0.inc" +}; + +static u8 o_cont_wood_dl_1[] ATTRIBUTE_ALIGN(32) = { +#include "assets/o_cont_wood_dl_1.inc" +}; + +static GJS_MESHSET o_cont_wood_meshset_0[] = { + { + o_cont_wood_material_0, + ARRAY_COUNT(o_cont_wood_material_0), + o_cont_wood_dl_0, + ARRAY_COUNT(o_cont_wood_dl_0), + }, + { + o_cont_wood_material_1, + ARRAY_COUNT(o_cont_wood_material_1), + o_cont_wood_dl_1, + ARRAY_COUNT(o_cont_wood_dl_1), + }, +}; + +static GJS_MODEL o_cont_wood_mdl_0 = { + o_cont_wood_arr_0, + NULL, + o_cont_wood_meshset_0, + NULL, + ARRAY_COUNT(o_cont_wood_meshset_0), + 0, + {0.0f, 9.999998f, 0.0f}, + 14.142136f, +}; + +static NJS_TEXNAME o_cont_wood_texname_1[] = { + {"sikake_18_128"}, +}; + +static NJS_TEXLIST o_cont_wood_texlist_1 = { + o_cont_wood_texname_1, + ARRAY_COUNT(o_cont_wood_texname_1), +}; + +static s16 o_cont_wood_cnk_mdl_1_tex[] = { +#include "assets/o_cont_wood_cnk_mdl_1_tex.inc" +}; + +static s32 o_cont_wood_cnk_mdl_1_vtx[] = { +#include "assets/o_cont_wood_cnk_mdl_1_vtx.inc" +}; + +static NJS_CNK_MODEL o_cont_wood_cnk_mdl_1 = { + o_cont_wood_cnk_mdl_1_vtx, + o_cont_wood_cnk_mdl_1_tex, + {0.0f, 0.0f, 0.0f}, + 6.818267f, +}; + +static NJS_TEXNAME o_cont_wood_texname_2[] = { + {"sikake_18_128"}, +}; + +static NJS_TEXLIST o_cont_wood_texlist_2 = { + o_cont_wood_texname_2, + ARRAY_COUNT(o_cont_wood_texname_2), +}; + +static s16 o_cont_wood_cnk_mdl_2_tex[] = { +#include "assets/o_cont_wood_cnk_mdl_2_tex.inc" +}; + +static s32 o_cont_wood_cnk_mdl_2_vtx[] = { +#include "assets/o_cont_wood_cnk_mdl_2_vtx.inc" +}; + +static NJS_CNK_MODEL o_cont_wood_cnk_mdl_2 = { + o_cont_wood_cnk_mdl_2_vtx, + o_cont_wood_cnk_mdl_2_tex, + {0.0f, 0.059847f, 0.0f}, + 9.772826f, +}; + +static NJS_TEXNAME o_cont_wood_texname_3[] = { + {"sikake_18_128"}, +}; + +static NJS_TEXLIST o_cont_wood_texlist_3 = { + o_cont_wood_texname_3, + ARRAY_COUNT(o_cont_wood_texname_3), +}; + +static s16 o_cont_wood_cnk_mdl_3_tex[] = { +#include "assets/o_cont_wood_cnk_mdl_3_tex.inc" +}; + +static s32 o_cont_wood_cnk_mdl_3_vtx[] = { +#include "assets/o_cont_wood_cnk_mdl_3_vtx.inc" +}; + +static NJS_CNK_MODEL o_cont_wood_cnk_mdl_3 = { + o_cont_wood_cnk_mdl_3_vtx, + o_cont_wood_cnk_mdl_3_tex, + {-0.019999f, -0.083719f, -0.074469f}, + 9.79003f, +}; + +NJS_TEXLIST *g_ContWoodTexList[] = { + &o_cont_wood_texlist_0, &o_cont_wood_texlist_1, &o_cont_wood_texlist_2, + &o_cont_wood_texlist_3, NULL, +}; + +// pieces thrown out when the crate breaks: model and how many copies +typedef struct { + NJS_TEXLIST *texlist; + NJS_CNK_MODEL *model; + s32 num; +} o_cont_wood_piece_t; + +static o_cont_wood_piece_t o_cont_wood_break_pieces[] = { + {&o_cont_wood_texlist_1, &o_cont_wood_cnk_mdl_1, 16}, + {&o_cont_wood_texlist_2, &o_cont_wood_cnk_mdl_2, 4}, + {&o_cont_wood_texlist_3, &o_cont_wood_cnk_mdl_3, 4}, +}; + +typedef struct { + u32 _0; + NJS_TEXLIST *_4; + artificial_padding(4, 0xc, NJS_TEXLIST *); + NJS_MODEL *_C; +} o_cont_wood_dc_draw_t; + +static o_cont_wood_dc_draw_t o_cont_wood_dc_draw[4] = { + {1, &o_cont_wood_texlist_0, {}, NULL}, + {0, &o_cont_wood_texlist_1, {}, NULL}, + {0, &o_cont_wood_texlist_2, {}, NULL}, + {0, &o_cont_wood_texlist_3, {}, NULL}, +}; + +static CCL_INFO o_cont_wood_collision[1] = { + { + 0, + CI_FORM_RECTANGLE, + 0x77, + 4, + 0x00004400, + {0.0f, 10.0f, 0.0f}, + 10.0f, + 10.0f, + 10.0f, + 0.0f, + 0, + 0, + 0, + }, +}; + static void ContainerWood_disp(task *tp); static void ContainerWood_dispSort(task *tp); static void ContainerWood_exec(task *tp); @@ -41,9 +250,9 @@ void ContainerWood(task *tp) { tp->exec = ContainerWood_exec; tp->dest = ContainerWood_dest; switch (_rename_GetStageNum()) { - case 60: - case 61: - case 62: + case STAGE_B_BIGFOOT: + case STAGE_B_HOTSHOT: + case STAGE_B_FDOG: tp->disp_sort = ContainerWood_dispSort; break; } @@ -51,7 +260,7 @@ void ContainerWood(task *tp) { CONT_F1(tp) = -1000000.0f; twp->scl.y = 0.0f; twp->scl.z = 0.0f; - CCL_InitShare(tp, lbl_13_data_216608, ARRAY_COUNT(lbl_13_data_216608), CID_OBJECT); + CCL_InitShare(tp, o_cont_wood_collision, ARRAY_COUNT(o_cont_wood_collision), CID_OBJECT); twp->btimer = twp->ang.z; _rename_container_setup(tp); } @@ -67,16 +276,16 @@ static void ContainerWood_disp(task *tp) { NJS_VECTOR v; Angle3 ang; switch (_rename_GetStageNum()) { - case 60: - case 61: - case 62: + case STAGE_B_BIGFOOT: + case STAGE_B_HOTSHOT: + case STAGE_B_FDOG: _rename_njSubVector(&twp->pos, lbl_80175378[lbl_803ADAD0], &v); - if (njScalor2(&v) < 900.0f) { + if (njScalor2(&v) < SQ(30.0f)) { return; } break; } - njSetTexture(&lbl_13_data_215698); + njSetTexture(&o_cont_wood_texlist_0); njPushMatrixEx(); njTranslateEx(&twp->pos); njRotateY(NULL, twp->ang.y); @@ -84,9 +293,9 @@ static void ContainerWood_disp(task *tp) { ang.x = 0; ang.y = twp->ang.y; ang.z = 0; - fn_80066820(0xff, &twp->pos, lbl_13_data_215A80.r); + fn_80066820(0xff, &twp->pos, o_cont_wood_mdl_0.r); _rename_gjSetTexMtx(&twp->pos, &ang); - gjDrawModel(&lbl_13_data_215A80); + gjDrawModel(&o_cont_wood_mdl_0); fn_8006648C(); OffControl3D(NJD_CONTROL_3D_TRANS_MODIFIER | NJD_CONTROL_3D_SHADOW); njPopMatrixEx();