diff options
| author | emilybrooks <emilybrooksemilybrooks@gmail.com> | 2024-01-08 13:00:03 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-08 13:00:03 -0700 |
| commit | 93fa8a0e9eab5c519113ee0f23ce1961c278195f (patch) | |
| tree | 42e5e8981b04384ac829fa96c78d8156b5544e5c | |
| parent | 093b8b7b9b20150a2eb6d2a8ab887f9387298fee (diff) | |
Implement asset extraction (#131)
* got stuff to extract properly
* je and bs extensions done
* got symbols named correctly
* extensions done, symbol naming done
* fixed some errors
* fixed more of them
* stuff
* started editing make file
* makefile works
* ci4 and palette extensions done
* cleaned up ckf_je extension
* fixed vertex problem
* cleaned up asset yaml
* cleaned up extensions
* added tol_cracker_1
* builds properly
* finished obj_s_yamishop and obj_w_yamishop
* updated to work with latest splat
* fixes
* makefile asset dir
* remove old codes from af_ci4.py
30 files changed, 995 insertions, 47 deletions
@@ -111,9 +111,10 @@ ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp --convert-statics=globa SPLAT ?= python3 -m splat split SPLAT_YAML ?= $(TARGET).$(VERSION).yaml +PIGMENT ?=tools/pigment64/pigment64 -IINC := -Iinclude -Isrc -Ibin/$(VERSION) -I. +IINC := -Iinclude -Isrc -Iassets/$(VERSION) -I. -I$(BUILD_DIR) IINC += -Ilib/ultralib/include -Ilib/ultralib/include/PR -Ilib/ultralib/include/ido ifeq ($(KEEP_MDEBUG),0) @@ -181,19 +182,23 @@ endif #### Files #### -$(shell mkdir -p asm/$(VERSION) bin linker_scripts/$(VERSION)/auto) +$(shell mkdir -p asm/$(VERSION) assets/$(VERSION) linker_scripts/$(VERSION)/auto) SRC_DIRS := $(shell find src -type d) ASM_DIRS := $(shell find asm/$(VERSION) -type d -not -path "asm/$(VERSION)/nonmatchings/*" -not -path "asm/$(VERSION)/lib/*") -BIN_DIRS := $(shell find bin -type d) +ASSET_DIRS := $(shell find assets/$(VERSION) -type d) C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) S_FILES := $(foreach dir,$(ASM_DIRS) $(SRC_DIRS),$(wildcard $(dir)/*.s)) -BIN_FILES := $(foreach dir,$(BIN_DIRS),$(wildcard $(dir)/*.bin)) +BIN_FILES := $(foreach dir,$(ASSET_DIRS),$(wildcard $(dir)/*.bin)) O_FILES := $(foreach f,$(C_FILES:.c=.o),$(BUILD_DIR)/$f) \ $(foreach f,$(S_FILES:.s=.o),$(BUILD_DIR)/$f) \ $(foreach f,$(BIN_FILES:.bin=.o),$(BUILD_DIR)/$f) +ASSET_PNGS := $(foreach dir,$(ASSET_DIRS),$(wildcard $(dir)/*.png)) +ASSET_BINS := $(foreach f,$(ASSET_PNGS:.png=.bin),$(BUILD_DIR)/$f) +ASSET_INC_C := $(foreach f,$(ASSET_PNGS:.png=.inc.c),$(BUILD_DIR)/$f) + LIBULTRA_DIRS := $(shell find lib/ultralib/src -type d \ -not -path "lib/ultralib/src/audio" \ -not -path "lib/ultralib/src/error" \ @@ -217,7 +222,7 @@ DEP_FILES := $(O_FILES:.o=.d) \ $(O_FILES:.o=.asmproc.d) # create build directories -$(shell mkdir -p $(BUILD_DIR)/linker_scripts/$(VERSION) $(BUILD_DIR)/linker_scripts/$(VERSION)/auto $(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(BIN_DIRS),$(BUILD_DIR)/$(dir))) +$(shell mkdir -p $(BUILD_DIR)/linker_scripts/$(VERSION) $(BUILD_DIR)/linker_scripts/$(VERSION)/auto $(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(ASSET_DIRS),$(BUILD_DIR)/$(dir))) # directory flags @@ -253,13 +258,13 @@ ifneq ($(COMPARE),0) endif clean: - $(RM) -r $(BUILD_DIR)/asm $(BUILD_DIR)/bin $(BUILD_DIR)/src $(ROM) $(ROMC) $(ELF) + $(RM) -r $(BUILD_DIR)/asm $(BUILD_DIR)/assets $(BUILD_DIR)/src $(ROM) $(ROMC) $(ELF) libclean: $(MAKE) -C lib clean distclean: clean - $(RM) -r $(BUILD_DIR) asm/ bin/ .splat/ + $(RM) -r $(BUILD_DIR) asm/ assets/ .splat/ $(RM) -r linker_scripts/$(VERSION)/auto $(LD_SCRIPT) $(MAKE) -C tools distclean $(MAKE) -C lib distclean @@ -269,7 +274,7 @@ setup: python3 tools/decompress_baserom.py extract: - $(RM) -r asm/$(VERSION) bin/$(VERSION) + $(RM) -r asm/$(VERSION) assets/$(VERSION) $(CAT) yamls/$(VERSION)/header.yaml yamls/$(VERSION)/makerom.yaml yamls/$(VERSION)/boot.yaml yamls/$(VERSION)/code.yaml yamls/$(VERSION)/overlays.yaml yamls/$(VERSION)/assets.yaml > $(SPLAT_YAML) $(SPLAT) $(SPLAT_FLAGS) $(SPLAT_YAML) @@ -332,6 +337,21 @@ ifneq ($(PERMUTER), 1) $(error Library files has not been built, please run `$(MAKE) lib` first) endif +# Build C files from assets +$(BUILD_DIR)/%.bin: %.png +# file names are formatted as <file name>.<image format>.png +# The <image format> part is passed into pigment's format argument + $(PIGMENT) to-bin -f $(subst .,,$(suffix $*)) -o $@ $< + +%.inc.c: %.bin +# The C name argument uses just the <file name> part, with .<image format>.bin removed + python3 tools/bin_inc_c.py $< $@ $(basename $(basename $(notdir $<))) + +# Add these as a dependency for .o files +asset_files: $(ASSET_INC_C) +$(O_FILES): | asset_files +.PHONY: asset_files + -include $(DEP_FILES) # Print target for debugging diff --git a/include/c_keyframe.h b/include/c_keyframe.h index 7226579..de8c792 100644 --- a/include/c_keyframe.h +++ b/include/c_keyframe.h @@ -12,7 +12,7 @@ typedef enum AnimationMode { /* 1 */ ANIMATION_REPEAT } AnimationMode; -typedef struct { +typedef struct FrameControl { /* 0x00 */ f32 start; /* 0x04 */ f32 end; /* 0x08 */ f32 duration; @@ -21,27 +21,27 @@ typedef struct { /* 0x14 */ AnimationMode mode; } FrameControl; // size = 0x18 -typedef struct { +typedef struct JointElemR { /* 0x0 */ Gfx* shape; /* 0x4 */ u8 numberOfChildren; /* 0x5 */ u8 displayBufferFlag; /* 0x6 */ s_xyz translation; } JointElemR; // size = 0xC -typedef struct { +typedef struct BaseSkeletonR { /* 0x00 */ u8 numberOfJoints; /* 0x01 */ u8 unk01; /* 0x04 */ JointElemR* jointElemTable; } BaseSkeletonR; // size = 0x8 // original name unknown -typedef struct { +typedef struct Keyframe { /* 0x00 */ s16 frame; /* 0x02 */ s16 value; /* 0x04 */ s16 velocity; } Keyframe; // size = 0x06 -typedef struct { +typedef struct BaseAnimationR { /* 0x00 */ u8* constKeyCheckBitTable; /* 0x04 */ Keyframe* dataSource; /* 0x08 */ s16* keyframeNumber; @@ -50,7 +50,7 @@ typedef struct { /* 0x12 */ s16 duration; } BaseAnimationR; // size = 0x14 -typedef struct { +typedef struct AnimationMove { /* 0x00 */ s32 transformationFlag; /* 0x04 */ xyz_t baseWorldPosition; /* 0x10 */ s16 baseAngleY; @@ -62,7 +62,7 @@ typedef struct { /* 0x3C */ s16 shapeAngleCorrection; } AnimationMove; // size = 0x40 -typedef struct { +typedef struct SkeletonInfoR { /* 0x00 */ FrameControl frameControl; /* 0x18 */ BaseSkeletonR* skeleton; /* 0x1C */ BaseAnimationR* animation; @@ -73,7 +73,7 @@ typedef struct { /* 0x30 */ AnimationMove animationMove; } SkeletonInfoR; // size = 0x70 -typedef struct { +typedef struct SkeletonInfoRCombineWork { /* 0x00 */ SkeletonInfoR* skeletonInfo; /* 0x04 */ u8* constKeyCheckBitTable; /* 0x08 */ s16* constValueTable; diff --git a/include/tables/dmatables/dmadata_table_jp.h b/include/tables/dmatables/dmadata_table_jp.h index 76aa51a..9982902 100644 --- a/include/tables/dmatables/dmadata_table_jp.h +++ b/include/tables/dmatables/dmadata_table_jp.h @@ -2269,13 +2269,13 @@ DEFINE_DMA_ENTRY(object_01124000, "object_01124000") DEFINE_DMA_ENTRY(object_01125000, "object_01125000") DEFINE_DMA_ENTRY(object_01126000, "object_01126000") DEFINE_DMA_ENTRY(object_01127000, "object_01127000") -DEFINE_DMA_ENTRY(object_01128000, "object_01128000") +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(object_0112F000, "object_0112F000") +DEFINE_DMA_ENTRY(tol_cracker_1, "tol_cracker_1") DEFINE_DMA_ENTRY(object_01130000, "object_01130000") DEFINE_DMA_ENTRY(object_01131000, "object_01131000") DEFINE_DMA_ENTRY(object_01134000, "object_01134000") diff --git a/include/tables/object_table.h b/include/tables/object_table.h index fbb3764..ba183da 100644 --- a/include/tables/object_table.h +++ b/include/tables/object_table.h @@ -63,7 +63,7 @@ /* 0x032 */ DEFINE_OBJECT(object_0100B000, OBJECT_50) /* 0x033 */ DEFINE_OBJECT(object_00D29000, OBJECT_51) /* 0x034 */ DEFINE_OBJECT(object_00B8F000, OBJECT_52) -/* 0x035 */ DEFINE_OBJECT(object_01128000, OBJECT_53) +/* 0x035 */ DEFINE_OBJECT(tol_utiwa_1, OBJECT_TOL_UTIWA_1) /* 0x036 */ DEFINE_OBJECT(object_01888000, OBJECT_54) /* 0x037 */ DEFINE_OBJECT(object_01116000, OBJECT_55) /* 0x038 */ DEFINE_OBJECT(object_01117000, OBJECT_56) @@ -405,7 +405,7 @@ /* 0x188 */ DEFINE_OBJECT(object_011F4000, OBJECT_392) /* 0x189 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_393) /* 0x18A */ DEFINE_OBJECT(object_01106000, OBJECT_394) -/* 0x18B */ DEFINE_OBJECT(object_0112F000, OBJECT_395) +/* 0x18B */ DEFINE_OBJECT(tol_cracker_1, OBJECT_TOL_CRACKER_1) /* 0x18C */ DEFINE_OBJECT(object_00F45000, OBJECT_396) /* 0x18D */ DEFINE_OBJECT(object_00F48000, OBJECT_397) /* 0x18E */ DEFINE_OBJECT(object_00FD6000, OBJECT_398) diff --git a/linker_scripts/jp/ignored_addresses.txt b/linker_scripts/jp/ignored_addresses.txt index 50e6352..dd8280f 100644 --- a/linker_scripts/jp/ignored_addresses.txt +++ b/linker_scripts/jp/ignored_addresses.txt @@ -31,3 +31,10 @@ D_E4D10 = 0xE4D10; // ignore:true D_13D9A0 = 0x13D9A0; // ignore:true D_675720 = 0x675720; // ignore:true D_73F4D0 = 0x73F4D0; // ignore:true + +__osBbIsBb = 0x80000388; // ignore:true + +D_6000000 = 0x06000000; // ignore:true +D_6000040 = 0x06000040; // ignore:true +D_60003E8 = 0x060003E8; // ignore:true +D_6001B68 = 0x06001B68; // ignore:true diff --git a/linker_scripts/jp/symbol_addrs_assets.txt b/linker_scripts/jp/symbol_addrs_assets.txt new file mode 100644 index 0000000..b275dce --- /dev/null +++ b/linker_scripts/jp/symbol_addrs_assets.txt @@ -0,0 +1,139 @@ +obj_s_house1_a_pal = 0x06000008; // segment:object_00D5B000 rom:0xD5B008 +obj_s_house1_b_pal = 0x06000028; // segment:object_00D5B000 rom:0xD5B028 +obj_s_yamishop_pal = 0x06000A48; // segment:object_00D5B000 rom:0xD5BA48 +obj_w_yamishop_pal = 0x06000A68; // segment:object_00D5B000 rom:0xD5BA68 +obj_s_windmill_a_pal = 0x060011E8; // segment:object_00D5B000 rom:0xD5C1E8 +obj_s_windmill_b_pal = 0x06001208; // segment:object_00D5B000 rom:0xD5C208 +obj_s_windmill_c_pal = 0x06001228; // segment:object_00D5B000 rom:0xD5C228 +obj_s_windmill_d_pal = 0x06001248; // segment:object_00D5B000 rom:0xD5C248 +obj_s_windmill_e_pal = 0x06001268; // segment:object_00D5B000 rom:0xD5C268 +obj_w_windmill_a_pal = 0x06001288; // segment:object_00D5B000 rom:0xD5C288 +obj_w_windmill_b_pal = 0x060012A8; // segment:object_00D5B000 rom:0xD5C2A8 +obj_w_windmill_c_pal = 0x060012C8; // segment:object_00D5B000 rom:0xD5C2C8 +obj_w_windmill_d_pal = 0x060012E8; // segment:object_00D5B000 rom:0xD5C2E8 +obj_w_windmill_e_pal = 0x06001308; // segment:object_00D5B000 rom:0xD5C308 +obj_s_toudai_pal = 0x060013A8; // segment:object_00D5B000 rom:0xD5C3A8 +obj_w_toudai_pal = 0x060013C8; // segment:object_00D5B000 rom:0xD5C3C8 + +obj_s_yamishop_v = 0x06000008; // segment:object_00D5E000 rom:0xD5E008 size:0x420 +obj_s_yamishop_window_model = 0x06000428; // segment:object_00D5E000 rom:0xD5E428 +obj_s_yamishop_t1_model = 0x060004B8; // segment:object_00D5E000 rom:0xD5E4B8 +obj_s_yamishop_light_model = 0x060005D0; // segment:object_00D5E000 rom:0xD5E5D0 +obj_s_yamishop_door1_model = 0x06000690; // segment:object_00D5E000 rom:0xD5E690 +obj_s_yamishop_door2_model = 0x060007D8; // segment:object_00D5E000 rom:0xD5E7D8 +obj_s_yamishop_t2_tex_txt = 0x060008C8; // segment:object_00D5E000 rom:0xD5E8C8 +obj_s_yamishop_t1_tex_txt = 0x060010C8; // segment:object_00D5E000 rom:0xD5F0C8 +obj_s_yamishop_window_tex_txt = 0x060018C8; // segment:object_00D5E000 rom:0xD5F8C8 +cKF_je_r_obj_s_yamishop_tbl = 0x06001948; // segment:object_00D5E000 rom:0xD5F948 +cKF_bs_r_obj_s_yamishop = 0x06001990; // segment:object_00D5E000 rom:0xD5F990 +cKF_ckcb_r_obj_s_yamishop_tbl = 0x06001998; // segment:object_00D5E000 rom:0xD5F998 +cKF_kn_obj_s_yamishop_tbl = 0x060019A0; // segment:object_00D5E000 rom:0xD5F9A0 +cKF_c_obj_s_yamishop_tbl = 0x060019A4; // segment:object_00D5E000 rom:0xD5F9A4 +cKF_ds_obj_s_yamishop_tbl = 0x060019CC; // segment:object_00D5E000 rom:0xD5F9CC +cKF_ba_r_obj_s_yamishop = 0x06001A04; // segment:object_00D5E000 rom:0xD5FA04 + +obj_w_yamishop_v = 0x06001A28; // segment:object_00D5E000 rom:0xD5E008 size:0x420 +obj_w_yamishop_window_model = 0x06001E48; // segment:object_00D5E000 rom:0xD5FE48 +obj_w_yamishop_t1_model = 0x06001ED8; // segment:object_00D5E000 rom:0xD5FED8 +obj_w_yamishop_light_model = 0x06001FF0; // segment:object_00D5E000 rom:0xD5FFF0 +obj_w_yamishop_door1_model = 0x060020B0; // segment:object_00D5E000 rom:0xD600B0 +obj_w_yamishop_door2_model = 0x060021F8; // segment:object_00D5E000 rom:0xD601F8 +obj_w_yamishop_t2_tex_txt = 0x060022E8; // segment:object_00D5E000 rom:0xD602E8 +obj_w_yamishop_t1_tex_txt = 0x06002AE8; // segment:object_00D5E000 rom:0xD60AE8 +obj_w_yamishop_window_tex_txt = 0x060032E8; // segment:object_00D5E000 rom:0xD612E8 +cKF_je_r_obj_w_yamishop_tbl = 0x06003368; // segment:object_00D5E000 rom:0xD61368 +cKF_bs_r_obj_w_yamishop = 0x060033B0; // segment:object_00D5E000 rom:0xD613B0 +cKF_ckcb_r_obj_w_yamishop_tbl = 0x060033B8; // segment:object_00D5E000 rom:0xD613B8 +cKF_kn_obj_w_yamishop_tbl = 0x060033C0; // segment:object_00D5E000 rom:0xD613C0 +cKF_c_obj_w_yamishop_tbl = 0x060033C4; // segment:object_00D5E000 rom:0xD613C4 +cKF_ds_obj_w_yamishop_tbl = 0x060033EC; // segment:object_00D5E000 rom:0xD613EC +cKF_ba_r_obj_w_yamishop = 0x06003424; // segment:object_00D5E000 rom:0xD61424 + +obj_s_toudai_v = 0x0607D248; // segment:object_00D5E000 rom:0xDDB248 size:0x990 +obj_s_toudai_mirror_model = 0x0607DBD8; // segment:object_00D5E000 rom:0xDDBBD8 +obj_s_toudai_glass_model = 0x0607DCA0; // segment:object_00D5E000 rom:0xDDBCA0 +obj_s_toudai_body_model = 0x0607DD70; // segment:object_00D5E000 rom:0xDDBD70 +obj_s_toudai_light_model = 0x0607E188; // segment:object_00D5E000 rom:0xDDC188 +obj_s_toudai_lenz_model = 0x0607E258; // segment:object_00D5E000 rom:0xDDC258 +obj_s_toudai_arm_model = 0x0607E320; // segment:object_00D5E000 rom:0xDDC320 +obj_s_toudai_light_tex_txt = 0x0607E3A8; // segment:object_00D5E000 rom:0xDDC3A8 +obj_s_toudai_arm_tex_txt = 0x0607E4A8; // segment:object_00D5E000 rom:0xDDC4A8 +obj_s_toudai_dai_tex_txt = 0x0607E528; // segment:object_00D5E000 rom:0xDDC528 +obj_s_toudai_dou_tex_txt = 0x0607E728; // segment:object_00D5E000 rom:0xDDC728 +obj_s_toudai_plate_tex_txt = 0x0607EB28; // segment:object_00D5E000 rom:0xDDCB28 +obj_s_toudai_side_tex_txt = 0x0607EBA8; // segment:object_00D5E000 rom:0xDDCBA8 +obj_s_toudai_tesuri_tex_txt = 0x0607EC28; // segment:object_00D5E000 rom:0xDDCC28 +obj_s_toudai_yane_tex_txt = 0x0607ECA8; // segment:object_00D5E000 rom:0xDDCCA8 +obj_s_toudai_glass_tex_pic_ci4_pal = 0x0607ED28; // segment:object_00D5E000 rom:0xDDCD28 +obj_s_toudai_glass_tex_pic_ci4 = 0x0607ED48; // segment:object_00D5E000 rom:0xDDCD48 +cKF_je_r_obj_s_toudai_tbl = 0x0607EDC8; // segment:object_00D5E000 rom:0xDDCDC8 +cKF_bs_r_obj_s_toudai = 0x0607EE1C; // segment:object_00D5E000 rom:0xDDCE1C +cKF_ckcb_r_obj_s_toudai_tbl = 0x0607EE24; // segment:object_00D5E000 rom:0xDDCE24 +cKF_kn_obj_s_toudai_tbl = 0x0607EE2C; // segment:object_00D5E000 rom:0xDDCE2C +cKF_c_obj_s_toudai_tbl = 0x0607EE30; // segment:object_00D5E000 rom:0xDDCE30 +cKF_ds_obj_s_toudai_tbl = 0x0607EE60; // segment:object_00D5E000 rom:0xDDCE60 +cKF_ba_r_obj_s_toudai = 0x0607EE6C; // segment:object_00D5E000 rom:0xDDCE6C + +obj_w_toudai_v = 0x0607EE90; // segment:object_00D5E000 rom:0xDDCE90 size:0x990 +obj_w_toudai_mirror_model = 0x0607F7E0; // segment:object_00D5E000 rom:0xDDD7E0 +obj_w_toudai_glass_model = 0x0607F8A8; // segment:object_00D5E000 rom:0xDDD8A8 +obj_w_toudai_body_model = 0x0607F978; // segment:object_00D5E000 rom:0xDDD978 +obj_w_toudai_light_model = 0x0607FD90; // segment:object_00D5E000 rom:0xDDDD90 +obj_w_toudai_lenz_model = 0x0607FE60; // segment:object_00D5E000 rom:0xDDDE60 +obj_w_toudai_arm_model = 0x0607FF28; // segment:object_00D5E000 rom:0xDDDF28 +obj_w_toudai_light_tex_txt = 0x0607FFB0; // segment:object_00D5E000 rom:0xDDDFB0 +obj_w_toudai_arm_tex_txt = 0x060800B0; // segment:object_00D5E000 rom:0xDDE0B0 +obj_w_toudai_dai_tex_txt = 0x06080130; // segment:object_00D5E000 rom:0xDDE130 +obj_w_toudai_dou_tex_txt = 0x06080330; // segment:object_00D5E000 rom:0xDDE330 +obj_w_toudai_plate_tex_txt = 0x06080730; // segment:object_00D5E000 rom:0xDDE730 +obj_w_toudai_side_tex_txt = 0x060807B0; // segment:object_00D5E000 rom:0xDDE7B0 +obj_w_toudai_tesuri_tex_txt = 0x06080830; // segment:object_00D5E000 rom:0xDDE830 +obj_w_toudai_yane_tex_txt = 0x060808B0; // segment:object_00D5E000 rom:0xDDE8B0 +obj_w_toudai_glass_tex_pic_ci4_pal = 0x06080930; // segment:object_00D5E000 rom:0xDDE930 +obj_w_toudai_glass_tex_pic_ci4 = 0x06080950; // segment:object_00D5E000 rom:0xDDE950 +cKF_je_r_obj_w_toudai_tbl = 0x060809D0; // segment:object_00D5E000 rom:0xDDE9D0 +cKF_bs_r_obj_w_toudai = 0x06080A24; // segment:object_00D5E000 rom:0xDDEA24 +cKF_ckcb_r_obj_w_toudai_tbl = 0x06080A2C; // segment:object_00D5E000 rom:0xDDEA2C +cKF_kn_obj_w_toudai_tbl = 0x06080A34; // segment:object_00D5E000 rom:0xDDEA34 +cKF_c_obj_w_toudai_tbl = 0x06080A38; // segment:object_00D5E000 rom:0xDDEA38 +cKF_ds_obj_w_toudai_tbl = 0x06080A68; // segment:object_00D5E000 rom:0xDDEA68 +cKF_ba_r_obj_w_toudai = 0x06080A74; // segment:object_00D5E000 rom:0xDDEA74 + +obj_s_windmill_v = 0x0608E838; // segment:object_00D5E000 rom:0xDEC838 size:0x560 +obj_s_windmill_unk_model_1 = 0x0608ED98; // segment:object_00D5E000 rom:0xDECD98 +obj_s_windmill_unk_model_2 = 0x0608EE60; // segment:object_00D5E000 rom:0xDECE60 +obj_s_windmill_unk_model_3 = 0x0608EF10; // segment:object_00D5E000 rom:0xDECF10 +obj_s_windmill_unk_model_4 = 0x0608EFE8; // segment:object_00D5E000 rom:0xDECFE8 +obj_s_windmill_unk_tex_1 = 0x0608F0D8; // segment:object_00D5E000 rom:0xDED0D8 +obj_s_windmill_unk_tex_2 = 0x0608F8D8; // segment:object_00D5E000 rom:0xDED8D8 +obj_s_windmill_unk_tex_3 = 0x060900D8; // segment:object_00D5E000 rom:0xDEE0D8 +cKF_ckcb_r_obj_s_windmill_tbl = 0x060908D8; // segment:object_00D5E000 rom:0xDEE8D8 +cKF_c_obj_s_windmill_tbl = 0x060908E0; // segment:object_00D5E000 rom:0xDEE8E0 +cKF_ba_r_obj_s_windmill = 0x06090904; // segment:object_00D5E000 rom:0xDEE904 +cKF_je_r_obj_s_windmill = 0x06090918; // segment:object_00D5E000 rom:0xDEE918 +cKF_bs_r_obj_s_windmill = 0x06090954; // segment:object_00D5E000 rom:0xDEE954 + +obj_w_windmill_v = 0x06090970; // segment:object_00D5E000 rom:0xDEE970 size:0x550 +obj_w_windmill_unk_model_1 = 0x06090EC0; // segment:object_00D5E000 rom:0xDEEEC0 +obj_w_windmill_unk_model_2 = 0x06090F88; // segment:object_00D5E000 rom:0xDEEF88 +obj_w_windmill_unk_model_3 = 0x06091038; // segment:object_00D5E000 rom:0xDEF038 +obj_w_windmill_unk_model_4 = 0x06091110; // segment:object_00D5E000 rom:0xDEF110 +obj_w_windmill_unk_tex_1 = 0x060911F8; // segment:object_00D5E000 rom:0xDEF1F8 +obj_w_windmill_unk_tex_2 = 0x060919F8; // segment:object_00D5E000 rom:0xDEF9F8 +obj_w_windmill_unk_tex_3 = 0x060921F8; // segment:object_00D5E000 rom:0xDF01F8 +cKF_ckcb_r_obj_w_windmill_tbl = 0x060929F8; // segment:object_00D5E000 rom:0xDF09F8 +cKF_c_obj_w_windmill_tbl = 0x06092A00; // segment:object_00D5E000 rom:0xDF0A00 +cKF_ba_r_obj_w_windmill = 0x06092A24; // segment:object_00D5E000 rom:0xDF0A24 +cKF_je_r_obj_w_windmill = 0x06092A38; // segment:object_00D5E000 rom:0xDF0A38 +cKF_bs_r_obj_w_windmill = 0x06092A74; // segment:object_00D5E000 rom:0xDF0A74 + +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_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 diff --git a/src/objects/object_00D5B000/object_00D5B000.c b/src/objects/object_00D5B000/object_00D5B000.c new file mode 100644 index 0000000..2851ca1 --- /dev/null +++ b/src/objects/object_00D5B000/object_00D5B000.c @@ -0,0 +1,19 @@ +// #include "assets/jp/objects/object_00D5B000/obj_s_house1_a_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_s_house1_b_pal.palette.inc.c" + +// #include "assets/jp/objects/object_00D5B000/obj_s_yamishop_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_w_yamishop_pal.palette.inc.c" + +// #include "assets/jp/objects/object_00D5B000/obj_s_windmill_a_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_s_windmill_b_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_s_windmill_c_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_s_windmill_d_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_s_windmill_e_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_w_windmill_a_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_w_windmill_b_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_w_windmill_c_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_w_windmill_d_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_w_windmill_e_pal.palette.inc.c" + +// #include "assets/jp/objects/object_00D5B000/obj_s_toudai_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5B000/obj_w_toudai_pal.palette.inc.c" diff --git a/src/objects/object_00D5E000/object_00D5E000.c b/src/objects/object_00D5E000/object_00D5E000.c new file mode 100644 index 0000000..7db807f --- /dev/null +++ b/src/objects/object_00D5E000/object_00D5E000.c @@ -0,0 +1,87 @@ +// // obj_s_yamishop +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_v.vtx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_window_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_t1_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_light_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_door1_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_door2_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_t2_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_t1_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/obj_s_yamishop_window_tex_txt.i4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/cKF_je_r_obj_s_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/cKF_bs_r_obj_s_yamishop.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/cKF_ckcb_r_obj_s_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/cKF_kn_obj_s_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/cKF_c_obj_s_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/cKF_ds_obj_s_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_yamishop/cKF_ba_r_obj_s_yamishop.inc.c" + +// // obj_w_yamishop +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_v.vtx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_window_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_t1_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_light_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_door1_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_door2_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_t2_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_t1_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/obj_w_yamishop_window_tex_txt.i4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/cKF_je_r_obj_w_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/cKF_bs_r_obj_w_yamishop.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/cKF_ckcb_r_obj_w_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/cKF_kn_obj_w_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/cKF_c_obj_w_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/cKF_ds_obj_w_yamishop_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_yamishop/cKF_ba_r_obj_w_yamishop.inc.c" + +// obj_s_toudai +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_v.vtx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_mirror_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_glass_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_body_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_light_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_lenz_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_arm_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_light_tex_txt.i8.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_arm_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_dai_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_dou_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_plate_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_side_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_tesuri_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_yane_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_glass_tex_pic_ci4_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/obj_s_toudai_glass_tex_pic_ci4.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/cKF_je_r_obj_s_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/cKF_bs_r_obj_s_toudai.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/cKF_ckcb_r_obj_s_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/cKF_kn_obj_s_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/cKF_c_obj_s_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/cKF_ds_obj_s_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_s_toudai/cKF_ba_r_obj_s_toudai.inc.c" + +// obj_w_toudai +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_v.vtx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_mirror_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_glass_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_body_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_light_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_lenz_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_arm_model.gfx.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_light_tex_txt.i8.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_arm_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_dai_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_dou_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_plate_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_side_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_tesuri_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_yane_tex_txt.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_glass_tex_pic_ci4_pal.palette.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/obj_w_toudai_glass_tex_pic_ci4.ci4.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/cKF_je_r_obj_w_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/cKF_bs_r_obj_w_toudai.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/cKF_ckcb_r_obj_w_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/cKF_kn_obj_w_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/cKF_c_obj_w_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/cKF_ds_obj_w_toudai_tbl.inc.c" +// #include "assets/jp/objects/object_00D5E000/obj_w_toudai/cKF_ba_r_obj_w_toudai.inc.c" diff --git a/src/objects/tol_cracker_1/tol_cracker_1.c b/src/objects/tol_cracker_1/tol_cracker_1.c new file mode 100644 index 0000000..d37af15 --- /dev/null +++ b/src/objects/tol_cracker_1/tol_cracker_1.c @@ -0,0 +1,6 @@ +#include "tol_cracker_1.h" + +#include "assets/jp/objects/tol_cracker_1/tol_cracker_1_v.vtx.inc.c" +#include "assets/jp/objects/tol_cracker_1/tol_cracker_1T_model.gfx.inc.c" +#include "assets/jp/objects/tol_cracker_1/tol_cracker_1_pal.palette.inc.c" +#include "assets/jp/objects/tol_cracker_1/tol_cracker_1_tex.ci4.inc.c" diff --git a/src/objects/tol_cracker_1/tol_cracker_1.h b/src/objects/tol_cracker_1/tol_cracker_1.h new file mode 100644 index 0000000..2b86462 --- /dev/null +++ b/src/objects/tol_cracker_1/tol_cracker_1.h @@ -0,0 +1,11 @@ +#ifndef OBJECT_TOL_CRACKER_1_H +#define OBJECT_TOL_CRACKER_1_H + +#include "gbi.h" + +extern Vtx tol_cracker_1_v[]; +extern Gfx tol_cracker_1T_model[]; +extern unsigned short tol_cracker_1_pal[]; +extern unsigned char tol_cracker_1_tex[]; + +#endif diff --git a/src/objects/tol_utiwa_1/tol_utiwa_1.c b/src/objects/tol_utiwa_1/tol_utiwa_1.c new file mode 100644 index 0000000..04c44ff --- /dev/null +++ b/src/objects/tol_utiwa_1/tol_utiwa_1.c @@ -0,0 +1,7 @@ +#include "tol_utiwa_1.h" + +#include "assets/jp/objects/tol_utiwa_1/tol_utiwa_1_v.vtx.inc.c" +#include "assets/jp/objects/tol_utiwa_1/main_utiwa1_model.gfx.inc.c" +#include "assets/jp/objects/tol_utiwa_1/tol_utiwa1_pal.palette.inc.c" +#include "assets/jp/objects/tol_utiwa_1/tol_utiwa_1_main1_tex_txt.ci4.inc.c" +#include "assets/jp/objects/tol_utiwa_1/tol_utiwa_1_main2_tex_txt.ci4.inc.c" diff --git a/src/objects/tol_utiwa_1/tol_utiwa_1.h b/src/objects/tol_utiwa_1/tol_utiwa_1.h new file mode 100644 index 0000000..3116154 --- /dev/null +++ b/src/objects/tol_utiwa_1/tol_utiwa_1.h @@ -0,0 +1,12 @@ +#ifndef OBJECT_TOL_UTIWA_1_H +#define OBJECT_TOL_UTIWA_1_H + +#include "gbi.h" + +extern Vtx tol_utiwa_1_v[]; +extern Gfx main_utiwa1_model[]; +extern unsigned short tol_utiwa1_pal[]; +extern unsigned char tol_utiwa_1_main1_tex_txt[]; +extern unsigned char tol_utiwa_1_main2_tex_txt[]; + +#endif diff --git a/src/overlays/actors/ovl_T_Hanabi/ac_t_hanabi.c b/src/overlays/actors/ovl_T_Hanabi/ac_t_hanabi.c index 5fc6cbe..746462e 100644 --- a/src/overlays/actors/ovl_T_Hanabi/ac_t_hanabi.c +++ b/src/overlays/actors/ovl_T_Hanabi/ac_t_hanabi.c @@ -3,6 +3,7 @@ #include "m_object.h" #include "overlays/gamestates/ovl_play/m_play.h" #include "m_rcp.h" +#include "objects/tol_utiwa_1/tol_utiwa_1.h" #define THIS ((T_Hanabi*)thisx) @@ -17,7 +18,7 @@ ActorProfile T_Hanabi_Profile = { /* */ ACTOR_PART_4, /* */ ACTOR_FLAG_10 | ACTOR_FLAG_20, /* */ 0x0000, - /* */ OBJECT_53, + /* */ OBJECT_TOL_UTIWA_1, /* */ sizeof(T_Hanabi), /* */ aTHB_actor_ct, /* */ aTHB_actor_dt, @@ -94,8 +95,6 @@ void aTHB_actor_move(Actor* thisx, Game_Play* game_play UNUSED) { } \ while (0) -extern Gfx main_utiwa1_model[]; - void aTHB_actor_draw(Actor* thisx, Game_Play* game_play) { static xyz_t D_80A200A4_jp = { 0.0f, 0.0f, 0.0f }; T_Hanabi* this = THIS; diff --git a/src/overlays/actors/ovl_Tools/ac_tools.c b/src/overlays/actors/ovl_Tools/ac_tools.c index cd27584..31aec88 100644 --- a/src/overlays/actors/ovl_Tools/ac_tools.c +++ b/src/overlays/actors/ovl_Tools/ac_tools.c @@ -95,11 +95,14 @@ ToolActor* aTOL_birth_proc(ToolName toolName, s32 arg1, ToolActor* toolActor, Ga ACTOR_T_TAMA, ACTOR_T_TAMA, }; static s16 objectTable[] = { - OBJECT_28, OBJECT_85, OBJECT_72, OBJECT_73, OBJECT_74, OBJECT_75, OBJECT_76, OBJECT_77, OBJECT_78, - OBJECT_79, OBJECT_80, OBJECT_81, OBJECT_82, OBJECT_83, OBJECT_84, OBJECT_55, OBJECT_56, OBJECT_57, - OBJECT_58, OBJECT_59, OBJECT_60, OBJECT_61, OBJECT_62, OBJECT_63, OBJECT_64, OBJECT_65, OBJECT_66, - OBJECT_67, OBJECT_68, OBJECT_69, OBJECT_70, OBJECT_71, OBJECT_45, OBJECT_53, OBJECT_53, OBJECT_395, - OBJECT_16, OBJECT_6, OBJECT_371, OBJECT_370, OBJECT_391, OBJECT_391, OBJECT_391, OBJECT_391, + OBJECT_28, OBJECT_85, OBJECT_72, OBJECT_73, OBJECT_74, OBJECT_75, + OBJECT_76, OBJECT_77, OBJECT_78, OBJECT_79, OBJECT_80, OBJECT_81, + OBJECT_82, OBJECT_83, OBJECT_84, OBJECT_55, OBJECT_56, OBJECT_57, + OBJECT_58, OBJECT_59, OBJECT_60, OBJECT_61, OBJECT_62, OBJECT_63, + OBJECT_64, OBJECT_65, OBJECT_66, OBJECT_67, OBJECT_68, OBJECT_69, + OBJECT_70, OBJECT_71, 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, }; s32 pad[3] UNUSED; ToolActor* ret = NULL; diff --git a/tools/.gitignore b/tools/.gitignore index 9f68842..66cbd68 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -1,2 +1,3 @@ ido/ *.tar.gz +pigment64/ diff --git a/tools/Makefile b/tools/Makefile index 156a306..10f6b30 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -2,11 +2,14 @@ WARNINGS_CHECK ?= 0 UNAME_S := $(shell uname -s) ifeq ($(OS),Windows_NT) - DETECTED_OS := windows + DETECTED_OS := windows + PIGMENT64_OS := x86_64-pc-windows-gnu else ifeq ($(UNAME_S),Linux) - DETECTED_OS := linux + DETECTED_OS := linux + PIGMENT64_OS := x86_64-unknown-linux-musl else ifeq ($(UNAME_S),Darwin) - DETECTED_OS := macos + DETECTED_OS := macos + PIGMENT64_OS := x86_64-apple-darwin endif @@ -23,7 +26,10 @@ IDO_5_3 := $(IDO_5_3_DIR)/cc IDO_7_1_DIR := ido/$(DETECTED_OS)/7.1 IDO_7_1 := $(IDO_7_1_DIR)/cc -all: $(IDO_5_3) $(IDO_7_1) +PIGMENT64_DIR := pigment64 +PIGMENT64 := $(PIGMENT64_DIR)/pigment64 + +all: $(IDO_5_3) $(IDO_7_1) $(PIGMENT64) $(MAKE) -C fado $(MAKE) -C z64compress @@ -46,10 +52,18 @@ $(IDO_7_1): | $(IDO_7_1_DIR) tar xf ido-7.1-recomp-$(DETECTED_OS).tar.gz -C $(IDO_7_1_DIR) $(RM) ido-7.1-recomp-$(DETECTED_OS).tar.gz +$(PIGMENT64): | $(PIGMENT64_DIR) + wget $(WGET_FLAGS) https://github.com/decompals/pigment64/releases/download/0.3.0/pigment64_0.3.0_$(PIGMENT64_OS).tar.gz + tar xf pigment64_0.3.0_$(PIGMENT64_OS).tar.gz -C $(PIGMENT64_DIR) + $(RM) pigment64_0.3.0_$(PIGMENT64_OS).tar.gz + $(IDO_5_3_DIR): mkdir -p $@ $(IDO_7_1_DIR): mkdir -p $@ +$(PIGMENT64_DIR): + mkdir -p $@ + distclean: clean diff --git a/tools/bin_inc_c.py b/tools/bin_inc_c.py new file mode 100644 index 0000000..9a78c30 --- /dev/null +++ b/tools/bin_inc_c.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +from pathlib import Path +from sys import argv +import re + +if __name__ == "__main__": + infile, outfile, cname = argv[1:] + + with open(outfile, "w") as f: + f.write(f"unsigned char {cname}[] = {{ ") + + with open(infile, "rb") as i: + for char in i.read(): + f.write(f"0x{char:02X}, ") + + f.write(f"}};\n") diff --git a/tools/splat_ext/af_ci4.py b/tools/splat_ext/af_ci4.py new file mode 100644 index 0000000..c5e9765 --- /dev/null +++ b/tools/splat_ext/af_ci4.py @@ -0,0 +1,25 @@ +from n64img.image import Image, CI4 +from splat.util import log, options +from splat.segtypes.n64.segment import N64Segment + +class N64SegAf_ci4(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] + self.palette_start = args[2] + self.palette_size = args[3] + + def scan(self, rom_bytes: bytes): + self.n64img: Image = CI4(b"", 0, 0) + self.n64img.width = self.width + self.n64img.height = self.height + self.n64img.data = rom_bytes[self.rom_start : self.rom_end] + self.n64img.set_palette(rom_bytes[self.palette_start : self.palette_start + self.palette_size]) + + def split(self, rom_bytes: bytes): + path = options.opts.asset_path / self.dir / f"{self.name}.ci4.png" + path.parent.mkdir(parents=True, exist_ok=True) + + self.n64img.write(path) diff --git a/tools/splat_ext/af_i4.py b/tools/splat_ext/af_i4.py new file mode 100644 index 0000000..54bd7b1 --- /dev/null +++ b/tools/splat_ext/af_i4.py @@ -0,0 +1,22 @@ +from n64img.image import Image, I4 +from splat.util import log, options +from splat.segtypes.n64.segment import N64Segment + +class N64SegAf_i4(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 = I4(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}.i4.png" + path.parent.mkdir(parents=True, exist_ok=True) + + self.n64img.write(path) diff --git a/tools/splat_ext/af_i8.py b/tools/splat_ext/af_i8.py new file mode 100644 index 0000000..9b167f7 --- /dev/null +++ b/tools/splat_ext/af_i8.py @@ -0,0 +1,22 @@ +from n64img.image import Image, I8 +from splat.util import log, options +from splat.segtypes.n64.segment import N64Segment + +class N64SegAf_i8(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 = I8(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}.i8.png" + path.parent.mkdir(parents=True, exist_ok=True) + + self.n64img.write(path) diff --git a/tools/splat_ext/af_palette.py b/tools/splat_ext/af_palette.py new file mode 100644 index 0000000..837e56f --- /dev/null +++ b/tools/splat_ext/af_palette.py @@ -0,0 +1,40 @@ +import struct +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +VALID_SIZES = [0x20, 0x40, 0x80, 0x100, 0x200] + +class N64SegAf_palette(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.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] + lines = [] + + if len(data) not in VALID_SIZES: + log.error(f"Error: {self.name} (0x{len(data):X} bytes) is not a valid palette size ({', '.join(hex(s) for s in VALID_SIZES)})") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"unsigned short {self.name}[] = {{") + + for short in struct.iter_unpack(">H", data): + lines.append(f" 0x{short[0]:04X},") + + 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}.palette.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/ckf_ba.py b/tools/splat_ext/ckf_ba.py new file mode 100644 index 0000000..2ac069f --- /dev/null +++ b/tools/splat_ext/ckf_ba.py @@ -0,0 +1,62 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegCkf_ba(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)) != 20: + log.error(f"Error: ckf_ba segment {self.name} length ({len(data)}) is not 20 bytes!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("\n") + lines.append(f"BaseAnimationR {symbol.name} = ") + + ckcb, ds, kn, constval, unk10, duration = struct.unpack(">IIIIhh", data) + + if ckcb: + ckcb_symbol = self.get_symbol(addr=ckcb).name + else: + ckcb_symbol = "NULL" + + if ds: + ds_symbol = self.get_symbol(addr=ds).name + else: + ds_symbol = "NULL" + + if kn: + kn_symbol = self.get_symbol(addr=kn).name + else: + kn_symbol = "NULL" + + if constval: + constval_symbol = self.get_symbol(addr=constval).name + else: + constval_symbol = "NULL" + + lines.append(f"{{ {ckcb_symbol}, {ds_symbol}, {kn_symbol}, {constval_symbol}, {unk10}, {duration} }}") + + 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/ckf_bs.py b/tools/splat_ext/ckf_bs.py new file mode 100644 index 0000000..eef56b7 --- /dev/null +++ b/tools/splat_ext/ckf_bs.py @@ -0,0 +1,42 @@ +import struct
+from typing import Optional
+from splat.util import options, log
+from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment
+
+class N64SegCkf_bs(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)) != 8:
+ log.error(f"Error: ckf_bs segment {self.name} length ({len(data)}) is not 8 bytes!")
+
+ if not self.data_only:
+ lines.append(options.opts.generated_c_preamble)
+ lines.append("\n")
+ lines.append(f"BaseSkeletonR {symbol.name} = ")
+
+ numberOfJoints, numberOfDisplayLists, jointElemTable = struct.unpack(">BBxxI", data)
+ jointelemtable_symbol = self.get_symbol(addr=jointElemTable).name
+ lines.append(f"{{ {numberOfJoints}, {numberOfDisplayLists}, {jointelemtable_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/ckf_c.py b/tools/splat_ext/ckf_c.py new file mode 100644 index 0000000..379a000 --- /dev/null +++ b/tools/splat_ext/ckf_c.py @@ -0,0 +1,42 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegCkf_c(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) // 2 + lines = [] + + if (len(data)) % 2 != 0: + log.error(f"Error: ckf_c segment {self.name} length ({len(data)}) is not a multiple of 2!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"s16 {symbol.name}[{count}] = {{") + + for byte in struct.iter_unpack(">h", 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/ckf_ckcb.py b/tools/splat_ext/ckf_ckcb.py new file mode 100644 index 0000000..f91121e --- /dev/null +++ b/tools/splat_ext/ckf_ckcb.py @@ -0,0 +1,42 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegCkf_ckcb(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 get_linker_section(self) -> str: + return ".data" + + 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) + lines = [] + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"u8 {symbol.name}[{count}] = {{") + + for byte in struct.iter_unpack(">B", data): + lines.append(f" 0x{byte[0]:02X},") + + 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/ckf_ds.py b/tools/splat_ext/ckf_ds.py new file mode 100644 index 0000000..76c9321 --- /dev/null +++ b/tools/splat_ext/ckf_ds.py @@ -0,0 +1,44 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + + +class N64SegCkf_ds(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) // 6 + lines = [] + + if (len(data)) % 6 != 0: + log.error(f"Error: ckf_ds segment {self.name} length ({len(data)}) is not a multiple of 6!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"Keyframe {symbol.name}[{count}] = {{") + + for keyframe in struct.iter_unpack(">hhh", data): + frame, value, velocity = keyframe + lines.append(f" {{ {frame:5}, {value:5}, {velocity:5} }},") + + 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/ckf_je.py b/tools/splat_ext/ckf_je.py new file mode 100644 index 0000000..c48600c --- /dev/null +++ b/tools/splat_ext/ckf_je.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 N64SegCkf_je(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) // 12 + lines = [] + + if (len(data)) % 12 != 0: + log.error(f"Error: ckf_je segment {self.name} length ({len(data)}) is not a multiple of 12 bytes!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"JointElemR {symbol.name}[{count}] = {{") + + for jointelem in struct.iter_unpack(">IBBhhh", data): + shape, numberOfChildren, displayBufferFlag, x, y, z = jointelem + + if shape == 0: + shape_symbol = "NULL" + else: + shape_symbol = self.get_symbol(addr=shape).name + + lines.append(f" {{ {shape_symbol}, {numberOfChildren}, {displayBufferFlag}, {{{x}, {y}, {z}}} }},") + + 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/ckf_kn.py b/tools/splat_ext/ckf_kn.py new file mode 100644 index 0000000..4efa957 --- /dev/null +++ b/tools/splat_ext/ckf_kn.py @@ -0,0 +1,44 @@ +import struct +from typing import Optional +from splat.util import options, log +from splat.segtypes.common.codesubsegment import CommonSegCodeSubsegment + +class N64SegCkf_kn(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 get_linker_section(self) -> str: + return ".data" + + 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) // 2 + lines = [] + + if (len(data)) % 2 != 0: + log.error(f"Error: ckf_kn segment {self.name} length ({len(data)}) is not a multiple of 2!") + + if not self.data_only: + lines.append(options.opts.generated_c_preamble) + lines.append("") + lines.append(f"s16 {symbol.name}[{count}] = {{") + + for byte in struct.iter_unpack(">h", 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/yamls/jp/assets.yaml b/yamls/jp/assets.yaml index 92e3a40..59c0ca1 100644 --- a/yamls/jp/assets.yaml +++ b/yamls/jp/assets.yaml @@ -547,14 +547,41 @@ - [0xD5A1D0] - name: object_00D5B000 - type: bin # code + dir: objects/object_00D5B000 + type: code start: 0xD5B000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: False align: 0x1000 - # subsegments: - # - [0xD5B000, data, assets/objects/object_00D5B000/object_00D5B000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, object_00D5B000] + - start: 0xD5B000 + type: data + name: object_00D5B000 + subsegments: + - [0xD5B000] + - [0xD5B008, af_palette, obj_s_house1_a_pal] + - [0xD5B028, af_palette, obj_s_house1_b_pal] + - [0xD5B048] + - [0xD5BA48, af_palette, obj_s_yamishop_pal] + - [0xD5BA68, af_palette, obj_w_yamishop_pal] + - [0xD5BA88] + - [0xD5C1E8, af_palette, obj_s_windmill_a_pal] + - [0xD5C208, af_palette, obj_s_windmill_b_pal] + - [0xD5C228, af_palette, obj_s_windmill_c_pal] + - [0xD5C248, af_palette, obj_s_windmill_d_pal] + - [0xD5C268, af_palette, obj_s_windmill_e_pal] + - [0xD5C288, af_palette, obj_w_windmill_a_pal] + - [0xD5C2A8, af_palette, obj_w_windmill_b_pal] + - [0xD5C2C8, af_palette, obj_w_windmill_c_pal] + - [0xD5C2E8, af_palette, obj_w_windmill_d_pal] + - [0xD5C308, af_palette, obj_w_windmill_e_pal] + - [0xD5C328] + - [0xD5C3A8, af_palette, obj_s_toudai_pal] + - [0xD5C3C8, af_palette, obj_w_toudai_pal] + - [0xD5C3E8] - [0xD5C3F0] - name: object_00D5D000 @@ -569,14 +596,137 @@ - [0xD5D2E0] - name: object_00D5E000 - type: bin # code + dir: objects/object_00D5E000 + type: code start: 0xD5E000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: False align: 0x1000 - # subsegments: - # - [0xD5E000, data, assets/objects/object_00D5E000/object_00D5E000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, object_00D5E000] + - start: 0xD5E000 + type: data + name: object_00D5E000 + 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] + - [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] + - [0xD5F948, ckf_je, obj_s_yamishop/cKF_je_r_obj_s_yamishop_tbl] + - [0xD5F990, ckf_bs, obj_s_yamishop/cKF_bs_r_obj_s_yamishop] + - [0xD5F998, ckf_ckcb, obj_s_yamishop/cKF_ckcb_r_obj_s_yamishop_tbl] + - [0xD5F9A0, ckf_kn, obj_s_yamishop/cKF_kn_obj_s_yamishop_tbl] + - [0xD5F9A4, ckf_c, obj_s_yamishop/cKF_c_obj_s_yamishop_tbl] + - [0xD5F9CC, ckf_ds, obj_s_yamishop/cKF_ds_obj_s_yamishop_tbl] + - [0xD5FA02] # padding + - [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] + - [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] + - [0xD61368, ckf_je, obj_w_yamishop/cKF_je_r_obj_w_yamishop_tbl] + - [0xD613B0, ckf_bs, obj_w_yamishop/cKF_bs_r_obj_w_yamishop] + - [0xD613B8, ckf_ckcb, obj_w_yamishop/cKF_ckcb_r_obj_w_yamishop_tbl] + - [0xD613C0, ckf_kn, obj_w_yamishop/cKF_kn_obj_w_yamishop_tbl] + - [0xD613C4, ckf_c, obj_w_yamishop/cKF_c_obj_w_yamishop_tbl] + - [0xD613EC, ckf_ds, obj_w_yamishop/cKF_ds_obj_w_yamishop_tbl] + - [0xD61422] # padding + - [0xD61424, ckf_ba, obj_w_yamishop/cKF_ba_r_obj_w_yamishop] + - [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] + - [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] + - [0xDDC728, af_ci4, obj_s_toudai/obj_s_toudai_dou_tex_txt, 32, 64, 0xD5C3A8, 0x20] + - [0xDDCB28, af_ci4, obj_s_toudai/obj_s_toudai_plate_tex_txt, 16, 16, 0xD5C3A8, 0x20] + - [0xDDCBA8, af_ci4, obj_s_toudai/obj_s_toudai_side_tex_txt, 16, 16, 0xD5C3A8, 0x20] + - [0xDDCC28, af_ci4, obj_s_toudai/obj_s_toudai_tesuri_tex_txt, 16, 16, 0xD5C3A8, 0x20] + - [0xDDCCA8, af_ci4, obj_s_toudai/obj_s_toudai_yane_tex_txt, 16, 16, 0xD5C3A8, 0x20] + - [0xDDCD28, af_palette, obj_s_toudai/obj_s_toudai_glass_tex_pic_ci4_pal] + - [0xDDCD48, af_ci4, obj_s_toudai/obj_s_toudai_glass_tex_pic_ci4, 16, 16, 0xDDCD28, 0x20] + - [0xDDCDC8, ckf_je, obj_s_toudai/cKF_je_r_obj_s_toudai_tbl] + - [0xDDCE1C, ckf_bs, obj_s_toudai/cKF_bs_r_obj_s_toudai] + - [0xDDCE24, ckf_ckcb, obj_s_toudai/cKF_ckcb_r_obj_s_toudai_tbl] + - [0xDDCE2C, ckf_kn, obj_s_toudai/cKF_kn_obj_s_toudai_tbl] + - [0xDDCE30, ckf_c, obj_s_toudai/cKF_c_obj_s_toudai_tbl] + - [0xDDCE60, ckf_ds, obj_s_toudai/cKF_ds_obj_s_toudai_tbl] + - [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] + - [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] + - [0xDDE330, af_ci4, obj_w_toudai/obj_w_toudai_dou_tex_txt, 32, 64, 0xD5C3C8, 0x20] + - [0xDDE730, af_ci4, obj_w_toudai/obj_w_toudai_plate_tex_txt, 16, 16, 0xD5C3C8, 0x20] + - [0xDDE7B0, af_ci4, obj_w_toudai/obj_w_toudai_side_tex_txt, 16, 16, 0xD5C3C8, 0x20] + - [0xDDE830, af_ci4, obj_w_toudai/obj_w_toudai_tesuri_tex_txt, 16, 16, 0xD5C3C8, 0x20] + - [0xDDE8B0, af_ci4, obj_w_toudai/obj_w_toudai_yane_tex_txt, 16, 16, 0xD5C3C8, 0x20] + - [0xDDE930, af_palette, obj_w_toudai/obj_w_toudai_glass_tex_pic_ci4_pal] + - [0xDDE950, af_ci4, obj_w_toudai/obj_w_toudai_glass_tex_pic_ci4, 16, 16, 0xDDE930, 0x20] + - [0xDDE9D0, ckf_je, obj_w_toudai/cKF_je_r_obj_w_toudai_tbl] + - [0xDDEA24, ckf_bs, obj_w_toudai/cKF_bs_r_obj_w_toudai] + - [0xDDEA2C, ckf_ckcb, obj_w_toudai/cKF_ckcb_r_obj_w_toudai_tbl] + - [0xDDEA34, ckf_kn, obj_w_toudai/cKF_kn_obj_w_toudai_tbl] + - [0xDDEA38, ckf_c, obj_w_toudai/cKF_c_obj_w_toudai_tbl] + - [0xDDEA68, ckf_ds, obj_w_toudai/cKF_ds_obj_w_toudai_tbl] + - [0xDDEA74, ckf_ba, obj_w_toudai/cKF_ba_r_obj_w_toudai] + - [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] + - [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] + - [0xDEE8D8, ckf_ckcb, obj_s_windmill/cKF_ckcb_r_obj_s_windmill_tbl] + - [0xDEE8E0, ckf_c, obj_s_windmill/cKF_c_obj_s_windmill_tbl] + - [0xDEE904, ckf_ba, obj_s_windmill/cKF_ba_r_obj_s_windmill] + - [0xDEE918, ckf_je, obj_s_windmill/cKF_je_r_obj_s_windmill] + - [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] + - [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] + - [0xDF09F8, ckf_ckcb, obj_w_windmill/cKF_ckcb_r_obj_w_windmill_tbl] + - [0xDF0A00, ckf_c, obj_w_windmill/cKF_c_obj_w_windmill_tbl] + - [0xDF0A24, ckf_ba, obj_w_windmill/cKF_ba_r_obj_w_windmill] + - [0xDF0A38, ckf_je, obj_w_windmill/cKF_je_r_obj_w_windmill] + - [0xDF0A74, ckf_bs, obj_w_windmill/cKF_bs_r_obj_w_windmill] + - [0xDF0A7C] # padding - [0xDF3480] - name: object_00DF4000 @@ -4468,15 +4618,26 @@ # - [0x1127000, data, assets/objects/object_01127000/object_01127000] - [0x1127A40] - - name: object_01128000 - type: bin # code + - name: tol_utiwa_1 + dir: objects/tol_utiwa_1 + type: code start: 0x1128000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x1128000, data, assets/objects/object_01128000/object_01128000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, tol_utiwa_1] + - start: 0x1128000 + type: .data + name: tol_utiwa_1 + subsegments: + - [0x1128000, vtx, tol_utiwa_1_v] + - [0x1128080, 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] - [0x11285B0] - name: object_01129000 @@ -4534,15 +4695,25 @@ # - [0x112D000, data, assets/objects/object_0112D000/object_0112D000] - [0x112E1E0] - - name: object_0112F000 - type: bin # code + - name: tol_cracker_1 + dir: objects/tol_cracker_1 + type: code start: 0x112F000 vram: 0x06000000 exclusive_ram_id: segment_06 compress: True align: 0x1000 - # subsegments: - # - [0x112F000, data, assets/objects/object_0112F000/object_0112F000] + symbol_name_format: $VRAM_$ROM + subsegments: + - [auto, c, tol_cracker_1] + - start: 0x112F000 + type: .data + name: tol_cracker_1 + subsegments: + - [0x112F000, vtx, tol_cracker_1_v] + - [0x112F1C0, 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 diff --git a/yamls/jp/header.yaml b/yamls/jp/header.yaml index 5e370dd..b78766d 100644 --- a/yamls/jp/header.yaml +++ b/yamls/jp/header.yaml @@ -19,13 +19,14 @@ options: - linker_scripts/jp/symbol_addrs_code.txt - linker_scripts/jp/symbol_addrs_buffers.txt - linker_scripts/jp/symbol_addrs_overlays.txt + - linker_scripts/jp/symbol_addrs_assets.txt - linker_scripts/jp/ignored_addresses.txt reloc_addrs_path: - relocs/reloc_addrs.jp.txt asm_path: asm/jp src_path: src - asset_path: bin/jp + asset_path: assets/jp build_path: build |
