diff options
| author | emilybrooks <emilybrooksemilybrooks@gmail.com> | 2024-01-26 16:19:49 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-26 16:19:49 -0700 |
| commit | 1d9c5c49c5d5ee1fa0e9d53d02bfd732d9d863fd (patch) | |
| tree | e2068628ed4f9309c9623a09717751249e573784 | |
| parent | cc4355f6adae67c2f90b78659dc6bcf13910cc86 (diff) | |
Second half of tool objects (#136)
* tol_keitai_1
* kenjyu
* evw_anime data extraction works
* forgot to remove this
* added comments for objects
* fixes
* scroll colprim colenv now extract as arrays
* forgot commas
39 files changed, 1278 insertions, 206 deletions
diff --git a/include/evw_anime.h b/include/evw_anime.h index 14a2273..e4c83f1 100644 --- a/include/evw_anime.h +++ b/include/evw_anime.h @@ -5,11 +5,49 @@ struct Game; -typedef struct EvwAnimeUnk { - s8 unk_0; - s16 unk1; - void* unk_4; -} EvwAnimeUnk; +typedef struct EvwAnimeScroll { + /* 0x0 */ s8 x; /* x (s) texture position */ + /* 0x1 */ s8 y; /* y (t) texture position */ + /* 0x2 */ u8 width; /* texture width */ + /* 0x3 */ u8 height; /* texture height */ +} EvwAnimeScroll; // size = 0x4 + +typedef struct EvwAnimeColPrim { + /* 0x0 */ u8 r; + /* 0x1 */ u8 g; + /* 0x2 */ u8 b; + /* 0x3 */ u8 a; + /* 0x4 */ u8 l; +} EvwAnimeColPrim; // size = 0x5 + +typedef struct EvwAnimeColEnv { + /* 0x0 */ u8 r; + /* 0x1 */ u8 g; + /* 0x2 */ u8 b; + /* 0x3 */ u8 a; +} EvwAnimeColEnv; // size = 0x4 + +typedef struct EvwAnimeColReg { + /* 0x0 */ u16 frameCount; + /* 0x2 */ u16 keyframeCount; + /* 0x4 */ EvwAnimeColPrim* prim; + /* 0x8 */ EvwAnimeColEnv* env; + /* 0xC */ u16* keyframes; +} EvwAnimeColReg; // size = 0x10 + +typedef struct EvwAnimeTexAnime { + /* 0x0 */ u16 frameCount; /* total frames in the animation */ + /* 0x2 */ u16 keyframeCount; /* number of animation keyframes */ + /* 0x4 */ void** textureTable; /* list of each texture */ + /* 0x8 */ u8* animationPattern; /* list of which texture to use per keyframe (runs at 30 FPS) */ + /* 0xC */ u16* keyframes; /* list of keyframe frame indices */ +} EvwAnimeTexAnime; // size = 0x10 + +typedef struct EvwAnimeData { + /* 0x0 */ s8 segment; /* Negative segments signal the end of the animation data array */ + /* 0x2 */ s16 type; + /* 0x4 */ void* dataPtr; +} EvwAnimeData; // size = 0x8 // void func_800549C0_jp(); // void func_80054A28_jp(); @@ -23,6 +61,6 @@ typedef struct EvwAnimeUnk { // void func_80055214_jp(); // void func_80055248_jp(); // void func_800554D8_jp(); -void Evw_Anime_Set(struct Game*,EvwAnimeUnk*); +void Evw_Anime_Set(struct Game*,EvwAnimeData*); #endif diff --git a/include/tables/dmatables/dmadata_table_jp.h b/include/tables/dmatables/dmadata_table_jp.h index c714c66..21afbce 100644 --- a/include/tables/dmatables/dmadata_table_jp.h +++ b/include/tables/dmatables/dmadata_table_jp.h @@ -2268,15 +2268,15 @@ DEFINE_DMA_ENTRY(tol_umb_29, "tol_umb_29") DEFINE_DMA_ENTRY(tol_umb_30, "tol_umb_30") DEFINE_DMA_ENTRY(tol_umb_31, "tol_umb_31") DEFINE_DMA_ENTRY(tol_umb_32, "tol_umb_32") -DEFINE_DMA_ENTRY(object_01127000, "object_01127000") +DEFINE_DMA_ENTRY(tol_keitai_1, "tol_keitai_1") DEFINE_DMA_ENTRY(tol_utiwa_1, "tol_utiwa_1") DEFINE_DMA_ENTRY(object_01129000, "object_01129000") -DEFINE_DMA_ENTRY(object_0112A000, "object_0112A000") -DEFINE_DMA_ENTRY(object_0112B000, "object_0112B000") -DEFINE_DMA_ENTRY(object_0112C000, "object_0112C000") -DEFINE_DMA_ENTRY(object_0112D000, "object_0112D000") +DEFINE_DMA_ENTRY(tol_npcsao_1, "tol_npcsao_1") +DEFINE_DMA_ENTRY(tol_kamicup, "tol_kamicup") +DEFINE_DMA_ENTRY(tol_kenjyu_1, "tol_kenjyu_1") +DEFINE_DMA_ENTRY(tol_tamaire, "tol_tamaire") DEFINE_DMA_ENTRY(tol_cracker_1, "tol_cracker_1") -DEFINE_DMA_ENTRY(object_01130000, "object_01130000") +DEFINE_DMA_ENTRY(tol_hata_01, "tol_hata_01") DEFINE_DMA_ENTRY(object_01131000, "object_01131000") DEFINE_DMA_ENTRY(object_01134000, "object_01134000") DEFINE_DMA_ENTRY(object_01135000, "object_01135000") diff --git a/include/tables/object_table.h b/include/tables/object_table.h index ada136d..ee4f5fb 100644 --- a/include/tables/object_table.h +++ b/include/tables/object_table.h @@ -16,7 +16,7 @@ /* 0x003 */ DEFINE_OBJECT(gameplay_keep, GAMEPLAY_KEEP) /* 0x004 */ DEFINE_OBJECT(object_00D2D000, OBJECT_4) /* 0x005 */ DEFINE_OBJECT(object_013A4000, OBJECT_5) -/* 0x006 */ DEFINE_OBJECT(object_01130000, OBJECT_6) +/* 0x006 */ DEFINE_OBJECT(tol_hata_01, OBJECT_TOL_HATA_01) /* 0x007 */ DEFINE_OBJECT(object_0113C000, OBJECT_7) /* 0x008 */ DEFINE_OBJECT(object_00D25000, OBJECT_8) /* 0x009 */ DEFINE_OBJECT(object_00B36000, OBJECT_9) @@ -26,7 +26,7 @@ /* 0x00D */ DEFINE_OBJECT(object_013AB000, OBJECT_13) /* 0x00E */ DEFINE_OBJECT(object_00B68000, OBJECT_14) /* 0x00F */ DEFINE_OBJECT(object_00B88000, OBJECT_15) -/* 0x010 */ DEFINE_OBJECT(object_0112C000, OBJECT_16) +/* 0x010 */ DEFINE_OBJECT(tol_kenjyu_1, OBJECT_TOL_KENJYU_1) /* 0x011 */ DEFINE_OBJECT(object_0179F000, OBJECT_17) /* 0x012 */ DEFINE_OBJECT(object_017A1000, OBJECT_18) /* 0x013 */ DEFINE_OBJECT(object_0182A000, OBJECT_19) @@ -55,7 +55,7 @@ /* 0x02A */ DEFINE_OBJECT(object_01871000, OBJECT_42) /* 0x02B */ DEFINE_OBJECT(object_013A5000, OBJECT_43) /* 0x02C */ DEFINE_OBJECT(object_013A6000, OBJECT_44) -/* 0x02D */ DEFINE_OBJECT(object_01127000, OBJECT_45) +/* 0x02D */ DEFINE_OBJECT(tol_keitai_1, OBJECT_TOL_KEITAI_1) /* 0x02E */ DEFINE_OBJECT(object_01880000, OBJECT_46) /* 0x02F */ DEFINE_OBJECT(object_01884000, OBJECT_47) /* 0x030 */ DEFINE_OBJECT(object_01135000, OBJECT_48) @@ -380,8 +380,8 @@ /* 0x16F */ DEFINE_OBJECT(object_01011000, OBJECT_367) /* 0x170 */ DEFINE_OBJECT(object_01014000, OBJECT_368) /* 0x171 */ DEFINE_OBJECT(object_01147000, OBJECT_369) -/* 0x172 */ DEFINE_OBJECT(object_0112A000, OBJECT_370) -/* 0x173 */ DEFINE_OBJECT(object_0112B000, OBJECT_371) +/* 0x172 */ DEFINE_OBJECT(tol_npcsao_1, OBJECT_TOL_NPCSAO_1) +/* 0x173 */ DEFINE_OBJECT(tol_kamicup, OBJECT_TOL_KAMICUP) /* 0x174 */ DEFINE_OBJECT(object_00F41000, OBJECT_372) /* 0x175 */ DEFINE_OBJECT(object_00F43000, OBJECT_373) /* 0x176 */ DEFINE_OBJECT(object_00FBF000, OBJECT_374) @@ -401,7 +401,7 @@ /* 0x184 */ DEFINE_OBJECT(object_010A8000, OBJECT_388) /* 0x185 */ DEFINE_OBJECT(object_010AA000, OBJECT_389) /* 0x186 */ DEFINE_OBJECT(object_010AC000, OBJECT_390) -/* 0x187 */ DEFINE_OBJECT(object_0112D000, OBJECT_391) +/* 0x187 */ DEFINE_OBJECT(tol_tamaire, OBJECT_TOL_TAMAIRE) /* 0x188 */ DEFINE_OBJECT(object_011F4000, OBJECT_392) /* 0x189 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_393) /* 0x18A */ DEFINE_OBJECT(object_01106000, OBJECT_394) diff --git a/linker_scripts/jp/ignored_addresses.txt b/linker_scripts/jp/ignored_addresses.txt index 848e5c4..f6d2388 100644 --- a/linker_scripts/jp/ignored_addresses.txt +++ b/linker_scripts/jp/ignored_addresses.txt @@ -43,4 +43,4 @@ D_6000140 = 0x06000140; // ignore:true D_6000180 = 0x06000180; // ignore:true D_6000220 = 0x06000220; // ignore:true D_60003E8 = 0x060003E8; // ignore:true -D_6001B68 = 0x06001B68; // ignore:true
\ No newline at end of file +D_6001B68 = 0x06001B68; // ignore:true diff --git a/linker_scripts/jp/symbol_addrs_assets.txt b/linker_scripts/jp/symbol_addrs_assets.txt index 1d74df1..4514704 100644 --- a/linker_scripts/jp/symbol_addrs_assets.txt +++ b/linker_scripts/jp/symbol_addrs_assets.txt @@ -368,13 +368,77 @@ obj_shop_umb_32_pal = 0x6000508; // segment:tol_umb_32 rom:0x1126508 obj_shop_umb_32_kasa1_tex_txt = 0x6000528; // segment:tol_umb_32 rom:0x1126528 obj_shop_umb_32_tuka1_tex_txt = 0x6000728; // segment:tol_umb_32 rom:0x1126728 +cKF_ckcb_r_tol_keitai_1_keitai_off1_tbl = 0x6000000; // segment:tol_keitai_1 rom:0x1127000 +cKF_kn_tol_keitai_1_keitai_off1_tbl = 0x6000004; // segment:tol_keitai_1 rom:0x1127004 +cKF_c_tol_keitai_1_keitai_off1_tbl = 0x6000018; // segment:tol_keitai_1 rom:0x1127018 +cKF_ds_tol_keitai_1_keitai_off1_tbl = 0x6000020; // segment:tol_keitai_1 rom:0x1127020 +cKF_ba_r_tol_keitai_1_keitai_off1 = 0x60000A4; // segment:tol_keitai_1 rom:0x11270A4 +cKF_ckcb_r_tol_keitai_1_keitai_on1_tbl = 0x60000C0; // segment:tol_keitai_1 rom:0x11270C0 +cKF_kn_tol_keitai_1_keitai_on1_tbl = 0x60000C4; // segment:tol_keitai_1 rom:0x11270C4 +cKF_c_tol_keitai_1_keitai_on1_tbl = 0x60000C8; // segment:tol_keitai_1 rom:0x11270C8 +cKF_ds_tol_keitai_1_keitai_on1_tbl = 0x60000E0; // segment:tol_keitai_1 rom:0x11270E0 +cKF_ba_r_tol_keitai_1_keitai_on1 = 0x6000134; // segment:tol_keitai_1 rom:0x1127134 +tol_keitai_1_v = 0x6000150; // segment:tol_keitai_1 rom:0x1127150 size:0x1D0 +main1_keitai1_model = 0x6000320; // segment:tol_keitai_1 rom:0x1127320 +main2_keitai1_model = 0x6000480; // segment:tol_keitai_1 rom:0x1127480 +tol_keitai_1_pal = 0x60005E8; // segment:tol_keitai_1 rom:0x11275E8 +tol_keitai_1_ueura1_tex_txt = 0x6000608; // segment:tol_keitai_1 rom:0x1127608 +tol_keitai_1_ueomote1_tex_txt = 0x6000708; // segment:tol_keitai_1 rom:0x1127708 +tol_keitai_1_shitaura1_tex_txt = 0x6000808; // segment:tol_keitai_1 rom:0x1127808 +tol_keitai_1_shitaomote1_tex_txt = 0x6000908; // segment:tol_keitai_1 rom:0x1127908 +cKF_je_r_tol_keitai_1_tbl = 0x6000A08; // segment:tol_keitai_1 rom:0x1127A08 +cKF_bs_r_tol_keitai_1 = 0x6000A2C; // segment:tol_keitai_1 rom:0x1127A2C + tol_utiwa_1_v = 0x6000000; // segment:tol_utiwa_1 rom:0x1128000 size:0x80 main_utiwa1_model = 0x6000080; // segment:tol_utiwa_1 rom:0x1128080 tol_utiwa1_pal = 0x6000188; // segment:tol_utiwa_1 rom:0x1128188 tol_utiwa_1_main1_tex_txt = 0x60001A8; // segment:tol_utiwa_1 rom:0x11281A8 tol_utiwa_1_main2_tex_txt = 0x60003A8; // segment:tol_utiwa_1 rom:0x11283A8 +tol_npcsao_1_v = 0x6000000; // segment:tol_npcsao_1 rom:0x112A000 size:0x470 +tol_npcsao_1_sao_model = 0x6000470; // segment:tol_npcsao_1 rom:0x112A470 +tol_npcsao_1_uki_model = 0x6000548; // segment:tol_npcsao_1 rom:0x112A548 +tol_npcsao_1_pal = 0x60005D8; // segment:tol_npcsao_1 rom:0x112A5D8 +tol_npcsao_1_tex = 0x60005F8; // segment:tol_npcsao_1 rom:0x112A5F8 + +tol_kamicup_1_v = 0x6000000; // segment:tol_kamicup rom:0x112B000 size:0x330 +tol_kamicup_1T_model = 0x6000330; // segment:tol_kamicup rom:0x112B330 +tol_kamicup_pal = 0x6000450; // segment:tol_kamicup rom:0x112B450 +tol_kamicup_tex = 0x6000470; // segment:tol_kamicup rom:0x112B470 + +tol_kenjyu_1_v = 0x6000000; // segment:tol_kenjyu_1 rom:0x112C000 size:0x410 +tol_kenjyu_1T_model = 0x6000410; // segment:tol_kenjyu_1 rom:0x112C410 +tol_kenjyu_1_pal = 0x6000528; // segment:tol_kenjyu_1 rom:0x112C528 +tol_kenjyu_1_tex = 0x6000548; // segment:tol_kenjyu_1 rom:0x112C548 + +ef_tamaire01_r_v = 0x6000000; // segment:tol_tamaire rom:0x112D000 size:0x40 +tama01_model = 0x6000040; // segment:tol_tamaire rom:0x112D040 +ef_tamaire01_r_pal = 0x60000C8; // segment:tol_tamaire rom:0x112D0C8 +tama01_r_tex = 0x60000E8; // segment:tol_tamaire rom:0x112D0E8 +tama01_w_tex = 0x60002E8; // segment:tol_tamaire rom:0x112D2E8 +tol_tamaire_v = 0x60004F0; // segment:tol_tamaire rom:0x112D4F0 size:0x40 +tol_tamaire_model = 0x6000530; // segment:tol_tamaire rom:0x112D530 +tol_tamaire_pal = 0x60005B8; // segment:tol_tamaire rom:0x112D5B8 +tol_tamaire_r1_tex = 0x60005D8; // segment:tol_tamaire rom:0x112D5D8 +tol_tamaire_r2_tex = 0x60007D8; // segment:tol_tamaire rom:0x112D7D8 +tol_tamaire_r3_tex = 0x60009D8; // segment:tol_tamaire rom:0x112D9D8 +tol_tamaire_w1_tex = 0x6000BD8; // segment:tol_tamaire rom:0x112DBD8 +tol_tamaire_w2_tex = 0x6000DD8; // segment:tol_tamaire rom:0x112DDD8 +tol_tamaire_w3_tex = 0x6000FD8; // segment:tol_tamaire rom:0x112DFD8 + tol_cracker_1_v = 0x6000000; // segment:tol_cracker_1 rom:0x112F000 size:0x1C0 tol_cracker_1T_model = 0x60001C0; // segment:tol_cracker_1 rom:0x112F1C0 tol_cracker_1_pal = 0x6000280; // segment:tol_cracker_1 rom:0x112F280 tol_cracker_1_tex = 0x60002A0; // segment:tol_cracker_1 rom:0x112F2A0 + +tol_hata_01_v = 0x6000000; // segment:tol_hata_01 rom:0x1130000 size:0xF0 +tol_hata_e_model = 0x60000F0; // segment:tol_hata_01 rom:0x11300F0 +tol_hata_hataT_model = 0x60001A0; // segment:tol_hata_01 rom:0x11301A0 +tol_hata_e_pal = 0x6000228; // segment:tol_hata_01 rom:0x1130228 +tol_hata_e_tex = 0x6000248; // segment:tol_hata_01 rom:0x1130248 +tol_hata_hata_tex_inta_ia8 = 0x60002C8; // segment:tol_hata_01 rom:0x11302C8 +tol_hata_01_evw_anime_1_tex_table = 0x60003D0; // segment:tol_hata_01 rom:0x11303D0 +tol_hata_01_evw_anime_1_anime_ptn = 0x60003D4; // segment:tol_hata_01 rom:0x11303D4 +tol_hata_01_evw_anime_1 = 0x60003D8; // segment:tol_hata_01 rom:0x11303D8 +tol_hata_01_evw_anime_2 = 0x60003E8; // segment:tol_hata_01 rom:0x11303E8 +tol_hata_01_evw_anime = 0x60003F0; // segment:tol_hata_01 rom:0x11303F0 diff --git a/linker_scripts/jp/undefined_syms.ld b/linker_scripts/jp/undefined_syms.ld index b28eeb2..aa342de 100644 --- a/linker_scripts/jp/undefined_syms.ld +++ b/linker_scripts/jp/undefined_syms.ld @@ -1249,55 +1249,6 @@ D_6001628 = 0x06001628; D_60030A0 = 0x060030A0; D_60036C0 = 0x060036C0; -// ovl_T_Umbrella - -D_6000390 = 0x06000390; -D_60003C0 = 0x060003C0; -D_6000470 = 0x06000470; -D_6000508 = 0x06000508; -D_6000580 = 0x06000580; - -// ovl_T_Keitai - -D_6000A2C = 0x06000A2C; - -// ovl_T_Utiwa - -D_6000080 = 0x06000080; - -// ovl_T_Hanabi - -D_6000080 = 0x06000080; - -// ovl_T_Cracker - -D_60001C0 = 0x060001C0; - -// ovl_T_Pistol - -D_6000410 = 0x06000410; - -// ovl_T_Flag - -D_6000000 = 0x06000000; -D_60000F0 = 0x060000F0; -D_60001A0 = 0x060001A0; -D_60003F0 = 0x060003F0; - -// ovl_T_Tumbler - -D_6000330 = 0x06000330; - -// ovl_T_NpcSao - -D_6000470 = 0x06000470; -D_6000548 = 0x06000548; - -// ovl_T_Tama - -D_6000040 = 0x06000040; -D_6000DD8 = 0x06000DD8; - // ovl__008ED290 D_600F5C8 = 0x0600F5C8; @@ -5718,10 +5669,6 @@ cKF_ba_r_obj_w_toudai = 0x06080A74; obj_s_toudai_light_model = 0x0607E188; obj_w_toudai_light_model = 0x0607FD90; -// ac_t_hanabi - -main_utiwa1_model = 0x06000080; - // Buffers D_801524C0_jp = 0x801524C0; // diff --git a/src/objects/tol_cracker_1/tol_cracker_1.h b/src/objects/tol_cracker_1/tol_cracker_1.h index 2b86462..50c1c26 100644 --- a/src/objects/tol_cracker_1/tol_cracker_1.h +++ b/src/objects/tol_cracker_1/tol_cracker_1.h @@ -3,6 +3,11 @@ #include "gbi.h" +/** + * @file tol_cracker_1 + * クラッカー Party Popper + */ + extern Vtx tol_cracker_1_v[]; extern Gfx tol_cracker_1T_model[]; extern unsigned short tol_cracker_1_pal[]; diff --git a/src/objects/tol_hata_01/tol_hata_01.c b/src/objects/tol_hata_01/tol_hata_01.c new file mode 100644 index 0000000..bb07458 --- /dev/null +++ b/src/objects/tol_hata_01/tol_hata_01.c @@ -0,0 +1,8 @@ +#include "tol_hata_01.h" + +#include "assets/jp/objects/tol_hata_01/tol_hata_01_v.vtx.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_e_model.gfx.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_hataT_model.gfx.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_e_pal.palette.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_e_tex.ci4.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_hata_tex_inta_ia8.ia8.inc.c" diff --git a/src/objects/tol_hata_01/tol_hata_01.h b/src/objects/tol_hata_01/tol_hata_01.h new file mode 100644 index 0000000..c17ca49 --- /dev/null +++ b/src/objects/tol_hata_01/tol_hata_01.h @@ -0,0 +1,24 @@ +#ifndef OBJECT_TOL_HATA_01_H +#define OBJECT_TOL_HATA_01_H + +#include "gbi.h" +#include "evw_anime.h" + +/** + * @file tol_hata_01 + * 旗 Flag used in the Sports Fair + */ + +extern Vtx tol_hata_01_v[]; +extern Gfx tol_hata_e_model[]; +extern Gfx tol_hata_hataT_model[]; +extern unsigned short tol_hata_e_pal[]; +extern unsigned char tol_hata_e_tex[]; +extern unsigned char tol_hata_hata_tex_inta_ia8[]; +extern void* tol_hata_01_evw_anime_1_tex_table; +extern u8 tol_hata_01_evw_anime_1_anime_ptn[]; +extern EvwAnimeTexAnime tol_hata_01_evw_anime_1; +extern EvwAnimeScroll tol_hata_01_evw_anime_2[]; +extern EvwAnimeData tol_hata_01_evw_anime[]; + +#endif diff --git a/src/objects/tol_hata_01/tol_hata_01_evw_anime.c b/src/objects/tol_hata_01/tol_hata_01_evw_anime.c new file mode 100644 index 0000000..b792b54 --- /dev/null +++ b/src/objects/tol_hata_01/tol_hata_01_evw_anime.c @@ -0,0 +1,7 @@ +#include "tol_hata_01.h" + +#include "assets/jp/objects/tol_hata_01/tol_hata_01_evw_anime_1_tex_table.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_01_evw_anime_1_anime_ptn.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_01_evw_anime_1.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_01_evw_anime_2.inc.c" +#include "assets/jp/objects/tol_hata_01/tol_hata_01_evw_anime.inc.c" diff --git a/src/objects/tol_kamicup/tol_kamicup.c b/src/objects/tol_kamicup/tol_kamicup.c new file mode 100644 index 0000000..dc239cf --- /dev/null +++ b/src/objects/tol_kamicup/tol_kamicup.c @@ -0,0 +1,6 @@ +#include "tol_kamicup.h" + +#include "assets/jp/objects/tol_kamicup/tol_kamicup_1_v.vtx.inc.c" +#include "assets/jp/objects/tol_kamicup/tol_kamicup_1T_model.gfx.inc.c" +#include "assets/jp/objects/tol_kamicup/tol_kamicup_pal.palette.inc.c" +#include "assets/jp/objects/tol_kamicup/tol_kamicup_tex.ci4.inc.c" diff --git a/src/objects/tol_kamicup/tol_kamicup.h b/src/objects/tol_kamicup/tol_kamicup.h new file mode 100644 index 0000000..752b763 --- /dev/null +++ b/src/objects/tol_kamicup/tol_kamicup.h @@ -0,0 +1,16 @@ +#ifndef OBJECT_TOL_KAMICUP_H +#define OBJECT_TOL_KAMICUP_H + +#include "gbi.h" + +/** + * @file tol_kamicup + * 紙コップ Paper Cup + */ + +extern Vtx tol_kamicup_1_v[]; +extern Gfx tol_kamicup_1T_model[]; +extern unsigned short tol_kamicup_pal[]; +extern unsigned char tol_kamicup_tex[]; + +#endif diff --git a/src/objects/tol_keitai_1/keitai_off1.c b/src/objects/tol_keitai_1/keitai_off1.c new file mode 100644 index 0000000..f0ab81d --- /dev/null +++ b/src/objects/tol_keitai_1/keitai_off1.c @@ -0,0 +1,7 @@ +#include "tol_keitai_1.h" + +#include "assets/jp/objects/tol_keitai_1/cKF_ckcb_r_tol_keitai_1_keitai_off1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_kn_tol_keitai_1_keitai_off1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_c_tol_keitai_1_keitai_off1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_ds_tol_keitai_1_keitai_off1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_ba_r_tol_keitai_1_keitai_off1.inc.c" diff --git a/src/objects/tol_keitai_1/keitai_on1.c b/src/objects/tol_keitai_1/keitai_on1.c new file mode 100644 index 0000000..25e1f92 --- /dev/null +++ b/src/objects/tol_keitai_1/keitai_on1.c @@ -0,0 +1,7 @@ +#include "tol_keitai_1.h" + +#include "assets/jp/objects/tol_keitai_1/cKF_ckcb_r_tol_keitai_1_keitai_on1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_kn_tol_keitai_1_keitai_on1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_c_tol_keitai_1_keitai_on1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_ds_tol_keitai_1_keitai_on1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_ba_r_tol_keitai_1_keitai_on1.inc.c" diff --git a/src/objects/tol_keitai_1/tol_keitai_1.c b/src/objects/tol_keitai_1/tol_keitai_1.c new file mode 100644 index 0000000..e5e6637 --- /dev/null +++ b/src/objects/tol_keitai_1/tol_keitai_1.c @@ -0,0 +1,12 @@ +#include "tol_keitai_1.h" + +#include "assets/jp/objects/tol_keitai_1/tol_keitai_1_v.vtx.inc.c" +#include "assets/jp/objects/tol_keitai_1/main1_keitai1_model.gfx.inc.c" +#include "assets/jp/objects/tol_keitai_1/main2_keitai1_model.gfx.inc.c" +#include "assets/jp/objects/tol_keitai_1/tol_keitai_1_pal.palette.inc.c" +#include "assets/jp/objects/tol_keitai_1/tol_keitai_1_ueura1_tex_txt.ci4.inc.c" +#include "assets/jp/objects/tol_keitai_1/tol_keitai_1_ueomote1_tex_txt.ci4.inc.c" +#include "assets/jp/objects/tol_keitai_1/tol_keitai_1_shitaura1_tex_txt.ci4.inc.c" +#include "assets/jp/objects/tol_keitai_1/tol_keitai_1_shitaomote1_tex_txt.ci4.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_je_r_tol_keitai_1_tbl.inc.c" +#include "assets/jp/objects/tol_keitai_1/cKF_bs_r_tol_keitai_1.inc.c" diff --git a/src/objects/tol_keitai_1/tol_keitai_1.h b/src/objects/tol_keitai_1/tol_keitai_1.h new file mode 100644 index 0000000..00aa025 --- /dev/null +++ b/src/objects/tol_keitai_1/tol_keitai_1.h @@ -0,0 +1,37 @@ +#ifndef OBJECT_TOL_KEITAI_1_H +#define OBJECT_TOL_KEITAI_1_H + +#include "gbi.h" +#include "c_keyframe.h" + +/** + * @file tol_keitai_1 + * 携帯 Cell Phone + */ + +extern u8 cKF_ckcb_r_tol_keitai_1_keitai_off1_tbl[]; +extern s16 cKF_kn_tol_keitai_1_keitai_off1_tbl[]; +extern s16 cKF_c_tol_keitai_1_keitai_off1_tbl[]; +extern Keyframe cKF_ds_tol_keitai_1_keitai_off1_tbl[]; +extern BaseAnimationR cKF_ba_r_tol_keitai_1_keitai_off1; +extern u8 cKF_ckcb_r_tol_keitai_1_keitai_on1_tbl[]; +extern s16 cKF_kn_tol_keitai_1_keitai_on1_tbl[]; +extern s16 cKF_c_tol_keitai_1_keitai_on1_tbl[]; +extern Keyframe cKF_ds_tol_keitai_1_keitai_on1_tbl[]; +extern BaseAnimationR cKF_ba_r_tol_keitai_1_keitai_on1; +extern Vtx tol_keitai_1_v[]; +extern Gfx main1_keitai1_model[]; +extern Gfx main2_keitai1_model[]; +extern unsigned short tol_keitai_1_pal[]; +// 上裏 Top half back side +extern unsigned char tol_keitai_1_ueura1_tex_txt[]; +// 上面 Top half front side +extern unsigned char tol_keitai_1_ueomote1_tex_txt[]; +// 下裏 Bottom half back side +extern unsigned char tol_keitai_1_shitaura1_tex_txt[]; +// 下面 Bottom half front side +extern unsigned char tol_keitai_1_shitaomote1_tex_txt[]; +extern JointElemR cKF_je_r_tol_keitai_1_tbl[]; +extern BaseSkeletonR cKF_bs_r_tol_keitai_1; + +#endif diff --git a/src/objects/tol_kenjyu_1/tol_kenjyu_1.c b/src/objects/tol_kenjyu_1/tol_kenjyu_1.c new file mode 100644 index 0000000..a4f6a17 --- /dev/null +++ b/src/objects/tol_kenjyu_1/tol_kenjyu_1.c @@ -0,0 +1,6 @@ +#include "tol_kenjyu_1.h" + +#include "assets/jp/objects/tol_kenjyu_1/tol_kenjyu_1_v.vtx.inc.c" +#include "assets/jp/objects/tol_kenjyu_1/tol_kenjyu_1T_model.gfx.inc.c" +#include "assets/jp/objects/tol_kenjyu_1/tol_kenjyu_1_pal.palette.inc.c" +#include "assets/jp/objects/tol_kenjyu_1/tol_kenjyu_1_tex.ci4.inc.c" diff --git a/src/objects/tol_kenjyu_1/tol_kenjyu_1.h b/src/objects/tol_kenjyu_1/tol_kenjyu_1.h new file mode 100644 index 0000000..da805f3 --- /dev/null +++ b/src/objects/tol_kenjyu_1/tol_kenjyu_1.h @@ -0,0 +1,16 @@ +#ifndef OBJECT_TOL_KENJYU_1_H +#define OBJECT_TOL_KENJYU_1_H + +#include "gbi.h" + +/** + * @file tol_kenjyu_1 + * 拳銃 Starting Pistol for the Sports Fair Foot Race + */ + +extern Vtx tol_kenjyu_1_v[]; +extern Gfx tol_kenjyu_1T_model[]; +extern unsigned short tol_kenjyu_1_pal[]; +extern unsigned char tol_kenjyu_1_tex[]; + +#endif diff --git a/src/objects/tol_npcsao_1/tol_npcsao_1.c b/src/objects/tol_npcsao_1/tol_npcsao_1.c new file mode 100644 index 0000000..b340f14 --- /dev/null +++ b/src/objects/tol_npcsao_1/tol_npcsao_1.c @@ -0,0 +1,7 @@ +#include "tol_npcsao_1.h" + +#include "assets/jp/objects/tol_npcsao_1/tol_npcsao_1_v.vtx.inc.c" +#include "assets/jp/objects/tol_npcsao_1/tol_npcsao_1_sao_model.gfx.inc.c" +#include "assets/jp/objects/tol_npcsao_1/tol_npcsao_1_uki_model.gfx.inc.c" +#include "assets/jp/objects/tol_npcsao_1/tol_npcsao_1_pal.palette.inc.c" +#include "assets/jp/objects/tol_npcsao_1/tol_npcsao_1_tex.ci4.inc.c" diff --git a/src/objects/tol_npcsao_1/tol_npcsao_1.h b/src/objects/tol_npcsao_1/tol_npcsao_1.h new file mode 100644 index 0000000..deb8b10 --- /dev/null +++ b/src/objects/tol_npcsao_1/tol_npcsao_1.h @@ -0,0 +1,18 @@ +#ifndef OBJECT_TOL_NPCSAO_1_H +#define OBJECT_TOL_NPCSAO_1_H + +#include "gbi.h" + +/** + * @file tol_npcsao_1 + * NPC竿 NPC Fishing Rod + */ + +extern Vtx tol_npcsao_1_v[]; +extern Gfx tol_npcsao_1_sao_model[]; +// 浮き Fishing Bobber +extern Gfx tol_npcsao_1_uki_model[]; +extern unsigned short tol_npcsao_1_pal[]; +extern unsigned char tol_npcsao_1_tex[]; + +#endif diff --git a/src/objects/tol_tamaire/ef_tamaire01.c b/src/objects/tol_tamaire/ef_tamaire01.c new file mode 100644 index 0000000..6843a6c --- /dev/null +++ b/src/objects/tol_tamaire/ef_tamaire01.c @@ -0,0 +1,7 @@ +#include "tol_tamaire.h" + +#include "assets/jp/objects/tol_tamaire/ef_tamaire01_r_v.vtx.inc.c" +#include "assets/jp/objects/tol_tamaire/tama01_model.gfx.inc.c" +#include "assets/jp/objects/tol_tamaire/ef_tamaire01_r_pal.palette.inc.c" +#include "assets/jp/objects/tol_tamaire/tama01_r_tex.ci4.inc.c" +#include "assets/jp/objects/tol_tamaire/tama01_w_tex.ci4.inc.c" diff --git a/src/objects/tol_tamaire/tol_tamaire.c b/src/objects/tol_tamaire/tol_tamaire.c new file mode 100644 index 0000000..713e17c --- /dev/null +++ b/src/objects/tol_tamaire/tol_tamaire.c @@ -0,0 +1,11 @@ +#include "tol_tamaire.h" + +#include "assets/jp/objects/tol_tamaire/tol_tamaire_v.vtx.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_model.gfx.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_pal.palette.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_r1_tex.ci4.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_r2_tex.ci4.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_r3_tex.ci4.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_w1_tex.ci4.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_w2_tex.ci4.inc.c" +#include "assets/jp/objects/tol_tamaire/tol_tamaire_w3_tex.ci4.inc.c" diff --git a/src/objects/tol_tamaire/tol_tamaire.h b/src/objects/tol_tamaire/tol_tamaire.h new file mode 100644 index 0000000..f617e84 --- /dev/null +++ b/src/objects/tol_tamaire/tol_tamaire.h @@ -0,0 +1,26 @@ +#ifndef OBJECT_TOL_TAMAIRE_H +#define OBJECT_TOL_TAMAIRE_H + +#include "gbi.h" + +/** + * @file tol_tamaire + * 玉入れ Balls for the Sports Fair Ball Toss + */ + +extern Vtx ef_tamaire01_r_v[]; +extern Gfx tama01_model[]; +extern unsigned short ef_tamaire01_r_pal[]; +extern unsigned char tama01_r_tex[]; +extern unsigned char tama01_w_tex[]; +extern Vtx tol_tamaire_v[]; +extern Gfx tol_tamaire_model[]; +extern unsigned short tol_tamaire_pal[]; +extern unsigned char tol_tamaire_r1_tex[]; +extern unsigned char tol_tamaire_r2_tex[]; +extern unsigned char tol_tamaire_r3_tex[]; +extern unsigned char tol_tamaire_w1_tex[]; +extern unsigned char tol_tamaire_w2_tex[]; +extern unsigned char tol_tamaire_w3_tex[]; + +#endif diff --git a/src/objects/tol_utiwa_1/tol_utiwa_1.h b/src/objects/tol_utiwa_1/tol_utiwa_1.h index 3116154..15e8df5 100644 --- a/src/objects/tol_utiwa_1/tol_utiwa_1.h +++ b/src/objects/tol_utiwa_1/tol_utiwa_1.h @@ -3,6 +3,11 @@ #include "gbi.h" +/** + * @file tol_utiwa_1 + * 団扇 Firework Festival Blue Uchiwa Fan + */ + extern Vtx tol_utiwa_1_v[]; extern Gfx main_utiwa1_model[]; extern unsigned short tol_utiwa1_pal[]; diff --git a/src/overlays/actors/ovl_Tools/ac_tools.c b/src/overlays/actors/ovl_Tools/ac_tools.c index 1bfaaf4..0a639a8 100644 --- a/src/overlays/actors/ovl_Tools/ac_tools.c +++ b/src/overlays/actors/ovl_Tools/ac_tools.c @@ -95,15 +95,15 @@ ToolActor* aTOL_birth_proc(ToolName toolName, s32 arg1, ToolActor* toolActor, Ga ACTOR_T_TAMA, ACTOR_T_TAMA, }; static s16 objectTable[] = { - OBJECT_TOL_UMB_01, OBJECT_TOL_UMB_02, OBJECT_TOL_UMB_03, OBJECT_TOL_UMB_04, OBJECT_TOL_UMB_05, - OBJECT_TOL_UMB_06, OBJECT_TOL_UMB_07, OBJECT_TOL_UMB_08, OBJECT_TOL_UMB_09, OBJECT_TOL_UMB_10, - OBJECT_TOL_UMB_11, OBJECT_TOL_UMB_12, OBJECT_TOL_UMB_13, OBJECT_TOL_UMB_14, OBJECT_TOL_UMB_15, - OBJECT_TOL_UMB_16, OBJECT_TOL_UMB_17, OBJECT_TOL_UMB_18, OBJECT_TOL_UMB_19, OBJECT_TOL_UMB_20, - OBJECT_TOL_UMB_21, OBJECT_TOL_UMB_22, OBJECT_TOL_UMB_23, OBJECT_TOL_UMB_24, OBJECT_TOL_UMB_25, - OBJECT_TOL_UMB_26, OBJECT_TOL_UMB_27, OBJECT_TOL_UMB_28, OBJECT_TOL_UMB_29, OBJECT_TOL_UMB_30, - OBJECT_TOL_UMB_31, OBJECT_TOL_UMB_32, OBJECT_45, OBJECT_TOL_UTIWA_1, OBJECT_TOL_UTIWA_1, - OBJECT_TOL_CRACKER_1, OBJECT_16, OBJECT_6, OBJECT_371, OBJECT_370, - OBJECT_391, OBJECT_391, OBJECT_391, OBJECT_391, + OBJECT_TOL_UMB_01, OBJECT_TOL_UMB_02, OBJECT_TOL_UMB_03, OBJECT_TOL_UMB_04, OBJECT_TOL_UMB_05, + OBJECT_TOL_UMB_06, OBJECT_TOL_UMB_07, OBJECT_TOL_UMB_08, OBJECT_TOL_UMB_09, OBJECT_TOL_UMB_10, + OBJECT_TOL_UMB_11, OBJECT_TOL_UMB_12, OBJECT_TOL_UMB_13, OBJECT_TOL_UMB_14, OBJECT_TOL_UMB_15, + OBJECT_TOL_UMB_16, OBJECT_TOL_UMB_17, OBJECT_TOL_UMB_18, OBJECT_TOL_UMB_19, OBJECT_TOL_UMB_20, + OBJECT_TOL_UMB_21, OBJECT_TOL_UMB_22, OBJECT_TOL_UMB_23, OBJECT_TOL_UMB_24, OBJECT_TOL_UMB_25, + OBJECT_TOL_UMB_26, OBJECT_TOL_UMB_27, OBJECT_TOL_UMB_28, OBJECT_TOL_UMB_29, OBJECT_TOL_UMB_30, + OBJECT_TOL_UMB_31, OBJECT_TOL_UMB_32, OBJECT_TOL_KEITAI_1, OBJECT_TOL_UTIWA_1, OBJECT_TOL_UTIWA_1, + OBJECT_TOL_CRACKER_1, OBJECT_TOL_KENJYU_1, OBJECT_TOL_HATA_01, OBJECT_TOL_KAMICUP, OBJECT_TOL_NPCSAO_1, + OBJECT_TOL_TAMAIRE, OBJECT_TOL_TAMAIRE, OBJECT_TOL_TAMAIRE, OBJECT_TOL_TAMAIRE, }; s32 pad[3] UNUSED; ToolActor* ret = NULL; diff --git a/src/overlays/actors/ovl_Train_Window/ac_train_window.c b/src/overlays/actors/ovl_Train_Window/ac_train_window.c index 299198f..9b89edf 100644 --- a/src/overlays/actors/ovl_Train_Window/ac_train_window.c +++ b/src/overlays/actors/ovl_Train_Window/ac_train_window.c @@ -35,7 +35,7 @@ extern Gfx rom_train_out_shineglass_modelT[]; extern u8 till_data[15][2]; extern u16 aTrainWindow_tree_pal_table[15][16]; -extern EvwAnimeUnk aTrainWindow_evw_anime_data; +extern EvwAnimeData aTrainWindow_evw_anime_data; s32 aTrainWindow_NoDraw(Actor* thisx, Game* game); s32 aTrainWindow_DrawGoneOutTunnel(Actor* thisx, Game* game); diff --git a/tools/splat_ext/af_gfx.py b/tools/splat_ext/af_gfx.py new file mode 100644 index 0000000..30112db --- /dev/null +++ b/tools/splat_ext/af_gfx.py @@ -0,0 +1,281 @@ +""" +N64 f3dex display list splitter +Dumps out Gfx[] as a .inc.c file. +""" + +import re +from typing import Optional + +from pathlib import Path + +from pygfxd import ( + gfxd_buffer_to_string, + gfxd_cimg_callback, + gfxd_dl_callback, + gfxd_endian, + gfxd_execute, + gfxd_input_buffer, + gfxd_light_callback, + gfxd_lookat_callback, + gfxd_macro_dflt, + gfxd_macro_fn, + gfxd_mtx_callback, + gfxd_output_buffer, + gfxd_printf, + gfxd_puts, + gfxd_target, + gfxd_timg_callback, + gfxd_tlut_callback, + gfxd_vp_callback, + gfxd_vtx_callback, + gfxd_zimg_callback, + GfxdEndian, + gfxd_f3d, + gfxd_f3db, + gfxd_f3dex, + gfxd_f3dexb, + gfxd_f3dex2, +) +from ..segment import Segment + +from ...util import log, options +from ...util.log import error + +from ..common.codesubsegment import CommonSegCodeSubsegment + +from ...util import symbols + +LIGHTS_RE = re.compile(r"\*\(Lightsn \*\)0x[0-9A-F]{8}") + + +class N64SegAf_gfx(CommonSegCodeSubsegment): + def __init__( + self, + rom_start: Optional[int], + rom_end: Optional[int], + type: str, + name: str, + vram_start: Optional[int], + args: list, + yaml, + ): + super().__init__( + rom_start, + rom_end, + type, + name, + vram_start, + args=args, + yaml=yaml, + ) + self.file_text = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + self.in_segment = not isinstance(yaml, dict) or yaml.get("in_segment", True) + + def format_sym_name(self, sym) -> str: + return sym.name + + def get_linker_section(self) -> str: + return ".data" + + def out_path(self) -> Path: + return options.opts.asset_path / self.dir / f"{self.name}.gfx.inc.c" + + def scan(self, rom_bytes: bytes): + self.file_text = self.disassemble_data(rom_bytes) + + def get_gfxd_target(self): + opt = options.opts.gfx_ucode + + if opt == "f3d": + return gfxd_f3d + elif opt == "f3db": + return gfxd_f3db + elif opt == "f3dex": + return gfxd_f3dex + elif opt == "f3dexb": + return gfxd_f3dexb + elif opt == "f3dex2": + return gfxd_f3dex2 + else: + log.error(f"Unknown target {opt}") + + def tlut_handler(self, addr, idx, count): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(self.format_sym_name(sym)) + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def timg_handler(self, addr, fmt, size, width, height, pal): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(self.format_sym_name(sym)) + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def cimg_handler(self, addr, fmt, size, width): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(self.format_sym_name(sym)) + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def zimg_handler(self, addr): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(self.format_sym_name(sym)) + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def dl_handler(self, addr): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(self.format_sym_name(sym)) + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def mtx_handler(self, addr): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(f"&{self.format_sym_name(sym)}") + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def lookat_handler(self, addr, count): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(self.format_sym_name(sym)) + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def light_handler(self, addr, count): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(self.format_sym_name(sym)) + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def vtx_handler(self, addr, count): + # this will grab the symbol for addresses between the start address and end address of the vtx array + sym = self.get_symbol( + addr=addr, + in_segment=self.in_segment, + type="Vtx", + reference=True, + search_ranges=True, + ) + if sym: + index = int((addr - sym.vram_start) / 0x10) + gfxd_printf(f"&{self.format_sym_name(sym)}[{index}]") + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def vp_handler(self, addr): + sym = self.get_symbol(addr=addr) + if sym: + gfxd_printf(f"&{self.format_sym_name(sym)}") + else: + gfxd_printf(f"0x{addr:08X}") + return 1 + + def macro_fn(self): + gfxd_puts(" ") + gfxd_macro_dflt() + gfxd_puts(",\n") + return 0 + + def disassemble_data(self, rom_bytes): + assert isinstance(self.rom_start, int) + assert isinstance(self.rom_end, int) + assert isinstance(self.vram_start, int) + + gfx_data = rom_bytes[self.rom_start : self.rom_end] + segment_length = len(gfx_data) + if (segment_length) % 8 != 0: + error( + f"Error: gfx segment {self.name} length ({segment_length}) is not a multiple of 8!" + ) + + out_str = "" if self.data_only else options.opts.generated_c_preamble + "\n\n" + + sym = self.create_symbol( + addr=self.vram_start, in_segment=True, type="data", define=True + ) + + gfxd_input_buffer(gfx_data) + + # TODO terrible guess at the size we'll need - improve this + outb = bytes([0] * segment_length * 100) + outbuf = gfxd_output_buffer(outb, len(outb)) + + gfxd_target(self.get_gfxd_target()) + gfxd_endian( + GfxdEndian.big if options.opts.endianness == "big" else GfxdEndian.little, 4 + ) + + # Callbacks + gfxd_macro_fn(self.macro_fn) + + gfxd_tlut_callback(self.tlut_handler) + gfxd_timg_callback(self.timg_handler) + gfxd_cimg_callback(self.cimg_handler) + gfxd_zimg_callback(self.zimg_handler) + gfxd_dl_callback(self.dl_handler) + gfxd_mtx_callback(self.mtx_handler) + gfxd_lookat_callback(self.lookat_handler) + gfxd_light_callback(self.light_handler) + # gfxd_seg_callback ? + gfxd_vtx_callback(self.vtx_handler) + gfxd_vp_callback(self.vp_handler) + # gfxd_uctext_callback ? + # gfxd_ucdata_callback ? + # gfxd_dram_callback ? + + gfxd_execute() + + if self.data_only: + out_str += gfxd_buffer_to_string(outbuf) + else: + out_str += "Gfx " + self.format_sym_name(sym) + "[] = {\n" + out_str += gfxd_buffer_to_string(outbuf) + out_str += "};\n" + + # Poor man's light fix until we get my libgfxd PR merged + def light_sub_func(match): + light = match.group(0) + addr = int(light[12:], 0) + sym = self.create_symbol( + addr=addr, in_segment=self.in_segment, type="data", reference=True + ) + return self.format_sym_name(sym) + + out_str = re.sub(LIGHTS_RE, light_sub_func, out_str) + + return out_str + + def split(self, rom_bytes: bytes): + if self.file_text and self.out_path(): + self.out_path().parent.mkdir(parents=True, exist_ok=True) + + with open(self.out_path(), "w", newline="\n") as f: + f.write(self.file_text) + + def should_scan(self) -> bool: + return ( + options.opts.is_mode_active("gfx") + and self.rom_start is not None + and self.rom_end is not None + ) + + def should_split(self) -> bool: + return self.extract and options.opts.is_mode_active("gfx") diff --git a/tools/splat_ext/af_ia8.py b/tools/splat_ext/af_ia8.py new file mode 100644 index 0000000..ce5ffe5 --- /dev/null +++ b/tools/splat_ext/af_ia8.py @@ -0,0 +1,22 @@ +from n64img.image import Image, IA8 +from splat.util import log, options +from splat.segtypes.n64.segment import N64Segment + +class N64SegAf_ia8(N64Segment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.width = args[0] + self.height = args[1] + + def scan(self, rom_bytes: bytes): + self.n64img: Image = IA8(b"", 0, 0) + self.n64img.width = self.width + self.n64img.height = self.height + self.n64img.data = rom_bytes[self.rom_start : self.rom_end] + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.ia8.png" + path.parent.mkdir(parents=True, exist_ok=True) + + self.n64img.write(path) diff --git a/tools/splat_ext/ckf_c.py b/tools/splat_ext/ckf_c.py index 379a000..32ac409 100644 --- a/tools/splat_ext/ckf_c.py +++ b/tools/splat_ext/ckf_c.py @@ -24,8 +24,8 @@ class N64SegCkf_c(CommonSegCodeSubsegment): lines.append("") lines.append(f"s16 {symbol.name}[{count}] = {{") - for byte in struct.iter_unpack(">h", data): - lines.append(f" {byte[0]},") + for short in struct.iter_unpack(">h", data): + lines.append(f" {short[0]},") if not self.data_only: lines.append("};") diff --git a/tools/splat_ext/ckf_kn.py b/tools/splat_ext/ckf_kn.py index 4efa957..ecbf207 100644 --- a/tools/splat_ext/ckf_kn.py +++ b/tools/splat_ext/ckf_kn.py @@ -26,8 +26,8 @@ class N64SegCkf_kn(CommonSegCodeSubsegment): lines.append("") lines.append(f"s16 {symbol.name}[{count}] = {{") - for byte in struct.iter_unpack(">h", data): - lines.append(f" {byte[0]},") + for short in struct.iter_unpack(">h", data): + lines.append(f" {short[0]},") if not self.data_only: lines.append("};") diff --git a/tools/splat_ext/evw_animeptn.py b/tools/splat_ext/evw_animeptn.py new file mode 100644 index 0000000..e9e0727 --- /dev/null +++ b/tools/splat_ext/evw_animeptn.py @@ -0,0 +1,38 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_animeptn(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + lines = [] + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"u8 {symbol.name}[{len(data)}] = {{") + + for byte in struct.iter_unpack(">B", data): + lines.append(f" {byte[0]},") + + if not self.data_only: + lines.append("};") + + lines.append("") + self.file_text = "\n".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/tools/splat_ext/evw_colenv.py b/tools/splat_ext/evw_colenv.py new file mode 100644 index 0000000..3d0c345 --- /dev/null +++ b/tools/splat_ext/evw_colenv.py @@ -0,0 +1,43 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_colenv(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + count = len(data) // 4 + lines = [] + + if (len(data)) % 4 != 0: + log.error(f"Error: evw_colenv segment {self.name} length ({len(data)}) is not a multiple of 4!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"EvwAnimeColEnv {symbol.name}[{count}] = {{") + + for EvwAnimeColEnv in struct.iter_unpack(">bbbb", data): + r, g, b, a = EvwAnimeColEnv + lines.append(f" {{ {r}, {g}, {b}, {a} }},") + + if not self.data_only: + lines.append("};") + + lines.append("") + self.file_text = "\n".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/tools/splat_ext/evw_colprim.py b/tools/splat_ext/evw_colprim.py new file mode 100644 index 0000000..a8c2112 --- /dev/null +++ b/tools/splat_ext/evw_colprim.py @@ -0,0 +1,43 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_colprim(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + count = len(data) // 5 + lines = [] + + if (len(data)) % 5 != 0: + log.error(f"Error: evw_colprim segment {self.name} length ({len(data)}) is not a multiple of 5!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"EvwAnimeColPrim {symbol.name}[{count}] = {{") + + for EvwAnimeColPrim in struct.iter_unpack(">bbbbb", data): + r, g, b, a, l = EvwAnimeColPrim + lines.append(f" {{ {r}, {g}, {b}, {a}, {l} }},") + + if not self.data_only: + lines.append("};") + + lines.append("") + self.file_text = "\n".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/tools/splat_ext/evw_colreg.py b/tools/splat_ext/evw_colreg.py new file mode 100644 index 0000000..2352bc6 --- /dev/null +++ b/tools/splat_ext/evw_colreg.py @@ -0,0 +1,57 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_colreg(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + lines = [] + + if (len(data)) != 16: + log.error(f"Error: evw_colreg segment {self.name} length ({len(data)}) is not 16 bytes!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("\n") + lines.append(f"EvwAnimeColReg {symbol.name} = ") + + frameCount, keyframeCount, prim, env, keyframes = struct.unpack(">HHIII", data) + + if prim: + prim_symbol = self.get_symbol(addr=prim).name + else: + prim_symbol = "NULL" + + if env: + env_symbol = self.get_symbol(addr=env).name + else: + env_symbol = "NULL" + + if keyframes: + keyframes_symbol = self.get_symbol(addr=keyframes).name + else: + keyframes_symbol = "NULL" + + lines.append(f"{{ {frameCount}, {keyframeCount}, {prim_symbol}, {env_symbol}, {keyframes_symbol} }}") + + if not self.data_only: + lines.append(";") + + lines.append("\n") + self.file_text = "".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/tools/splat_ext/evw_data.py b/tools/splat_ext/evw_data.py new file mode 100644 index 0000000..f8f7642 --- /dev/null +++ b/tools/splat_ext/evw_data.py @@ -0,0 +1,49 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_data(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + count = len(data) // 8 + lines = [] + + if (len(data)) % 8 != 0: + log.error(f"Error: evw_data segment {self.name} length ({len(data)}) is not a multiple of 8!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"EvwAnimeData {symbol.name}[{count}] = {{") + + for evwAnimeData in struct.iter_unpack(">bxhI", data): + segment, type, dataPtr = evwAnimeData + + if dataPtr: + data_ptr_symbol = self.get_symbol(addr=dataPtr).name + else: + data_ptr_symbol = "NULL" + + lines.append(f" {{ {segment}, {type}, &{data_ptr_symbol} }},") + + if not self.data_only: + lines.append("};") + + lines.append("") + self.file_text = "\n".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/tools/splat_ext/evw_scroll.py b/tools/splat_ext/evw_scroll.py new file mode 100644 index 0000000..a92bc27 --- /dev/null +++ b/tools/splat_ext/evw_scroll.py @@ -0,0 +1,43 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_scroll(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + count = len(data) // 4 + lines = [] + + if (len(data)) % 4 != 0: + log.error(f"Error: evw_scroll segment {self.name} length ({len(data)}) is not a multiple of 4!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"EvwAnimeScroll {symbol.name}[{count}] = {{") + + for EvwAnimeScroll in struct.iter_unpack(">bbBB", data): + x, y, width, height = EvwAnimeScroll + lines.append(f" {{ {x}, {y}, {width}, {height} }},") + + if not self.data_only: + lines.append("};") + + lines.append("") + self.file_text = "\n".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/tools/splat_ext/evw_texanime.py b/tools/splat_ext/evw_texanime.py new file mode 100644 index 0000000..8782475 --- /dev/null +++ b/tools/splat_ext/evw_texanime.py @@ -0,0 +1,57 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_texanime(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + lines = [] + + if (len(data)) != 16: + log.error(f"Error: evw_texanime segment {self.name} length ({len(data)}) is not 16 bytes!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("\n") + lines.append(f"EvwAnimeTexAnime {symbol.name} = ") + + frameCount, keyframeCount, textureTable, animationPattern, keyframes = struct.unpack(">HHIII", data) + + if textureTable: + texture_table_symbol = self.get_symbol(addr=textureTable).name + else: + texture_table_symbol = "NULL" + + if animationPattern: + animation_pattern_symbol = self.get_symbol(addr=animationPattern).name + else: + animation_pattern_symbol = "NULL" + + if keyframes: + keyframes_symbol = self.get_symbol(addr=keyframes).name + else: + keyframes_symbol = "NULL" + + lines.append(f"{{ {frameCount}, {keyframeCount}, &{texture_table_symbol}, {animation_pattern_symbol}, {keyframes_symbol} }}") + + if not self.data_only: + lines.append(";") + + lines.append("\n") + self.file_text = "".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/tools/splat_ext/evw_textable.py b/tools/splat_ext/evw_textable.py new file mode 100644 index 0000000..4ceb0d0 --- /dev/null +++ b/tools/splat_ext/evw_textable.py @@ -0,0 +1,47 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegEvw_textable(CommonSegCodeSubsegment): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + + self.file_text: Optional[str] = None + self.data_only = isinstance(yaml, dict) and yaml.get("data_only", False) + + def scan(self, rom_bytes: bytes): + data = rom_bytes[self.rom_start : self.rom_end] + symbol = self.create_symbol(addr=self.vram_start, in_segment=True, type="data", define=True) + lines = [] + + if (len(data)) != 4: + log.error(f"Error: evw_textable segment {self.name} length ({len(data)}) is not 4 bytes!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("\n") + lines.append(f"void* {symbol.name} = ") + + textureTable = struct.unpack(">I", data) + + if textureTable: + texture_table_symbol = self.get_symbol(addr=textureTable[0]).name + else: + texture_table_symbol = "NULL" + + lines.append(f"{texture_table_symbol}") + + if not self.data_only: + lines.append(";") + + lines.append("\n") + self.file_text = "".join(lines) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.inc.c" + + if self.file_text and path: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="\n") as f: + f.write(self.file_text) diff --git a/yamls/jp/assets.yaml b/yamls/jp/assets.yaml index bdc2fe9..b993e7e 100644 --- a/yamls/jp/assets.yaml +++ b/yamls/jp/assets.yaml @@ -612,11 +612,11 @@ subsegments: - [0xD5E000] # padding - [0xD5E008, vtx, obj_s_yamishop/obj_s_yamishop_v] - - [0xD5E428, gfx, obj_s_yamishop/obj_s_yamishop_window_model] - - [0xD5E4B8, gfx, obj_s_yamishop/obj_s_yamishop_t1_model] - - [0xD5E5D0, gfx, obj_s_yamishop/obj_s_yamishop_light_model] - - [0xD5E690, gfx, obj_s_yamishop/obj_s_yamishop_door1_model] - - [0xD5E7D8, gfx, obj_s_yamishop/obj_s_yamishop_door2_model] + - [0xD5E428, af_gfx, obj_s_yamishop/obj_s_yamishop_window_model] + - [0xD5E4B8, af_gfx, obj_s_yamishop/obj_s_yamishop_t1_model] + - [0xD5E5D0, af_gfx, obj_s_yamishop/obj_s_yamishop_light_model] + - [0xD5E690, af_gfx, obj_s_yamishop/obj_s_yamishop_door1_model] + - [0xD5E7D8, af_gfx, obj_s_yamishop/obj_s_yamishop_door2_model] - [0xD5E8C8, af_ci4, obj_s_yamishop/obj_s_yamishop_t2_tex_txt, 128, 32, 0xD5BA48, 0x20] - [0xD5F0C8, af_ci4, obj_s_yamishop/obj_s_yamishop_t1_tex_txt, 128, 32, 0xD5BA48, 0x20] - [0xD5F8C8, af_i4, obj_s_yamishop/obj_s_yamishop_window_tex_txt, 16, 16] @@ -630,11 +630,11 @@ - [0xD5FA04, ckf_ba, obj_s_yamishop/cKF_ba_r_obj_s_yamishop] - [0xD5FA18] # padding - [0xD5FA28, vtx, obj_w_yamishop/obj_w_yamishop_v] - - [0xD5FE48, gfx, obj_w_yamishop/obj_w_yamishop_window_model] - - [0xD5FED8, gfx, obj_w_yamishop/obj_w_yamishop_t1_model] - - [0xD5FFF0, gfx, obj_w_yamishop/obj_w_yamishop_light_model] - - [0xD600B0, gfx, obj_w_yamishop/obj_w_yamishop_door1_model] - - [0xD601F8, gfx, obj_w_yamishop/obj_w_yamishop_door2_model] + - [0xD5FE48, af_gfx, obj_w_yamishop/obj_w_yamishop_window_model] + - [0xD5FED8, af_gfx, obj_w_yamishop/obj_w_yamishop_t1_model] + - [0xD5FFF0, af_gfx, obj_w_yamishop/obj_w_yamishop_light_model] + - [0xD600B0, af_gfx, obj_w_yamishop/obj_w_yamishop_door1_model] + - [0xD601F8, af_gfx, obj_w_yamishop/obj_w_yamishop_door2_model] - [0xD602E8, af_ci4, obj_w_yamishop/obj_w_yamishop_t2_tex_txt, 128, 32, 0xD5BA68, 0x20] - [0xD60AE8, af_ci4, obj_w_yamishop/obj_w_yamishop_t1_tex_txt, 128, 32, 0xD5BA68, 0x20] - [0xD612E8, af_i4, obj_w_yamishop/obj_w_yamishop_window_tex_txt, 16, 16] @@ -649,12 +649,12 @@ - [0xD61438] # padding - [0xD61448] - [0xDDB248, vtx, obj_s_toudai/obj_s_toudai_v] - - [0xDDBBD8, gfx, obj_s_toudai/obj_s_toudai_mirror_model] - - [0xDDBCA0, gfx, obj_s_toudai/obj_s_toudai_glass_model] - - [0xDDBD70, gfx, obj_s_toudai/obj_s_toudai_body_model] - - [0xDDC188, gfx, obj_s_toudai/obj_s_toudai_light_model] - - [0xDDC258, gfx, obj_s_toudai/obj_s_toudai_lenz_model] - - [0xDDC320, gfx, obj_s_toudai/obj_s_toudai_arm_model] + - [0xDDBBD8, af_gfx, obj_s_toudai/obj_s_toudai_mirror_model] + - [0xDDBCA0, af_gfx, obj_s_toudai/obj_s_toudai_glass_model] + - [0xDDBD70, af_gfx, obj_s_toudai/obj_s_toudai_body_model] + - [0xDDC188, af_gfx, obj_s_toudai/obj_s_toudai_light_model] + - [0xDDC258, af_gfx, obj_s_toudai/obj_s_toudai_lenz_model] + - [0xDDC320, af_gfx, obj_s_toudai/obj_s_toudai_arm_model] - [0xDDC3A8, af_i8, obj_s_toudai/obj_s_toudai_light_tex_txt, 16, 16] - [0xDDC4A8, af_ci4, obj_s_toudai/obj_s_toudai_arm_tex_txt, 16, 16, 0xD5C3A8, 0x20] - [0xDDC528, af_ci4, obj_s_toudai/obj_s_toudai_dai_tex_txt, 32, 32, 0xD5C3A8, 0x20] @@ -674,12 +674,12 @@ - [0xDDCE6C, ckf_ba, obj_s_toudai/cKF_ba_r_obj_s_toudai] - [0xDDCE80] # padding - [0xDDCE90, vtx, obj_w_toudai/obj_w_toudai_v] - - [0xDDD7E0, gfx, obj_w_toudai/obj_w_toudai_mirror_model] - - [0xDDD8A8, gfx, obj_w_toudai/obj_w_toudai_glass_model] - - [0xDDD978, gfx, obj_w_toudai/obj_w_toudai_body_model] - - [0xDDDD90, gfx, obj_w_toudai/obj_w_toudai_light_model] - - [0xDDDE60, gfx, obj_w_toudai/obj_w_toudai_lenz_model] - - [0xDDDF28, gfx, obj_w_toudai/obj_w_toudai_arm_model] + - [0xDDD7E0, af_gfx, obj_w_toudai/obj_w_toudai_mirror_model] + - [0xDDD8A8, af_gfx, obj_w_toudai/obj_w_toudai_glass_model] + - [0xDDD978, af_gfx, obj_w_toudai/obj_w_toudai_body_model] + - [0xDDDD90, af_gfx, obj_w_toudai/obj_w_toudai_light_model] + - [0xDDDE60, af_gfx, obj_w_toudai/obj_w_toudai_lenz_model] + - [0xDDDF28, af_gfx, obj_w_toudai/obj_w_toudai_arm_model] - [0xDDDFB0, af_i8, obj_w_toudai/obj_w_toudai_light_tex_txt, 16, 16] - [0xDDE0B0, af_ci4, obj_w_toudai/obj_w_toudai_arm_tex_txt, 16, 16, 0xD5C3C8, 0x20] - [0xDDE130, af_ci4, obj_w_toudai/obj_w_toudai_dai_tex_txt, 32, 32, 0xD5C3C8, 0x20] @@ -700,10 +700,10 @@ - [0xDDEA88] # padding - [0xDDEA98] - [0xDEC838, vtx, obj_s_windmill/obj_s_windmill_v] - - [0xDECD98, gfx, obj_s_windmill/obj_s_windmill_unk_model_1] - - [0xDECE60, gfx, obj_s_windmill/obj_s_windmill_unk_model_2] - - [0xDECF10, gfx, obj_s_windmill/obj_s_windmill_unk_model_3] - - [0xDECFE8, gfx, obj_s_windmill/obj_s_windmill_unk_model_4] + - [0xDECD98, af_gfx, obj_s_windmill/obj_s_windmill_unk_model_1] + - [0xDECE60, af_gfx, obj_s_windmill/obj_s_windmill_unk_model_2] + - [0xDECF10, af_gfx, obj_s_windmill/obj_s_windmill_unk_model_3] + - [0xDECFE8, af_gfx, obj_s_windmill/obj_s_windmill_unk_model_4] - [0xDED0D8, af_ci4, obj_s_windmill/obj_s_windmill_unk_tex_1, 128, 32, 0xD5C1E8, 0x20] - [0xDED8D8, af_ci4, obj_s_windmill/obj_s_windmill_unk_tex_2, 128, 32, 0xD5C1E8, 0x20] - [0xDEE0D8, af_ci4, obj_s_windmill/obj_s_windmill_unk_tex_3, 128, 32, 0xD5C1E8, 0x20] @@ -714,10 +714,10 @@ - [0xDEE954, ckf_bs, obj_s_windmill/cKF_bs_r_obj_s_windmill] - [0xDEE95C] # padding - [0xDEE970, vtx, obj_w_windmill/obj_w_windmill_v] - - [0xDEEEC0, gfx, obj_w_windmill/obj_w_windmill_unk_model_1] - - [0xDEEF88, gfx, obj_w_windmill/obj_w_windmill_unk_model_2] - - [0xDEF038, gfx, obj_w_windmill/obj_w_windmill_unk_model_3] - - [0xDEF110, gfx, obj_w_windmill/obj_w_windmill_unk_model_4] + - [0xDEEEC0, af_gfx, obj_w_windmill/obj_w_windmill_unk_model_1] + - [0xDEEF88, af_gfx, obj_w_windmill/obj_w_windmill_unk_model_2] + - [0xDEF038, af_gfx, obj_w_windmill/obj_w_windmill_unk_model_3] + - [0xDEF110, af_gfx, obj_w_windmill/obj_w_windmill_unk_model_4] - [0xDEF1F8, af_ci4, obj_w_windmill/obj_w_windmill_unk_tex_1, 128, 32, 0xD5C288, 0x20] - [0xDEF9F8, af_ci4, obj_w_windmill/obj_w_windmill_unk_tex_2, 128, 32, 0xD5C288, 0x20] - [0xDF01F8, af_ci4, obj_w_windmill/obj_w_windmill_unk_tex_3, 128, 32, 0xD5C288, 0x20] @@ -4271,8 +4271,8 @@ name: tol_umb_01 subsegments: - [0x1107000, vtx, tol_umb_01_v] - - [0x1107380, gfx, kasa_umb01_model] - - [0x1107448, gfx, e_umb01_model] + - [0x1107380, af_gfx, kasa_umb01_model] + - [0x1107448, af_gfx, e_umb01_model] - [0x1107508, af_palette, tol_umb_01_pal] - [0x1107528, af_ci4, tol_umb_01_kasa_tex_txt, 32, 32, 0x1107508, 0x20] - [0x1107728, af_ci4, tol_umb_01_tuka_tex_txt, 32, 32, 0x1107508, 0x20] @@ -4294,8 +4294,8 @@ name: tol_umb_02 subsegments: - [0x1108000, vtx, tol_umb_02_v] - - [0x11083E0, gfx, kasa_umb02_model] - - [0x1108508, gfx, e_umb02_model] + - [0x11083E0, af_gfx, kasa_umb02_model] + - [0x1108508, af_gfx, e_umb02_model] - [0x11085C8, af_palette, tol_umb02_pal] - [0x11085E8, af_ci4, tol_umb02_kasa2_tex_txt, 16, 64, 0x11085C8, 0x20] - [0x11087E8, af_ci4, tol_umb02_kasa1_tex_txt, 16, 64, 0x11085C8, 0x20] @@ -4318,8 +4318,8 @@ name: tol_umb_03 subsegments: - [0x1109000, vtx, tol_umb_03_v] - - [0x1109380, gfx, kasa_umb03_model] - - [0x1109450, gfx, e_umb03_model] + - [0x1109380, af_gfx, kasa_umb03_model] + - [0x1109450, af_gfx, e_umb03_model] - [0x1109510, af_palette, tol_umb_03_pal] - [0x1109530, af_ci4, tol_umb_03_kasa1_tex_txt, 32, 64, 0x1109510, 0x20] - [0x1109930, af_ci4, tol_umb_03_tuka_tex_txt, 32, 32, 0x1109510, 0x20] @@ -4341,8 +4341,8 @@ name: tol_umb_04 subsegments: - [0x110A000, vtx, tol_umb_04_v] - - [0x110A380, gfx, kasa_umb04_model] - - [0x110A4C0, gfx, e_umb04_model] + - [0x110A380, af_gfx, kasa_umb04_model] + - [0x110A4C0, af_gfx, e_umb04_model] - [0x110A580, af_palette, tol_umb_04_pal] - [0x110A5A0, af_ci4, tol_umb_04_kasa1_tex_txt, 16, 32, 0x110A580, 0x20] - [0x110A6A0, af_ci4, tol_umb_04_kasa2_tex_txt, 16, 32, 0x110A580, 0x20] @@ -4365,8 +4365,8 @@ name: tol_umb_05 subsegments: - [0x110B000, vtx, tol_umb_05_v] - - [0x110B380, gfx, kasa_umb05_model] - - [0x110B448, gfx, e_umb05_model] + - [0x110B380, af_gfx, kasa_umb05_model] + - [0x110B448, af_gfx, e_umb05_model] - [0x110B508, af_palette, tol_umb_05_pal] - [0x110B528, af_ci4, tol_umb_05_kasa_tex_txt, 32, 32, 0x110B508, 0x20] - [0x110B728, af_ci4, tol_umb_05_tuka_tex_txt, 32, 32, 0x110B508, 0x20] @@ -4388,8 +4388,8 @@ name: tol_umb_06 subsegments: - [0x110C000, vtx, tol_umb_06_v] - - [0x110C5E0, gfx, kasa_umb06_model] - - [0x110C6D0, gfx, e_umb06_model] + - [0x110C5E0, af_gfx, kasa_umb06_model] + - [0x110C6D0, af_gfx, e_umb06_model] - [0x110C790, af_palette, tol_umb_06_pal] - [0x110C7B0, af_ci4, tol_umb_06_kasa1_tex_txt, 32, 32, 0x110C790, 0x20] - [0x110C9B0, af_ci4, tol_umb_06_tuka_tex_txt, 32, 32, 0x110C790, 0x20] @@ -4411,8 +4411,8 @@ name: tol_umb_07 subsegments: - [0x110D000, vtx, tol_umb_07_v] - - [0x110D260, gfx, kasa_umb07_model] - - [0x110D380, gfx, e_umb07_model] + - [0x110D260, af_gfx, kasa_umb07_model] + - [0x110D380, af_gfx, e_umb07_model] - [0x110D440, af_palette, tol_umb07_pal] - [0x110D460, af_ci4, tol_umb07_kasa2_tex_txt, 16, 32, 0x110D440, 0x20] - [0x110D560, af_ci4, tol_umb07_kasa1_tex_txt, 32, 64, 0x110D440, 0x20] @@ -4435,8 +4435,8 @@ name: tol_umb_08 subsegments: - [0x110E000, vtx, tol_umb_08_v] - - [0x110E390, gfx, kasa_umb08_model] - - [0x110E458, gfx, e_umb08_model] + - [0x110E390, af_gfx, kasa_umb08_model] + - [0x110E458, af_gfx, e_umb08_model] - [0x110E570, af_palette, tol_umb08_pal] - [0x110E590, af_ci4, tol_umb08_kasa1_tex_txt, 32, 32, 0x110E570, 0x20] - [0x110E790, af_ci4, tol_umb08_kasa2_tex_txt, 8, 16, 0x110E570, 0x20] @@ -4460,8 +4460,8 @@ name: tol_umb_09 subsegments: - [0x110F000, vtx, tol_umb_09_v] - - [0x110F390, gfx, kasa_umb09_model] - - [0x110F458, gfx, e_umb09_model] + - [0x110F390, af_gfx, kasa_umb09_model] + - [0x110F458, af_gfx, e_umb09_model] - [0x110F570, af_palette, tol_umb09_pal] - [0x110F590, af_ci4, tol_umb09_kasa1_tex_txt, 32, 32, 0x110F570, 0x20] - [0x110F790, af_ci4, tol_umb09_kasa2_tex_txt, 8, 16, 0x110F570, 0x20] @@ -4484,8 +4484,8 @@ name: tol_umb_10 subsegments: - [0x1110000, vtx, tol_umb_10_v] - - [0x1110390, gfx, kasa_umb10_model] - - [0x1110458, gfx, e_umb10_model] + - [0x1110390, af_gfx, kasa_umb10_model] + - [0x1110458, af_gfx, e_umb10_model] - [0x1110570, af_palette, tol_umb10_pal] - [0x1110590, af_ci4, tol_umb10_kasa1_tex_txt, 16, 64, 0x1110570, 0x20] - [0x1110790, af_ci4, tol_umb10_kasa2_tex_txt, 8, 16, 0x1110570, 0x20] @@ -4508,8 +4508,8 @@ name: tol_umb_11 subsegments: - [0x1111000, vtx, tol_umb_11_v] - - [0x1111390, gfx, kasa_umb11_model] - - [0x1111458, gfx, e_umb11_model] + - [0x1111390, af_gfx, kasa_umb11_model] + - [0x1111458, af_gfx, e_umb11_model] - [0x1111570, af_palette, tol_umb11_pal] - [0x1111590, af_ci4, tol_umb11_kasa1_tex_txt, 16, 64, 0x1111570, 0x20] - [0x1111790, af_ci4, tol_umb11_kasa2_tex_txt, 8, 16, 0x1111570, 0x20] @@ -4532,8 +4532,8 @@ name: tol_umb_12 subsegments: - [0x1112000, vtx, tol_umb_12_v] - - [0x1112390, gfx, kasa_umb12_model] - - [0x1112458, gfx, e_umb12_model] + - [0x1112390, af_gfx, kasa_umb12_model] + - [0x1112458, af_gfx, e_umb12_model] - [0x1112570, af_palette, tol_umb12_pal] - [0x1112590, af_ci4, tol_umb12_kasa1_tex_txt, 32, 64, 0x1112570, 0x20] - [0x1112990, af_ci4, tol_umb12_kasa2_tex_txt, 8, 16, 0x1112570, 0x20] @@ -4556,8 +4556,8 @@ name: tol_umb_13 subsegments: - [0x1113000, vtx, tol_umb_13_v] - - [0x1113390, gfx, kasa_umb13_model] - - [0x1113458, gfx, e_umb13_model] + - [0x1113390, af_gfx, kasa_umb13_model] + - [0x1113458, af_gfx, e_umb13_model] - [0x1113570, af_palette, tol_umb13_pal] - [0x1113590, af_ci4, tol_umb13_kasa1_tex_txt, 32, 32, 0x1113570, 0x20] - [0x1113790, af_ci4, tol_umb13_kasa2_tex_txt, 8, 16, 0x1113570, 0x20] @@ -4580,8 +4580,8 @@ name: tol_umb_14 subsegments: - [0x1114000, vtx, tol_umb_14_v] - - [0x1114380, gfx, kasa_umb14_model] - - [0x1114448, gfx, e_umb14_model] + - [0x1114380, af_gfx, kasa_umb14_model] + - [0x1114448, af_gfx, e_umb14_model] - [0x1114508, af_palette, tol_umb_14_pal] - [0x1114528, af_ci4, tol_umb_14_kasa_tex_txt, 32, 32, 0x1114508, 0x20] - [0x1114728, af_ci4, tol_umb_14_tuka_tex_txt, 32, 32, 0x1114508, 0x20] @@ -4603,8 +4603,8 @@ name: tol_umb_15 subsegments: - [0x1115000, vtx, tol_umb_15_v] - - [0x11153C0, gfx, kasa_umb15_model] - - [0x11154D8, gfx, e_umb15_model] + - [0x11153C0, af_gfx, kasa_umb15_model] + - [0x11154D8, af_gfx, e_umb15_model] - [0x1115598, af_palette, tol_umb_15_pal] - [0x11155B8, af_ci4, tol_umb_15_kasa1_tex_txt, 16, 32, 0x1115598, 0x20] - [0x11156B8, af_ci4, tol_umb_15_kasa2_tex_txt, 32, 32, 0x1115598, 0x20] @@ -4627,8 +4627,8 @@ name: tol_umb_16 subsegments: - [0x1116000, vtx, tol_umb_16_v] - - [0x1116380, gfx, kasa_umb16_model] - - [0x1116448, gfx, e_umb16_model] + - [0x1116380, af_gfx, kasa_umb16_model] + - [0x1116448, af_gfx, e_umb16_model] - [0x1116508, af_palette, tol_umb_16_pal] - [0x1116528, af_ci4, tol_umb_16_kasa1_tex_txt, 32, 32, 0x1116508, 0x20] - [0x1116728, af_ci4, tol_umb_16_tuka_tex_txt, 32, 32, 0x1116508, 0x20] @@ -4650,8 +4650,8 @@ name: tol_umb_17 subsegments: - [0x1117000, vtx, tol_umb_17_v] - - [0x11174D0, gfx, kasa_umb17_model] - - [0x11175D8, gfx, e_umb17_model] + - [0x11174D0, af_gfx, kasa_umb17_model] + - [0x11175D8, af_gfx, e_umb17_model] - [0x1117680, af_palette, tol_umb_17_pal] - [0x11176A0, af_ci4, tol_umb_17_kasa_tex_txt, 32, 32, 0x1117680, 0x20] - [0x11178A0, af_ci4, tol_umb_17_tuka_tex_txt, 32, 32, 0x1117680, 0x20] @@ -4673,8 +4673,8 @@ name: tol_umb_18 subsegments: - [0x1118000, vtx, tol_umb_18_v] - - [0x1118280, gfx, kasa_umb18_model] - - [0x1118348, gfx, e_umb18_model] + - [0x1118280, af_gfx, kasa_umb18_model] + - [0x1118348, af_gfx, e_umb18_model] - [0x1118460, af_palette, tol_umb18_pal] - [0x1118480, af_ci4, tol_umb18_kasa1_tex_txt, 16, 32, 0x1118460, 0x20] - [0x1118580, af_ci4, tol_umb18_kasa2_tex_txt, 16, 16, 0x1118460, 0x20] @@ -4697,8 +4697,8 @@ name: tol_umb_19 subsegments: - [0x1119000, vtx, tol_umb_19_v] - - [0x1119400, gfx, kasa_umb19_model] - - [0x11194E0, gfx, e_umb19_model] + - [0x1119400, af_gfx, kasa_umb19_model] + - [0x11194E0, af_gfx, e_umb19_model] - [0x1119610, af_palette, tol_umb_19_pal] - [0x1119630, af_ci4, tol_umb_19_kasa_tex_txt, 32, 32, 0x1119610, 0x20] - [0x1119830, af_ci4, tol_umb_19_tuka_tex_txt, 32, 32, 0x1119610, 0x20] @@ -4721,8 +4721,8 @@ name: tol_umb_20 subsegments: - [0x111A000, vtx, tol_umb_20_v] - - [0x111A280, gfx, kasa_umb20_model] - - [0x111A338, gfx, e_umb20_model] + - [0x111A280, af_gfx, kasa_umb20_model] + - [0x111A338, af_gfx, e_umb20_model] - [0x111A408, af_palette, tol_umb_20_pal] - [0x111A428, af_ci4, tol_umb_20_kasa_tex_txt, 32, 64, 0x111A408, 0x20] - [0x111A828, af_ci4, tol_umb_20_e_tex_txt, 16, 16, 0x111A408, 0x20] @@ -4744,8 +4744,8 @@ name: tol_umb_21 subsegments: - [0x111B000, vtx, tol_umb_21_v] - - [0x111B380, gfx, kasa_umb21_model] - - [0x111B468, gfx, e_umb21_model] + - [0x111B380, af_gfx, kasa_umb21_model] + - [0x111B468, af_gfx, e_umb21_model] - [0x111B520, af_palette, tol_umb_21_pal] - [0x111B540, af_ci4, tol_umb_21_kasa_tex_txt, 64, 32, 0x111B520, 0x20] - [0x111B940, af_ci4, tol_umb_21_tuka_tex_txt, 32, 32, 0x111B520, 0x20] @@ -4767,8 +4767,8 @@ name: tol_umb_22 subsegments: - [0x111C000, vtx, tol_umb_22_v] - - [0x111C480, gfx, kasa_umb22_model] - - [0x111C580, gfx, e_umb22_model] + - [0x111C480, af_gfx, kasa_umb22_model] + - [0x111C580, af_gfx, e_umb22_model] - [0x111C620, af_palette, tol_umb_22_pal] - [0x111C640, af_ci4, tol_umb_22_kasa_tex_txt, 32, 32, 0x111C620, 0x20] - [0x111C840, af_ci4, tol_umb_22_e_tex_txt, 16, 32, 0x111C620, 0x20] @@ -4790,8 +4790,8 @@ name: tol_umb_23 subsegments: - [0x111D000, vtx, tol_umb_23_v] - - [0x111D360, gfx, kasa_umb23_model] - - [0x111D428, gfx, e_umb23_model] + - [0x111D360, af_gfx, kasa_umb23_model] + - [0x111D428, af_gfx, e_umb23_model] - [0x111D528, af_palette, tol_umb_23_pal] - [0x111D548, af_ci4, tol_umb_23_kasa_tex_txt, 32, 64, 0x111D528, 0x20] - [0x111D948, af_ci4, tol_umb_23_tuka_tex_txt, 32, 32, 0x111D528, 0x20] @@ -4814,8 +4814,8 @@ name: tol_umb_24 subsegments: - [0x111E000, vtx, tol_umb_24_v] - - [0x111E3C0, gfx, kasa_umb24_model] - - [0x111E4D8, gfx, e_umb24_model] + - [0x111E3C0, af_gfx, kasa_umb24_model] + - [0x111E4D8, af_gfx, e_umb24_model] - [0x111E598, af_palette, tol_umb_24_pal] - [0x111E5B8, af_ci4, tol_umb_24_kasa1_tex_txt, 16, 32, 0x111E598, 0x20] - [0x111E6B8, af_ci4, tol_umb_24_kasa2_tex_txt, 16, 32, 0x111E598, 0x20] @@ -4838,8 +4838,8 @@ name: tol_umb_25 subsegments: - [0x111F000, vtx, tol_umb_25_v] - - [0x111F350, gfx, kasa_umb25_model] - - [0x111F470, gfx, e_umb25_model] + - [0x111F350, af_gfx, kasa_umb25_model] + - [0x111F470, af_gfx, e_umb25_model] - [0x111F510, af_palette, tol_umb_25_pal] - [0x111F530, af_ci4, tol_umb_25_kasa_tex_txt, 32, 32, 0x111F510, 0x20] - [0x111F730, af_ci4, tol_umb_25_ya_tex_txt, 16, 64, 0x111F510, 0x20] @@ -4861,8 +4861,8 @@ name: tol_umb_26 subsegments: - [0x1120000, vtx, tol_umb_26_v] - - [0x11203C0, gfx, kasa_umb26_model] - - [0x11204D0, gfx, e_umb26_model] + - [0x11203C0, af_gfx, kasa_umb26_model] + - [0x11204D0, af_gfx, e_umb26_model] - [0x1120590, af_palette, tol_umb_26_pal] - [0x11205B0, af_ci4, tol_umb_26_kasa1_tex_txt, 16, 32, 0x1120590, 0x20] - [0x11206B0, af_ci4, tol_umb_26_kasa2_tex_txt, 16, 32, 0x1120590, 0x20] @@ -4885,8 +4885,8 @@ name: tol_umb_27 subsegments: - [0x1121000, vtx, tol_umb_27_v] - - [0x11214B0, gfx, kasa_umb27_model] - - [0x11215F8, gfx, e_umb27_model] + - [0x11214B0, af_gfx, kasa_umb27_model] + - [0x11215F8, af_gfx, e_umb27_model] - [0x1121698, af_palette, tol_umb_27_pal] - [0x11216B8, af_ci4, tol_umb_27_kasa1_tex_txt, 32, 32, 0x1121698, 0x20] - [0x11218B8, af_ci4, tol_umb_27_kasa2_tex_txt, 32, 32, 0x1121698, 0x20] @@ -4909,8 +4909,8 @@ name: tol_umb_28 subsegments: - [0x1122000, vtx, tol_umb_28_v] - - [0x1122360, gfx, kasa_umb28_model] - - [0x1122428, gfx, e_umb28_model] + - [0x1122360, af_gfx, kasa_umb28_model] + - [0x1122428, af_gfx, e_umb28_model] - [0x11224E0, af_palette, tol_umb_28_pal] - [0x1122500, af_ci4, tol_umb_28_kasa_tex_txt, 32, 32, 0x11224E0, 0x20] - [0x1122700, af_ci4, tol_umb_28_tuka_tex_txt, 32, 32, 0x11224E0, 0x20] @@ -4932,8 +4932,8 @@ name: tol_umb_29 subsegments: - [0x1123000, vtx, tol_umb_29_v] - - [0x1123380, gfx, kasa_umb29_model] - - [0x1123448, gfx, e_umb29_model] + - [0x1123380, af_gfx, kasa_umb29_model] + - [0x1123448, af_gfx, e_umb29_model] - [0x1123508, af_palette, tol_umb_29_pal] - [0x1123528, af_ci4, tol_umb_29_kasa1_tex_txt, 32, 32, 0x1123508, 0x20] - [0x1123728, af_ci4, tol_umb_29_tuka_tex_txt, 32, 32, 0x1123508, 0x20] @@ -4955,8 +4955,8 @@ name: tol_umb_30 subsegments: - [0x1124000, vtx, tol_umb_30_v] - - [0x1124380, gfx, kasa_umb30_model] - - [0x1124450, gfx, e_umb30_model] + - [0x1124380, af_gfx, kasa_umb30_model] + - [0x1124450, af_gfx, e_umb30_model] - [0x1124510, af_palette, obj_shop_umb_30_pal] - [0x1124530, af_ci4, tol_umb_30_kasa1_tex_txt, 32, 32, 0x1124510, 0x20] - [0x1124730, af_ci4, tol_umb_30_tuka_tex_txt, 32, 32, 0x1124510, 0x20] @@ -4978,8 +4978,8 @@ name: tol_umb_31 subsegments: - [0x1125000, vtx, tol_umb_31_v] - - [0x1125360, gfx, kasa_umb31_model] - - [0x1125428, gfx, e_umb31_model] + - [0x1125360, af_gfx, kasa_umb31_model] + - [0x1125428, af_gfx, e_umb31_model] - [0x1125528, af_palette, tol_umb_31_pal] - [0x1125548, af_ci4, tol_umb_31_kasa_tex_txt, 32, 32, 0x1125528, 0x20] - [0x1125748, af_ci4, tol_umb_31_tuka_tex_txt, 32, 32, 0x1125528, 0x20] @@ -5002,22 +5002,61 @@ name: tol_umb_32 subsegments: - [0x1126000, vtx, tol_umb_32_v] - - [0x1126380, gfx, kasa_umb32_model] - - [0x1126448, gfx, e_umb32_model] + - [0x1126380, af_gfx, kasa_umb32_model] + - [0x1126448, af_gfx, e_umb32_model] - [0x1126508, af_palette, obj_shop_umb_32_pal] - [0x1126528, af_ci4, obj_shop_umb_32_kasa1_tex_txt, 32, 32, 0x1126508, 0x20] - [0x1126728, af_ci4, obj_shop_umb_32_tuka1_tex_txt, 32, 32, 0x1126508, 0x20] - [0x1126930] - - name: object_01127000 - type: bin # code + - name: tol_keitai_1 + dir: objects/tol_keitai_1 + type: code start: 0x1127000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x1127000, data, assets/objects/object_01127000/object_01127000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, keitai_off1] + - start: 0x1127000 + type: .data + name: keitai_off1 + subsegments: + - [0x1127000, ckf_ckcb, cKF_ckcb_r_tol_keitai_1_keitai_off1_tbl] + - [0x1127004, ckf_kn, cKF_kn_tol_keitai_1_keitai_off1_tbl] + - [0x1127018, ckf_c, cKF_c_tol_keitai_1_keitai_off1_tbl] + - [0x1127020, ckf_ds, cKF_ds_tol_keitai_1_keitai_off1_tbl] + - [0x11270A4, ckf_ba, cKF_ba_r_tol_keitai_1_keitai_off1] + - [0x11270B8] + - [auto, c, keitai_on1] + - start: 0x11270C0 + type: .data + name: keitai_on1 + subsegments: + - [0x11270C0, ckf_ckcb, cKF_ckcb_r_tol_keitai_1_keitai_on1_tbl] + - [0x11270C4, ckf_kn, cKF_kn_tol_keitai_1_keitai_on1_tbl] + - [0x11270C8, ckf_c, cKF_c_tol_keitai_1_keitai_on1_tbl] + - [0x11270E0, ckf_ds, cKF_ds_tol_keitai_1_keitai_on1_tbl] + - [0x1127134, ckf_ba, cKF_ba_r_tol_keitai_1_keitai_on1] + - [0x1127148] + - [auto, c, tol_keitai_1] + - start: 0x1127150 + type: .data + name: tol_keitai_1 + subsegments: + - [0x1127150, vtx, tol_keitai_1_v] + - [0x1127320, af_gfx, main1_keitai1_model] + - [0x1127480, af_gfx, main2_keitai1_model] + - [0x11275E8, af_palette, tol_keitai_1_pal] + - [0x1127608, af_ci4, tol_keitai_1_ueura1_tex_txt, 16, 32, 0x11275E8, 0x20] + - [0x1127708, af_ci4, tol_keitai_1_ueomote1_tex_txt, 16, 32, 0x11275E8, 0x20] + - [0x1127808, af_ci4, tol_keitai_1_shitaura1_tex_txt, 16, 32, 0x11275E8, 0x20] + - [0x1127908, af_ci4, tol_keitai_1_shitaomote1_tex_txt, 16, 32, 0x11275E8, 0x20] + - [0x1127A08, ckf_je, cKF_je_r_tol_keitai_1_tbl] + - [0x1127A2C, ckf_bs, cKF_bs_r_tol_keitai_1] + - [0x1127A34] - [0x1127A40] - name: tol_utiwa_1 @@ -5036,7 +5075,7 @@ name: tol_utiwa_1 subsegments: - [0x1128000, vtx, tol_utiwa_1_v] - - [0x1128080, gfx, main_utiwa1_model] + - [0x1128080, af_gfx, main_utiwa1_model] - [0x1128188, af_palette, tol_utiwa1_pal] - [0x11281A8, af_ci4, tol_utiwa_1_main1_tex_txt, 32, 32, 0x1128188, 0x20] - [0x11283A8, af_ci4, tol_utiwa_1_main2_tex_txt, 32, 32, 0x1128188, 0x20] @@ -5053,48 +5092,104 @@ # - [0x1129000, data, assets/objects/object_01129000/object_01129000] - [0x1129A80] - - name: object_0112A000 - type: bin # code + - name: tol_npcsao_1 + dir: objects/tol_npcsao_1 + type: code start: 0x112A000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x112A000, data, assets/objects/object_0112A000/object_0112A000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, tol_npcsao_1] + - start: 0x112A000 + type: .data + name: tol_npcsao_1 + subsegments: + - [0x112A000, vtx, tol_npcsao_1_v] + - [0x112A470, af_gfx, tol_npcsao_1_sao_model] + - [0x112A548, af_gfx, tol_npcsao_1_uki_model] + - [0x112A5D8, af_palette, tol_npcsao_1_pal] + - [0x112A5F8, af_ci4, tol_npcsao_1_tex, 64, 16, 0x112A5D8, 0x20] - [0x112A800] - - name: object_0112B000 - type: bin # code + - name: tol_kamicup + dir: objects/tol_kamicup + type: code start: 0x112B000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x112B000, data, assets/objects/object_0112B000/object_0112B000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, tol_kamicup] + - start: 0x112B000 + type: .data + name: tol_kamicup + subsegments: + - [0x112B000, vtx, tol_kamicup_1_v] + - [0x112B330, af_gfx, tol_kamicup_1T_model] + - [0x112B450, af_palette, tol_kamicup_pal] + - [0x112B470, af_ci4, tol_kamicup_tex, 32, 32, 0x112B450, 0x20] - [0x112B670] - - name: object_0112C000 - type: bin # code + - name: tol_kenjyu_1 + dir: objects/tol_kenjyu_1 + type: code start: 0x112C000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x112C000, data, assets/objects/object_0112C000/object_0112C000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, tol_kenjyu_1] + - start: 0x112C000 + type: .data + name: tol_kenjyu_1 + subsegments: + - [0x112C000, vtx, tol_kenjyu_1_v] + - [0x112C410, af_gfx, tol_kenjyu_1T_model] + - [0x112C528, af_palette, tol_kenjyu_1_pal] + - [0x112C548, af_ci4, tol_kenjyu_1_tex, 32, 32, 0x112C528, 0x20] - [0x112C750] - - name: object_0112D000 - type: bin # code + - name: tol_tamaire + dir: objects/tol_tamaire + type: code start: 0x112D000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x112D000, data, assets/objects/object_0112D000/object_0112D000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, ef_tamaire01] + - start: 0x112D000 + type: .data + name: ef_tamaire01 + subsegments: + - [0x112D000, vtx, ef_tamaire01_r_v] + - [0x112D040, af_gfx, tama01_model] + - [0x112D0C8, af_palette, ef_tamaire01_r_pal] + - [0x112D0E8, af_ci4, tama01_r_tex, 32, 32, 0x112D0C8, 0x20] + - [0x112D2E8, af_ci4, tama01_w_tex, 32, 32, 0x112D0C8, 0x20] + - [auto, c, tol_tamaire] + - start: 0x112D4F0 + type: .data + name: tol_tamaire + subsegments: + - [0x112D4F0, vtx, tol_tamaire_v] + - [0x112D530, af_gfx, tol_tamaire_model] + - [0x112D5B8, af_palette, tol_tamaire_pal] + - [0x112D5D8, af_ci4, tol_tamaire_r1_tex, 32, 32, 0x112D5B8, 0x20] + - [0x112D7D8, af_ci4, tol_tamaire_r2_tex, 32, 32, 0x112D5B8, 0x20] + - [0x112D9D8, af_ci4, tol_tamaire_r3_tex, 32, 32, 0x112D5B8, 0x20] + - [0x112DBD8, af_ci4, tol_tamaire_w1_tex, 32, 32, 0x112D5B8, 0x20] + - [0x112DDD8, af_ci4, tol_tamaire_w2_tex, 32, 32, 0x112D5B8, 0x20] + - [0x112DFD8, af_ci4, tol_tamaire_w3_tex, 32, 32, 0x112D5B8, 0x20] - [0x112E1E0] - name: tol_cracker_1 @@ -5113,20 +5208,43 @@ name: tol_cracker_1 subsegments: - [0x112F000, vtx, tol_cracker_1_v] - - [0x112F1C0, gfx, tol_cracker_1T_model] + - [0x112F1C0, af_gfx, tol_cracker_1T_model] - [0x112F280, af_palette, tol_cracker_1_pal] - [0x112F2A0, af_ci4, tol_cracker_1_tex, 64, 16, 0x112F280, 0x20] - [0x112F4A0] - - name: object_01130000 - type: bin # code + - name: tol_hata_01 + dir: objects/tol_hata_01 + type: code start: 0x1130000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x1130000, data, assets/objects/object_01130000/object_01130000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, tol_hata_01] + - start: 0x1130000 + type: .data + name: tol_hata_01 + subsegments: + - [0x1130000, vtx, tol_hata_01_v] + - [0x11300F0, af_gfx, tol_hata_e_model] + - [0x11301A0, af_gfx, tol_hata_hataT_model] + - [0x1130228, af_palette, tol_hata_e_pal] + - [0x1130248, af_ci4, tol_hata_e_tex, 16, 16, 0x1130228, 0x20] + - [0x11302C8, af_ia8, tol_hata_hata_tex_inta_ia8, 16, 16] + - [0x11303C8] + - [auto, c, tol_hata_01_evw_anime] + - start: 0x11303C8 + type: .data + name: tol_hata_01_evw_anime + subsegments: + - [0x11303D0, evw_textable, tol_hata_01_evw_anime_1_tex_table] + - [0x11303D4, evw_animeptn, tol_hata_01_evw_anime_1_anime_ptn] + - [0x11303D8, evw_texanime, tol_hata_01_evw_anime_1] + - [0x11303E8, evw_scroll, tol_hata_01_evw_anime_2] + - [0x11303F0, evw_data, tol_hata_01_evw_anime] - [0x1130400] - name: object_01131000 |
